From a221afdf4c622d2205e2c26987926c89e5895daa Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Tue, 9 Jun 2026 20:21:45 +0300 Subject: [PATCH 1/9] feat(appearance): check component appearance contracts --- .pnp.cjs | 71 ++++++- .../appearance-map.generator.ts | 121 +++++++++++ .../appearance/src/appearance-map/index.ts | 1 + .../appearance-style.generator.ts | 141 +++++++++++-- .../component-appearance-contracts.test.ts | 193 ++++++++++++++++++ .../appearance/src/appearance.generator.ts | 50 ++++- generators/appearance/src/index.ts | 1 + .../create-appearance-styles.interfaces.ts | 5 +- .../create-appearance-styles.util.ts | 8 +- ui-parts/button/package.json | 1 + ui-parts/button/src/styles/appearance.css.ts | 33 ++- .../create-appearance-styles.interfaces.ts | 8 - .../create-appearance-styles.util.ts | 16 -- .../utils/create-appearance-styles/index.ts | 3 +- .../checkbox/src/box/styles/appearance.css.ts | 1 - ui-parts/checkbox/src/check/appearance.css.ts | 20 ++ ui-parts/checkbox/src/check/check.css.ts | 18 -- ui-parts/checkbox/src/check/index.ts | 1 + ui-parts/input/package.json | 1 + ui-parts/input/src/styles/appearance.css.ts | 3 +- .../create-appearance-styles.interfaces.ts | 7 - .../create-appearance-styles.util.ts | 14 -- .../utils/create-appearance-styles/index.ts | 3 +- yarn.lock | 4 +- 24 files changed, 622 insertions(+), 102 deletions(-) create mode 100644 generators/appearance/src/appearance-map/appearance-map.generator.ts create mode 100644 generators/appearance/src/appearance-map/index.ts create mode 100644 generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts delete mode 100644 ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts delete mode 100644 ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.util.ts create mode 100644 ui-parts/checkbox/src/check/appearance.css.ts delete mode 100644 ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts delete mode 100644 ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.util.ts diff --git a/.pnp.cjs b/.pnp.cjs index e2ef13478..66ed8b196 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -248,7 +248,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/text", ["workspace:ui-admin/text"]],\ ["@atls-ui-admin/theme", ["virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-admin/theme", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/theme", "workspace:ui-admin/theme"]],\ ["@atls-ui-admin/upload", ["workspace:ui-admin/upload"]],\ - ["@atls-ui-generators/appearance", ["workspace:generators/appearance"]],\ + ["@atls-ui-generators/appearance", ["virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance", "workspace:generators/appearance"]],\ ["@atls-ui-generators/components", ["workspace:generators/components"]],\ ["@atls-ui-generators/icons", ["workspace:generators/icons"]],\ ["@atls-ui-generators/locales", ["workspace:generators/locales"]],\ @@ -738,6 +738,70 @@ const RAW_RUNTIME_STATE = }]\ ]],\ ["@atls-ui-generators/appearance", [\ + ["virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:generators/appearance", {\ + "packageLocation": "./.yarn/__virtual__/@atls-ui-generators-appearance-virtual-b2d4646deb/1/generators/appearance/",\ + "packageDependencies": [\ + ["@atls-ui-generators/appearance", "virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:generators/appearance"],\ + ["@atls-ui-generators/utils", "workspace:generators/utils"],\ + ["@swc-node/register", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.9.0"],\ + ["@swc/core", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.6.1"],\ + ["@types/node", "npm:22.15.3"],\ + ["@types/react", "npm:19.1.2"],\ + ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ + ["@types/vanilla-extract__css", null],\ + ["@types/vanilla-extract__dynamic", null],\ + ["@vanilla-extract/css", "npm:1.17.1"],\ + ["@vanilla-extract/dynamic", "npm:2.1.2"],\ + ["commander", "npm:13.1.0"],\ + ["react", "npm:19.1.0"],\ + ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["tsx", "npm:4.19.3"],\ + ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "@types/vanilla-extract__css",\ + "@types/vanilla-extract__dynamic",\ + "@vanilla-extract/css",\ + "@vanilla-extract/dynamic",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "SOFT"\ + }],\ + ["virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance", {\ + "packageLocation": "./.yarn/__virtual__/@atls-ui-generators-appearance-virtual-0ba6f9713b/1/generators/appearance/",\ + "packageDependencies": [\ + ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ + ["@atls-ui-generators/utils", "workspace:generators/utils"],\ + ["@swc-node/register", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.9.0"],\ + ["@swc/core", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.6.1"],\ + ["@types/node", "npm:22.15.3"],\ + ["@types/react", "npm:19.1.2"],\ + ["@types/react-dom", null],\ + ["@types/vanilla-extract__css", null],\ + ["@types/vanilla-extract__dynamic", null],\ + ["@vanilla-extract/css", "npm:1.17.1"],\ + ["@vanilla-extract/dynamic", "npm:2.1.2"],\ + ["commander", "npm:13.1.0"],\ + ["react", "npm:19.1.0"],\ + ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["tsx", "npm:4.19.3"],\ + ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"]\ + ],\ + "packagePeers": [\ + "@types/react-dom",\ + "@types/react",\ + "@types/vanilla-extract__css",\ + "@types/vanilla-extract__dynamic",\ + "@vanilla-extract/css",\ + "@vanilla-extract/dynamic",\ + "react-dom",\ + "react"\ + ],\ + "linkType": "SOFT"\ + }],\ ["workspace:generators/appearance", {\ "packageLocation": "./generators/appearance/",\ "packageDependencies": [\ @@ -869,6 +933,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-button-virtual-dbe1a421ee/1/ui-parts/button/",\ "packageDependencies": [\ ["@atls-ui-parts/button", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-parts/button"],\ + ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ ["@atls-utils/use-hover", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:utils/use-hover"],\ @@ -901,6 +966,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-button-virtual-ab74b0ad21/1/ui-parts/button/",\ "packageDependencies": [\ ["@atls-ui-parts/button", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/button"],\ + ["@atls-ui-generators/appearance", "virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:generators/appearance"],\ ["@atls-ui-parts/layout", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout"],\ ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ ["@atls-utils/use-hover", "virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:utils/use-hover"],\ @@ -933,6 +999,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/button/",\ "packageDependencies": [\ ["@atls-ui-parts/button", "workspace:ui-parts/button"],\ + ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ ["@atls-utils/use-hover", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:utils/use-hover"],\ @@ -1336,6 +1403,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-input-virtual-8480592f2a/1/ui-parts/input/",\ "packageDependencies": [\ ["@atls-ui-parts/input", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:ui-parts/input"],\ + ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ ["@atls-ui-parts/events-state", "virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/events-state"],\ ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ @@ -1370,6 +1438,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/input/",\ "packageDependencies": [\ ["@atls-ui-parts/input", "workspace:ui-parts/input"],\ + ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ ["@atls-ui-parts/events-state", "virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/events-state"],\ ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ diff --git a/generators/appearance/src/appearance-map/appearance-map.generator.ts b/generators/appearance/src/appearance-map/appearance-map.generator.ts new file mode 100644 index 000000000..ba5c9653b --- /dev/null +++ b/generators/appearance/src/appearance-map/appearance-map.generator.ts @@ -0,0 +1,121 @@ +/* eslint-disable n/no-sync */ +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import { writeFileSync } from 'node:fs' + +import { pretty } from '@atls-ui-generators/utils' + +export interface AppearanceMapImport { + import: string + from: string + kind?: 'type' | 'value' +} + +export interface AppearanceMapStyle { + exported?: boolean + name: string + properties: Record +} + +export interface AppearanceMapExport { + name: string + entries: Record + typeName?: string + variants?: Array + variantsType?: string +} + +export interface AppearanceMapGeneratorOptions { + exports?: Array + imports?: Array + styles?: Array +} + +export class AppearanceMapGenerator { + constructor(private readonly options: AppearanceMapGeneratorOptions) { + assert.ok(options.imports?.length, 'Imports are required') + assert.ok(options.styles?.length || options.exports?.length, 'Styles or exports are required') + } + + async generateFileContent(): Promise { + return pretty(` + ${this.generateImports()} + ${this.generateStyles()} + ${this.generateExports()} + `) + } + + async generateFile(path: string, filename = 'appearance.css.ts'): Promise { + if (path.split('').pop() === '/') { + throw new Error("Path should not end with '/' character") + } + + const code = await this.generateFileContent() + + writeFileSync(`${path}/${filename}`, code) + } + + async checkFile(path: string, filename = 'appearance.css.ts'): Promise { + if (path.split('').pop() === '/') { + throw new Error("Path should not end with '/' character") + } + + const expected = await this.generateFileContent() + const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) + + assert.equal(actual, expected, `${path}/${filename} is out of date`) + } + + private generateImports(): string { + return (this.options.imports ?? []) + .map((requiredImport) => { + if (requiredImport.kind === 'type') { + return `import type ${requiredImport.import} from '${requiredImport.from}'` + } + + return `import ${requiredImport.import} from '${requiredImport.from}'` + }) + .join('\n') + } + + private generateStyles(): string { + return (this.options.styles ?? []) + .map((styleDeclaration) => { + const properties = Object.entries(styleDeclaration.properties) + .map(([property, value]) => `${property}: ${value},`) + .join('\n') + + return `${styleDeclaration.exported ? 'export ' : ''}const ${styleDeclaration.name} = style({ + ${properties} + })` + }) + .join('\n\n') + } + + private generateExports(): string { + return (this.options.exports ?? []) + .map((exportDeclaration) => { + const entries = Object.entries(exportDeclaration.entries) + .map(([name, value]) => `${name}: ${value},`) + .join('\n') + + if ( + exportDeclaration.typeName && + (exportDeclaration.variants?.length || exportDeclaration.variantsType) + ) { + const variants = + exportDeclaration.variantsType ?? + exportDeclaration.variants?.map((variant) => `'${variant}'`).join(' | ') + + return `export const ${exportDeclaration.name}: Record<${variants}, ${exportDeclaration.typeName}> = { + ${entries} + }` + } + + return `export const ${exportDeclaration.name} = { + ${entries} + }` + }) + .join('\n\n') + } +} diff --git a/generators/appearance/src/appearance-map/index.ts b/generators/appearance/src/appearance-map/index.ts new file mode 100644 index 000000000..9fca2d7bb --- /dev/null +++ b/generators/appearance/src/appearance-map/index.ts @@ -0,0 +1 @@ +export * from './appearance-map.generator.js' diff --git a/generators/appearance/src/appearance-style/appearance-style.generator.ts b/generators/appearance/src/appearance-style/appearance-style.generator.ts index 5a7847635..3ad658c9f 100644 --- a/generators/appearance/src/appearance-style/appearance-style.generator.ts +++ b/generators/appearance/src/appearance-style/appearance-style.generator.ts @@ -2,6 +2,7 @@ import type { ColorSchemes } from '../appearance.interfaces.js' import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' import { writeFileSync } from 'node:fs' import { pretty } from '@atls-ui-generators/utils' @@ -9,24 +10,67 @@ import { pretty } from '@atls-ui-generators/utils' import { capitalizeFirstLetter } from '../utils/index.js' import { getAppearanceStylesName } from '../utils/index.js' +export interface AppearanceStyleImport { + import: string + from: string + kind?: 'type' | 'value' +} + +export interface AppearanceStyleDeclaration { + backgroundColor?: string + border?: string + borderColor?: string + fontColor?: string +} + +export interface AppearanceStyleExport { + name: string + typeName: string + states: Record +} + +export interface AppearanceStyleGeneratorOptions { + createAppearanceStylesImport?: AppearanceStyleImport + extraImports?: Array + stateOverrides?: Record + states?: Array + varsImport?: AppearanceStyleImport + variants?: Array + appearanceExport?: AppearanceStyleExport +} + export class AppearanceStyleGenerator { - readonly requiredImports = [ - { import: '{ vars }', from: '@ui/theme/theme-css' }, - { import: '{ createAppearanceStyles }', from: '@atls-ui-generators/appearance/create' }, - ] + readonly requiredImports: Array #variants: Array = [] #states: Array = [] + readonly #options: AppearanceStyleGeneratorOptions + constructor( private readonly prefix: string, - private readonly colorSchemes: ColorSchemes + private readonly colorSchemes: ColorSchemes, + options: AppearanceStyleGeneratorOptions = {} ) { + this.#options = options + this.requiredImports = [ + ...(options.extraImports ?? []), + options.varsImport ?? { import: '{ vars }', from: '@ui/theme/theme-css' }, + options.createAppearanceStylesImport ?? { + import: '{ createAppearanceStyles }', + from: '@atls-ui-generators/appearance/create', + }, + ] + const colorsKeys = Object.keys(this.colorSchemes).filter((key) => key.startsWith(`${this.prefix}.`)) + const overrideVariants = Object.keys(options.stateOverrides ?? {}) - assert.ok(colorsKeys.length, `Not found color keys for prefix '${this.prefix}'`) + assert.ok( + colorsKeys.length || overrideVariants.length, + `Not found color keys for prefix '${this.prefix}'` + ) colorsKeys.forEach((key) => { assert.match( @@ -41,7 +85,7 @@ export class AppearanceStyleGenerator { [] ) - this.#variants = [...new Set(allVariants)] + this.#variants = options.variants ?? [...new Set([...allVariants, ...overrideVariants])] const allStates = colorsKeys.reduce>( (array, key) => @@ -51,7 +95,7 @@ export class AppearanceStyleGenerator { [] ) - this.#states = [...new Set(allStates)] + this.#states = options.states ?? [...new Set(allStates)] } async generateAppearanceStyles(): Promise< @@ -62,42 +106,71 @@ export class AppearanceStyleGenerator { ) const appearanceStyles = await pretty( - this.#states.map((state) => this.generateVariantAppearanceStyles(state)).join('\n\n') + [ + ...this.#states.map((state) => this.generateVariantAppearanceStyles(state)), + this.generateAppearanceExport(), + ].join('\n\n') ) const imports = await pretty( this.requiredImports - .map((requiredImport) => `import ${requiredImport.import} from '${requiredImport.from}'`) + .map((requiredImport) => { + if (requiredImport.kind === 'type') { + return `import type ${requiredImport.import} from '${requiredImport.from}'` + } + + return `import ${requiredImport.import} from '${requiredImport.from}'` + }) .join('\n') ) return { statefulStyles, appearanceStyles, imports } } - async generateFile(path: string, filename = 'appearance.css.ts'): Promise { + async generateFileContent(): Promise { const generated = await this.generateAppearanceStyles() - const code = await pretty(` + return pretty(` ${generated.imports} ${generated.statefulStyles} ${generated.appearanceStyles} `) + } + async generateFile(path: string, filename = 'appearance.css.ts'): Promise { if (path.split('').pop() === '/') { throw new Error("Path should not end with '/' character") } + const code = await this.generateFileContent() + writeFileSync(`${path}/${filename}`, code) } + async checkFile(path: string, filename = 'appearance.css.ts'): Promise { + if (path.split('').pop() === '/') { + throw new Error("Path should not end with '/' character") + } + + const expected = await this.generateFileContent() + const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) + + assert.equal(actual, expected, `${path}/${filename} is out of date`) + } + private generateVariantStatefulStyles(variant: string): string { const lines: Array = [] for (const state of this.#states) { + const override = this.#options.stateOverrides?.[variant] + const declaration = override ?? { + fontColor: `vars.colors['${this.prefix}.${variant}.${state}.font']`, + backgroundColor: `vars.colors['${this.prefix}.${variant}.${state}.background']`, + borderColor: `vars.colors['${this.prefix}.${variant}.${state}.border']`, + } + lines.push(`const ${getAppearanceStylesName(variant, state)} = createAppearanceStyles({ - fontColor: vars.colors['${this.prefix}.${variant}.${state}.font'], - backgroundColor: vars.colors['${this.prefix}.${variant}.${state}.background'], - borderColor: vars.colors['${this.prefix}.${variant}.${state}.border'], + ${this.generateDeclaration(declaration)} })`) } @@ -125,4 +198,42 @@ export class AppearanceStyleGenerator { ${variantStyles} }` } + + private generateDeclaration(declaration: AppearanceStyleDeclaration): string { + return Object.entries(declaration) + .filter(([, value]) => typeof value !== 'undefined') + .map(([property, value]) => `${property}: ${value},`) + .join('\n') + } + + private generateAppearanceExport(): string { + const appearanceExport = this.#options.appearanceExport + + if (!appearanceExport) return '' + + const variants = this.#variants.map((variant) => `'${variant}'`).join(' | ') + const entries = this.#variants + .map((variant) => { + const states = Object.entries(appearanceExport.states) + .map(([property, state]) => { + if (state === 'default') { + return `${property}: appearanceVariant.${variant},` + } + + const stateName = capitalizeFirstLetter(state) + + return `${property}: appearance${stateName}.${variant}${stateName},` + }) + .join('\n') + + return `${variant}: { + ${states} + },` + }) + .join('\n') + + return `export const ${appearanceExport.name}: Record<${variants}, ${appearanceExport.typeName}> = { + ${entries} + }` + } } diff --git a/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts b/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts new file mode 100644 index 000000000..ec99d1de1 --- /dev/null +++ b/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts @@ -0,0 +1,193 @@ +import { dirname } from 'node:path' +import { join } from 'node:path' +import { describe } from 'node:test' +import { it } from 'node:test' +import { fileURLToPath } from 'node:url' + +import { AppearanceMapGenerator } from '@atls-ui-generators/appearance' +import { AppearanceStyleGenerator } from '@atls-ui-generators/appearance' + +import { colors } from '../../../../../ui-parts/theme/src/tokens/colors.js' + +const currentDir = dirname(fileURLToPath(import.meta.url)) +const rootDir = join(currentDir, '../../../../..') + +const partsThemeImport = { import: '{ vars }', from: '@atls-ui-parts/theme' } +const styleImport = { import: '{ style }', from: '@vanilla-extract/css' } +const createAppearanceStylesImport = { + import: '{ createAppearanceStyles }', + from: '@atls-ui-generators/appearance', +} + +const checkContract = async ( + name: string, + generator: AppearanceStyleGenerator | AppearanceMapGenerator, + path: string +): Promise => { + try { + await generator.checkFile(path) + } catch (error) { + throw new Error(`${name}: ${(error as Error).message}`) + } +} + +describe('component appearance contracts', () => { + it('checks generated appearance files', async () => { + await checkContract( + 'button', + new AppearanceStyleGenerator('button', colors, { + extraImports: [{ import: '{ ButtonAppearance }', from: './interfaces.js', kind: 'type' }], + varsImport: partsThemeImport, + createAppearanceStylesImport, + states: ['default', 'hover', 'pressed', 'disabled'], + variants: ['blue', 'lightBlue', 'ghost'], + stateOverrides: { + ghost: { + fontColor: "'inherit'", + backgroundColor: "'transparent'", + border: "'none'", + }, + }, + appearanceExport: { + name: 'buttonAppearances', + typeName: 'ButtonAppearance', + states: { + default: 'default', + hover: 'hover', + pressed: 'pressed', + disabled: 'disabled', + }, + }, + }), + join(rootDir, 'ui-parts/button/src/styles') + ) + + await checkContract( + 'input', + new AppearanceStyleGenerator('input', colors, { + extraImports: [{ import: '{ InputAppearance }', from: './interfaces.js', kind: 'type' }], + varsImport: partsThemeImport, + createAppearanceStylesImport, + states: ['default', 'disabled'], + variants: ['blue', 'white'], + appearanceExport: { + name: 'inputAppearances', + typeName: 'InputAppearance', + states: { + default: 'default', + disabled: 'disabled', + }, + }, + }), + join(rootDir, 'ui-parts/input/src/styles') + ) + + await checkContract( + 'checkbox box', + new AppearanceMapGenerator({ + imports: [partsThemeImport, styleImport], + styles: [ + { name: 'boxBlueAppearanceStyles', properties: { border: 'vars.borders.normalBlue' } }, + { name: 'boxGreenAppearanceStyles', properties: { border: 'vars.borders.normalGreen' } }, + { name: 'boxRedAppearanceStyles', properties: { border: 'vars.borders.normalRed' } }, + ], + exports: [ + { + name: 'boxAppearanceStyles', + entries: { + blue: 'boxBlueAppearanceStyles', + green: 'boxGreenAppearanceStyles', + red: 'boxRedAppearanceStyles', + }, + }, + ], + }), + join(rootDir, 'ui-parts/checkbox/src/box/styles') + ) + + await checkContract( + 'checkbox check', + new AppearanceMapGenerator({ + imports: [partsThemeImport, styleImport], + styles: [ + { + name: 'checkBlueAppearanceStyles', + properties: { backgroundColor: 'vars.colors.blue' }, + }, + { + name: 'checkGreenAppearanceStyles', + properties: { backgroundColor: 'vars.colors.green' }, + }, + { + name: 'checkRedAppearanceStyles', + properties: { backgroundColor: 'vars.colors.red' }, + }, + ], + exports: [ + { + name: 'checkAppearanceStyles', + entries: { + blue: 'checkBlueAppearanceStyles', + green: 'checkGreenAppearanceStyles', + red: 'checkRedAppearanceStyles', + }, + }, + ], + }), + join(rootDir, 'ui-parts/checkbox/src/check') + ) + + await checkContract( + 'checkbox label', + new AppearanceMapGenerator({ + imports: [styleImport], + styles: [ + { + exported: true, + name: 'labelAppearanceStyles', + properties: { color: "'black'" }, + }, + ], + }), + join(rootDir, 'ui-parts/checkbox/src/label/styles') + ) + + await checkContract( + 'checkbox', + new AppearanceMapGenerator({ + imports: [ + { import: '{ CheckboxAppearance }', from: '../checkbox.interfaces.js', kind: 'type' }, + { import: '{ CheckboxAppearanceName }', from: '../checkbox.interfaces.js', kind: 'type' }, + { import: '{ boxAppearanceStyles }', from: '../box/index.js' }, + { import: '{ checkAppearanceStyles }', from: '../check/index.js' }, + { import: '{ labelAppearanceStyles }', from: '../label/index.js' }, + ], + exports: [ + { + name: 'checkboxAppearances', + typeName: 'CheckboxAppearance', + variantsType: 'CheckboxAppearanceName', + entries: { + blue: `{ + box: boxAppearanceStyles.blue, + check: checkAppearanceStyles.blue, + label: labelAppearanceStyles, + }`, + green: `{ + box: boxAppearanceStyles.green, + check: checkAppearanceStyles.green, + label: labelAppearanceStyles, + }`, + red: `{ + box: boxAppearanceStyles.red, + check: checkAppearanceStyles.red, + label: labelAppearanceStyles, + }`, + }, + }, + ], + }), + join(rootDir, 'ui-parts/checkbox/src/styles') + ) + }) +}) diff --git a/generators/appearance/src/appearance.generator.ts b/generators/appearance/src/appearance.generator.ts index db5feda03..c41c649eb 100644 --- a/generators/appearance/src/appearance.generator.ts +++ b/generators/appearance/src/appearance.generator.ts @@ -21,10 +21,32 @@ try { .argument('path ', 'Path to save the styles') .requiredOption('-t, --theme path ', 'Path to colors file') .requiredOption('-p, --prefix color ', 'Prefix of color styles') + .option('-c, --check', 'Check generated styles without writing files') + .option('--vars-from package ', 'Module to import vars from', '@ui/theme/theme-css') + .option( + '--styles-from package ', + 'Module to import createAppearanceStyles from', + '@atls-ui-generators/appearance/create' + ) + .option('-s, --states states ', 'Comma-separated states to include') .parse(process.argv) const path = program.args.at(0) - const { theme: themePath, prefix } = program.opts() + const { + check, + states, + stylesFrom, + theme: themePath, + prefix, + varsFrom, + } = program.opts() as { + check?: boolean + prefix?: string + states?: string + stylesFrom: string + theme?: string + varsFrom: string + } assert.ok(path && typeof path === 'string', 'Path to save the styles is required') assert.ok(lstatSync(path).isDirectory(), 'Path to save the styles should point to a directory.') @@ -40,15 +62,33 @@ try { const colors = Object.values(exports)?.[0] as ColorSchemes - const generator = new AppearanceStyleGenerator(prefix, colors) + const generator = new AppearanceStyleGenerator(prefix, colors, { + states: states + ? states + .split(',') + .map((state: string) => state.trim()) + .filter(Boolean) + : undefined, + varsImport: { import: '{ vars }', from: varsFrom }, + createAppearanceStylesImport: { import: '{ createAppearanceStyles }', from: stylesFrom }, + }) const genPath = join(process.cwd(), path) - logger.info(`Appearance styles generation started into ${path}`) + if (check) { + logger.info(`Appearance styles check started for ${path}`) - await generator.generateFile(genPath) + await generator.checkFile(genPath) - logger.info(`Generated into ${path}`) + logger.info(`Appearance styles are up to date in ${path}`) + } else { + logger.info(`Appearance styles generation started into ${path}`) + + await generator.generateFile(genPath) + + logger.info(`Generated into ${path}`) + } } catch (error) { logger.error(error) + process.exitCode = 1 } diff --git a/generators/appearance/src/index.ts b/generators/appearance/src/index.ts index 2748a1e2c..c0aefb5ba 100644 --- a/generators/appearance/src/index.ts +++ b/generators/appearance/src/index.ts @@ -1,3 +1,4 @@ export * from './appearance-style/index.js' +export * from './appearance-map/index.js' export * from './utils/create-appearance-styles/index.js' export type * from './appearance.interfaces.js' diff --git a/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts b/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts index 0509ffbea..9704e1e99 100644 --- a/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts +++ b/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts @@ -1,7 +1,10 @@ import type { CSSProperties } from 'react' -export interface InputAppearanceStyles { +export interface AppearanceStyles { fontColor: CSSProperties['color'] backgroundColor: CSSProperties['backgroundColor'] + border?: CSSProperties['border'] borderColor?: CSSProperties['borderColor'] } + +export type InputAppearanceStyles = AppearanceStyles diff --git a/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.util.ts b/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.util.ts index 79fcffec4..dedf9ee49 100644 --- a/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.util.ts +++ b/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.util.ts @@ -1,14 +1,16 @@ -import type { InputAppearanceStyles } from './create-appearance-styles.interfaces.js' +import type { AppearanceStyles } from './create-appearance-styles.interfaces.js' -import { style } from '@vanilla-extract/css' +import { style } from '@vanilla-extract/css' export const createAppearanceStyles = ({ fontColor, backgroundColor, + border, borderColor, -}: InputAppearanceStyles): string => +}: AppearanceStyles): string => style({ color: fontColor, backgroundColor, + border, borderColor: borderColor || backgroundColor, }) diff --git a/ui-parts/button/package.json b/ui-parts/button/package.json index 9614a9403..737586975 100644 --- a/ui-parts/button/package.json +++ b/ui-parts/button/package.json @@ -13,6 +13,7 @@ "postpack": "rm -rf dist" }, "dependencies": { + "@atls-ui-generators/appearance": "workspace:*", "@atls-ui-parts/theme": "workspace:*", "@atls-utils/use-hover": "workspace:*", "clsx": "2.1.1", diff --git a/ui-parts/button/src/styles/appearance.css.ts b/ui-parts/button/src/styles/appearance.css.ts index 22b15eeba..dced32008 100644 --- a/ui-parts/button/src/styles/appearance.css.ts +++ b/ui-parts/button/src/styles/appearance.css.ts @@ -1,9 +1,8 @@ import type { ButtonAppearance } from './interfaces.js' +import { createAppearanceStyles } from '@atls-ui-generators/appearance' import { vars } from '@atls-ui-parts/theme' -import { createAppearanceStyles } from '../utils/index.js' - const appearanceBlueDefaultStyles = createAppearanceStyles({ fontColor: vars.colors['button.blue.default.font'], backgroundColor: vars.colors['button.blue.default.background'], @@ -52,7 +51,25 @@ const appearanceLightBlueDisabledStyles = createAppearanceStyles({ borderColor: vars.colors['button.lightBlue.disabled.border'], }) -const appearanceGhostStyles = createAppearanceStyles({ +const appearanceGhostDefaultStyles = createAppearanceStyles({ + fontColor: 'inherit', + backgroundColor: 'transparent', + border: 'none', +}) + +const appearanceGhostHoverStyles = createAppearanceStyles({ + fontColor: 'inherit', + backgroundColor: 'transparent', + border: 'none', +}) + +const appearanceGhostPressedStyles = createAppearanceStyles({ + fontColor: 'inherit', + backgroundColor: 'transparent', + border: 'none', +}) + +const appearanceGhostDisabledStyles = createAppearanceStyles({ fontColor: 'inherit', backgroundColor: 'transparent', border: 'none', @@ -61,28 +78,28 @@ const appearanceGhostStyles = createAppearanceStyles({ export const appearanceVariant = { blue: appearanceBlueDefaultStyles, lightBlue: appearanceLightBlueDefaultStyles, - ghost: appearanceGhostStyles, + ghost: appearanceGhostDefaultStyles, } export const appearanceHover = { blueHover: appearanceBlueHoverStyles, lightBlueHover: appearanceLightBlueHoverStyles, - ghostHover: appearanceGhostStyles, + ghostHover: appearanceGhostHoverStyles, } export const appearancePressed = { bluePressed: appearanceBluePressedStyles, lightBluePressed: appearanceLightBluePressedStyles, - ghostPressed: appearanceGhostStyles, + ghostPressed: appearanceGhostPressedStyles, } export const appearanceDisabled = { blueDisabled: appearanceBlueDisabledStyles, lightBlueDisabled: appearanceLightBlueDisabledStyles, - ghostDisabled: appearanceGhostStyles, + ghostDisabled: appearanceGhostDisabledStyles, } -export const buttonAppearances: Record<'blue' | 'ghost' | 'lightBlue', ButtonAppearance> = { +export const buttonAppearances: Record<'blue' | 'lightBlue' | 'ghost', ButtonAppearance> = { blue: { default: appearanceVariant.blue, hover: appearanceHover.blueHover, diff --git a/ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts b/ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts deleted file mode 100644 index 39148f120..000000000 --- a/ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { CSSProperties } from 'react' - -export interface ButtonAppearanceStyles { - fontColor: CSSProperties['color'] - backgroundColor: CSSProperties['backgroundColor'] - border?: CSSProperties['border'] - borderColor?: CSSProperties['borderColor'] -} diff --git a/ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.util.ts b/ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.util.ts deleted file mode 100644 index 2d4d69d93..000000000 --- a/ui-parts/button/src/utils/create-appearance-styles/create-appearance-styles.util.ts +++ /dev/null @@ -1,16 +0,0 @@ -import type { ButtonAppearanceStyles } from './create-appearance-styles.interfaces.js' - -import { style } from '@vanilla-extract/css' - -export const createAppearanceStyles = ({ - fontColor, - backgroundColor, - border, - borderColor, -}: ButtonAppearanceStyles): string => - style({ - color: fontColor, - backgroundColor, - border, - borderColor: borderColor || backgroundColor, - }) diff --git a/ui-parts/button/src/utils/create-appearance-styles/index.ts b/ui-parts/button/src/utils/create-appearance-styles/index.ts index 0c1399769..1261e0929 100644 --- a/ui-parts/button/src/utils/create-appearance-styles/index.ts +++ b/ui-parts/button/src/utils/create-appearance-styles/index.ts @@ -1 +1,2 @@ -export * from './create-appearance-styles.util.js' +export { createAppearanceStyles } from '@atls-ui-generators/appearance' +export type { AppearanceStyles as ButtonAppearanceStyles } from '@atls-ui-generators/appearance' diff --git a/ui-parts/checkbox/src/box/styles/appearance.css.ts b/ui-parts/checkbox/src/box/styles/appearance.css.ts index b24315ad4..c31dfeba5 100644 --- a/ui-parts/checkbox/src/box/styles/appearance.css.ts +++ b/ui-parts/checkbox/src/box/styles/appearance.css.ts @@ -13,7 +13,6 @@ const boxGreenAppearanceStyles = style({ const boxRedAppearanceStyles = style({ border: vars.borders.normalRed, }) - export const boxAppearanceStyles = { blue: boxBlueAppearanceStyles, green: boxGreenAppearanceStyles, diff --git a/ui-parts/checkbox/src/check/appearance.css.ts b/ui-parts/checkbox/src/check/appearance.css.ts new file mode 100644 index 000000000..6c7e8d526 --- /dev/null +++ b/ui-parts/checkbox/src/check/appearance.css.ts @@ -0,0 +1,20 @@ +import { style } from '@vanilla-extract/css' + +import { vars } from '@atls-ui-parts/theme' + +const checkBlueAppearanceStyles = style({ + backgroundColor: vars.colors.blue, +}) + +const checkGreenAppearanceStyles = style({ + backgroundColor: vars.colors.green, +}) + +const checkRedAppearanceStyles = style({ + backgroundColor: vars.colors.red, +}) +export const checkAppearanceStyles = { + blue: checkBlueAppearanceStyles, + green: checkGreenAppearanceStyles, + red: checkRedAppearanceStyles, +} diff --git a/ui-parts/checkbox/src/check/check.css.ts b/ui-parts/checkbox/src/check/check.css.ts index 9a125b31f..d9ee52253 100644 --- a/ui-parts/checkbox/src/check/check.css.ts +++ b/ui-parts/checkbox/src/check/check.css.ts @@ -12,24 +12,6 @@ export const checkCheckedStyles = style({ display: 'flex', }) -const checkBlueAppearanceStyles = style({ - backgroundColor: vars.colors.blue, -}) - -const checkGreenAppearanceStyles = style({ - backgroundColor: vars.colors.green, -}) - -const checkRedAppearanceStyles = style({ - backgroundColor: vars.colors.red, -}) - -export const checkAppearanceStyles = { - blue: checkBlueAppearanceStyles, - green: checkGreenAppearanceStyles, - red: checkRedAppearanceStyles, -} - export const checkShapeStyles = style({ width: `calc(100% - ${vars.radii.f3})`, height: `calc(100% - ${vars.radii.f3})`, diff --git a/ui-parts/checkbox/src/check/index.ts b/ui-parts/checkbox/src/check/index.ts index 0102fcdc9..49bb43b2a 100644 --- a/ui-parts/checkbox/src/check/index.ts +++ b/ui-parts/checkbox/src/check/index.ts @@ -1 +1,2 @@ +export * from './appearance.css.js' export * from './check.css.js' diff --git a/ui-parts/input/package.json b/ui-parts/input/package.json index ae616e4c9..e4b2572d6 100644 --- a/ui-parts/input/package.json +++ b/ui-parts/input/package.json @@ -13,6 +13,7 @@ "postpack": "rm -rf dist" }, "dependencies": { + "@atls-ui-generators/appearance": "workspace:*", "@atls-ui-parts/theme": "workspace:*", "clsx": "2.1.1", "rainbow-sprinkles": "1.0.0" diff --git a/ui-parts/input/src/styles/appearance.css.ts b/ui-parts/input/src/styles/appearance.css.ts index 719959490..0b2f06dbb 100644 --- a/ui-parts/input/src/styles/appearance.css.ts +++ b/ui-parts/input/src/styles/appearance.css.ts @@ -1,9 +1,8 @@ import type { InputAppearance } from './interfaces.js' +import { createAppearanceStyles } from '@atls-ui-generators/appearance' import { vars } from '@atls-ui-parts/theme' -import { createAppearanceStyles } from '../utils/index.js' - const appearanceBlueDefaultStyles = createAppearanceStyles({ fontColor: vars.colors['input.blue.default.font'], backgroundColor: vars.colors['input.blue.default.background'], diff --git a/ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts b/ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts deleted file mode 100644 index 0509ffbea..000000000 --- a/ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { CSSProperties } from 'react' - -export interface InputAppearanceStyles { - fontColor: CSSProperties['color'] - backgroundColor: CSSProperties['backgroundColor'] - borderColor?: CSSProperties['borderColor'] -} diff --git a/ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.util.ts b/ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.util.ts deleted file mode 100644 index 79fcffec4..000000000 --- a/ui-parts/input/src/utils/create-appearance-styles/create-appearance-styles.util.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { InputAppearanceStyles } from './create-appearance-styles.interfaces.js' - -import { style } from '@vanilla-extract/css' - -export const createAppearanceStyles = ({ - fontColor, - backgroundColor, - borderColor, -}: InputAppearanceStyles): string => - style({ - color: fontColor, - backgroundColor, - borderColor: borderColor || backgroundColor, - }) diff --git a/ui-parts/input/src/utils/create-appearance-styles/index.ts b/ui-parts/input/src/utils/create-appearance-styles/index.ts index 0c1399769..6f414db2c 100644 --- a/ui-parts/input/src/utils/create-appearance-styles/index.ts +++ b/ui-parts/input/src/utils/create-appearance-styles/index.ts @@ -1 +1,2 @@ -export * from './create-appearance-styles.util.js' +export { createAppearanceStyles } from '@atls-ui-generators/appearance' +export type { AppearanceStyles as InputAppearanceStyles } from '@atls-ui-generators/appearance' diff --git a/yarn.lock b/yarn.lock index f7f883afc..29dec7079 100644 --- a/yarn.lock +++ b/yarn.lock @@ -270,7 +270,7 @@ __metadata: languageName: unknown linkType: soft -"@atls-ui-generators/appearance@workspace:generators/appearance": +"@atls-ui-generators/appearance@workspace:*, @atls-ui-generators/appearance@workspace:generators/appearance": version: 0.0.0-use.local resolution: "@atls-ui-generators/appearance@workspace:generators/appearance" dependencies: @@ -410,6 +410,7 @@ __metadata: version: 0.0.0-use.local resolution: "@atls-ui-parts/button@workspace:ui-parts/button" dependencies: + "@atls-ui-generators/appearance": "workspace:*" "@atls-ui-parts/layout": "workspace:*" "@atls-ui-parts/theme": "workspace:*" "@atls-utils/use-hover": "workspace:*" @@ -640,6 +641,7 @@ __metadata: version: 0.0.0-use.local resolution: "@atls-ui-parts/input@workspace:ui-parts/input" dependencies: + "@atls-ui-generators/appearance": "workspace:*" "@atls-ui-parts/condition": "workspace:*" "@atls-ui-parts/events-state": "workspace:*" "@atls-ui-parts/layout": "workspace:*" From efcab6526649648f554c521f7299fbdfa9e1bbf1 Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Tue, 9 Jun 2026 21:19:46 +0300 Subject: [PATCH 2/9] fix(appearance): use runtime create export --- generators/appearance/package.json | 4 ++++ .../src/appearance-style/appearance-style.generator.ts | 7 +++++-- .../tests/component-appearance-contracts.test.ts | 4 ++-- generators/appearance/src/appearance.generator.ts | 4 ++-- ui-parts/button/src/styles/appearance.css.ts | 4 ++-- .../button/src/utils/create-appearance-styles/index.ts | 4 ++-- ui-parts/input/src/styles/appearance.css.ts | 2 +- ui-parts/input/src/utils/create-appearance-styles/index.ts | 4 ++-- 8 files changed, 20 insertions(+), 13 deletions(-) diff --git a/generators/appearance/package.json b/generators/appearance/package.json index d7de98a64..66d115b5b 100644 --- a/generators/appearance/package.json +++ b/generators/appearance/package.json @@ -3,6 +3,10 @@ "version": "1.1.3", "license": "BSD-3-Clause", "type": "module", + "exports": { + ".": "./src/index.ts", + "./create": "./src/utils/create-appearance-styles/index.ts" + }, "main": "./src/index.ts", "bin": { "generate-styles": "dist/appearance.generator.js" diff --git a/generators/appearance/src/appearance-style/appearance-style.generator.ts b/generators/appearance/src/appearance-style/appearance-style.generator.ts index 3ad658c9f..449802013 100644 --- a/generators/appearance/src/appearance-style/appearance-style.generator.ts +++ b/generators/appearance/src/appearance-style/appearance-style.generator.ts @@ -207,11 +207,14 @@ export class AppearanceStyleGenerator { } private generateAppearanceExport(): string { - const appearanceExport = this.#options.appearanceExport + const { appearanceExport } = this.#options if (!appearanceExport) return '' - const variants = this.#variants.map((variant) => `'${variant}'`).join(' | ') + const variants = [...this.#variants] + .sort() + .map((variant) => `'${variant}'`) + .join(' | ') const entries = this.#variants .map((variant) => { const states = Object.entries(appearanceExport.states) diff --git a/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts b/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts index ec99d1de1..41ae7ecf9 100644 --- a/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts +++ b/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts @@ -16,12 +16,12 @@ const partsThemeImport = { import: '{ vars }', from: '@atls-ui-parts/theme' } const styleImport = { import: '{ style }', from: '@vanilla-extract/css' } const createAppearanceStylesImport = { import: '{ createAppearanceStyles }', - from: '@atls-ui-generators/appearance', + from: '@atls-ui-generators/appearance/create', } const checkContract = async ( name: string, - generator: AppearanceStyleGenerator | AppearanceMapGenerator, + generator: AppearanceMapGenerator | AppearanceStyleGenerator, path: string ): Promise => { try { diff --git a/generators/appearance/src/appearance.generator.ts b/generators/appearance/src/appearance.generator.ts index c41c649eb..14aba1fb1 100644 --- a/generators/appearance/src/appearance.generator.ts +++ b/generators/appearance/src/appearance.generator.ts @@ -39,14 +39,14 @@ try { theme: themePath, prefix, varsFrom, - } = program.opts() as { + } = program.opts<{ check?: boolean prefix?: string states?: string stylesFrom: string theme?: string varsFrom: string - } + }>() assert.ok(path && typeof path === 'string', 'Path to save the styles is required') assert.ok(lstatSync(path).isDirectory(), 'Path to save the styles should point to a directory.') diff --git a/ui-parts/button/src/styles/appearance.css.ts b/ui-parts/button/src/styles/appearance.css.ts index dced32008..275047154 100644 --- a/ui-parts/button/src/styles/appearance.css.ts +++ b/ui-parts/button/src/styles/appearance.css.ts @@ -1,6 +1,6 @@ import type { ButtonAppearance } from './interfaces.js' -import { createAppearanceStyles } from '@atls-ui-generators/appearance' +import { createAppearanceStyles } from '@atls-ui-generators/appearance/create' import { vars } from '@atls-ui-parts/theme' const appearanceBlueDefaultStyles = createAppearanceStyles({ @@ -99,7 +99,7 @@ export const appearanceDisabled = { ghostDisabled: appearanceGhostDisabledStyles, } -export const buttonAppearances: Record<'blue' | 'lightBlue' | 'ghost', ButtonAppearance> = { +export const buttonAppearances: Record<'blue' | 'ghost' | 'lightBlue', ButtonAppearance> = { blue: { default: appearanceVariant.blue, hover: appearanceHover.blueHover, diff --git a/ui-parts/button/src/utils/create-appearance-styles/index.ts b/ui-parts/button/src/utils/create-appearance-styles/index.ts index 1261e0929..16afc940d 100644 --- a/ui-parts/button/src/utils/create-appearance-styles/index.ts +++ b/ui-parts/button/src/utils/create-appearance-styles/index.ts @@ -1,2 +1,2 @@ -export { createAppearanceStyles } from '@atls-ui-generators/appearance' -export type { AppearanceStyles as ButtonAppearanceStyles } from '@atls-ui-generators/appearance' +export { createAppearanceStyles } from '@atls-ui-generators/appearance/create' +export type { AppearanceStyles as ButtonAppearanceStyles } from '@atls-ui-generators/appearance/create' diff --git a/ui-parts/input/src/styles/appearance.css.ts b/ui-parts/input/src/styles/appearance.css.ts index 0b2f06dbb..a331f6ec5 100644 --- a/ui-parts/input/src/styles/appearance.css.ts +++ b/ui-parts/input/src/styles/appearance.css.ts @@ -1,6 +1,6 @@ import type { InputAppearance } from './interfaces.js' -import { createAppearanceStyles } from '@atls-ui-generators/appearance' +import { createAppearanceStyles } from '@atls-ui-generators/appearance/create' import { vars } from '@atls-ui-parts/theme' const appearanceBlueDefaultStyles = createAppearanceStyles({ diff --git a/ui-parts/input/src/utils/create-appearance-styles/index.ts b/ui-parts/input/src/utils/create-appearance-styles/index.ts index 6f414db2c..7a2d9f5c3 100644 --- a/ui-parts/input/src/utils/create-appearance-styles/index.ts +++ b/ui-parts/input/src/utils/create-appearance-styles/index.ts @@ -1,2 +1,2 @@ -export { createAppearanceStyles } from '@atls-ui-generators/appearance' -export type { AppearanceStyles as InputAppearanceStyles } from '@atls-ui-generators/appearance' +export { createAppearanceStyles } from '@atls-ui-generators/appearance/create' +export type { AppearanceStyles as InputAppearanceStyles } from '@atls-ui-generators/appearance/create' From 4d541757ebf57387b7e1f2e5bba1f34b1681d3f8 Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Fri, 12 Jun 2026 15:49:42 +0300 Subject: [PATCH 3/9] refactor(appearance): enforce component style schemas --- .pnp.cjs | 1 + generators/appearance/README.md | 5 +- generators/appearance/package.json | 12 +- .../appearance-map.generator.ts | 121 ------ .../appearance/src/appearance-map/index.ts | 1 - .../appearance-style.generator.ts | 242 ----------- .../appearance/src/appearance-style/index.ts | 1 - ...earance-styles.generator.test.constants.ts | 398 ------------------ ...arance-styles.generator.test.interfaces.ts | 6 - .../tests/appearance-styles.generator.test.ts | 77 ---- .../component-appearance-contracts.test.ts | 193 --------- .../appearance/src/appearance.generator.ts | 94 ----- .../appearance/src/appearance.interfaces.ts | 1 - generators/appearance/src/generator.ts | 63 +++ generators/appearance/src/index.ts | 6 +- generators/appearance/src/map/generator.ts | 104 +++++ generators/appearance/src/map/interfaces.ts | 7 + generators/appearance/src/schema/generator.ts | 40 ++ generators/appearance/src/schema/index.ts | 2 + .../appearance/src/schema/interfaces.ts | 66 +++ generators/appearance/src/style/generator.ts | 185 ++++++++ generators/appearance/src/style/index.ts | 2 + generators/appearance/src/style/interfaces.ts | 7 + .../src/style/tests/generator.test.ts | 106 +++++ generators/appearance/src/utils/index.ts | 1 - ui-parts/button/package.json | 2 +- ui-parts/button/src/styles/appearance.css.ts | 8 +- ui-parts/button/src/styles/schema.test.ts | 16 + ui-parts/button/src/styles/schema.ts | 48 +++ .../utils/create-appearance-styles/index.ts | 4 +- ui-parts/checkbox/package.json | 1 + ui-parts/checkbox/src/styles/schema.test.ts | 16 + ui-parts/checkbox/src/styles/schema.ts | 206 +++++++++ ui-parts/input/package.json | 2 +- ui-parts/input/src/styles/appearance.css.ts | 5 +- ui-parts/input/src/styles/schema.test.ts | 16 + ui-parts/input/src/styles/schema.ts | 30 ++ .../utils/create-appearance-styles/index.ts | 4 +- .../create-appearance-styles.interfaces.ts | 2 - .../create-appearance-styles.util.ts | 0 .../utils/create-appearance-styles/index.ts | 2 +- ui-parts/theme/src/utils/index.ts | 1 + yarn.lock | 3 +- 43 files changed, 936 insertions(+), 1171 deletions(-) delete mode 100644 generators/appearance/src/appearance-map/appearance-map.generator.ts delete mode 100644 generators/appearance/src/appearance-map/index.ts delete mode 100644 generators/appearance/src/appearance-style/appearance-style.generator.ts delete mode 100644 generators/appearance/src/appearance-style/index.ts delete mode 100644 generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.constants.ts delete mode 100644 generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.interfaces.ts delete mode 100644 generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.ts delete mode 100644 generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts delete mode 100644 generators/appearance/src/appearance.generator.ts delete mode 100644 generators/appearance/src/appearance.interfaces.ts create mode 100644 generators/appearance/src/generator.ts create mode 100644 generators/appearance/src/map/generator.ts create mode 100644 generators/appearance/src/map/interfaces.ts create mode 100644 generators/appearance/src/schema/generator.ts create mode 100644 generators/appearance/src/schema/index.ts create mode 100644 generators/appearance/src/schema/interfaces.ts create mode 100644 generators/appearance/src/style/generator.ts create mode 100644 generators/appearance/src/style/index.ts create mode 100644 generators/appearance/src/style/interfaces.ts create mode 100644 generators/appearance/src/style/tests/generator.test.ts create mode 100644 ui-parts/button/src/styles/schema.test.ts create mode 100644 ui-parts/button/src/styles/schema.ts create mode 100644 ui-parts/checkbox/src/styles/schema.test.ts create mode 100644 ui-parts/checkbox/src/styles/schema.ts create mode 100644 ui-parts/input/src/styles/schema.test.ts create mode 100644 ui-parts/input/src/styles/schema.ts rename {generators/appearance => ui-parts/theme}/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts (82%) rename {generators/appearance => ui-parts/theme}/src/utils/create-appearance-styles/create-appearance-styles.util.ts (100%) rename {generators/appearance => ui-parts/theme}/src/utils/create-appearance-styles/index.ts (100%) diff --git a/.pnp.cjs b/.pnp.cjs index 66ed8b196..389711bb9 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -1067,6 +1067,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/checkbox/",\ "packageDependencies": [\ ["@atls-ui-parts/checkbox", "workspace:ui-parts/checkbox"],\ + ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ diff --git a/generators/appearance/README.md b/generators/appearance/README.md index 2cdfa63ca..de651b36b 100644 --- a/generators/appearance/README.md +++ b/generators/appearance/README.md @@ -5,7 +5,8 @@ ``` generate-styles --help -generate-styles ./mocks -t ./mocks/colors.ts -p button +generate-styles ./src/styles/schema.ts --check +generate-styles ./src/styles/schema.ts --write ``` ### Разработка @@ -13,5 +14,5 @@ generate-styles ./mocks -t ./mocks/colors.ts -p button Запуск тестов ``` -yarn test unit appearance-styles.generator.test.ts +yarn test unit generator.test.ts ``` diff --git a/generators/appearance/package.json b/generators/appearance/package.json index 66d115b5b..e4b5e2c1f 100644 --- a/generators/appearance/package.json +++ b/generators/appearance/package.json @@ -4,19 +4,18 @@ "license": "BSD-3-Clause", "type": "module", "exports": { - ".": "./src/index.ts", - "./create": "./src/utils/create-appearance-styles/index.ts" + ".": "./src/index.ts" }, "main": "./src/index.ts", "bin": { - "generate-styles": "dist/appearance.generator.js" + "generate-styles": "dist/generator.js" }, "files": [ "dist" ], "scripts": { "build": "yarn library build", - "generate-styles": "tsx src/appearance.generator.ts", + "generate-styles": "tsx src/generator.ts", "prepack": "yarn run build", "postpack": "rm -rf dist" }, @@ -48,11 +47,6 @@ "import": "./dist/index.js", "types": "./dist/index.d.ts", "default": "./dist/index.js" - }, - "./create": { - "import": "./dist/utils/create-appearance-styles/index.js", - "types": "./dist/utils/create-appearance-styles/index.d.ts", - "default": "./dist/utils/create-appearance-styles/index.js" } }, "main": "dist/index.js", diff --git a/generators/appearance/src/appearance-map/appearance-map.generator.ts b/generators/appearance/src/appearance-map/appearance-map.generator.ts deleted file mode 100644 index ba5c9653b..000000000 --- a/generators/appearance/src/appearance-map/appearance-map.generator.ts +++ /dev/null @@ -1,121 +0,0 @@ -/* eslint-disable n/no-sync */ -import assert from 'node:assert/strict' -import { readFileSync } from 'node:fs' -import { writeFileSync } from 'node:fs' - -import { pretty } from '@atls-ui-generators/utils' - -export interface AppearanceMapImport { - import: string - from: string - kind?: 'type' | 'value' -} - -export interface AppearanceMapStyle { - exported?: boolean - name: string - properties: Record -} - -export interface AppearanceMapExport { - name: string - entries: Record - typeName?: string - variants?: Array - variantsType?: string -} - -export interface AppearanceMapGeneratorOptions { - exports?: Array - imports?: Array - styles?: Array -} - -export class AppearanceMapGenerator { - constructor(private readonly options: AppearanceMapGeneratorOptions) { - assert.ok(options.imports?.length, 'Imports are required') - assert.ok(options.styles?.length || options.exports?.length, 'Styles or exports are required') - } - - async generateFileContent(): Promise { - return pretty(` - ${this.generateImports()} - ${this.generateStyles()} - ${this.generateExports()} - `) - } - - async generateFile(path: string, filename = 'appearance.css.ts'): Promise { - if (path.split('').pop() === '/') { - throw new Error("Path should not end with '/' character") - } - - const code = await this.generateFileContent() - - writeFileSync(`${path}/${filename}`, code) - } - - async checkFile(path: string, filename = 'appearance.css.ts'): Promise { - if (path.split('').pop() === '/') { - throw new Error("Path should not end with '/' character") - } - - const expected = await this.generateFileContent() - const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) - - assert.equal(actual, expected, `${path}/${filename} is out of date`) - } - - private generateImports(): string { - return (this.options.imports ?? []) - .map((requiredImport) => { - if (requiredImport.kind === 'type') { - return `import type ${requiredImport.import} from '${requiredImport.from}'` - } - - return `import ${requiredImport.import} from '${requiredImport.from}'` - }) - .join('\n') - } - - private generateStyles(): string { - return (this.options.styles ?? []) - .map((styleDeclaration) => { - const properties = Object.entries(styleDeclaration.properties) - .map(([property, value]) => `${property}: ${value},`) - .join('\n') - - return `${styleDeclaration.exported ? 'export ' : ''}const ${styleDeclaration.name} = style({ - ${properties} - })` - }) - .join('\n\n') - } - - private generateExports(): string { - return (this.options.exports ?? []) - .map((exportDeclaration) => { - const entries = Object.entries(exportDeclaration.entries) - .map(([name, value]) => `${name}: ${value},`) - .join('\n') - - if ( - exportDeclaration.typeName && - (exportDeclaration.variants?.length || exportDeclaration.variantsType) - ) { - const variants = - exportDeclaration.variantsType ?? - exportDeclaration.variants?.map((variant) => `'${variant}'`).join(' | ') - - return `export const ${exportDeclaration.name}: Record<${variants}, ${exportDeclaration.typeName}> = { - ${entries} - }` - } - - return `export const ${exportDeclaration.name} = { - ${entries} - }` - }) - .join('\n\n') - } -} diff --git a/generators/appearance/src/appearance-map/index.ts b/generators/appearance/src/appearance-map/index.ts deleted file mode 100644 index 9fca2d7bb..000000000 --- a/generators/appearance/src/appearance-map/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './appearance-map.generator.js' diff --git a/generators/appearance/src/appearance-style/appearance-style.generator.ts b/generators/appearance/src/appearance-style/appearance-style.generator.ts deleted file mode 100644 index 449802013..000000000 --- a/generators/appearance/src/appearance-style/appearance-style.generator.ts +++ /dev/null @@ -1,242 +0,0 @@ -/* eslint-disable n/no-sync */ -import type { ColorSchemes } from '../appearance.interfaces.js' - -import assert from 'node:assert/strict' -import { readFileSync } from 'node:fs' -import { writeFileSync } from 'node:fs' - -import { pretty } from '@atls-ui-generators/utils' - -import { capitalizeFirstLetter } from '../utils/index.js' -import { getAppearanceStylesName } from '../utils/index.js' - -export interface AppearanceStyleImport { - import: string - from: string - kind?: 'type' | 'value' -} - -export interface AppearanceStyleDeclaration { - backgroundColor?: string - border?: string - borderColor?: string - fontColor?: string -} - -export interface AppearanceStyleExport { - name: string - typeName: string - states: Record -} - -export interface AppearanceStyleGeneratorOptions { - createAppearanceStylesImport?: AppearanceStyleImport - extraImports?: Array - stateOverrides?: Record - states?: Array - varsImport?: AppearanceStyleImport - variants?: Array - appearanceExport?: AppearanceStyleExport -} - -export class AppearanceStyleGenerator { - readonly requiredImports: Array - - #variants: Array = [] - - #states: Array = [] - - readonly #options: AppearanceStyleGeneratorOptions - - constructor( - private readonly prefix: string, - private readonly colorSchemes: ColorSchemes, - options: AppearanceStyleGeneratorOptions = {} - ) { - this.#options = options - this.requiredImports = [ - ...(options.extraImports ?? []), - options.varsImport ?? { import: '{ vars }', from: '@ui/theme/theme-css' }, - options.createAppearanceStylesImport ?? { - import: '{ createAppearanceStyles }', - from: '@atls-ui-generators/appearance/create', - }, - ] - - const colorsKeys = Object.keys(this.colorSchemes).filter((key) => - key.startsWith(`${this.prefix}.`)) - const overrideVariants = Object.keys(options.stateOverrides ?? {}) - - assert.ok( - colorsKeys.length || overrideVariants.length, - `Not found color keys for prefix '${this.prefix}'` - ) - - colorsKeys.forEach((key) => { - assert.match( - key, - /^[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+\.(font|background|border)$/, - `Color key should match the pattern 'prefix.variant.state.type', where 'type' can be 'font', 'background', or 'border'. Received: '${key}'` - ) - }) - - const allVariants = colorsKeys.reduce>( - (array, key) => [...array, key.split('.')[1]], - [] - ) - - this.#variants = options.variants ?? [...new Set([...allVariants, ...overrideVariants])] - - const allStates = colorsKeys.reduce>( - (array, key) => - key.startsWith(`${this.prefix}.${this.#variants[0]}`) - ? [...array, key.split('.')[2]] - : array, - [] - ) - - this.#states = options.states ?? [...new Set(allStates)] - } - - async generateAppearanceStyles(): Promise< - Record<'appearanceStyles' | 'imports' | 'statefulStyles', string> - > { - const statefulStyles = await pretty( - this.#variants.map((variant) => this.generateVariantStatefulStyles(variant)).join('\n\n') - ) - - const appearanceStyles = await pretty( - [ - ...this.#states.map((state) => this.generateVariantAppearanceStyles(state)), - this.generateAppearanceExport(), - ].join('\n\n') - ) - - const imports = await pretty( - this.requiredImports - .map((requiredImport) => { - if (requiredImport.kind === 'type') { - return `import type ${requiredImport.import} from '${requiredImport.from}'` - } - - return `import ${requiredImport.import} from '${requiredImport.from}'` - }) - .join('\n') - ) - - return { statefulStyles, appearanceStyles, imports } - } - - async generateFileContent(): Promise { - const generated = await this.generateAppearanceStyles() - - return pretty(` - ${generated.imports} - ${generated.statefulStyles} - ${generated.appearanceStyles} - `) - } - - async generateFile(path: string, filename = 'appearance.css.ts'): Promise { - if (path.split('').pop() === '/') { - throw new Error("Path should not end with '/' character") - } - - const code = await this.generateFileContent() - - writeFileSync(`${path}/${filename}`, code) - } - - async checkFile(path: string, filename = 'appearance.css.ts'): Promise { - if (path.split('').pop() === '/') { - throw new Error("Path should not end with '/' character") - } - - const expected = await this.generateFileContent() - const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) - - assert.equal(actual, expected, `${path}/${filename} is out of date`) - } - - private generateVariantStatefulStyles(variant: string): string { - const lines: Array = [] - - for (const state of this.#states) { - const override = this.#options.stateOverrides?.[variant] - const declaration = override ?? { - fontColor: `vars.colors['${this.prefix}.${variant}.${state}.font']`, - backgroundColor: `vars.colors['${this.prefix}.${variant}.${state}.background']`, - borderColor: `vars.colors['${this.prefix}.${variant}.${state}.border']`, - } - - lines.push(`const ${getAppearanceStylesName(variant, state)} = createAppearanceStyles({ - ${this.generateDeclaration(declaration)} - })`) - } - - return lines.join('\n\n') - } - - private generateVariantAppearanceStyles(state: string): string { - if (state === 'default') { - const variantStyles = this.#variants - .map((variant) => `${variant}: ${getAppearanceStylesName(variant, 'Default')},`) - .join('\n') - - return `export const appearanceVariant = { - ${variantStyles} - }` - } - - const stateName = capitalizeFirstLetter(state) - - const variantStyles = this.#variants - .map((variant) => `${variant}${stateName}: ${getAppearanceStylesName(variant, stateName)},`) - .join('\n') - - return `export const appearance${stateName} = { - ${variantStyles} - }` - } - - private generateDeclaration(declaration: AppearanceStyleDeclaration): string { - return Object.entries(declaration) - .filter(([, value]) => typeof value !== 'undefined') - .map(([property, value]) => `${property}: ${value},`) - .join('\n') - } - - private generateAppearanceExport(): string { - const { appearanceExport } = this.#options - - if (!appearanceExport) return '' - - const variants = [...this.#variants] - .sort() - .map((variant) => `'${variant}'`) - .join(' | ') - const entries = this.#variants - .map((variant) => { - const states = Object.entries(appearanceExport.states) - .map(([property, state]) => { - if (state === 'default') { - return `${property}: appearanceVariant.${variant},` - } - - const stateName = capitalizeFirstLetter(state) - - return `${property}: appearance${stateName}.${variant}${stateName},` - }) - .join('\n') - - return `${variant}: { - ${states} - },` - }) - .join('\n') - - return `export const ${appearanceExport.name}: Record<${variants}, ${appearanceExport.typeName}> = { - ${entries} - }` - } -} diff --git a/generators/appearance/src/appearance-style/index.ts b/generators/appearance/src/appearance-style/index.ts deleted file mode 100644 index a17c99c33..000000000 --- a/generators/appearance/src/appearance-style/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './appearance-style.generator.js' diff --git a/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.constants.ts b/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.constants.ts deleted file mode 100644 index 97c3d13e9..000000000 --- a/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.constants.ts +++ /dev/null @@ -1,398 +0,0 @@ -import type { TestCase } from './appearance-styles.generator.test.interfaces.js' - -import * as path from 'node:path' - -export const dirname = path.dirname(new URL(import.meta.url).pathname) - -export const testCases: Array = [ - { - prefix: 'input', - colors: { - 'input.blue.default.font': 'rgba(255, 255, 255, 1)', - 'input.blue.default.background': 'rgba(65, 109, 223, 1)', - 'input.blue.default.border': 'rgba(0,0,0,0)', - 'input.blue.hover.font': 'rgba(255, 255, 255, 1)', - 'input.blue.hover.background': 'rgba(0, 66, 236, 1)', - 'input.blue.hover.border': 'rgba(0,0,0,0)', - 'input.blue.focus.font': 'rgba(255, 255, 255, 1)', - 'input.blue.focus.background': 'rgba(0, 66, 236, 1)', - 'input.blue.focus.border': 'rgba(0,0,0,0)', - 'input.blue.active.font': 'rgba(255, 255, 255, 1)', - 'input.blue.active.background': 'rgba(0, 66, 236, 1)', - 'input.blue.active.border': 'rgba(0,0,0,0)', - 'input.blue.disabled.font': 'rgba(138, 138, 138, 1)', - 'input.blue.disabled.background': 'rgba(212, 212, 212, 1)', - 'input.blue.disabled.border': 'rgba(0,0,0,0)', - - 'input.white.default.font': 'rgb(0,0,0)', - 'input.white.default.background': 'rgba(212, 212, 212, 1)', - 'input.white.default.border': 'transparent', - 'input.white.hover.font': 'rgb(0,0,0)', - 'input.white.hover.background': 'rgba(212, 212, 212, 1)', - 'input.white.hover.border': 'transparent', - 'input.white.focus.font': 'rgb(0,0,0)', - 'input.white.focus.background': 'rgba(212, 212, 212, 1)', - 'input.white.focus.border': 'rgb(0,0,0)', - 'input.white.active.font': 'rgb(0,0,0)', - 'input.white.active.background': 'rgba(212, 212, 212, 1)', - 'input.white.active.border': 'transparent', - 'input.white.disabled.font': 'rgb(0,0,0)', - 'input.white.disabled.background': 'rgba(71, 84, 103, 1)', - 'input.white.disabled.border': 'transparent', - }, - expectedCode: `import { vars } from '@ui/theme/theme-css' - -import { createAppearanceStyles } from '@atls-ui-generators/appearance/create' - -const appearanceBlueDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['input.blue.default.font'], - backgroundColor: vars.colors['input.blue.default.background'], - borderColor: vars.colors['input.blue.default.border'], -}) - -const appearanceBlueHoverStyles = createAppearanceStyles({ - fontColor: vars.colors['input.blue.hover.font'], - backgroundColor: vars.colors['input.blue.hover.background'], - borderColor: vars.colors['input.blue.hover.border'], -}) - -const appearanceBlueFocusStyles = createAppearanceStyles({ - fontColor: vars.colors['input.blue.focus.font'], - backgroundColor: vars.colors['input.blue.focus.background'], - borderColor: vars.colors['input.blue.focus.border'], -}) - -const appearanceBlueActiveStyles = createAppearanceStyles({ - fontColor: vars.colors['input.blue.active.font'], - backgroundColor: vars.colors['input.blue.active.background'], - borderColor: vars.colors['input.blue.active.border'], -}) - -const appearanceBlueDisabledStyles = createAppearanceStyles({ - fontColor: vars.colors['input.blue.disabled.font'], - backgroundColor: vars.colors['input.blue.disabled.background'], - borderColor: vars.colors['input.blue.disabled.border'], -}) - -const appearanceWhiteDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['input.white.default.font'], - backgroundColor: vars.colors['input.white.default.background'], - borderColor: vars.colors['input.white.default.border'], -}) - -const appearanceWhiteHoverStyles = createAppearanceStyles({ - fontColor: vars.colors['input.white.hover.font'], - backgroundColor: vars.colors['input.white.hover.background'], - borderColor: vars.colors['input.white.hover.border'], -}) - -const appearanceWhiteFocusStyles = createAppearanceStyles({ - fontColor: vars.colors['input.white.focus.font'], - backgroundColor: vars.colors['input.white.focus.background'], - borderColor: vars.colors['input.white.focus.border'], -}) - -const appearanceWhiteActiveStyles = createAppearanceStyles({ - fontColor: vars.colors['input.white.active.font'], - backgroundColor: vars.colors['input.white.active.background'], - borderColor: vars.colors['input.white.active.border'], -}) - -const appearanceWhiteDisabledStyles = createAppearanceStyles({ - fontColor: vars.colors['input.white.disabled.font'], - backgroundColor: vars.colors['input.white.disabled.background'], - borderColor: vars.colors['input.white.disabled.border'], -}) - -export const appearanceVariant = { - blue: appearanceBlueDefaultStyles, - white: appearanceWhiteDefaultStyles, -} - -export const appearanceHover = { - blueHover: appearanceBlueHoverStyles, - whiteHover: appearanceWhiteHoverStyles, -} - -export const appearanceFocus = { - blueFocus: appearanceBlueFocusStyles, - whiteFocus: appearanceWhiteFocusStyles, -} - -export const appearanceActive = { - blueActive: appearanceBlueActiveStyles, - whiteActive: appearanceWhiteActiveStyles, -} - -export const appearanceDisabled = { - blueDisabled: appearanceBlueDisabledStyles, - whiteDisabled: appearanceWhiteDisabledStyles, -} -`, - }, - { - prefix: 'input', - colors: { - 'input.input.default.background': 'rgba(255, 255, 255, 1)', - 'input.input.default.font': 'rgba(24, 24, 27, 0.50)', - 'input.input.default.border': 'rgba(24, 24, 27, 0.30)', - 'input.input.filled.background': 'rgba(255, 255, 255, 1)', - 'input.input.filled.font': 'rgba(24, 24, 27, 1)', - 'input.input.filled.border': 'rgba(24, 24, 27, 0.30)', - 'input.input.focus.background': 'rgba(255, 255, 255, 1)', - 'input.input.focus.font': 'rgba(24, 24, 27, 1)', - 'input.input.focus.border': 'rgba(34, 197, 94, 0.40)', - 'input.input.disabled.background': 'rgba(255, 255, 255, 0.50)', - 'input.input.disabled.font': 'rgba(24, 24, 27, 0.30)', - 'input.input.disabled.border': 'rgba(24, 24, 27, 0.10)', - 'input.input.error.background': 'rgba(255, 255, 255, 1)', - 'input.input.error.font': 'rgba(24, 24, 27, 1)', - 'input.input.error.border': 'rgba(225, 29, 72, 0.65)', - }, - expectedCode: `import { vars } from '@ui/theme/theme-css' - -import { createAppearanceStyles } from '@atls-ui-generators/appearance/create' - -const appearanceInputDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['input.input.default.font'], - backgroundColor: vars.colors['input.input.default.background'], - borderColor: vars.colors['input.input.default.border'], -}) - -const appearanceInputFilledStyles = createAppearanceStyles({ - fontColor: vars.colors['input.input.filled.font'], - backgroundColor: vars.colors['input.input.filled.background'], - borderColor: vars.colors['input.input.filled.border'], -}) - -const appearanceInputFocusStyles = createAppearanceStyles({ - fontColor: vars.colors['input.input.focus.font'], - backgroundColor: vars.colors['input.input.focus.background'], - borderColor: vars.colors['input.input.focus.border'], -}) - -const appearanceInputDisabledStyles = createAppearanceStyles({ - fontColor: vars.colors['input.input.disabled.font'], - backgroundColor: vars.colors['input.input.disabled.background'], - borderColor: vars.colors['input.input.disabled.border'], -}) - -const appearanceInputErrorStyles = createAppearanceStyles({ - fontColor: vars.colors['input.input.error.font'], - backgroundColor: vars.colors['input.input.error.background'], - borderColor: vars.colors['input.input.error.border'], -}) - -export const appearanceVariant = { - input: appearanceInputDefaultStyles, -} - -export const appearanceFilled = { - inputFilled: appearanceInputFilledStyles, -} - -export const appearanceFocus = { - inputFocus: appearanceInputFocusStyles, -} - -export const appearanceDisabled = { - inputDisabled: appearanceInputDisabledStyles, -} - -export const appearanceError = { - inputError: appearanceInputErrorStyles, -} -`, - }, - { - prefix: 'badge', - colors: { - 'badge.primary.default.background': 'rgba(24, 24, 27, 0.5)', - 'badge.primary.default.font': 'rgba(255, 255, 255, 1)', - 'badge.primary.default.border': 'transparent', - 'badge.info.default.background': 'rgba(14, 165, 233, 1)', - 'badge.info.default.font': 'rgba(255, 255, 255, 1)', - 'badge.info.default.border': 'transparent', - 'badge.success.default.background': 'rgba(34, 197, 94, 1)', - 'badge.success.default.font': 'rgba(255, 255, 255, 1)', - 'badge.success.default.border': 'transparent', - 'badge.warning.default.background': 'rgba(249, 115, 22, 1)', - 'badge.warning.default.font': 'rgba(255, 255, 255, 1)', - 'badge.warning.default.border': 'transparent', - 'badge.danger.default.background': 'rgba(225, 29, 72, 1)', - 'badge.danger.default.font': 'rgba(255, 255, 255, 1)', - 'badge.danger.default.border': 'transparent', - 'badge.disabled.default.background': 'rgba(24, 24, 27, 0.05)', - 'badge.disabled.default.font': 'rgba(24, 24, 27, 0.3)', - 'badge.disabled.default.border': 'transparent', - 'badge.draft.default.background': 'rgba(24, 24, 27, 0.3)', - 'badge.draft.default.font': 'rgba(255, 255, 255, 1)', - 'badge.draft.default.border': 'transparent', - 'badge.primary.outline.background': 'transparent', - 'badge.primary.outline.font': 'rgba(24, 24, 27, 0.5)', - 'badge.primary.outline.border': 'rgba(24, 24, 27, 0.5)', - 'badge.info.outline.background': 'transparent', - 'badge.info.outline.font': 'rgba(14, 165, 233, 1)', - 'badge.info.outline.border': 'rgba(14, 165, 233, 1)', - 'badge.success.outline.background': 'transparent', - 'badge.success.outline.font': 'rgba(34, 197, 94, 1)', - 'badge.success.outline.border': 'rgba(34, 197, 94, 1)', - 'badge.warning.outline.background': 'transparent', - 'badge.warning.outline.font': 'rgba(249, 115, 22, 1)', - 'badge.warning.outline.border': 'rgba(249, 115, 22, 1)', - 'badge.danger.outline.background': 'transparent', - 'badge.danger.outline.font': 'rgba(225, 29, 72, 1)', - 'badge.danger.outline.border': 'rgba(225, 29, 72, 1)', - 'badge.disabled.outline.background': 'transparent', - 'badge.disabled.outline.font': 'rgba(24, 24, 27, 0.1)', - 'badge.disabled.outline.border': 'rgba(24, 24, 27, 0.1)', - 'badge.draft.outline.background': 'transparent', - 'badge.draft.outline.font': 'rgba(24, 24, 27, 0.5)', - 'badge.draft.outline.border': 'rgba(24, 24, 27, 0.5)', - }, - expectedCode: `import { vars } from '@ui/theme/theme-css' - -import { createAppearanceStyles } from '@atls-ui-generators/appearance/create' - -const appearancePrimaryDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.primary.default.font'], - backgroundColor: vars.colors['badge.primary.default.background'], - borderColor: vars.colors['badge.primary.default.border'], -}) - -const appearancePrimaryOutlineStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.primary.outline.font'], - backgroundColor: vars.colors['badge.primary.outline.background'], - borderColor: vars.colors['badge.primary.outline.border'], -}) - -const appearanceInfoDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.info.default.font'], - backgroundColor: vars.colors['badge.info.default.background'], - borderColor: vars.colors['badge.info.default.border'], -}) - -const appearanceInfoOutlineStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.info.outline.font'], - backgroundColor: vars.colors['badge.info.outline.background'], - borderColor: vars.colors['badge.info.outline.border'], -}) - -const appearanceSuccessDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.success.default.font'], - backgroundColor: vars.colors['badge.success.default.background'], - borderColor: vars.colors['badge.success.default.border'], -}) - -const appearanceSuccessOutlineStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.success.outline.font'], - backgroundColor: vars.colors['badge.success.outline.background'], - borderColor: vars.colors['badge.success.outline.border'], -}) - -const appearanceWarningDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.warning.default.font'], - backgroundColor: vars.colors['badge.warning.default.background'], - borderColor: vars.colors['badge.warning.default.border'], -}) - -const appearanceWarningOutlineStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.warning.outline.font'], - backgroundColor: vars.colors['badge.warning.outline.background'], - borderColor: vars.colors['badge.warning.outline.border'], -}) - -const appearanceDangerDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.danger.default.font'], - backgroundColor: vars.colors['badge.danger.default.background'], - borderColor: vars.colors['badge.danger.default.border'], -}) - -const appearanceDangerOutlineStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.danger.outline.font'], - backgroundColor: vars.colors['badge.danger.outline.background'], - borderColor: vars.colors['badge.danger.outline.border'], -}) - -const appearanceDisabledDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.disabled.default.font'], - backgroundColor: vars.colors['badge.disabled.default.background'], - borderColor: vars.colors['badge.disabled.default.border'], -}) - -const appearanceDisabledOutlineStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.disabled.outline.font'], - backgroundColor: vars.colors['badge.disabled.outline.background'], - borderColor: vars.colors['badge.disabled.outline.border'], -}) - -const appearanceDraftDefaultStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.draft.default.font'], - backgroundColor: vars.colors['badge.draft.default.background'], - borderColor: vars.colors['badge.draft.default.border'], -}) - -const appearanceDraftOutlineStyles = createAppearanceStyles({ - fontColor: vars.colors['badge.draft.outline.font'], - backgroundColor: vars.colors['badge.draft.outline.background'], - borderColor: vars.colors['badge.draft.outline.border'], -}) - -export const appearanceVariant = { - primary: appearancePrimaryDefaultStyles, - info: appearanceInfoDefaultStyles, - success: appearanceSuccessDefaultStyles, - warning: appearanceWarningDefaultStyles, - danger: appearanceDangerDefaultStyles, - disabled: appearanceDisabledDefaultStyles, - draft: appearanceDraftDefaultStyles, -} - -export const appearanceOutline = { - primaryOutline: appearancePrimaryOutlineStyles, - infoOutline: appearanceInfoOutlineStyles, - successOutline: appearanceSuccessOutlineStyles, - warningOutline: appearanceWarningOutlineStyles, - dangerOutline: appearanceDangerOutlineStyles, - disabledOutline: appearanceDisabledOutlineStyles, - draftOutline: appearanceDraftOutlineStyles, -} -`, - }, - { - prefix: 'button', - colors: { - 'input.blue.default.font': 'rgba(255, 255, 255, 1)', - 'input.blue.default.background': 'rgba(65, 109, 223, 1)', - 'input.blue.default.border': 'rgba(0,0,0,0)', - }, - expectedError: `Not found color keys for prefix 'button'`, - }, - { - prefix: 'input', - colors: { - 'input.default.font': 'rgba(255, 255, 255, 1)', - 'input.default.background': 'rgba(65, 109, 223, 1)', - 'input.default.border': 'rgba(0,0,0,0)', - }, - expectedError: `Color key should match the pattern 'prefix.variant.state.type', where 'type' can be 'font', 'background', or 'border'.`, - }, - { - prefix: 'input', - colors: { - 'input.blue.font': 'rgba(255, 255, 255, 1)', - 'input.blue.background': 'rgba(65, 109, 223, 1)', - 'input.blue.border': 'rgba(0,0,0,0)', - }, - expectedError: `Color key should match the pattern 'prefix.variant.state.type', where 'type' can be 'font', 'background', or 'border'.`, - }, - { - prefix: 'input', - colors: { - 'input.blue.default.shadow': 'rgba(255, 255, 255, 1)', - 'input.blue.default.backgroundColor': 'rgba(65, 109, 223, 1)', - 'input.blue.default.borderColor': 'rgba(0,0,0,0)', - }, - expectedError: `Color key should match the pattern 'prefix.variant.state.type', where 'type' can be 'font', 'background', or 'border'.`, - }, -] diff --git a/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.interfaces.ts b/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.interfaces.ts deleted file mode 100644 index 6311836ec..000000000 --- a/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.interfaces.ts +++ /dev/null @@ -1,6 +0,0 @@ -export interface TestCase { - prefix: string - colors: Record - expectedCode?: string - expectedError?: string -} diff --git a/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.ts b/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.ts deleted file mode 100644 index 019b09abe..000000000 --- a/generators/appearance/src/appearance-style/tests/appearance-styles.generator.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -/* eslint-disable n/no-sync */ - -import assert from 'node:assert/strict' -import { readFileSync } from 'node:fs' -import { mkdirSync } from 'node:fs' -import { rmdirSync } from 'node:fs' -import { existsSync } from 'node:fs' -import { describe } from 'node:test' -import { after } from 'node:test' -import { it } from 'node:test' - -import { AppearanceStyleGenerator } from '@atls-ui-generators/appearance' -import { pretty } from '@atls-ui-generators/utils' - -import { dirname } from './appearance-styles.generator.test.constants.js' -import { testCases } from './appearance-styles.generator.test.constants.js' - -describe('input appearance styles generator', () => { - after(() => { - if (existsSync(`${dirname}/generated`)) rmdirSync(`${dirname}/generated`, { recursive: true }) - }) - - testCases.forEach(({ prefix, colors, expectedCode, expectedError }, index) => { - const testCaseName = `Test case ${index + 1}:` - - if (expectedCode) { - it(`${testCaseName} should generate code for appearance styles`, async () => { - const generator = new AppearanceStyleGenerator(prefix, colors) - const generated = await generator.generateAppearanceStyles() - - const code = await pretty(` - ${generated.imports} - ${generated.statefulStyles} - ${generated.appearanceStyles} - `) - - assert.equal(code, expectedCode) - }) - - it(`${testCaseName} should fail if path ends with slash character`, async () => { - const generator = new AppearanceStyleGenerator(prefix, colors) - - if (!existsSync(`${dirname}/generated`)) mkdirSync(`${dirname}/generated`) - - await assert.rejects(async () => generator.generateFile(`${dirname}/generated/`)) - }) - - it(`${testCaseName} should generate appearance styles file`, async () => { - const generator = new AppearanceStyleGenerator(prefix, colors) - - if (!existsSync(`${dirname}/generated`)) mkdirSync(`${dirname}/generated`) - - await generator.generateFile(`${dirname}/generated`) - - const code = readFileSync(`${dirname}/generated/appearance.css.ts`) - - assert.equal(Buffer.from(code).toString(), expectedCode) - }) - } - - if (expectedError) { - it(`${testCaseName} should throw error`, async () => { - assert.throws( - () => new AppearanceStyleGenerator(prefix, colors), - (error) => { - assert.ok(error instanceof Error, 'Error should be an instance of Error') - assert.ok( - error.message.includes(expectedError), - `Error message should include ${expectedError}, case: ${testCaseName}, message: ${error.message}` - ) - return true - } - ) - }) - } - }) -}) diff --git a/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts b/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts deleted file mode 100644 index 41ae7ecf9..000000000 --- a/generators/appearance/src/appearance-style/tests/component-appearance-contracts.test.ts +++ /dev/null @@ -1,193 +0,0 @@ -import { dirname } from 'node:path' -import { join } from 'node:path' -import { describe } from 'node:test' -import { it } from 'node:test' -import { fileURLToPath } from 'node:url' - -import { AppearanceMapGenerator } from '@atls-ui-generators/appearance' -import { AppearanceStyleGenerator } from '@atls-ui-generators/appearance' - -import { colors } from '../../../../../ui-parts/theme/src/tokens/colors.js' - -const currentDir = dirname(fileURLToPath(import.meta.url)) -const rootDir = join(currentDir, '../../../../..') - -const partsThemeImport = { import: '{ vars }', from: '@atls-ui-parts/theme' } -const styleImport = { import: '{ style }', from: '@vanilla-extract/css' } -const createAppearanceStylesImport = { - import: '{ createAppearanceStyles }', - from: '@atls-ui-generators/appearance/create', -} - -const checkContract = async ( - name: string, - generator: AppearanceMapGenerator | AppearanceStyleGenerator, - path: string -): Promise => { - try { - await generator.checkFile(path) - } catch (error) { - throw new Error(`${name}: ${(error as Error).message}`) - } -} - -describe('component appearance contracts', () => { - it('checks generated appearance files', async () => { - await checkContract( - 'button', - new AppearanceStyleGenerator('button', colors, { - extraImports: [{ import: '{ ButtonAppearance }', from: './interfaces.js', kind: 'type' }], - varsImport: partsThemeImport, - createAppearanceStylesImport, - states: ['default', 'hover', 'pressed', 'disabled'], - variants: ['blue', 'lightBlue', 'ghost'], - stateOverrides: { - ghost: { - fontColor: "'inherit'", - backgroundColor: "'transparent'", - border: "'none'", - }, - }, - appearanceExport: { - name: 'buttonAppearances', - typeName: 'ButtonAppearance', - states: { - default: 'default', - hover: 'hover', - pressed: 'pressed', - disabled: 'disabled', - }, - }, - }), - join(rootDir, 'ui-parts/button/src/styles') - ) - - await checkContract( - 'input', - new AppearanceStyleGenerator('input', colors, { - extraImports: [{ import: '{ InputAppearance }', from: './interfaces.js', kind: 'type' }], - varsImport: partsThemeImport, - createAppearanceStylesImport, - states: ['default', 'disabled'], - variants: ['blue', 'white'], - appearanceExport: { - name: 'inputAppearances', - typeName: 'InputAppearance', - states: { - default: 'default', - disabled: 'disabled', - }, - }, - }), - join(rootDir, 'ui-parts/input/src/styles') - ) - - await checkContract( - 'checkbox box', - new AppearanceMapGenerator({ - imports: [partsThemeImport, styleImport], - styles: [ - { name: 'boxBlueAppearanceStyles', properties: { border: 'vars.borders.normalBlue' } }, - { name: 'boxGreenAppearanceStyles', properties: { border: 'vars.borders.normalGreen' } }, - { name: 'boxRedAppearanceStyles', properties: { border: 'vars.borders.normalRed' } }, - ], - exports: [ - { - name: 'boxAppearanceStyles', - entries: { - blue: 'boxBlueAppearanceStyles', - green: 'boxGreenAppearanceStyles', - red: 'boxRedAppearanceStyles', - }, - }, - ], - }), - join(rootDir, 'ui-parts/checkbox/src/box/styles') - ) - - await checkContract( - 'checkbox check', - new AppearanceMapGenerator({ - imports: [partsThemeImport, styleImport], - styles: [ - { - name: 'checkBlueAppearanceStyles', - properties: { backgroundColor: 'vars.colors.blue' }, - }, - { - name: 'checkGreenAppearanceStyles', - properties: { backgroundColor: 'vars.colors.green' }, - }, - { - name: 'checkRedAppearanceStyles', - properties: { backgroundColor: 'vars.colors.red' }, - }, - ], - exports: [ - { - name: 'checkAppearanceStyles', - entries: { - blue: 'checkBlueAppearanceStyles', - green: 'checkGreenAppearanceStyles', - red: 'checkRedAppearanceStyles', - }, - }, - ], - }), - join(rootDir, 'ui-parts/checkbox/src/check') - ) - - await checkContract( - 'checkbox label', - new AppearanceMapGenerator({ - imports: [styleImport], - styles: [ - { - exported: true, - name: 'labelAppearanceStyles', - properties: { color: "'black'" }, - }, - ], - }), - join(rootDir, 'ui-parts/checkbox/src/label/styles') - ) - - await checkContract( - 'checkbox', - new AppearanceMapGenerator({ - imports: [ - { import: '{ CheckboxAppearance }', from: '../checkbox.interfaces.js', kind: 'type' }, - { import: '{ CheckboxAppearanceName }', from: '../checkbox.interfaces.js', kind: 'type' }, - { import: '{ boxAppearanceStyles }', from: '../box/index.js' }, - { import: '{ checkAppearanceStyles }', from: '../check/index.js' }, - { import: '{ labelAppearanceStyles }', from: '../label/index.js' }, - ], - exports: [ - { - name: 'checkboxAppearances', - typeName: 'CheckboxAppearance', - variantsType: 'CheckboxAppearanceName', - entries: { - blue: `{ - box: boxAppearanceStyles.blue, - check: checkAppearanceStyles.blue, - label: labelAppearanceStyles, - }`, - green: `{ - box: boxAppearanceStyles.green, - check: checkAppearanceStyles.green, - label: labelAppearanceStyles, - }`, - red: `{ - box: boxAppearanceStyles.red, - check: checkAppearanceStyles.red, - label: labelAppearanceStyles, - }`, - }, - }, - ], - }), - join(rootDir, 'ui-parts/checkbox/src/styles') - ) - }) -}) diff --git a/generators/appearance/src/appearance.generator.ts b/generators/appearance/src/appearance.generator.ts deleted file mode 100644 index 14aba1fb1..000000000 --- a/generators/appearance/src/appearance.generator.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* eslint-disable n/no-sync */ - -import type { ColorSchemes } from './appearance.interfaces.js' - -import assert from 'node:assert/strict' -import { lstatSync } from 'node:fs' -import { join } from 'node:path' - -import { program } from 'commander' - -import { createLogger } from '@atls-ui-generators/utils' -import { processFile } from '@atls-ui-generators/utils' - -import { AppearanceStyleGenerator } from './appearance-style/index.js' - -const logger = createLogger('appearance-generator') - -try { - program - .name('Appearance styles generator') - .argument('path ', 'Path to save the styles') - .requiredOption('-t, --theme path ', 'Path to colors file') - .requiredOption('-p, --prefix color ', 'Prefix of color styles') - .option('-c, --check', 'Check generated styles without writing files') - .option('--vars-from package ', 'Module to import vars from', '@ui/theme/theme-css') - .option( - '--styles-from package ', - 'Module to import createAppearanceStyles from', - '@atls-ui-generators/appearance/create' - ) - .option('-s, --states states ', 'Comma-separated states to include') - .parse(process.argv) - - const path = program.args.at(0) - const { - check, - states, - stylesFrom, - theme: themePath, - prefix, - varsFrom, - } = program.opts<{ - check?: boolean - prefix?: string - states?: string - stylesFrom: string - theme?: string - varsFrom: string - }>() - - assert.ok(path && typeof path === 'string', 'Path to save the styles is required') - assert.ok(lstatSync(path).isDirectory(), 'Path to save the styles should point to a directory.') - assert.ok(themePath && typeof themePath === 'string', 'Theme colors path is required') - assert.ok(lstatSync(themePath).isFile(), 'Theme colors path should point to a file') - assert.ok(prefix && typeof prefix === 'string', 'Prefix of color styles is required') - - logger.info(`Extract theme colors from ${themePath}`) - - const absoluteThemePath = join(process.cwd(), themePath) - - const exports = processFile(absoluteThemePath) - - const colors = Object.values(exports)?.[0] as ColorSchemes - - const generator = new AppearanceStyleGenerator(prefix, colors, { - states: states - ? states - .split(',') - .map((state: string) => state.trim()) - .filter(Boolean) - : undefined, - varsImport: { import: '{ vars }', from: varsFrom }, - createAppearanceStylesImport: { import: '{ createAppearanceStyles }', from: stylesFrom }, - }) - - const genPath = join(process.cwd(), path) - - if (check) { - logger.info(`Appearance styles check started for ${path}`) - - await generator.checkFile(genPath) - - logger.info(`Appearance styles are up to date in ${path}`) - } else { - logger.info(`Appearance styles generation started into ${path}`) - - await generator.generateFile(genPath) - - logger.info(`Generated into ${path}`) - } -} catch (error) { - logger.error(error) - process.exitCode = 1 -} diff --git a/generators/appearance/src/appearance.interfaces.ts b/generators/appearance/src/appearance.interfaces.ts deleted file mode 100644 index ea7c5b147..000000000 --- a/generators/appearance/src/appearance.interfaces.ts +++ /dev/null @@ -1 +0,0 @@ -export type ColorSchemes = Record diff --git a/generators/appearance/src/generator.ts b/generators/appearance/src/generator.ts new file mode 100644 index 000000000..7f95ef238 --- /dev/null +++ b/generators/appearance/src/generator.ts @@ -0,0 +1,63 @@ +/* eslint-disable n/no-sync */ + +import type { StyleSchema } from './schema/index.js' + +import assert from 'node:assert/strict' +import { lstatSync } from 'node:fs' +import { dirname } from 'node:path' +import { join } from 'node:path' +import { pathToFileURL } from 'node:url' + +import { program } from 'commander' + +import { createLogger } from '@atls-ui-generators/utils' + +import { StyleSchemaGenerator } from './schema/index.js' + +const logger = createLogger('appearance-generator') + +try { + program + .name('Appearance styles generator') + .argument('', 'Path to style schema file') + .option('-c, --check', 'Check generated styles without writing files') + .option('-w, --write', 'Write generated styles') + .parse(process.argv) + + const schemaPath = program.args.at(0) + const { check, write } = program.opts<{ check?: boolean; write?: boolean }>() + + assert.ok(schemaPath && typeof schemaPath === 'string', 'Path to style schema is required') + assert.ok(check !== write, 'Exactly one of --check or --write is required') + + const absoluteSchemaPath = join(process.cwd(), schemaPath) + + assert.ok(lstatSync(absoluteSchemaPath).isFile(), 'Style schema path should point to a file') + + const schemaModule = (await import(pathToFileURL(absoluteSchemaPath).href)) as { + default?: StyleSchema + schema?: StyleSchema + } + const schema = schemaModule.default ?? schemaModule.schema + + assert.ok(schema, 'Style schema file should export schema') + + const generator = new StyleSchemaGenerator(schema, dirname(absoluteSchemaPath)) + + if (check) { + logger.info(`Style schema check started for ${schemaPath}`) + + await generator.check() + + logger.info(`Style schema files are up to date for ${schemaPath}`) + } else { + logger.info(`Style schema generation started for ${schemaPath}`) + + await generator.write() + + logger.info(`Generated files for ${schemaPath}`) + } +} catch (error) { + logger.error(error) + process.exitCode = 1 +} diff --git a/generators/appearance/src/index.ts b/generators/appearance/src/index.ts index c0aefb5ba..3903876fd 100644 --- a/generators/appearance/src/index.ts +++ b/generators/appearance/src/index.ts @@ -1,4 +1,2 @@ -export * from './appearance-style/index.js' -export * from './appearance-map/index.js' -export * from './utils/create-appearance-styles/index.js' -export type * from './appearance.interfaces.js' +export * from './schema/index.js' +export * from './style/index.js' diff --git a/generators/appearance/src/map/generator.ts b/generators/appearance/src/map/generator.ts new file mode 100644 index 000000000..ce50bf2b5 --- /dev/null +++ b/generators/appearance/src/map/generator.ts @@ -0,0 +1,104 @@ +/* eslint-disable n/no-sync */ +import type { ImportSchema } from './interfaces.js' +import type { MapFileSchema } from './interfaces.js' + +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import { writeFileSync } from 'node:fs' + +import { pretty } from '@atls-ui-generators/utils' + +export class MapGenerator { + readonly #schema: MapFileSchema + + constructor(schema: MapFileSchema) { + assert.ok(schema.imports?.length, 'Imports are required') + assert.ok(schema.styles?.length || schema.exports?.length, 'Styles or exports are required') + + this.#schema = schema + } + + async generateFileContent(): Promise { + return pretty(` + ${this.generateImports()} + ${this.generateStyles()} + ${this.generateExports()} + `) + } + + async generateFile(path: string, filename = 'appearance.css.ts'): Promise { + this.assertPath(path) + + const code = await this.generateFileContent() + + writeFileSync(`${path}/${filename}`, code) + } + + async checkFile(path: string, filename = 'appearance.css.ts'): Promise { + this.assertPath(path) + + const expected = await this.generateFileContent() + const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) + + assert.equal(actual, expected, `${path}/${filename} is out of date`) + } + + private generateImports(): string { + return (this.#schema.imports ?? []) + .map((importSchema: ImportSchema) => { + if (importSchema.kind === 'type') { + return `import type ${importSchema.import} from '${importSchema.from}'` + } + + return `import ${importSchema.import} from '${importSchema.from}'` + }) + .join('\n') + } + + private generateStyles(): string { + return (this.#schema.styles ?? []) + .map((styleSchema) => { + const properties = Object.entries(styleSchema.properties) + .map(([property, expression]) => `${property}: ${expression.value},`) + .join('\n') + + return `${styleSchema.exported ? 'export ' : ''}const ${styleSchema.name} = style({ + ${properties} + })` + }) + .join('\n\n') + } + + private generateExports(): string { + return (this.#schema.exports ?? []) + .map((exportSchema) => { + const entries = Object.entries(exportSchema.entries) + .map(([name, expression]) => `${name}: ${expression.value},`) + .join('\n') + + if (exportSchema.typeName && (exportSchema.variants?.length || exportSchema.variantsType)) { + const variants = + exportSchema.variantsType ?? + exportSchema.variants + ?.map((variant) => `'${variant}'`) + .sort() + .join(' | ') + + return `export const ${exportSchema.name}: Record<${variants}, ${exportSchema.typeName}> = { + ${entries} + }` + } + + return `export const ${exportSchema.name} = { + ${entries} + }` + }) + .join('\n\n') + } + + private assertPath(path: string): void { + if (path.split('').pop() === '/') { + throw new Error("Path should not end with '/' character") + } + } +} diff --git a/generators/appearance/src/map/interfaces.ts b/generators/appearance/src/map/interfaces.ts new file mode 100644 index 000000000..d88880725 --- /dev/null +++ b/generators/appearance/src/map/interfaces.ts @@ -0,0 +1,7 @@ +export type { + ExpressionSchema, + ImportSchema, + MapExportSchema, + MapFileSchema, + MapStyleSchema, +} from '../schema/interfaces.js' diff --git a/generators/appearance/src/schema/generator.ts b/generators/appearance/src/schema/generator.ts new file mode 100644 index 000000000..5c2016b90 --- /dev/null +++ b/generators/appearance/src/schema/generator.ts @@ -0,0 +1,40 @@ +import type { StyleSchema } from './interfaces.js' +import type { StyleSchemaFile } from './interfaces.js' + +import { join } from 'node:path' + +import { MapGenerator } from '../map/generator.js' +import { StyleGenerator } from '../style/index.js' + +export class StyleSchemaGenerator { + constructor( + private readonly schema: StyleSchema, + private readonly basePath: string + ) {} + + async write(): Promise { + for (const fileSchema of this.schema.files) { + await this.getGenerator(fileSchema).generateFile( + join(this.basePath, fileSchema.target), + fileSchema.filename + ) + } + } + + async check(): Promise { + for (const fileSchema of this.schema.files) { + await this.getGenerator(fileSchema).checkFile( + join(this.basePath, fileSchema.target), + fileSchema.filename + ) + } + } + + private getGenerator(fileSchema: StyleSchemaFile): MapGenerator | StyleGenerator { + if (fileSchema.type === 'map') { + return new MapGenerator(fileSchema) + } + + return new StyleGenerator(fileSchema) + } +} diff --git a/generators/appearance/src/schema/index.ts b/generators/appearance/src/schema/index.ts new file mode 100644 index 000000000..d6cbdd7b0 --- /dev/null +++ b/generators/appearance/src/schema/index.ts @@ -0,0 +1,2 @@ +export * from './generator.js' +export type * from './interfaces.js' diff --git a/generators/appearance/src/schema/interfaces.ts b/generators/appearance/src/schema/interfaces.ts new file mode 100644 index 000000000..1a9f810b8 --- /dev/null +++ b/generators/appearance/src/schema/interfaces.ts @@ -0,0 +1,66 @@ +export interface ImportSchema { + import: string + from: string + kind?: 'type' | 'value' +} + +export interface ExpressionSchema { + kind: 'expression' + value: string +} + +export interface StyleDeclarationSchema { + backgroundColor?: ExpressionSchema + border?: ExpressionSchema + borderColor?: ExpressionSchema + fontColor?: ExpressionSchema +} + +export interface StyleExportSchema { + name: string + typeName: string + states: Record +} + +export interface StyleFileSchema { + type: 'style' + target: string + filename?: string + createStylesImport?: ImportSchema + export?: StyleExportSchema + imports?: Array + prefix: string + stateOverrides?: Record + states: Array + variants: Array + varsName?: string +} + +export interface MapStyleSchema { + exported?: boolean + name: string + properties: Record +} + +export interface MapExportSchema { + name: string + entries: Record + typeName?: string + variants?: Array + variantsType?: string +} + +export interface MapFileSchema { + type: 'map' + target: string + filename?: string + exports?: Array + imports?: Array + styles?: Array +} + +export type StyleSchemaFile = MapFileSchema | StyleFileSchema + +export interface StyleSchema { + files: Array +} diff --git a/generators/appearance/src/style/generator.ts b/generators/appearance/src/style/generator.ts new file mode 100644 index 000000000..c87c252a8 --- /dev/null +++ b/generators/appearance/src/style/generator.ts @@ -0,0 +1,185 @@ +/* eslint-disable n/no-sync */ +import type { ImportSchema } from './interfaces.js' +import type { StyleDeclarationSchema } from './interfaces.js' +import type { StyleFileSchema } from './interfaces.js' + +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import { writeFileSync } from 'node:fs' + +import { pretty } from '@atls-ui-generators/utils' + +import { capitalizeFirstLetter } from '../utils/index.js' +import { getAppearanceStylesName } from '../utils/index.js' + +const defaultThemeImport: ImportSchema = { + import: '{ createAppearanceStyles, vars }', + from: '@atls-ui-parts/theme', +} + +export class StyleGenerator { + readonly #schema: StyleFileSchema + + constructor(schema: StyleFileSchema) { + assert.ok(schema.prefix, 'Prefix is required') + assert.ok(schema.variants.length, 'Variants are required') + assert.ok(schema.states.length, 'States are required') + + this.#schema = schema + } + + async generateFileContent(): Promise { + return pretty(` + ${await this.generateImports()} + ${await this.generateStatefulStyles()} + ${await this.generateStyles()} + `) + } + + async generateFile(path: string, filename = 'appearance.css.ts'): Promise { + this.assertPath(path) + + const code = await this.generateFileContent() + + writeFileSync(`${path}/${filename}`, code) + } + + async checkFile(path: string, filename = 'appearance.css.ts'): Promise { + this.assertPath(path) + + const expected = await this.generateFileContent() + const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) + + assert.equal(actual, expected, `${path}/${filename} is out of date`) + } + + private async generateImports(): Promise { + return pretty( + [...(this.#schema.imports ?? []), this.#schema.createStylesImport ?? defaultThemeImport] + .map((importSchema) => { + if (importSchema.kind === 'type') { + return `import type ${importSchema.import} from '${importSchema.from}'` + } + + return `import ${importSchema.import} from '${importSchema.from}'` + }) + .join('\n') + ) + } + + private async generateStatefulStyles(): Promise { + return pretty( + this.#schema.variants.map((variant) => this.generateVariantStatefulStyles(variant)).join('\n') + ) + } + + private async generateStyles(): Promise { + return pretty( + [ + ...this.#schema.states.map((state) => this.generateVariantStyles(state)), + this.generateExport(), + ].join('\n') + ) + } + + private generateVariantStatefulStyles(variant: string): string { + return this.#schema.states + .map((state) => { + const override = this.#schema.stateOverrides?.[variant] + const declaration = override ?? this.getTokenDeclaration(variant, state) + + return `const ${getAppearanceStylesName(variant, state)} = createAppearanceStyles({ + ${this.generateDeclaration(declaration)} + })` + }) + .join('\n\n') + } + + private generateVariantStyles(state: string): string { + if (state === 'default') { + const variantStyles = this.#schema.variants + .map((variant) => `${variant}: ${getAppearanceStylesName(variant, 'Default')},`) + .join('\n') + + return `export const appearanceVariant = { + ${variantStyles} + }` + } + + const stateName = capitalizeFirstLetter(state) + + const variantStyles = this.#schema.variants + .map((variant) => `${variant}${stateName}: ${getAppearanceStylesName(variant, stateName)},`) + .join('\n') + + return `export const appearance${stateName} = { + ${variantStyles} + }` + } + + private generateDeclaration(declaration: StyleDeclarationSchema): string { + return Object.entries(declaration) + .filter(([, value]) => typeof value !== 'undefined') + .map(([property, expression]) => `${property}: ${expression.value},`) + .join('\n') + } + + private generateExport(): string { + const { export: exportSchema } = this.#schema + + if (!exportSchema) return '' + + const variants = [...this.#schema.variants] + .sort() + .map((variant) => `'${variant}'`) + .join(' | ') + const entries = this.#schema.variants + .map((variant) => { + const states = Object.entries(exportSchema.states) + .map(([property, state]) => { + if (state === 'default') { + return `${property}: appearanceVariant.${variant},` + } + + const stateName = capitalizeFirstLetter(state) + + return `${property}: appearance${stateName}.${variant}${stateName},` + }) + .join('\n') + + return `${variant}: { + ${states} + },` + }) + .join('\n') + + return `export const ${exportSchema.name}: Record<${variants}, ${exportSchema.typeName}> = { + ${entries} + }` + } + + private getTokenDeclaration(variant: string, state: string): StyleDeclarationSchema { + const varsName = this.#schema.varsName ?? 'vars' + + return { + fontColor: { + kind: 'expression', + value: `${varsName}.colors['${this.#schema.prefix}.${variant}.${state}.font']`, + }, + backgroundColor: { + kind: 'expression', + value: `${varsName}.colors['${this.#schema.prefix}.${variant}.${state}.background']`, + }, + borderColor: { + kind: 'expression', + value: `${varsName}.colors['${this.#schema.prefix}.${variant}.${state}.border']`, + }, + } + } + + private assertPath(path: string): void { + if (path.split('').pop() === '/') { + throw new Error("Path should not end with '/' character") + } + } +} diff --git a/generators/appearance/src/style/index.ts b/generators/appearance/src/style/index.ts new file mode 100644 index 000000000..d6cbdd7b0 --- /dev/null +++ b/generators/appearance/src/style/index.ts @@ -0,0 +1,2 @@ +export * from './generator.js' +export type * from './interfaces.js' diff --git a/generators/appearance/src/style/interfaces.ts b/generators/appearance/src/style/interfaces.ts new file mode 100644 index 000000000..3e56bca77 --- /dev/null +++ b/generators/appearance/src/style/interfaces.ts @@ -0,0 +1,7 @@ +export type { + ExpressionSchema, + ImportSchema, + StyleDeclarationSchema, + StyleExportSchema, + StyleFileSchema, +} from '../schema/interfaces.js' diff --git a/generators/appearance/src/style/tests/generator.test.ts b/generators/appearance/src/style/tests/generator.test.ts new file mode 100644 index 000000000..506680099 --- /dev/null +++ b/generators/appearance/src/style/tests/generator.test.ts @@ -0,0 +1,106 @@ +/* eslint-disable n/no-sync */ + +import type { StyleSchema } from '../../schema/index.js' + +import assert from 'node:assert/strict' +import { existsSync } from 'node:fs' +import { mkdtempSync } from 'node:fs' +import { readFileSync } from 'node:fs' +import { rmSync } from 'node:fs' +import { writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { after } from 'node:test' +import { describe } from 'node:test' +import { it } from 'node:test' + +import { StyleSchemaGenerator } from '../../schema/index.js' + +const dirname = mkdtempSync(join(tmpdir(), 'appearance-schema-')) + +const schema: StyleSchema = { + files: [ + { + type: 'style', + target: '.', + imports: [ + { + kind: 'type', + import: '{ FieldAppearance }', + from: './interfaces.js', + }, + ], + prefix: 'field', + states: ['default', 'disabled'], + variants: ['primary', 'secondary'], + export: { + name: 'fieldAppearances', + typeName: 'FieldAppearance', + states: { + default: 'default', + disabled: 'disabled', + }, + }, + }, + { + type: 'map', + target: '.', + filename: 'map.css.ts', + imports: [ + { + import: '{ style }', + from: '@vanilla-extract/css', + }, + ], + styles: [ + { + name: 'root', + properties: { + color: { + kind: 'expression', + value: "'black'", + }, + }, + }, + ], + exports: [ + { + name: 'map', + entries: { + root: { + kind: 'expression', + value: 'root', + }, + }, + }, + ], + }, + ], +} + +describe('style schema generator', () => { + after(() => { + if (existsSync(dirname)) rmSync(dirname, { recursive: true }) + }) + + it('should write and check schema files', async () => { + const generator = new StyleSchemaGenerator(schema, dirname) + + await generator.write() + await generator.check() + + const code = readFileSync(join(dirname, 'appearance.css.ts'), 'utf-8') + + assert.match(code, /field\.primary\.default\.font/) + assert.match(code, /fieldAppearances/) + }) + + it('should reject drifted files', async () => { + const generator = new StyleSchemaGenerator(schema, dirname) + + await generator.write() + writeFileSync(join(dirname, 'map.css.ts'), 'export const map = {}') + + await assert.rejects(async () => generator.check(), /map\.css\.ts is out of date/) + }) +}) diff --git a/generators/appearance/src/utils/index.ts b/generators/appearance/src/utils/index.ts index f4b6490aa..b7b331122 100644 --- a/generators/appearance/src/utils/index.ts +++ b/generators/appearance/src/utils/index.ts @@ -1,3 +1,2 @@ export * from './capitalize-first-letter/index.js' -export * from './create-appearance-styles/index.js' export * from './get-appearance-styles-name/index.js' diff --git a/ui-parts/button/package.json b/ui-parts/button/package.json index 737586975..0dcdfbaaf 100644 --- a/ui-parts/button/package.json +++ b/ui-parts/button/package.json @@ -13,13 +13,13 @@ "postpack": "rm -rf dist" }, "dependencies": { - "@atls-ui-generators/appearance": "workspace:*", "@atls-ui-parts/theme": "workspace:*", "@atls-utils/use-hover": "workspace:*", "clsx": "2.1.1", "rainbow-sprinkles": "1.0.0" }, "devDependencies": { + "@atls-ui-generators/appearance": "workspace:*", "@atls-ui-parts/layout": "workspace:*", "@storybook/react": "8.6.12", "@types/react": "19.1.2", diff --git a/ui-parts/button/src/styles/appearance.css.ts b/ui-parts/button/src/styles/appearance.css.ts index 275047154..ace8deedf 100644 --- a/ui-parts/button/src/styles/appearance.css.ts +++ b/ui-parts/button/src/styles/appearance.css.ts @@ -1,6 +1,6 @@ import type { ButtonAppearance } from './interfaces.js' -import { createAppearanceStyles } from '@atls-ui-generators/appearance/create' +import { createAppearanceStyles } from '@atls-ui-parts/theme' import { vars } from '@atls-ui-parts/theme' const appearanceBlueDefaultStyles = createAppearanceStyles({ @@ -26,7 +26,6 @@ const appearanceBlueDisabledStyles = createAppearanceStyles({ backgroundColor: vars.colors['button.blue.disabled.background'], borderColor: vars.colors['button.blue.disabled.border'], }) - const appearanceLightBlueDefaultStyles = createAppearanceStyles({ fontColor: vars.colors['button.lightBlue.default.font'], backgroundColor: vars.colors['button.lightBlue.default.background'], @@ -50,7 +49,6 @@ const appearanceLightBlueDisabledStyles = createAppearanceStyles({ backgroundColor: vars.colors['button.lightBlue.disabled.background'], borderColor: vars.colors['button.lightBlue.disabled.border'], }) - const appearanceGhostDefaultStyles = createAppearanceStyles({ fontColor: 'inherit', backgroundColor: 'transparent', @@ -80,25 +78,21 @@ export const appearanceVariant = { lightBlue: appearanceLightBlueDefaultStyles, ghost: appearanceGhostDefaultStyles, } - export const appearanceHover = { blueHover: appearanceBlueHoverStyles, lightBlueHover: appearanceLightBlueHoverStyles, ghostHover: appearanceGhostHoverStyles, } - export const appearancePressed = { bluePressed: appearanceBluePressedStyles, lightBluePressed: appearanceLightBluePressedStyles, ghostPressed: appearanceGhostPressedStyles, } - export const appearanceDisabled = { blueDisabled: appearanceBlueDisabledStyles, lightBlueDisabled: appearanceLightBlueDisabledStyles, ghostDisabled: appearanceGhostDisabledStyles, } - export const buttonAppearances: Record<'blue' | 'ghost' | 'lightBlue', ButtonAppearance> = { blue: { default: appearanceVariant.blue, diff --git a/ui-parts/button/src/styles/schema.test.ts b/ui-parts/button/src/styles/schema.test.ts new file mode 100644 index 000000000..45b4eda42 --- /dev/null +++ b/ui-parts/button/src/styles/schema.test.ts @@ -0,0 +1,16 @@ +import { dirname } from 'node:path' +import { describe } from 'node:test' +import { it } from 'node:test' +import { fileURLToPath } from 'node:url' + +import { StyleSchemaGenerator } from '@atls-ui-generators/appearance' + +import { schema } from './schema.js' + +const currentDir = dirname(fileURLToPath(import.meta.url)) + +describe('button styles schema', () => { + it('should match generated files', async () => { + await new StyleSchemaGenerator(schema, currentDir).check() + }) +}) diff --git a/ui-parts/button/src/styles/schema.ts b/ui-parts/button/src/styles/schema.ts new file mode 100644 index 000000000..0d4df85b9 --- /dev/null +++ b/ui-parts/button/src/styles/schema.ts @@ -0,0 +1,48 @@ +import type { StyleSchema } from '@atls-ui-generators/appearance' + +export const schema: StyleSchema = { + files: [ + { + type: 'style', + target: '.', + imports: [ + { + kind: 'type', + import: '{ ButtonAppearance }', + from: './interfaces.js', + }, + ], + prefix: 'button', + states: ['default', 'hover', 'pressed', 'disabled'], + variants: ['blue', 'lightBlue', 'ghost'], + stateOverrides: { + ghost: { + fontColor: { + kind: 'expression', + value: "'inherit'", + }, + backgroundColor: { + kind: 'expression', + value: "'transparent'", + }, + border: { + kind: 'expression', + value: "'none'", + }, + }, + }, + export: { + name: 'buttonAppearances', + typeName: 'ButtonAppearance', + states: { + default: 'default', + hover: 'hover', + pressed: 'pressed', + disabled: 'disabled', + }, + }, + }, + ], +} + +export default schema diff --git a/ui-parts/button/src/utils/create-appearance-styles/index.ts b/ui-parts/button/src/utils/create-appearance-styles/index.ts index 16afc940d..34a1ffecc 100644 --- a/ui-parts/button/src/utils/create-appearance-styles/index.ts +++ b/ui-parts/button/src/utils/create-appearance-styles/index.ts @@ -1,2 +1,2 @@ -export { createAppearanceStyles } from '@atls-ui-generators/appearance/create' -export type { AppearanceStyles as ButtonAppearanceStyles } from '@atls-ui-generators/appearance/create' +export { createAppearanceStyles } from '@atls-ui-parts/theme' +export type { AppearanceStyles as ButtonAppearanceStyles } from '@atls-ui-parts/theme' diff --git a/ui-parts/checkbox/package.json b/ui-parts/checkbox/package.json index 070525c03..d431dd6ab 100644 --- a/ui-parts/checkbox/package.json +++ b/ui-parts/checkbox/package.json @@ -17,6 +17,7 @@ "clsx": "2.1.1" }, "devDependencies": { + "@atls-ui-generators/appearance": "workspace:*", "@atls-ui-parts/layout": "workspace:*", "@storybook/react": "8.6.12", "@types/react": "19.1.2", diff --git a/ui-parts/checkbox/src/styles/schema.test.ts b/ui-parts/checkbox/src/styles/schema.test.ts new file mode 100644 index 000000000..c4072529d --- /dev/null +++ b/ui-parts/checkbox/src/styles/schema.test.ts @@ -0,0 +1,16 @@ +import { dirname } from 'node:path' +import { describe } from 'node:test' +import { it } from 'node:test' +import { fileURLToPath } from 'node:url' + +import { StyleSchemaGenerator } from '@atls-ui-generators/appearance' + +import { schema } from './schema.js' + +const currentDir = dirname(fileURLToPath(import.meta.url)) + +describe('checkbox styles schema', () => { + it('should match generated files', async () => { + await new StyleSchemaGenerator(schema, currentDir).check() + }) +}) diff --git a/ui-parts/checkbox/src/styles/schema.ts b/ui-parts/checkbox/src/styles/schema.ts new file mode 100644 index 000000000..5528446e3 --- /dev/null +++ b/ui-parts/checkbox/src/styles/schema.ts @@ -0,0 +1,206 @@ +import type { StyleSchema } from '@atls-ui-generators/appearance' + +export const schema: StyleSchema = { + files: [ + { + type: 'map', + target: '../box/styles', + imports: [ + { + import: '{ style }', + from: '@vanilla-extract/css', + }, + { + import: '{ vars }', + from: '@atls-ui-parts/theme', + }, + ], + styles: [ + { + name: 'boxBlueAppearanceStyles', + properties: { + border: { + kind: 'expression', + value: 'vars.borders.normalBlue', + }, + }, + }, + { + name: 'boxGreenAppearanceStyles', + properties: { + border: { + kind: 'expression', + value: 'vars.borders.normalGreen', + }, + }, + }, + { + name: 'boxRedAppearanceStyles', + properties: { + border: { + kind: 'expression', + value: 'vars.borders.normalRed', + }, + }, + }, + ], + exports: [ + { + name: 'boxAppearanceStyles', + entries: { + blue: { + kind: 'expression', + value: 'boxBlueAppearanceStyles', + }, + green: { + kind: 'expression', + value: 'boxGreenAppearanceStyles', + }, + red: { + kind: 'expression', + value: 'boxRedAppearanceStyles', + }, + }, + }, + ], + }, + { + type: 'map', + target: '../check', + imports: [ + { + import: '{ style }', + from: '@vanilla-extract/css', + }, + { + import: '{ vars }', + from: '@atls-ui-parts/theme', + }, + ], + styles: [ + { + name: 'checkBlueAppearanceStyles', + properties: { + backgroundColor: { + kind: 'expression', + value: 'vars.colors.blue', + }, + }, + }, + { + name: 'checkGreenAppearanceStyles', + properties: { + backgroundColor: { + kind: 'expression', + value: 'vars.colors.green', + }, + }, + }, + { + name: 'checkRedAppearanceStyles', + properties: { + backgroundColor: { + kind: 'expression', + value: 'vars.colors.red', + }, + }, + }, + ], + exports: [ + { + name: 'checkAppearanceStyles', + entries: { + blue: { + kind: 'expression', + value: 'checkBlueAppearanceStyles', + }, + green: { + kind: 'expression', + value: 'checkGreenAppearanceStyles', + }, + red: { + kind: 'expression', + value: 'checkRedAppearanceStyles', + }, + }, + }, + ], + }, + { + type: 'map', + target: '../label/styles', + imports: [ + { + import: '{ style }', + from: '@vanilla-extract/css', + }, + ], + styles: [ + { + exported: true, + name: 'labelAppearanceStyles', + properties: { + color: { + kind: 'expression', + value: "'black'", + }, + }, + }, + ], + }, + { + type: 'map', + target: '.', + imports: [ + { + kind: 'type', + import: '{ CheckboxAppearance }', + from: '../checkbox.interfaces.js', + }, + { + kind: 'type', + import: '{ CheckboxAppearanceName }', + from: '../checkbox.interfaces.js', + }, + { + import: '{ boxAppearanceStyles }', + from: '../box/index.js', + }, + { + import: '{ checkAppearanceStyles }', + from: '../check/index.js', + }, + { + import: '{ labelAppearanceStyles }', + from: '../label/index.js', + }, + ], + exports: [ + { + name: 'checkboxAppearances', + typeName: 'CheckboxAppearance', + variantsType: 'CheckboxAppearanceName', + entries: { + blue: { + kind: 'expression', + value: + '{ box: boxAppearanceStyles.blue, check: checkAppearanceStyles.blue, label: labelAppearanceStyles }', + }, + green: { + kind: 'expression', + value: + '{ box: boxAppearanceStyles.green, check: checkAppearanceStyles.green, label: labelAppearanceStyles }', + }, + red: { + kind: 'expression', + value: + '{ box: boxAppearanceStyles.red, check: checkAppearanceStyles.red, label: labelAppearanceStyles }', + }, + }, + }, + ], + }, + ], +} + +export default schema diff --git a/ui-parts/input/package.json b/ui-parts/input/package.json index e4b2572d6..1ee205464 100644 --- a/ui-parts/input/package.json +++ b/ui-parts/input/package.json @@ -13,12 +13,12 @@ "postpack": "rm -rf dist" }, "dependencies": { - "@atls-ui-generators/appearance": "workspace:*", "@atls-ui-parts/theme": "workspace:*", "clsx": "2.1.1", "rainbow-sprinkles": "1.0.0" }, "devDependencies": { + "@atls-ui-generators/appearance": "workspace:*", "@atls-ui-parts/condition": "workspace:*", "@atls-ui-parts/events-state": "workspace:*", "@atls-ui-parts/layout": "workspace:*", diff --git a/ui-parts/input/src/styles/appearance.css.ts b/ui-parts/input/src/styles/appearance.css.ts index a331f6ec5..099491a90 100644 --- a/ui-parts/input/src/styles/appearance.css.ts +++ b/ui-parts/input/src/styles/appearance.css.ts @@ -1,6 +1,6 @@ import type { InputAppearance } from './interfaces.js' -import { createAppearanceStyles } from '@atls-ui-generators/appearance/create' +import { createAppearanceStyles } from '@atls-ui-parts/theme' import { vars } from '@atls-ui-parts/theme' const appearanceBlueDefaultStyles = createAppearanceStyles({ @@ -14,7 +14,6 @@ const appearanceBlueDisabledStyles = createAppearanceStyles({ backgroundColor: vars.colors['input.blue.disabled.background'], borderColor: vars.colors['input.blue.disabled.border'], }) - const appearanceWhiteDefaultStyles = createAppearanceStyles({ fontColor: vars.colors['input.white.default.font'], backgroundColor: vars.colors['input.white.default.background'], @@ -31,12 +30,10 @@ export const appearanceVariant = { blue: appearanceBlueDefaultStyles, white: appearanceWhiteDefaultStyles, } - export const appearanceDisabled = { blueDisabled: appearanceBlueDisabledStyles, whiteDisabled: appearanceWhiteDisabledStyles, } - export const inputAppearances: Record<'blue' | 'white', InputAppearance> = { blue: { default: appearanceVariant.blue, diff --git a/ui-parts/input/src/styles/schema.test.ts b/ui-parts/input/src/styles/schema.test.ts new file mode 100644 index 000000000..080775303 --- /dev/null +++ b/ui-parts/input/src/styles/schema.test.ts @@ -0,0 +1,16 @@ +import { dirname } from 'node:path' +import { describe } from 'node:test' +import { it } from 'node:test' +import { fileURLToPath } from 'node:url' + +import { StyleSchemaGenerator } from '@atls-ui-generators/appearance' + +import { schema } from './schema.js' + +const currentDir = dirname(fileURLToPath(import.meta.url)) + +describe('input styles schema', () => { + it('should match generated files', async () => { + await new StyleSchemaGenerator(schema, currentDir).check() + }) +}) diff --git a/ui-parts/input/src/styles/schema.ts b/ui-parts/input/src/styles/schema.ts new file mode 100644 index 000000000..2b8c45f18 --- /dev/null +++ b/ui-parts/input/src/styles/schema.ts @@ -0,0 +1,30 @@ +import type { StyleSchema } from '@atls-ui-generators/appearance' + +export const schema: StyleSchema = { + files: [ + { + type: 'style', + target: '.', + imports: [ + { + kind: 'type', + import: '{ InputAppearance }', + from: './interfaces.js', + }, + ], + prefix: 'input', + states: ['default', 'disabled'], + variants: ['blue', 'white'], + export: { + name: 'inputAppearances', + typeName: 'InputAppearance', + states: { + default: 'default', + disabled: 'disabled', + }, + }, + }, + ], +} + +export default schema diff --git a/ui-parts/input/src/utils/create-appearance-styles/index.ts b/ui-parts/input/src/utils/create-appearance-styles/index.ts index 7a2d9f5c3..302ed0aba 100644 --- a/ui-parts/input/src/utils/create-appearance-styles/index.ts +++ b/ui-parts/input/src/utils/create-appearance-styles/index.ts @@ -1,2 +1,2 @@ -export { createAppearanceStyles } from '@atls-ui-generators/appearance/create' -export type { AppearanceStyles as InputAppearanceStyles } from '@atls-ui-generators/appearance/create' +export { createAppearanceStyles } from '@atls-ui-parts/theme' +export type { AppearanceStyles as InputAppearanceStyles } from '@atls-ui-parts/theme' diff --git a/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts b/ui-parts/theme/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts similarity index 82% rename from generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts rename to ui-parts/theme/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts index 9704e1e99..48d15fece 100644 --- a/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts +++ b/ui-parts/theme/src/utils/create-appearance-styles/create-appearance-styles.interfaces.ts @@ -6,5 +6,3 @@ export interface AppearanceStyles { border?: CSSProperties['border'] borderColor?: CSSProperties['borderColor'] } - -export type InputAppearanceStyles = AppearanceStyles diff --git a/generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.util.ts b/ui-parts/theme/src/utils/create-appearance-styles/create-appearance-styles.util.ts similarity index 100% rename from generators/appearance/src/utils/create-appearance-styles/create-appearance-styles.util.ts rename to ui-parts/theme/src/utils/create-appearance-styles/create-appearance-styles.util.ts diff --git a/generators/appearance/src/utils/create-appearance-styles/index.ts b/ui-parts/theme/src/utils/create-appearance-styles/index.ts similarity index 100% rename from generators/appearance/src/utils/create-appearance-styles/index.ts rename to ui-parts/theme/src/utils/create-appearance-styles/index.ts index 8544116d5..d7e304813 100644 --- a/generators/appearance/src/utils/create-appearance-styles/index.ts +++ b/ui-parts/theme/src/utils/create-appearance-styles/index.ts @@ -1,2 +1,2 @@ -export * from './create-appearance-styles.util.js' export type * from './create-appearance-styles.interfaces.js' +export * from './create-appearance-styles.util.js' diff --git a/ui-parts/theme/src/utils/index.ts b/ui-parts/theme/src/utils/index.ts index 7c7ccbe2d..bcd2d0a47 100644 --- a/ui-parts/theme/src/utils/index.ts +++ b/ui-parts/theme/src/utils/index.ts @@ -1 +1,2 @@ export * from './create-container-styles/index.js' +export * from './create-appearance-styles/index.js' diff --git a/yarn.lock b/yarn.lock index 29dec7079..2be3bbfdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -290,7 +290,7 @@ __metadata: react: "*" react-dom: "*" bin: - generate-styles: dist/appearance.generator.js + generate-styles: dist/generator.js languageName: unknown linkType: soft @@ -487,6 +487,7 @@ __metadata: version: 0.0.0-use.local resolution: "@atls-ui-parts/checkbox@workspace:ui-parts/checkbox" dependencies: + "@atls-ui-generators/appearance": "workspace:*" "@atls-ui-parts/layout": "workspace:*" "@atls-ui-parts/theme": "workspace:*" "@storybook/react": "npm:8.6.12" From 9f9bffe1f00f97c3d11225965bf1a3974f910467 Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Fri, 12 Jun 2026 17:43:17 +0300 Subject: [PATCH 4/9] fix(appearance): satisfy schema generator lint --- generators/appearance/src/schema/generator.ts | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/generators/appearance/src/schema/generator.ts b/generators/appearance/src/schema/generator.ts index 5c2016b90..00d217a78 100644 --- a/generators/appearance/src/schema/generator.ts +++ b/generators/appearance/src/schema/generator.ts @@ -13,21 +13,25 @@ export class StyleSchemaGenerator { ) {} async write(): Promise { - for (const fileSchema of this.schema.files) { - await this.getGenerator(fileSchema).generateFile( - join(this.basePath, fileSchema.target), - fileSchema.filename - ) - } + await Promise.all( + this.schema.files.map(async (fileSchema) => { + await this.getGenerator(fileSchema).generateFile( + join(this.basePath, fileSchema.target), + fileSchema.filename + ) + }) + ) } async check(): Promise { - for (const fileSchema of this.schema.files) { - await this.getGenerator(fileSchema).checkFile( - join(this.basePath, fileSchema.target), - fileSchema.filename - ) - } + await Promise.all( + this.schema.files.map(async (fileSchema) => { + await this.getGenerator(fileSchema).checkFile( + join(this.basePath, fileSchema.target), + fileSchema.filename + ) + }) + ) } private getGenerator(fileSchema: StyleSchemaFile): MapGenerator | StyleGenerator { From 70090f55ced6fb5f1636f1f6e83e4266800a85b8 Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Fri, 12 Jun 2026 17:58:19 +0300 Subject: [PATCH 5/9] fix(appearance): load schema paths in cli --- generators/appearance/package.json | 4 ++-- generators/appearance/src/generator.ts | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/generators/appearance/package.json b/generators/appearance/package.json index e4b5e2c1f..83dff9b12 100644 --- a/generators/appearance/package.json +++ b/generators/appearance/package.json @@ -21,7 +21,8 @@ }, "dependencies": { "@atls-ui-generators/utils": "workspace:*", - "commander": "13.1.0" + "commander": "13.1.0", + "tsx": "4.19.3" }, "devDependencies": { "@swc-node/register": "1.9.0", @@ -30,7 +31,6 @@ "@types/react": "19.1.2", "@vanilla-extract/css": "1.17.1", "@vanilla-extract/dynamic": "2.1.2", - "tsx": "4.19.3", "typescript": "5.5.4" }, "peerDependencies": { diff --git a/generators/appearance/src/generator.ts b/generators/appearance/src/generator.ts index 7f95ef238..f8aa035e0 100644 --- a/generators/appearance/src/generator.ts +++ b/generators/appearance/src/generator.ts @@ -5,10 +5,11 @@ import type { StyleSchema } from './schema/index.js' import assert from 'node:assert/strict' import { lstatSync } from 'node:fs' import { dirname } from 'node:path' -import { join } from 'node:path' +import { resolve } from 'node:path' import { pathToFileURL } from 'node:url' import { program } from 'commander' +import { tsImport } from 'tsx/esm/api' import { createLogger } from '@atls-ui-generators/utils' @@ -30,11 +31,14 @@ try { assert.ok(schemaPath && typeof schemaPath === 'string', 'Path to style schema is required') assert.ok(check !== write, 'Exactly one of --check or --write is required') - const absoluteSchemaPath = join(process.cwd(), schemaPath) + const absoluteSchemaPath = resolve(schemaPath) assert.ok(lstatSync(absoluteSchemaPath).isFile(), 'Style schema path should point to a file') - const schemaModule = (await import(pathToFileURL(absoluteSchemaPath).href)) as { + const schemaModule = (await tsImport( + pathToFileURL(absoluteSchemaPath).href, + import.meta.url + )) as { default?: StyleSchema schema?: StyleSchema } From 18903936e137571c84600cd71134c5f496a0a180 Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Fri, 12 Jun 2026 18:14:25 +0300 Subject: [PATCH 6/9] fix(appearance): restore create export --- .pnp.cjs | 866 +++++++++++----------- generators/appearance/package.json | 9 +- generators/appearance/src/create/index.ts | 3 + yarn.lock | 1 + 4 files changed, 446 insertions(+), 433 deletions(-) create mode 100644 generators/appearance/src/create/index.ts diff --git a/.pnp.cjs b/.pnp.cjs index cfdf982ed..81d87bd1f 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -267,7 +267,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/events-state", ["virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/events-state", "workspace:ui-parts/events-state"]],\ ["@atls-ui-parts/image", ["virtual:5dae0025774218e7d5b25f9293624b65d07c18a455c0543b6b0cbcc49eab1f8daaf93f688033cd0934a58e64a6421749d3e30955e506415c50f4612545e60177#workspace:ui-parts/image", "workspace:ui-parts/image"]],\ ["@atls-ui-parts/input", ["virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:ui-parts/input", "workspace:ui-parts/input"]],\ - ["@atls-ui-parts/layout", ["virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout", "virtual:ba0336f2ccf109a54b4b8063d4801935b554fc6f958edd172cb3c73a5a5a49118f16d1cd01b286a3749f851b3f37efaad86c3ceef598318c20b6e7cbecad90d2#workspace:ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout", "workspace:ui-parts/layout"]],\ + ["@atls-ui-parts/layout", ["virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout", "virtual:ba0336f2ccf109a54b4b8063d4801935b554fc6f958edd172cb3c73a5a5a49118f16d1cd01b286a3749f851b3f37efaad86c3ceef598318c20b6e7cbecad90d2#workspace:ui-parts/layout", "workspace:ui-parts/layout"]],\ ["@atls-ui-parts/link", ["virtual:5dae0025774218e7d5b25f9293624b65d07c18a455c0543b6b0cbcc49eab1f8daaf93f688033cd0934a58e64a6421749d3e30955e506415c50f4612545e60177#workspace:ui-parts/link", "workspace:ui-parts/link"]],\ ["@atls-ui-parts/mapbox", ["workspace:ui-parts/mapbox"]],\ ["@atls-ui-parts/modal", ["workspace:ui-parts/modal"]],\ @@ -284,7 +284,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/switch", ["virtual:84fec7902996807ffe9459860cec02b265a45b9530d4af930a181ff535e79e717246a38bb4611ad5edf869ca511300134198ba9fce541bdbb3e8479a17b38a87#workspace:ui-parts/switch", "workspace:ui-parts/switch"]],\ ["@atls-ui-parts/text", ["virtual:5dae0025774218e7d5b25f9293624b65d07c18a455c0543b6b0cbcc49eab1f8daaf93f688033cd0934a58e64a6421749d3e30955e506415c50f4612545e60177#workspace:ui-parts/text", "virtual:7728a79fcf2b0d64abc5cd65d0f9bef9c7053eb23c6ec2c4146d73676dd9b275527d8237cfcc28a43165f58666e2df983bbcfde049e0b205b6d72995bc2633f7#workspace:ui-parts/text", "workspace:ui-parts/text"]],\ ["@atls-ui-parts/text-transform", ["virtual:144bd10b47610de450c041ff553326fefe11958aedc1da4a2a09dafd48e073b7fc7fd88c35623eafbf7d353919a302f576bfc9d4dea4795b88e73d2fea0dc288#workspace:ui-parts/text-transform", "workspace:ui-parts/text-transform"]],\ - ["@atls-ui-parts/theme", ["virtual:9c83884c7a1bbb8b55eeb55db417f22eaf2ba48e2b1a3840cecc6737a018d63bede31efd8c8fa8a1529cfbb08be4bfc8a1a6ac9b3d61a21277c7e98446e604f8#workspace:ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme", "workspace:ui-parts/theme"]],\ + ["@atls-ui-parts/theme", ["virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme", "virtual:9c83884c7a1bbb8b55eeb55db417f22eaf2ba48e2b1a3840cecc6737a018d63bede31efd8c8fa8a1529cfbb08be4bfc8a1a6ac9b3d61a21277c7e98446e604f8#workspace:ui-parts/theme", "workspace:ui-parts/theme"]],\ ["@atls-ui-parts/tooltip", ["workspace:ui-parts/tooltip"]],\ ["@atls-ui-parts/upload", ["virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/upload", "workspace:ui-parts/upload"]],\ ["@atls-ui/design", ["workspace:ui/design"]],\ @@ -339,13 +339,13 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/layout", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/layout"],\ ["@atls-ui-admin/theme", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/theme"],\ ["@radix-ui/react-icons", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#npm:1.3.2"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -358,7 +358,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/theme", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-admin/theme"],\ ["@atls-ui-parts/button", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-parts/button"],\ ["@atls-utils/use-hover", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:utils/use-hover"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/next-themes", null],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ @@ -368,10 +368,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/next-themes",\ @@ -394,16 +394,16 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/theme", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-admin/theme"],\ ["@atls-ui-parts/button", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-parts/button"],\ ["@atls-utils/use-hover", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:utils/use-hover"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -423,7 +423,7 @@ const RAW_RUNTIME_STATE = ["@storybook/blocks", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@storybook/react", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@storybook/react-webpack5", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/types", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@types/cors", "npm:2.8.17"],\ ["@types/express", "npm:5.0.1"],\ @@ -439,8 +439,8 @@ const RAW_RUNTIME_STATE = ["mini-css-extract-plugin", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:2.9.2"],\ ["next-themes", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:0.4.6"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["style-loader", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:4.0.0"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"],\ ["webpack", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:5.99.7"]\ @@ -461,7 +461,7 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -496,7 +496,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/layout", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/layout"],\ ["@atls-ui-admin/theme", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-admin/theme"],\ ["@atls-ui-generators/icons", "workspace:generators/icons"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/next-themes", null],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ @@ -506,10 +506,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/next-themes",\ @@ -533,16 +533,16 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/layout", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/layout"],\ ["@atls-ui-admin/theme", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-admin/theme"],\ ["@atls-ui-generators/icons", "workspace:generators/icons"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -553,16 +553,16 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-admin/layout", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/layout"],\ ["@atls-ui-admin/theme", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/theme"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["@types/vanilla-extract__css", null],\ ["@types/vanilla-extract__dynamic", null],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -581,13 +581,13 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-admin/layout", "workspace:ui-admin/layout"],\ ["@atls-ui-admin/theme", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/theme"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -600,14 +600,14 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/layout", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/layout"],\ ["@atls-ui-admin/theme", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/theme"],\ ["@radix-ui/react-icons", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#npm:1.3.2"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["@vanilla-extract/recipes", "virtual:3d06fbb19d1fe3e56495101348ea0a04ee3f83383f44c49513a90168d8afa4fd0bb1beb21869c24e100c6d64fc80ac2453d3b6cf930e63e6f7b9fbd0b88593f2#npm:0.5.5"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -621,15 +621,15 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/layout", "virtual:b32a26a2fdb9efe95b0d3c1680d4b91fdda6b5202d080748278d5d418cc8670dced3df8a9ed2862d4501349fbf99cee1cc30a7bdbef4b607caffd1b77c40d6b4#workspace:ui-admin/layout"],\ ["@atls-ui-admin/theme", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-admin/theme"],\ ["@atls-ui-parts/text", "virtual:7728a79fcf2b0d64abc5cd65d0f9bef9c7053eb23c6ec2c4146d73676dd9b275527d8237cfcc28a43165f58666e2df983bbcfde049e0b205b6d72995bc2633f7#workspace:ui-parts/text"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -648,9 +648,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/next-themes",\ @@ -679,9 +679,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/next-themes",\ @@ -705,9 +705,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -721,7 +721,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-admin/icon", "virtual:8abd482360ef540236bb22f7f640d838feaf62f3c0611c27cb08b87169f5fba58928d4fb96fbf3710d32e2d87fd7503456789a58c4b25b6508d2255b10341dd0#workspace:ui-admin/icon"],\ ["@atls-ui-admin/icons", "virtual:ecc6b1bbaecda01b4876fa1e192199007fc275ac98b826098f5b047b9f5e5078bc2e874010bd031f331dc7f74a04d19db38a9dc54b7d146b32d9430495098e39#workspace:ui-admin/icons"],\ ["@atls-ui-admin/theme", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-admin/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ @@ -730,9 +730,9 @@ const RAW_RUNTIME_STATE = ["graphql-request", "virtual:ecc6b1bbaecda01b4876fa1e192199007fc275ac98b826098f5b047b9f5e5078bc2e874010bd031f331dc7f74a04d19db38a9dc54b7d146b32d9430495098e39#npm:7.1.2"],\ ["next-themes", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:0.4.6"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["react-dropzone", "virtual:ecc6b1bbaecda01b4876fa1e192199007fc275ac98b826098f5b047b9f5e5078bc2e874010bd031f331dc7f74a04d19db38a9dc54b7d146b32d9430495098e39#npm:14.3.8"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -743,6 +743,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-generators/appearance", "virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:generators/appearance"],\ ["@atls-ui-generators/utils", "workspace:generators/utils"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@swc-node/register", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.9.0"],\ ["@swc/core", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.6.1"],\ ["@types/node", "npm:22.15.3"],\ @@ -754,7 +755,7 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["commander", "npm:13.1.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["tsx", "npm:4.19.3"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"]\ ],\ @@ -775,6 +776,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-generators/utils", "workspace:generators/utils"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@swc-node/register", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.9.0"],\ ["@swc/core", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.6.1"],\ ["@types/node", "npm:22.15.3"],\ @@ -786,7 +788,7 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["commander", "npm:13.1.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["tsx", "npm:4.19.3"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"]\ ],\ @@ -807,6 +809,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-generators/appearance", "workspace:generators/appearance"],\ ["@atls-ui-generators/utils", "workspace:generators/utils"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@swc-node/register", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.9.0"],\ ["@swc/core", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#npm:1.6.1"],\ ["@types/node", "npm:22.15.3"],\ @@ -890,10 +893,10 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/autocomplete", "workspace:ui-parts/autocomplete"],\ ["@atls-ui-parts/input", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:ui-parts/input"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@atls-utils/use-float", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:utils/use-float"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ @@ -901,8 +904,8 @@ const RAW_RUNTIME_STATE = ["downshift", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#npm:9.0.9"],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -913,17 +916,17 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/avatar", "workspace:ui-parts/avatar"],\ ["@atls-ui-parts/text-transform", "virtual:144bd10b47610de450c041ff553326fefe11958aedc1da4a2a09dafd48e073b7fc7fd88c35623eafbf7d353919a302f576bfc9d4dea4795b88e73d2fea0dc288#workspace:ui-parts/text-transform"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@radix-ui/react-avatar", "virtual:144bd10b47610de450c041ff553326fefe11958aedc1da4a2a09dafd48e073b7fc7fd88c35623eafbf7d353919a302f576bfc9d4dea4795b88e73d2fea0dc288#npm:1.1.7"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["@vanilla-extract/recipes", "virtual:3d06fbb19d1fe3e56495101348ea0a04ee3f83383f44c49513a90168d8afa4fd0bb1beb21869c24e100c6d64fc80ac2453d3b6cf930e63e6f7b9fbd0b88593f2#npm:0.5.5"],\ ["clsx", "npm:2.1.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -934,10 +937,10 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/button", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-parts/button"],\ ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@atls-utils/use-hover", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:utils/use-hover"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["@types/vanilla-extract__css", null],\ @@ -945,10 +948,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -968,7 +971,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/button", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/button"],\ ["@atls-ui-generators/appearance", "virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:generators/appearance"],\ ["@atls-ui-parts/layout", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@atls-utils/use-hover", "virtual:ab74b0ad21d788b5faaef36e69cfdc113b850f1834ee613c0e84e69c90b4422225458e49681dd5efa10b62df03744b2c5390da900b6092fa9e40fd6605cda940#workspace:utils/use-hover"],\ ["@storybook/react", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ @@ -978,10 +981,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1000,18 +1003,18 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/button", "workspace:ui-parts/button"],\ ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@atls-utils/use-hover", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:utils/use-hover"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1033,8 +1036,8 @@ const RAW_RUNTIME_STATE = ["clsx", "npm:2.1.1"],\ ["framer-motion", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#npm:12.9.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1046,18 +1049,18 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/carousel", "workspace:ui-parts/carousel"],\ ["@atls-ui-parts/condition", "virtual:b378c3744940a7b99c67abdb39dc737773a80c0cc25dff9c1c69af815451ed8f73418ff7e0686ab1125f5a97f0715093ece934285ed0996c6ab9e33426941881#workspace:ui-parts/condition"],\ ["@atls-ui-parts/dom", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/dom"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["framer-motion", "virtual:b378c3744940a7b99c67abdb39dc737773a80c0cc25dff9c1c69af815451ed8f73418ff7e0686ab1125f5a97f0715093ece934285ed0996c6ab9e33426941881#npm:12.9.2"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1068,16 +1071,16 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/checkbox", "workspace:ui-parts/checkbox"],\ ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1087,14 +1090,14 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-condition-virtual-3dba37771c/1/ui-parts/condition/",\ "packageDependencies": [\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/framer-motion", null],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/framer-motion",\ @@ -1109,14 +1112,14 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-condition-virtual-83a78066da/1/ui-parts/condition/",\ "packageDependencies": [\ ["@atls-ui-parts/condition", "virtual:7320150afbbc6ec55c21089a059ead3646dc2bd28dc1432babd63921eeeadcf962f3f8817d239fb13ea9630091ad4c0b28f391a95d824050b78d6e9fdb83ee59#workspace:ui-parts/condition"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/framer-motion", null],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["framer-motion", "virtual:7320150afbbc6ec55c21089a059ead3646dc2bd28dc1432babd63921eeeadcf962f3f8817d239fb13ea9630091ad4c0b28f391a95d824050b78d6e9fdb83ee59#npm:12.9.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/framer-motion",\ @@ -1137,8 +1140,8 @@ const RAW_RUNTIME_STATE = ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["framer-motion", "virtual:8ba2d7cff2f40f99ca14ec60d7419a0108ca06436e1f6ac648424c80c9e3736fc924f61954e7397730f252028727487cd7cd319b35028358c3db356c63001936#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/framer-motion",\ @@ -1159,8 +1162,8 @@ const RAW_RUNTIME_STATE = ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["framer-motion", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#npm:12.9.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/framer-motion",\ @@ -1176,14 +1179,14 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-condition-virtual-ae42247e16/1/ui-parts/condition/",\ "packageDependencies": [\ ["@atls-ui-parts/condition", "virtual:b378c3744940a7b99c67abdb39dc737773a80c0cc25dff9c1c69af815451ed8f73418ff7e0686ab1125f5a97f0715093ece934285ed0996c6ab9e33426941881#workspace:ui-parts/condition"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/framer-motion", null],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["framer-motion", "virtual:b378c3744940a7b99c67abdb39dc737773a80c0cc25dff9c1c69af815451ed8f73418ff7e0686ab1125f5a97f0715093ece934285ed0996c6ab9e33426941881#npm:12.9.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/framer-motion",\ @@ -1199,14 +1202,14 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-condition-virtual-93961d1c78/1/ui-parts/condition/",\ "packageDependencies": [\ ["@atls-ui-parts/condition", "virtual:da655f76fb0a7abb1a892608b634316179378c6672ef2e4237cfc638bc59c4632d4d90add99f0f36fc3476fd7ba3bfb9b8da134f89edd82cecf6748f1bd98e54#workspace:ui-parts/condition"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/framer-motion", null],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/framer-motion",\ @@ -1222,12 +1225,12 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/condition/",\ "packageDependencies": [\ ["@atls-ui-parts/condition", "workspace:ui-parts/condition"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1249,19 +1252,19 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/datepicker", "workspace:ui-parts/datepicker"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ ["@atls-ui-parts/input", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:ui-parts/input"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@emotion/css", "patch:@emotion/css@npm%3A11.13.0#~/.yarn/patches/@emotion-css-npm-11.13.0-7fe925d1e6.patch::version=11.13.0&hash=be729c"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["date-fns", "npm:4.1.0"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ ["react-datepicker", "virtual:9327d95985dbaa552b114b3d4e85ad244ec46c632fd10bba0eadffef89dbb7753d95ac2e47d1e17487a6c00d4d327fc50bbab27644c34e1dfc251376c43233e7#npm:8.3.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1271,7 +1274,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/design/",\ "packageDependencies": [\ ["@atls-ui-parts/design", "workspace:ui-parts/design"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@chromatic-com/storybook", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:3.2.6"],\ ["@mdx-js/react", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:3.1.0"],\ ["@storybook/addon-essentials", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ @@ -1282,7 +1285,7 @@ const RAW_RUNTIME_STATE = ["@storybook/blocks", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@storybook/react", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@storybook/react-webpack5", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/types", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@types/cors", "npm:2.8.17"],\ ["@types/express", "npm:5.0.1"],\ @@ -1298,8 +1301,8 @@ const RAW_RUNTIME_STATE = ["mini-css-extract-plugin", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:2.9.2"],\ ["next-themes", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:0.4.6"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["style-loader", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:4.0.0"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"],\ ["webpack", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:5.99.7"]\ @@ -1339,7 +1342,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1370,9 +1373,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1394,7 +1397,7 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"]\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1407,10 +1410,10 @@ const RAW_RUNTIME_STATE = ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ ["@atls-ui-parts/events-state", "virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/events-state"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@atls-ui-parts/upload", "virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/upload"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["@types/vanilla-extract__css", null],\ @@ -1418,10 +1421,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1442,38 +1445,38 @@ const RAW_RUNTIME_STATE = ["@atls-ui-generators/appearance", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:generators/appearance"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ ["@atls-ui-parts/events-state", "virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/events-state"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@atls-ui-parts/upload", "virtual:8480592f2ac0c5b00b17bd33d76d0c6d79665a3657c712c5bc5180464a86ac9bcb81d64ef54341b94b31e43db66a2fad906cfc6036c573c170560d657b7f96aa#workspace:ui-parts/upload"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ ]],\ ["@atls-ui-parts/layout", [\ - ["virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout", {\ - "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-layout-virtual-dd31ccb75b/1/ui-parts/layout/",\ + ["virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout", {\ + "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-layout-virtual-4de0fe2de8/1/ui-parts/layout/",\ "packageDependencies": [\ - ["@atls-ui-parts/layout", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@types/react", "npm:19.1.2"],\ - ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ + ["@types/react-dom", null],\ ["@types/vanilla-extract__css", null],\ ["@types/vanilla-extract__dynamic", null],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1487,21 +1490,21 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:ba0336f2ccf109a54b4b8063d4801935b554fc6f958edd172cb3c73a5a5a49118f16d1cd01b286a3749f851b3f37efaad86c3ceef598318c20b6e7cbecad90d2#workspace:ui-parts/layout", {\ - "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-layout-virtual-f0180d56c5/1/ui-parts/layout/",\ + ["virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout", {\ + "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-layout-virtual-dd31ccb75b/1/ui-parts/layout/",\ "packageDependencies": [\ - ["@atls-ui-parts/layout", "virtual:ba0336f2ccf109a54b4b8063d4801935b554fc6f958edd172cb3c73a5a5a49118f16d1cd01b286a3749f851b3f37efaad86c3ceef598318c20b6e7cbecad90d2#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@types/react", "npm:19.1.2"],\ - ["@types/react-dom", null],\ + ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["@types/vanilla-extract__css", null],\ ["@types/vanilla-extract__dynamic", null],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1515,11 +1518,11 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout", {\ - "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-layout-virtual-09936584a3/1/ui-parts/layout/",\ + ["virtual:ba0336f2ccf109a54b4b8063d4801935b554fc6f958edd172cb3c73a5a5a49118f16d1cd01b286a3749f851b3f37efaad86c3ceef598318c20b6e7cbecad90d2#workspace:ui-parts/layout", {\ + "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-layout-virtual-f0180d56c5/1/ui-parts/layout/",\ "packageDependencies": [\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:ba0336f2ccf109a54b4b8063d4801935b554fc6f958edd172cb3c73a5a5a49118f16d1cd01b286a3749f851b3f37efaad86c3ceef598318c20b6e7cbecad90d2#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["@types/vanilla-extract__css", null],\ @@ -1527,9 +1530,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1552,9 +1555,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1573,9 +1576,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["next", "virtual:37630b2bec7c75945c5b76e78d0446ab9f7dea61653ed06d66ebccae59680f97824953d09a69ffd1833f9761b6d2aa0b6aceadeff024107a86da32f8c288dba9#npm:15.3.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/next",\ @@ -1599,9 +1602,9 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["next", "virtual:b2254c2d82af19fb4b66316f70568d9bb842b90577af32d06ce4041b067382e4019e46921576ca16c5e94d26ef67d71a84d5e6edc1d9dc8c1caf4ef71a29968c#npm:15.3.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1624,15 +1627,15 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/modal", "workspace:ui-parts/modal"],\ ["@atls-utils/use-float", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:utils/use-float"],\ ["@floating-ui/react", "virtual:bdec61daa5ce18b211e41086a87aa58babcd016eed745eb318a2389812d34b0215bd01c4e05f4de11cfc30bd0259efe6cace4826920dba58cacb6c2dd7978d3e#npm:0.27.8"],\ - ["@storybook/preview-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/preview-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1647,7 +1650,7 @@ const RAW_RUNTIME_STATE = ["clsx", "npm:2.1.1"],\ ["next", "virtual:b2254c2d82af19fb4b66316f70568d9bb842b90577af32d06ce4041b067382e4019e46921576ca16c5e94d26ef67d71a84d5e6edc1d9dc8c1caf4ef71a29968c#npm:15.3.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1659,13 +1662,13 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/parallax", "workspace:ui-parts/parallax"],\ ["@atls-ui-parts/condition", "virtual:7320150afbbc6ec55c21089a059ead3646dc2bd28dc1432babd63921eeeadcf962f3f8817d239fb13ea9630091ad4c0b28f391a95d824050b78d6e9fdb83ee59#workspace:ui-parts/condition"],\ ["@atls-ui-parts/dom", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/dom"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["framer-motion", "virtual:7320150afbbc6ec55c21089a059ead3646dc2bd28dc1432babd63921eeeadcf962f3f8817d239fb13ea9630091ad4c0b28f391a95d824050b78d6e9fdb83ee59#npm:12.9.2"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ ["react-intersection-observer", "virtual:7320150afbbc6ec55c21089a059ead3646dc2bd28dc1432babd63921eeeadcf962f3f8817d239fb13ea9630091ad4c0b28f391a95d824050b78d6e9fdb83ee59#npm:9.16.0"]\ ],\ @@ -1678,17 +1681,17 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/placeholder", "workspace:ui-parts/placeholder"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@atls-ui-parts/text", "virtual:7728a79fcf2b0d64abc5cd65d0f9bef9c7053eb23c6ec2c4146d73676dd9b275527d8237cfcc28a43165f58666e2df983bbcfde049e0b205b6d72995bc2633f7#workspace:ui-parts/text"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1699,17 +1702,17 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/popover", "workspace:ui-parts/popover"],\ ["@atls-ui-parts/condition", "virtual:da655f76fb0a7abb1a892608b634316179378c6672ef2e4237cfc638bc59c4632d4d90add99f0f36fc3476fd7ba3bfb9b8da134f89edd82cecf6748f1bd98e54#workspace:ui-parts/condition"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@atls-utils/use-float", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:utils/use-float"],\ ["@floating-ui/react", "virtual:bdec61daa5ce18b211e41086a87aa58babcd016eed745eb318a2389812d34b0215bd01c4e05f4de11cfc30bd0259efe6cace4826920dba58cacb6c2dd7978d3e#npm:0.27.8"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1722,7 +1725,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1733,17 +1736,17 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/progress", "workspace:ui-parts/progress"],\ ["@atls-ui-parts/button", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:ui-parts/button"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1767,18 +1770,18 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/select/",\ "packageDependencies": [\ ["@atls-ui-parts/select", "workspace:ui-parts/select"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@atls-utils/use-select", "virtual:9c076913ffd643939b8ac6e8c374fd1470f44689001261d35898fb07091ea0aa596a24d8bcdfb508f949d0c68789b448702cfb68072c423229496303e9a11342#workspace:utils/use-select"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1788,18 +1791,18 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/sidebar/",\ "packageDependencies": [\ ["@atls-ui-parts/sidebar", "workspace:ui-parts/sidebar"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@atls-ui-parts/switch", "virtual:84fec7902996807ffe9459860cec02b265a45b9530d4af930a181ff535e79e717246a38bb4611ad5edf869ca511300134198ba9fce541bdbb3e8479a17b38a87#workspace:ui-parts/switch"],\ ["@atls-utils/use-hover", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#workspace:utils/use-hover"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["framer-motion", "virtual:b378c3744940a7b99c67abdb39dc737773a80c0cc25dff9c1c69af815451ed8f73418ff7e0686ab1125f5a97f0715093ece934285ed0996c6ab9e33426941881#npm:12.9.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1809,14 +1812,14 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/swiper/",\ "packageDependencies": [\ ["@atls-ui-parts/swiper", "workspace:ui-parts/swiper"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["swiper", "npm:11.2.6"]\ ],\ "linkType": "SOFT"\ @@ -1827,9 +1830,9 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-switch-virtual-ed4cf44824/1/ui-parts/switch/",\ "packageDependencies": [\ ["@atls-ui-parts/switch", "virtual:84fec7902996807ffe9459860cec02b265a45b9530d4af930a181ff535e79e717246a38bb4611ad5edf869ca511300134198ba9fce541bdbb3e8479a17b38a87#workspace:ui-parts/switch"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["@types/vanilla-extract__css", null],\ @@ -1838,10 +1841,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["framer-motion", "virtual:b378c3744940a7b99c67abdb39dc737773a80c0cc25dff9c1c69af815451ed8f73418ff7e0686ab1125f5a97f0715093ece934285ed0996c6ab9e33426941881#npm:12.9.2"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1859,18 +1862,18 @@ const RAW_RUNTIME_STATE = "packageLocation": "./ui-parts/switch/",\ "packageDependencies": [\ ["@atls-ui-parts/switch", "workspace:ui-parts/switch"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ ["framer-motion", "virtual:b378c3744940a7b99c67abdb39dc737773a80c0cc25dff9c1c69af815451ed8f73418ff7e0686ab1125f5a97f0715093ece934285ed0996c6ab9e33426941881#npm:12.9.2"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1882,7 +1885,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/text", "virtual:5dae0025774218e7d5b25f9293624b65d07c18a455c0543b6b0cbcc49eab1f8daaf93f688033cd0934a58e64a6421749d3e30955e506415c50f4612545e60177#workspace:ui-parts/text"],\ ["@atls-ui-parts/condition", "virtual:7855f928ce5a1e6fe00d063ab613ea1ad46e30a83ad0308ee39c3cb7bd7dd2e2a116cab910868077cf4f3ee4f818314d4ce795f7ef8bbfe26f754235528b14e7#workspace:ui-parts/condition"],\ ["@atls-ui-parts/layout", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@storybook/react", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ @@ -1891,10 +1894,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1913,9 +1916,9 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/text", "virtual:7728a79fcf2b0d64abc5cd65d0f9bef9c7053eb23c6ec2c4146d73676dd9b275527d8237cfcc28a43165f58666e2df983bbcfde049e0b205b6d72995bc2633f7#workspace:ui-parts/text"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["@types/vanilla-extract__css", null],\ @@ -1923,10 +1926,10 @@ const RAW_RUNTIME_STATE = ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -1945,17 +1948,17 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/text", "workspace:ui-parts/text"],\ ["@atls-ui-parts/condition", "virtual:06315aec6049f1c6c32004d6e584058ffedd6c8eaf08aaee2ce03aaedeaf84c340968f24d92b3566001c478f3ac64eca59adabd63e33390cb5990761978a1ea2#workspace:ui-parts/condition"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -1972,7 +1975,7 @@ const RAW_RUNTIME_STATE = ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["http-server", "npm:14.1.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react",\ @@ -1992,59 +1995,58 @@ const RAW_RUNTIME_STATE = ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["http-server", "npm:14.1.1"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ ]],\ ["@atls-ui-parts/theme", [\ - ["virtual:9c83884c7a1bbb8b55eeb55db417f22eaf2ba48e2b1a3840cecc6737a018d63bede31efd8c8fa8a1529cfbb08be4bfc8a1a6ac9b3d61a21277c7e98446e604f8#workspace:ui-parts/theme", {\ - "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-theme-virtual-86f24dbf41/1/ui-parts/theme/",\ + ["virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme", {\ + "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-theme-virtual-76ebc481ac/1/ui-parts/theme/",\ "packageDependencies": [\ - ["@atls-ui-parts/theme", "virtual:9c83884c7a1bbb8b55eeb55db417f22eaf2ba48e2b1a3840cecc6737a018d63bede31efd8c8fa8a1529cfbb08be4bfc8a1a6ac9b3d61a21277c7e98446e604f8#workspace:ui-parts/theme"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@atls-ui/theme", "workspace:ui/theme"],\ - ["@storybook/blocks", "virtual:2ad1ea9ed58ec34034d981b71dc2cc771c4371726bab2fec9d2140e3133cea8ccdc8650d00b83aea848bfc43e82b95d31052474390054d601df6c587082ad33d#npm:8.6.12"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/blocks", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/vanilla-extract__css", null],\ ["@types/vanilla-extract__dynamic", null],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react",\ "@types/vanilla-extract__css",\ "@types/vanilla-extract__dynamic",\ "@vanilla-extract/css",\ - "@vanilla-extract/dynamic",\ - "react"\ + "@vanilla-extract/dynamic"\ ],\ "linkType": "SOFT"\ }],\ - ["virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme", {\ - "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-theme-virtual-2ad1ea9ed5/1/ui-parts/theme/",\ + ["virtual:9c83884c7a1bbb8b55eeb55db417f22eaf2ba48e2b1a3840cecc6737a018d63bede31efd8c8fa8a1529cfbb08be4bfc8a1a6ac9b3d61a21277c7e98446e604f8#workspace:ui-parts/theme", {\ + "packageLocation": "./.yarn/__virtual__/@atls-ui-parts-theme-virtual-86f24dbf41/1/ui-parts/theme/",\ "packageDependencies": [\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/theme", "virtual:9c83884c7a1bbb8b55eeb55db417f22eaf2ba48e2b1a3840cecc6737a018d63bede31efd8c8fa8a1529cfbb08be4bfc8a1a6ac9b3d61a21277c7e98446e604f8#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@atls-ui/theme", "workspace:ui/theme"],\ - ["@storybook/blocks", "virtual:2ad1ea9ed58ec34034d981b71dc2cc771c4371726bab2fec9d2140e3133cea8ccdc8650d00b83aea848bfc43e82b95d31052474390054d601df6c587082ad33d#npm:8.6.12"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/blocks", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/vanilla-extract__css", null],\ ["@types/vanilla-extract__dynamic", null],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react",\ @@ -2062,16 +2064,16 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/theme", "workspace:ui-parts/theme"],\ ["@atls-ui-parts/layout", "virtual:ba0336f2ccf109a54b4b8063d4801935b554fc6f958edd172cb3c73a5a5a49118f16d1cd01b286a3749f851b3f37efaad86c3ceef598318c20b6e7cbecad90d2#workspace:ui-parts/layout"],\ ["@atls-ui/theme", "workspace:ui/theme"],\ - ["@storybook/blocks", "virtual:2ad1ea9ed58ec34034d981b71dc2cc771c4371726bab2fec9d2140e3133cea8ccdc8650d00b83aea848bfc43e82b95d31052474390054d601df6c587082ad33d#npm:8.6.12"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/blocks", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["clsx", "npm:2.1.1"],\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -2082,17 +2084,17 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@atls-ui-parts/tooltip", "workspace:ui-parts/tooltip"],\ ["@atls-ui-parts/condition", "virtual:da655f76fb0a7abb1a892608b634316179378c6672ef2e4237cfc638bc59c4632d4d90add99f0f36fc3476fd7ba3bfb9b8da134f89edd82cecf6748f1bd98e54#workspace:ui-parts/condition"],\ - ["@atls-ui-parts/layout", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/layout"],\ + ["@atls-ui-parts/layout", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#workspace:ui-parts/layout"],\ ["@atls-utils/use-float", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#workspace:utils/use-float"],\ ["@floating-ui/react", "virtual:bdec61daa5ce18b211e41086a87aa58babcd016eed745eb318a2389812d34b0215bd01c4e05f4de11cfc30bd0259efe6cace4826920dba58cacb6c2dd7978d3e#npm:0.27.8"],\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@vanilla-extract/css", "npm:1.17.1"],\ ["@vanilla-extract/dynamic", "npm:2.1.2"],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "linkType": "SOFT"\ }]\ @@ -2107,7 +2109,7 @@ const RAW_RUNTIME_STATE = ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["graphql", "npm:16.11.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["react-dropzone", "virtual:ecc6b1bbaecda01b4876fa1e192199007fc275ac98b826098f5b047b9f5e5078bc2e874010bd031f331dc7f74a04d19db38a9dc54b7d146b32d9430495098e39#npm:14.3.8"]\ ],\ "packagePeers": [\ @@ -2140,7 +2142,7 @@ const RAW_RUNTIME_STATE = ["@atls-ui-parts/layout", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#workspace:ui-parts/layout"],\ ["@atls-ui-parts/link", "virtual:5dae0025774218e7d5b25f9293624b65d07c18a455c0543b6b0cbcc49eab1f8daaf93f688033cd0934a58e64a6421749d3e30955e506415c50f4612545e60177#workspace:ui-parts/link"],\ ["@atls-ui-parts/text", "virtual:5dae0025774218e7d5b25f9293624b65d07c18a455c0543b6b0cbcc49eab1f8daaf93f688033cd0934a58e64a6421749d3e30955e506415c50f4612545e60177#workspace:ui-parts/text"],\ - ["@atls-ui-parts/theme", "virtual:dbe1a421eee484ea0bdb9d0589d44d9184c9819d8f5bfcb1a73e3d85271cc45ecf4365a26e00f2a3256c13de48b40272578801688978809175001fb2693bc747#workspace:ui-parts/theme"],\ + ["@atls-ui-parts/theme", "virtual:6e3d13d4bb141546c851eafb803659d9bef8a8a4b826ab761e48399dcbf8cda80227a38097da69531ddae63c1380c43a5fad649d9ff8e485d2bc4c96720b9bd0#workspace:ui-parts/theme"],\ ["@chromatic-com/storybook", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:3.2.6"],\ ["@mdx-js/react", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:3.1.0"],\ ["@storybook/addon-essentials", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ @@ -2151,7 +2153,7 @@ const RAW_RUNTIME_STATE = ["@storybook/blocks", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@storybook/react", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@storybook/react-webpack5", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/types", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@types/express", "npm:5.0.1"],\ ["@types/node", "npm:22.15.3"],\ @@ -2165,8 +2167,8 @@ const RAW_RUNTIME_STATE = ["express", "npm:5.1.0"],\ ["mini-css-extract-plugin", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:2.9.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["style-loader", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:4.0.0"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"],\ ["webpack", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:5.99.7"]\ @@ -2192,7 +2194,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -2209,7 +2211,7 @@ const RAW_RUNTIME_STATE = ["@floating-ui/react", "virtual:bdec61daa5ce18b211e41086a87aa58babcd016eed745eb318a2389812d34b0215bd01c4e05f4de11cfc30bd0259efe6cace4826920dba58cacb6c2dd7978d3e#npm:0.27.8"],\ ["@types/react", "npm:19.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -2223,7 +2225,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -2241,7 +2243,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -2258,7 +2260,7 @@ const RAW_RUNTIME_STATE = ["@types/node", "npm:22.15.3"],\ ["@types/react", "npm:19.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -2285,7 +2287,7 @@ const RAW_RUNTIME_STATE = ["downshift", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#npm:9.0.9"],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -2305,7 +2307,7 @@ const RAW_RUNTIME_STATE = ["downshift", "virtual:e8b379d238bee0c446fdeaddb9725553fcee91eeb8db9f1f4b47e4e36a5c6c26c07ae1861b7d0a5dd574863bc008f048d25fc793392ceeaade0c9801b921d418#npm:9.0.9"],\ ["framer-motion", "virtual:3dba37771ce499e6d5c33bd82b7263c259fd8b9b612d0bf65962a3da6b1ec4612c0f051c5ab6d1701e4760bde49cb56e2383e557801939071c5dbec0f467c0d5#npm:12.23.22"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "linkType": "SOFT"\ }]\ @@ -5245,7 +5247,7 @@ const RAW_RUNTIME_STATE = ["filesize", "npm:10.1.4"],\ ["jsonfile", "npm:6.1.0"],\ ["react-confetti", "virtual:cd2e6a83497df8b9d6e5a44b2c1be0be176c71e66148c64b6746cf1c0c2192323cba228a4e60f49d165d92c9b18f3b4b2fa350d0c75db2ae8976b0ffacb63b59#npm:6.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["strip-ansi", "npm:7.1.0"]\ ],\ "packagePeers": [\ @@ -6225,7 +6227,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["tabbable", "npm:6.2.0"]\ ],\ "packagePeers": [\ @@ -6253,7 +6255,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -6954,7 +6956,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -7047,7 +7049,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -7183,7 +7185,7 @@ const RAW_RUNTIME_STATE = ["@types/uuid", "npm:9.0.8"],\ ["dequal", "npm:2.0.3"],\ ["polished", "npm:4.3.1"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["uuid", "npm:9.0.1"]\ ],\ "packagePeers": [\ @@ -7208,7 +7210,7 @@ const RAW_RUNTIME_STATE = ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ ["memoizerific", "npm:1.11.3"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7233,7 +7235,7 @@ const RAW_RUNTIME_STATE = ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ ["dequal", "npm:2.0.3"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7262,7 +7264,7 @@ const RAW_RUNTIME_STATE = ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ ["react-dom", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7294,7 +7296,7 @@ const RAW_RUNTIME_STATE = ["@storybook/addon-toolbars", "virtual:5ea2edd541be72763d55528d97b8f0c97e555a6939b881fd429d349f56b1f502761a1bb975ca802e8a8d058527babc0093c13685c03f297edafc4b42840d2ee7#npm:8.6.12"],\ ["@storybook/addon-viewport", "virtual:5ea2edd541be72763d55528d97b8f0c97e555a6939b881fd429d349f56b1f502761a1bb975ca802e8a8d058527babc0093c13685c03f297edafc4b42840d2ee7#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7318,7 +7320,7 @@ const RAW_RUNTIME_STATE = ["@storybook/addon-highlight", "virtual:5ea2edd541be72763d55528d97b8f0c97e555a6939b881fd429d349f56b1f502761a1bb975ca802e8a8d058527babc0093c13685c03f297edafc4b42840d2ee7#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -7340,11 +7342,11 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@storybook/addon-interactions", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/instrumenter", "virtual:a35e93ca3e11bde59d074093d0aa38b09cbd00c051225251f32171c8a0bd9d5e139e62edaffb6851e9413acaefcdba04964179474cf73c5094bb1ed40764fccc#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/instrumenter", "virtual:eab61851f464d77f5738974cd264c747ce96ef1f28e3f2b14a77acf8955137ff6b6bc19744e8cbef7ebf4f6e023602cea4f0d78f465d89d8726a74af9520de52#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/storybook", null],\ ["polished", "npm:4.3.1"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7370,7 +7372,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7396,7 +7398,7 @@ const RAW_RUNTIME_STATE = ["@storybook/addon-measure", "virtual:5ea2edd541be72763d55528d97b8f0c97e555a6939b881fd429d349f56b1f502761a1bb975ca802e8a8d058527babc0093c13685c03f297edafc4b42840d2ee7#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["tiny-invariant", "npm:1.3.3"]\ ],\ "packagePeers": [\ @@ -7420,7 +7422,7 @@ const RAW_RUNTIME_STATE = ["@storybook/addon-outline", "virtual:5ea2edd541be72763d55528d97b8f0c97e555a6939b881fd429d349f56b1f502761a1bb975ca802e8a8d058527babc0093c13685c03f297edafc4b42840d2ee7#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7466,7 +7468,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@storybook/addon-toolbars", "virtual:5ea2edd541be72763d55528d97b8f0c97e555a6939b881fd429d349f56b1f502761a1bb975ca802e8a8d058527babc0093c13685c03f297edafc4b42840d2ee7#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -7489,7 +7491,7 @@ const RAW_RUNTIME_STATE = ["@storybook/addon-viewport", "virtual:5ea2edd541be72763d55528d97b8f0c97e555a6939b881fd429d349f56b1f502761a1bb975ca802e8a8d058527babc0093c13685c03f297edafc4b42840d2ee7#npm:8.6.12"],\ ["@types/storybook", null],\ ["memoizerific", "npm:1.11.3"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -7518,17 +7520,17 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:2ad1ea9ed58ec34034d981b71dc2cc771c4371726bab2fec9d2140e3133cea8ccdc8650d00b83aea848bfc43e82b95d31052474390054d601df6c587082ad33d#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-496e7b06d6/2/.yarn/berry/cache/@storybook-blocks-npm-8.6.12-91ce7233c5-10.zip/node_modules/@storybook/blocks/",\ + ["virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-101db9efb2/2/.yarn/berry/cache/@storybook-blocks-npm-8.6.12-91ce7233c5-10.zip/node_modules/@storybook/blocks/",\ "packageDependencies": [\ - ["@storybook/blocks", "virtual:2ad1ea9ed58ec34034d981b71dc2cc771c4371726bab2fec9d2140e3133cea8ccdc8650d00b83aea848bfc43e82b95d31052474390054d601df6c587082ad33d#npm:8.6.12"],\ - ["@storybook/icons", "virtual:496e7b06d62ae07c8801853e1de0d9c10cf05c81229354a22c271f5dc97fce79c25c38c571c1e7ca77005cddd4aa8af6db89f984659f297c09594d3546b74c88#npm:1.4.0"],\ + ["@storybook/blocks", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ + ["@storybook/icons", "virtual:101db9efb2f311c629b7b9566152f01a7184284190db0e5ef93a486b316b4500368d4a0f1ebb1ff74719f0fb365e13036da1910ba67c62d38f5756ebbb75e09d#npm:1.4.0"],\ ["@types/react", "npm:19.1.2"],\ - ["@types/react-dom", null],\ + ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7541,17 +7543,17 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-101db9efb2/2/.yarn/berry/cache/@storybook-blocks-npm-8.6.12-91ce7233c5-10.zip/node_modules/@storybook/blocks/",\ + ["virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-blocks-virtual-6fab0d5d15/2/.yarn/berry/cache/@storybook-blocks-npm-8.6.12-91ce7233c5-10.zip/node_modules/@storybook/blocks/",\ "packageDependencies": [\ - ["@storybook/blocks", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ - ["@storybook/icons", "virtual:101db9efb2f311c629b7b9566152f01a7184284190db0e5ef93a486b316b4500368d4a0f1ebb1ff74719f0fb365e13036da1910ba67c62d38f5756ebbb75e09d#npm:1.4.0"],\ + ["@storybook/blocks", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ + ["@storybook/icons", "virtual:6fab0d5d1566ccabfa626c1ad0af4207cbef279dc393dfcae6a59a478ebb171fdb7e1813dfd6e059ccc9bfa8b7a427c1df7fa8709d358fa34bd519ede4f829c4#npm:1.4.0"],\ ["@types/react", "npm:19.1.2"],\ - ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ + ["@types/react-dom", null],\ ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7574,7 +7576,7 @@ const RAW_RUNTIME_STATE = ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ ["react-dom", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7617,7 +7619,7 @@ const RAW_RUNTIME_STATE = ["path-browserify", "npm:1.0.1"],\ ["process", "npm:0.11.10"],\ ["semver", "npm:7.6.3"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["style-loader", "virtual:4424b36b0980308b17b1406a1401ea5a761c985d98af13152d10eff3c887bfe23dea7786ec3b3ee9d5fa916e1f941f1082fbaf6e50cfe1a74008b236bdaa8284#npm:3.3.4"],\ ["terser-webpack-plugin", "virtual:4424b36b0980308b17b1406a1401ea5a761c985d98af13152d10eff3c887bfe23dea7786ec3b3ee9d5fa916e1f941f1082fbaf6e50cfe1a74008b236bdaa8284#npm:5.3.10"],\ ["ts-dedent", "npm:2.2.0"],\ @@ -7669,12 +7671,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-components-virtual-3bf43bd77c/2/.yarn/berry/cache/@storybook-components-npm-8.6.12-ff59c91221-10.zip/node_modules/@storybook/components/",\ + ["virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-components-virtual-e718cd6376/2/.yarn/berry/cache/@storybook-components-npm-8.6.12-ff59c91221-10.zip/node_modules/@storybook/components/",\ "packageDependencies": [\ - ["@storybook/components", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/components", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -7698,7 +7700,7 @@ const RAW_RUNTIME_STATE = ["process", "npm:0.11.10"],\ ["recast", "npm:0.23.9"],\ ["util", "npm:0.12.5"],\ - ["ws", "virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:8.18.0"]\ + ["ws", "virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:8.18.0"]\ ],\ "linkType": "HARD"\ }],\ @@ -7709,23 +7711,23 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:ab74d578cc86ddfef5b48067264bf7339670789cf5e13babbfd38bc1b8945ac4d5b9b1f4684bb966b8a161db90d050c603d141a86a92306d033d7840a88d401b#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-core-virtual-f00fa6857e/2/.yarn/berry/cache/@storybook-core-npm-8.6.12-8395548d68-10.zip/node_modules/@storybook/core/",\ + ["virtual:813d3e96bed25076d6f9e98a72521ce1b57bf4796967fc7d057a6067725750625e2bef2a790d75ce14f84e490609c61a2ddef85fa3133803f9fd42782950a55e#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-core-virtual-39a2193b06/2/.yarn/berry/cache/@storybook-core-npm-8.6.12-8395548d68-10.zip/node_modules/@storybook/core/",\ "packageDependencies": [\ - ["@storybook/core", "virtual:ab74d578cc86ddfef5b48067264bf7339670789cf5e13babbfd38bc1b8945ac4d5b9b1f4684bb966b8a161db90d050c603d141a86a92306d033d7840a88d401b#npm:8.6.12"],\ - ["@storybook/theming", "virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:8.6.12"],\ + ["@storybook/core", "virtual:813d3e96bed25076d6f9e98a72521ce1b57bf4796967fc7d057a6067725750625e2bef2a790d75ce14f84e490609c61a2ddef85fa3133803f9fd42782950a55e#npm:8.6.12"],\ + ["@storybook/theming", "virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:8.6.12"],\ ["@types/prettier", null],\ ["better-opn", "npm:3.0.2"],\ ["browser-assert", "npm:1.2.1"],\ ["esbuild", "npm:0.25.3"],\ - ["esbuild-register", "virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:3.6.0"],\ + ["esbuild-register", "virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:3.6.0"],\ ["jsdoc-type-pratt-parser", "npm:4.1.0"],\ ["prettier", null],\ ["process", "npm:0.11.10"],\ ["recast", "npm:0.23.9"],\ ["semver", "npm:7.7.1"],\ ["util", "npm:0.12.5"],\ - ["ws", "virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:8.18.0"]\ + ["ws", "virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:8.18.0"]\ ],\ "packagePeers": [\ "@types/prettier",\ @@ -7747,7 +7749,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@storybook/core-webpack", "virtual:4424b36b0980308b17b1406a1401ea5a761c985d98af13152d10eff3c887bfe23dea7786ec3b3ee9d5fa916e1f941f1082fbaf6e50cfe1a74008b236bdaa8284#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["ts-dedent", "npm:2.2.0"]\ ],\ "packagePeers": [\ @@ -7780,7 +7782,7 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@storybook/csf-plugin", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["unplugin", "npm:1.12.1"]\ ],\ "packagePeers": [\ @@ -7814,7 +7816,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -7824,14 +7826,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:496e7b06d62ae07c8801853e1de0d9c10cf05c81229354a22c271f5dc97fce79c25c38c571c1e7ca77005cddd4aa8af6db89f984659f297c09594d3546b74c88#npm:1.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-6b275f6f15/2/.yarn/berry/cache/@storybook-icons-npm-1.4.0-1810e1d566-10.zip/node_modules/@storybook/icons/",\ + ["virtual:5874c250397c0b1f944dc3d17fbcbc608e58b54a08fcae416b2990f9889f83b551c0512bd6e327cd05fa3ea8c4832b1dae5016ce5d633364bbe48cd6aa770935#npm:1.4.0", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-8cae5d99de/2/.yarn/berry/cache/@storybook-icons-npm-1.4.0-1810e1d566-10.zip/node_modules/@storybook/icons/",\ "packageDependencies": [\ - ["@storybook/icons", "virtual:496e7b06d62ae07c8801853e1de0d9c10cf05c81229354a22c271f5dc97fce79c25c38c571c1e7ca77005cddd4aa8af6db89f984659f297c09594d3546b74c88#npm:1.4.0"],\ - ["@types/react", "npm:19.1.2"],\ + ["@storybook/icons", "virtual:5874c250397c0b1f944dc3d17fbcbc608e58b54a08fcae416b2990f9889f83b551c0512bd6e327cd05fa3ea8c4832b1dae5016ce5d633364bbe48cd6aa770935#npm:1.4.0"],\ + ["@types/react", null],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -7841,14 +7843,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:5874c250397c0b1f944dc3d17fbcbc608e58b54a08fcae416b2990f9889f83b551c0512bd6e327cd05fa3ea8c4832b1dae5016ce5d633364bbe48cd6aa770935#npm:1.4.0", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-8cae5d99de/2/.yarn/berry/cache/@storybook-icons-npm-1.4.0-1810e1d566-10.zip/node_modules/@storybook/icons/",\ + ["virtual:6fab0d5d1566ccabfa626c1ad0af4207cbef279dc393dfcae6a59a478ebb171fdb7e1813dfd6e059ccc9bfa8b7a427c1df7fa8709d358fa34bd519ede4f829c4#npm:1.4.0", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-icons-virtual-245729b9b3/2/.yarn/berry/cache/@storybook-icons-npm-1.4.0-1810e1d566-10.zip/node_modules/@storybook/icons/",\ "packageDependencies": [\ - ["@storybook/icons", "virtual:5874c250397c0b1f944dc3d17fbcbc608e58b54a08fcae416b2990f9889f83b551c0512bd6e327cd05fa3ea8c4832b1dae5016ce5d633364bbe48cd6aa770935#npm:1.4.0"],\ - ["@types/react", null],\ + ["@storybook/icons", "virtual:6fab0d5d1566ccabfa626c1ad0af4207cbef279dc393dfcae6a59a478ebb171fdb7e1813dfd6e059ccc9bfa8b7a427c1df7fa8709d358fa34bd519ede4f829c4#npm:1.4.0"],\ + ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -7867,14 +7869,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a35e93ca3e11bde59d074093d0aa38b09cbd00c051225251f32171c8a0bd9d5e139e62edaffb6851e9413acaefcdba04964179474cf73c5094bb1ed40764fccc#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-instrumenter-virtual-0584e75186/2/.yarn/berry/cache/@storybook-instrumenter-npm-8.6.12-52b4566e41-10.zip/node_modules/@storybook/instrumenter/",\ + ["virtual:eab61851f464d77f5738974cd264c747ce96ef1f28e3f2b14a77acf8955137ff6b6bc19744e8cbef7ebf4f6e023602cea4f0d78f465d89d8726a74af9520de52#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-instrumenter-virtual-bc7da240d6/2/.yarn/berry/cache/@storybook-instrumenter-npm-8.6.12-52b4566e41-10.zip/node_modules/@storybook/instrumenter/",\ "packageDependencies": [\ - ["@storybook/instrumenter", "virtual:a35e93ca3e11bde59d074093d0aa38b09cbd00c051225251f32171c8a0bd9d5e139e62edaffb6851e9413acaefcdba04964179474cf73c5094bb1ed40764fccc#npm:8.6.12"],\ + ["@storybook/instrumenter", "virtual:eab61851f464d77f5738974cd264c747ce96ef1f28e3f2b14a77acf8955137ff6b6bc19744e8cbef7ebf4f6e023602cea4f0d78f465d89d8726a74af9520de52#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ ["@types/storybook", null],\ ["@vitest/utils", "npm:2.1.9"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -7891,12 +7893,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-manager-api-virtual-93c3c68692/2/.yarn/berry/cache/@storybook-manager-api-npm-8.6.12-a7cb133c04-10.zip/node_modules/@storybook/manager-api/",\ + ["virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-manager-api-virtual-82948bc638/2/.yarn/berry/cache/@storybook-manager-api-npm-8.6.12-a7cb133c04-10.zip/node_modules/@storybook/manager-api/",\ "packageDependencies": [\ - ["@storybook/manager-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/manager-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -7951,10 +7953,10 @@ const RAW_RUNTIME_STATE = ["magic-string", "npm:0.30.11"],\ ["react", "npm:19.1.0"],\ ["react-docgen", "npm:7.0.3"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["resolve", "patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d"],\ ["semver", "npm:7.6.3"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["tsconfig-paths", "npm:4.2.0"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"],\ ["webpack", "virtual:4424b36b0980308b17b1406a1401ea5a761c985d98af13152d10eff3c887bfe23dea7786ec3b3ee9d5fa916e1f941f1082fbaf6e50cfe1a74008b236bdaa8284#npm:5.93.0"]\ @@ -7980,12 +7982,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-preview-api-virtual-dda252440c/2/.yarn/berry/cache/@storybook-preview-api-npm-8.6.12-eaf7c59f2e-10.zip/node_modules/@storybook/preview-api/",\ + ["virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-preview-api-virtual-d30033e50c/2/.yarn/berry/cache/@storybook-preview-api-npm-8.6.12-eaf7c59f2e-10.zip/node_modules/@storybook/preview-api/",\ "packageDependencies": [\ - ["@storybook/preview-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/preview-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -8006,21 +8008,21 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-60359ca41f/2/.yarn/berry/cache/@storybook-react-npm-8.6.12-7004f7022b-10.zip/node_modules/@storybook/react/",\ "packageDependencies": [\ ["@storybook/react", "virtual:14d78be773215b2ced6f3da4a1b046aeeac62fcd15ae3698986fa83005765e17feea2e8ebb7d7858c920df079c076bfa083fc9b04395330aafc53d258f760052#npm:8.6.12"],\ - ["@storybook/components", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/components", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/manager-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/preview-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/manager-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/preview-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/react-dom-shim", "virtual:60359ca41f574627c331b20f71b1b4fe21d048a09e625c3eba9c2ee677ab0a1adb2dd3564183a86307fe1d7bf87b1eb143539ec2187b274bbe425a29bd1406dd#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/theming", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/theming", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["@types/storybook", null],\ ["@types/storybook__test", null],\ ["@types/typescript", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"]\ ],\ "packagePeers": [\ @@ -8040,21 +8042,21 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-beda877d4c/2/.yarn/berry/cache/@storybook-react-npm-8.6.12-7004f7022b-10.zip/node_modules/@storybook/react/",\ "packageDependencies": [\ ["@storybook/react", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ - ["@storybook/components", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/components", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/manager-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/preview-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/manager-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/preview-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/react-dom-shim", "virtual:60359ca41f574627c331b20f71b1b4fe21d048a09e625c3eba9c2ee677ab0a1adb2dd3564183a86307fe1d7bf87b1eb143539ec2187b274bbe425a29bd1406dd#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/theming", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/theming", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["@types/storybook", null],\ ["@types/storybook__test", null],\ ["@types/typescript", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"]\ ],\ "packagePeers": [\ @@ -8071,25 +8073,25 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-d87b8c50b4/2/.yarn/berry/cache/@storybook-react-npm-8.6.12-7004f7022b-10.zip/node_modules/@storybook/react/",\ + ["virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-36854ddddf/2/.yarn/berry/cache/@storybook-react-npm-8.6.12-7004f7022b-10.zip/node_modules/@storybook/react/",\ "packageDependencies": [\ - ["@storybook/react", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ - ["@storybook/components", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/react", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ + ["@storybook/components", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/manager-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/preview-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/react-dom-shim", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/theming", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/manager-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/preview-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/react-dom-shim", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/theming", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["@types/storybook", null],\ ["@types/storybook__test", null],\ ["@types/typescript", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["typescript", null]\ ],\ "packagePeers": [\ @@ -8109,21 +8111,21 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/@storybook-react-virtual-148dff7c9f/2/.yarn/berry/cache/@storybook-react-npm-8.6.12-7004f7022b-10.zip/node_modules/@storybook/react/",\ "packageDependencies": [\ ["@storybook/react", "virtual:937fb0364248873ae59b9853300486d03005abda92eaabc1af692cdbfe45a10bb44400f85b426164577e95380d1eb384e54a3525e8f98eff7f80d492dbab08a5#npm:8.6.12"],\ - ["@storybook/components", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/components", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/manager-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/preview-api", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/manager-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/preview-api", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/react-dom-shim", "virtual:60359ca41f574627c331b20f71b1b4fe21d048a09e625c3eba9c2ee677ab0a1adb2dd3564183a86307fe1d7bf87b1eb143539ec2187b274bbe425a29bd1406dd#npm:8.6.12"],\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@storybook/theming", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ + ["@storybook/theming", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["@types/storybook", null],\ ["@types/storybook__test", null],\ ["@types/typescript", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["typescript", null]\ ],\ "packagePeers": [\ @@ -8181,16 +8183,16 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:60359ca41f574627c331b20f71b1b4fe21d048a09e625c3eba9c2ee677ab0a1adb2dd3564183a86307fe1d7bf87b1eb143539ec2187b274bbe425a29bd1406dd#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-e8905fba15/2/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.6.12-5f724708e7-10.zip/node_modules/@storybook/react-dom-shim/",\ + ["virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-8baab9a864/2/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.6.12-5f724708e7-10.zip/node_modules/@storybook/react-dom-shim/",\ "packageDependencies": [\ - ["@storybook/react-dom-shim", "virtual:60359ca41f574627c331b20f71b1b4fe21d048a09e625c3eba9c2ee677ab0a1adb2dd3564183a86307fe1d7bf87b1eb143539ec2187b274bbe425a29bd1406dd#npm:8.6.12"],\ + ["@storybook/react-dom-shim", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ - ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ + ["@types/react-dom", null],\ ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -8202,16 +8204,16 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-a7f3b26816/2/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.6.12-5f724708e7-10.zip/node_modules/@storybook/react-dom-shim/",\ + ["virtual:60359ca41f574627c331b20f71b1b4fe21d048a09e625c3eba9c2ee677ab0a1adb2dd3564183a86307fe1d7bf87b1eb143539ec2187b274bbe425a29bd1406dd#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-e8905fba15/2/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.6.12-5f724708e7-10.zip/node_modules/@storybook/react-dom-shim/",\ "packageDependencies": [\ - ["@storybook/react-dom-shim", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:8.6.12"],\ - ["@types/react", null],\ - ["@types/react-dom", null],\ + ["@storybook/react-dom-shim", "virtual:60359ca41f574627c331b20f71b1b4fe21d048a09e625c3eba9c2ee677ab0a1adb2dd3564183a86307fe1d7bf87b1eb143539ec2187b274bbe425a29bd1406dd#npm:8.6.12"],\ + ["@types/react", "npm:19.1.2"],\ + ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -8223,16 +8225,16 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-d919b64a00/2/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.6.12-5f724708e7-10.zip/node_modules/@storybook/react-dom-shim/",\ + ["virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-react-dom-shim-virtual-a7f3b26816/2/.yarn/berry/cache/@storybook-react-dom-shim-npm-8.6.12-5f724708e7-10.zip/node_modules/@storybook/react-dom-shim/",\ "packageDependencies": [\ - ["@storybook/react-dom-shim", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ - ["@types/react", "npm:19.1.2"],\ + ["@storybook/react-dom-shim", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:8.6.12"],\ + ["@types/react", null],\ ["@types/react-dom", null],\ ["@types/storybook", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["react-dom", "virtual:933615cf848eaa7a45466c97dde5874fd02cf824cd378e5ad6cd5d9b57fcdebfcf48f461d83c2bc0424b655b728831a2db15ba9cfe9e5ac15c30717f5d089aec#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -8265,8 +8267,8 @@ const RAW_RUNTIME_STATE = ["@types/storybook", null],\ ["@types/typescript", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ ["typescript", "patch:typescript@npm%3A5.5.4#optional!builtin::version=5.5.4&hash=379a07"]\ ],\ "packagePeers": [\ @@ -8290,19 +8292,19 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-test-virtual-a35e93ca3e/2/.yarn/berry/cache/@storybook-test-npm-8.6.12-9dba1233bc-10.zip/node_modules/@storybook/test/",\ + ["virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-test-virtual-eab61851f4/2/.yarn/berry/cache/@storybook-test-npm-8.6.12-9dba1233bc-10.zip/node_modules/@storybook/test/",\ "packageDependencies": [\ - ["@storybook/test", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/test", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@storybook/global", "npm:5.0.0"],\ - ["@storybook/instrumenter", "virtual:a35e93ca3e11bde59d074093d0aa38b09cbd00c051225251f32171c8a0bd9d5e139e62edaffb6851e9413acaefcdba04964179474cf73c5094bb1ed40764fccc#npm:8.6.12"],\ + ["@storybook/instrumenter", "virtual:eab61851f464d77f5738974cd264c747ce96ef1f28e3f2b14a77acf8955137ff6b6bc19744e8cbef7ebf4f6e023602cea4f0d78f465d89d8726a74af9520de52#npm:8.6.12"],\ ["@testing-library/dom", "npm:10.4.0"],\ ["@testing-library/jest-dom", "npm:6.5.0"],\ - ["@testing-library/user-event", "virtual:a35e93ca3e11bde59d074093d0aa38b09cbd00c051225251f32171c8a0bd9d5e139e62edaffb6851e9413acaefcdba04964179474cf73c5094bb1ed40764fccc#npm:14.5.2"],\ + ["@testing-library/user-event", "virtual:eab61851f464d77f5738974cd264c747ce96ef1f28e3f2b14a77acf8955137ff6b6bc19744e8cbef7ebf4f6e023602cea4f0d78f465d89d8726a74af9520de52#npm:14.5.2"],\ ["@types/storybook", null],\ ["@vitest/expect", "npm:2.0.5"],\ ["@vitest/spy", "npm:2.0.5"],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -8319,12 +8321,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-theming-virtual-b9aefa6c07/2/.yarn/berry/cache/@storybook-theming-npm-8.6.12-90b2a7fbe9-10.zip/node_modules/@storybook/theming/",\ + ["virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-theming-virtual-7686806f8d/2/.yarn/berry/cache/@storybook-theming-npm-8.6.12-90b2a7fbe9-10.zip/node_modules/@storybook/theming/",\ "packageDependencies": [\ - ["@storybook/theming", "virtual:d87b8c50b4c79ae7b890b1fcbf569b95ccdf466c039532eb282dbfc4c036f6f5fdf62014e7b6374f865d392b63f4ff5a61a942c6a3e22d83e6714205a8303709#npm:8.6.12"],\ + ["@storybook/theming", "virtual:36854ddddfa8b626fa67af6d28e675aaaa939e7ba8536fb27a4288c4715e2e1918dbebb34c85e5eb65dd8ee7723ddbfe64b3c19624a8e174392cdadf0191ad5d#npm:8.6.12"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -8332,10 +8334,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/@storybook-theming-virtual-d4ea2a72c3/2/.yarn/berry/cache/@storybook-theming-npm-8.6.12-90b2a7fbe9-10.zip/node_modules/@storybook/theming/",\ + ["virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/@storybook-theming-virtual-02821dbca1/2/.yarn/berry/cache/@storybook-theming-npm-8.6.12-90b2a7fbe9-10.zip/node_modules/@storybook/theming/",\ "packageDependencies": [\ - ["@storybook/theming", "virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:8.6.12"],\ + ["@storybook/theming", "virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:8.6.12"],\ ["@types/storybook", null],\ ["storybook", null]\ ],\ @@ -8360,7 +8362,7 @@ const RAW_RUNTIME_STATE = ["@storybook/types", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:8.6.12"],\ ["@types/react", "npm:19.1.2"],\ ["@types/storybook", null],\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"]\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"]\ ],\ "packagePeers": [\ "@types/storybook",\ @@ -9183,10 +9185,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:a35e93ca3e11bde59d074093d0aa38b09cbd00c051225251f32171c8a0bd9d5e139e62edaffb6851e9413acaefcdba04964179474cf73c5094bb1ed40764fccc#npm:14.5.2", {\ - "packageLocation": "./.yarn/__virtual__/@testing-library-user-event-virtual-db95324c88/2/.yarn/berry/cache/@testing-library-user-event-npm-14.5.2-ec9587901c-10.zip/node_modules/@testing-library/user-event/",\ + ["virtual:eab61851f464d77f5738974cd264c747ce96ef1f28e3f2b14a77acf8955137ff6b6bc19744e8cbef7ebf4f6e023602cea4f0d78f465d89d8726a74af9520de52#npm:14.5.2", {\ + "packageLocation": "./.yarn/__virtual__/@testing-library-user-event-virtual-4b9ab093f6/2/.yarn/berry/cache/@testing-library-user-event-npm-14.5.2-ec9587901c-10.zip/node_modules/@testing-library/user-event/",\ "packageDependencies": [\ - ["@testing-library/user-event", "virtual:a35e93ca3e11bde59d074093d0aa38b09cbd00c051225251f32171c8a0bd9d5e139e62edaffb6851e9413acaefcdba04964179474cf73c5094bb1ed40764fccc#npm:14.5.2"],\ + ["@testing-library/user-event", "virtual:eab61851f464d77f5738974cd264c747ce96ef1f28e3f2b14a77acf8955137ff6b6bc19744e8cbef7ebf4f6e023602cea4f0d78f465d89d8726a74af9520de52#npm:14.5.2"],\ ["@testing-library/dom", "npm:10.4.0"],\ ["@types/testing-library__dom", null]\ ],\ @@ -13615,10 +13617,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:3.6.0", {\ - "packageLocation": "./.yarn/__virtual__/esbuild-register-virtual-a43e3f2621/2/.yarn/berry/cache/esbuild-register-npm-3.6.0-72017fa8ae-10.zip/node_modules/esbuild-register/",\ + ["virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:3.6.0", {\ + "packageLocation": "./.yarn/__virtual__/esbuild-register-virtual-ea9e0eac52/2/.yarn/berry/cache/esbuild-register-npm-3.6.0-72017fa8ae-10.zip/node_modules/esbuild-register/",\ "packageDependencies": [\ - ["esbuild-register", "virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:3.6.0"],\ + ["esbuild-register", "virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:3.6.0"],\ ["@types/esbuild", null],\ ["debug", "virtual:69c3455e973f914a9da079b465f412398aa9db4de6c967c5de9b7df9f75964a40ef9a5e9756b59c737917bf508a15667d830fc1be46cb0566180c490a2062629#npm:4.3.6"],\ ["esbuild", "npm:0.25.3"]\ @@ -14969,7 +14971,7 @@ const RAW_RUNTIME_STATE = ["motion-dom", "npm:12.23.21"],\ ["motion-utils", "npm:12.23.6"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["tslib", "npm:2.6.3"]\ ],\ "packagePeers": [\ @@ -15015,7 +15017,7 @@ const RAW_RUNTIME_STATE = ["motion-dom", "npm:12.23.21"],\ ["motion-utils", "npm:12.23.6"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["tslib", "npm:2.6.3"]\ ],\ "packagePeers": [\ @@ -15038,7 +15040,7 @@ const RAW_RUNTIME_STATE = ["motion-dom", "npm:12.9.1"],\ ["motion-utils", "npm:12.8.3"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["tslib", "npm:2.6.3"]\ ],\ "packagePeers": [\ @@ -15061,7 +15063,7 @@ const RAW_RUNTIME_STATE = ["motion-dom", "npm:12.9.1"],\ ["motion-utils", "npm:12.8.3"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["tslib", "npm:2.6.3"]\ ],\ "packagePeers": [\ @@ -18048,7 +18050,7 @@ const RAW_RUNTIME_STATE = ["caniuse-lite", "npm:1.0.30001651"],\ ["postcss", "npm:8.4.31"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["sass", null],\ ["sharp", "npm:0.34.1"],\ ["styled-jsx", "virtual:2630325dfce95672a9bcf691c1f31f99294f5fd7ae3c8e662219fa4fd19384949a1fa4dac64e22c8e0846104451ee59fd7fe93178f726f7d9f407c0fc5ffbc14#npm:5.1.6"]\ @@ -18097,7 +18099,7 @@ const RAW_RUNTIME_STATE = ["caniuse-lite", "npm:1.0.30001651"],\ ["postcss", "npm:8.4.31"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["sass", null],\ ["sharp", "npm:0.34.1"],\ ["styled-jsx", "virtual:2630325dfce95672a9bcf691c1f31f99294f5fd7ae3c8e662219fa4fd19384949a1fa4dac64e22c8e0846104451ee59fd7fe93178f726f7d9f407c0fc5ffbc14#npm:5.1.6"]\ @@ -18134,7 +18136,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", "virtual:5d5a2d83c74dbbb6a29a65ad5d9fce09aed4258bbc7c7bef7d0ae41fe2cbed3efa30eb23487731e7ba540c2485008f2e2cdc8aa4b98cd0d0d6df800a358cdf39#npm:19.1.2"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -18151,7 +18153,7 @@ const RAW_RUNTIME_STATE = ["@types/react", "npm:19.1.2"],\ ["@types/react-dom", null],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -19576,10 +19578,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0", {\ - "packageLocation": "./.yarn/__virtual__/rainbow-sprinkles-virtual-506f4f20b1/2/.yarn/berry/cache/rainbow-sprinkles-npm-1.0.0-29cfff19f1-10.zip/node_modules/rainbow-sprinkles/",\ + ["virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0", {\ + "packageLocation": "./.yarn/__virtual__/rainbow-sprinkles-virtual-674314365d/2/.yarn/berry/cache/rainbow-sprinkles-npm-1.0.0-29cfff19f1-10.zip/node_modules/rainbow-sprinkles/",\ "packageDependencies": [\ - ["rainbow-sprinkles", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:1.0.0"],\ + ["rainbow-sprinkles", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:1.0.0"],\ ["@types/vanilla-extract__css", null],\ ["@types/vanilla-extract__dynamic", null],\ ["@vanilla-extract/css", "npm:1.17.1"],\ @@ -19705,7 +19707,7 @@ const RAW_RUNTIME_STATE = ["clsx", "npm:2.1.1"],\ ["date-fns", "npm:4.1.0"],\ ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"]\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"]\ ],\ "packagePeers": [\ "@types/react-dom",\ @@ -19765,10 +19767,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0", {\ - "packageLocation": "./.yarn/__virtual__/react-dom-virtual-8ddd1601e4/2/.yarn/berry/cache/react-dom-npm-19.1.0-773f826e46-10.zip/node_modules/react-dom/",\ + ["virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0", {\ + "packageLocation": "./.yarn/__virtual__/react-dom-virtual-50b552c56b/2/.yarn/berry/cache/react-dom-npm-19.1.0-773f826e46-10.zip/node_modules/react-dom/",\ "packageDependencies": [\ - ["react-dom", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:19.1.0"],\ + ["react-dom", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:19.1.0"],\ ["@types/react", "npm:19.1.2"],\ ["react", "npm:19.1.0"],\ ["scheduler", "npm:0.26.0"]\ @@ -20985,11 +20987,11 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12", {\ - "packageLocation": "./.yarn/__virtual__/storybook-virtual-ab74d578cc/2/.yarn/berry/cache/storybook-npm-8.6.12-05dc12c1e2-10.zip/node_modules/storybook/",\ + ["virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12", {\ + "packageLocation": "./.yarn/__virtual__/storybook-virtual-813d3e96be/2/.yarn/berry/cache/storybook-npm-8.6.12-05dc12c1e2-10.zip/node_modules/storybook/",\ "packageDependencies": [\ - ["storybook", "virtual:90c3fa37a29dbddd012ae896ef9d136c46ca1d320faf1baf430439ab5aac7e1e7c8ef5281a72424df8d016a8c33c9d5ffe66ee23d2face19f27de3042508900f#npm:8.6.12"],\ - ["@storybook/core", "virtual:ab74d578cc86ddfef5b48067264bf7339670789cf5e13babbfd38bc1b8945ac4d5b9b1f4684bb966b8a161db90d050c603d141a86a92306d033d7840a88d401b#npm:8.6.12"],\ + ["storybook", "virtual:76ebc481ac02aa95961a7136f7e551f7070fbf8eb171c0ca48399e504fe0f0f0edaf1d4f5953b763ae0b309e0e91ebf7d54e047cc0a0270d8aee71a756c50a70#npm:8.6.12"],\ + ["@storybook/core", "virtual:813d3e96bed25076d6f9e98a72521ce1b57bf4796967fc7d057a6067725750625e2bef2a790d75ce14f84e490609c61a2ddef85fa3133803f9fd42782950a55e#npm:8.6.12"],\ ["@types/prettier", null],\ ["prettier", null]\ ],\ @@ -22927,10 +22929,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:8.18.0", {\ - "packageLocation": "./.yarn/__virtual__/ws-virtual-0bac18b345/2/.yarn/berry/cache/ws-npm-8.18.0-56f68bc4d6-10.zip/node_modules/ws/",\ + ["virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:8.18.0", {\ + "packageLocation": "./.yarn/__virtual__/ws-virtual-75b1911487/2/.yarn/berry/cache/ws-npm-8.18.0-56f68bc4d6-10.zip/node_modules/ws/",\ "packageDependencies": [\ - ["ws", "virtual:f00fa6857e1000e8c6cc10fbf742162dd70d440335d1bcd0b0eb9c28c9d50419d4f75e0074250f7c3360994270d4d1d796fdaba1b30108e9266b11e13d40cb4d#npm:8.18.0"],\ + ["ws", "virtual:39a2193b06cbf5a29cc0adab529eba71aa75737ada18700d484babc735b68b0ae48acb2426226724a69eca273350a5616e03b81d1100f6ee0255fa049925e548#npm:8.18.0"],\ ["@types/bufferutil", null],\ ["@types/utf-8-validate", null],\ ["bufferutil", null],\ diff --git a/generators/appearance/package.json b/generators/appearance/package.json index 83dff9b12..1e94c829e 100644 --- a/generators/appearance/package.json +++ b/generators/appearance/package.json @@ -4,7 +4,8 @@ "license": "BSD-3-Clause", "type": "module", "exports": { - ".": "./src/index.ts" + ".": "./src/index.ts", + "./create": "./src/create/index.ts" }, "main": "./src/index.ts", "bin": { @@ -21,6 +22,7 @@ }, "dependencies": { "@atls-ui-generators/utils": "workspace:*", + "@atls-ui-parts/theme": "workspace:*", "commander": "13.1.0", "tsx": "4.19.3" }, @@ -47,6 +49,11 @@ "import": "./dist/index.js", "types": "./dist/index.d.ts", "default": "./dist/index.js" + }, + "./create": { + "import": "./dist/create/index.js", + "types": "./dist/create/index.d.ts", + "default": "./dist/create/index.js" } }, "main": "dist/index.js", diff --git a/generators/appearance/src/create/index.ts b/generators/appearance/src/create/index.ts new file mode 100644 index 000000000..d2875cfe1 --- /dev/null +++ b/generators/appearance/src/create/index.ts @@ -0,0 +1,3 @@ +export { createAppearanceStyles } from '@atls-ui-parts/theme' +export type { AppearanceStyles } from '@atls-ui-parts/theme' +export type { AppearanceStyles as InputAppearanceStyles } from '@atls-ui-parts/theme' diff --git a/yarn.lock b/yarn.lock index 7deeac903..f09f6c7d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -275,6 +275,7 @@ __metadata: resolution: "@atls-ui-generators/appearance@workspace:generators/appearance" dependencies: "@atls-ui-generators/utils": "workspace:*" + "@atls-ui-parts/theme": "workspace:*" "@swc-node/register": "npm:1.9.0" "@swc/core": "npm:1.6.1" "@types/node": "npm:22.15.3" From 8ef1fe1d34c45fa196613319042cfd7a117ccf4d Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Fri, 12 Jun 2026 18:32:22 +0300 Subject: [PATCH 7/9] refactor(appearance): separate generator contracts --- .../appearance/src/generator.constants.ts | 19 +++++++ .../appearance/src/generator.interfaces.ts | 11 ++++ generators/appearance/src/generator.ts | 51 +++++++++-------- .../appearance/src/map/generator.constants.ts | 4 ++ generators/appearance/src/map/generator.ts | 32 ++--------- .../src/schema/generator.constants.ts | 7 +++ .../src/schema/generator.interfaces.ts | 3 + generators/appearance/src/schema/generator.ts | 55 ++++++++++++++----- .../src/style/generator.constants.ts | 12 ++++ generators/appearance/src/style/generator.ts | 40 ++------------ 10 files changed, 133 insertions(+), 101 deletions(-) create mode 100644 generators/appearance/src/generator.constants.ts create mode 100644 generators/appearance/src/generator.interfaces.ts create mode 100644 generators/appearance/src/map/generator.constants.ts create mode 100644 generators/appearance/src/schema/generator.constants.ts create mode 100644 generators/appearance/src/schema/generator.interfaces.ts create mode 100644 generators/appearance/src/style/generator.constants.ts diff --git a/generators/appearance/src/generator.constants.ts b/generators/appearance/src/generator.constants.ts new file mode 100644 index 000000000..8b00c2480 --- /dev/null +++ b/generators/appearance/src/generator.constants.ts @@ -0,0 +1,19 @@ +export const loggerName = 'appearance-generator' + +export const cliName = 'Appearance styles generator' + +export const cliArguments = { + schema: 'Path to style schema file', +} + +export const cliOptions = { + check: 'Check generated styles without writing files', + write: 'Write generated styles', +} + +export const errors = { + schemaPathRequired: 'Path to style schema is required', + modeRequired: 'Exactly one of --check or --write is required', + schemaPathFileRequired: 'Style schema path should point to a file', + schemaExportRequired: 'Style schema file should export schema', +} diff --git a/generators/appearance/src/generator.interfaces.ts b/generators/appearance/src/generator.interfaces.ts new file mode 100644 index 000000000..bc20c4242 --- /dev/null +++ b/generators/appearance/src/generator.interfaces.ts @@ -0,0 +1,11 @@ +import type { StyleSchema } from './schema/index.js' + +export interface GeneratorOptions { + check?: boolean + write?: boolean +} + +export interface StyleSchemaModule { + default?: StyleSchema + schema?: StyleSchema +} diff --git a/generators/appearance/src/generator.ts b/generators/appearance/src/generator.ts index f8aa035e0..c74e44691 100644 --- a/generators/appearance/src/generator.ts +++ b/generators/appearance/src/generator.ts @@ -1,50 +1,53 @@ /* eslint-disable n/no-sync */ -import type { StyleSchema } from './schema/index.js' +import type { GeneratorOptions } from './generator.interfaces.js' +import type { StyleSchemaModule } from './generator.interfaces.js' -import assert from 'node:assert/strict' -import { lstatSync } from 'node:fs' -import { dirname } from 'node:path' -import { resolve } from 'node:path' -import { pathToFileURL } from 'node:url' +import assert from 'node:assert/strict' +import { lstatSync } from 'node:fs' +import { dirname } from 'node:path' +import { resolve } from 'node:path' +import { pathToFileURL } from 'node:url' -import { program } from 'commander' -import { tsImport } from 'tsx/esm/api' +import { program } from 'commander' +import { tsImport } from 'tsx/esm/api' -import { createLogger } from '@atls-ui-generators/utils' +import { createLogger } from '@atls-ui-generators/utils' -import { StyleSchemaGenerator } from './schema/index.js' +import { StyleSchemaGenerator } from './schema/index.js' +import { cliArguments } from './generator.constants.js' +import { cliName } from './generator.constants.js' +import { cliOptions } from './generator.constants.js' +import { errors } from './generator.constants.js' +import { loggerName } from './generator.constants.js' -const logger = createLogger('appearance-generator') +const logger = createLogger(loggerName) try { program - .name('Appearance styles generator') - .argument('', 'Path to style schema file') - .option('-c, --check', 'Check generated styles without writing files') - .option('-w, --write', 'Write generated styles') + .name(cliName) + .argument('', cliArguments.schema) + .option('-c, --check', cliOptions.check) + .option('-w, --write', cliOptions.write) .parse(process.argv) const schemaPath = program.args.at(0) - const { check, write } = program.opts<{ check?: boolean; write?: boolean }>() + const { check, write } = program.opts() - assert.ok(schemaPath && typeof schemaPath === 'string', 'Path to style schema is required') - assert.ok(check !== write, 'Exactly one of --check or --write is required') + assert.ok(schemaPath && typeof schemaPath === 'string', errors.schemaPathRequired) + assert.ok(check !== write, errors.modeRequired) const absoluteSchemaPath = resolve(schemaPath) - assert.ok(lstatSync(absoluteSchemaPath).isFile(), 'Style schema path should point to a file') + assert.ok(lstatSync(absoluteSchemaPath).isFile(), errors.schemaPathFileRequired) const schemaModule = (await tsImport( pathToFileURL(absoluteSchemaPath).href, import.meta.url - )) as { - default?: StyleSchema - schema?: StyleSchema - } + )) as StyleSchemaModule const schema = schemaModule.default ?? schemaModule.schema - assert.ok(schema, 'Style schema file should export schema') + assert.ok(schema, errors.schemaExportRequired) const generator = new StyleSchemaGenerator(schema, dirname(absoluteSchemaPath)) diff --git a/generators/appearance/src/map/generator.constants.ts b/generators/appearance/src/map/generator.constants.ts new file mode 100644 index 000000000..c98388f61 --- /dev/null +++ b/generators/appearance/src/map/generator.constants.ts @@ -0,0 +1,4 @@ +export const errors = { + importsRequired: 'Imports are required', + contentRequired: 'Styles or exports are required', +} diff --git a/generators/appearance/src/map/generator.ts b/generators/appearance/src/map/generator.ts index ce50bf2b5..240912e82 100644 --- a/generators/appearance/src/map/generator.ts +++ b/generators/appearance/src/map/generator.ts @@ -1,19 +1,18 @@ -/* eslint-disable n/no-sync */ import type { ImportSchema } from './interfaces.js' import type { MapFileSchema } from './interfaces.js' import assert from 'node:assert/strict' -import { readFileSync } from 'node:fs' -import { writeFileSync } from 'node:fs' import { pretty } from '@atls-ui-generators/utils' +import { errors } from './generator.constants.js' + export class MapGenerator { readonly #schema: MapFileSchema constructor(schema: MapFileSchema) { - assert.ok(schema.imports?.length, 'Imports are required') - assert.ok(schema.styles?.length || schema.exports?.length, 'Styles or exports are required') + assert.ok(schema.imports?.length, errors.importsRequired) + assert.ok(schema.styles?.length || schema.exports?.length, errors.contentRequired) this.#schema = schema } @@ -26,23 +25,6 @@ export class MapGenerator { `) } - async generateFile(path: string, filename = 'appearance.css.ts'): Promise { - this.assertPath(path) - - const code = await this.generateFileContent() - - writeFileSync(`${path}/${filename}`, code) - } - - async checkFile(path: string, filename = 'appearance.css.ts'): Promise { - this.assertPath(path) - - const expected = await this.generateFileContent() - const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) - - assert.equal(actual, expected, `${path}/${filename} is out of date`) - } - private generateImports(): string { return (this.#schema.imports ?? []) .map((importSchema: ImportSchema) => { @@ -95,10 +77,4 @@ export class MapGenerator { }) .join('\n\n') } - - private assertPath(path: string): void { - if (path.split('').pop() === '/') { - throw new Error("Path should not end with '/' character") - } - } } diff --git a/generators/appearance/src/schema/generator.constants.ts b/generators/appearance/src/schema/generator.constants.ts new file mode 100644 index 000000000..416f0d909 --- /dev/null +++ b/generators/appearance/src/schema/generator.constants.ts @@ -0,0 +1,7 @@ +export const defaultFilename = 'appearance.css.ts' + +export const errors = { + targetPathTrailingSlash: "Path should not end with '/' character", +} + +export const getOutdatedFileMessage = (filePath: string): string => `${filePath} is out of date` diff --git a/generators/appearance/src/schema/generator.interfaces.ts b/generators/appearance/src/schema/generator.interfaces.ts new file mode 100644 index 000000000..f71871373 --- /dev/null +++ b/generators/appearance/src/schema/generator.interfaces.ts @@ -0,0 +1,3 @@ +export interface StyleSchemaFileGenerator { + generateFileContent: () => Promise +} diff --git a/generators/appearance/src/schema/generator.ts b/generators/appearance/src/schema/generator.ts index 00d217a78..f86c6cf55 100644 --- a/generators/appearance/src/schema/generator.ts +++ b/generators/appearance/src/schema/generator.ts @@ -1,10 +1,21 @@ -import type { StyleSchema } from './interfaces.js' -import type { StyleSchemaFile } from './interfaces.js' +/* eslint-disable n/no-sync */ -import { join } from 'node:path' +import type { StyleSchemaFileGenerator } from './generator.interfaces.js' +import type { StyleSchema } from './interfaces.js' +import type { StyleSchemaFile } from './interfaces.js' -import { MapGenerator } from '../map/generator.js' -import { StyleGenerator } from '../style/index.js' +import assert from 'node:assert/strict' +import { readFileSync } from 'node:fs' +import { writeFileSync } from 'node:fs' +import { join } from 'node:path' + +import { pretty } from '@atls-ui-generators/utils' + +import { MapGenerator } from '../map/generator.js' +import { StyleGenerator } from '../style/index.js' +import { defaultFilename } from './generator.constants.js' +import { errors } from './generator.constants.js' +import { getOutdatedFileMessage } from './generator.constants.js' export class StyleSchemaGenerator { constructor( @@ -15,10 +26,7 @@ export class StyleSchemaGenerator { async write(): Promise { await Promise.all( this.schema.files.map(async (fileSchema) => { - await this.getGenerator(fileSchema).generateFile( - join(this.basePath, fileSchema.target), - fileSchema.filename - ) + await this.writeFile(fileSchema) }) ) } @@ -26,15 +34,34 @@ export class StyleSchemaGenerator { async check(): Promise { await Promise.all( this.schema.files.map(async (fileSchema) => { - await this.getGenerator(fileSchema).checkFile( - join(this.basePath, fileSchema.target), - fileSchema.filename - ) + await this.checkFile(fileSchema) }) ) } - private getGenerator(fileSchema: StyleSchemaFile): MapGenerator | StyleGenerator { + private async writeFile(fileSchema: StyleSchemaFile): Promise { + const code = await this.getGenerator(fileSchema).generateFileContent() + + writeFileSync(this.getFilePath(fileSchema), code) + } + + private async checkFile(fileSchema: StyleSchemaFile): Promise { + const filePath = this.getFilePath(fileSchema) + const expected = await this.getGenerator(fileSchema).generateFileContent() + const actual = await pretty(readFileSync(filePath, 'utf-8')) + + assert.equal(actual, expected, getOutdatedFileMessage(filePath)) + } + + private getFilePath(fileSchema: StyleSchemaFile): string { + const targetPath = join(this.basePath, fileSchema.target) + + assert.ok(!targetPath.endsWith('/'), errors.targetPathTrailingSlash) + + return join(targetPath, fileSchema.filename ?? defaultFilename) + } + + private getGenerator(fileSchema: StyleSchemaFile): StyleSchemaFileGenerator { if (fileSchema.type === 'map') { return new MapGenerator(fileSchema) } diff --git a/generators/appearance/src/style/generator.constants.ts b/generators/appearance/src/style/generator.constants.ts new file mode 100644 index 000000000..543471ef6 --- /dev/null +++ b/generators/appearance/src/style/generator.constants.ts @@ -0,0 +1,12 @@ +import type { ImportSchema } from './interfaces.js' + +export const defaultThemeImport: ImportSchema = { + import: '{ createAppearanceStyles, vars }', + from: '@atls-ui-parts/theme', +} + +export const errors = { + prefixRequired: 'Prefix is required', + variantsRequired: 'Variants are required', + statesRequired: 'States are required', +} diff --git a/generators/appearance/src/style/generator.ts b/generators/appearance/src/style/generator.ts index c87c252a8..6ed00f99b 100644 --- a/generators/appearance/src/style/generator.ts +++ b/generators/appearance/src/style/generator.ts @@ -1,29 +1,22 @@ -/* eslint-disable n/no-sync */ -import type { ImportSchema } from './interfaces.js' import type { StyleDeclarationSchema } from './interfaces.js' import type { StyleFileSchema } from './interfaces.js' import assert from 'node:assert/strict' -import { readFileSync } from 'node:fs' -import { writeFileSync } from 'node:fs' import { pretty } from '@atls-ui-generators/utils' import { capitalizeFirstLetter } from '../utils/index.js' import { getAppearanceStylesName } from '../utils/index.js' - -const defaultThemeImport: ImportSchema = { - import: '{ createAppearanceStyles, vars }', - from: '@atls-ui-parts/theme', -} +import { defaultThemeImport } from './generator.constants.js' +import { errors } from './generator.constants.js' export class StyleGenerator { readonly #schema: StyleFileSchema constructor(schema: StyleFileSchema) { - assert.ok(schema.prefix, 'Prefix is required') - assert.ok(schema.variants.length, 'Variants are required') - assert.ok(schema.states.length, 'States are required') + assert.ok(schema.prefix, errors.prefixRequired) + assert.ok(schema.variants.length, errors.variantsRequired) + assert.ok(schema.states.length, errors.statesRequired) this.#schema = schema } @@ -36,23 +29,6 @@ export class StyleGenerator { `) } - async generateFile(path: string, filename = 'appearance.css.ts'): Promise { - this.assertPath(path) - - const code = await this.generateFileContent() - - writeFileSync(`${path}/${filename}`, code) - } - - async checkFile(path: string, filename = 'appearance.css.ts'): Promise { - this.assertPath(path) - - const expected = await this.generateFileContent() - const actual = await pretty(readFileSync(`${path}/${filename}`, 'utf-8')) - - assert.equal(actual, expected, `${path}/${filename} is out of date`) - } - private async generateImports(): Promise { return pretty( [...(this.#schema.imports ?? []), this.#schema.createStylesImport ?? defaultThemeImport] @@ -176,10 +152,4 @@ export class StyleGenerator { }, } } - - private assertPath(path: string): void { - if (path.split('').pop() === '/') { - throw new Error("Path should not end with '/' character") - } - } } From ff5cb44e85114f3503bf3ba583f8ee3fc1202188 Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Fri, 12 Jun 2026 18:50:07 +0300 Subject: [PATCH 8/9] fix(appearance): model generator errors --- .../src/generator-mode-required.error.ts | 5 ++ .../appearance/src/generator.constants.ts | 7 --- generators/appearance/src/generator.ts | 60 +++++++++++-------- .../src/map/content-required.error.ts | 5 ++ .../appearance/src/map/generator.constants.ts | 4 -- generators/appearance/src/map/generator.ts | 20 ++++--- .../src/map/imports-required.error.ts | 5 ++ .../src/schema-export-required.error.ts | 5 ++ .../src/schema-path-file-required.error.ts | 5 ++ .../src/schema-path-required.error.ts | 5 ++ .../src/schema/file-outdated.error.ts | 5 ++ .../src/schema/generator.constants.ts | 7 --- generators/appearance/src/schema/generator.ts | 16 +++-- .../src/schema/target-path.error.ts | 5 ++ .../src/style/generator.constants.ts | 6 -- generators/appearance/src/style/generator.ts | 20 +++++-- .../src/style/prefix-required.error.ts | 5 ++ .../src/style/states-required.error.ts | 5 ++ .../src/style/variants-required.error.ts | 5 ++ 19 files changed, 127 insertions(+), 68 deletions(-) create mode 100644 generators/appearance/src/generator-mode-required.error.ts create mode 100644 generators/appearance/src/map/content-required.error.ts delete mode 100644 generators/appearance/src/map/generator.constants.ts create mode 100644 generators/appearance/src/map/imports-required.error.ts create mode 100644 generators/appearance/src/schema-export-required.error.ts create mode 100644 generators/appearance/src/schema-path-file-required.error.ts create mode 100644 generators/appearance/src/schema-path-required.error.ts create mode 100644 generators/appearance/src/schema/file-outdated.error.ts delete mode 100644 generators/appearance/src/schema/generator.constants.ts create mode 100644 generators/appearance/src/schema/target-path.error.ts create mode 100644 generators/appearance/src/style/prefix-required.error.ts create mode 100644 generators/appearance/src/style/states-required.error.ts create mode 100644 generators/appearance/src/style/variants-required.error.ts diff --git a/generators/appearance/src/generator-mode-required.error.ts b/generators/appearance/src/generator-mode-required.error.ts new file mode 100644 index 000000000..9d07ac4ca --- /dev/null +++ b/generators/appearance/src/generator-mode-required.error.ts @@ -0,0 +1,5 @@ +export class GeneratorModeRequiredError extends Error { + constructor() { + super('Exactly one of --check or --write is required') + } +} diff --git a/generators/appearance/src/generator.constants.ts b/generators/appearance/src/generator.constants.ts index 8b00c2480..0af38a66b 100644 --- a/generators/appearance/src/generator.constants.ts +++ b/generators/appearance/src/generator.constants.ts @@ -10,10 +10,3 @@ export const cliOptions = { check: 'Check generated styles without writing files', write: 'Write generated styles', } - -export const errors = { - schemaPathRequired: 'Path to style schema is required', - modeRequired: 'Exactly one of --check or --write is required', - schemaPathFileRequired: 'Style schema path should point to a file', - schemaExportRequired: 'Style schema file should export schema', -} diff --git a/generators/appearance/src/generator.ts b/generators/appearance/src/generator.ts index c74e44691..288104f7e 100644 --- a/generators/appearance/src/generator.ts +++ b/generators/appearance/src/generator.ts @@ -1,25 +1,28 @@ /* eslint-disable n/no-sync */ -import type { GeneratorOptions } from './generator.interfaces.js' -import type { StyleSchemaModule } from './generator.interfaces.js' - -import assert from 'node:assert/strict' -import { lstatSync } from 'node:fs' -import { dirname } from 'node:path' -import { resolve } from 'node:path' -import { pathToFileURL } from 'node:url' - -import { program } from 'commander' -import { tsImport } from 'tsx/esm/api' - -import { createLogger } from '@atls-ui-generators/utils' - -import { StyleSchemaGenerator } from './schema/index.js' -import { cliArguments } from './generator.constants.js' -import { cliName } from './generator.constants.js' -import { cliOptions } from './generator.constants.js' -import { errors } from './generator.constants.js' -import { loggerName } from './generator.constants.js' +import type { GeneratorOptions } from './generator.interfaces.js' +import type { StyleSchemaModule } from './generator.interfaces.js' + +import { existsSync } from 'node:fs' +import { lstatSync } from 'node:fs' +import { dirname } from 'node:path' +import { resolve } from 'node:path' +import { pathToFileURL } from 'node:url' + +import { program } from 'commander' +import { tsImport } from 'tsx/esm/api' + +import { createLogger } from '@atls-ui-generators/utils' + +import { GeneratorModeRequiredError } from './generator-mode-required.error.js' +import { StyleSchemaExportRequiredError } from './schema-export-required.error.js' +import { StyleSchemaPathFileRequiredError } from './schema-path-file-required.error.js' +import { StyleSchemaPathRequiredError } from './schema-path-required.error.js' +import { StyleSchemaGenerator } from './schema/index.js' +import { cliArguments } from './generator.constants.js' +import { cliName } from './generator.constants.js' +import { cliOptions } from './generator.constants.js' +import { loggerName } from './generator.constants.js' const logger = createLogger(loggerName) @@ -34,12 +37,19 @@ try { const schemaPath = program.args.at(0) const { check, write } = program.opts() - assert.ok(schemaPath && typeof schemaPath === 'string', errors.schemaPathRequired) - assert.ok(check !== write, errors.modeRequired) + if (!schemaPath || typeof schemaPath !== 'string') { + throw new StyleSchemaPathRequiredError() + } + + if (check === write) { + throw new GeneratorModeRequiredError() + } const absoluteSchemaPath = resolve(schemaPath) - assert.ok(lstatSync(absoluteSchemaPath).isFile(), errors.schemaPathFileRequired) + if (!existsSync(absoluteSchemaPath) || !lstatSync(absoluteSchemaPath).isFile()) { + throw new StyleSchemaPathFileRequiredError() + } const schemaModule = (await tsImport( pathToFileURL(absoluteSchemaPath).href, @@ -47,7 +57,9 @@ try { )) as StyleSchemaModule const schema = schemaModule.default ?? schemaModule.schema - assert.ok(schema, errors.schemaExportRequired) + if (!schema) { + throw new StyleSchemaExportRequiredError() + } const generator = new StyleSchemaGenerator(schema, dirname(absoluteSchemaPath)) diff --git a/generators/appearance/src/map/content-required.error.ts b/generators/appearance/src/map/content-required.error.ts new file mode 100644 index 000000000..52ad4d0fd --- /dev/null +++ b/generators/appearance/src/map/content-required.error.ts @@ -0,0 +1,5 @@ +export class MapContentRequiredError extends Error { + constructor() { + super('Styles or exports are required') + } +} diff --git a/generators/appearance/src/map/generator.constants.ts b/generators/appearance/src/map/generator.constants.ts deleted file mode 100644 index c98388f61..000000000 --- a/generators/appearance/src/map/generator.constants.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const errors = { - importsRequired: 'Imports are required', - contentRequired: 'Styles or exports are required', -} diff --git a/generators/appearance/src/map/generator.ts b/generators/appearance/src/map/generator.ts index 240912e82..7c8d350b5 100644 --- a/generators/appearance/src/map/generator.ts +++ b/generators/appearance/src/map/generator.ts @@ -1,18 +1,22 @@ -import type { ImportSchema } from './interfaces.js' -import type { MapFileSchema } from './interfaces.js' +import type { ImportSchema } from './interfaces.js' +import type { MapFileSchema } from './interfaces.js' -import assert from 'node:assert/strict' +import { pretty } from '@atls-ui-generators/utils' -import { pretty } from '@atls-ui-generators/utils' - -import { errors } from './generator.constants.js' +import { MapContentRequiredError } from './content-required.error.js' +import { MapImportsRequiredError } from './imports-required.error.js' export class MapGenerator { readonly #schema: MapFileSchema constructor(schema: MapFileSchema) { - assert.ok(schema.imports?.length, errors.importsRequired) - assert.ok(schema.styles?.length || schema.exports?.length, errors.contentRequired) + if (!schema.imports?.length) { + throw new MapImportsRequiredError() + } + + if (!schema.styles?.length && !schema.exports?.length) { + throw new MapContentRequiredError() + } this.#schema = schema } diff --git a/generators/appearance/src/map/imports-required.error.ts b/generators/appearance/src/map/imports-required.error.ts new file mode 100644 index 000000000..7d181875e --- /dev/null +++ b/generators/appearance/src/map/imports-required.error.ts @@ -0,0 +1,5 @@ +export class MapImportsRequiredError extends Error { + constructor() { + super('Imports are required') + } +} diff --git a/generators/appearance/src/schema-export-required.error.ts b/generators/appearance/src/schema-export-required.error.ts new file mode 100644 index 000000000..6f625c248 --- /dev/null +++ b/generators/appearance/src/schema-export-required.error.ts @@ -0,0 +1,5 @@ +export class StyleSchemaExportRequiredError extends Error { + constructor() { + super('Style schema file should export schema') + } +} diff --git a/generators/appearance/src/schema-path-file-required.error.ts b/generators/appearance/src/schema-path-file-required.error.ts new file mode 100644 index 000000000..81772c37b --- /dev/null +++ b/generators/appearance/src/schema-path-file-required.error.ts @@ -0,0 +1,5 @@ +export class StyleSchemaPathFileRequiredError extends Error { + constructor() { + super('Style schema path should point to a file') + } +} diff --git a/generators/appearance/src/schema-path-required.error.ts b/generators/appearance/src/schema-path-required.error.ts new file mode 100644 index 000000000..49c2ea7bc --- /dev/null +++ b/generators/appearance/src/schema-path-required.error.ts @@ -0,0 +1,5 @@ +export class StyleSchemaPathRequiredError extends Error { + constructor() { + super('Path to style schema is required') + } +} diff --git a/generators/appearance/src/schema/file-outdated.error.ts b/generators/appearance/src/schema/file-outdated.error.ts new file mode 100644 index 000000000..9e429ffae --- /dev/null +++ b/generators/appearance/src/schema/file-outdated.error.ts @@ -0,0 +1,5 @@ +export class StyleSchemaFileOutdatedError extends Error { + constructor(filePath: string) { + super(`${filePath} is out of date`) + } +} diff --git a/generators/appearance/src/schema/generator.constants.ts b/generators/appearance/src/schema/generator.constants.ts deleted file mode 100644 index 416f0d909..000000000 --- a/generators/appearance/src/schema/generator.constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const defaultFilename = 'appearance.css.ts' - -export const errors = { - targetPathTrailingSlash: "Path should not end with '/' character", -} - -export const getOutdatedFileMessage = (filePath: string): string => `${filePath} is out of date` diff --git a/generators/appearance/src/schema/generator.ts b/generators/appearance/src/schema/generator.ts index f86c6cf55..8327debe1 100644 --- a/generators/appearance/src/schema/generator.ts +++ b/generators/appearance/src/schema/generator.ts @@ -4,7 +4,6 @@ import type { StyleSchemaFileGenerator } from './generator.interfaces.js' import type { StyleSchema } from './interfaces.js' import type { StyleSchemaFile } from './interfaces.js' -import assert from 'node:assert/strict' import { readFileSync } from 'node:fs' import { writeFileSync } from 'node:fs' import { join } from 'node:path' @@ -13,9 +12,10 @@ import { pretty } from '@atls-ui-generators/utils' import { MapGenerator } from '../map/generator.js' import { StyleGenerator } from '../style/index.js' -import { defaultFilename } from './generator.constants.js' -import { errors } from './generator.constants.js' -import { getOutdatedFileMessage } from './generator.constants.js' +import { StyleSchemaFileOutdatedError } from './file-outdated.error.js' +import { StyleSchemaTargetPathError } from './target-path.error.js' + +const defaultFilename = 'appearance.css.ts' export class StyleSchemaGenerator { constructor( @@ -50,13 +50,17 @@ export class StyleSchemaGenerator { const expected = await this.getGenerator(fileSchema).generateFileContent() const actual = await pretty(readFileSync(filePath, 'utf-8')) - assert.equal(actual, expected, getOutdatedFileMessage(filePath)) + if (actual !== expected) { + throw new StyleSchemaFileOutdatedError(filePath) + } } private getFilePath(fileSchema: StyleSchemaFile): string { const targetPath = join(this.basePath, fileSchema.target) - assert.ok(!targetPath.endsWith('/'), errors.targetPathTrailingSlash) + if (targetPath.endsWith('/')) { + throw new StyleSchemaTargetPathError() + } return join(targetPath, fileSchema.filename ?? defaultFilename) } diff --git a/generators/appearance/src/schema/target-path.error.ts b/generators/appearance/src/schema/target-path.error.ts new file mode 100644 index 000000000..be7709051 --- /dev/null +++ b/generators/appearance/src/schema/target-path.error.ts @@ -0,0 +1,5 @@ +export class StyleSchemaTargetPathError extends Error { + constructor() { + super("Path should not end with '/' character") + } +} diff --git a/generators/appearance/src/style/generator.constants.ts b/generators/appearance/src/style/generator.constants.ts index 543471ef6..8220f4048 100644 --- a/generators/appearance/src/style/generator.constants.ts +++ b/generators/appearance/src/style/generator.constants.ts @@ -4,9 +4,3 @@ export const defaultThemeImport: ImportSchema = { import: '{ createAppearanceStyles, vars }', from: '@atls-ui-parts/theme', } - -export const errors = { - prefixRequired: 'Prefix is required', - variantsRequired: 'Variants are required', - statesRequired: 'States are required', -} diff --git a/generators/appearance/src/style/generator.ts b/generators/appearance/src/style/generator.ts index 6ed00f99b..6bacae668 100644 --- a/generators/appearance/src/style/generator.ts +++ b/generators/appearance/src/style/generator.ts @@ -1,22 +1,30 @@ import type { StyleDeclarationSchema } from './interfaces.js' import type { StyleFileSchema } from './interfaces.js' -import assert from 'node:assert/strict' - import { pretty } from '@atls-ui-generators/utils' +import { StylePrefixRequiredError } from './prefix-required.error.js' +import { StyleStatesRequiredError } from './states-required.error.js' +import { StyleVariantsRequiredError } from './variants-required.error.js' import { capitalizeFirstLetter } from '../utils/index.js' import { getAppearanceStylesName } from '../utils/index.js' import { defaultThemeImport } from './generator.constants.js' -import { errors } from './generator.constants.js' export class StyleGenerator { readonly #schema: StyleFileSchema constructor(schema: StyleFileSchema) { - assert.ok(schema.prefix, errors.prefixRequired) - assert.ok(schema.variants.length, errors.variantsRequired) - assert.ok(schema.states.length, errors.statesRequired) + if (!schema.prefix) { + throw new StylePrefixRequiredError() + } + + if (!schema.variants.length) { + throw new StyleVariantsRequiredError() + } + + if (!schema.states.length) { + throw new StyleStatesRequiredError() + } this.#schema = schema } diff --git a/generators/appearance/src/style/prefix-required.error.ts b/generators/appearance/src/style/prefix-required.error.ts new file mode 100644 index 000000000..299602eb2 --- /dev/null +++ b/generators/appearance/src/style/prefix-required.error.ts @@ -0,0 +1,5 @@ +export class StylePrefixRequiredError extends Error { + constructor() { + super('Prefix is required') + } +} diff --git a/generators/appearance/src/style/states-required.error.ts b/generators/appearance/src/style/states-required.error.ts new file mode 100644 index 000000000..3f3db5e59 --- /dev/null +++ b/generators/appearance/src/style/states-required.error.ts @@ -0,0 +1,5 @@ +export class StyleStatesRequiredError extends Error { + constructor() { + super('States are required') + } +} diff --git a/generators/appearance/src/style/variants-required.error.ts b/generators/appearance/src/style/variants-required.error.ts new file mode 100644 index 000000000..a40cf61cd --- /dev/null +++ b/generators/appearance/src/style/variants-required.error.ts @@ -0,0 +1,5 @@ +export class StyleVariantsRequiredError extends Error { + constructor() { + super('Variants are required') + } +} From 20c238dc5b4bfc832a30eae788d0a80ebc54835d Mon Sep 17 00:00:00 2001 From: Andrew Ghostuhin Date: Fri, 12 Jun 2026 20:35:13 +0300 Subject: [PATCH 9/9] fix(appearance): add generator error contract --- .../src/generator-mode-required.error.ts | 6 ++- generators/appearance/src/generator.error.ts | 11 ++++++ .../src/map/content-required.error.ts | 6 ++- .../src/map/imports-required.error.ts | 6 ++- .../src/schema-export-required.error.ts | 6 ++- .../src/schema-path-file-required.error.ts | 6 ++- .../src/schema-path-required.error.ts | 6 ++- .../src/schema/file-outdated.error.ts | 6 ++- .../src/schema/target-path.error.ts | 6 ++- .../src/style/prefix-required.error.ts | 6 ++- .../src/style/states-required.error.ts | 6 ++- .../src/style/tests/generator.test.ts | 37 ++++++++++++------- .../src/style/variants-required.error.ts | 6 ++- 13 files changed, 79 insertions(+), 35 deletions(-) create mode 100644 generators/appearance/src/generator.error.ts diff --git a/generators/appearance/src/generator-mode-required.error.ts b/generators/appearance/src/generator-mode-required.error.ts index 9d07ac4ca..2d182fa75 100644 --- a/generators/appearance/src/generator-mode-required.error.ts +++ b/generators/appearance/src/generator-mode-required.error.ts @@ -1,5 +1,7 @@ -export class GeneratorModeRequiredError extends Error { +import { GeneratorError } from './generator.error.js' + +export class GeneratorModeRequiredError extends GeneratorError { constructor() { - super('Exactly one of --check or --write is required') + super('generator_mode_required', 'Exactly one of --check or --write is required') } } diff --git a/generators/appearance/src/generator.error.ts b/generators/appearance/src/generator.error.ts new file mode 100644 index 000000000..07d4d57e3 --- /dev/null +++ b/generators/appearance/src/generator.error.ts @@ -0,0 +1,11 @@ +export class GeneratorError extends Error { + constructor( + readonly code: string, + message: string, + options?: ErrorOptions + ) { + super(message, options) + + this.name = new.target.name + } +} diff --git a/generators/appearance/src/map/content-required.error.ts b/generators/appearance/src/map/content-required.error.ts index 52ad4d0fd..34801d0f1 100644 --- a/generators/appearance/src/map/content-required.error.ts +++ b/generators/appearance/src/map/content-required.error.ts @@ -1,5 +1,7 @@ -export class MapContentRequiredError extends Error { +import { GeneratorError } from '../generator.error.js' + +export class MapContentRequiredError extends GeneratorError { constructor() { - super('Styles or exports are required') + super('map_content_required', 'Styles or exports are required') } } diff --git a/generators/appearance/src/map/imports-required.error.ts b/generators/appearance/src/map/imports-required.error.ts index 7d181875e..a9fc67ca9 100644 --- a/generators/appearance/src/map/imports-required.error.ts +++ b/generators/appearance/src/map/imports-required.error.ts @@ -1,5 +1,7 @@ -export class MapImportsRequiredError extends Error { +import { GeneratorError } from '../generator.error.js' + +export class MapImportsRequiredError extends GeneratorError { constructor() { - super('Imports are required') + super('map_imports_required', 'Imports are required') } } diff --git a/generators/appearance/src/schema-export-required.error.ts b/generators/appearance/src/schema-export-required.error.ts index 6f625c248..2c5434211 100644 --- a/generators/appearance/src/schema-export-required.error.ts +++ b/generators/appearance/src/schema-export-required.error.ts @@ -1,5 +1,7 @@ -export class StyleSchemaExportRequiredError extends Error { +import { GeneratorError } from './generator.error.js' + +export class StyleSchemaExportRequiredError extends GeneratorError { constructor() { - super('Style schema file should export schema') + super('schema_export_required', 'Style schema file should export schema') } } diff --git a/generators/appearance/src/schema-path-file-required.error.ts b/generators/appearance/src/schema-path-file-required.error.ts index 81772c37b..5731a172a 100644 --- a/generators/appearance/src/schema-path-file-required.error.ts +++ b/generators/appearance/src/schema-path-file-required.error.ts @@ -1,5 +1,7 @@ -export class StyleSchemaPathFileRequiredError extends Error { +import { GeneratorError } from './generator.error.js' + +export class StyleSchemaPathFileRequiredError extends GeneratorError { constructor() { - super('Style schema path should point to a file') + super('schema_path_file_required', 'Style schema path should point to a file') } } diff --git a/generators/appearance/src/schema-path-required.error.ts b/generators/appearance/src/schema-path-required.error.ts index 49c2ea7bc..a02cef28b 100644 --- a/generators/appearance/src/schema-path-required.error.ts +++ b/generators/appearance/src/schema-path-required.error.ts @@ -1,5 +1,7 @@ -export class StyleSchemaPathRequiredError extends Error { +import { GeneratorError } from './generator.error.js' + +export class StyleSchemaPathRequiredError extends GeneratorError { constructor() { - super('Path to style schema is required') + super('schema_path_required', 'Path to style schema is required') } } diff --git a/generators/appearance/src/schema/file-outdated.error.ts b/generators/appearance/src/schema/file-outdated.error.ts index 9e429ffae..ec2806d57 100644 --- a/generators/appearance/src/schema/file-outdated.error.ts +++ b/generators/appearance/src/schema/file-outdated.error.ts @@ -1,5 +1,7 @@ -export class StyleSchemaFileOutdatedError extends Error { +import { GeneratorError } from '../generator.error.js' + +export class StyleSchemaFileOutdatedError extends GeneratorError { constructor(filePath: string) { - super(`${filePath} is out of date`) + super('schema_file_outdated', `${filePath} is out of date`) } } diff --git a/generators/appearance/src/schema/target-path.error.ts b/generators/appearance/src/schema/target-path.error.ts index be7709051..184ed5940 100644 --- a/generators/appearance/src/schema/target-path.error.ts +++ b/generators/appearance/src/schema/target-path.error.ts @@ -1,5 +1,7 @@ -export class StyleSchemaTargetPathError extends Error { +import { GeneratorError } from '../generator.error.js' + +export class StyleSchemaTargetPathError extends GeneratorError { constructor() { - super("Path should not end with '/' character") + super('schema_target_path_invalid', "Path should not end with '/' character") } } diff --git a/generators/appearance/src/style/prefix-required.error.ts b/generators/appearance/src/style/prefix-required.error.ts index 299602eb2..81a25f31b 100644 --- a/generators/appearance/src/style/prefix-required.error.ts +++ b/generators/appearance/src/style/prefix-required.error.ts @@ -1,5 +1,7 @@ -export class StylePrefixRequiredError extends Error { +import { GeneratorError } from '../generator.error.js' + +export class StylePrefixRequiredError extends GeneratorError { constructor() { - super('Prefix is required') + super('style_prefix_required', 'Prefix is required') } } diff --git a/generators/appearance/src/style/states-required.error.ts b/generators/appearance/src/style/states-required.error.ts index 3f3db5e59..3530d1717 100644 --- a/generators/appearance/src/style/states-required.error.ts +++ b/generators/appearance/src/style/states-required.error.ts @@ -1,5 +1,7 @@ -export class StyleStatesRequiredError extends Error { +import { GeneratorError } from '../generator.error.js' + +export class StyleStatesRequiredError extends GeneratorError { constructor() { - super('States are required') + super('style_states_required', 'States are required') } } diff --git a/generators/appearance/src/style/tests/generator.test.ts b/generators/appearance/src/style/tests/generator.test.ts index 506680099..4c1de4965 100644 --- a/generators/appearance/src/style/tests/generator.test.ts +++ b/generators/appearance/src/style/tests/generator.test.ts @@ -1,20 +1,22 @@ /* eslint-disable n/no-sync */ -import type { StyleSchema } from '../../schema/index.js' +import type { StyleSchema } from '../../schema/index.js' -import assert from 'node:assert/strict' -import { existsSync } from 'node:fs' -import { mkdtempSync } from 'node:fs' -import { readFileSync } from 'node:fs' -import { rmSync } from 'node:fs' -import { writeFileSync } from 'node:fs' -import { tmpdir } from 'node:os' -import { join } from 'node:path' -import { after } from 'node:test' -import { describe } from 'node:test' -import { it } from 'node:test' +import assert from 'node:assert/strict' +import { existsSync } from 'node:fs' +import { mkdtempSync } from 'node:fs' +import { readFileSync } from 'node:fs' +import { rmSync } from 'node:fs' +import { writeFileSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { after } from 'node:test' +import { describe } from 'node:test' +import { it } from 'node:test' -import { StyleSchemaGenerator } from '../../schema/index.js' +import { GeneratorError } from '../../generator.error.js' +import { StyleSchemaFileOutdatedError } from '../../schema/file-outdated.error.js' +import { StyleSchemaGenerator } from '../../schema/index.js' const dirname = mkdtempSync(join(tmpdir(), 'appearance-schema-')) @@ -103,4 +105,13 @@ describe('style schema generator', () => { await assert.rejects(async () => generator.check(), /map\.css\.ts is out of date/) }) + + it('should expose generator error contract', () => { + const error = new StyleSchemaFileOutdatedError('map.css.ts') + + assert.ok(error instanceof GeneratorError) + assert.equal(error.name, 'StyleSchemaFileOutdatedError') + assert.equal(error.code, 'schema_file_outdated') + assert.equal(error.message, 'map.css.ts is out of date') + }) }) diff --git a/generators/appearance/src/style/variants-required.error.ts b/generators/appearance/src/style/variants-required.error.ts index a40cf61cd..18a374d45 100644 --- a/generators/appearance/src/style/variants-required.error.ts +++ b/generators/appearance/src/style/variants-required.error.ts @@ -1,5 +1,7 @@ -export class StyleVariantsRequiredError extends Error { +import { GeneratorError } from '../generator.error.js' + +export class StyleVariantsRequiredError extends GeneratorError { constructor() { - super('Variants are required') + super('style_variants_required', 'Variants are required') } }