diff --git a/.changepacks/changepack_log__e3yCAYif0TXUSd7rnsB3.json b/.changepacks/changepack_log__e3yCAYif0TXUSd7rnsB3.json new file mode 100644 index 00000000..784a3615 --- /dev/null +++ b/.changepacks/changepack_log__e3yCAYif0TXUSd7rnsB3.json @@ -0,0 +1 @@ +{"changes":{"packages/react/package.json":"Patch","packages/components/package.json":"Patch","packages/webpack-plugin/package.json":"Patch","packages/reset-css/package.json":"Patch","bindings/devup-ui-wasm/package.json":"Patch","packages/bun-plugin/package.json":"Patch","packages/rsbuild-plugin/package.json":"Patch","packages/eslint-plugin/package.json":"Patch","packages/plugin-utils/package.json":"Patch","packages/vite-plugin/package.json":"Patch","packages/next-plugin/package.json":"Patch"},"note":"Optimize code and Update Dep","date":"2026-05-12T12:46:03.746862200Z"} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 413b29f0..4a7fee54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,9 +49,9 @@ checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" [[package]] name = "anstyle" -version = "1.0.13" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" +checksum = "940b3a0ca603d1eade50a4846a2afffd5ef57a9feac2c0e2ec2e14f9ead76000" [[package]] name = "anyhow" @@ -109,9 +109,9 @@ dependencies = [ [[package]] name = "bitflags" -version = "2.11.0" +version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" +checksum = "c4512299f36f043ab09a583e57bceb5a5aab7a73db1805848e8fef3c9e8c78b3" [[package]] name = "block-buffer" @@ -124,9 +124,9 @@ dependencies = [ [[package]] name = "boa_ast" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc119a5ad34c3f459062a96907f53358989b173d104258891bb74f95d93747e8" +checksum = "6339a700715bda376f5ea65c76e8fe8fc880930d8b0638cea68e7f3da6538e0a" dependencies = [ "bitflags", "boa_interner", @@ -139,9 +139,9 @@ dependencies = [ [[package]] name = "boa_engine" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e637ec52ea66d76b0ca86180c259d6c7bb6e6a6e14b2f36b85099306d8b00cc3" +checksum = "1521be326f8a5c8887e95d4ce7f002917a002a23f7b93b9a6a2bf50ed4157824" dependencies = [ "aligned-vec", "arrayvec", @@ -191,9 +191,9 @@ dependencies = [ [[package]] name = "boa_gc" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1179f690cbfcbe5364cceee5f1cb577265bb6f07b0be6f210aabe270adcf9da" +checksum = "17323a98cf2e631afacf1a6d659c1212c48a68bacfa85afab0a66ade80582e51" dependencies = [ "boa_macros", "boa_string", @@ -203,9 +203,9 @@ dependencies = [ [[package]] name = "boa_interner" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9626505d33dc63d349662437297df1d3afd9d5fc4a2b3ad34e5e1ce879a78848" +checksum = "20510b8b02bcde9b0a01cf34c0c308c56156503d1d91cdab4c8cfbd292b747ea" dependencies = [ "boa_gc", "boa_macros", @@ -219,9 +219,9 @@ dependencies = [ [[package]] name = "boa_macros" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f36418a46544b152632c141b0a0b7a453cd69ca150caeef83aee9e2f4b48b7d" +checksum = "5822cb4f146d243060e588bc5a5f2e709683fdad3d7111f42c48e6b5c921d23d" dependencies = [ "cfg-if", "cow-utils", @@ -233,9 +233,9 @@ dependencies = [ [[package]] name = "boa_parser" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f99bf5b684f0de946378fcfe5f38c3a0fbd51cbf83a0f39ff773a0e218541f" +checksum = "35bd957fa9fa93e3a001a8aba5a5cd40c2bbfde486378be4c4b472fd304aaddb" dependencies = [ "bitflags", "boa_ast", @@ -251,9 +251,9 @@ dependencies = [ [[package]] name = "boa_string" -version = "0.21.0" +version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45ce9d7aa5563a2e14eab111e2ae1a06a69a812f6c0c3d843196c9d03fbef440" +checksum = "ca2da1d7f4a76fd9040788a122f0d807910800a7b86f5952e9244848c36511de" dependencies = [ "fast-float2", "itoa", @@ -306,9 +306,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.57" +version = "1.2.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a0dd1ca384932ff3641c8718a02769f1698e7563dc6974ffd03346116310423" +checksum = "a1dce859f0832a7d088c4f1119888ab94ef4b5d6795d1ce05afb7fe159d79f98" dependencies = [ "find-msvc-tools", "shlex", @@ -349,18 +349,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.56" +version = "4.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75ca66430e33a14957acc24c5077b503e7d374151b2b4b3a10c83b4ceb4be0e" +checksum = "1ddb117e43bbf7dacf0a4190fef4d345b9bad68dfc649cb349e7d17d28428e51" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.56" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793207c7fa6300a0608d1080b858e5fdbe713cdc1c8db9fb17777d8a13e63df0" +checksum = "714a53001bf66416adb0e2ef5ac857140e7dc3a0c48fb28b2f10762fc4b5069f" dependencies = [ "anstyle", "clap_lex", @@ -368,9 +368,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.7.7" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" +checksum = "c8d4a3bb8b1e0c1050499d1815f5ab16d04f0959b233085fb31653fbfc9d98f9" [[package]] name = "cobs" @@ -448,9 +448,9 @@ dependencies = [ [[package]] name = "criterion" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d883447757bb0ee46f233e9dc22eb84d93a9508c9b868687b274fc431d886bf" +checksum = "950046b2aa2492f9a536f5f4f9a3de7b9e2476e575e05bd6c333371add4d98f3" dependencies = [ "alloca", "anes", @@ -473,9 +473,9 @@ dependencies = [ [[package]] name = "criterion-plot" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed943f81ea2faa8dcecbbfa50164acf95d555afec96a27871663b300e387b2e4" +checksum = "d8d80a2f4f5b554395e47b5d8305bc3d27813bacb73493eb1001e8f76dae29ea" dependencies = [ "cast", "itertools 0.13.0", @@ -550,9 +550,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.5.5" +version = "0.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587" +checksum = "7cd812cc2bc1d69d4764bd80df88b4317eaef9e773c75226407d9bc0876b211c" dependencies = [ "powerfmt", ] @@ -580,9 +580,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4850db49bf08e663084f7fb5c87d202ef91a3907271aff24a94eb97ff039153c" +checksum = "f1dd6dbb5841937940781866fa1281a1ff7bd3bf827091440879f9994983d5c2" dependencies = [ "block-buffer", "const-oid", @@ -721,9 +721,9 @@ checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55" [[package]] name = "fastrand" -version = "2.3.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6" [[package]] name = "find-msvc-tools" @@ -771,9 +771,9 @@ checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" [[package]] name = "futures-channel" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +checksum = "07bbe89c50d7a535e539b8c17bc0b49bdb77747034daa8087407d655f3f7cc1d" dependencies = [ "futures-core", ] @@ -810,9 +810,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.31" +version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" +checksum = "cecba35d7ad927e23624b22ad55235f2239cfa44fd10428eecbeba6d6a717718" [[package]] name = "futures-lite" @@ -933,6 +933,15 @@ dependencies = [ "foldhash 0.2.0", ] +[[package]] +name = "hashbrown" +version = "0.17.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed5909b6e89a2db4456e54cd5f673791d7eca6732202bbf2a9cc504fe2f9b84a" +dependencies = [ + "allocator-api2", +] + [[package]] name = "heck" version = "0.5.0" @@ -941,9 +950,9 @@ checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] name = "hybrid-array" -version = "0.4.10" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3944cf8cf766b40e2a1a333ee5e9b563f854d5fa49d6a8ca2764e97c6eddb214" +checksum = "9155a582abd142abc056962c29e3ce5ff2ad5469f4246b537ed42c5deba857da" dependencies = [ "typenum", ] @@ -963,9 +972,9 @@ dependencies = [ [[package]] name = "icu_locale_core" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" dependencies = [ "displaydoc", "litemap", @@ -1022,9 +1031,9 @@ checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" [[package]] name = "icu_provider" -version = "2.1.1" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" dependencies = [ "displaydoc", "icu_locale_core", @@ -1045,12 +1054,12 @@ checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954" [[package]] name = "indexmap" -version = "2.13.0" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" +checksum = "d466e9454f08e4a911e14806c24e16fba1b4c121d1ea474396f396069cf949d9" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "serde", "serde_core", ] @@ -1102,9 +1111,9 @@ checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682" [[package]] name = "js-sys" -version = "0.3.94" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e04e2ef80ce82e13552136fabeef8a5ed1f985a96805761cbb9a2c34e7664d9" +checksum = "67df7112613f8bfd9150013a0314e196f4800d3201ae742489d999db2f979f08" dependencies = [ "cfg-if", "futures-util", @@ -1114,9 +1123,9 @@ dependencies = [ [[package]] name = "json-escape-simd" -version = "3.0.1" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3c2a6c0b4b5637c41719973ef40c6a1cf564f9db6958350de6193fbee9c23f5" +checksum = "35e770254dd7802184595b1d30da2a15cb72569e2aca2b177aef8d22eac8a693" [[package]] name = "leb128fmt" @@ -1126,9 +1135,9 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" [[package]] name = "libc" -version = "0.2.183" +version = "0.2.186" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d" +checksum = "68ab91017fe16c622486840e4c83c9a37afeff978bd239b5293d61ece587de66" [[package]] name = "libm" @@ -1144,9 +1153,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" +checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" [[package]] name = "lock_api" @@ -1226,9 +1235,9 @@ dependencies = [ [[package]] name = "num-conv" -version = "0.2.0" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf97ec579c3c42f953ef76dbf8d55ac91fb219dde70e49aa4a6b7d74e9919050" +checksum = "c6673768db2d862beb9b39a78fdcb1a69439615d5794a1be50caa9bc92c81967" [[package]] name = "num-integer" @@ -1251,9 +1260,9 @@ dependencies = [ [[package]] name = "num_enum" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1207a7e20ad57b847bbddc6776b968420d38292bbfe2089accff5e19e82454c" +checksum = "5d0bca838442ec211fa11de3a8b0e0e8f3a4522575b5c4c06ed722e005036f26" dependencies = [ "num_enum_derive", "rustversion", @@ -1261,9 +1270,9 @@ dependencies = [ [[package]] name = "num_enum_derive" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" +checksum = "680998035259dcfcafe653688bf2aa6d3e2dc05e98be6ab46afb089dc84f1df8" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -1306,9 +1315,9 @@ checksum = "d211803b9b6b570f68772237e415a029d5a50c65d382910b879fb19d3271f94d" [[package]] name = "oxc-browserslist" -version = "3.0.0" +version = "3.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc15cd06df6b0464b763ec97a511527047350a6bfd93daf8ac82fedf21050083" +checksum = "3be1f075e9100260ff5ecb2b375fb24d6c5f2c97a23e6a86367720831e9faa8e" dependencies = [ "flate2", "postcard", @@ -1345,21 +1354,21 @@ dependencies = [ [[package]] name = "oxc_allocator" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cce9493fc18c7f2b9274baba258555d88cc1fab3ac3c4b293433b4f85ad097b" +checksum = "6ae84cda3381ab6f90bcab6325d1874ac4bbd71232f2200dc6e866123c8cc4ef" dependencies = [ "allocator-api2", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "oxc_data_structures", "rustc-hash", ] [[package]] name = "oxc_ast" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29366258930c55e2578e231995d2079cba12793429454fa892f01d985821a554" +checksum = "b4104077919ef54c3ae15f8923a0e44f636c2721dfc11cf168404804af2b726e" dependencies = [ "bitflags", "oxc_allocator", @@ -1369,14 +1378,15 @@ dependencies = [ "oxc_estree", "oxc_regular_expression", "oxc_span", + "oxc_str", "oxc_syntax", ] [[package]] name = "oxc_ast_macros" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "617bf2f55d04db8d6fea9583569c7e4d9052297f76f2f8ae31b1f4ef8bcfd98e" +checksum = "a8004e158aa037d7e14ea85fccbcf4a320c3412ad9da9a3df5df85c52ee5585f" dependencies = [ "phf", "proc-macro2", @@ -1386,9 +1396,9 @@ dependencies = [ [[package]] name = "oxc_ast_visit" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4344952280d3e8cbfed93da2775c460bbded12f388404daa662dc0ee731e051f" +checksum = "97735a9e890873bf1b13a5a98f0b4d5ba1ab604259cf4d5950704bbfdb51bc5b" dependencies = [ "oxc_allocator", "oxc_ast", @@ -1398,9 +1408,9 @@ dependencies = [ [[package]] name = "oxc_codegen" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb16cc717d020bff40a1ef4da006da23b24990c277eec39586a454110c2ad628" +checksum = "4f4efe56cb3a9d1d5232a1abcd41ea4845faaeaf21e43252d0434c1badd790b0" dependencies = [ "bitflags", "cow-utils", @@ -1413,15 +1423,16 @@ dependencies = [ "oxc_semantic", "oxc_sourcemap", "oxc_span", + "oxc_str", "oxc_syntax", "rustc-hash", ] [[package]] name = "oxc_compat" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31b7f19adf1f6b67312fc3ac1003d995c55b51fc6a77be17fc597139300aab24" +checksum = "683f328ea8f996ce0263fb373661fed1b61c3cedf6238b183845014d2e0f2961" dependencies = [ "cow-utils", "oxc-browserslist", @@ -1432,18 +1443,18 @@ dependencies = [ [[package]] name = "oxc_data_structures" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3a309fcc491b31039bd2a77d8517278c198f566c284e9a18977dab801c05681" +checksum = "0df39892508c04e3d44ccbf7e384fb35bac3750f39984f7cef47949dc321571a" dependencies = [ "ropey", ] [[package]] name = "oxc_diagnostics" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1c0f18571aac10db23d1ab681108102ac735c50142c5418ec8272e1d861219f" +checksum = "c4312c021972d746e1bb06051d1e887b80ad2b98f772b7b2aec204ddf585779c" dependencies = [ "cow-utils", "oxc-miette", @@ -1452,9 +1463,9 @@ dependencies = [ [[package]] name = "oxc_ecmascript" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eaddc891449b4c7d8720714d6939c99fc531054c8f7decba9ffdd1c70a7b67b" +checksum = "9db328a0a6163105e188e2ff4620fb4a065daf2001e4a7318b3342605bacaa9e" dependencies = [ "cow-utils", "num-bigint", @@ -1468,9 +1479,9 @@ dependencies = [ [[package]] name = "oxc_estree" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8dd0f39cc6f2014fc1a60a563903c6c6c88f856772d44f390fe876a575bd7c97" +checksum = "db4f0258b3b9994f27bb11e1bc8fdedd6a22281307e53148ac76d72e61c93481" [[package]] name = "oxc_index" @@ -1484,9 +1495,9 @@ dependencies = [ [[package]] name = "oxc_parser" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecf347b9ba5fd251f215f0c44602fbec98c01ea4cf13ae2682167f33d8a8d0b4" +checksum = "2fcb901b425989d315e1c536f561d6f92260731a1e1c1418c1ba4cc203167124" dependencies = [ "bitflags", "cow-utils", @@ -1500,6 +1511,7 @@ dependencies = [ "oxc_ecmascript", "oxc_regular_expression", "oxc_span", + "oxc_str", "oxc_syntax", "rustc-hash", "seq-macro", @@ -1507,15 +1519,16 @@ dependencies = [ [[package]] name = "oxc_regular_expression" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "922016d2def4d0a2b17c907bda16d6eb20516622ae818eb8662f69b353ba9f20" +checksum = "e2825d55dd483df5d641087ab515547bee282639ecff26a32e66356cd273b40d" dependencies = [ "bitflags", "oxc_allocator", "oxc_ast_macros", "oxc_diagnostics", "oxc_span", + "oxc_str", "phf", "rustc-hash", "unicode-id-start", @@ -1523,9 +1536,9 @@ dependencies = [ [[package]] name = "oxc_semantic" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cb5b9082935c4b0e076bc9c2add9f335fed1be4e6ae5e580747a33808348318" +checksum = "f13f223f2f7da66a0802b1b45c0e3b8c88386893af34dccb11e1f3cc2b64cdcf" dependencies = [ "itertools 0.14.0", "memchr", @@ -1536,6 +1549,7 @@ dependencies = [ "oxc_ecmascript", "oxc_index", "oxc_span", + "oxc_str", "oxc_syntax", "rustc-hash", "self_cell", @@ -1543,9 +1557,9 @@ dependencies = [ [[package]] name = "oxc_sourcemap" -version = "6.0.2" +version = "6.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7f89482522f3cd820817d48ee4ade5b10822060d6e5e4d419f05f6d8bd29d70" +checksum = "6d378eb8bad20e89d66276aebab51f6a5408571092cac94abdd3eabb773713d6" dependencies = [ "base64-simd", "json-escape-simd", @@ -1556,9 +1570,9 @@ dependencies = [ [[package]] name = "oxc_span" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4413a552b443c777dd2782bc49e719a20cb36434c9b196e9021259028ca74c" +checksum = "dff4df78f3fd004daf1dd0301cac40b34451c42e56dd46f7a7dcefd0cc582ef3" dependencies = [ "compact_str", "oxc-miette", @@ -1570,21 +1584,21 @@ dependencies = [ [[package]] name = "oxc_str" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "321abe830f84ab9c13ac43eadb625f7e8ccddab6a150732d1e5bf9dde043ef4f" +checksum = "0273521fbd4655da9c5b2f659f4cc7f2e5370a573b54d37a4456c336c7bc8af6" dependencies = [ "compact_str", - "hashbrown 0.16.1", + "hashbrown 0.17.1", "oxc_allocator", "oxc_estree", ] [[package]] name = "oxc_syntax" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11919498c468e21e0688d6c99e37c15f2825a64cfa2f9a0c99d6f767076011d8" +checksum = "0dcdc65090dfc024c9f0d156ff0e1f9b139b7954552cd6c8de02bd6d2362679f" dependencies = [ "bitflags", "cow-utils", @@ -1595,15 +1609,16 @@ dependencies = [ "oxc_estree", "oxc_index", "oxc_span", + "oxc_str", "phf", "unicode-id-start", ] [[package]] name = "oxc_transformer" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80da5fe1be7e026fb17d3b948712d5d53b6257fa9806c851f405b842dcf761b8" +checksum = "92af4e9058b3e0d548bac1d0dd40a957b38cf6ae772bf0e823d8a4af15e9a0fc" dependencies = [ "base64", "compact_str", @@ -1620,6 +1635,7 @@ dependencies = [ "oxc_regular_expression", "oxc_semantic", "oxc_span", + "oxc_str", "oxc_syntax", "oxc_traverse", "rustc-hash", @@ -1630,9 +1646,9 @@ dependencies = [ [[package]] name = "oxc_traverse" -version = "0.124.0" +version = "0.129.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8cbebcd5777218246cd65c540c4792600ba2bf3467671c068f6dc4da963cdd2" +checksum = "42d40c40ac875cc90dd5f8aee72a3fdbabf33f9d3ef9a15ce7db3de6767d366e" dependencies = [ "itoa", "oxc_allocator", @@ -1743,18 +1759,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.1.10" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a" +checksum = "cbf0d9e68100b3a7989b4901972f265cd542e560a3a8a724e1e20322f4d06ce9" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.10" +version = "1.1.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861" +checksum = "a990e22f43e84855daf260dded30524ef4a9021cc7541c26540500a50b624389" dependencies = [ "proc-macro2", "quote", @@ -1815,9 +1831,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" dependencies = [ "zerovec", ] @@ -1849,9 +1865,9 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "3.4.0" +version = "3.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" +checksum = "e67ba7e9b2b56446f1d419b1d807906278ffa1a658a8a5d8a39dcb1f5a78614f" dependencies = [ "toml_edit", ] @@ -1888,9 +1904,9 @@ checksum = "f8dcc9c7d52a811697d2151c701e0d08956f92b0e24136cf4cf27b57a6a0d9bf" [[package]] name = "rand" -version = "0.9.2" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +checksum = "44c5af06bb1b7d3216d91932aed5265164bf384dc89cd6ba05cf59a35f5f76ea" dependencies = [ "rand_chacha", "rand_core", @@ -1917,9 +1933,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" +checksum = "fb39b166781f92d482534ef4b4b1b2568f42613b53e5b6c160e24cfbfa30926d" dependencies = [ "either", "rayon-core", @@ -1975,9 +1991,9 @@ checksum = "cab834c73d247e67f4fae452806d17d3c7501756d98c8808d7c9c7aa7d18f973" [[package]] name = "regex-syntax" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a96887878f22d7bad8a3b6dc5b7440e0ada9a245242924394987b21cf2210a4c" +checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a" [[package]] name = "regress" @@ -2036,9 +2052,9 @@ dependencies = [ [[package]] name = "rustc-hash" -version = "2.1.1" +version = "2.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +checksum = "94300abf3f1ae2e2b8ffb7b58043de3d399c73fa6f4b73826402a5c457614dbe" [[package]] name = "rustc_version" @@ -2055,7 +2071,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" dependencies = [ - "semver 1.0.27", + "semver 1.0.28", ] [[package]] @@ -2136,9 +2152,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.27" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd" [[package]] name = "semver-parser" @@ -2279,9 +2295,9 @@ checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa" [[package]] name = "siphasher" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2aa850e253778c88a04c3d7323b043aeda9d3e30d5971937c1855769763678e" +checksum = "8ee5873ec9cce0195efcb7a4e9507a04cd49aec9c83d0389df45b1ef7ba2e649" [[package]] name = "slab" @@ -2406,9 +2422,9 @@ dependencies = [ [[package]] name = "thin-vec" -version = "0.2.14" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "144f754d318415ac792f9d69fc87abbbfc043ce2ef041c60f16ad828f638717d" +checksum = "b0f7e269b48f0a7dd0146680fa24b50cc67fc0373f086a5b2f99bd084639b482" [[package]] name = "thiserror" @@ -2438,7 +2454,6 @@ checksum = "743bd48c283afc0388f9b8827b976905fb217ad9e647fae3a379a9283c4def2c" dependencies = [ "deranged", "itoa", - "js-sys", "libc", "num-conv", "num_threads", @@ -2466,9 +2481,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" dependencies = [ "displaydoc", "serde_core", @@ -2487,18 +2502,18 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.7.5+spec-1.1.0" +version = "1.1.1+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" +checksum = "3165f65f62e28e0115a00b2ebdd37eb6f3b641855f9d636d3cd4103767159ad7" dependencies = [ "serde_core", ] [[package]] name = "toml_edit" -version = "0.23.10+spec-1.0.0" +version = "0.25.11+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" +checksum = "0b59c4d22ed448339746c59b905d24568fcbb3ab65a500494f7b8c3e97739f2b" dependencies = [ "indexmap", "toml_datetime", @@ -2508,18 +2523,18 @@ dependencies = [ [[package]] name = "toml_parser" -version = "1.0.6+spec-1.1.0" +version = "1.1.2+spec-1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" +checksum = "a2abe9b86193656635d2411dc43050282ca48aa31c2451210f4202550afb7526" dependencies = [ "winnow", ] [[package]] name = "typenum" -version = "1.19.0" +version = "1.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" +checksum = "40ce102ab67701b8526c123c1bab5cbe42d7040ccfd0f64af1a385808d2f43de" [[package]] name = "unicode-id-start" @@ -2541,9 +2556,9 @@ checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "9629274872b2bfaf8d66f5f15725007f635594914870f65218920345aa11aa8c" [[package]] name = "unicode-width" @@ -2581,11 +2596,11 @@ dependencies = [ [[package]] name = "wasip2" -version = "1.0.2+wasi-0.2.9" +version = "1.0.3+wasi-0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5" +checksum = "20064672db26d7cdc89c7798c48a0fdfac8213434a1186e5ef29fd560ae223d6" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.57.1", ] [[package]] @@ -2594,14 +2609,14 @@ version = "0.4.0+wasi-0.3.0-rc-2026-01-06" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5" dependencies = [ - "wit-bindgen", + "wit-bindgen 0.51.0", ] [[package]] name = "wasm-bindgen" -version = "0.2.117" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0551fc1bb415591e3372d0bc4780db7e587d84e2a7e79da121051c5c4b89d0b0" +checksum = "49ace1d07c165b0864824eee619580c4689389afa9dc9ed3a4c75040d82e6790" dependencies = [ "cfg-if", "once_cell", @@ -2612,9 +2627,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.67" +version = "0.4.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03623de6905b7206edd0a75f69f747f134b7f0a2323392d664448bf2d3c5d87e" +checksum = "96492d0d3ffba25305a7dc88720d250b1401d7edca02cc3bcd50633b424673b8" dependencies = [ "js-sys", "wasm-bindgen", @@ -2622,9 +2637,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.117" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fbdf9a35adf44786aecd5ff89b4563a90325f9da0923236f6104e603c7e86be" +checksum = "8e68e6f4afd367a562002c05637acb8578ff2dea1943df76afb9e83d177c8578" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2632,9 +2647,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.117" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dca9693ef2bab6d4e6707234500350d8dad079eb508dca05530c85dc3a529ff2" +checksum = "d95a9ec35c64b2a7cb35d3fead40c4238d0940c86d107136999567a4703259f2" dependencies = [ "bumpalo", "proc-macro2", @@ -2645,18 +2660,18 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.117" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39129a682a6d2d841b6c429d0c51e5cb0ed1a03829d8b3d1e69a011e62cb3d3b" +checksum = "c4e0100b01e9f0d03189a92b96772a1fb998639d981193d7dbab487302513441" dependencies = [ "unicode-ident", ] [[package]] name = "wasm-bindgen-test" -version = "0.3.67" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941c102b3f0c15b6d72a53205e09e6646aafcf2991e18412cc331dbac1806bc0" +checksum = "af5ec93229ad9ccd0a545a516dec76dc276613f278f6a91aa6b463d5b33d42d0" dependencies = [ "async-trait", "cast", @@ -2676,9 +2691,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-macro" -version = "0.3.67" +version = "0.3.71" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26bd6570f39bb1440fd8f01b63461faaf2a3f6078a508e4e54efa99363108d2" +checksum = "3c81b9fef827e575e0e54431736d1baa0d700315d8c62cfef1f61fa3aad0cbeb" dependencies = [ "proc-macro2", "quote", @@ -2687,9 +2702,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-test-shared" -version = "0.2.117" +version = "0.2.121" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c29582b14d5bf030b02fa232b9b57faf2afc322d2c61964dd80bad02bf76207" +checksum = "4f4d8ae7ad5440360e9799dfd42857d126454a88441ddf72d288ef83fa47f527" [[package]] name = "wasm-encoder" @@ -2722,14 +2737,14 @@ dependencies = [ "bitflags", "hashbrown 0.15.5", "indexmap", - "semver 1.0.27", + "semver 1.0.28", ] [[package]] name = "web-sys" -version = "0.3.94" +version = "0.3.98" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd70027e39b12f0849461e08ffc50b9cd7688d942c1c8e3c7b22273236b4dd0a" +checksum = "4b572dff8bcf38bad0fa19729c89bb5748b2b9b1d8be70cf90df697e3a8f32aa" dependencies = [ "js-sys", "wasm-bindgen", @@ -2783,9 +2798,9 @@ dependencies = [ [[package]] name = "winnow" -version = "0.7.14" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" +checksum = "2ee1708bef14716a11bae175f579062d4554d95be2c6829f518df847b7b3fdd0" dependencies = [ "memchr", ] @@ -2799,6 +2814,12 @@ dependencies = [ "wit-bindgen-rust-macro", ] +[[package]] +name = "wit-bindgen" +version = "0.57.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" + [[package]] name = "wit-bindgen-core" version = "0.51.0" @@ -2870,7 +2891,7 @@ dependencies = [ "id-arena", "indexmap", "log", - "semver 1.0.27", + "semver 1.0.28", "serde", "serde_derive", "serde_json", @@ -2886,9 +2907,9 @@ checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" [[package]] name = "writeable" -version = "0.6.2" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" +checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" [[package]] name = "xsum" @@ -2898,9 +2919,9 @@ checksum = "0637d3a5566a82fa5214bae89087bc8c9fb94cd8e8a3c07feb691bb8d9c632db" [[package]] name = "yoke" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +checksum = "abe8c5fda708d9ca3df187cae8bfb9ceda00dd96231bed36e445a1a48e66f9ca" dependencies = [ "stable_deref_trait", "yoke-derive", @@ -2909,9 +2930,9 @@ dependencies = [ [[package]] name = "yoke-derive" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e" dependencies = [ "proc-macro2", "quote", @@ -2921,18 +2942,18 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.8.37" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7456cf00f0685ad319c5b1693f291a650eaf345e941d082fc4e03df8a03996ac" +checksum = "eed437bf9d6692032087e337407a86f04cd8d6a16a37199ed57949d415bd68e9" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.37" +version = "0.8.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1328722bbf2115db7e19d69ebcc15e795719e2d66b60827c6a69a117365e37a0" +checksum = "70e3cd084b1788766f53af483dd21f93881ff30d7320490ec3ef7526d203bad4" dependencies = [ "proc-macro2", "quote", @@ -2941,18 +2962,18 @@ dependencies = [ [[package]] name = "zerofrom" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +checksum = "69faa1f2a1ea75661980b013019ed6687ed0e83d069bc1114e2cc74c6c04c4df" dependencies = [ "zerofrom-derive", ] [[package]] name = "zerofrom-derive" -version = "0.1.6" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1" dependencies = [ "proc-macro2", "quote", @@ -2962,20 +2983,21 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.3" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" dependencies = [ "displaydoc", "yoke", "zerofrom", + "zerovec", ] [[package]] name = "zerovec" -version = "0.11.5" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" dependencies = [ "serde", "yoke", @@ -2985,9 +3007,9 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index a91c2900..26cba5dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,53 @@ resolver = "2" members = ["libs/extractor", "bindings/devup-ui-wasm", "libs/sheet", "libs/css"] +[workspace.lints.rust] +unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] } + +[workspace.lints.rustdoc] +bare_urls = "deny" +broken_intra_doc_links = "deny" + +[workspace.lints.clippy] +all = { level = "deny", priority = -1 } +cargo = { level = "deny", priority = -1 } +nursery = { level = "deny", priority = -1 } +pedantic = { level = "deny", priority = -1 } +expect_used = "deny" +unwrap_used = "deny" +# Explicitly excluded from strict groups because they are noisy or conflict with +# this workspace's public API, Oxc AST-builder ergonomics, WASM boundary shape, +# or transitive dependency graph. Everything else in all/cargo/nursery/pedantic +# is denied workspace-wide. +cast_possible_truncation = "allow" +cast_sign_loss = "allow" +default_trait_access = "allow" +from_iter_instead_of_collect = "allow" +implicit_hasher = "allow" +inline_always = "allow" +fallible_impl_from = "allow" +manual_let_else = "allow" +missing_errors_doc = "allow" +missing_fields_in_debug = "allow" +missing_panics_doc = "allow" +match_same_arms = "deny" +must_use_candidate = "allow" +needless_for_each = "allow" +needless_pass_by_value = "allow" +multiple_crate_versions = "allow" +option_if_let_else = "allow" +range_plus_one = "deny" +ref_option = "allow" +redundant_closure_for_method_calls = "deny" +redundant_else = "deny" +redundant_pub_crate = "allow" +return_self_not_must_use = "allow" +similar_names = "allow" +too_many_lines = "allow" +trivially_copy_pass_by_ref = "allow" +use_self = "allow" +used_underscore_binding = "allow" + [profile.release] # Optimize for small code size (critical for WASM binary) opt-level = "s" diff --git a/apps/landing/src/app/(detail)/components/MdxCard.tsx b/apps/landing/src/app/(detail)/components/MdxCard.tsx index 69315fe6..4b2f6a59 100644 --- a/apps/landing/src/app/(detail)/components/MdxCard.tsx +++ b/apps/landing/src/app/(detail)/components/MdxCard.tsx @@ -29,7 +29,10 @@ export default async function MdxCard({ ) // extract comment const comment = content.match(/\/\*\*[\s\S]*?\*\//)?.[0] - const code = content.replace('\n' + comment!, '') + const code = comment ? content.replace(`\n${comment}`, '') : content + const markdownComponents = _components as React.ComponentProps< + typeof ReactMarkdown + >['components'] const normalizedCode = code .split('\n') .map((line) => line.replaceAll(' ', ' ')) @@ -64,7 +67,7 @@ export default async function MdxCard({ > {demo} - + {normalizedComment ?? ''} diff --git a/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx b/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx index 6db25352..2971c982 100644 --- a/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx +++ b/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx @@ -63,41 +63,39 @@ export default function MdxCardFooter({ transition="grid-template-rows 0.3s ease-in-out" > {isOpen && ( - <> - -
- - - Copy - -
-
- + +
+ + + Copy + +
+
)} text - + hello - hello + hello diff --git a/benchmark/next-panda-css/package.json b/benchmark/next-panda-css/package.json index 3d71bec7..8f42cf15 100644 --- a/benchmark/next-panda-css/package.json +++ b/benchmark/next-panda-css/package.json @@ -16,7 +16,7 @@ "next": "^16.2" }, "devDependencies": { - "@pandacss/dev": "^1.9", + "@pandacss/dev": "^1.11", "typescript": "^6", "@types/node": "^25", "@types/react": "^19", diff --git a/benchmark/next-stylex/package.json b/benchmark/next-stylex/package.json index 4fa5b2da..641dfb6b 100644 --- a/benchmark/next-stylex/package.json +++ b/benchmark/next-stylex/package.json @@ -26,12 +26,12 @@ "@stylexjs/babel-plugin": "^0.18", "@stylexjs/eslint-plugin": "^0.18", "@stylexjs/nextjs-plugin": "^0.11", - "@types/node": "25.5", + "@types/node": "25.6", "@types/react": "19.2", "@types/react-dom": "19.2", "@types/react-test-renderer": "^19.1", - "eslint": "10.0", - "eslint-config-next": "16.1", + "eslint": "10.3", + "eslint-config-next": "16.2", "prettier": "^3.8", "react-test-renderer": "^19.2", "rimraf": "^6.1", diff --git a/benchmark/next-tailwind-turbo-devup-ui/package.json b/benchmark/next-tailwind-turbo-devup-ui/package.json index 084dd370..df569183 100644 --- a/benchmark/next-tailwind-turbo-devup-ui/package.json +++ b/benchmark/next-tailwind-turbo-devup-ui/package.json @@ -17,13 +17,13 @@ "@devup-ui/react": "workspace:^" }, "devDependencies": { - "@tailwindcss/postcss": "^4.2", + "@tailwindcss/postcss": "^4.3", "postcss": "^8.5", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", "typescript": "^6", - "tailwindcss": "^4.2", + "tailwindcss": "^4.3", "@devup-ui/next-plugin": "workspace:^" } } diff --git a/benchmark/next-tailwind-turbo/package.json b/benchmark/next-tailwind-turbo/package.json index 70537a31..eacaf2c7 100644 --- a/benchmark/next-tailwind-turbo/package.json +++ b/benchmark/next-tailwind-turbo/package.json @@ -16,12 +16,12 @@ "react-icons": "^5.6" }, "devDependencies": { - "@tailwindcss/postcss": "^4.2", + "@tailwindcss/postcss": "^4.3", "postcss": "^8.5", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", "typescript": "^6", - "tailwindcss": "^4.2" + "tailwindcss": "^4.3" } } diff --git a/benchmark/next-tailwind/package.json b/benchmark/next-tailwind/package.json index ab7f40cb..c349730e 100644 --- a/benchmark/next-tailwind/package.json +++ b/benchmark/next-tailwind/package.json @@ -16,12 +16,12 @@ "react-icons": "^5.6" }, "devDependencies": { - "@tailwindcss/postcss": "^4.2", + "@tailwindcss/postcss": "^4.3", "postcss": "^8.5", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", "typescript": "^6", - "tailwindcss": "^4.2" + "tailwindcss": "^4.3" } } diff --git a/benchmark/vinext-devup-ui/package.json b/benchmark/vinext-devup-ui/package.json index 7e624117..4362b5a1 100644 --- a/benchmark/vinext-devup-ui/package.json +++ b/benchmark/vinext-devup-ui/package.json @@ -11,7 +11,7 @@ "dependencies": { "react": "^19.2", "react-dom": "^19.2", - "vinext": "^0.0.34", + "vinext": "^0.0.49", "@devup-ui/react": "workspace:^" }, "devDependencies": { @@ -19,7 +19,7 @@ "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", - "@vitejs/plugin-rsc": "^0.5.21", + "@vitejs/plugin-rsc": "^0.5.26", "react-server-dom-webpack": "^19.2", "typescript": "^6", "vite": "^8.0" diff --git a/bindings/devup-ui-wasm/Cargo.toml b/bindings/devup-ui-wasm/Cargo.toml index 61f9bdc5..4d7c6df9 100644 --- a/bindings/devup-ui-wasm/Cargo.toml +++ b/bindings/devup-ui-wasm/Cargo.toml @@ -7,6 +7,8 @@ description = "Devup UI WASM bindings" license = "Apache-2.0" repository = "https://github.com/dev-five-git/devup-ui" documentation = "https://devup-ui.com" +keywords = ["css", "wasm", "react", "devup-ui"] +categories = ["development-tools", "wasm", "web-programming"] [lib] crate-type = ["cdylib"] @@ -15,7 +17,7 @@ crate-type = ["cdylib"] default = [] [dependencies] -wasm-bindgen = "0.2.117" +wasm-bindgen = "0.2.121" extractor = { path = "../../libs/extractor" } sheet = { path = "../../libs/sheet" } css = { path = "../../libs/css" } @@ -27,19 +29,19 @@ rustc-hash = "2" # code size when deploying. console_error_panic_hook = { version = "0.1.7", optional = true } bimap = { version = "0.6.3", features = ["serde"] } -js-sys = "0.3.94" +js-sys = "0.3.98" serde_json = "1.0.149" serde-wasm-bindgen = "0.6.5" getrandom = { version = "0.3", features = ["wasm_js"] } [dev-dependencies] -wasm-bindgen-test = "0.3.67" +wasm-bindgen-test = "0.3.71" serial_test = "3.4.0" insta = "1.47.2" rstest = "0.26.1" -[lints.rust] -unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] } +[lints] +workspace = true [package.metadata.wasm-pack.profile.release] wasm-opt = ["-Oz", "--enable-bulk-memory", "--enable-nontrapping-float-to-int"] diff --git a/bindings/devup-ui-wasm/src/lib.rs b/bindings/devup-ui-wasm/src/lib.rs index b8649d41..436a9719 100644 --- a/bindings/devup-ui-wasm/src/lib.rs +++ b/bindings/devup-ui-wasm/src/lib.rs @@ -1,16 +1,42 @@ -use css::class_map::{get_class_map, set_class_map}; -use css::file_map::{get_file_map, get_filename_by_file_num, set_file_map}; +use css::class_map::{set_class_map, with_class_map}; +use css::file_map::{set_file_map, with_file_map}; use extractor::extract_style::extract_style_value::ExtractStyleValue; use extractor::{ExtractOption, ImportAlias, extract, has_devup_ui}; use rustc_hash::FxHashSet; use sheet::StyleSheet; use std::collections::HashMap; +use std::fmt::Display; use std::sync::{LazyLock, Mutex}; use wasm_bindgen::prelude::*; static GLOBAL_STYLE_SHEET: LazyLock> = LazyLock::new(|| Mutex::new(StyleSheet::default())); +fn with_style_sheet(f: F) -> R +where + F: FnOnce(&StyleSheet) -> R, +{ + let guard = GLOBAL_STYLE_SHEET + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); + f(&guard) +} + +fn with_style_sheet_mut(f: F) -> R +where + F: FnOnce(&mut StyleSheet) -> R, +{ + let mut guard = GLOBAL_STYLE_SHEET + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); + f(&mut guard) +} + +#[cfg(not(tarpaulin_include))] +fn js_error(message: impl Display) -> JsValue { + js_sys::Error::new(&message.to_string()).into() +} + #[wasm_bindgen] pub struct Output { code: String, @@ -42,50 +68,58 @@ impl Output { css_file: Option, import_main_css: bool, ) -> Self { - let mut sheet = GLOBAL_STYLE_SHEET.lock().unwrap(); - let default_collected = sheet.rm_global_css(&filename, single_css); - let (collected, updated_base_style) = sheet.update_styles(&styles, &filename, single_css); - Self { - code, - map, - css_file, - updated_base_style: updated_base_style || default_collected, - css: { - if !collected && !default_collected { - None - } else { - Some(sheet.create_css( - if !single_css { Some(&filename) } else { None }, - import_main_css, - )) - } - }, - } + with_style_sheet_mut(|sheet| { + let default_collected = sheet.rm_global_css(&filename, single_css); + let (collected, updated_base_style) = + sheet.update_styles(&styles, &filename, single_css); + Self { + code, + map, + css_file, + updated_base_style: updated_base_style || default_collected, + css: { + if !collected && !default_collected { + None + } else { + Some(sheet.create_css( + if single_css { None } else { Some(&filename) }, + import_main_css, + )) + } + }, + } + }) } /// Get the code #[wasm_bindgen(getter, js_name = "code")] + #[must_use] pub fn code(&self) -> String { self.code.clone() } #[wasm_bindgen(getter, js_name = "cssFile")] + #[must_use] pub fn css_file(&self) -> Option { self.css_file.clone() } #[wasm_bindgen(getter, js_name = "map")] + #[must_use] pub fn map(&self) -> Option { self.map.clone() } #[wasm_bindgen(getter, js_name = "updatedBaseStyle")] + #[must_use] + #[allow(clippy::missing_const_for_fn)] pub fn updated_base_style(&self) -> bool { self.updated_base_style } /// Get the css #[wasm_bindgen(getter, js_name = "css")] + #[must_use] pub fn css(&self) -> Option { self.css.clone() } @@ -97,6 +131,7 @@ pub fn set_debug(debug: bool) { } #[wasm_bindgen(js_name = "isDebug")] +#[must_use] pub fn is_debug() -> bool { css::debug::is_debug() } @@ -147,78 +182,72 @@ pub fn set_prefix(prefix: Option) { } #[wasm_bindgen(js_name = "getPrefix")] +#[must_use] pub fn get_prefix() -> Option { css::get_prefix() } -/// Internal function to import a StyleSheet (testable without JsValue) +/// Internal function to import a `StyleSheet` (testable without `JsValue`) pub fn import_sheet_internal(sheet: StyleSheet) { - *GLOBAL_STYLE_SHEET.lock().unwrap() = sheet; + with_style_sheet_mut(|global_sheet| *global_sheet = sheet); } #[wasm_bindgen(js_name = "importSheet")] #[cfg(not(tarpaulin_include))] pub fn import_sheet(sheet_object: JsValue) -> Result<(), JsValue> { - let sheet: StyleSheet = serde_wasm_bindgen::from_value(sheet_object) - .map_err(|e| JsValue::from_str(&e.to_string()))?; + let sheet: StyleSheet = serde_wasm_bindgen::from_value(sheet_object).map_err(js_error)?; import_sheet_internal(sheet); Ok(()) } -/// Internal function to export StyleSheet as JSON string (testable without JsValue) +/// Internal function to export `StyleSheet` as JSON string (testable without `JsValue`) pub fn export_sheet_internal() -> Result { - serde_json::to_string(&*GLOBAL_STYLE_SHEET.lock().unwrap()).map_err(|e| e.to_string()) + with_style_sheet(serde_json::to_string).map_err(|e| e.to_string()) } #[wasm_bindgen(js_name = "exportSheet")] #[cfg(not(tarpaulin_include))] pub fn export_sheet() -> Result { - export_sheet_internal().map_err(|e| JsValue::from_str(&e)) + export_sheet_internal().map_err(js_error) } -/// Internal function to export class map as JSON string (testable without JsValue) +/// Internal function to export class map as JSON string (testable without `JsValue`) pub fn export_class_map_internal() -> Result { - serde_json::to_string(&get_class_map()).map_err(|e| e.to_string()) + with_class_map(serde_json::to_string).map_err(|e| e.to_string()) } #[wasm_bindgen(js_name = "importClassMap")] #[cfg(not(tarpaulin_include))] pub fn import_class_map(sheet_object: JsValue) -> Result<(), JsValue> { - set_class_map( - serde_wasm_bindgen::from_value(sheet_object) - .map_err(|e| JsValue::from_str(&e.to_string()))?, - ); + set_class_map(serde_wasm_bindgen::from_value(sheet_object).map_err(js_error)?); Ok(()) } #[wasm_bindgen(js_name = "exportClassMap")] #[cfg(not(tarpaulin_include))] pub fn export_class_map() -> Result { - export_class_map_internal().map_err(|e| JsValue::from_str(&e)) + export_class_map_internal().map_err(js_error) } -/// Internal function to export file map as JSON string (testable without JsValue) +/// Internal function to export file map as JSON string (testable without `JsValue`) pub fn export_file_map_internal() -> Result { - serde_json::to_string(&get_file_map()).map_err(|e| e.to_string()) + with_file_map(serde_json::to_string).map_err(|e| e.to_string()) } #[wasm_bindgen(js_name = "importFileMap")] #[cfg(not(tarpaulin_include))] pub fn import_file_map(sheet_object: JsValue) -> Result<(), JsValue> { - set_file_map( - serde_wasm_bindgen::from_value(sheet_object) - .map_err(|e| JsValue::from_str(&e.to_string()))?, - ); + set_file_map(serde_wasm_bindgen::from_value(sheet_object).map_err(js_error)?); Ok(()) } #[wasm_bindgen(js_name = "exportFileMap")] #[cfg(not(tarpaulin_include))] pub fn export_file_map() -> Result { - export_file_map_internal().map_err(|e| JsValue::from_str(&e)) + export_file_map_internal().map_err(js_error) } -/// Internal function to extract code (testable without JsValue) +/// Internal function to extract code (testable without `JsValue`) #[allow(clippy::too_many_arguments)] pub fn code_extract_internal( filename: &str, @@ -270,7 +299,7 @@ pub fn code_extract( // Deserialize import_aliases from JsValue // Format: { "package": "namedExport" } or { "package": null } for named exports let aliases: HashMap> = - serde_wasm_bindgen::from_value(import_aliases).unwrap_or_default(); + serde_wasm_bindgen::from_value(import_aliases).map_err(js_error)?; // Convert to ImportAlias enum let import_aliases: HashMap = aliases @@ -294,19 +323,19 @@ pub fn code_extract( import_main_css_in_css, import_aliases, ) - .map_err(|e| JsValue::from_str(&e)) + .map_err(js_error) } -/// Internal function to register theme (testable without JsValue) +/// Internal function to register theme (testable without `JsValue`) pub fn register_theme_internal(theme: sheet::theme::Theme) { - GLOBAL_STYLE_SHEET.lock().unwrap().set_theme(theme); + with_style_sheet_mut(|sheet| sheet.set_theme(theme)); } #[wasm_bindgen(js_name = "registerTheme")] #[cfg(not(tarpaulin_include))] pub fn register_theme(theme_object: JsValue) -> Result<(), JsValue> { - let theme: sheet::theme::Theme = serde_wasm_bindgen::from_value(theme_object) - .map_err(|e| JsValue::from_str(e.to_string().as_str()))?; + let theme: sheet::theme::Theme = + serde_wasm_bindgen::from_value(theme_object).map_err(js_error)?; register_theme_internal(theme); Ok(()) } @@ -314,18 +343,24 @@ pub fn register_theme(theme_object: JsValue) -> Result<(), JsValue> { #[wasm_bindgen(js_name = "getDefaultTheme")] #[cfg(not(tarpaulin_include))] pub fn get_default_theme() -> Result, JsValue> { - let sheet = GLOBAL_STYLE_SHEET.lock().unwrap(); - Ok(sheet.theme.get_default_theme()) + Ok(with_style_sheet(|sheet| sheet.theme.get_default_theme())) } #[wasm_bindgen(js_name = "getCss")] #[cfg(not(tarpaulin_include))] pub fn get_css(file_num: Option, import_main_css: bool) -> Result { - let sheet = GLOBAL_STYLE_SHEET.lock().unwrap(); - Ok(sheet.create_css( - file_num.map(get_filename_by_file_num).as_deref(), - import_main_css, - )) + Ok(with_style_sheet(|sheet| { + if let Some(file_num) = file_num { + with_file_map(|map| { + sheet.create_css( + map.get_by_right(&file_num).map(String::as_str), + import_main_css, + ) + }) + } else { + sheet.create_css(None, import_main_css) + } + })) } #[wasm_bindgen(js_name = "getThemeInterface")] @@ -338,24 +373,27 @@ pub fn get_theme_interface( shadows_interface_name: &str, theme_interface_name: &str, ) -> String { - let sheet = GLOBAL_STYLE_SHEET.lock().unwrap(); - sheet.create_interface( - package_name, - color_interface_name, - typography_interface_name, - length_interface_name, - shadows_interface_name, - theme_interface_name, - ) + with_style_sheet(|sheet| { + sheet.create_interface( + package_name, + color_interface_name, + typography_interface_name, + length_interface_name, + shadows_interface_name, + theme_interface_name, + ) + }) } #[wasm_bindgen(js_name = "hasDevupUI")] #[cfg(not(tarpaulin_include))] +#[must_use] pub fn has_devup_ui_wasm(filename: &str, code: &str, package: &str) -> bool { has_devup_ui(filename, code, package) } #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use super::*; use insta::assert_debug_snapshot; @@ -363,6 +401,12 @@ mod tests { use serial_test::serial; use sheet::theme::{ColorTheme, Theme, Typography}; + fn make_named_color_theme(name: &str, value: &str) -> ColorTheme { + let mut ct = ColorTheme::default(); + ct.add_color(name, value); + ct + } + #[test] #[serial] fn test_code_extract() { @@ -464,9 +508,9 @@ mod tests { { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography":{"noticeButton":{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":500,"fontSize":"16px","lineHeight":1.2,"letterSpacing":"-0.02em"},"button":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":500,"fontSize":"16px","lineHeight":1.2,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":500,"fontSize":"18px","lineHeight":1.2,"letterSpacing":"-0.02em"}],"title":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"16px","lineHeight":1.2,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"20px","lineHeight":1.2,"letterSpacing":"-0.01em"}],"text":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"15px","lineHeight":1.2,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"16px","lineHeight":1.2,"letterSpacing":"-0.01em"}],"caption":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"12px","lineHeight":1.2,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"14px","lineHeight":1.2,"letterSpacing":"-0.01em"}],"noticeTitle":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"15px","lineHeight":1.2,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"18px","lineHeight":1.2,"letterSpacing":"-0.02em"}],"noticeText":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"14px","lineHeight":1.5,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"16px","lineHeight":1.5,"letterSpacing":"-0.02em"}],"h3":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"18px","lineHeight":1.2,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"24px","lineHeight":1.2,"letterSpacing":"-0.02em"}],"h1":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"28px","lineHeight":1.2,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"36px","lineHeight":1.2,"letterSpacing":"-0.02em"}],"body":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"16px","lineHeight":1.2,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"20px","lineHeight":1.2,"letterSpacing":"-0.02em"}],"noticeBold":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"14px","lineHeight":1.2,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"18px","lineHeight":1.2,"letterSpacing":"-0.01em"}],"notice":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"13px","lineHeight":1.2,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":400,"fontSize":"18px","lineHeight":1.2,"letterSpacing":"-0.02em"}],"h2":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"20px","lineHeight":1.2,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"28px","lineHeight":1.2,"letterSpacing":"-0.01em"}],"result":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"24px","lineHeight":1.2,"letterSpacing":"-0.02em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":700,"fontSize":"32px","lineHeight":1.2,"letterSpacing":"-0.02em"}],"resultPoint":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":800,"fontSize":"24px","lineHeight":1.4,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":800,"fontSize":"28px","lineHeight":1.4,"letterSpacing":"-0.01em"}],"resultText":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"18px","lineHeight":1.4,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":600,"fontSize":"22px","lineHeight":1.4,"letterSpacing":"-0.01em"}],"resultList":[{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":500,"fontSize":"16px","lineHeight":1.4,"letterSpacing":"-0.01em"},null,null,null,{"fontFamily":"Pretendard","fontStyle":"normal","fontWeight":500,"fontSize":"20px","lineHeight":1.4,"letterSpacing":"-0.01em"}]} - }"##, + }"#, ) .unwrap(); assert_debug_snapshot!(theme); @@ -530,44 +574,37 @@ mod tests { ); assert_eq!(theme.to_css(), ""); - // Helper to create a ColorTheme with a single color - fn make_color_theme(name: &str, value: &str) -> ColorTheme { - let mut ct = ColorTheme::default(); - ct.add_color(name, value); - ct - } - let mut theme = Theme::default(); - theme.add_color_theme("default", make_color_theme("primary", "#000")); - theme.add_color_theme("dark", make_color_theme("primary", "#000")); + theme.add_color_theme("default", make_named_color_theme("primary", "#000")); + theme.add_color_theme("dark", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); - theme.add_color_theme("dark", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); + theme.add_color_theme("dark", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("a", make_color_theme("primary", "#000")); - theme.add_color_theme("b", make_color_theme("primary", "#000")); + theme.add_color_theme("a", make_named_color_theme("primary", "#000")); + theme.add_color_theme("b", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); - theme.add_color_theme("b", make_color_theme("primary", "#000")); - theme.add_color_theme("a", make_color_theme("primary", "#000")); - theme.add_color_theme("c", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); + theme.add_color_theme("b", make_named_color_theme("primary", "#000")); + theme.add_color_theme("a", make_named_color_theme("primary", "#000")); + theme.add_color_theme("c", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); - theme.add_color_theme("b", make_color_theme("primary", "#001")); - theme.add_color_theme("a", make_color_theme("primary", "#002")); - theme.add_color_theme("c", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); + theme.add_color_theme("b", make_named_color_theme("primary", "#001")); + theme.add_color_theme("a", make_named_color_theme("primary", "#002")); + theme.add_color_theme("c", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); } @@ -899,8 +936,8 @@ mod tests { // The result should be valid JSON let json_str = result.unwrap(); - assert!(json_str.starts_with("{")); - assert!(json_str.ends_with("}")); + assert!(json_str.starts_with('{')); + assert!(json_str.ends_with('}')); } #[test] @@ -930,7 +967,7 @@ mod tests { // The result should be valid JSON (empty map) let json_str = result.unwrap(); - assert!(json_str.starts_with("{") || json_str.starts_with("[]")); + assert!(json_str.starts_with('{') || json_str.starts_with("[]")); } #[test] @@ -998,8 +1035,7 @@ mod tests { register_theme_internal(theme); // Verify the theme was registered - let sheet = GLOBAL_STYLE_SHEET.lock().unwrap(); - let default_theme = sheet.theme.get_default_theme(); + let default_theme = GLOBAL_STYLE_SHEET.lock().unwrap().theme.get_default_theme(); assert_eq!(default_theme, Some("default".to_string())); } } diff --git a/bindings/devup-ui-wasm/tests/wasm.rs b/bindings/devup-ui-wasm/tests/wasm.rs index 2b401d87..677639f4 100644 --- a/bindings/devup-ui-wasm/tests/wasm.rs +++ b/bindings/devup-ui-wasm/tests/wasm.rs @@ -1,3 +1,5 @@ +#![allow(clippy::expect_used, clippy::unwrap_used)] + use js_sys::{Object, Reflect}; use sheet::theme::Typography; use wasm_bindgen::JsValue; diff --git a/bun.lock b/bun.lock index 133724f4..9acaa731 100644 --- a/bun.lock +++ b/bun.lock @@ -6,16 +6,16 @@ "name": "devup-ui", "devDependencies": { "@devup-ui/eslint-plugin": "workspace:^", - "@playwright/test": "^1.58.2", + "@playwright/test": "^1.59.1", "@types/bun": "latest", - "@types/node": "^25.5", + "@types/node": "^25.6", "bun-test-env-dom": "^1.0.3", "eslint": "^9", "eslint-plugin-devup": "^2.0", "eslint-plugin-eslint-plugin": "^7.3", "eslint-plugin-jsonc": "^3.1", "eslint-plugin-mdx": "^3.7", - "globals": "^17.4", + "globals": "^17.6", "husky": "^9.1", }, }, @@ -78,8 +78,8 @@ }, "devDependencies": { "@devup-ui/rsbuild-plugin": "workspace:^", - "@rsbuild/core": "^1.7", - "@rsbuild/plugin-react": "^1.4", + "@rsbuild/core": "^2.0", + "@rsbuild/plugin-react": "^2.0", }, }, "apps/vite": { @@ -115,14 +115,14 @@ "@vitejs/plugin-react": "^6.0.1", "typescript": "^6", "vite": "^8.0", - "vite-plugin-dts": "^4.5", + "vite-plugin-dts": "^5.0", }, }, "benchmark/next-chakra-ui": { "name": "next-chakra-ui-benchmark", "version": "0.1.0", "dependencies": { - "@chakra-ui/react": "^3.34", + "@chakra-ui/react": "^3.35", "@emotion/react": "^11.14", "next": "^16.2", "next-themes": "^0.4", @@ -211,7 +211,7 @@ "dependencies": { "@emotion/react": "^11.14", "@emotion/styled": "^11.14", - "@mui/material": "7.3", + "@mui/material": "9.0", "next": "^16.2", "react": "^19.2", "react-dom": "^19.2", @@ -233,7 +233,7 @@ "react-dom": "^19.2", }, "devDependencies": { - "@pandacss/dev": "^1.9", + "@pandacss/dev": "^1.11", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", @@ -259,12 +259,12 @@ "@stylexjs/babel-plugin": "^0.18", "@stylexjs/eslint-plugin": "^0.18", "@stylexjs/nextjs-plugin": "^0.11", - "@types/node": "25.5", + "@types/node": "25.6", "@types/react": "19.2", "@types/react-dom": "19.2", "@types/react-test-renderer": "^19.1", - "eslint": "10.0", - "eslint-config-next": "16.1", + "eslint": "10.3", + "eslint-config-next": "16.2", "prettier": "^3.8", "react-test-renderer": "^19.2", "rimraf": "^6.1", @@ -282,12 +282,12 @@ "react-icons": "^5.6", }, "devDependencies": { - "@tailwindcss/postcss": "^4.2", + "@tailwindcss/postcss": "^4.3", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", "postcss": "^8.5", - "tailwindcss": "^4.2", + "tailwindcss": "^4.3", "typescript": "^6", }, }, @@ -301,12 +301,12 @@ "react-icons": "^5.6", }, "devDependencies": { - "@tailwindcss/postcss": "^4.2", + "@tailwindcss/postcss": "^4.3", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", "postcss": "^8.5", - "tailwindcss": "^4.2", + "tailwindcss": "^4.3", "typescript": "^6", }, }, @@ -322,12 +322,12 @@ }, "devDependencies": { "@devup-ui/next-plugin": "workspace:^", - "@tailwindcss/postcss": "^4.2", + "@tailwindcss/postcss": "^4.3", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", "postcss": "^8.5", - "tailwindcss": "^4.2", + "tailwindcss": "^4.3", "typescript": "^6", }, }, @@ -374,14 +374,14 @@ "@devup-ui/react": "workspace:^", "react": "^19.2", "react-dom": "^19.2", - "vinext": "^0.0.34", + "vinext": "^0.0.49", }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", - "@vitejs/plugin-rsc": "^0.5.21", + "@vitejs/plugin-rsc": "^0.5.26", "react-server-dom-webpack": "^19.2", "typescript": "^6", "vite": "^8.0", @@ -400,7 +400,7 @@ }, "devDependencies": { "@types/bun": "latest", - "typescript": "^6.0.2", + "typescript": "^6.0.3", }, "peerDependencies": { "@devup-ui/wasm": "*", @@ -412,7 +412,7 @@ "dependencies": { "@devup-ui/react": "workspace:^", "clsx": "^2.1", - "react": "^19.2.4", + "react": "^19.2.6", }, "devDependencies": { "@devup-ui/vite-plugin": "workspace:^", @@ -425,7 +425,7 @@ "storybook": "^10.3", "typescript": "^6.0", "vite": "^8.0", - "vite-plugin-dts": "^4.5", + "vite-plugin-dts": "^5.0", }, "peerDependencies": { "@devup-ui/react": "workspace:^", @@ -436,11 +436,11 @@ "name": "@devup-ui/eslint-plugin", "version": "1.0.14", "dependencies": { - "@typescript-eslint/utils": "^8.57", - "typescript-eslint": "^8.57", + "@typescript-eslint/utils": "^8.59", + "typescript-eslint": "^8.59", }, "devDependencies": { - "@typescript-eslint/rule-tester": "^8.57", + "@typescript-eslint/rule-tester": "^8.59", "typescript": "^6.0", }, "peerDependencies": { @@ -450,7 +450,7 @@ }, "packages/next-plugin": { "name": "@devup-ui/next-plugin", - "version": "1.0.74", + "version": "1.0.75", "dependencies": { "@devup-ui/plugin-utils": "workspace:^", "@devup-ui/wasm": "workspace:^", @@ -468,9 +468,9 @@ }, "packages/plugin-utils": { "name": "@devup-ui/plugin-utils", - "version": "1.0.4", + "version": "1.0.5", "devDependencies": { - "typescript": "^6.0.2", + "typescript": "^6.0.3", }, }, "packages/react": { @@ -481,12 +481,12 @@ "react": "^19.2", }, "devDependencies": { - "@types/node": "^25.5", + "@types/node": "^25.6", "@types/react": "^19.2", "rollup-plugin-preserve-directives": "^0.4", "typescript": "^6.0", "vite": "^8.0", - "vite-plugin-dts": "^4.5", + "vite-plugin-dts": "^5.0", }, "peerDependencies": { "csstype-extra": "*", @@ -514,7 +514,7 @@ "@devup-ui/wasm": "workspace:^", }, "devDependencies": { - "@rsbuild/core": "^1.7", + "@rsbuild/core": "^2.0", "typescript": "^6.0", }, "peerDependencies": { @@ -530,7 +530,7 @@ "@devup-ui/wasm": "workspace:^", }, "devDependencies": { - "typescript": "^6.0.2", + "typescript": "^6.0.3", }, "peerDependencies": { "@devup-ui/wasm": "*", @@ -558,11 +558,11 @@ "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], - "@ark-ui/react": ["@ark-ui/react@5.35.0", "", { "dependencies": { "@internationalized/date": "3.12.0", "@zag-js/accordion": "1.38.2", "@zag-js/anatomy": "1.38.2", "@zag-js/angle-slider": "1.38.2", "@zag-js/async-list": "1.38.2", "@zag-js/auto-resize": "1.38.2", "@zag-js/avatar": "1.38.2", "@zag-js/carousel": "1.38.2", "@zag-js/cascade-select": "1.38.2", "@zag-js/checkbox": "1.38.2", "@zag-js/clipboard": "1.38.2", "@zag-js/collapsible": "1.38.2", "@zag-js/collection": "1.38.2", "@zag-js/color-picker": "1.38.2", "@zag-js/color-utils": "1.38.2", "@zag-js/combobox": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/date-picker": "1.38.2", "@zag-js/date-utils": "1.38.2", "@zag-js/dialog": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/drawer": "1.38.2", "@zag-js/editable": "1.38.2", "@zag-js/file-upload": "1.38.2", "@zag-js/file-utils": "1.38.2", "@zag-js/floating-panel": "1.38.2", "@zag-js/focus-trap": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/highlight-word": "1.38.2", "@zag-js/hover-card": "1.38.2", "@zag-js/i18n-utils": "1.38.2", "@zag-js/image-cropper": "1.38.2", "@zag-js/json-tree-utils": "1.38.2", "@zag-js/listbox": "1.38.2", "@zag-js/marquee": "1.38.2", "@zag-js/menu": "1.38.2", "@zag-js/navigation-menu": "1.38.2", "@zag-js/number-input": "1.38.2", "@zag-js/pagination": "1.38.2", "@zag-js/password-input": "1.38.2", "@zag-js/pin-input": "1.38.2", "@zag-js/popover": "1.38.2", "@zag-js/presence": "1.38.2", "@zag-js/progress": "1.38.2", "@zag-js/qr-code": "1.38.2", "@zag-js/radio-group": "1.38.2", "@zag-js/rating-group": "1.38.2", "@zag-js/react": "1.38.2", "@zag-js/scroll-area": "1.38.2", "@zag-js/select": "1.38.2", "@zag-js/signature-pad": "1.38.2", "@zag-js/slider": "1.38.2", "@zag-js/splitter": "1.38.2", "@zag-js/steps": "1.38.2", "@zag-js/switch": "1.38.2", "@zag-js/tabs": "1.38.2", "@zag-js/tags-input": "1.38.2", "@zag-js/timer": "1.38.2", "@zag-js/toast": "1.38.2", "@zag-js/toggle": "1.38.2", "@zag-js/toggle-group": "1.38.2", "@zag-js/tooltip": "1.38.2", "@zag-js/tour": "1.38.2", "@zag-js/tree-view": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-W1HcL5obYT2QftSiOP8rChJezoDsZNU+nH6pdib1+zScMm/oYAkxanHQfCCfnOhAGNpbhfUAmTm118+ggtgboQ=="], + "@ark-ui/react": ["@ark-ui/react@5.36.2", "", { "dependencies": { "@internationalized/date": "3.12.0", "@zag-js/accordion": "1.40.0", "@zag-js/anatomy": "1.40.0", "@zag-js/angle-slider": "1.40.0", "@zag-js/async-list": "1.40.0", "@zag-js/auto-resize": "1.40.0", "@zag-js/avatar": "1.40.0", "@zag-js/carousel": "1.40.0", "@zag-js/cascade-select": "1.40.0", "@zag-js/checkbox": "1.40.0", "@zag-js/clipboard": "1.40.0", "@zag-js/collapsible": "1.40.0", "@zag-js/collection": "1.40.0", "@zag-js/color-picker": "1.40.0", "@zag-js/color-utils": "1.40.0", "@zag-js/combobox": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/date-input": "1.40.0", "@zag-js/date-picker": "1.40.0", "@zag-js/date-utils": "1.40.0", "@zag-js/dialog": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/drawer": "1.40.0", "@zag-js/editable": "1.40.0", "@zag-js/file-upload": "1.40.0", "@zag-js/file-utils": "1.40.0", "@zag-js/floating-panel": "1.40.0", "@zag-js/focus-trap": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/highlight-word": "1.40.0", "@zag-js/hover-card": "1.40.0", "@zag-js/i18n-utils": "1.40.0", "@zag-js/image-cropper": "1.40.0", "@zag-js/json-tree-utils": "1.40.0", "@zag-js/listbox": "1.40.0", "@zag-js/marquee": "1.40.0", "@zag-js/menu": "1.40.0", "@zag-js/navigation-menu": "1.40.0", "@zag-js/number-input": "1.40.0", "@zag-js/pagination": "1.40.0", "@zag-js/password-input": "1.40.0", "@zag-js/pin-input": "1.40.0", "@zag-js/popover": "1.40.0", "@zag-js/presence": "1.40.0", "@zag-js/progress": "1.40.0", "@zag-js/qr-code": "1.40.0", "@zag-js/radio-group": "1.40.0", "@zag-js/rating-group": "1.40.0", "@zag-js/react": "1.40.0", "@zag-js/scroll-area": "1.40.0", "@zag-js/select": "1.40.0", "@zag-js/signature-pad": "1.40.0", "@zag-js/slider": "1.40.0", "@zag-js/splitter": "1.40.0", "@zag-js/steps": "1.40.0", "@zag-js/switch": "1.40.0", "@zag-js/tabs": "1.40.0", "@zag-js/tags-input": "1.40.0", "@zag-js/timer": "1.40.0", "@zag-js/toast": "1.40.0", "@zag-js/toggle": "1.40.0", "@zag-js/toggle-group": "1.40.0", "@zag-js/tooltip": "1.40.0", "@zag-js/tour": "1.40.0", "@zag-js/tree-view": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-2lrZ7+Qtlj7hGx4qU2jZkE892JNrkULg/fUxqUuqmQfv9UGAXhdcw1Hr3N+zBgMDVz3aqip0Qa4v0Mox09MMvg=="], "@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="], - "@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="], + "@babel/compat-data": ["@babel/compat-data@7.29.3", "", {}, "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg=="], "@babel/core": ["@babel/core@7.29.0", "", { "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-module-transforms": "^7.28.6", "@babel/helpers": "^7.28.6", "@babel/parser": "^7.29.0", "@babel/template": "^7.28.6", "@babel/traverse": "^7.29.0", "@babel/types": "^7.29.0", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA=="], @@ -572,7 +572,7 @@ "@babel/helper-compilation-targets": ["@babel/helper-compilation-targets@7.28.6", "", { "dependencies": { "@babel/compat-data": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" } }, "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA=="], - "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.28.6", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.28.6", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow=="], + "@babel/helper-create-class-features-plugin": ["@babel/helper-create-class-features-plugin@7.29.3", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "@babel/helper-member-expression-to-functions": "^7.28.5", "@babel/helper-optimise-call-expression": "^7.27.1", "@babel/helper-replace-supers": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/traverse": "^7.29.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-RpLYy2sb51oNLjuu1iD3bwBqCBWUzjO0ocp+iaCP/lJtb2CPLcnC2Fftw+4sAzaMELGeWTgExSKADbdo0GFVzA=="], "@babel/helper-create-regexp-features-plugin": ["@babel/helper-create-regexp-features-plugin@7.28.5", "", { "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.3", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw=="], @@ -606,7 +606,7 @@ "@babel/helpers": ["@babel/helpers@7.29.2", "", { "dependencies": { "@babel/template": "^7.28.6", "@babel/types": "^7.29.0" } }, "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw=="], - "@babel/parser": ["@babel/parser@7.29.2", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA=="], + "@babel/parser": ["@babel/parser@7.29.3", "", { "dependencies": { "@babel/types": "^7.29.0" }, "bin": "./bin/babel-parser.js" }, "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA=="], "@babel/plugin-bugfix-firefox-class-in-computed-class-key": ["@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q=="], @@ -614,6 +614,8 @@ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ["@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA=="], + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": ["@babel/plugin-bugfix-safari-rest-destructuring-rhs-array@7.29.3", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-SRS46DFR4HqzUzCVgi90/xMoL+zeBDBvWdKYXSEzh79kXswNFEglUpMKxR04//dPqwYXWUBJ3mpUd933ru9Kmg=="], + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ["@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", "@babel/plugin-transform-optional-chaining": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.13.0" } }, "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw=="], "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": ["@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.28.6", "@babel/traverse": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g=="], @@ -682,7 +684,7 @@ "@babel/plugin-transform-modules-commonjs": ["@babel/plugin-transform-modules-commonjs@7.28.6", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA=="], - "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.29.0", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ=="], + "@babel/plugin-transform-modules-systemjs": ["@babel/plugin-transform-modules-systemjs@7.29.4", "", { "dependencies": { "@babel/helper-module-transforms": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-identifier": "^7.28.5", "@babel/traverse": "^7.29.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-N7QmZ0xRZfjHOfZeQLJjwgX2zS9pdGHSVl/cjSGlo4dXMqvurfxXDMKY4RqEKzPozV78VMcd0lxyG13mlbKc4w=="], "@babel/plugin-transform-modules-umd": ["@babel/plugin-transform-modules-umd@7.27.1", "", { "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w=="], @@ -744,7 +746,7 @@ "@babel/plugin-transform-unicode-sets-regex": ["@babel/plugin-transform-unicode-sets-regex@7.28.6", "", { "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.28.5", "@babel/helper-plugin-utils": "^7.28.6" }, "peerDependencies": { "@babel/core": "^7.0.0" } }, "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q=="], - "@babel/preset-env": ["@babel/preset-env@7.29.2", "", { "dependencies": { "@babel/compat-data": "^7.29.0", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.28.6", "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", "@babel/plugin-transform-class-properties": "^7.28.6", "@babel/plugin-transform-class-static-block": "^7.28.6", "@babel/plugin-transform-classes": "^7.28.6", "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", "@babel/plugin-transform-modules-systemjs": "^7.29.0", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.28.6", "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", "babel-plugin-polyfill-regenerator": "^0.6.6", "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw=="], + "@babel/preset-env": ["@babel/preset-env@7.29.5", "", { "dependencies": { "@babel/compat-data": "^7.29.3", "@babel/helper-compilation-targets": "^7.28.6", "@babel/helper-plugin-utils": "^7.28.6", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.3", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-import-assertions": "^7.28.6", "@babel/plugin-syntax-import-attributes": "^7.28.6", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.27.1", "@babel/plugin-transform-async-generator-functions": "^7.29.0", "@babel/plugin-transform-async-to-generator": "^7.28.6", "@babel/plugin-transform-block-scoped-functions": "^7.27.1", "@babel/plugin-transform-block-scoping": "^7.28.6", "@babel/plugin-transform-class-properties": "^7.28.6", "@babel/plugin-transform-class-static-block": "^7.28.6", "@babel/plugin-transform-classes": "^7.28.6", "@babel/plugin-transform-computed-properties": "^7.28.6", "@babel/plugin-transform-destructuring": "^7.28.5", "@babel/plugin-transform-dotall-regex": "^7.28.6", "@babel/plugin-transform-duplicate-keys": "^7.27.1", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-dynamic-import": "^7.27.1", "@babel/plugin-transform-explicit-resource-management": "^7.28.6", "@babel/plugin-transform-exponentiation-operator": "^7.28.6", "@babel/plugin-transform-export-namespace-from": "^7.27.1", "@babel/plugin-transform-for-of": "^7.27.1", "@babel/plugin-transform-function-name": "^7.27.1", "@babel/plugin-transform-json-strings": "^7.28.6", "@babel/plugin-transform-literals": "^7.27.1", "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", "@babel/plugin-transform-member-expression-literals": "^7.27.1", "@babel/plugin-transform-modules-amd": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.28.6", "@babel/plugin-transform-modules-systemjs": "^7.29.4", "@babel/plugin-transform-modules-umd": "^7.27.1", "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", "@babel/plugin-transform-new-target": "^7.27.1", "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", "@babel/plugin-transform-numeric-separator": "^7.28.6", "@babel/plugin-transform-object-rest-spread": "^7.28.6", "@babel/plugin-transform-object-super": "^7.27.1", "@babel/plugin-transform-optional-catch-binding": "^7.28.6", "@babel/plugin-transform-optional-chaining": "^7.28.6", "@babel/plugin-transform-parameters": "^7.27.7", "@babel/plugin-transform-private-methods": "^7.28.6", "@babel/plugin-transform-private-property-in-object": "^7.28.6", "@babel/plugin-transform-property-literals": "^7.27.1", "@babel/plugin-transform-regenerator": "^7.29.0", "@babel/plugin-transform-regexp-modifiers": "^7.28.6", "@babel/plugin-transform-reserved-words": "^7.27.1", "@babel/plugin-transform-shorthand-properties": "^7.27.1", "@babel/plugin-transform-spread": "^7.28.6", "@babel/plugin-transform-sticky-regex": "^7.27.1", "@babel/plugin-transform-template-literals": "^7.27.1", "@babel/plugin-transform-typeof-symbol": "^7.27.1", "@babel/plugin-transform-unicode-escapes": "^7.27.1", "@babel/plugin-transform-unicode-property-regex": "^7.28.6", "@babel/plugin-transform-unicode-regex": "^7.27.1", "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", "babel-plugin-polyfill-regenerator": "^0.6.6", "core-js-compat": "^3.48.0", "semver": "^6.3.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-/69t2aEzGKHD76DyLbHysF/QH2LJOB8iFnYO37unDTKBTubzcMRv0f3H5EiN1Q6ajOd/eB7dAInF0qdFVS06kA=="], "@babel/preset-modules": ["@babel/preset-modules@0.1.6-no-external-plugins", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA=="], @@ -760,7 +762,7 @@ "@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="], - "@chakra-ui/react": ["@chakra-ui/react@3.34.0", "", { "dependencies": { "@ark-ui/react": "^5.34.1", "@emotion/is-prop-valid": "^1.4.0", "@emotion/serialize": "^1.3.3", "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", "@emotion/utils": "^1.4.2", "@pandacss/is-valid-prop": "^1.4.2", "csstype": "^3.2.3" }, "peerDependencies": { "@emotion/react": ">=11", "react": ">=18", "react-dom": ">=18" } }, "sha512-VLhpVwv5IVxhwajO10KnS1VQT4hDqQMQP/A796Ya+uVu8AdoSX+5HHyTLTkYIeXIDMe0xLqJfov04OBKbBchJA=="], + "@chakra-ui/react": ["@chakra-ui/react@3.35.0", "", { "dependencies": { "@ark-ui/react": "5.36.2", "@emotion/is-prop-valid": "^1.4.0", "@emotion/serialize": "^1.3.3", "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", "@emotion/utils": "^1.4.2", "@pandacss/is-valid-prop": "^1.4.2", "csstype": "^3.2.3" }, "peerDependencies": { "@emotion/react": ">=11", "react": ">=18", "react-dom": ">=18" } }, "sha512-qzfRNLwxKjxx2IXjBj6uz1nYI+pKsq6uwHxO619+hx1OzNNuwLIjEHJxnDfBzoynO7sPCBlubMwFWb1e1PrXzw=="], "@clack/core": ["@clack/core@0.5.0", "", { "dependencies": { "picocolors": "^1.0.0", "sisteransi": "^1.0.5" } }, "sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow=="], @@ -770,9 +772,9 @@ "@csstools/css-tokenizer": ["@csstools/css-tokenizer@3.0.4", "", {}, "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw=="], - "@csstools/postcss-cascade-layers": ["@csstools/postcss-cascade-layers@6.0.0", "", { "dependencies": { "@csstools/selector-specificity": "^6.0.0", "postcss-selector-parser": "^7.1.1" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-WhsECqmrEZQGqaPlBA7JkmF/CJ2/+wetL4fkL9sOPccKd32PQ1qToFM6gqSI5rkpmYqubvbxjEJhyMTHYK0vZQ=="], + "@csstools/postcss-cascade-layers": ["@csstools/postcss-cascade-layers@5.0.2", "", { "dependencies": { "@csstools/selector-specificity": "^5.0.0", "postcss-selector-parser": "^7.0.0" }, "peerDependencies": { "postcss": "^8.4" } }, "sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg=="], - "@csstools/selector-specificity": ["@csstools/selector-specificity@6.0.0", "", { "peerDependencies": { "postcss-selector-parser": "^7.1.1" } }, "sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA=="], + "@csstools/selector-specificity": ["@csstools/selector-specificity@5.0.0", "", { "peerDependencies": { "postcss-selector-parser": "^7.0.0" } }, "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw=="], "@devup-ui/bun-plugin": ["@devup-ui/bun-plugin@workspace:packages/bun-plugin"], @@ -798,11 +800,11 @@ "@dual-bundle/import-meta-resolve": ["@dual-bundle/import-meta-resolve@4.2.1", "", {}, "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg=="], - "@emnapi/core": ["@emnapi/core@1.9.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" } }, "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA=="], + "@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" } }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@emnapi/runtime": ["@emnapi/runtime@1.9.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="], + "@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="], + "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], "@emotion/babel-plugin": ["@emotion/babel-plugin@11.13.5", "", { "dependencies": { "@babel/helper-module-imports": "^7.16.7", "@babel/runtime": "^7.18.3", "@emotion/hash": "^0.9.2", "@emotion/memoize": "^0.9.0", "@emotion/serialize": "^1.3.3", "babel-plugin-macros": "^3.1.0", "convert-source-map": "^1.5.0", "escape-string-regexp": "^4.0.0", "find-root": "^1.1.0", "source-map": "^0.5.7", "stylis": "4.2.0" } }, "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ=="], @@ -830,57 +832,57 @@ "@emotion/weak-memoize": ["@emotion/weak-memoize@0.4.0", "", {}, "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg=="], - "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.4", "", { "os": "aix", "cpu": "ppc64" }, "sha512-cQPwL2mp2nSmHHJlCyoXgHGhbEPMrEEU5xhkcy3Hs/O7nGZqEpZ2sUtLaL9MORLtDfRvVl2/3PAuEkYZH0Ty8Q=="], + "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.7", "", { "os": "aix", "cpu": "ppc64" }, "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg=="], - "@esbuild/android-arm": ["@esbuild/android-arm@0.27.4", "", { "os": "android", "cpu": "arm" }, "sha512-X9bUgvxiC8CHAGKYufLIHGXPJWnr0OCdR0anD2e21vdvgCI8lIfqFbnoeOz7lBjdrAGUhqLZLcQo6MLhTO2DKQ=="], + "@esbuild/android-arm": ["@esbuild/android-arm@0.27.7", "", { "os": "android", "cpu": "arm" }, "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ=="], - "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.4", "", { "os": "android", "cpu": "arm64" }, "sha512-gdLscB7v75wRfu7QSm/zg6Rx29VLdy9eTr2t44sfTW7CxwAtQghZ4ZnqHk3/ogz7xao0QAgrkradbBzcqFPasw=="], + "@esbuild/android-arm64": ["@esbuild/android-arm64@0.27.7", "", { "os": "android", "cpu": "arm64" }, "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ=="], - "@esbuild/android-x64": ["@esbuild/android-x64@0.27.4", "", { "os": "android", "cpu": "x64" }, "sha512-PzPFnBNVF292sfpfhiyiXCGSn9HZg5BcAz+ivBuSsl6Rk4ga1oEXAamhOXRFyMcjwr2DVtm40G65N3GLeH1Lvw=="], + "@esbuild/android-x64": ["@esbuild/android-x64@0.27.7", "", { "os": "android", "cpu": "x64" }, "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg=="], - "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-b7xaGIwdJlht8ZFCvMkpDN6uiSmnxxK56N2GDTMYPr2/gzvfdQN8rTfBsvVKmIVY/X7EM+/hJKEIbbHs9oA4tQ=="], + "@esbuild/darwin-arm64": ["@esbuild/darwin-arm64@0.27.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw=="], - "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-sR+OiKLwd15nmCdqpXMnuJ9W2kpy0KigzqScqHI3Hqwr7IXxBp3Yva+yJwoqh7rE8V77tdoheRYataNKL4QrPw=="], + "@esbuild/darwin-x64": ["@esbuild/darwin-x64@0.27.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ=="], - "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.4", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-jnfpKe+p79tCnm4GVav68A7tUFeKQwQyLgESwEAUzyxk/TJr4QdGog9sqWNcUbr/bZt/O/HXouspuQDd9JxFSw=="], + "@esbuild/freebsd-arm64": ["@esbuild/freebsd-arm64@0.27.7", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w=="], - "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-2kb4ceA/CpfUrIcTUl1wrP/9ad9Atrp5J94Lq69w7UwOMolPIGrfLSvAKJp0RTvkPPyn6CIWrNy13kyLikZRZQ=="], + "@esbuild/freebsd-x64": ["@esbuild/freebsd-x64@0.27.7", "", { "os": "freebsd", "cpu": "x64" }, "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ=="], - "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.4", "", { "os": "linux", "cpu": "arm" }, "sha512-aBYgcIxX/wd5n2ys0yESGeYMGF+pv6g0DhZr3G1ZG4jMfruU9Tl1i2Z+Wnj9/KjGz1lTLCcorqE2viePZqj4Eg=="], + "@esbuild/linux-arm": ["@esbuild/linux-arm@0.27.7", "", { "os": "linux", "cpu": "arm" }, "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA=="], - "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-7nQOttdzVGth1iz57kxg9uCz57dxQLHWxopL6mYuYthohPKEK0vU0C3O21CcBK6KDlkYVcnDXY099HcCDXd9dA=="], + "@esbuild/linux-arm64": ["@esbuild/linux-arm64@0.27.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A=="], - "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.4", "", { "os": "linux", "cpu": "ia32" }, "sha512-oPtixtAIzgvzYcKBQM/qZ3R+9TEUd1aNJQu0HhGyqtx6oS7qTpvjheIWBbes4+qu1bNlo2V4cbkISr8q6gRBFA=="], + "@esbuild/linux-ia32": ["@esbuild/linux-ia32@0.27.7", "", { "os": "linux", "cpu": "ia32" }, "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg=="], - "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-8mL/vh8qeCoRcFH2nM8wm5uJP+ZcVYGGayMavi8GmRJjuI3g1v6Z7Ni0JJKAJW+m0EtUuARb6Lmp4hMjzCBWzA=="], + "@esbuild/linux-loong64": ["@esbuild/linux-loong64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q=="], - "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-1RdrWFFiiLIW7LQq9Q2NES+HiD4NyT8Itj9AUeCl0IVCA459WnPhREKgwrpaIfTOe+/2rdntisegiPWn/r/aAw=="], + "@esbuild/linux-mips64el": ["@esbuild/linux-mips64el@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw=="], - "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tLCwNG47l3sd9lpfyx9LAGEGItCUeRCWeAx6x2Jmbav65nAwoPXfewtAdtbtit/pJFLUWOhpv0FpS6GQAmPrHA=="], + "@esbuild/linux-ppc64": ["@esbuild/linux-ppc64@0.27.7", "", { "os": "linux", "cpu": "ppc64" }, "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ=="], - "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.4", "", { "os": "linux", "cpu": "none" }, "sha512-BnASypppbUWyqjd1KIpU4AUBiIhVr6YlHx/cnPgqEkNoVOhHg+YiSVxM1RLfiy4t9cAulbRGTNCKOcqHrEQLIw=="], + "@esbuild/linux-riscv64": ["@esbuild/linux-riscv64@0.27.7", "", { "os": "linux", "cpu": "none" }, "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ=="], - "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-+eUqgb/Z7vxVLezG8bVB9SfBie89gMueS+I0xYh2tJdw3vqA/0ImZJ2ROeWwVJN59ihBeZ7Tu92dF/5dy5FttA=="], + "@esbuild/linux-s390x": ["@esbuild/linux-s390x@0.27.7", "", { "os": "linux", "cpu": "s390x" }, "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw=="], - "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.4", "", { "os": "linux", "cpu": "x64" }, "sha512-S5qOXrKV8BQEzJPVxAwnryi2+Iq5pB40gTEIT69BQONqR7JH1EPIcQ/Uiv9mCnn05jff9umq/5nqzxlqTOg9NA=="], + "@esbuild/linux-x64": ["@esbuild/linux-x64@0.27.7", "", { "os": "linux", "cpu": "x64" }, "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA=="], - "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.4", "", { "os": "none", "cpu": "arm64" }, "sha512-xHT8X4sb0GS8qTqiwzHqpY00C95DPAq7nAwX35Ie/s+LO9830hrMd3oX0ZMKLvy7vsonee73x0lmcdOVXFzd6Q=="], + "@esbuild/netbsd-arm64": ["@esbuild/netbsd-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w=="], - "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.4", "", { "os": "none", "cpu": "x64" }, "sha512-RugOvOdXfdyi5Tyv40kgQnI0byv66BFgAqjdgtAKqHoZTbTF2QqfQrFwa7cHEORJf6X2ht+l9ABLMP0dnKYsgg=="], + "@esbuild/netbsd-x64": ["@esbuild/netbsd-x64@0.27.7", "", { "os": "none", "cpu": "x64" }, "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw=="], - "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.4", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-2MyL3IAaTX+1/qP0O1SwskwcwCoOI4kV2IBX1xYnDDqthmq5ArrW94qSIKCAuRraMgPOmG0RDTA74mzYNQA9ow=="], + "@esbuild/openbsd-arm64": ["@esbuild/openbsd-arm64@0.27.7", "", { "os": "openbsd", "cpu": "arm64" }, "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A=="], - "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.4", "", { "os": "openbsd", "cpu": "x64" }, "sha512-u8fg/jQ5aQDfsnIV6+KwLOf1CmJnfu1ShpwqdwC0uA7ZPwFws55Ngc12vBdeUdnuWoQYx/SOQLGDcdlfXhYmXQ=="], + "@esbuild/openbsd-x64": ["@esbuild/openbsd-x64@0.27.7", "", { "os": "openbsd", "cpu": "x64" }, "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg=="], - "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.4", "", { "os": "none", "cpu": "arm64" }, "sha512-JkTZrl6VbyO8lDQO3yv26nNr2RM2yZzNrNHEsj9bm6dOwwu9OYN28CjzZkH57bh4w0I2F7IodpQvUAEd1mbWXg=="], + "@esbuild/openharmony-arm64": ["@esbuild/openharmony-arm64@0.27.7", "", { "os": "none", "cpu": "arm64" }, "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw=="], - "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.4", "", { "os": "sunos", "cpu": "x64" }, "sha512-/gOzgaewZJfeJTlsWhvUEmUG4tWEY2Spp5M20INYRg2ZKl9QPO3QEEgPeRtLjEWSW8FilRNacPOg8R1uaYkA6g=="], + "@esbuild/sunos-x64": ["@esbuild/sunos-x64@0.27.7", "", { "os": "sunos", "cpu": "x64" }, "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA=="], - "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-Z9SExBg2y32smoDQdf1HRwHRt6vAHLXcxD2uGgO/v2jK7Y718Ix4ndsbNMU/+1Qiem9OiOdaqitioZwxivhXYg=="], + "@esbuild/win32-arm64": ["@esbuild/win32-arm64@0.27.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA=="], - "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-DAyGLS0Jz5G5iixEbMHi5KdiApqHBWMGzTtMiJ72ZOLhbu/bzxgAe8Ue8CTS3n3HbIUHQz/L51yMdGMeoxXNJw=="], + "@esbuild/win32-ia32": ["@esbuild/win32-ia32@0.27.7", "", { "os": "win32", "cpu": "ia32" }, "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw=="], - "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.4", "", { "os": "win32", "cpu": "x64" }, "sha512-+knoa0BDoeXgkNvvV1vvbZX4+hizelrkwmGJBdT17t8FNPwG2lKemmuMZlmaNQ3ws3DKKCxpb4zRZEIp3UxFCg=="], + "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.7", "", { "os": "win32", "cpu": "x64" }, "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg=="], "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="], @@ -906,13 +908,15 @@ "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="], - "@happy-dom/global-registrator": ["@happy-dom/global-registrator@20.8.9", "", { "dependencies": { "@types/node": ">=20.0.0", "happy-dom": "^20.8.9" } }, "sha512-DtZeRRHY9A/bisTJziUBBPrdnPui7+R185G/hzi6/Boymhqh7/wi53AY+IvQHS1+7OPaqfO/1XNpngNwthLz+A=="], + "@happy-dom/global-registrator": ["@happy-dom/global-registrator@20.9.0", "", { "dependencies": { "@types/node": ">=20.0.0", "happy-dom": "^20.9.0" } }, "sha512-lBW6/m5BIFl3pMuWPNN0lIOYw9LMCmPfix53ExS3FBi4E+NELEljQ3xH6aAV9IYiQRfn9YIIgzzMrD0vIcD7tw=="], + + "@hono/node-server": ["@hono/node-server@1.19.14", "", { "peerDependencies": { "hono": "^4" } }, "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw=="], - "@hono/node-server": ["@hono/node-server@1.19.11", "", { "peerDependencies": { "hono": "^4" } }, "sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g=="], + "@humanfs/core": ["@humanfs/core@0.19.2", "", { "dependencies": { "@humanfs/types": "^0.15.0" } }, "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA=="], - "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="], + "@humanfs/node": ["@humanfs/node@0.16.8", "", { "dependencies": { "@humanfs/core": "^0.19.2", "@humanfs/types": "^0.15.0", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ=="], - "@humanfs/node": ["@humanfs/node@0.16.7", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" } }, "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ=="], + "@humanfs/types": ["@humanfs/types@0.15.0", "", {}, "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q=="], "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="], @@ -974,7 +978,7 @@ "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], - "@joshwooding/vite-plugin-react-docgen-typescript": ["@joshwooding/vite-plugin-react-docgen-typescript@0.6.4", "", { "dependencies": { "glob": "^13.0.1", "react-docgen-typescript": "^2.2.2" }, "peerDependencies": { "typescript": ">= 4.3.x", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" }, "optionalPeers": ["typescript"] }, "sha512-6PyZBYKnnVNqOSB0YFly+62R7dmov8segT27A+RVTBVd4iAE6kbW9QBJGlyR2yG4D4ohzhZSTIu7BK1UTtmFFA=="], + "@joshwooding/vite-plugin-react-docgen-typescript": ["@joshwooding/vite-plugin-react-docgen-typescript@0.7.0", "", { "dependencies": { "glob": "^13.0.1", "react-docgen-typescript": "^2.2.2" }, "peerDependencies": { "typescript": ">= 4.3.x", "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["typescript"] }, "sha512-qvsTEwEFefhdirGOPnu9Wp6ChfIwy2dBCRuETU3uE+4cC+PFoxMSiiEhxk4lOluA34eARHA0OxqsEUYDqRMgeQ=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], @@ -992,13 +996,13 @@ "@kuma-ui/compiler": ["@kuma-ui/compiler@1.4.0", "", { "dependencies": { "@babel/core": "^7.21.4", "@kuma-ui/babel-plugin": "^1.3.0", "@kuma-ui/core": "^1.6.0", "@kuma-ui/sheet": "^1.4.0", "@kuma-ui/system": "^1.8.0", "@kuma-ui/wasm": "^1.1.0", "ts-morph": "^19.0.0" } }, "sha512-4OtBjstXybo7r05WJFncis6U8XlIr+BIWkZ7lA04QMh3qRv96l71Rx9JG3O5oBS4Mv1y3KSIydvffXswBh6Ttg=="], - "@kuma-ui/core": ["@kuma-ui/core@1.6.3", "", { "dependencies": { "@kuma-ui/sheet": "1.5.1", "@kuma-ui/system": "1.8.2", "@types/stylis": "^4.2.0", "stylis": "^4.2.0" }, "peerDependencies": { "@types/react": ">=18.0.32", "next": ">=13.4.5", "react": ">=18.2.0" }, "optionalPeers": ["@types/react", "next"] }, "sha512-s3M5NsiRVa4MShPQwnyaMYhh95r9LtRB4bhfJvrOyyXFdBYAiX88mj3dWTObhGn3jeuDE7aGostJNfJoQH6ZdA=="], + "@kuma-ui/core": ["@kuma-ui/core@1.6.4", "", { "dependencies": { "@kuma-ui/sheet": "1.5.2", "@kuma-ui/system": "1.8.3", "@types/stylis": "^4.2.0", "stylis": "^4.2.0" }, "peerDependencies": { "@types/react": ">=18.0.32", "next": ">=13.4.5", "react": ">=18.2.0" }, "optionalPeers": ["@types/react", "next"] }, "sha512-ueGdCoLEatinqMkmkM5mttdQwiepXMsvOozkXWyc1W751Y5OML8SUpDW/zMnO/GvcNDWw5u9mYwJE6sx+kL9mw=="], "@kuma-ui/next-plugin": ["@kuma-ui/next-plugin@1.4.0", "", { "dependencies": { "@babel/preset-env": "^7.21.4", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.4", "@kuma-ui/core": "^1.6.0", "@kuma-ui/webpack-plugin": "^1.5.0", "babel-loader": "^9.1.2", "browserslist": "4.21.5" }, "peerDependencies": { "@types/react": "^18.0.32", "next": ">=13.4.5", "react": ">=18.2.0", "webpack": "^5" }, "optionalPeers": ["@types/react"] }, "sha512-92f2uRdqZiZry66v+N8XWn8kk56C+t8JYrb9+qUdWmZAHwA0/cMPGoovNU3S+d4+p+B+7okx+Y4LF5uuFBtocg=="], - "@kuma-ui/sheet": ["@kuma-ui/sheet@1.5.1", "", { "dependencies": { "stylis": "^4.2.0" } }, "sha512-iwK0GUtMhe2mbpTBSsh+cGNpiAYPqBtfZNrRQJpZLdCmlXNIPX67xZgOehSewJiSkuaUJ3vX4OkXKEnxPhcqJg=="], + "@kuma-ui/sheet": ["@kuma-ui/sheet@1.5.2", "", { "dependencies": { "stylis": "^4.2.0" } }, "sha512-SWHUrzEhTuUmT+HuISMab9tbZrmz1FDzbBAPoKt9sbV87cMfqcPRQpdDsnj+0HLtFMrCfBeylK82QqjOo+IOww=="], - "@kuma-ui/system": ["@kuma-ui/system@1.8.2", "", { "dependencies": { "@kuma-ui/sheet": "1.5.1", "csstype": "^3.1.2" } }, "sha512-G5mu+c1Gu5l+/cFuy9azG8TuhoK7qTYKqCjoD2e+8N41T4YRN4laNnsYXhSXOs5WzC1dPrqGV3lRI/fxHdC5qQ=="], + "@kuma-ui/system": ["@kuma-ui/system@1.8.3", "", { "dependencies": { "@kuma-ui/sheet": "1.5.2", "csstype": "^3.1.2" } }, "sha512-Z8oPCLcSJhaCxu2m9mErYP/VLR6TYvNShc48CfR5EQpm0QDlMzJIzTyLdzX5Ulw/tl7lRwr0y2hlGOxEduQ9Eg=="], "@kuma-ui/wasm": ["@kuma-ui/wasm@1.1.0", "", {}, "sha512-CONd3Q3NM+8Lek72xhbvcO/MDjlSwFQW/2bqsJGQzMxwZfFohOg/1iREawQsLrgutc7fPdWWAD6UzbjdHdb18g=="], @@ -1010,65 +1014,45 @@ "@mdx-js/react": ["@mdx-js/react@3.1.1", "", { "dependencies": { "@types/mdx": "^2.0.0" }, "peerDependencies": { "@types/react": ">=16", "react": ">=16" } }, "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw=="], - "@microsoft/api-extractor": ["@microsoft/api-extractor@7.57.7", "", { "dependencies": { "@microsoft/api-extractor-model": "7.33.4", "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.1", "@rushstack/node-core-library": "5.20.3", "@rushstack/rig-package": "0.7.2", "@rushstack/terminal": "0.22.3", "@rushstack/ts-command-line": "5.3.3", "diff": "~8.0.2", "lodash": "~4.17.23", "minimatch": "10.2.3", "resolve": "~1.22.1", "semver": "~7.5.4", "source-map": "~0.6.1", "typescript": "5.8.2" }, "bin": { "api-extractor": "bin/api-extractor" } }, "sha512-kmnmVs32MFWbV5X6BInC1/TfCs7y1ugwxv1xHsAIj/DyUfoe7vtO0alRUgbQa57+yRGHBBjlNcEk33SCAt5/dA=="], - - "@microsoft/api-extractor-model": ["@microsoft/api-extractor-model@7.33.4", "", { "dependencies": { "@microsoft/tsdoc": "~0.16.0", "@microsoft/tsdoc-config": "~0.18.1", "@rushstack/node-core-library": "5.20.3" } }, "sha512-u1LTaNTikZAQ9uK6KG1Ms7nvNedsnODnspq/gH2dcyETWvH4hVNGNDvRAEutH66kAmxA4/necElqGNs1FggC8w=="], - - "@microsoft/tsdoc": ["@microsoft/tsdoc@0.16.0", "", {}, "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA=="], - - "@microsoft/tsdoc-config": ["@microsoft/tsdoc-config@0.18.1", "", { "dependencies": { "@microsoft/tsdoc": "0.16.0", "ajv": "~8.18.0", "jju": "~1.4.0", "resolve": "~1.22.2" } }, "sha512-9brPoVdfN9k9g0dcWkFeA7IH9bbcttzDJlXvkf8b2OBzd5MueR1V2wkKBL0abn0otvmkHJC6aapBOTJDDeMCZg=="], - - "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.28.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-gmloF+i+flI8ouQK7MWW4mOwuMh4RePBuPFAEPC6+pdqyWOUMDOixb6qZ69owLJpz6XmyllCouc4t8YWO+E2Nw=="], - - "@module-federation/error-codes": ["@module-federation/error-codes@0.22.0", "", {}, "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug=="], + "@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.29.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ=="], - "@module-federation/runtime": ["@module-federation/runtime@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/runtime-core": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA=="], + "@mui/core-downloads-tracker": ["@mui/core-downloads-tracker@9.0.1", "", {}, "sha512-GzamIIhZ1bH77dq7eKaeyRgJdkypsxin4jBFq2EMs4lBWRR0LFO1CSVMsoebn/VvjcNrnrOrjy48MkrkQUK2iw=="], - "@module-federation/runtime-core": ["@module-federation/runtime-core@0.22.0", "", { "dependencies": { "@module-federation/error-codes": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA=="], + "@mui/material": ["@mui/material@9.0.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@mui/core-downloads-tracker": "^9.0.1", "@mui/system": "^9.0.1", "@mui/types": "^9.0.0", "@mui/utils": "^9.0.1", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "csstype": "^3.2.3", "prop-types": "^15.8.1", "react-is": "^19.2.4", "react-transition-group": "^4.4.5" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@mui/material-pigment-css": "^9.0.1", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/react", "@emotion/styled", "@mui/material-pigment-css", "@types/react"] }, "sha512-voyCpeUxcSWLN7KPZuq0pGCIt726T9K6kiVM3XUcywZDAlZSarLHaUxJVQpospbjjOzN53hwyjo8s6KoWl6utw=="], - "@module-federation/runtime-tools": ["@module-federation/runtime-tools@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/webpack-bundler-runtime": "0.22.0" } }, "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA=="], + "@mui/private-theming": ["@mui/private-theming@9.0.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@mui/utils": "^9.0.1", "prop-types": "^15.8.1" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-pSIGq4Yw749KHEwlkYZWVERgHgwJELP6ODtBNUfV8V4oIb5H+h7IQDFXuk/b2oQccODK1enJAtiEzlgLZmq+8g=="], - "@module-federation/sdk": ["@module-federation/sdk@0.22.0", "", {}, "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g=="], + "@mui/styled-engine": ["@mui/styled-engine@9.0.0", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@emotion/cache": "^11.14.0", "@emotion/serialize": "^1.3.3", "@emotion/sheet": "^1.4.0", "csstype": "^3.2.3", "prop-types": "^15.8.1" }, "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/react", "@emotion/styled"] }, "sha512-9RLGdX4Jg0aQPRuvqh/OLzYSPlgd5zyEw5/1HIRfdavSiOd03WtUaGZH9/w1RoTYuRKwpgy0hpIFaMHIqPVIWg=="], - "@module-federation/webpack-bundler-runtime": ["@module-federation/webpack-bundler-runtime@0.22.0", "", { "dependencies": { "@module-federation/runtime": "0.22.0", "@module-federation/sdk": "0.22.0" } }, "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA=="], + "@mui/system": ["@mui/system@9.0.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@mui/private-theming": "^9.0.1", "@mui/styled-engine": "^9.0.0", "@mui/types": "^9.0.0", "@mui/utils": "^9.0.1", "clsx": "^2.1.1", "csstype": "^3.2.3", "prop-types": "^15.8.1" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/react", "@emotion/styled", "@types/react"] }, "sha512-WvlioaLxk6ewUIOfh0StxUvOPDS1mCfzaulcudsL1brZNXuh0N9FMk7RpH7ImJKjEz412SEy/V/yvqmtxbqxCQ=="], - "@mui/core-downloads-tracker": ["@mui/core-downloads-tracker@7.3.9", "", {}, "sha512-MOkOCTfbMJwLshlBCKJ59V2F/uaLYfmKnN76kksj6jlGUVdI25A9Hzs08m+zjBRdLv+sK7Rqdsefe8X7h/6PCw=="], + "@mui/types": ["@mui/types@9.0.0", "", { "dependencies": { "@babel/runtime": "^7.29.2" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-i1cuFCAWN44b3AJWO7mh7tuh1sqbQSeVr/94oG0TX5uXivac8XalgE4/6fQZcmGZigzbQ35IXxj/4jLpRIBYZg=="], - "@mui/material": ["@mui/material@7.3.9", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@mui/core-downloads-tracker": "^7.3.9", "@mui/system": "^7.3.9", "@mui/types": "^7.4.12", "@mui/utils": "^7.3.9", "@popperjs/core": "^2.11.8", "@types/react-transition-group": "^4.4.12", "clsx": "^2.1.1", "csstype": "^3.2.3", "prop-types": "^15.8.1", "react-is": "^19.2.3", "react-transition-group": "^4.4.5" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@mui/material-pigment-css": "^7.3.9", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/react", "@emotion/styled", "@mui/material-pigment-css", "@types/react"] }, "sha512-I8yO3t4T0y7bvDiR1qhIN6iBWZOTBfVOnmLlM7K6h3dx5YX2a7rnkuXzc2UkZaqhxY9NgTnEbdPlokR1RxCNRQ=="], + "@mui/utils": ["@mui/utils@9.0.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@mui/types": "^9.0.0", "@types/prop-types": "^15.7.15", "clsx": "^2.1.1", "prop-types": "^15.8.1", "react-is": "^19.2.4" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-f3UO3jNN1pYg5zxqXC81Bvv8hx5ACcYc0387382ZI7M5ono1heIwHYLrKsz85myguWdeVKPRZGmDdynWUBjK2g=="], - "@mui/private-theming": ["@mui/private-theming@7.3.9", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@mui/utils": "^7.3.9", "prop-types": "^15.8.1" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-ErIyRQvsiQEq7Yvcvfw9UDHngaqjMy9P3JDPnRAaKG5qhpl2C4tX/W1S4zJvpu+feihmZJStjIyvnv6KDbIrlw=="], + "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], - "@mui/styled-engine": ["@mui/styled-engine@7.3.9", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@emotion/cache": "^11.14.0", "@emotion/serialize": "^1.3.3", "@emotion/sheet": "^1.4.0", "csstype": "^3.2.3", "prop-types": "^15.8.1" }, "peerDependencies": { "@emotion/react": "^11.4.1", "@emotion/styled": "^11.3.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/react", "@emotion/styled"] }, "sha512-JqujWt5bX4okjUPGpVof/7pvgClqh7HvIbsIBIOOlCh2u3wG/Bwp4+E1bc1dXSwkrkp9WUAoNdI5HEC+5HKvMw=="], + "@next/env": ["@next/env@16.2.6", "", {}, "sha512-gd8HoHN4ufj73WmR3JmVolrpJR47ILK6LouP5xElPglaVxir6e1a7VzvTvDWkOoPXT9rkkTzyCxBu4yeZfZwcw=="], - "@mui/system": ["@mui/system@7.3.9", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@mui/private-theming": "^7.3.9", "@mui/styled-engine": "^7.3.9", "@mui/types": "^7.4.12", "@mui/utils": "^7.3.9", "clsx": "^2.1.1", "csstype": "^3.2.3", "prop-types": "^15.8.1" }, "peerDependencies": { "@emotion/react": "^11.5.0", "@emotion/styled": "^11.3.0", "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/react", "@emotion/styled", "@types/react"] }, "sha512-aL1q9am8XpRrSabv9qWf5RHhJICJql34wnrc1nz0MuOglPRYF/liN+c8VqZdTvUn9qg+ZjRVbKf4sJVFfIDtmg=="], + "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.2.6", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-Z8l6o4JWKUl755x4R+wogD86KPeU+Ckw4K+SYG4kHeOJtRenDeK+OSbGcqZpDtbwn9DsJVdir2UxmwXuinUbUw=="], - "@mui/types": ["@mui/types@7.4.12", "", { "dependencies": { "@babel/runtime": "^7.28.6" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-iKNAF2u9PzSIj40CjvKJWxFXJo122jXVdrmdh0hMYd+FR+NuJMkr/L88XwWLCRiJ5P1j+uyac25+Kp6YC4hu6w=="], + "@next/mdx": ["@next/mdx@16.2.6", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-0hdoSkzRbyud1dNRRDiyqD9FrxR2wwdiW+ffhYx+n+fXrFOJ7Nwpi8o7nUz2LiiM44BB9M0eIO1Evy3BBrS50A=="], - "@mui/utils": ["@mui/utils@7.3.9", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@mui/types": "^7.4.12", "@types/prop-types": "^15.7.15", "clsx": "^2.1.1", "prop-types": "^15.8.1", "react-is": "^19.2.3" }, "peerDependencies": { "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-U6SdZaGbfb65fqTsH3V5oJdFj9uYwyLE2WVuNvmbggTSDBb8QHrFsqY8BN3taK9t3yJ8/BPHD/kNvLNyjwM7Yw=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ZJGkkcNfYgrrMkqOdZ7zoLa1TOy0qpcMfk/z4Mh/FKUz40gVO+HNQWqmLxf67Z5WB64DRp0dhEbyHfel+6sJUg=="], - "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.2", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-v/YLBHIY132Ced3puBJ7YJKw1lqsCrgcNo2aRJlCEyQrrCeRJlvGlnmxhPxNQI3KE3N1DN5r9TPNPvka3nq5RQ=="], - "@next/env": ["@next/env@16.2.1", "", {}, "sha512-n8P/HCkIWW+gVal2Z8XqXJ6aB3J0tuM29OcHpCsobWlChH/SITBs1DFBk/HajgrwDkqqBXPbuUuzgDvUekREPg=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-RPOvqlYBbcQjkz9VQQDZ2T2bARIjXZV1KFlt+V2Mr6SW/e4I9fcKsaA0hdyf2FHoTlsV2xnBd5Y912rP/1Ce6w=="], - "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.1.7", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-v/bRGOJlfRCO+NDKt0bZlIIWjhMKU8xbgEQBo+rV9C8S6czZvs96LZ/v24/GvpEnovZlL4QDpku/RzWHVbmPpA=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-URUTu1+dMkxJsPFgm+OeEvq9wf5sujw0EvgYy80TDGHTSLTnIHeqb0Eu8A3sC95IRgjejQL+kC4mw+4yPxiAXA=="], - "@next/mdx": ["@next/mdx@16.2.1", "", { "dependencies": { "source-map": "^0.7.0" }, "peerDependencies": { "@mdx-js/loader": ">=0.15.0", "@mdx-js/react": ">=0.15.0" }, "optionalPeers": ["@mdx-js/loader", "@mdx-js/react"] }, "sha512-w0YOkOc+WEnsTJ8uxzBOvpe3R+9BnJOxWCE7qcI/62CzJiUEd8JKtF25e3R8cW5BGsKyRW8p4zE2JLyXKa8xdw=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-DOj182mPV8G3UkrayLoREM5YEYI+Dk5wv7Ox9xl1fFibAELEsFD0lDPfHIeILlutMMfdyhlzYPELG3peuKaurw=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-BwZ8w8YTaSEr2HIuXLMLxIdElNMPvY9fLqb20LX9A9OMGtJilhHLbCL3ggyd0TwjmMcTxi0XXt+ur1vWUoxj2Q=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-HKQ5SP/V/ub73UvF7n/zeJlxk2kLmtL7Wzrg4WfmkjmNos5onJ2tKu7yZOPdL18A6Svfn3max29ym+ry7NkK4g=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-/vrcE6iQSJq3uL3VGVHiXeaKbn8Es10DGTGRJnRZlkNQQk3kaNtAJg8Y6xuAlrx/6INKVjkfi5rY0iEXorZ6uA=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-LZXpTlPyS5v7HhSmnvsLGP3iIYgYOBnc8r8ArlT55sGHV89bR2HlDdBjWQ+PY6SJMmk8TuVGFuxalnP3k/0Dwg=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-uLn+0BK+C31LTVbQ/QU+UaVrV0rRSJQ8RfniQAHPghDdgE+SlroYqcmFnO5iNjNfVWCyKZHYrs3Nl0mUzWxbBw=="], - - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-ssKq6iMRnHdnycGp9hCuGnXJZ0YPr4/wNwrfE5DbmvEcgl9+yv97/Kq3TPVDfYome1SW5geciLB9aiEqKXQjlQ=="], - - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-HQm7SrHRELJ30T1TSmT706IWovFFSRGxfgUkyWJZF/RKBMdbdRWJuFrcpDdE5vy9UXjFOx6L3mRdqH04Mmx0hg=="], - - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-aV2iUaC/5HGEpbBkE+4B8aHIudoOy5DYekAKOMSHoIYQ66y/wIVeaRx8MS2ZMdxe/HIXlMho4ubdZs/J8441Tg=="], - - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-IXdNgiDHaSk0ZUJ+xp0OQTdTgnpx1RCfRTalhn3cjOP+IddTMINwA7DXZrwTmGDO8SUr5q2hdP/du4DcrB1GxA=="], - - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-qvU+3a39Hay+ieIztkGSbF7+mccbbg1Tk25hc4JDylf8IHjYmY/Zm64Qq1602yPyQqvie+vf5T/uPwNxDNIoeg=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.6", "", { "os": "win32", "cpu": "x64" }, "sha512-F0+4i0h9J6C4eE3EAPWsoCk7UW/dbzOjyzxY0qnDUOYFu6FFmdZ6l97/XdV3/Nz3VYyO7UWjyEJUXkGqcoXfMA=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -1092,237 +1076,231 @@ "@ota-meshi/ast-token-store": ["@ota-meshi/ast-token-store@0.3.0", "", {}, "sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg=="], - "@oxc-project/types": ["@oxc-project/types@0.122.0", "", {}, "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA=="], + "@oxc-project/types": ["@oxc-project/types@0.128.0", "", {}, "sha512-huv1Y/LzBJkBVHt3OlC7u0zHBW9qXf1FdD7sGmc1rXc2P1mTwHssYv7jyGx5KAACSCH+9B3Bhn6Z9luHRvf7pQ=="], + + "@pandacss/config": ["@pandacss/config@1.11.1", "", { "dependencies": { "@pandacss/logger": "1.11.1", "@pandacss/preset-base": "1.11.1", "@pandacss/preset-panda": "1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/types": "1.11.1", "bundle-n-require": "1.1.2", "escalade": "3.2.0", "microdiff": "1.5.0", "typescript": "6.0.2" } }, "sha512-8f+pJfwDBlTgXqDKoTa3UFmiIZ4YYQvt5BPYQfD93xjvBPJBwdQl7P49obhSp/nkt13nl2MZRW+dtmrVQfz6OQ=="], + + "@pandacss/core": ["@pandacss/core@1.11.1", "", { "dependencies": { "@csstools/postcss-cascade-layers": "5.0.2", "@pandacss/is-valid-prop": "^1.11.1", "@pandacss/logger": "1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/token-dictionary": "1.11.1", "@pandacss/types": "1.11.1", "browserslist": "4.28.1", "lodash.merge": "4.6.2", "outdent": "0.8.0", "postcss": "8.5.14", "postcss-discard-duplicates": "7.0.2", "postcss-discard-empty": "7.0.1", "postcss-minify-selectors": "7.0.5", "postcss-nested": "7.0.2", "postcss-normalize-whitespace": "7.0.1", "postcss-selector-parser": "7.1.1", "ts-pattern": "5.9.0" } }, "sha512-yUmCJ2cBkfcfx+4w4ZO+hrAkDtDXIm6NoU8iYRC70GHsTm6T+vlEs7jRxYqK9C2sW+mJx+zKFqjD+THSAZhF+g=="], - "@pandacss/config": ["@pandacss/config@1.9.1", "", { "dependencies": { "@pandacss/logger": "1.9.1", "@pandacss/preset-base": "1.9.1", "@pandacss/preset-panda": "1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/types": "1.9.1", "bundle-n-require": "1.1.2", "escalade": "3.2.0", "microdiff": "1.5.0", "typescript": "5.9.3" } }, "sha512-XbHr0F8wkTeIBrTKT4UrMJMDAzuB179kaHf4n+xF9k5LzSzrKWK2phzAdwu3iLWiG08P6zs1JWzR3lwDD3cUfQ=="], + "@pandacss/dev": ["@pandacss/dev@1.11.1", "", { "dependencies": { "@clack/prompts": "0.11.0", "@pandacss/config": "1.11.1", "@pandacss/logger": "1.11.1", "@pandacss/mcp": "1.11.1", "@pandacss/node": "1.11.1", "@pandacss/postcss": "1.11.1", "@pandacss/preset-base": "1.11.1", "@pandacss/preset-panda": "1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/token-dictionary": "1.11.1", "@pandacss/types": "1.11.1", "cac": "6.7.14" }, "bin": { "panda": "bin.js", "pandacss": "bin.js" } }, "sha512-Xf2wfdnYqPdCu1X+bdwTRGFvtcI9mivqRhWzmmO7JRn4KOKmvLuQY95iJZFwUNyscg8dgKbWcZJOpqnrJaEUYw=="], - "@pandacss/core": ["@pandacss/core@1.9.1", "", { "dependencies": { "@csstools/postcss-cascade-layers": "6.0.0", "@pandacss/is-valid-prop": "^1.9.1", "@pandacss/logger": "1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/token-dictionary": "1.9.1", "@pandacss/types": "1.9.1", "browserslist": "4.28.1", "hookable": "5.5.3", "lightningcss": "1.31.1", "lodash.merge": "4.6.2", "outdent": "0.8.0", "postcss": "8.5.6", "postcss-discard-duplicates": "7.0.2", "postcss-discard-empty": "7.0.1", "postcss-minify-selectors": "7.0.5", "postcss-nested": "7.0.2", "postcss-normalize-whitespace": "7.0.1", "postcss-selector-parser": "7.1.1", "ts-pattern": "5.9.0" } }, "sha512-JTpWqRlLwqzbMkLxVBOrEUPFijXdSqUxy7KoYqBK0cZH+60KYzrvEY7IsdicqTBCGDXC/M9UYUlkCoSP1/FmnA=="], + "@pandacss/extractor": ["@pandacss/extractor@1.11.1", "", { "dependencies": { "@pandacss/shared": "1.11.1", "ts-evaluator": "1.2.0", "ts-morph": "28.0.0" } }, "sha512-WF+Te/azc9TE5l+dt93E9qOhgnXFKv875SFF02mHWtaLmAgA0pwxY1s63EeWAG8EzIyhqlxFRGVomTz4VDtHYA=="], - "@pandacss/dev": ["@pandacss/dev@1.9.1", "", { "dependencies": { "@clack/prompts": "0.11.0", "@pandacss/config": "1.9.1", "@pandacss/logger": "1.9.1", "@pandacss/mcp": "1.9.1", "@pandacss/node": "1.9.1", "@pandacss/postcss": "1.9.1", "@pandacss/preset-base": "1.9.1", "@pandacss/preset-panda": "1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/token-dictionary": "1.9.1", "@pandacss/types": "1.9.1", "cac": "6.7.14" }, "bin": { "panda": "bin.js", "pandacss": "bin.js" } }, "sha512-8bANaIrFK4kwNyRX1OQTK2bYeMajra22pZd5Eda7dVFEg+0NL+cCG5AW76+N2pyVbz9HC4HbHrMwk36hnzk4jQ=="], + "@pandacss/generator": ["@pandacss/generator@1.11.1", "", { "dependencies": { "@pandacss/core": "1.11.1", "@pandacss/is-valid-prop": "^1.11.1", "@pandacss/logger": "1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/token-dictionary": "1.11.1", "@pandacss/types": "1.11.1", "javascript-stringify": "2.1.0", "outdent": " ^0.8.0", "pluralize": "8.0.0", "postcss": "8.5.14", "ts-pattern": "5.9.0" } }, "sha512-83Zeshx5w+KElhW0cm6T4ZjqxMueSh6/2wmnQM5ioNv3Mk0c0UZWusvl38DZDnP1Yrp9Dd8BT8c4Zu/kIzir0w=="], - "@pandacss/extractor": ["@pandacss/extractor@1.9.1", "", { "dependencies": { "@pandacss/shared": "1.9.1", "ts-evaluator": "1.2.0", "ts-morph": "27.0.2" } }, "sha512-w8oghKi2ohdyUP9EKdFk+ZQhw2rVx9MV8+QnaaOf8OcEcmzQtZnFfheUeyawgtFHGNXsI2oVmcR0dCjKSUY42w=="], + "@pandacss/is-valid-prop": ["@pandacss/is-valid-prop@1.11.1", "", {}, "sha512-tvfThJmSw88Lgk5qVYzVckZ2FY8T376mGvP1cWUC5SR58AYm82ZKEFciDbGOQKcyN70rF9qqJBB5JVWgJo3JmA=="], - "@pandacss/generator": ["@pandacss/generator@1.9.1", "", { "dependencies": { "@pandacss/core": "1.9.1", "@pandacss/is-valid-prop": "^1.9.1", "@pandacss/logger": "1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/token-dictionary": "1.9.1", "@pandacss/types": "1.9.1", "javascript-stringify": "2.1.0", "outdent": " ^0.8.0", "pluralize": "8.0.0", "postcss": "8.5.6", "ts-pattern": "5.9.0" } }, "sha512-hz1nkFdr1zaEQLLT6hUaXomUevr/8f1QogB/D0ADoWqNVsqZIiW0yIPpRedWe0bPEjv4tEIECbEvLOTGLRQ8HQ=="], + "@pandacss/logger": ["@pandacss/logger@1.11.1", "", { "dependencies": { "@pandacss/types": "1.11.1", "kleur": "4.1.5" } }, "sha512-uFA8Wi+dOqrns6ENsdV5KpU7wQEchb8GL2NqdH+UqyvCnfIRiAs/CldXRzFd8Dh7Q5PJXIYSEmrn2SMOqaA7eg=="], - "@pandacss/is-valid-prop": ["@pandacss/is-valid-prop@1.9.1", "", {}, "sha512-G4UHGPbyDR8UnxITHLiv8h88KWEAAs8NBX8yXLeb98ny2GEEhS3RBMK1Lq/tpNwwWimgLXxHfATyUkzqfgLjtg=="], + "@pandacss/mcp": ["@pandacss/mcp@1.11.1", "", { "dependencies": { "@clack/prompts": "0.11.0", "@modelcontextprotocol/sdk": "^1.29.0", "@pandacss/logger": "1.11.1", "@pandacss/node": "1.11.1", "@pandacss/token-dictionary": "1.11.1", "@pandacss/types": "1.11.1", "zod": "^4.0.0" } }, "sha512-sfAewHwDy+XWk9SFRSNVtTEwKb9KMLlzM0MDgzio/ZBxZK6MZiSskrRSqSeHWJOdw52IdQWQlFLGPakV5p30Zw=="], - "@pandacss/logger": ["@pandacss/logger@1.9.1", "", { "dependencies": { "@pandacss/types": "1.9.1", "kleur": "4.1.5" } }, "sha512-4vRNxz5Gn4f7xsJsIC3bOZ+Qj3n6wv0SXDt7n8ZSMC+onSF2wKz1sOd+bfBoHqxOkXigozPdAovyx0VaO2sPKA=="], + "@pandacss/node": ["@pandacss/node@1.11.1", "", { "dependencies": { "@pandacss/config": "1.11.1", "@pandacss/core": "1.11.1", "@pandacss/generator": "1.11.1", "@pandacss/logger": "1.11.1", "@pandacss/parser": "1.11.1", "@pandacss/plugin-lightningcss": "1.11.1", "@pandacss/plugin-svelte": "1.11.1", "@pandacss/plugin-vue": "1.11.1", "@pandacss/reporter": "1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/token-dictionary": "1.11.1", "@pandacss/types": "1.11.1", "browserslist": "4.28.1", "chokidar": "4.0.3", "fast-glob": "3.3.3", "fs-extra": "11.3.2", "get-tsconfig": "^4.13.0", "glob-parent": "6.0.2", "is-glob": "4.0.3", "lodash.merge": "4.6.2", "look-it-up": "2.1.0", "outdent": " ^0.8.0", "p-limit": "5.0.0", "package-manager-detector": "1.6.0", "perfect-debounce": "1.0.0", "picomatch": "4.0.4", "pkg-types": "2.3.0", "pluralize": "8.0.0", "postcss": "8.5.14", "prettier": "3.2.5", "ts-morph": "28.0.0", "ts-pattern": "5.9.0" } }, "sha512-NqJ6YYtFifS4JOgLGHuxM9vdKMKefg6UA9MFup+gaGiO5bjblJhn7l/AFRjYJHNGb9G76l44CzMREEfOe+gm8w=="], - "@pandacss/mcp": ["@pandacss/mcp@1.9.1", "", { "dependencies": { "@clack/prompts": "0.11.0", "@modelcontextprotocol/sdk": "^1.25.1", "@pandacss/logger": "1.9.1", "@pandacss/node": "1.9.1", "@pandacss/token-dictionary": "1.9.1", "@pandacss/types": "1.9.1", "zod": "^4.0.0" } }, "sha512-6kp3+jcr/SKWT7d+sUvZCB+ZVMs0jPNGhD4E1TLMeMhyRMNZo1+yORp55NwmrwDDxfNNJ3KjNQxL+L2vS5bpRA=="], + "@pandacss/parser": ["@pandacss/parser@1.11.1", "", { "dependencies": { "@pandacss/config": "^1.11.1", "@pandacss/core": "^1.11.1", "@pandacss/extractor": "1.11.1", "@pandacss/logger": "1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/types": "1.11.1", "ts-morph": "28.0.0", "ts-pattern": "5.9.0" } }, "sha512-ZerJISWnw8FAnTSRwyNevErUEd1GV/Ui/RUaolbm09Zb9Xvlfti1N6ylH4KBVhUBAjO1HGQAzhhXP1SZwy5tkQ=="], - "@pandacss/node": ["@pandacss/node@1.9.1", "", { "dependencies": { "@pandacss/config": "1.9.1", "@pandacss/core": "1.9.1", "@pandacss/generator": "1.9.1", "@pandacss/logger": "1.9.1", "@pandacss/parser": "1.9.1", "@pandacss/reporter": "1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/token-dictionary": "1.9.1", "@pandacss/types": "1.9.1", "browserslist": "4.28.1", "chokidar": "4.0.3", "fast-glob": "3.3.3", "fs-extra": "11.3.2", "glob-parent": "6.0.2", "is-glob": "4.0.3", "lodash.merge": "4.6.2", "look-it-up": "2.1.0", "outdent": " ^0.8.0", "p-limit": "5.0.0", "package-manager-detector": "1.6.0", "perfect-debounce": "1.0.0", "picomatch": "4.0.3", "pkg-types": "2.3.0", "pluralize": "8.0.0", "postcss": "8.5.6", "prettier": "3.2.5", "ts-morph": "27.0.2", "ts-pattern": "5.9.0", "tsconfck": "3.1.6" } }, "sha512-1hCVfFJ6eS+IoAcTQwggCUH62NIPxvs42vMFffwv7dYVaiv3hrSwgfdmTF+gGHeC5o5aD6Yz8jLTRZXLKJCuuQ=="], + "@pandacss/plugin-lightningcss": ["@pandacss/plugin-lightningcss@1.11.1", "", { "dependencies": { "@pandacss/logger": "1.11.1", "@pandacss/types": "1.11.1", "browserslist": "4.28.1", "lightningcss": "1.31.1" } }, "sha512-tV+4lW1zmRG+cKKKj6x6bSmjm11Ou3ffjtIzBXy6Y9R+MkZhZbqjARSZte10EtxW1irlRpy4Wo5CKtPJF/YbNQ=="], - "@pandacss/parser": ["@pandacss/parser@1.9.1", "", { "dependencies": { "@pandacss/config": "^1.9.1", "@pandacss/core": "^1.9.1", "@pandacss/extractor": "1.9.1", "@pandacss/logger": "1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/types": "1.9.1", "@vue/compiler-sfc": "3.5.25", "magic-string": "0.30.21", "ts-morph": "27.0.2", "ts-pattern": "5.9.0" } }, "sha512-mKjzeVoAxK2DnEYh5x2fWS2gNbpz7fRvSZy2qlnSRoFcv7U+rhqA7fnSUUnn77FIrsgElqB83k5j69K3onRv0A=="], + "@pandacss/plugin-svelte": ["@pandacss/plugin-svelte@1.11.1", "", { "dependencies": { "@pandacss/types": "1.11.1", "magic-string": "0.30.21" } }, "sha512-W3oOoaO/bXsHLcsrlMyBM+Vi3R5T/ZGc6JqEE4l8qazliu0MRN879pceekj7pOZkF06WyG6eMs4Y1Uqxhpv7vA=="], - "@pandacss/postcss": ["@pandacss/postcss@1.9.1", "", { "dependencies": { "@pandacss/node": "1.9.1", "postcss": "8.5.6" } }, "sha512-GkFqJORuC2GdcdWHQRave9kLkbY4QIz0AKV+2G+Ud321pR8qlGZTBpp8wJ8nrfpdYkB4mFbN2GZPjJgAhfu38Q=="], + "@pandacss/plugin-vue": ["@pandacss/plugin-vue@1.11.1", "", { "dependencies": { "@pandacss/types": "1.11.1", "@vue/compiler-sfc": "3.5.25", "magic-string": "0.30.21" } }, "sha512-gpyHBaS646ac81dfywP7C8bCl4IugXBDSKk8Y++GsnfKYS8tTTrNlPyEAMMTNM2jx021Br/UDu5Ld7gCOD5XbQ=="], - "@pandacss/preset-base": ["@pandacss/preset-base@1.9.1", "", { "dependencies": { "@pandacss/types": "1.9.1" } }, "sha512-CP2l3ZUzORRZzreMTfjP9YevVIyrILjht8cKYD03fXIHBsCX5EtMMxQCT9RLksW2G7YIFgQNO+W1vlXkbeChCw=="], + "@pandacss/postcss": ["@pandacss/postcss@1.11.1", "", { "dependencies": { "@pandacss/node": "1.11.1", "postcss": "8.5.14" } }, "sha512-1lvuVneRZE2juPmT12SWf5mBzxbOnIMukbhaBdVxct4J03KxnW71PMaj3bDxAAIN77IxXgpA5lI2hIWz5pwJRA=="], - "@pandacss/preset-panda": ["@pandacss/preset-panda@1.9.1", "", { "dependencies": { "@pandacss/types": "1.9.1" } }, "sha512-8YzgAcrzj9O94JVYJQErjIpIO42G+WCSiAuQaaKe1hwlCb/7ECp5fRN1gWnnvy9QNjg500Ur2nW1WFupHCssXA=="], + "@pandacss/preset-base": ["@pandacss/preset-base@1.11.1", "", { "dependencies": { "@pandacss/types": "1.11.1" } }, "sha512-KWMUiJl2/QEoT2Ck2RUZByzUVyP8hfnYKA0ioL7iEDlNVrX2z/MZISTT6ph9UNVlbPP+PhYBmjdATkmAzQNqBw=="], - "@pandacss/reporter": ["@pandacss/reporter@1.9.1", "", { "dependencies": { "@pandacss/core": "1.9.1", "@pandacss/generator": "1.9.1", "@pandacss/logger": "1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/types": "1.9.1", "table": "6.9.0", "wordwrapjs": "5.1.1" } }, "sha512-41VZdUYxT5wFp7Q0FRKf/Hn6VPkwYfU68kkSq6mb1O8q5DXmRR1Oy4lqEs7OtknTu+KOwvgzNqFX1LZY3Pa06g=="], + "@pandacss/preset-panda": ["@pandacss/preset-panda@1.11.1", "", { "dependencies": { "@pandacss/types": "1.11.1" } }, "sha512-+0ZV4d5TZIqbXLh4xRIptuOd/VOc7YncOfeHZn9uWzGKi04uob9I/8mQ/hgSSRWCKmaLpRzsBDuijr2ODD59iA=="], - "@pandacss/shared": ["@pandacss/shared@1.9.1", "", {}, "sha512-z2sGqpw3mi0J1J+QKhfl6aOkhvg7+mhlbOyr8OAwrkeQZibP6k6eSTg+4/nfH1SY7igaK73YqoncP9YAHkVDOw=="], + "@pandacss/reporter": ["@pandacss/reporter@1.11.1", "", { "dependencies": { "@pandacss/core": "1.11.1", "@pandacss/generator": "1.11.1", "@pandacss/logger": "1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/types": "1.11.1", "table": "6.9.0", "wordwrapjs": "5.1.1" } }, "sha512-8F/A7o0MeqYW6ElocfzRvSdja4cs4LXIMQrriHH3c1k8BerLmIs9/sdf2KAwV8fo3CeNmb4blEM8dsrxa6vTrg=="], - "@pandacss/token-dictionary": ["@pandacss/token-dictionary@1.9.1", "", { "dependencies": { "@pandacss/logger": "^1.9.1", "@pandacss/shared": "1.9.1", "@pandacss/types": "1.9.1", "picomatch": "^4.0.0", "ts-pattern": "5.9.0" } }, "sha512-oOIrYGiaOsZHj72LTgeDXrL03+cRgxaXagwUOimFPsQU8/UOB1Sn0ZsbmJmDxfl6uevVWCod12+oX7+UbZs2/A=="], + "@pandacss/shared": ["@pandacss/shared@1.11.1", "", {}, "sha512-5GvoUY2fgjTGDzXgc9joVwUCe6w54QbvgFP96Nnri77QYGmv14VQ5MAH3uS42BylUZ4kxfN9jokmO7vPgMRLBA=="], - "@pandacss/types": ["@pandacss/types@1.9.1", "", {}, "sha512-v7t9+GDBw904KwrexerFZ9Elx/xcc6Hh64iRizAo40qLtpPq4YpLBLOerFtcpUMNICdo0uCbKWnbJOMToNC2NA=="], + "@pandacss/token-dictionary": ["@pandacss/token-dictionary@1.11.1", "", { "dependencies": { "@pandacss/logger": "^1.11.1", "@pandacss/shared": "1.11.1", "@pandacss/types": "1.11.1", "picomatch": "4.0.4", "ts-pattern": "5.9.0" } }, "sha512-qyHe1xMb+KMatuoT6KGl+2qK93qr59puGFHw05nRJ0Ty3QP0oqMGsIzVXOAdYKei1Y/20JOh7y+FJbhDlrQcTw=="], + + "@pandacss/types": ["@pandacss/types@1.11.1", "", {}, "sha512-VkigbeCwlDyyMBlQeRwOMLshSRjNB/2HqvfZvaVXT4+5miAYUAKeQDR88UqUL2aqPWkltTxMVEwBnqSQdC8+jw=="], "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], "@pkgr/core": ["@pkgr/core@0.2.9", "", {}, "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA=="], - "@playwright/test": ["@playwright/test@1.58.2", "", { "dependencies": { "playwright": "1.58.2" }, "bin": { "playwright": "cli.js" } }, "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA=="], + "@playwright/test": ["@playwright/test@1.59.1", "", { "dependencies": { "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" } }, "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg=="], "@popperjs/core": ["@popperjs/core@2.11.8", "", {}, "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="], "@resvg/resvg-wasm": ["@resvg/resvg-wasm@2.4.0", "", {}, "sha512-C7c51Nn4yTxXFKvgh2txJFNweaVcfUPQxwEUFw4aWsCmfiBDJsTSwviIF8EcwjQ6k8bPyMWCl1vw4BdxE569Cg=="], - "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.12", "", { "os": "android", "cpu": "arm64" }, "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA=="], + "@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.0.0-rc.18", "", { "os": "android", "cpu": "arm64" }, "sha512-lIDyUAfD7U3+BWKzdxMbJcsYHuqXqmGz40aeRqvuAm3y5TkJSYTBW2RDrn65DJFPQqVjUAUqq5uz8urzQ8aBdQ=="], - "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.12", "", { "os": "darwin", "cpu": "arm64" }, "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg=="], + "@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.0.0-rc.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-apJq2ktnGp27nSInMR5Vcj8kY6xJzDAvfdIFlpDcAK/w4cDO58qVoi1YQsES/SKiFNge/6e4CUzgjfHduYqWpQ=="], - "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.12", "", { "os": "darwin", "cpu": "x64" }, "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw=="], + "@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.0.0-rc.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-5Ofot8xbs+pxRHJqm9/9N/4sTQOvdrwEsmPE9pdLEEoAbdZtG6F2LMDfO1sp6ZAtXJuJV/21ew2srq3W8NXB5g=="], - "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.12", "", { "os": "freebsd", "cpu": "x64" }, "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q=="], + "@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.0.0-rc.18", "", { "os": "freebsd", "cpu": "x64" }, "sha512-7h8eeOTT1eyqJyx64BFCnWZpNm486hGWt2sqeLLgDxA0xI1oGZ9H7gK1S85uNGmBhkdPwa/6reTxfFFKvIsebw=="], - "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm" }, "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q=="], + "@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.18", "", { "os": "linux", "cpu": "arm" }, "sha512-eRcm/HVt9U/JFu5RKAEKwGQYtDCKWLiaH6wOnsSEp6NMBb/3Os8LgHZlNyzMpFVNmiiMFlfb2zEnebfzJrHFmg=="], - "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg=="], + "@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.0.0-rc.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-SOrT/cT4ukTmgnrEz/Hg3m7LBnuCLW9psDeMKrimRWY4I8DmnO7Lco8W2vtqPmMkbVu8iJ+g4GFLVLLOVjJ9DQ=="], - "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.12", "", { "os": "linux", "cpu": "arm64" }, "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw=="], + "@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.0.0-rc.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-QWjdxN1HJCpBTAcZ5N5F7wju3gVPzRzSpmGzx7na0c/1qpN9CFil+xt+l9lV/1M6/gqHSNXCiqPfwhVJPeLnug=="], - "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "ppc64" }, "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g=="], + "@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.18", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ugCOyj7a4d9h3q9B+wXmf6g3a68UsjGh6dob5DHevHGMwDUbhsYNbSPxJsENcIttJZ9jv7qGM2UesLw5jqIhdg=="], - "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "s390x" }, "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og=="], + "@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.0.0-rc.18", "", { "os": "linux", "cpu": "s390x" }, "sha512-kKWRhbsotpXkGbcd5dllUWg5gEXcDAa8u5YnP9AV5DYNbvJHGzzuwv7dpmhc8NqKMJldl0a+x76IHbspEpEmdA=="], - "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.12", "", { "os": "linux", "cpu": "x64" }, "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg=="], + "@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.0.0-rc.18", "", { "os": "linux", "cpu": "x64" }, "sha512-uCo8ElcCIAMyYAZyuIZ81oFkhTSIllNvUCHCAlbhlN4ji3uC28h7IIdlXyIvGO7HsuqnV9p3rD/bpH7XhIyhRw=="], - "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.12", "", { "os": "linux", "cpu": "x64" }, "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig=="], + "@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.0.0-rc.18", "", { "os": "linux", "cpu": "x64" }, "sha512-XNOQZtuE6yUIvx4rwGemwh8kpL1xvU41FXy/s9K7T/3JVcqGzo3NfKM2HrbrGgfPYGFW42f07Wk++aOC6B9NWA=="], - "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.12", "", { "os": "none", "cpu": "arm64" }, "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA=="], + "@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.0.0-rc.18", "", { "os": "none", "cpu": "arm64" }, "sha512-tSn/kzrfa7tNOXr7sEacDBN4YsIqTyLqh45IO0nHDwtpKIDNDJr+VFojt+4klSpChxB29JLyduSsE0MKEwa65A=="], - "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.12", "", { "dependencies": { "@napi-rs/wasm-runtime": "^1.1.1" }, "cpu": "none" }, "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg=="], + "@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.0.0-rc.18", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "^1.1.4" }, "cpu": "none" }, "sha512-+J9YGmc+czgqlhYmwun3S3O0FIZhsH8ep2456xwjAdIOmuJxM7xz4P4PtrxU+Bz17a/5bqPA8o3HAAoX0teUdg=="], - "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.12", "", { "os": "win32", "cpu": "arm64" }, "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q=="], + "@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.0.0-rc.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-zsu47DgU0FQzSwi6sU9dZoEdUv7pc1AptSEz/Z8HBg54sV0Pbs3N0+CrIbTsgiu6EyoaNN9CHboqbLaz9lhOyQ=="], - "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.12", "", { "os": "win32", "cpu": "x64" }, "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw=="], + "@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.0.0-rc.18", "", { "os": "win32", "cpu": "x64" }, "sha512-7H+3yqGgmnlDTRRhw/xpYY9J1kf4GC681nVc4GqKhExZTDrVVrV2tsOR9kso0fvgBdcTCcQShx4SLLoHgaLwhg=="], - "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.5", "", {}, "sha512-RxlLX/DPoarZ9PtxVrQgZhPoor987YtKQqCo5zkjX+0S0yLJ7Vv515Wk6+xtTL67VONKJKxETWZwuZjss2idYw=="], + "@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.18", "", {}, "sha512-CUY5Mnhe64xQBGZEEXQ5WyZwsc1JU3vAZLIxtrsBt3LO6UOb+C8GunVKqe9sT8NeWb4lqSaoJtp2xo6GxT1MNw=="], "@rollup/pluginutils": ["@rollup/pluginutils@5.3.0", "", { "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", "picomatch": "^4.0.2" }, "peerDependencies": { "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "optionalPeers": ["rollup"] }, "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q=="], - "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.1", "", { "os": "android", "cpu": "arm" }, "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA=="], - - "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.1", "", { "os": "android", "cpu": "arm64" }, "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.60.3", "", { "os": "android", "cpu": "arm" }, "sha512-x35CNW/ANXG3hE/EZpRU8MXX1JDN86hBb2wMGAtltkz7pc6cxgjpy1OMMfDosOQ+2hWqIkag/fGok1Yady9nGw=="], - "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw=="], + "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.60.3", "", { "os": "android", "cpu": "arm64" }, "sha512-xw3xtkDApIOGayehp2+Rz4zimfkaX65r4t47iy+ymQB2G4iJCBBfj0ogVg5jpvjpn8UWn/+q9tprxleYeNp3Hw=="], - "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew=="], + "@rollup/rollup-darwin-arm64": ["@rollup/rollup-darwin-arm64@4.60.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-vo6Y5Qfpx7/5EaamIwi0WqW2+zfiusVihKatLvtN1VFVy3D13uERk/6gZLU1UiHRL6fDXqj/ELIeVRGnvcTE1g=="], - "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.1", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w=="], + "@rollup/rollup-darwin-x64": ["@rollup/rollup-darwin-x64@4.60.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-D+0QGcZhBzTN82weOnsSlY7V7+RMmPuF1CkbxyMAGE8+ZHeUjyb76ZiWmBlCu//AQQONvxcqRbwZTajZKqjuOw=="], - "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g=="], + "@rollup/rollup-freebsd-arm64": ["@rollup/rollup-freebsd-arm64@4.60.3", "", { "os": "freebsd", "cpu": "arm64" }, "sha512-6HnvHCT7fDyj6R0Ph7A6x8dQS/S38MClRWeDLqc0MdfWkxjiu1HSDYrdPhqSILzjTIC/pnXbbJbo+ft+gy/9hQ=="], - "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g=="], + "@rollup/rollup-freebsd-x64": ["@rollup/rollup-freebsd-x64@4.60.3", "", { "os": "freebsd", "cpu": "x64" }, "sha512-KHLgC3WKlUYW3ShFKnnosZDOJ0xjg9zp7au3sIm2bs/tGBeC2ipmvRh/N7JKi0t9Ue20C0dpEshi8WUubg+cnA=="], - "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.1", "", { "os": "linux", "cpu": "arm" }, "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg=="], + "@rollup/rollup-linux-arm-gnueabihf": ["@rollup/rollup-linux-arm-gnueabihf@4.60.3", "", { "os": "linux", "cpu": "arm" }, "sha512-DV6fJoxEYWJOvaZIsok7KrYl0tPvga5OZ2yvKHNNYyk/2roMLqQAbGhr78EQ5YhHpnhLKJD3S1WFusAkmUuV5g=="], - "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ=="], + "@rollup/rollup-linux-arm-musleabihf": ["@rollup/rollup-linux-arm-musleabihf@4.60.3", "", { "os": "linux", "cpu": "arm" }, "sha512-mQKoJAzvuOs6F+TZybQO4GOTSMUu7v0WdxEk24krQ/uUxXoPTtHjuaUuPmFhtBcM4K0ons8nrE3JyhTuCFtT/w=="], - "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA=="], + "@rollup/rollup-linux-arm64-gnu": ["@rollup/rollup-linux-arm64-gnu@4.60.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-Whjj2qoiJ6+OOJMGptTYazaJvjOJm+iKHpXQM1P3LzGjt7Ff++Tp7nH4N8J/BUA7R9IHfDyx4DJIflifwnbmIA=="], - "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ=="], + "@rollup/rollup-linux-arm64-musl": ["@rollup/rollup-linux-arm64-musl@4.60.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-4YTNHKqGng5+yiZt3mg77nmyuCfmNfX4fPmyUapBcIk+BdwSwmCWGXOUxhXbBEkFHtoN5boLj/5NON+u5QC9tg=="], - "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw=="], + "@rollup/rollup-linux-loong64-gnu": ["@rollup/rollup-linux-loong64-gnu@4.60.3", "", { "os": "linux", "cpu": "none" }, "sha512-SU3kNlhkpI4UqlUc2VXPGK9o886ZsSeGfMAX2ba2b8DKmMXq4AL7KUrkSWVbb7koVqx41Yczx6dx5PNargIrEA=="], - "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw=="], + "@rollup/rollup-linux-loong64-musl": ["@rollup/rollup-linux-loong64-musl@4.60.3", "", { "os": "linux", "cpu": "none" }, "sha512-6lDLl5h4TXpB1mTf2rQWnAk/LcXrx9vBfu/DT5TIPhvMhRWaZ5MxkIc8u4lJAmBo6klTe1ywXIUHFjylW505sg=="], - "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg=="], + "@rollup/rollup-linux-ppc64-gnu": ["@rollup/rollup-linux-ppc64-gnu@4.60.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-BMo8bOw8evlup/8G+cj5xWtPyp93xPdyoSN16Zy90Q2QZ0ZYRhCt6ZJSwbrRzG9HApFabjwj2p25TUPDWrhzqQ=="], - "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg=="], + "@rollup/rollup-linux-ppc64-musl": ["@rollup/rollup-linux-ppc64-musl@4.60.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-E0L8X1dZN1/Rph+5VPF6Xj2G7JJvMACVXtamTJIDrVI44Y3K+G8gQaMEAavbqCGTa16InptiVrX6eM6pmJ+7qA=="], - "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.1", "", { "os": "linux", "cpu": "none" }, "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg=="], + "@rollup/rollup-linux-riscv64-gnu": ["@rollup/rollup-linux-riscv64-gnu@4.60.3", "", { "os": "linux", "cpu": "none" }, "sha512-oZJ/WHaVfHUiRAtmTAeo3DcevNsVvH8mbvodjZy7D5QKvCefO371SiKRpxoDcCxB3PTRTLayWBkvmDQKTcX/sw=="], - "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ=="], + "@rollup/rollup-linux-riscv64-musl": ["@rollup/rollup-linux-riscv64-musl@4.60.3", "", { "os": "linux", "cpu": "none" }, "sha512-Dhbyh7j9FybM3YaTgaHmVALwA8AkUwTPccyCQ79TG9AJUsMQqgN1DDEZNr4+QUfwiWvLDumW5vdwzoeUF+TNxQ=="], - "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg=="], + "@rollup/rollup-linux-s390x-gnu": ["@rollup/rollup-linux-s390x-gnu@4.60.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-cJd1X5XhHHlltkaypz1UcWLA8AcoIi1aWhsvaWDskD1oz2eKCypnqvTQ8ykMNI0RSmm7NkTdSqSSD7zM0xa6Ig=="], - "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.1", "", { "os": "linux", "cpu": "x64" }, "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w=="], + "@rollup/rollup-linux-x64-gnu": ["@rollup/rollup-linux-x64-gnu@4.60.3", "", { "os": "linux", "cpu": "x64" }, "sha512-DAZDBHQfG2oQuhY7mc6I3/qB4LU2fQCjRvxbDwd/Jdvb9fypP4IJ4qmtu6lNjes6B531AI8cg1aKC2di97bUxA=="], - "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.1", "", { "os": "openbsd", "cpu": "x64" }, "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw=="], + "@rollup/rollup-linux-x64-musl": ["@rollup/rollup-linux-x64-musl@4.60.3", "", { "os": "linux", "cpu": "x64" }, "sha512-cRxsE8c13mZOh3vP+wLDxpQBRrOHDIGOWyDL93Sy0Ga8y515fBcC2pjUfFwUe5T7tqvTvWbCpg1URM/AXdWIXA=="], - "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.1", "", { "os": "none", "cpu": "arm64" }, "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA=="], + "@rollup/rollup-openbsd-x64": ["@rollup/rollup-openbsd-x64@4.60.3", "", { "os": "openbsd", "cpu": "x64" }, "sha512-QaWcIgRxqEdQdhJqW4DJctsH6HCmo5vHxY0krHSX4jMtOqfzC+dqDGuHM87bu4H8JBeibWx7jFz+h6/4C8wA5Q=="], - "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g=="], + "@rollup/rollup-openharmony-arm64": ["@rollup/rollup-openharmony-arm64@4.60.3", "", { "os": "none", "cpu": "arm64" }, "sha512-AaXwSvUi3QIPtroAUw1t5yHGIyqKEXwH54WUocFolZhpGDruJcs8c+xPNDRn4XiQsS7MEwnYsHW2l0MBLDMkWg=="], - "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg=="], + "@rollup/rollup-win32-arm64-msvc": ["@rollup/rollup-win32-arm64-msvc@4.60.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-65LAKM/bAWDqKNEelHlcHvm2V+Vfb8C6INFxQXRHCvaVN1rJfwr4NvdP4FyzUaLqWfaCGaadf6UbTm8xJeYfEg=="], - "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg=="], + "@rollup/rollup-win32-ia32-msvc": ["@rollup/rollup-win32-ia32-msvc@4.60.3", "", { "os": "win32", "cpu": "ia32" }, "sha512-EEM2gyhBF5MFnI6vMKdX1LAosE627RGBzIoGMdLloPZkXrUN0Ckqgr2Qi8+J3zip/8NVVro3/FjB+tjhZUgUHA=="], - "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ=="], + "@rollup/rollup-win32-x64-gnu": ["@rollup/rollup-win32-x64-gnu@4.60.3", "", { "os": "win32", "cpu": "x64" }, "sha512-E5Eb5H/DpxaoXH++Qkv28RcUJboMopmdDUALBczvHMf7hNIxaDZqwY5lK12UK1BHacSmvupoEWGu+n993Z0y1A=="], - "@rsbuild/core": ["@rsbuild/core@1.7.5", "", { "dependencies": { "@rspack/core": "~1.7.10", "@rspack/lite-tapable": "~1.1.0", "@swc/helpers": "^0.5.20", "core-js": "~3.47.0", "jiti": "^2.6.1" }, "bin": { "rsbuild": "bin/rsbuild.js" } }, "sha512-i37urpoV4y9NSsGiUOuLdoI42KJ5h4gAZ8EG8Ilmsond3bxoAoOCu7YvC+1pJ7p+r16suVPW8cki891ZKHOoXQ=="], + "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.60.3", "", { "os": "win32", "cpu": "x64" }, "sha512-hPt/bgL5cE+Qp+/TPHBqptcAgPzgj46mPcg/16zNUmbQk0j+mOEQV/+Lqu8QRtDV3Ek95Q6FeFITpuhl6OTsAA=="], - "@rsbuild/plugin-react": ["@rsbuild/plugin-react@1.4.6", "", { "dependencies": { "@rspack/plugin-react-refresh": "^1.6.1", "react-refresh": "^0.18.0" }, "peerDependencies": { "@rsbuild/core": "^1.0.0 || ^2.0.0-0" }, "optionalPeers": ["@rsbuild/core"] }, "sha512-LAT6xHlEyZKA0VjF/ph5d50iyG+WSmBx+7g98HNZUwb94VeeTMZFB8qVptTkbIRMss3BNKOXmHOu71Lhsh9oEw=="], + "@rsbuild/core": ["@rsbuild/core@2.0.5", "", { "dependencies": { "@rspack/core": "~2.0.2", "@swc/helpers": "^0.5.21" }, "peerDependencies": { "core-js": ">= 3.0.0" }, "optionalPeers": ["core-js"], "bin": { "rsbuild": "bin/rsbuild.js" } }, "sha512-KajO50hbXb32S8MsyDh2f+xKcVeRy9Gfzdcy0JjpMLj22djHugly6jrGo7jH7ls9X6/TDcyCTncSuNK4+D2lTw=="], - "@rspack/binding": ["@rspack/binding@1.7.10", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "1.7.10", "@rspack/binding-darwin-x64": "1.7.10", "@rspack/binding-linux-arm64-gnu": "1.7.10", "@rspack/binding-linux-arm64-musl": "1.7.10", "@rspack/binding-linux-x64-gnu": "1.7.10", "@rspack/binding-linux-x64-musl": "1.7.10", "@rspack/binding-wasm32-wasi": "1.7.10", "@rspack/binding-win32-arm64-msvc": "1.7.10", "@rspack/binding-win32-ia32-msvc": "1.7.10", "@rspack/binding-win32-x64-msvc": "1.7.10" } }, "sha512-j+DPEaSJLRgasxXNpYQpvC7wUkQF5WoWPiTfm4fLczwlAmYwGSVkJiyWDrOlvVPiGGYiXIaXEjVWTw6fT6/vnA=="], + "@rsbuild/plugin-react": ["@rsbuild/plugin-react@2.0.0", "", { "dependencies": { "@rspack/plugin-react-refresh": "2.0.0", "react-refresh": "^0.18.0" }, "peerDependencies": { "@rsbuild/core": "^2.0.0-0" }, "optionalPeers": ["@rsbuild/core"] }, "sha512-/1gzt39EGUSFEqB83g46QoOwsgv172HI18i6au1b6lgIaX4sv9stuX4ijdHbHCp8PqYEq+MyQ99jIQMO6I+etg=="], - "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@1.7.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-bsXi7I6TpH+a4L6okIUh1JDvwT+XcK/L7Yvhu5G2t5YYyd2fl5vMM5O9cePRpEb0RdqJZ3Z8i9WIWHap9aQ8Gw=="], + "@rspack/binding": ["@rspack/binding@2.0.2", "", { "optionalDependencies": { "@rspack/binding-darwin-arm64": "2.0.2", "@rspack/binding-darwin-x64": "2.0.2", "@rspack/binding-linux-arm64-gnu": "2.0.2", "@rspack/binding-linux-arm64-musl": "2.0.2", "@rspack/binding-linux-x64-gnu": "2.0.2", "@rspack/binding-linux-x64-musl": "2.0.2", "@rspack/binding-wasm32-wasi": "2.0.2", "@rspack/binding-win32-arm64-msvc": "2.0.2", "@rspack/binding-win32-ia32-msvc": "2.0.2", "@rspack/binding-win32-x64-msvc": "2.0.2" } }, "sha512-0kZPplW9GWx8mfC6DfsaRY3QBIYPuUs42JfmSM6aSb8tMHZAXQeLeMB8M+h8i4SeI+aFtCgO6UuYGtyWf7+L+A=="], - "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@1.7.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-h/kOGL1bUflDDYnbiUjaRE9kagJpour4FatGihueV03+cRGQ6jpde+BjUakqzMx65CeDbeYI6jAiPhElnlAtRw=="], + "@rspack/binding-darwin-arm64": ["@rspack/binding-darwin-arm64@2.0.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-0o7lbgBBsDlICWdjIH0q3e0BsSco4GRiImHWVfZSVEG+q2+ykZJvSvYCVhPM1Co375Z0S3VMPa/8SjcY1FHwlw=="], - "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@1.7.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z4reus7UxGM4+JuhiIht8KuGP1KgM7nNhOlXUHcQCMswP/Rymj5oJQN3TDWgijFUZs09ULl8t3T+AQAVTd/WvA=="], + "@rspack/binding-darwin-x64": ["@rspack/binding-darwin-x64@2.0.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-tOwxZpoPlTlRs/w6UyUinXJ4TYRVHMlR7+eQxO1R3muKpixvhXQjtvoaY16HuFyTVky5F0IfOoWr3x9FEsgdLg=="], - "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@1.7.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-LYaoVmWizG4oQ3g+St3eM5qxsyfH07kLirP7NJcDMgvu3eQ29MeyTZ3ugkgW6LvlmJue7eTQyf6CZlanoF5SSg=="], + "@rspack/binding-linux-arm64-gnu": ["@rspack/binding-linux-arm64-gnu@2.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-1ZD4YFhG1rmgqj+W8hfwHyKV8xDxGsc/3KgU0FwmiVEX7JfzhCkgBO/xlCG79kRKSrzuVzt4icO/G3cCKn0pag=="], - "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@1.7.10", "", { "os": "linux", "cpu": "x64" }, "sha512-aIm2G4Kcm3qxDTNqKarK0oaLY2iXnCmpRQQhAcMlR0aS2LmxL89XzVeRr9GFA1MzGrAsZONWCLkxQvn3WUbm4Q=="], + "@rspack/binding-linux-arm64-musl": ["@rspack/binding-linux-arm64-musl@2.0.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-/PtTkM/DsDLjeuXTmeJeRfbjCDbcL9jvoVgZrgxYFZ28y2cdLvbChbW9uigOzs5dQEs1CIBQXMTTj7KhdBTuQg=="], - "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@1.7.10", "", { "os": "linux", "cpu": "x64" }, "sha512-SIHQbAgB9IPH0H3H+i5rN5jo9yA/yTMq8b7XfRkTMvZ7P7MXxJ0dE8EJu3BmCLM19sqnTc2eX+SVfE8ZMDzghA=="], + "@rspack/binding-linux-x64-gnu": ["@rspack/binding-linux-x64-gnu@2.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-bBjsZxMHRaPo6X9SokApm6ucs+UhXtAJFyJJyuk2BH4XJsLeCU9Dz1vMwioeohFbJUUeTASVPm6/BL+RhSaunw=="], - "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@1.7.10", "", { "dependencies": { "@napi-rs/wasm-runtime": "1.0.7" }, "cpu": "none" }, "sha512-J9HDXHD1tj+9FmX4+K3CTkO7dCE2bootlR37YuC2Owc0Lwl1/i2oGT71KHnMqI9faF/hipAaQM5OywkiiuNB7w=="], + "@rspack/binding-linux-x64-musl": ["@rspack/binding-linux-x64-musl@2.0.2", "", { "os": "linux", "cpu": "x64" }, "sha512-HjlpInqzabDNkhVsUJpsHPqa9QYVWBViJoyWNjzXCAW0vKMDvwaphyUvokSinX8FGTlZi/sr5UEaHJo6XtQ35g=="], - "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@1.7.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-FaQGSCXH89nMOYW0bVp0bKQDQbrOEFFm7yedla7g6mkWlFVQo5UyBxid5wJUCqGJBtJepRxeRfByWiaI5nVGvg=="], + "@rspack/binding-wasm32-wasi": ["@rspack/binding-wasm32-wasi@2.0.2", "", { "dependencies": { "@emnapi/core": "1.10.0", "@emnapi/runtime": "1.10.0", "@napi-rs/wasm-runtime": "1.1.4" }, "cpu": "none" }, "sha512-YaRYNFLJRpkGfYjSWR7n9f+nQKtrlmrrffpAn/blc2geHcRvXoBc5SCs1idPtsLhj7H9qWWhs7ucjyHy4csWFg=="], - "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@1.7.10", "", { "os": "win32", "cpu": "ia32" }, "sha512-/66TNLOeM4R5dHhRWRVbMTgWghgxz+32ym0c/zGGXQRoMbz7210EoL40ALUgdBdeeREO8LoV+Mn7v8/QZCwHzw=="], + "@rspack/binding-win32-arm64-msvc": ["@rspack/binding-win32-arm64-msvc@2.0.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-d/3kTEKq+asLjRFPO96t+wfWiM7DLN76VQEPDD9bc1kdsZXlVJBuvyXfsgK8bbEvKplWXYcSsokhmEnuXrLOpg=="], - "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@1.7.10", "", { "os": "win32", "cpu": "x64" }, "sha512-SUa3v1W7PGFCy6AHRmDsm43/tkfaZFi1TN2oIk5aCdT9T51baDVBjAbehRDu9xFbK4piL3k7uqIVSIrKgVqk1g=="], + "@rspack/binding-win32-ia32-msvc": ["@rspack/binding-win32-ia32-msvc@2.0.2", "", { "os": "win32", "cpu": "ia32" }, "sha512-161cWineq3RW+Jdm1FAfSpXeUtYWvhB3kAbm46vNT9h/YYz+spwsFMvveAZ1nsVSVL0IC5lDBGUte7yUAY8K2g=="], - "@rspack/core": ["@rspack/core@1.7.10", "", { "dependencies": { "@module-federation/runtime-tools": "0.22.0", "@rspack/binding": "1.7.10", "@rspack/lite-tapable": "1.1.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@swc/helpers"] }, "sha512-dO7J0aHSa9Fg2kGT0+ZsM500lMdlNIyCHavIaz7dTDn6KXvFz1qbWQ/48x3OlNFw1mA0jxAjjw9e7h3sWQZUNg=="], + "@rspack/binding-win32-x64-msvc": ["@rspack/binding-win32-x64-msvc@2.0.2", "", { "os": "win32", "cpu": "x64" }, "sha512-y7Q0S1FE+OlkL5GMqLG0PwxrPw6E1r892KhGrGKE1Vdufe5YTEx6xTPxzZ+b7N2KPD7s9G1/iJmWHQxb1+Bjkg=="], - "@rspack/lite-tapable": ["@rspack/lite-tapable@1.1.0", "", {}, "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw=="], + "@rspack/core": ["@rspack/core@2.0.2", "", { "dependencies": { "@rspack/binding": "2.0.2" }, "peerDependencies": { "@module-federation/runtime-tools": "^0.24.1 || ^2.0.0", "@swc/helpers": ">=0.5.1" }, "optionalPeers": ["@module-federation/runtime-tools", "@swc/helpers"] }, "sha512-VM3UHOo26uC+4QSqY5tU1ybI7KuXY5rTof8nhFOaBY9SYau0Smvr+hMSAPmrmHwknB6dXT8yaNVxrj7I+qxE1Q=="], - "@rspack/plugin-react-refresh": ["@rspack/plugin-react-refresh@1.6.1", "", { "dependencies": { "error-stack-parser": "^2.1.4", "html-entities": "^2.6.0" }, "peerDependencies": { "react-refresh": ">=0.10.0 <1.0.0", "webpack-hot-middleware": "2.x" }, "optionalPeers": ["webpack-hot-middleware"] }, "sha512-eqqW5645VG3CzGzFgNg5HqNdHVXY+567PGjtDhhrM8t67caxmsSzRmT5qfoEIfBcGgFkH9vEg7kzXwmCYQdQDw=="], + "@rspack/plugin-react-refresh": ["@rspack/plugin-react-refresh@2.0.0", "", { "peerDependencies": { "@rspack/core": "^2.0.0-0", "react-refresh": ">=0.10.0 <1.0.0" }, "optionalPeers": ["@rspack/core"] }, "sha512-Cf6CxBStNDJbiXMc/GmsvG1G8PRlUpa0MSfWsMTI+e8npzuTN/p8nwLs3shriBZOLciqgkSZpBtPTd10BLpj1g=="], "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="], - "@rushstack/node-core-library": ["@rushstack/node-core-library@5.20.3", "", { "dependencies": { "ajv": "~8.18.0", "ajv-draft-04": "~1.0.0", "ajv-formats": "~3.0.1", "fs-extra": "~11.3.0", "import-lazy": "~4.0.0", "jju": "~1.4.0", "resolve": "~1.22.1", "semver": "~7.5.4" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-95JgEPq2k7tHxhF9/OJnnyHDXfC9cLhhta0An/6MlkDsX2A6dTzDrTUG18vx4vjc280V0fi0xDH9iQczpSuWsw=="], - - "@rushstack/problem-matcher": ["@rushstack/problem-matcher@0.2.1", "", { "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-gulfhBs6n+I5b7DvjKRfhMGyUejtSgOHTclF/eONr8hcgF1APEDjhxIsfdUYYMzC3rvLwGluqLjbwCFZ8nxrog=="], - - "@rushstack/rig-package": ["@rushstack/rig-package@0.7.2", "", { "dependencies": { "resolve": "~1.22.1", "strip-json-comments": "~3.1.1" } }, "sha512-9XbFWuqMYcHUso4mnETfhGVUSaADBRj6HUAAEYk50nMPn8WRICmBuCphycQGNB3duIR6EEZX3Xj3SYc2XiP+9A=="], - - "@rushstack/terminal": ["@rushstack/terminal@0.22.3", "", { "dependencies": { "@rushstack/node-core-library": "5.20.3", "@rushstack/problem-matcher": "0.2.1", "supports-color": "~8.1.1" }, "peerDependencies": { "@types/node": "*" }, "optionalPeers": ["@types/node"] }, "sha512-gHC9pIMrUPzAbBiI4VZMU7Q+rsCzb8hJl36lFIulIzoceKotyKL3Rd76AZ2CryCTKEg+0bnTj406HE5YY5OQvw=="], - - "@rushstack/ts-command-line": ["@rushstack/ts-command-line@5.3.3", "", { "dependencies": { "@rushstack/terminal": "0.22.3", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" } }, "sha512-c+ltdcvC7ym+10lhwR/vWiOhsrm/bP3By2VsFcs5qTKv+6tTmxgbVrtJ5NdNjANiV5TcmOZgUN+5KYQ4llsvEw=="], - "@shuding/opentype.js": ["@shuding/opentype.js@1.4.0-beta.0", "", { "dependencies": { "fflate": "^0.7.3", "string.prototype.codepointat": "^0.2.1" }, "bin": { "ot": "bin/ot" } }, "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA=="], - "@storybook/addon-docs": ["@storybook/addon-docs@10.3.3", "", { "dependencies": { "@mdx-js/react": "^3.0.0", "@storybook/csf-plugin": "10.3.3", "@storybook/icons": "^2.0.1", "@storybook/react-dom-shim": "10.3.3", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^10.3.3" } }, "sha512-trJQTpOtuOEuNv1Rn8X2Sopp5hSPpb0u0soEJ71BZAbxe4d2Y1d/1MYcxBdRKwncum6sCTsnxTpqQ/qvSJKlTQ=="], + "@storybook/addon-docs": ["@storybook/addon-docs@10.3.6", "", { "dependencies": { "@mdx-js/react": "^3.0.0", "@storybook/csf-plugin": "10.3.6", "@storybook/icons": "^2.0.1", "@storybook/react-dom-shim": "10.3.6", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^10.3.6" } }, "sha512-TvIdADVPtauxW0LzXIpIv7X6GxwetorhyNh+6+7MHC27XSBCWVxxRUwL63YeLlHTuXsIk0quG3b1xgwVRzWOJA=="], - "@storybook/addon-onboarding": ["@storybook/addon-onboarding@10.3.3", "", { "peerDependencies": { "storybook": "^10.3.3" } }, "sha512-HZiHfXdcLc29WkYFW+1VAMtJCeAZOOLRYPvs97woJUcZqW8yfWEJ9MWH+j++736SFAv2aqZWNmP47OdBJ/kMkw=="], + "@storybook/addon-onboarding": ["@storybook/addon-onboarding@10.3.6", "", { "peerDependencies": { "storybook": "^10.3.6" } }, "sha512-Tys9eOFzCkBygfDWVRa2hpTQI5Y1HQt9ybkJIHdR16GASQ3fhyXVULHVRmGQLEGN+3n84JGvlU8CN9S/OBB1IQ=="], - "@storybook/builder-vite": ["@storybook/builder-vite@10.3.3", "", { "dependencies": { "@storybook/csf-plugin": "10.3.3", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^10.3.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-awspKCTZvXyeV3KabL0id62mFbxR5u/5yyGQultwCiSb2/yVgBfip2MAqLyS850pvTiB6QFVM9deOyd2/G/bEA=="], + "@storybook/builder-vite": ["@storybook/builder-vite@10.3.6", "", { "dependencies": { "@storybook/csf-plugin": "10.3.6", "ts-dedent": "^2.0.0" }, "peerDependencies": { "storybook": "^10.3.6", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-gpvR/sE4BcrFtmQZ+Ker7zD23oQzoVeqD9nF6cK6yzY+Q0svJXyX2EPmFG4y+EwygD5/vNzDpP84gGMut8VRwg=="], - "@storybook/csf-plugin": ["@storybook/csf-plugin@10.3.3", "", { "dependencies": { "unplugin": "^2.3.5" }, "peerDependencies": { "esbuild": "*", "rollup": "*", "storybook": "^10.3.3", "vite": "*", "webpack": "*" }, "optionalPeers": ["esbuild", "rollup", "vite", "webpack"] }, "sha512-Utlh7zubm+4iOzBBfzLW4F4vD99UBtl2Do4edlzK2F7krQIcFvR2ontjAE8S1FQVLZAC3WHalCOS+Ch8zf3knA=="], + "@storybook/csf-plugin": ["@storybook/csf-plugin@10.3.6", "", { "dependencies": { "unplugin": "^2.3.5" }, "peerDependencies": { "esbuild": "*", "rollup": "*", "storybook": "^10.3.6", "vite": "*", "webpack": "*" }, "optionalPeers": ["esbuild", "rollup", "vite", "webpack"] }, "sha512-9kBf7VRdRqTSIYo+rPtVn5yjYYyK8kP2QhEYx3oiXvfwy4RexmbJnhk/tXa/lNiTqukA1TqaWQ2+5MqF4fu6YQ=="], "@storybook/global": ["@storybook/global@5.0.0", "", {}, "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ=="], - "@storybook/icons": ["@storybook/icons@2.0.1", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-/smVjw88yK3CKsiuR71vNgWQ9+NuY2L+e8X7IMrFjexjm6ZR8ULrV2DRkTA61aV6ryefslzHEGDInGpnNeIocg=="], + "@storybook/icons": ["@storybook/icons@2.0.2", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-KZBCpXsshAIjczYNXR/rlxEtCUX/eAbpFNwKi8bcOomrLA4t/SyPz5RF+lVPO2oZBUE4sAkt43mfJUevQDSEEw=="], - "@storybook/react": ["@storybook/react@10.3.3", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/react-dom-shim": "10.3.3", "react-docgen": "^8.0.2", "react-docgen-typescript": "^2.2.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.3.3", "typescript": ">= 4.9.x" }, "optionalPeers": ["typescript"] }, "sha512-cGG5TbR8Tdx9zwlpsWyBEfWrejm5iWdYF26EwIhwuKq9GFUTAVrQzo0Rs7Tqc3ZyVhRS/YfsRiWSEH+zmq2JiQ=="], + "@storybook/react": ["@storybook/react@10.3.6", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/react-dom-shim": "10.3.6", "react-docgen": "^8.0.2", "react-docgen-typescript": "^2.2.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.3.6", "typescript": ">= 4.9.x" }, "optionalPeers": ["typescript"] }, "sha512-oZQZ6xayWe5IdHmFUTL0TL8rX/gpNNh9gWhT2vzW5eeUvlkVG/RBKdsja6Ndrk2s1D9vcnwiI6r6CNXy3IEEmg=="], - "@storybook/react-dom-shim": ["@storybook/react-dom-shim@10.3.3", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.3.3" } }, "sha512-lkhuh4G3UTreU9M3Iz5Dt32c6U+l/4XuvqLtbe1sDHENZH6aPj7y0b5FwnfHyvuTvYRhtbo29xZrF5Bp9kCC0w=="], + "@storybook/react-dom-shim": ["@storybook/react-dom-shim@10.3.6", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.3.6" } }, "sha512-/Tu1gPu+Fw+zOnAGmxRmOD30FX3a04LxcTAKflEtdpmtIMVR5bA3qpjy+f5YhoyDCecbXyKmL1OeIU2FIIZHqQ=="], - "@storybook/react-vite": ["@storybook/react-vite@10.3.3", "", { "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.6.4", "@rollup/pluginutils": "^5.0.2", "@storybook/builder-vite": "10.3.3", "@storybook/react": "10.3.3", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", "resolve": "^1.22.8", "tsconfig-paths": "^4.2.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.3.3", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-qHdlBe1hjqFAGXa8JL7bWTLbP/gDqXbWDm+SYCB646NHh5yvVDkZLwigP5Y+UL7M2ASfqFtosnroUK9tcCM2dw=="], + "@storybook/react-vite": ["@storybook/react-vite@10.3.6", "", { "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "^0.7.0", "@rollup/pluginutils": "^5.0.2", "@storybook/builder-vite": "10.3.6", "@storybook/react": "10.3.6", "empathic": "^2.0.0", "magic-string": "^0.30.0", "react-docgen": "^8.0.0", "resolve": "^1.22.8", "tsconfig-paths": "^4.2.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "storybook": "^10.3.6", "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-tySQRc+8q7V2NkylQMNJjDV8zXy6tkxb8oDqw/DIhHhI9Xn77MTKVZ8Cihbo5NMm7HYTB6xDKr6wqdSMgdufYQ=="], - "@stylexjs/babel-plugin": ["@stylexjs/babel-plugin@0.18.2", "", { "dependencies": { "@babel/core": "^7.26.8", "@babel/helper-module-imports": "^7.25.9", "@babel/traverse": "^7.26.8", "@babel/types": "^7.26.8", "@dual-bundle/import-meta-resolve": "^4.1.0", "@stylexjs/shared": "0.18.2", "@stylexjs/stylex": "0.18.2", "postcss-value-parser": "^4.1.0" } }, "sha512-vmdk1DGiMBuz4hKjXh3KiM+E065OE115GZTNrK9icak0wYAgzpF6K/hExBSwS+yjiH/c3p+6tfN7G9UJPet1gA=="], + "@stylexjs/babel-plugin": ["@stylexjs/babel-plugin@0.18.3", "", { "dependencies": { "@babel/core": "^7.26.8", "@babel/helper-module-imports": "^7.25.9", "@babel/traverse": "^7.26.8", "@babel/types": "^7.26.8", "@dual-bundle/import-meta-resolve": "^4.1.0", "@stylexjs/shared": "0.18.3", "@stylexjs/stylex": "0.18.3", "postcss-value-parser": "^4.1.0" } }, "sha512-5VeMIChNaXWlizLUL6c7WrMfuhydHXl3ASTlbj3O0qlEkNOlcgZMH3zzZ0iUrOSFTSgbHAOWUsVJKX5bFeZk4A=="], - "@stylexjs/eslint-plugin": ["@stylexjs/eslint-plugin@0.18.2", "", { "dependencies": { "@csstools/css-tokenizer": "^3.0.3", "@stylexjs/shared": "0.18.2", "micromatch": "^4.0.5", "postcss-value-parser": "^4.2.0" } }, "sha512-4eeAdsKJJM7j+Me4ADTrwKubsEynn7PiLC2ronuar/iI/GExzcl5eUqrGMuXFukt2cv2AtjXs4txqvtPV3j8pg=="], + "@stylexjs/eslint-plugin": ["@stylexjs/eslint-plugin@0.18.3", "", { "dependencies": { "@csstools/css-tokenizer": "^3.0.3", "@stylexjs/shared": "0.18.3", "micromatch": "^4.0.5", "postcss-value-parser": "^4.2.0" } }, "sha512-EHRBi0GkdlZFbO5/ZkBc7o5gIzMT7240Q8ebqkZIvZjQ2IbNajt25fHflv6nZ6kVxxKntJNQxn6hsJAANG0iDg=="], "@stylexjs/nextjs-plugin": ["@stylexjs/nextjs-plugin@0.11.1", "", { "dependencies": { "@babel/core": "^7.26.8", "@babel/plugin-syntax-flow": "^7.26.0", "@babel/plugin-syntax-jsx": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9", "@stylexjs/babel-plugin": "0.11.1" }, "peerDependencies": { "next": ">=14.0.1 || >=15.0.0 || 15.0.0-rc.0" } }, "sha512-42mJGw9W3i9cRrChv25JCMGvWhCVVcmt1EqgOgRMy3XTH45Ehd9TkwDiVmhknvSEDKxw+ib3AiSPjZ1ehZ9d6A=="], "@stylexjs/open-props": ["@stylexjs/open-props@0.11.1", "", { "dependencies": { "@stylexjs/stylex": "0.11.1" } }, "sha512-UYeJV34LOmDZ1igQknB+iM3JMg+lbncHr/zG7i1tBwwQslNNWOMM7iR4hwSUvczQYcW5G8vMAorP/2j4T8XBjA=="], - "@stylexjs/shared": ["@stylexjs/shared@0.18.2", "", {}, "sha512-CnHG0MWwtQt9DwP0ogl6C19fnKJtMcJq37vTyrfhlz9GOycdDh28Yza0flKikGUF5lQOmknatopwi1Y9XTxTzQ=="], + "@stylexjs/shared": ["@stylexjs/shared@0.18.3", "", {}, "sha512-g72AKGGhLTFsaez19zod2je9IQeaub2eM85jwJPvfmxymKW8Aleoxm5/pYIsnyxx3MZNOB5AVN6khfo90f9Lgw=="], - "@stylexjs/stylex": ["@stylexjs/stylex@0.18.2", "", { "dependencies": { "css-mediaquery": "^0.1.2", "invariant": "^2.2.4", "styleq": "0.2.1" } }, "sha512-wXYe9MBlxE9Lz26KbbM9vwKy746sJWe6NdhY+573KMjcEbrswjFU+121b7TeBAc8gcvC5DOUzDOlBrT3N2xsxA=="], + "@stylexjs/stylex": ["@stylexjs/stylex@0.18.3", "", { "dependencies": { "css-mediaquery": "^0.1.2", "invariant": "^2.2.4", "styleq": "0.2.1" } }, "sha512-15gDzAJAorOE0yzxaWLNxldW2aqdmCiLG5QcPD8nmVCVqvrWp0Asgv45zk7LtN86WJb/4Ym9eQ6qT5MJW59tWQ=="], - "@swc/core": ["@swc/core@1.15.21", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.25" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.15.21", "@swc/core-darwin-x64": "1.15.21", "@swc/core-linux-arm-gnueabihf": "1.15.21", "@swc/core-linux-arm64-gnu": "1.15.21", "@swc/core-linux-arm64-musl": "1.15.21", "@swc/core-linux-ppc64-gnu": "1.15.21", "@swc/core-linux-s390x-gnu": "1.15.21", "@swc/core-linux-x64-gnu": "1.15.21", "@swc/core-linux-x64-musl": "1.15.21", "@swc/core-win32-arm64-msvc": "1.15.21", "@swc/core-win32-ia32-msvc": "1.15.21", "@swc/core-win32-x64-msvc": "1.15.21" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-fkk7NJcBscrR3/F8jiqlMptRHP650NxqDnspBMrRe5d8xOoCy9MLL5kOBLFXjFLfMo3KQQHhk+/jUULOMlR1uQ=="], + "@swc/core": ["@swc/core@1.15.33", "", { "dependencies": { "@swc/counter": "^0.1.3", "@swc/types": "^0.1.26" }, "optionalDependencies": { "@swc/core-darwin-arm64": "1.15.33", "@swc/core-darwin-x64": "1.15.33", "@swc/core-linux-arm-gnueabihf": "1.15.33", "@swc/core-linux-arm64-gnu": "1.15.33", "@swc/core-linux-arm64-musl": "1.15.33", "@swc/core-linux-ppc64-gnu": "1.15.33", "@swc/core-linux-s390x-gnu": "1.15.33", "@swc/core-linux-x64-gnu": "1.15.33", "@swc/core-linux-x64-musl": "1.15.33", "@swc/core-win32-arm64-msvc": "1.15.33", "@swc/core-win32-ia32-msvc": "1.15.33", "@swc/core-win32-x64-msvc": "1.15.33" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" }, "optionalPeers": ["@swc/helpers"] }, "sha512-jOlwnFV2xhuuZeAUILGFULeR6vDPfijEJ57evfocwznQldLU3w2cZ9bSDryY9ip+AsM3r1NJKzf47V2NXebkeQ=="], - "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.15.21", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SA8SFg9dp0qKRH8goWsax6bptFE2EdmPf2YRAQW9WoHGf3XKM1bX0nd5UdwxmC5hXsBUZAYf7xSciCler6/oyA=="], + "@swc/core-darwin-arm64": ["@swc/core-darwin-arm64@1.15.33", "", { "os": "darwin", "cpu": "arm64" }, "sha512-N+L0uXhuO7FIfzqwgxmzv0zIpV0qEp8wPX3QQs2p4atjMoywup2JTeDlXPw+z9pWJGCae3JjM+tZ6myclI+2gA=="], - "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.15.21", "", { "os": "darwin", "cpu": "x64" }, "sha512-//fOVntgowz9+V90lVsNCtyyrtbHp3jWH6Rch7MXHXbcvbLmbCTmssl5DeedUWLLGiAAW1wksBdqdGYOTjaNLw=="], + "@swc/core-darwin-x64": ["@swc/core-darwin-x64@1.15.33", "", { "os": "darwin", "cpu": "x64" }, "sha512-/Il4QHSOhV4FekbsDtkrNmKbsX26oSysvgrRswa/RYOHXAkwXDbB4jaeKq6PsJLSPkzJ2KzQ061gtBnk0vNHfA=="], - "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.15.21", "", { "os": "linux", "cpu": "arm" }, "sha512-meNI4Sh6h9h8DvIfEc0l5URabYMSuNvyisLmG6vnoYAS43s8ON3NJR8sDHvdP7NJTrLe0q/x2XCn6yL/BeHcZg=="], + "@swc/core-linux-arm-gnueabihf": ["@swc/core-linux-arm-gnueabihf@1.15.33", "", { "os": "linux", "cpu": "arm" }, "sha512-C64hBnBxq4viOPQ8hlx+2lJ23bzZBGnjw7ryALmS+0Q3zHmwO8lw1/DArLENw4Q18/0w5wdEO1k3m1wWNtKGqQ=="], - "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.15.21", "", { "os": "linux", "cpu": "arm64" }, "sha512-QrXlNQnHeXqU2EzLlnsPoWEh8/GtNJLvfMiPsDhk+ht6Xv8+vhvZ5YZ/BokNWSIZiWPKLAqR0M7T92YF5tmD3g=="], + "@swc/core-linux-arm64-gnu": ["@swc/core-linux-arm64-gnu@1.15.33", "", { "os": "linux", "cpu": "arm64" }, "sha512-TRJfnJbX3jqpxRDRoieMzRiCBS5jOmXNb3iQXmcgjFEHKLnAgK1RZRU8Cq1MsPqO4jAJp/ld1G4O3fXuxv85uw=="], - "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.15.21", "", { "os": "linux", "cpu": "arm64" }, "sha512-8/yGCMO333ultDaMQivE5CjO6oXDPeeg1IV4sphojPkb0Pv0i6zvcRIkgp60xDB+UxLr6VgHgt+BBgqS959E9g=="], + "@swc/core-linux-arm64-musl": ["@swc/core-linux-arm64-musl@1.15.33", "", { "os": "linux", "cpu": "arm64" }, "sha512-il7tYM+CpUNzieQbwAjFT1P8zqAhmGWNAGhQZBnxurXZ0aNn+5nqYFTEUKNZl7QibtT0uQXzTZrNGHCIj6Y1Og=="], - "@swc/core-linux-ppc64-gnu": ["@swc/core-linux-ppc64-gnu@1.15.21", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ucW0HzPx0s1dgRvcvuLSPSA/2Kk/VYTv9st8qe1Kc22Gu0Q0rH9+6TcBTmMuNIp0Xs4BPr1uBttmbO1wEGI49Q=="], + "@swc/core-linux-ppc64-gnu": ["@swc/core-linux-ppc64-gnu@1.15.33", "", { "os": "linux", "cpu": "ppc64" }, "sha512-ZtNBwN0Z7CFj9Il0FcPaKdjgP7URyKu/3RfH46vq+0paOBqLj4NYldD6Qo//Duif/7IOtAraUfDOmp0PLAufog=="], - "@swc/core-linux-s390x-gnu": ["@swc/core-linux-s390x-gnu@1.15.21", "", { "os": "linux", "cpu": "s390x" }, "sha512-ulTnOGc5I7YRObE/9NreAhQg94QkiR5qNhhcUZ1iFAYjzg/JGAi1ch+s/Ixe61pMIr8bfVrF0NOaB0f8wjaAfA=="], + "@swc/core-linux-s390x-gnu": ["@swc/core-linux-s390x-gnu@1.15.33", "", { "os": "linux", "cpu": "s390x" }, "sha512-De1IyajoOmhOYYjw/lx66bKlyDpHZTueqwpDrWgf5O7T6d1ODeJJO9/OqMBmrBQc5C+dNnlmIufHsp4QVCWufA=="], - "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.15.21", "", { "os": "linux", "cpu": "x64" }, "sha512-D0RokxtM+cPvSqJIKR6uja4hbD+scI9ezo95mBhfSyLUs9wnPPl26sLp1ZPR/EXRdYm3F3S6RUtVi+8QXhT24Q=="], + "@swc/core-linux-x64-gnu": ["@swc/core-linux-x64-gnu@1.15.33", "", { "os": "linux", "cpu": "x64" }, "sha512-mGTH0YxmUN+x6vRN/I6NOk5X0ogNktkwPnJ94IMvR7QjhRDwL0O8RXEDhyUM0YtwWrryBOqaJQBX4zruxEPRGw=="], - "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.15.21", "", { "os": "linux", "cpu": "x64" }, "sha512-nER8u7VeRfmU6fMDzl1NQAbbB/G7O2avmvCOwIul1uGkZ2/acbPH+DCL9h5+0yd/coNcxMBTL6NGepIew+7C2w=="], + "@swc/core-linux-x64-musl": ["@swc/core-linux-x64-musl@1.15.33", "", { "os": "linux", "cpu": "x64" }, "sha512-hj628ZkSEJf6zMf5VMbYrG2O6QqyTIp2qwY6VlCjvIa9lAEZ5c2lfPblCLVGYubTeLJDxadLB/CxqQYOQABeEQ=="], - "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.15.21", "", { "os": "win32", "cpu": "arm64" }, "sha512-+/AgNBnjYugUA8C0Do4YzymgvnGbztv7j8HKSQLvR/DQgZPoXQ2B3PqB2mTtGh/X5DhlJWiqnunN35JUgWcAeQ=="], + "@swc/core-win32-arm64-msvc": ["@swc/core-win32-arm64-msvc@1.15.33", "", { "os": "win32", "cpu": "arm64" }, "sha512-GV2oohtN2/5+KSccl86VULu3aT+LrISC8uzgSq0FRnikpD+Zwc+sBlXmoKQ+Db6jI57ITUOIB8jRkdGMABC29g=="], - "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.15.21", "", { "os": "win32", "cpu": "ia32" }, "sha512-IkSZj8PX/N4HcaFhMQtzmkV8YSnuNoJ0E6OvMwFiOfejPhiKXvl7CdDsn1f4/emYEIDO3fpgZW9DTaCRMDxaDA=="], + "@swc/core-win32-ia32-msvc": ["@swc/core-win32-ia32-msvc@1.15.33", "", { "os": "win32", "cpu": "ia32" }, "sha512-gtyvzSNR8DHKfFEA2uqb8Ld1myqi6uEg2jyeUq3ikn5ytYs7H8RpZYC8mdy4NXr8hfcdJfCLXPlYaqqfBXpoEQ=="], - "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.15.21", "", { "os": "win32", "cpu": "x64" }, "sha512-zUyWso7OOENB6e1N1hNuNn8vbvLsTdKQ5WKLgt/JcBNfJhKy/6jmBmqI3GXk/MyvQKd5SLvP7A0F36p7TeDqvw=="], + "@swc/core-win32-x64-msvc": ["@swc/core-win32-x64-msvc@1.15.33", "", { "os": "win32", "cpu": "x64" }, "sha512-d6fRqQSkJI+kmMEBWaDQ7TMl8+YjLYbwRUPZQ9DY0ORBJeTzOrG0twvfvlZ2xgw6jA0ScQKgfBm4vHLSLl5Hqg=="], "@swc/counter": ["@swc/counter@0.1.3", "", {}, "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ=="], @@ -1330,37 +1308,37 @@ "@swc/types": ["@swc/types@0.1.26", "", { "dependencies": { "@swc/counter": "^0.1.3" } }, "sha512-lyMwd7WGgG79RS7EERZV3T8wMdmPq3xwyg+1nmAM64kIhx5yl+juO2PYIHb7vTiPgPCj8LYjsNV2T5wiQHUEaw=="], - "@tailwindcss/node": ["@tailwindcss/node@4.2.2", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.2" } }, "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA=="], + "@tailwindcss/node": ["@tailwindcss/node@4.3.0", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.21.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.3.0" } }, "sha512-aFb4gUhFOgdh9AXo4IzBEOzBkkAxm9VigwDJnMIYv3lcfXCJVesNfbEaBl4BNgVRyid92AmdviqwBUBRKSeY3g=="], - "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.2", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.2", "@tailwindcss/oxide-darwin-arm64": "4.2.2", "@tailwindcss/oxide-darwin-x64": "4.2.2", "@tailwindcss/oxide-freebsd-x64": "4.2.2", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", "@tailwindcss/oxide-linux-x64-musl": "4.2.2", "@tailwindcss/oxide-wasm32-wasi": "4.2.2", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" } }, "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg=="], + "@tailwindcss/oxide": ["@tailwindcss/oxide@4.3.0", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.3.0", "@tailwindcss/oxide-darwin-arm64": "4.3.0", "@tailwindcss/oxide-darwin-x64": "4.3.0", "@tailwindcss/oxide-freebsd-x64": "4.3.0", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.0", "@tailwindcss/oxide-linux-arm64-gnu": "4.3.0", "@tailwindcss/oxide-linux-arm64-musl": "4.3.0", "@tailwindcss/oxide-linux-x64-gnu": "4.3.0", "@tailwindcss/oxide-linux-x64-musl": "4.3.0", "@tailwindcss/oxide-wasm32-wasi": "4.3.0", "@tailwindcss/oxide-win32-arm64-msvc": "4.3.0", "@tailwindcss/oxide-win32-x64-msvc": "4.3.0" } }, "sha512-F7HZGBeN9I0/AuuJS5PwcD8xayx5ri5GhjYUDBEVYUkexyA/giwbDNjRVrxSezE3T250OU2K/wp/ltWx3UOefg=="], - "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.2", "", { "os": "android", "cpu": "arm64" }, "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg=="], + "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.3.0", "", { "os": "android", "cpu": "arm64" }, "sha512-TJPiq67tKlLuObP6RkwvVGDoxCMBVtDgKkLfa/uyj7/FyxvQwHS+UOnVrXXgbEsfUaMgiVvC4KbJnRr26ho4Ng=="], - "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg=="], + "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.3.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-oMN/WZRb+SO37BmUElEgeEWuU8E/HXRkiODxJxLe1UTHVXLrdVSgfaJV7pSlhRGMSOiXLuxTIjfsF3wYvz8cgQ=="], - "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw=="], + "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.3.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-N6CUmu4a6bKVADfw77p+iw6Yd9Q3OBhe0veaDX+QazfuVYlQsHfDgxBrsjQ/IW+zywL8mTrNd0SdJT/zgtvMdA=="], - "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ=="], + "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.3.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-zDL5hBkQdH5C6MpqbK3gQAgP80tsMwSI26vjOzjJtNCMUo0lFgOItzHKBIupOZNQxt3ouPH7RPhvNhiTfCe5CQ=="], - "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2", "", { "os": "linux", "cpu": "arm" }, "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ=="], + "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.3.0", "", { "os": "linux", "cpu": "arm" }, "sha512-R06HdNi7A7OEoMsf6d4tjZ71RCWnZQPHj2mnotSFURjNLdBC+cIgXQ7l81CqeoiQftjf6OOblxXMInMgN2VzMA=="], - "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw=="], + "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-qTJHELX8jetjhRQHCLilkVLmybpzNQAtaI/gaoVoidn/ufbNDbAo8KlK2J+yPoc8wQxvDxCmh/5lr8nC1+lTbg=="], - "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag=="], + "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.3.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-Z6sukiQsngnWO+l39X4pPbiWT81IC+PLKF+PHxIlyZbGNb9MODfYlXEVlFvej5BOZInWX01kVyzeLvHsXhfczQ=="], - "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg=="], + "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-DRNdQRpSGzRGfARVuVkxvM8Q12nh19l4BF/G7zGA1oe+9wcC6saFBHTISrpIcKzhiXtSrlSrluCfvMuledoCTQ=="], - "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ=="], + "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.3.0", "", { "os": "linux", "cpu": "x64" }, "sha512-Z0IADbDo8bh6I7h2IQMx601AdXBLfFpEdUotft86evd/8ZPflZe9COPO8Q1vw+pfLWIUo9zN/JGZvwuAJqduqg=="], - "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.2", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q=="], + "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.3.0", "", { "dependencies": { "@emnapi/core": "^1.10.0", "@emnapi/runtime": "^1.10.0", "@emnapi/wasi-threads": "^1.2.1", "@napi-rs/wasm-runtime": "^1.1.4", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-HNZGOUxEmElksYR7S6sC5jTeNGpobAsy9u7Gu0AskJ8/20FR9GqebUyB+HBcU/ax6BHuiuJi+Oda4B+YX6H1yA=="], - "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ=="], + "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.3.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-Pe+RPVTi1T+qymuuRpcdvwSVZjnll/f7n8gBxMMh3xLTctMDKqpdfGimbMyioqtLhUYZxdJ9wGNhV7MKHvgZsQ=="], - "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.2", "", { "os": "win32", "cpu": "x64" }, "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA=="], + "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.3.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Mvrf2kXW/yeW/OTezZlCGOirXRcUuLIBx/5Y12BaPM7wJoryG6dfS/NJL8aBPqtTEx/Vm4T4vKzFUcKDT+TKUA=="], - "@tailwindcss/postcss": ["@tailwindcss/postcss@4.2.2", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.2.2", "@tailwindcss/oxide": "4.2.2", "postcss": "^8.5.6", "tailwindcss": "4.2.2" } }, "sha512-n4goKQbW8RVXIbNKRB/45LzyUqN451deQK0nzIeauVEqjlI49slUlgKYJM2QyUzap/PcpnS7kzSUmPb1sCRvYQ=="], + "@tailwindcss/postcss": ["@tailwindcss/postcss@4.3.0", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.3.0", "@tailwindcss/oxide": "4.3.0", "postcss": "^8.5.10", "tailwindcss": "4.3.0" } }, "sha512-Jm05Tjx+9yCLGv5qw1c+84Psds8MnyrEQYCB+FFk2lgGiUjlRqdxke4mVTuYrj2xnVZqKim2Apr5ySuQRYAw/w=="], - "@tanstack/eslint-plugin-query": ["@tanstack/eslint-plugin-query@5.95.2", "", { "dependencies": { "@typescript-eslint/utils": "^8.48.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": "^5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-EYUFRaqjBep4EHMPpZR12sXP7Kr5qv9iDIlq93NfbhHwhITaW6Txu3ROO6dLFz5r84T8p+oZXBG77pa2Wuok7A=="], + "@tanstack/eslint-plugin-query": ["@tanstack/eslint-plugin-query@5.100.9", "", { "dependencies": { "@typescript-eslint/utils": "^8.58.1" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": "^5.4.0 || ^6.0.0" }, "optionalPeers": ["typescript"] }, "sha512-3jZwyxAZWSBqI7EXEdw+rktFfX1opMpqn9Lruwz52DEzQdi7kbKnqixjhR3dJ1xFfG05YxV9vsqXGxXqcLAmjA=="], "@testing-library/dom": ["@testing-library/dom@10.4.1", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.3.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "picocolors": "1.1.1", "pretty-format": "^27.0.2" } }, "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg=="], @@ -1370,11 +1348,9 @@ "@testing-library/user-event": ["@testing-library/user-event@14.6.1", "", { "peerDependencies": { "@testing-library/dom": ">=7.21.4" } }, "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw=="], - "@ts-morph/common": ["@ts-morph/common@0.28.1", "", { "dependencies": { "minimatch": "^10.0.1", "path-browserify": "^1.0.1", "tinyglobby": "^0.2.14" } }, "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g=="], + "@ts-morph/common": ["@ts-morph/common@0.29.0", "", { "dependencies": { "minimatch": "^10.0.1", "path-browserify": "^1.0.1", "tinyglobby": "^0.2.14" } }, "sha512-35oUmphHbJvQ/+UTwFNme/t2p3FoKiGJ5auTjjpNTop2dyREspirjMy82PLSC1pnDJ8ah1GU98hwpVt64YXQsg=="], - "@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], - - "@types/argparse": ["@types/argparse@1.0.38", "", {}, "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA=="], + "@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], "@types/aria-query": ["@types/aria-query@5.0.4", "", {}, "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="], @@ -1388,7 +1364,7 @@ "@types/body-scroll-lock": ["@types/body-scroll-lock@3.1.2", "", {}, "sha512-ELhtuphE/YbhEcpBf/rIV9Tl3/O0A0gpCVD+oYFSS8bWstHFJUgA4nNw1ZakVlRC38XaQEIsBogUZKWIPBvpfQ=="], - "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], + "@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="], "@types/chai": ["@types/chai@5.2.3", "", { "dependencies": { "@types/deep-eql": "*", "assertion-error": "^2.0.1" } }, "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA=="], @@ -1406,7 +1382,7 @@ "@types/esrecurse": ["@types/esrecurse@4.3.1", "", {}, "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw=="], - "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], + "@types/estree": ["@types/estree@1.0.9", "", {}, "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "*" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], @@ -1424,7 +1400,7 @@ "@types/ms": ["@types/ms@2.1.0", "", {}, "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA=="], - "@types/node": ["@types/node@25.5.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw=="], + "@types/node": ["@types/node@25.6.2", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-sokuT28dxf9JT5Kady1fsXOvI4HVpjZa95NKT5y9PNTIrs2AsobR4GFAA90ZG8M+nxVRLysCXsVj6eGC7Vbrlw=="], "@types/parse-json": ["@types/parse-json@4.0.2", "", {}, "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw=="], @@ -1456,29 +1432,29 @@ "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], - "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.57.2", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.57.2", "@typescript-eslint/type-utils": "8.57.2", "@typescript-eslint/utils": "8.57.2", "@typescript-eslint/visitor-keys": "8.57.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.57.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-NZZgp0Fm2IkD+La5PR81sd+g+8oS6JwJje+aRWsDocxHkjyRw0J5L5ZTlN3LI1LlOcGL7ph3eaIUmTXMIjLk0w=="], + "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.59.2", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/type-utils": "8.59.2", "@typescript-eslint/utils": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.2", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.59.2", "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-j/bwmkBvHUtPNxzuWe5z6BEk3q54YRyGlBXkSsmfoih7zNrBvl5A9A98anlp/7JbyZcWIJ8KXo/3Tq/DjFLtuQ=="], - "@typescript-eslint/parser": ["@typescript-eslint/parser@8.57.2", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.57.2", "@typescript-eslint/types": "8.57.2", "@typescript-eslint/typescript-estree": "8.57.2", "@typescript-eslint/visitor-keys": "8.57.2", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA=="], + "@typescript-eslint/parser": ["@typescript-eslint/parser@8.59.2", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/types": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.2", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-plR3pp6D+SSUn1HM7xvSkx12/DhoHInI2YF35KAcVFNZvlC0gtrWqx7Qq1oH2Ssgi0vlFRCTbP+DZc7B9+TtsQ=="], - "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.57.2", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.57.2", "@typescript-eslint/types": "^8.57.2", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-FuH0wipFywXRTHf+bTTjNyuNQQsQC3qh/dYzaM4I4W0jrCqjCVuUh99+xd9KamUfmCGPvbO8NDngo/vsnNVqgw=="], + "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.59.2", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.59.2", "@typescript-eslint/types": "^8.59.2", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-+2hqvEkeyf/0FBor67duF0Ll7Ot8jyKzDQOSrxazF/danillRq2DwR9dLptsXpoZQqxE1UisSmoZewrlPas9Vw=="], - "@typescript-eslint/rule-tester": ["@typescript-eslint/rule-tester@8.57.2", "", { "dependencies": { "@typescript-eslint/parser": "8.57.2", "@typescript-eslint/typescript-estree": "8.57.2", "@typescript-eslint/utils": "8.57.2", "ajv": "^6.12.6", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "4.6.2", "semver": "^7.7.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" } }, "sha512-cb5m0irr1449waTuYzGi4KD3SGUH3khL4ta/o9lzShvT7gnIwR5qVhU0VM0p966kCrtFId8hwmkvz1fOElsxTg=="], + "@typescript-eslint/rule-tester": ["@typescript-eslint/rule-tester@8.59.2", "", { "dependencies": { "@typescript-eslint/parser": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/utils": "8.59.2", "ajv": "^6.12.6", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "4.6.2", "semver": "^7.7.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-u6yY503P7E76xIzIQw2R6FCJwwifh0fOJsOWtkpEPeUUVmUApi1Hdnahz5mKSqRDi5wUN+iiUBedM0qZ41owYw=="], - "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.57.2", "", { "dependencies": { "@typescript-eslint/types": "8.57.2", "@typescript-eslint/visitor-keys": "8.57.2" } }, "sha512-snZKH+W4WbWkrBqj4gUNRIGb/jipDW3qMqVJ4C9rzdFc+wLwruxk+2a5D+uoFcKPAqyqEnSb4l2ULuZf95eSkw=="], + "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.59.2", "", { "dependencies": { "@typescript-eslint/types": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.2" } }, "sha512-JzfyEpEtOU89CcFSwyNS3mu4MLvLSXqnmX05+aKBDM+TdR5jzcGOEBwxwGNxrEQ7p/z6kK2WyioCGBf2zZBnvg=="], - "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.57.2", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-3Lm5DSM+DCowsUOJC+YqHHnKEfFh5CoGkj5Z31NQSNF4l5wdOwqGn99wmwN/LImhfY3KJnmordBq/4+VDe2eKw=="], + "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.59.2", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-BKK4alN7oi4C/zv4VqHQ+uRU+lTa6JGIZ7s1juw7b3RHo9OfKB+bKX3u0iVZetdsUCBBkSbdWbarJbmN0fTeSw=="], - "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.57.2", "", { "dependencies": { "@typescript-eslint/types": "8.57.2", "@typescript-eslint/typescript-estree": "8.57.2", "@typescript-eslint/utils": "8.57.2", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Co6ZCShm6kIbAM/s+oYVpKFfW7LBc6FXoPXjTRQ449PPNBY8U0KZXuevz5IFuuUj2H9ss40atTaf9dlGLzbWZg=="], + "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.59.2", "", { "dependencies": { "@typescript-eslint/types": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/utils": "8.59.2", "debug": "^4.4.3", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-nhqaj1nmTdVVl/BP5omXNRGO38jn5iosis2vbdmupF2txCf8ylWT8lx+JlvMYYVqzGVKtjojUFoQ3JRWK+mfzQ=="], - "@typescript-eslint/types": ["@typescript-eslint/types@8.57.2", "", {}, "sha512-/iZM6FnM4tnx9csuTxspMW4BOSegshwX5oBDznJ7S4WggL7Vczz5d2W11ecc4vRrQMQHXRSxzrCsyG5EsPPTbA=="], + "@typescript-eslint/types": ["@typescript-eslint/types@8.59.2", "", {}, "sha512-e82GVOE8Ps3E++Egvb6Y3Dw0S10u8NkQ9KXmtRhCWJJ8kDhOJTvtMAWnFL16kB1583goCWXsr0NieKCZMs2/0Q=="], - "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.57.2", "", { "dependencies": { "@typescript-eslint/project-service": "8.57.2", "@typescript-eslint/tsconfig-utils": "8.57.2", "@typescript-eslint/types": "8.57.2", "@typescript-eslint/visitor-keys": "8.57.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-2MKM+I6g8tJxfSmFKOnHv2t8Sk3T6rF20A1Puk0svLK+uVapDZB/4pfAeB7nE83uAZrU6OxW+HmOd5wHVdXwXA=="], + "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.59.2", "", { "dependencies": { "@typescript-eslint/project-service": "8.59.2", "@typescript-eslint/tsconfig-utils": "8.59.2", "@typescript-eslint/types": "8.59.2", "@typescript-eslint/visitor-keys": "8.59.2", "debug": "^4.4.3", "minimatch": "^10.2.2", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.5.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.1.0" } }, "sha512-o0XPGNwcWw+FIwStOWn+BwBuEmL6QXP0rsvAFg7ET1dey1Nr6Wb1ac8p5HEsK0ygO/6mUxlk+YWQD9xcb/nnXg=="], - "@typescript-eslint/utils": ["@typescript-eslint/utils@8.57.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.57.2", "@typescript-eslint/types": "8.57.2", "@typescript-eslint/typescript-estree": "8.57.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-krRIbvPK1ju1WBKIefiX+bngPs+odIQUtR7kymzPfo1POVw3jlF+nLkmexdSSd4UCbDcQn+wMBATOOmpBbqgKg=="], + "@typescript-eslint/utils": ["@typescript-eslint/utils@8.59.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.59.2", "@typescript-eslint/types": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-Juw3EinkXqjaffxz6roowvV7GZT/kET5vSKKZT6upl5TXdWkLkYmNPXwDDL2Vkt2DPn0nODIS4egC/0AGxKo/Q=="], - "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.57.2", "", { "dependencies": { "@typescript-eslint/types": "8.57.2", "eslint-visitor-keys": "^5.0.0" } }, "sha512-zhahknjobV2FiD6Ee9iLbS7OV9zi10rG26odsQdfBO/hjSzUQbkIYgda+iNKK1zNiW2ey+Lf8MU5btN17V3dUw=="], + "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.59.2", "", { "dependencies": { "@typescript-eslint/types": "8.59.2", "eslint-visitor-keys": "^5.0.0" } }, "sha512-NwjLUnGy8/Zfx23fl50tRC8rYaYnM52xNRYFAXvmiil9yh1+K6aRVQMnzW6gQB/1DLgWt977lYQn7C+wtgXZiA=="], - "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "@ungap/structured-clone": ["@ungap/structured-clone@1.3.1", "", {}, "sha512-mUFwbeTqrVgDQxFveS+df2yfap6iuP20NAKAsBt5jDEoOTDew+zwLAOilHCeQJOVSvmgCX4ogqIrA0mnyr08yQ=="], "@unpic/core": ["@unpic/core@1.0.3", "", { "dependencies": { "unpic": "^4.2.2" } }, "sha512-aum9YNVUGso7MjGLD0Rp/08kywCGLqZ03/q6VQBFFakDBOXWEc8D4kPGcZ8v5wEnGRex3lE+++bOuucBp3KJ/w=="], @@ -1528,21 +1504,21 @@ "@vanilla-extract/css": ["@vanilla-extract/css@1.20.1", "", { "dependencies": { "@emotion/hash": "^0.9.0", "@vanilla-extract/private": "^1.0.9", "css-what": "^6.1.0", "csstype": "^3.2.3", "dedent": "^1.5.3", "deep-object-diff": "^1.1.9", "deepmerge": "^4.2.2", "lru-cache": "^10.4.3", "media-query-parser": "^2.0.2", "modern-ahocorasick": "^1.0.0", "picocolors": "^1.0.0" } }, "sha512-5I9RNo5uZW9tsBnqrWzJqELegOqTHBrZyDFnES0gR9gJJHBB9dom1N0bwITM9tKwBcfKrTX4a6DHVeQdJ2ubQA=="], - "@vanilla-extract/integration": ["@vanilla-extract/integration@8.0.9", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/plugin-syntax-typescript": "^7.23.3", "@vanilla-extract/babel-plugin-debug-ids": "^1.2.2", "@vanilla-extract/css": "^1.19.1", "dedent": "^1.5.3", "esbuild": "npm:esbuild@>=0.17.6 <0.28.0", "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "mlly": "^1.4.2" } }, "sha512-NP+CSo5IYHDmkMMy5vAxY4R9i2+CAg4sxgvVaxuHiuY9q30i6dNUTujNNKZGW2urEkd4HVVI6NggeIyYjbGPwA=="], + "@vanilla-extract/integration": ["@vanilla-extract/integration@8.0.10", "", { "dependencies": { "@babel/core": "^7.23.9", "@babel/plugin-syntax-typescript": "^7.23.3", "@vanilla-extract/babel-plugin-debug-ids": "^1.2.2", "@vanilla-extract/css": "^1.20.1", "dedent": "^1.5.3", "esbuild": "npm:esbuild@>=0.17.6 <0.29.0", "eval": "0.1.8", "find-up": "^5.0.0", "javascript-stringify": "^2.0.1", "mlly": "^1.4.2" } }, "sha512-01IB5gbrgTe8IIrtfRXXTmACl5D8Enzqp2cKbCWaMKXmnoilXXVCPbJoA96q88PXkNDXsXepCxUugMvEmL3c7A=="], - "@vanilla-extract/next-plugin": ["@vanilla-extract/next-plugin@2.5.1", "", { "dependencies": { "@vanilla-extract/turbopack-plugin": "^0.1.1", "@vanilla-extract/webpack-plugin": "^2.3.26", "semver": "^7.6.3" }, "peerDependencies": { "next": ">=12.1.7" } }, "sha512-+RK5id3lcypV9DedqJNRCbHoD+qxI9JgGDugc0ZHhwJon2RPpie/pBjn2yhNU/9NbiF8+GzggyGXPd6tx4hY5Q=="], + "@vanilla-extract/next-plugin": ["@vanilla-extract/next-plugin@2.5.2", "", { "dependencies": { "@vanilla-extract/turbopack-plugin": "^0.1.3", "@vanilla-extract/webpack-plugin": "^2.3.27", "semver": "^7.6.3" }, "peerDependencies": { "next": ">=12.1.7" } }, "sha512-apq4i0atiSL4Qz4kiGdOov8ucGLLlQ1Vw7JgvppMp7FCtUBBlosRteaTGrGP7PjczRkzWsx5BR/cp8Ev81o7RQ=="], "@vanilla-extract/private": ["@vanilla-extract/private@1.0.9", "", {}, "sha512-gT2jbfZuaaCLrAxwXbRgIhGhcXbRZCG3v4TTUnjw0EJ7ArdBRxkq4msNJkbuRkCgfIK5ATmprB5t9ljvLeFDEA=="], "@vanilla-extract/turbopack-plugin": ["@vanilla-extract/turbopack-plugin@0.1.3", "", { "dependencies": { "@swc/core": "^1.13.5", "@vanilla-extract/compiler": "^0.7.0", "@vanilla-extract/integration": "^8.0.9" }, "peerDependencies": { "next": ">=12.1.7" } }, "sha512-ZTViI5/3xAviQ3aRzZMjYG50NIFVsXqvsavZF+rMxl/RYZQ42ufBT2jDRlScrIvig2V27ODESDEJRQcEX/u3+Q=="], - "@vanilla-extract/webpack-plugin": ["@vanilla-extract/webpack-plugin@2.3.26", "", { "dependencies": { "@vanilla-extract/integration": "^8.0.8", "debug": "^4.3.1", "loader-utils": "^2.0.0", "picocolors": "^1.0.0" }, "peerDependencies": { "webpack": "^4.30.0 || ^5.20.2" } }, "sha512-B2uuMfbjHEQ5LRcc/rHAp4pADGVG70NO1rkLI22Et6V6OMdG7D3+Ysg9hwCn51b5ICVD6rsm7vGdHMLn6EcK0Q=="], + "@vanilla-extract/webpack-plugin": ["@vanilla-extract/webpack-plugin@2.3.27", "", { "dependencies": { "@vanilla-extract/integration": "^8.0.10", "debug": "^4.3.1", "loader-utils": "^2.0.0", "picocolors": "^1.0.0" }, "peerDependencies": { "webpack": "^4.30.0 || ^5.20.2" } }, "sha512-i/GFQPifTkGYXYpkVYzScBPwXB82f+5GMLg9rh9UBgTG6M/YUebIDVjVOC9Mn5VMvc8Fk2w/FmagDRLugHA09w=="], "@vercel/og": ["@vercel/og@0.8.6", "", { "dependencies": { "@resvg/resvg-wasm": "2.4.0", "satori": "0.16.0" } }, "sha512-hBcWIOppZV14bi+eAmCZj8Elj8hVSUZJTpf1lgGBhVD85pervzQ1poM/qYfFUlPraYSZYP+ASg6To5BwYmUSGQ=="], "@vitejs/plugin-react": ["@vitejs/plugin-react@6.0.1", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.7" }, "peerDependencies": { "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", "babel-plugin-react-compiler": "^1.0.0", "vite": "^8.0.0" }, "optionalPeers": ["@rolldown/plugin-babel", "babel-plugin-react-compiler"] }, "sha512-l9X/E3cDb+xY3SWzlG1MOGt2usfEHGMNIaegaUGFsLkb3RCn/k8/TOXBcab+OndDI4TBtktT8/9BwwW8Vi9KUQ=="], - "@vitejs/plugin-rsc": ["@vitejs/plugin-rsc@0.5.21", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.5", "es-module-lexer": "^2.0.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.21", "periscopic": "^4.0.2", "srvx": "^0.11.7", "strip-literal": "^3.1.0", "turbo-stream": "^3.1.0", "vitefu": "^1.1.1" }, "peerDependencies": { "react": "*", "react-dom": "*", "react-server-dom-webpack": "*", "vite": "*" }, "optionalPeers": ["react-server-dom-webpack"] }, "sha512-uNayLT8IKvWoznvQyfwKuGiEFV28o7lxUDnw/Av36VCuGpDFZnMmvVCwR37gTvnSmnpul9V0tdJqY3tBKEaDqw=="], + "@vitejs/plugin-rsc": ["@vitejs/plugin-rsc@0.5.26", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-rc.18", "es-module-lexer": "^2.1.0", "estree-walker": "^3.0.3", "magic-string": "^0.30.21", "srvx": "^0.11.15", "strip-literal": "^3.1.0", "turbo-stream": "^3.2.0", "vitefu": "^1.1.3" }, "peerDependencies": { "react": "*", "react-dom": "*", "react-server-dom-webpack": "*", "vite": "*" }, "optionalPeers": ["react-server-dom-webpack"] }, "sha512-T8W8ODEutblw9qXQB512LDPyv1tAbJRD/Gf0QEGsAoydl4nxEtIrghnhoI9oLY9R+7aw+cLk1ZEltxWHWf4aHw=="], "@vitest/expect": ["@vitest/expect@3.2.4", "", { "dependencies": { "@types/chai": "^5.2.2", "@vitest/spy": "3.2.4", "@vitest/utils": "3.2.4", "chai": "^5.2.0", "tinyrainbow": "^2.0.0" } }, "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig=="], @@ -1558,19 +1534,15 @@ "@volar/typescript": ["@volar/typescript@2.4.28", "", { "dependencies": { "@volar/language-core": "2.4.28", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw=="], - "@vue/compiler-core": ["@vue/compiler-core@3.5.31", "", { "dependencies": { "@babel/parser": "^7.29.2", "@vue/shared": "3.5.31", "entities": "^7.0.1", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-k/ueL14aNIEy5Onf0OVzR8kiqF/WThgLdFhxwa4e/KF/0qe38IwIdofoSWBTvvxQOesaz6riAFAUaYjoF9fLLQ=="], + "@vue/compiler-core": ["@vue/compiler-core@3.5.25", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/shared": "3.5.25", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw=="], - "@vue/compiler-dom": ["@vue/compiler-dom@3.5.31", "", { "dependencies": { "@vue/compiler-core": "3.5.31", "@vue/shared": "3.5.31" } }, "sha512-BMY/ozS/xxjYqRFL+tKdRpATJYDTTgWSo0+AJvJNg4ig+Hgb0dOsHPXvloHQ5hmlivUqw1Yt2pPIqp4e0v1GUw=="], + "@vue/compiler-dom": ["@vue/compiler-dom@3.5.25", "", { "dependencies": { "@vue/compiler-core": "3.5.25", "@vue/shared": "3.5.25" } }, "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q=="], "@vue/compiler-sfc": ["@vue/compiler-sfc@3.5.25", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/compiler-core": "3.5.25", "@vue/compiler-dom": "3.5.25", "@vue/compiler-ssr": "3.5.25", "@vue/shared": "3.5.25", "estree-walker": "^2.0.2", "magic-string": "^0.30.21", "postcss": "^8.5.6", "source-map-js": "^1.2.1" } }, "sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag=="], "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.25", "", { "dependencies": { "@vue/compiler-dom": "3.5.25", "@vue/shared": "3.5.25" } }, "sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A=="], - "@vue/compiler-vue2": ["@vue/compiler-vue2@2.7.16", "", { "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A=="], - - "@vue/language-core": ["@vue/language-core@2.2.0", "", { "dependencies": { "@volar/language-core": "~2.4.11", "@vue/compiler-dom": "^3.5.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.5.0", "alien-signals": "^0.4.9", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw=="], - - "@vue/shared": ["@vue/shared@3.5.31", "", {}, "sha512-nBxuiuS9Lj5bPkPbWogPUnjxxWpkRniX7e5UBQDWl6Fsf4roq9wwV+cR7ezQ4zXswNvPIlsdj1slcLB7XCsRAw=="], + "@vue/shared": ["@vue/shared@3.5.25", "", {}, "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg=="], "@webassemblyjs/ast": ["@webassemblyjs/ast@1.14.1", "", { "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ=="], @@ -1602,157 +1574,161 @@ "@webassemblyjs/wast-printer": ["@webassemblyjs/wast-printer@1.14.1", "", { "dependencies": { "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw=="], + "@webcontainer/env": ["@webcontainer/env@1.1.1", "", {}, "sha512-6aN99yL695Hi9SuIk1oC88l9o0gmxL1nGWWQ/kNy81HigJ0FoaoTXpytCj6ItzgyCEwA9kF1wixsTuv5cjsgng=="], + "@xtuc/ieee754": ["@xtuc/ieee754@1.2.0", "", {}, "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="], "@xtuc/long": ["@xtuc/long@4.2.2", "", {}, "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="], - "@zag-js/accordion": ["@zag-js/accordion@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-lr3K8R4c8cY1ghcU4lpav4dAXCFqFcNOrieqy4lsS5n5CSrpLbL1EFrOdTBux/CCeijmipFp14ddUZGHWHIDJQ=="], + "@zag-js/accordion": ["@zag-js/accordion@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-YDdyvZJ6fr92RZazyXQq+juT3ZA0ubjDISptb5YPgMoTPdnjKNiICPpMeCeVj1ncYRDkHXrOdChS/5CtuX/K6g=="], - "@zag-js/anatomy": ["@zag-js/anatomy@1.38.2", "", {}, "sha512-3wEwuHkHiErD1r36MrC1Jd4lqvQK+wQ5EgqdEk8r3L2koD7fTdq8CB5KbMcP0JM08eFCOo2CBl3gP3VBmiTNJA=="], + "@zag-js/anatomy": ["@zag-js/anatomy@1.40.0", "", {}, "sha512-oiB4uAaV//L38JluLVPtOHO3xvqambrfrXVOoq4kmNrBv1LLlCmFvrXA2HOR9lakn4ExK27XSUrKhUN7YlKjfQ=="], - "@zag-js/angle-slider": ["@zag-js/angle-slider@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/rect-utils": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-VugKx/iClEiHA5AXY/d2zZzfpgAHD2hyV7f0k3FzuLIsgeJmZDTc3YNMX2BCrcbD8qNrambO3e2b31mMt1HxFg=="], + "@zag-js/angle-slider": ["@zag-js/angle-slider@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/rect-utils": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-6X6bOBoCyYG0/lFY0Y+AXJZZG6CeYQiWkcMXvegxCC2zxthodqOVzkVOASW+6rzLjn2bru+V5O9RMjNgmCumKg=="], - "@zag-js/aria-hidden": ["@zag-js/aria-hidden@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2" } }, "sha512-TvMdHUouslt6RZmKZ6k41B1KTqjOFaD4T6c4sTb6qSUkuTYgyYsA7ZqimiR0vcvmmG852nSaOepvr6Jj0sRPNA=="], + "@zag-js/aria-hidden": ["@zag-js/aria-hidden@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0" } }, "sha512-lNWujEIlfGKwMQIcgfXuOZSsJD2avrgPsQHrXNVF9mkXygjLFcIRKz2pEexTSCqFh/HuUZJ6rG4pM/hJ/BiVCw=="], - "@zag-js/async-list": ["@zag-js/async-list@1.38.2", "", { "dependencies": { "@zag-js/core": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-URi5Wl0uJ4TJ/MFh5IKAsLKSb21e9tTPegZ7Vvr1XO5tWd9neY3nwVYImHq93Tv1nwhkttdOvUTKdnwlpr9NiQ=="], + "@zag-js/async-list": ["@zag-js/async-list@1.40.0", "", { "dependencies": { "@zag-js/core": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-hLGUTtwRFl6FIdYxSIYSeLQjJeG4isKpdmGCUvtWNnKr7ayf1yAkkSwX10SdBMWOCldbtvKCZXumKvP6dDwNvw=="], - "@zag-js/auto-resize": ["@zag-js/auto-resize@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2" } }, "sha512-0nVYusVmxDfa1j8fyycQCxcULT07BUM+23BlEslPy0Hfzt5c7CwMQFan4JiMia82RzgnWv3s+5svVMvI++ZZqw=="], + "@zag-js/auto-resize": ["@zag-js/auto-resize@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0" } }, "sha512-eZC+AGKUip7UMu41/ApeT1wCIgn2fmo63FJeGAdMMD8E9M8M7QLsfISMIoieNNGBAYWhSyqELQ3jPgkUf6xReA=="], - "@zag-js/avatar": ["@zag-js/avatar@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-DmhoaJG+IcKFSWSrtfcI91WJNSJQx2PYDmChnOtNvyGIXibNHkoYXzvZTCrKsVGgKeUXFtOxSqSYMbzxgL2k2Q=="], + "@zag-js/avatar": ["@zag-js/avatar@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-DayZDsNXbipT+1GUkX29tVhO4hZonDnidwE3SjEQv9Ic9vCdnwP95+B0FPEuaca03F5ZXFqVXjnPmRVbRMyDYQ=="], - "@zag-js/carousel": ["@zag-js/carousel@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/scroll-snap": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-/edO3DYuJ23znbR1LhxWKQeIAkd/VkSPFY5vNWKA879FWLjAf5ZWAGe+jKXayAOaWqcTFKp9uCUSbesO5eFiDg=="], + "@zag-js/carousel": ["@zag-js/carousel@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/scroll-snap": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-9svWc2jjvUP8iQ0afuu/ZAI75PuPLm4qB7h+10rmDrAgUPn7fwUBVzyATKubJPdtmaYQQvTTIiZU2B8mV88oGg=="], - "@zag-js/cascade-select": ["@zag-js/cascade-select@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/collection": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/rect-utils": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-5NONGij0U5utqgv1lFeWz+WZYcoa9nhI+EU0XGojJ5VUTZbQVgxWeS8WDxcpneT29n1xqQkmv+6SZ3fYcBDkxA=="], + "@zag-js/cascade-select": ["@zag-js/cascade-select@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/collection": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/rect-utils": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-0fkE0Fd2VQ4QsaWXHdgQxHWiaef3UWW0l6Jd47frtMNnrvg5t5Xfqowa7c2S23hcduOUfz2WC0xEuGXnO4UVDQ=="], - "@zag-js/checkbox": ["@zag-js/checkbox@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-AAljBvGog/jLWhdEFc2ADzsGODoGua8fWZs0RUYq/wQ9UBiG4w5VRyPAq5ZEzaIoSruoHm5AHN9D9VdWN9py3g=="], + "@zag-js/checkbox": ["@zag-js/checkbox@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-oFCgnkOjrUDejB1wEp5s3cyJ+uFe/GoI3+wqNyckqOtcdKL1MBxy193GYVdj0LDfuCNrk8V0aIJGTdusCD2b4A=="], - "@zag-js/clipboard": ["@zag-js/clipboard@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-LIDcuZDU70cvMAbIz7LgeXM+CvhRW8Ez84UPkorwT+EyDCOaCNEADabSY2AM4WKn81EV56UKkwSNblkhP3gmZA=="], + "@zag-js/clipboard": ["@zag-js/clipboard@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-QbFhJMwwUxTKcbWyb9ZrKgAp13U4+IzfHSLhPxbDVSQ15mIrjIkjW68gS6ElzhRDwGr1qawkZVApsqcToUqSaQ=="], - "@zag-js/collapsible": ["@zag-js/collapsible@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-7yBlX/9d/A7Da/9PZoBye0nA+FjVZv7rjrUfmO2NhoERt2IV6r0S143DrwcW3ELjz+76HzV+wlP8ytruqaK1gQ=="], + "@zag-js/collapsible": ["@zag-js/collapsible@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-xDLY4j9D3gdoTirkwzMaCtelfCjnMhBzPyY6c/mh4oPvD3RB6dr3V3kI80i3yxHaUUeDCIUm/XAxK0InPsRBug=="], - "@zag-js/collection": ["@zag-js/collection@1.38.2", "", { "dependencies": { "@zag-js/utils": "1.38.2" } }, "sha512-1Edek5yrjHfpmciK4M5PoUbDFRgEEkFh3HMIwWjMRdcRzea9ibVhSGXvXsenafC/b3so/ApEXBhs1ch7dFn+NQ=="], + "@zag-js/collection": ["@zag-js/collection@1.40.0", "", { "dependencies": { "@zag-js/utils": "1.40.0" } }, "sha512-+3o1nvbcA9Kz2hDDFf8Kngpd+of33S4TS5Tb9KvrHlU5ieQdvEUtc7/pWG2aCTkGpmgda+j91akB6ZB8+oVkvA=="], - "@zag-js/color-picker": ["@zag-js/color-picker@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/color-utils": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-d2/FBAQ3waAY7T0zhMN5gbz7z2Z5vr3wtyT+qcMfwweeBBQEST8iQMc4JUZgTfZ/V+Uqv/A1L644/IRXq6Jpyg=="], + "@zag-js/color-picker": ["@zag-js/color-picker@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/color-utils": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-lT93xd1BlNBbitl2RxST8ARYE6q/HZD5a0QhMIT1RbndB8F4e9j/NxkStgE9f0QqgpC/rO+nKHLoR+H1xs/EkA=="], - "@zag-js/color-utils": ["@zag-js/color-utils@1.38.2", "", { "dependencies": { "@zag-js/utils": "1.38.2" } }, "sha512-neo0qU1fvIbptrgDMzXI7gz3DSYvxFEf61YskVXJkPGY4u4+unx89j/R1G9wC4lF/pl8kPiTsb7TK7+UnFf5/Q=="], + "@zag-js/color-utils": ["@zag-js/color-utils@1.40.0", "", { "dependencies": { "@zag-js/utils": "1.40.0" } }, "sha512-PZihcGheb5bn0/cEUwozjJjPoKkEwlJNpTA5mUxj/+sOElLaZM+zY2AnGYeMl6w5zIyZZUDoJMIT5rcb5sN87g=="], - "@zag-js/combobox": ["@zag-js/combobox@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/aria-hidden": "1.38.2", "@zag-js/collection": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-J2M1vB3Keepv2Wr/sC5kue18ver+nf/7gj9LgHxSU5sgwl9Fr4wZLPH1s9ZQ7FDhBXjWsitILbf9dqR1UpyLJQ=="], + "@zag-js/combobox": ["@zag-js/combobox@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/collection": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/live-region": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-5IVCDrB8m7XrKBu28j7bIRE5KiyKJLPDZB3AJ+PLJyL69D+9z1anhLDmkUYcPseyCasszLKzIejby+kYQJgHlA=="], - "@zag-js/core": ["@zag-js/core@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-UaRU6TVOJV07phQkToR6fNceJbfPiNLx2itSh78ofHn8w9w860mNrS5tyn8HExuNwY5JVQdfMkyFlMF0LfgVLQ=="], + "@zag-js/core": ["@zag-js/core@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-0YcqCh7TmhSonkbKM/7NWolxlaQgvvXgqedocW9oeRYiDJIpBZyRqnHPoGAS2XwbBPkCnrqSosxSF5yBjhZpgw=="], - "@zag-js/date-picker": ["@zag-js/date-picker@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/date-utils": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/live-region": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" }, "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "sha512-Jhss1wt33YjnMYWUAPMnze3ObkkLJnmqWN2H2fgHEBRQyJScVj+MHWhWPpAXsU2hf70Re19kdPld5vADIfACMA=="], + "@zag-js/date-input": ["@zag-js/date-input@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/date-utils": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/live-region": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" }, "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "sha512-/VU8g3dugggC5xW2OJW1KONWzPkEbK/yLA0lPxymW/Uo0ixh2mKJUVTOTqDFWf1b0vzLX2XlYoLL+I2ryUyPvA=="], - "@zag-js/date-utils": ["@zag-js/date-utils@1.38.2", "", { "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "sha512-TwyIlBNS4ctx4zMjFTq9IVqSFFiHwv4WeB4hauqrBVARFzj1twE7r9mLFPbpq7FYuqwLuA4b9CaaVv3STukszg=="], + "@zag-js/date-picker": ["@zag-js/date-picker@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/date-utils": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/live-region": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" }, "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "sha512-Nm3aSKn/5tGOZk8rIddLyBk+oeE0zr/ZsJuuTc3rysd04owVy1UhmUh6X9CqfTJtwTDpUZe+orHaIvKlE3Rd0w=="], - "@zag-js/dialog": ["@zag-js/dialog@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/aria-hidden": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-trap": "1.38.2", "@zag-js/remove-scroll": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-cVYBXiEnQ30UjudJxODoV8Au/18VyePEvJ9SollGFJYnr+/2mCue5CoraOQJqoZVED3tdUCBodz9kyjS1CcvAw=="], + "@zag-js/date-utils": ["@zag-js/date-utils@1.40.0", "", { "peerDependencies": { "@internationalized/date": ">=3.0.0" } }, "sha512-nuB1QM3X7yY0k2JiZbHHm6wigY+Cl1QK6sRlh+C7mOyzEKnNEqNSVIqgSionCtWO6zAZh1R8Znp5ZeCdbbc27w=="], - "@zag-js/dismissable": ["@zag-js/dismissable@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2", "@zag-js/interact-outside": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-4B83ZGD8YKnwiXwL4J49txeXSPdS29bPt6p00v99u6nJPlQRRubzPUQo4OJr6NxUuT9cIn2kDqt5oj8ZCwhmng=="], + "@zag-js/dialog": ["@zag-js/dialog@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/aria-hidden": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-trap": "1.40.0", "@zag-js/remove-scroll": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-1FHxR7/Kuu+9K2dxH7dKlSckCZ26n5ec79qWr0aMSSs2DF+ypQf5GUlaS6z2UqroZvIoJCvABVMm9OMko/qxlA=="], - "@zag-js/dom-query": ["@zag-js/dom-query@1.38.2", "", { "dependencies": { "@zag-js/types": "1.38.2" } }, "sha512-E2plmm/bDjMQhi4fmyhw2uhoQv2cgNYaG+fzLrJgepLqovCOTU85lwzaLFiB7ldG2a9DVmjbAnFX4nVVWvaxGA=="], + "@zag-js/dismissable": ["@zag-js/dismissable@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0", "@zag-js/interact-outside": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-bBkFvPg/zbYn31ZgEfx8not6s2Ekx7zU2sO8tGXb8rYPnHBfGDYEzVQansUStJn0Atzw+y7XR7B3G3u5AFQJKw=="], - "@zag-js/drawer": ["@zag-js/drawer@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/aria-hidden": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-trap": "1.38.2", "@zag-js/remove-scroll": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-QoXYUHKcppju84sOHuOUJVhJpnYcFAOUtV6RSSIwVcUpkAReUE+NmwGviMxqRAmaXZc8yz7QPCm/H55Ywm+d6Q=="], + "@zag-js/dom-query": ["@zag-js/dom-query@1.40.0", "", { "dependencies": { "@zag-js/types": "1.40.0" } }, "sha512-4J3EO2gHpZ1VZiGLuMlH6G1Tsp4gKB8PPt2yKeNQWYGEXyrHUXrvMhRUzv7Z4/2I1s1tnxlFG4F8ovB3kTpz/Q=="], - "@zag-js/editable": ["@zag-js/editable@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/interact-outside": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-S4QigLJneTTwR8EE3Nq44e/z/Byo3+4heuWWkBW6UF78EIeFdJrWK7EWzSDvSJTM5/ViEZpCkQElDonoxgzJUA=="], + "@zag-js/drawer": ["@zag-js/drawer@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/aria-hidden": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-trap": "1.40.0", "@zag-js/remove-scroll": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-N2OR5ZYuTsWkYYmwsNgmL+wfuM3qUxB8GAfo53AWvOh07QUVz1Dvh1WP4km5L6Tkz4UBQZACu8T/ZLyeZ+PdWg=="], - "@zag-js/file-upload": ["@zag-js/file-upload@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/file-utils": "1.38.2", "@zag-js/i18n-utils": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-sA5gKafIRDcKc6zsEYrByQQpl2am+ioRzGcuxhwBdOIacJP3G2vs4bJx0wCbdM8O9Ue11s9KBcqfJhenDlBWMg=="], + "@zag-js/editable": ["@zag-js/editable@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/interact-outside": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-X23wOg42BPvFWfJQi3yd8HiL8xtisrpL5ouFEzba56SQIxWZHDRpeWoqXqyLODq2/z2+SsZ0wV3laRD3ZH0C2g=="], - "@zag-js/file-utils": ["@zag-js/file-utils@1.38.2", "", { "dependencies": { "@zag-js/i18n-utils": "1.38.2" } }, "sha512-498kXYSlUrNXdjmn0mKfovd7zQv1PnLXhNW94L0DYX7GcAqd6SQ4QohtxbT4IHrzlV9FfskKhe9ahXxV2IlNVQ=="], + "@zag-js/file-upload": ["@zag-js/file-upload@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/file-utils": "1.40.0", "@zag-js/i18n-utils": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-hUZlJYjSGk7SAflTmQIjZv6M+icujaHS6I+dik2LM48rLWwNa/GYTNx+uY4zJLd9oW1eEj+6NcCYZpPWzKku4Q=="], - "@zag-js/floating-panel": ["@zag-js/floating-panel@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/rect-utils": "1.38.2", "@zag-js/store": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-awpjnVRML6Q3+q5akA/S/XAu2bWEjIPpdpG+vVE5Ki0HnRsVDOKyFJVJ2+LC0gApx8BzsSWZLXPxZZqbWmr5cA=="], + "@zag-js/file-utils": ["@zag-js/file-utils@1.40.0", "", { "dependencies": { "@zag-js/i18n-utils": "1.40.0" } }, "sha512-BGny4rafiBQ5TPCBXfzbH7lSyFdnoix7brq/+FllKpDqpWPQz0tIsgSZueF/Z8GPTrAkwMKOFI99P7OVhAhRig=="], - "@zag-js/focus-trap": ["@zag-js/focus-trap@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2" } }, "sha512-m1CBTmUy7kHsMVBFlzOmxddxESv7ce6XOX+3YhXKWNJLvnt4a3bWMnh+C3CmV7B14pntTkQwfXJALR6e3gfS6Q=="], + "@zag-js/floating-panel": ["@zag-js/floating-panel@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/rect-utils": "1.40.0", "@zag-js/store": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-e2QXwapCbjLJnU+MAz06CoByj4XJ3sdSBgWF+PSe2X2T8dd/FkZUnaDPaX0yyfyTWKzBbyRRNyon2LMAs8ndHw=="], - "@zag-js/focus-visible": ["@zag-js/focus-visible@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2" } }, "sha512-ME0zulSEZLxR9jJqtwDpcWuBnZKO/8xQ+UtuYrJPvqPyUyUVkxFon+jCqNUOGjK4rHB+OjEV19LrHAzq6CQjNg=="], + "@zag-js/focus-trap": ["@zag-js/focus-trap@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0" } }, "sha512-Q6W+DU7pix5rtRwoDnYzTYMkUV2kMWrFV0/EdNN3spFSvnUSkDWRmcNpzf+56AuCNeqsAZxaLJpsHLZkcT2xrw=="], - "@zag-js/highlight-word": ["@zag-js/highlight-word@1.38.2", "", {}, "sha512-wIhPX6FBUFyt9gVwH+GnjUtxOP2im8qK6ejW/igvn9L4viLZ3Fmwas2fuaWaLqW6yxo54zDtf9BPG+1rPDbnZQ=="], + "@zag-js/focus-visible": ["@zag-js/focus-visible@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0" } }, "sha512-63byl/kLVzDYlnHFma4HKEKrqB1Vx2zg0sBmUSENPyh+Ia1xhEVVC5vu6GX7nu4t/8QRy3Jn0q7T5og81FGb1A=="], - "@zag-js/hover-card": ["@zag-js/hover-card@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-Un/65bC+ppCktMBd798z7x90t6/kvvqkASxezV6ds0Ex56TB26KQnaRPUASV+fW6uH4nLdBOeGlCH3cC8KEPYg=="], + "@zag-js/highlight-word": ["@zag-js/highlight-word@1.40.0", "", {}, "sha512-+aeVn3S5NPG6Tk4Sanl0VZk/0atjnF7Xy7POPs1HD5SBui29/6i3vn3bUBNXJXrnhUoNrUhuySVYVhgkffcQ7w=="], - "@zag-js/i18n-utils": ["@zag-js/i18n-utils@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2" } }, "sha512-/thV2gwDtfubrL8gcBXGiNmQVcHACmYIXneLVW94wVADdsuRKV/s0QrMQXe/QH3f3M9QAU5VWQnoz9Z2ySilGQ=="], + "@zag-js/hover-card": ["@zag-js/hover-card@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-lkuLaikPLBIOnR0X75kSXdDYgv3ritAsn4TF1eGs12iYnZVX4PTL3J39tVNm9QrEXZ+iKcA1D2cUXNhEteCTyA=="], - "@zag-js/image-cropper": ["@zag-js/image-cropper@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-O4u7ub98qkyw7uass5Xr3clJCLWS7yJwTmM+aX+zwCMTVLK1dlZhwVZwrmsRA7FKVKKWJBmpVUd+DzLEwFvZKg=="], + "@zag-js/i18n-utils": ["@zag-js/i18n-utils@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0" } }, "sha512-8D3ki9V81gMKZvtRfNVoHCBDVYjr+WJLBvdfSv3cdOsVM2/E8//xAfYbYzl5Fdmeny3H71fxBNqOX05GN4K6OA=="], - "@zag-js/interact-outside": ["@zag-js/interact-outside@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-jszzVoozqcO3vn1iiZ726xYXpy/mR+fLnx1tBs4Dvkg/n52Mm3Uv+pFDBfHgswqS/kRJ/U8P0fItFJjOH0yvlA=="], + "@zag-js/image-cropper": ["@zag-js/image-cropper@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-bpTCaiUXM0Mh6ddoJ1fA1B/YXp5Fc8LA0hg8CuEByDwGRVKPJ0KotL6QXMF6cEJZ1fcHF3Lcmpbj5Xotfkr4mA=="], - "@zag-js/json-tree-utils": ["@zag-js/json-tree-utils@1.38.2", "", {}, "sha512-qyUSoFgwDsg9ulMEQ+a3vIos6T2AJBCjBj34U72KjjWcked6nNFs/4Y8bNh9xEdqH82txV0Wkqme8qj2iU3AcA=="], + "@zag-js/interact-outside": ["@zag-js/interact-outside@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-Fws+O4uD9vS0I5KVcf3U2tNjLKvqlv+RExFbTywckDLOCJ145M/pMQWTr1FHil04jk5PFyM1iGfsbom8tozHpQ=="], - "@zag-js/listbox": ["@zag-js/listbox@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/collection": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-gXJJ8ziTyRowkKaQa4sfUJ9TvU7IJdF/0YIACXRUDaZIaEIe7igZfYiasBASQDk4OvRGZzAhxNGceeOa8W8rbQ=="], + "@zag-js/json-tree-utils": ["@zag-js/json-tree-utils@1.40.0", "", {}, "sha512-7zEzU59Gz76nV7n3l70uMB5yAOOQMmt1PTAni6S97uw7/6KzPktsEWBcw7ocC4IIA42PKdT7akpq721H0vthbA=="], - "@zag-js/live-region": ["@zag-js/live-region@1.38.2", "", {}, "sha512-6qVPHEZRPbO/BKUTGXC3otZXODpsRg/lliBHUHzK7Pg83eSW4yGQI+XKRjmJnoWvB7U5vFXDC3SXG3aO0dyLYQ=="], + "@zag-js/listbox": ["@zag-js/listbox@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/collection": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-zB33y+dk6/e0ZTs3wun2KsuPaH/wygOuD8scnH2a2Y/W9a2P1rq503Kgm5d5kVXBKQLxOBwievWJ8Blajv8LnA=="], - "@zag-js/marquee": ["@zag-js/marquee@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-z1e6ZPynA1izDpAqgHENrC9PDt+N7Xg5dut4Vzw1w46CForFib5pv+xIRa4DxvUhXpuHCpZ1bDS0+8Hub/5Wlg=="], + "@zag-js/live-region": ["@zag-js/live-region@1.40.0", "", {}, "sha512-i1Dx02KGcQOAZGNhkFe8kz26gYJcn7KsT/M1UovjS9RTbl9diY8ShiyfIAhqruoaHQyqsHMRh/f7Idu45HdiDA=="], - "@zag-js/menu": ["@zag-js/menu@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/rect-utils": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-n0AO5uz31csUcnk1daHf/O5T2Yqtdo8KV9PInrIxwKXwfeLM2uFTHubhP2bv/j7+R+LpnZkK5laXe9WxKueBVQ=="], + "@zag-js/marquee": ["@zag-js/marquee@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-XfvAwSNYXV3fEIRc44a9sAsoJoLKt+CWbpSPgQBpiFPpWh0rZ8frUZCslevTzBB3ifIWoSg+svDHQOGsDa8wGA=="], - "@zag-js/navigation-menu": ["@zag-js/navigation-menu@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-FDfeixgwrcpC/FxJGzGp+kKgurndCohUuh/lLiNJ5pNId5ThUMr1CNFKGZMcdjhJcNMO+R1hhgyLyuFwtS+kGg=="], + "@zag-js/menu": ["@zag-js/menu@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/rect-utils": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-FRBqwsOjxBi0eSwqwrOw2td1rd0Xxl0f41J2lGc8E7z+2PabbBcJ/poqSiEn8YoaCT4mAWNjt4QQU/Pe1bRJ/g=="], - "@zag-js/number-input": ["@zag-js/number-input@1.38.2", "", { "dependencies": { "@internationalized/number": "3.6.5", "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-WJJA6EusT1HGDJlzW9YpbgOJ6Qv3TM1jcBNftrGCLGNhePXBzLzsTZKp+IZdjkI+11bab5siXwU9wcQWUhmUNw=="], + "@zag-js/navigation-menu": ["@zag-js/navigation-menu@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-aJkEGYH8P9NfsQOjxMzxuF4YrrV2N1GQj6Y5Ow19MKuLh42o35bUhwoGsYjFbxgEcImabINtZJqtAPAkOdJXmQ=="], - "@zag-js/pagination": ["@zag-js/pagination@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-pqdR7Eek6FFK4EyVRZbxwRymvunguGVAZAHrg0Aij/CnPbZZATDk4gQbGKpIgEywSYSk6m4hurjLg8L+shkfVQ=="], + "@zag-js/number-input": ["@zag-js/number-input@1.40.0", "", { "dependencies": { "@internationalized/number": "3.6.5", "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-WffdeqSOpsKmgPzBkNZl9nAolQPlyl9dIabaPguGgXdYtZW/OGCGj8jCYqyEu4VL3kDPPVVQRWEqC/XzwzVCRg=="], - "@zag-js/password-input": ["@zag-js/password-input@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-kDtuYq77QCzUF9oOGgHzmdlOHAvLj/syMnx+Sb4KEwBAJCIBrpJKymgEUxK4VumySApvI6OMmuCZN9uRvB0HrA=="], + "@zag-js/pagination": ["@zag-js/pagination@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-Ykotky0A/7rswb6BfOD9aXL1EssKwUYfBRbdWGe52uhVc7dGagMSTUDRVeNhVsP/MEdtwqys7urvDbAlEqq+GA=="], - "@zag-js/pin-input": ["@zag-js/pin-input@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-kMmlRTOLBqxVaBM4Ly7NZi4VbB5SJUfcmyj6pxHV+YSqzFpuS8/o24CTtbLWUg9Zh4wSuM7vnx8A0viWg92V2Q=="], + "@zag-js/password-input": ["@zag-js/password-input@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-mD4tbA4m82oV+0NbJ+P00Q4Gwz+zf1kZEZ3Z48ohICfK/WO1KhCgviY7vu/7bCMnRiD3dbi+nEeym8Kb29wRHw=="], - "@zag-js/popover": ["@zag-js/popover@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/aria-hidden": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-trap": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/remove-scroll": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-LPA4Ld/eD34/C+/jsojXU/GiG9Y4rYN1xFAJIeOdUGF9fAvMVr+TEhvNUnVV7FnIbK5hdFOy7EgAAEL34uqBow=="], + "@zag-js/pin-input": ["@zag-js/pin-input@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-iJIXDJC+9DUx+A3sRdTmHV7vPZXCw9O6le3R0lKf/8kQOgj7FKjbVw2SkUMAoOZ0u5J7Zwg2oZc7ddt1pwUk9w=="], - "@zag-js/popper": ["@zag-js/popper@1.38.2", "", { "dependencies": { "@floating-ui/dom": "^1.7.6", "@zag-js/dom-query": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-iqAFCeximjd2SGbsciXxbrHdrB/T5jeV4bf5KAPPGNM8Ce/dMcz5RteAArqBYJt1RDpB5px4RdeO8y+8vZOK/w=="], + "@zag-js/popover": ["@zag-js/popover@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/aria-hidden": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-trap": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/remove-scroll": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-bjvOep1YNlsvIYGh/rPsFCHjH2cCt2aKsVLyRvzTT1jhGZJvBdQKQBJjSuG5Nh4y1PUqtrrz69ZMWRrJGQ3rNg=="], - "@zag-js/presence": ["@zag-js/presence@1.38.2", "", { "dependencies": { "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2" } }, "sha512-jDBN6Jw6+oDZT7yms1/ZyfwTZjKI8wHpAOPdOOD+uwoJSW/zCrwyymLRf28QVqCfr60gD/oaHt3azKA8sO6ySQ=="], + "@zag-js/popper": ["@zag-js/popper@1.40.0", "", { "dependencies": { "@floating-ui/dom": "^1.7.6", "@zag-js/dom-query": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-rCkgqgwlpgMwcnuSVrZK2xXl1Mvptpuw3cZy6rC2C5F3yE1GmWohdts5VkeQNro+sd/xHTdVovOqY6cU9Htj1w=="], - "@zag-js/progress": ["@zag-js/progress@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-PY8fD2whXqLWafcIAOt8puFcLtnzutk9z074bWrWAV0dhUAzCTuMXF4hPrB/Qf+11CHxZZS467zp8WbgdPhIEw=="], + "@zag-js/presence": ["@zag-js/presence@1.40.0", "", { "dependencies": { "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0" } }, "sha512-P0bAuzEIDuMglE1xfmW5xTuSBlWjNZ8nOGXoIksKOKb+b+jy2Vys6WjZjKipV/jop4u85wfzKchcPc3C+cXuog=="], - "@zag-js/qr-code": ["@zag-js/qr-code@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2", "proxy-memoize": "3.0.1", "uqr": "0.1.2" } }, "sha512-CdPhZ+RfT3DXAKCJr/QY1Sud/b1PDbIpJ2zJxCQI5FyOBK1+rS/FOZ106R5E57+o8pFxBq7BXjp3lMPHYBsyag=="], + "@zag-js/progress": ["@zag-js/progress@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-V61a5CHEs8suevQVS+/1ENj1RDVYNOUUTawK6uriCA6Ol59xe30DmF+eV6Y9miM7L/pN3YjZRq9uEDJMXXK32g=="], - "@zag-js/radio-group": ["@zag-js/radio-group@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-hyQq2AVCov/lgtfXraA/y2cKd9NKKdzXJT7sO2/59eKHyRYMylV3oatcQ2WqjrrnPxEfqLcQ7CWxl7NlcdnTow=="], + "@zag-js/qr-code": ["@zag-js/qr-code@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0", "proxy-memoize": "3.0.1", "uqr": "0.1.2" } }, "sha512-xD37tVrQ46CeqVLqkSm61kURoJ4Z/uOFcB8z7Hu3UX+1OFTfkhgrns6iLUneoRjO3hsqQaTaVkxVOQeLYWb+wA=="], - "@zag-js/rating-group": ["@zag-js/rating-group@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-MggGwIcMWVvuRgDZJPnEvGnk5xYarbXOJnnP7BQK/31OgjRZmxwAAUKxHFDGY8vxRQ2XVTwmrPNTUVDDpQUJxQ=="], + "@zag-js/radio-group": ["@zag-js/radio-group@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-sFJCdyOKzQC9hylSP19R71yv44by/C78D9EHfsxQJtvOgDv9E+h13NNX4n9wWyubC20xftlxkja8sNT5NfJKUw=="], - "@zag-js/react": ["@zag-js/react@1.38.2", "", { "dependencies": { "@zag-js/core": "1.38.2", "@zag-js/store": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-9MViJDg8zQZLITtTRkVIj00KnLc8NU9m9D4Qis2VbMnXg/Wp3mxpW0je8+Dd650ptPKQGFXYONnBB6iIxYJOtA=="], + "@zag-js/rating-group": ["@zag-js/rating-group@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-UMBI3xAMcm7otpAczMGPEA7jC1hvV8NhnZ4mN3oftJB0bc1winoXxJdCkrXN58TTNWrGNSRzjtm048G+HPCdpw=="], - "@zag-js/rect-utils": ["@zag-js/rect-utils@1.38.2", "", {}, "sha512-VX/EHbtq++h+rFGrj/ql3EFPuJwFQLAYjOxyMvEKF34L8N5imDodIyVqrQfumZl5MMGmKstz/x1kL4nHYAxyWQ=="], + "@zag-js/react": ["@zag-js/react@1.40.0", "", { "dependencies": { "@zag-js/core": "1.40.0", "@zag-js/store": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" }, "peerDependencies": { "react": ">=18.0.0", "react-dom": ">=18.0.0" } }, "sha512-2TFS1HYABYGc0lurC+4WEXvKkpxsVv6vKm+t8QAL7wfoeZnw6HDQWLc91kINp89vln+A2kwCfYqIq8HSm+9EeA=="], - "@zag-js/remove-scroll": ["@zag-js/remove-scroll@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2" } }, "sha512-2NInlGgJmMQKMOyd5J2pc+L9/wj4NBhz028VwE31yxCK4dm3swcm5NYHdBAdpNG96ymximJsJndTkry7pnNNIA=="], + "@zag-js/rect-utils": ["@zag-js/rect-utils@1.40.0", "", {}, "sha512-ikgLuE4rLlACm4mGLp6Ga8sJA44uFwohA1nVmb95sQ+VIyx2naf91CEF7SMrZVEwFKHaHpxdKVQSZLRjJqO/dw=="], - "@zag-js/scroll-area": ["@zag-js/scroll-area@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-Z9XuPizDWb3G4RVY6KMj8TpGuurT7C6DQhqMCWfqZkVXwjvC/DOZVDeIxwFOMl/i59UawIL7ttpZCxieeaQhNQ=="], + "@zag-js/remove-scroll": ["@zag-js/remove-scroll@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0" } }, "sha512-f6EgODnJMRtkbgdJCgyllND8jui+RtPrCZy6JYhhOg7KQ+bFfV36KzWQMty38ZdOyrh23UUO7MJ3WGcFXPvk3g=="], - "@zag-js/scroll-snap": ["@zag-js/scroll-snap@1.38.2", "", { "dependencies": { "@zag-js/dom-query": "1.38.2" } }, "sha512-Z3+B++TIv39ZpVES9eaL2qK8UCONctkIKLXzBMDsK1gq0RfTt2xS765D1TH4bitvSc2c0x0ojHCf+Ui99CkXcQ=="], + "@zag-js/scroll-area": ["@zag-js/scroll-area@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-7EtWETRIn8dY7xqAeMOlnEuzhOrtc65mN/0YvT3XYcBz/CzmHzyZTmos3UXBJGnKHSGj61aEpP9g3RK+x/w63A=="], - "@zag-js/select": ["@zag-js/select@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/collection": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-F0qOw0ntyVO1G80iwktVFF3XYUodP9Tfet5XrCmDN+kM2trumn94wV+1plE/7/SRjDED7uwaCSpaBXaFiv8KUw=="], + "@zag-js/scroll-snap": ["@zag-js/scroll-snap@1.40.0", "", { "dependencies": { "@zag-js/dom-query": "1.40.0" } }, "sha512-XtjeOd+pwGX0+K7NvsQncrKwV8CTSzHfVVJrdQ+MweiWBpGNeAh43ySN4L+KSTgtnUiZbuwBIxlKK0tX+WupgQ=="], - "@zag-js/signature-pad": ["@zag-js/signature-pad@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2", "perfect-freehand": "^1.2.3" } }, "sha512-8ZY0cvESLNEKV3dTRLY2lwIaRpgABOSbUsCEi5Aa1w0s/kdUnlwLoJdK96ryE5yb+65lU1q4VvUT40rqIFxX8w=="], + "@zag-js/select": ["@zag-js/select@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/collection": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-auMI9SvocVvKHNWF2DobyQN6+1k3OO6UsQTdkofvbHxX7maosy8ZXA6k1r9Ndt4qLUu7CbdAAQ+qJ4VkgJyvxA=="], - "@zag-js/slider": ["@zag-js/slider@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-EBiCCLpwOA5eMcFgIMcAxNKQDePUqcVE+tTePteUVzzRONK1F/HLsLevIkpdJ4UouhPcDSsu5o2AH+w3bxW4sA=="], + "@zag-js/signature-pad": ["@zag-js/signature-pad@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0", "perfect-freehand": "^1.2.3" } }, "sha512-L0LTxcpdckaGdDDXcQCr4AG+J9xUHH+lsenH7NG4ZI7rSr4nRmHMdDH0GR7nBa6MMdPIIimjWIE/TwZ1OuHzCQ=="], - "@zag-js/splitter": ["@zag-js/splitter@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-Z7lQPTGJWv9GGrFHeg0OvpK6KpnCnoqnVS665rkLaAfmVhak84sh9lJsRiuzm68dobXmbgP/OaD5u0xHo2hgDQ=="], + "@zag-js/slider": ["@zag-js/slider@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-xZGycm+ghGFG3kTYq8g0t1Av1moxg45WiFz5E3bRgP7YU9beSTaFZI8h6f65NiC5P3YuwA0RoYxA46GH22qoZg=="], - "@zag-js/steps": ["@zag-js/steps@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-5fxZVSrgJk5YElhdgoM2p4YhZd9HNVjzKg5uLj4966MOE7jGITUCfvEybMXI+/eOlrh+7CX9Y+iG0PGj+p5wVg=="], + "@zag-js/splitter": ["@zag-js/splitter@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-64KNKwlIjyUIjp7i/whDCpREiSFrNI/cF7MpBJvBGRPUWq8NpNxMGKWD+vBCV+JC61QF9xg/NgNoigFycS9sYw=="], - "@zag-js/store": ["@zag-js/store@1.38.2", "", { "dependencies": { "proxy-compare": "3.0.1" } }, "sha512-TlJM6M2dW5W9jr6US4/R/VobLmlFrSv48ls18XffmXp+uuwZ7Aisciq0Djtwx7Y7e5KhlUWtk4ncE5PtjP4AzQ=="], + "@zag-js/steps": ["@zag-js/steps@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-5sVFzcIYubCn1nJSQIx9WWNlJuFoOJMpkD/ZMwNp0LzpnmnspsCOmdnQUWEftMQ1KdwZ+qNgfo/+kHclb9cBjg=="], - "@zag-js/switch": ["@zag-js/switch@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-EIK0DO8cFcDqE6cobEh66O07nufwQnRnpVvgOWpoB13Ts/LyQ/HUxF377JRPa4EYIY2/hIt6L8zvwfgFHUGAMg=="], + "@zag-js/store": ["@zag-js/store@1.40.0", "", { "dependencies": { "proxy-compare": "3.0.1" } }, "sha512-EmgYIdbNZ4TN4Qht/jugY4UVkaWx69l8P1qiX23U4YwqNLq10tyOJmcXWbvsrprU1dGb24B+xq0WBm/RIjw4WA=="], - "@zag-js/tabs": ["@zag-js/tabs@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-yqCKQ+ugYtwAuF8ya6fkI577Yz96apRwHDawPem4xRq381YC5TYDrLpWvRj4UjakPOjs+1mHf2+53RYQhhEpEg=="], + "@zag-js/switch": ["@zag-js/switch@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-hUH3AF79ndSFZxt7Plw7mVZV0QlM0kFqKwrAGBEOE77P3rKpOsMJ3wWgMb3w6nwlxGQsbwmMgAFvYUslLpM4Lg=="], - "@zag-js/tags-input": ["@zag-js/tags-input@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/auto-resize": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/interact-outside": "1.38.2", "@zag-js/live-region": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-WV7uz5UGXThL8PqTor8tFKtLsTO79B7mRjoVNwgSKJ473C+Z9tFhJx+S6cPXvSx0PcDxYBX1DXI0NFWVgWVD4Q=="], + "@zag-js/tabs": ["@zag-js/tabs@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-xqfPC2nQ6Bn4nqy1L+1CVcQcg/Z7K2q753OvsX2C8Wtu+7tF//HyMbOpF6fGikqlLkUzCkvjkqDjdOXcfWN9ZQ=="], - "@zag-js/timer": ["@zag-js/timer@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-CwF6F4CuT4pKcOsL2t3gKLi3l4Sbr13eGGuZyJTn1fwjPsepEdq4ppxKto+/pYC30pzyrQRRqsL59H4k757z/A=="], + "@zag-js/tags-input": ["@zag-js/tags-input@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/auto-resize": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/interact-outside": "1.40.0", "@zag-js/live-region": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-3cB7nPlUvzZNZwQw5AaTuxwcRn1n2qkDCjLEb2NEwtmI+YxHbK3k1MtXjTccjcYjU8cAkv+jaeyZPs6KFKQcHA=="], - "@zag-js/toast": ["@zag-js/toast@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-VRTfTjRrnn9U8RVKr2dTUWBzMBALNy5PMxr+z7Q1hUufv0JYfzPsSkVXsbSjI5OZPklbJ5P1ugmUrtVrATyGHw=="], + "@zag-js/timer": ["@zag-js/timer@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-Rvet226fhUtZnItjHpUYV7MH0uEFZfXT9PSRrX5jdiU4/P0eWKbirwi//AVeqcWFexXvw6ajYSfQN7EVyr2x4w=="], - "@zag-js/toggle": ["@zag-js/toggle@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-8Hk5E4IK7wkG6hk/PI1c9f1vcgVGxbVIDI7WqTk5EeCSIWSKvIGAsBSCuWK2N7nlDlXuUQ4Ns2tvNZF9SfBG7A=="], + "@zag-js/toast": ["@zag-js/toast@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-EDH43zdiH4Bz30cE6YI9g//qXGOOfWObM3dFLG8I0q/cJRf7/6jO82rwZAHPwfOSfKhUDxStirD8F6eoY6BWXA=="], - "@zag-js/toggle-group": ["@zag-js/toggle-group@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-vl9hDypfxiwR3gcsai+lBwRcPR1NwwNVP8ZhS3mdMwi3v5Lr4R4UCZc0l2/qFPj+IQ0q01VIGJJbkkFCB7a3iQ=="], + "@zag-js/toggle": ["@zag-js/toggle@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-DW7682lzTP2eDlMvrS7tUX3zAm7ufrrKr7VDiX8BB6oXBRETXrVIxCYNuoIdqjwXebdjAoxaCiUZEreRVucYQg=="], - "@zag-js/tooltip": ["@zag-js/tooltip@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-visible": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-pFVWc6KjLujIvyOz2CzFQu4e9NVC61yE0oQpjRIQwzZAICxxiPE3QeOtb0Aw3Jhd0n2Y7qxuLyFI6gcAxI9Sxg=="], + "@zag-js/toggle-group": ["@zag-js/toggle-group@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-+JKcnfEbdQnr5p7uRvYLdivhUsM6iio71UC10tK74nXYRnYm0/Uvxg3oQzvbNTq9WdcU/DIh3gZVZ2Vex9nBnQ=="], - "@zag-js/tour": ["@zag-js/tour@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dismissable": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/focus-trap": "1.38.2", "@zag-js/interact-outside": "1.38.2", "@zag-js/popper": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-HwHN7gC30Epfz0VEQsgcnzUK71cpB/Wl/HXv9daeDgtXHdqhJcnpaRVthfQr8ebSEBBWWui4r8dAxGJxrtUing=="], + "@zag-js/tooltip": ["@zag-js/tooltip@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-visible": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-pyrvit+nB8dIwVNTGBRlHPsh7yMJGAxxM1zfY7HOTJqF+n6+6xYTQ4gQ/Ocy1Q7I5kO88+m16naEh0qLFiTZww=="], - "@zag-js/tree-view": ["@zag-js/tree-view@1.38.2", "", { "dependencies": { "@zag-js/anatomy": "1.38.2", "@zag-js/collection": "1.38.2", "@zag-js/core": "1.38.2", "@zag-js/dom-query": "1.38.2", "@zag-js/types": "1.38.2", "@zag-js/utils": "1.38.2" } }, "sha512-w2R+EI6/ovTjGI6Vu/z6pMS9ZUMjSsj7jAsm7ZKbfwNngSIJBAu+kdAAZbeovl9MW/gnNVgpuJuS6N4yqANdIw=="], + "@zag-js/tour": ["@zag-js/tour@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dismissable": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/focus-trap": "1.40.0", "@zag-js/interact-outside": "1.40.0", "@zag-js/popper": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-VczYGFQM9xsSbfy5N0NP91GdKxbYvfPCDAguD+WQSs1umEIgAAozSKPUdV3NNCX5Pq6B1F3dBxi6gYPdNqrAHg=="], - "@zag-js/types": ["@zag-js/types@1.38.2", "", { "dependencies": { "csstype": "3.2.3" } }, "sha512-fvUf3J4QOFAliuo5wHTO/awO0GKFAn5AHNOXbGH5IuoxIwa0oK5tSXVwdF8JE7ISOkQh4oB2fq3g4QjxmAXDyA=="], + "@zag-js/tree-view": ["@zag-js/tree-view@1.40.0", "", { "dependencies": { "@zag-js/anatomy": "1.40.0", "@zag-js/collection": "1.40.0", "@zag-js/core": "1.40.0", "@zag-js/dom-query": "1.40.0", "@zag-js/types": "1.40.0", "@zag-js/utils": "1.40.0" } }, "sha512-v/20ekjbM+HXDEkpHAz6k8WpoZRmZmdCApDIkIgXVHPRQk+kwAiiIPY20ZDG+DjRu7Lh0MUdQavdZtGj6Ihwkw=="], - "@zag-js/utils": ["@zag-js/utils@1.38.2", "", {}, "sha512-8UuWDomJ5JLX/KSDjEA4poX9rzqkGL47RiSCuVod+qZpWD0jpyXP7Lf600GUFtirRAiuN3x1+7KE6Elt/0rxtw=="], + "@zag-js/types": ["@zag-js/types@1.40.0", "", { "dependencies": { "csstype": "3.2.3" } }, "sha512-LVvxEyqFv/u9SEe5xdivvG2vYb9cCmbkD+5r6s+IGljpDLaRgv4BYyxEh40ri1ai070tL08ZKmoLfx2/xfvY/A=="], + + "@zag-js/utils": ["@zag-js/utils@1.40.0", "", {}, "sha512-XUpqDtXfHe7CySjOhLPLj9H8rxbiFUJAGgmBzNdpsGPP4wx12cpOXrpSjRXZ2kMwooMPz/P7RPDBteto8sqhAQ=="], "abbrev": ["abbrev@2.0.0", "", {}, "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ=="], @@ -1766,16 +1742,12 @@ "acorn-loose": ["acorn-loose@8.5.2", "", { "dependencies": { "acorn": "^8.15.0" } }, "sha512-PPvV6g8UGMGgjrMu+n/f9E/tCSkNQ2Y97eFvuVdJfG11+xdIeDcLyNdC8SHcrHbRqkfwLASdplyR6B6sKM1U4A=="], - "ajv": ["ajv@6.14.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw=="], - - "ajv-draft-04": ["ajv-draft-04@1.0.0", "", { "peerDependencies": { "ajv": "^8.5.0" }, "optionalPeers": ["ajv"] }, "sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw=="], + "ajv": ["ajv@6.15.0", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw=="], - "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], "ajv-keywords": ["ajv-keywords@5.1.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3" }, "peerDependencies": { "ajv": "^8.8.2" } }, "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw=="], - "alien-signals": ["alien-signals@0.4.14", "", {}, "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q=="], - "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], @@ -1818,7 +1790,7 @@ "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "axe-core": ["axe-core@4.11.1", "", {}, "sha512-BASOg+YwO2C+346x3LZOeoovTIoTrRqEsqMa6fmfAV0P+U9mFr9NsyOEpiYvFjbc64NMrSswhV50WdXzdb/Z5A=="], + "axe-core": ["axe-core@4.11.4", "", {}, "sha512-KunSNx+TVpkAw/6ULfhnx+HWRecjqZGTOyquAoWHYLRSdK1tB5Ihce1ZW+UY3fj33bYAFWPu7W/GRSmmrCGuxA=="], "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="], @@ -1840,7 +1812,7 @@ "base64-js": ["base64-js@0.0.8", "", {}, "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw=="], - "baseline-browser-mapping": ["baseline-browser-mapping@2.10.12", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ=="], + "baseline-browser-mapping": ["baseline-browser-mapping@2.10.29", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-Asa2krT+XTPZINCS+2QcyS8WTkObE77RwkydwF7h6DmnKqbvlalz93m/dnphUyCa6SWSP51VgtEUf2FN+gelFQ=="], "big.js": ["big.js@5.2.2", "", {}, "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="], @@ -1848,7 +1820,7 @@ "body-scroll-lock": ["body-scroll-lock@3.1.5", "", {}, "sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg=="], - "brace-expansion": ["brace-expansion@1.1.13", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w=="], + "brace-expansion": ["brace-expansion@1.1.14", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g=="], "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], @@ -1860,7 +1832,7 @@ "bun-test-env-dom": ["bun-test-env-dom@1.0.3", "", { "dependencies": { "@happy-dom/global-registrator": ">=20.0", "@testing-library/dom": ">=10.4", "@testing-library/jest-dom": ">=6.9", "@testing-library/react": ">=16.3", "@testing-library/user-event": ">=14.6" } }, "sha512-Ozepvzk1s/bJSxABEjbI+Ztnm3CN1b0vRSvf0Qa0rTnuO7S0wKN2cUTsXdyIJuqE6OnlAhyoe2NGqkdeemz5/Q=="], - "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + "bun-types": ["bun-types@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA=="], "bundle-n-require": ["bundle-n-require@1.1.2", "", { "dependencies": { "esbuild": "^0.25.1", "node-eval": "^2.0.0" } }, "sha512-bEk2jakVK1ytnZ9R2AAiZEeK/GxPUM8jvcRxHZXifZDMcjkI4EG/GlsJ2YGSVYT9y/p/gA9/0yDY8rCGsSU6Tg=="], @@ -1870,7 +1842,7 @@ "cac": ["cac@6.7.14", "", {}, "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ=="], - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + "call-bind": ["call-bind@1.0.9", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" } }, "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ=="], "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], @@ -1882,7 +1854,7 @@ "camelize": ["camelize@1.0.1", "", {}, "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ=="], - "caniuse-lite": ["caniuse-lite@1.0.30001782", "", {}, "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw=="], + "caniuse-lite": ["caniuse-lite@1.0.30001792", "", {}, "sha512-hVLMUZFgR4JJ6ACt1uEESvQN1/dBVqPAKY0hgrV70eN3391K6juAfTjKZLKvOMsx8PxA7gsY1/tLMMTcfFLLpw=="], "ccount": ["ccount@2.0.1", "", {}, "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg=="], @@ -1934,7 +1906,7 @@ "confbox": ["confbox@0.2.4", "", {}, "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ=="], - "content-disposition": ["content-disposition@1.0.1", "", {}, "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q=="], + "content-disposition": ["content-disposition@1.1.0", "", {}, "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g=="], "content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="], @@ -1944,8 +1916,6 @@ "cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="], - "core-js": ["core-js@3.47.0", "", {}, "sha512-c3Q2VVkGAUyupsjRnaNX6u8Dq2vAdzm9iuPj5FW0fRxzlxgq9Q39MDq10IvmQSpLgHQNyQzQmOo6bgGHmH3NNg=="], - "core-js-compat": ["core-js-compat@3.49.0", "", { "dependencies": { "browserslist": "^4.28.1" } }, "sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA=="], "cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="], @@ -1986,8 +1956,6 @@ "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="], - "de-indent": ["de-indent@1.0.2", "", {}, "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], @@ -2022,8 +1990,6 @@ "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "^2.0.0" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "diff": ["diff@8.0.4", "", {}, "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw=="], - "diff-sequences": ["diff-sequences@29.6.3", "", {}, "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q=="], "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="], @@ -2038,7 +2004,7 @@ "ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="], - "electron-to-chromium": ["electron-to-chromium@1.5.328", "", {}, "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w=="], + "electron-to-chromium": ["electron-to-chromium@1.5.353", "", {}, "sha512-kOrWphBi8TOZyiJZqsgqIle0lw+tzmnQK83pV9dZUd01Nm2POECSyFQMAuarzZdYqQW7FH9RaYOuaRo3h+bQ3w=="], "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], @@ -2046,11 +2012,11 @@ "emojis-list": ["emojis-list@3.0.0", "", {}, "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q=="], - "empathic": ["empathic@2.0.0", "", {}, "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA=="], + "empathic": ["empathic@2.0.1", "", {}, "sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q=="], "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], - "enhanced-resolve": ["enhanced-resolve@5.20.1", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.0" } }, "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA=="], + "enhanced-resolve": ["enhanced-resolve@5.21.2", "", { "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.3.3" } }, "sha512-xe9vQb5kReirPUxgQrXA3ihgbCqssmTiM7cOZ+Gzu+VeGWgpV98lLZvp0dl4yriyAePcewxGUs9UpKD8PET9KQ=="], "entities": ["entities@7.0.1", "", {}, "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA=="], @@ -2058,17 +2024,15 @@ "error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="], - "error-stack-parser": ["error-stack-parser@2.1.4", "", { "dependencies": { "stackframe": "^1.3.4" } }, "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ=="], - - "es-abstract": ["es-abstract@1.24.1", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw=="], + "es-abstract": ["es-abstract@1.24.2", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg=="], "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - "es-iterator-helpers": ["es-iterator-helpers@1.3.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.1", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0", "safe-array-concat": "^1.1.3" } }, "sha512-zWwRvqWiuBPr0muUG/78cW3aHROFCNIQ3zpmYDpwdbnt2m+xlNyRWpHBpa2lJjSBit7BQ+RXA1iwbSmu5yJ/EQ=="], + "es-iterator-helpers": ["es-iterator-helpers@1.3.2", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.2", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.1.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.3.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.5", "math-intrinsics": "^1.1.0" } }, "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw=="], - "es-module-lexer": ["es-module-lexer@2.0.0", "", {}, "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw=="], + "es-module-lexer": ["es-module-lexer@2.1.0", "", {}, "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ=="], "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], @@ -2082,7 +2046,7 @@ "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "^1.0.0", "acorn": "^8.0.0", "esast-util-from-estree": "^2.0.0", "vfile-message": "^4.0.0" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], - "esbuild": ["esbuild@0.27.4", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.4", "@esbuild/android-arm": "0.27.4", "@esbuild/android-arm64": "0.27.4", "@esbuild/android-x64": "0.27.4", "@esbuild/darwin-arm64": "0.27.4", "@esbuild/darwin-x64": "0.27.4", "@esbuild/freebsd-arm64": "0.27.4", "@esbuild/freebsd-x64": "0.27.4", "@esbuild/linux-arm": "0.27.4", "@esbuild/linux-arm64": "0.27.4", "@esbuild/linux-ia32": "0.27.4", "@esbuild/linux-loong64": "0.27.4", "@esbuild/linux-mips64el": "0.27.4", "@esbuild/linux-ppc64": "0.27.4", "@esbuild/linux-riscv64": "0.27.4", "@esbuild/linux-s390x": "0.27.4", "@esbuild/linux-x64": "0.27.4", "@esbuild/netbsd-arm64": "0.27.4", "@esbuild/netbsd-x64": "0.27.4", "@esbuild/openbsd-arm64": "0.27.4", "@esbuild/openbsd-x64": "0.27.4", "@esbuild/openharmony-arm64": "0.27.4", "@esbuild/sunos-x64": "0.27.4", "@esbuild/win32-arm64": "0.27.4", "@esbuild/win32-ia32": "0.27.4", "@esbuild/win32-x64": "0.27.4" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-Rq4vbHnYkK5fws5NF7MYTU68FPRE1ajX7heQ/8QXXWqNgqqJ/GkmmyxIzUnf2Sr/bakf8l54716CcMGHYhMrrQ=="], + "esbuild": ["esbuild@0.27.7", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.7", "@esbuild/android-arm": "0.27.7", "@esbuild/android-arm64": "0.27.7", "@esbuild/android-x64": "0.27.7", "@esbuild/darwin-arm64": "0.27.7", "@esbuild/darwin-x64": "0.27.7", "@esbuild/freebsd-arm64": "0.27.7", "@esbuild/freebsd-x64": "0.27.7", "@esbuild/linux-arm": "0.27.7", "@esbuild/linux-arm64": "0.27.7", "@esbuild/linux-ia32": "0.27.7", "@esbuild/linux-loong64": "0.27.7", "@esbuild/linux-mips64el": "0.27.7", "@esbuild/linux-ppc64": "0.27.7", "@esbuild/linux-riscv64": "0.27.7", "@esbuild/linux-s390x": "0.27.7", "@esbuild/linux-x64": "0.27.7", "@esbuild/netbsd-arm64": "0.27.7", "@esbuild/netbsd-x64": "0.27.7", "@esbuild/openbsd-arm64": "0.27.7", "@esbuild/openbsd-x64": "0.27.7", "@esbuild/openharmony-arm64": "0.27.7", "@esbuild/sunos-x64": "0.27.7", "@esbuild/win32-arm64": "0.27.7", "@esbuild/win32-ia32": "0.27.7", "@esbuild/win32-x64": "0.27.7" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w=="], "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], @@ -2092,11 +2056,11 @@ "eslint": ["eslint@9.39.4", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.2", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.5", "@eslint/js": "9.39.4", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.5", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ=="], - "eslint-config-next": ["eslint-config-next@16.1.7", "", { "dependencies": { "@next/eslint-plugin-next": "16.1.7", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-FTq1i/QDltzq+zf9aB/cKWAiZ77baG0V7h8dRQh3thVx7I4dwr6ZXQrWKAaTB7x5VwVXlzoUTyMLIVQPLj2gJg=="], + "eslint-config-next": ["eslint-config-next@16.2.6", "", { "dependencies": { "@next/eslint-plugin-next": "16.2.6", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-z2ELYSkyrrJ6cuunTU8vhsT/RpouPkjaSah06nVW6Rg2Hpg0Vs8s497/e5s8G8qtdp4ccsiovz5P1rv+5VSW2Q=="], "eslint-config-prettier": ["eslint-config-prettier@10.1.8", "", { "peerDependencies": { "eslint": ">=7.0.0" }, "bin": { "eslint-config-prettier": "bin/cli.js" } }, "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w=="], - "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="], + "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.10", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.16.1", "resolve": "^2.0.0-next.6" } }, "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ=="], "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import", "eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="], @@ -2106,9 +2070,9 @@ "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="], - "eslint-plugin-devup": ["eslint-plugin-devup@2.0.17", "", { "dependencies": { "@devup-ui/eslint-plugin": ">=1.0", "@eslint/js": ">=9.39", "@tanstack/eslint-plugin-query": ">=5", "eslint": ">=9.39", "eslint-config-prettier": ">=10", "eslint-plugin-mdx": ">=3", "eslint-plugin-prettier": ">=5", "eslint-plugin-react": ">=7", "eslint-plugin-react-hooks": ">=7", "eslint-plugin-simple-import-sort": ">=12", "eslint-plugin-unused-imports": ">=4", "prettier": ">=3", "typescript-eslint": ">=8.53" } }, "sha512-c62jL0tbPNH82a5BqI8E9YaVYupM3AvvKnfoWaYZX1ZNY9/GTGKXsbiqOgWjg4m24WSGApZCSnQkufpv+7Fidg=="], + "eslint-plugin-devup": ["eslint-plugin-devup@2.0.19", "", { "dependencies": { "@devup-ui/eslint-plugin": ">=1.0.14", "@eslint/js": ">=10.0", "@tanstack/eslint-plugin-query": ">=5.100.6", "eslint": ">=10.2", "eslint-config-prettier": ">=10", "eslint-plugin-mdx": ">=3.7.0", "eslint-plugin-prettier": ">=5.5.5", "eslint-plugin-react": ">=7.37.5", "eslint-plugin-react-hooks": ">=7", "eslint-plugin-simple-import-sort": ">=13.0.0", "eslint-plugin-unused-imports": ">=4.4.1", "prettier": ">=3", "typescript-eslint": ">=8.59" } }, "sha512-E1CwZp4kjy/py/xztR1cXOF/FuzEuGc2GaYEK3cCaAtVna0rTT9TwxPKcTpGQIJvjlZHNxEl5BoeJdARC8GGPQ=="], - "eslint-plugin-eslint-plugin": ["eslint-plugin-eslint-plugin@7.3.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "estraverse": "^5.3.0" }, "peerDependencies": { "eslint": ">=9.0.0" } }, "sha512-odUwjaeon0s3W96vAmZf13XbTEGKnnXStnRykwM3XysTce7ZI7C8AJRn47OFJMdDNVtG/jLb/gFk0Wvj9zkSbQ=="], + "eslint-plugin-eslint-plugin": ["eslint-plugin-eslint-plugin@7.3.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "estraverse": "^5.3.0" }, "peerDependencies": { "eslint": ">=9.0.0" } }, "sha512-u99Dsum45JP0j3ep4EcaERIT5VpArPgrXryRMeVNMfnY/bTQFkDl25T3y+FBwVbYnEGCoZzW9DLaI21cDwgldw=="], "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="], @@ -2122,11 +2086,11 @@ "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="], - "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@7.0.1", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "hermes-parser": "^0.25.1", "zod": "^3.25.0 || ^4.0.0", "zod-validation-error": "^3.5.0 || ^4.0.0" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA=="], + "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@7.1.1", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "hermes-parser": "^0.25.1", "zod": "^3.25.0 || ^4.0.0", "zod-validation-error": "^3.5.0 || ^4.0.0" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 || ^10.0.0" } }, "sha512-f2I7Gw6JbvCexzIInuSbZpfdQ44D7iqdWX01FKLvrPgqxoE7oMj8clOfto8U6vYiz4yd5oKu39rRSVOe1zRu0g=="], - "eslint-plugin-simple-import-sort": ["eslint-plugin-simple-import-sort@12.1.1", "", { "peerDependencies": { "eslint": ">=5.0.0" } }, "sha512-6nuzu4xwQtE3332Uz0to+TxDQYRLTKRESSc2hefVT48Zc8JthmN23Gx9lnYhu0FtkRSL1oxny3kJ2aveVhmOVA=="], + "eslint-plugin-simple-import-sort": ["eslint-plugin-simple-import-sort@13.0.0", "", { "peerDependencies": { "eslint": ">=5.0.0" } }, "sha512-McAc+/Nlvcg4byY/CABGH8kqnefWBj8s3JA2okEtz8ixbECQgU46p0HkTUKa4YS7wvgGceimlc34p1nXqbWqtA=="], - "eslint-plugin-storybook": ["eslint-plugin-storybook@10.3.3", "", { "dependencies": { "@typescript-eslint/utils": "^8.48.0" }, "peerDependencies": { "eslint": ">=8", "storybook": "^10.3.3" } }, "sha512-jo8wZvKaJlxxrNvf4hCsROJP3CdlpaLiYewAs5Ww+PJxCrLelIi5XVHWOAgBvvr3H9WDKvUw8xuvqPYqAlpkFg=="], + "eslint-plugin-storybook": ["eslint-plugin-storybook@10.3.6", "", { "dependencies": { "@typescript-eslint/utils": "^8.48.0" }, "peerDependencies": { "eslint": ">=8", "storybook": "^10.3.6" } }, "sha512-8udrL+Rmp5LFaZvgRe4J226X1MYls25bWCyHuzR5X8s2qbFTryX+wKC+o/0Ato4A1AvwnDg8OOMPc6yWJ9JpcA=="], "eslint-plugin-unused-imports": ["eslint-plugin-unused-imports@4.4.1", "", { "peerDependencies": { "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", "eslint": "^10.0.0 || ^9.0.0 || ^8.0.0" }, "optionalPeers": ["@typescript-eslint/eslint-plugin"] }, "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ=="], @@ -2168,11 +2132,11 @@ "eventsource": ["eventsource@3.0.7", "", { "dependencies": { "eventsource-parser": "^3.0.1" } }, "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA=="], - "eventsource-parser": ["eventsource-parser@3.0.6", "", {}, "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg=="], + "eventsource-parser": ["eventsource-parser@3.0.8", "", {}, "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ=="], "express": ["express@5.2.1", "", { "dependencies": { "accepts": "^2.0.0", "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "finalhandler": "^2.1.0", "fresh": "^2.0.0", "http-errors": "^2.0.0", "merge-descriptors": "^2.0.0", "mime-types": "^3.0.0", "on-finished": "^2.4.1", "once": "^1.4.0", "parseurl": "^1.3.3", "proxy-addr": "^2.0.7", "qs": "^6.14.0", "range-parser": "^1.2.1", "router": "^2.2.0", "send": "^1.1.0", "serve-static": "^2.2.0", "statuses": "^2.0.1", "type-is": "^2.0.1", "vary": "^1.1.2" } }, "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw=="], - "express-rate-limit": ["express-rate-limit@8.3.1", "", { "dependencies": { "ip-address": "10.1.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-D1dKN+cmyPWuvB+G2SREQDzPY1agpBIcTa9sJxOPMCNeH3gwzhqJRDWCXW3gg0y//+LQ/8j52JbMROWyrKdMdw=="], + "express-rate-limit": ["express-rate-limit@8.5.1", "", { "dependencies": { "ip-address": "^10.2.0" }, "peerDependencies": { "express": ">= 4.11" } }, "sha512-5O6KYmyJEpuPJV5hNTXKbAHWRqrzyu+OI3vUnSd2kXFubIVpG7ezpgxQy76Zo5GQZtrQBg86hF+CM/NX+cioiQ=="], "exsolve": ["exsolve@1.0.8", "", {}, "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA=="], @@ -2188,7 +2152,7 @@ "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="], - "fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="], + "fast-uri": ["fast-uri@3.1.2", "", {}, "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ=="], "fastq": ["fastq@1.20.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw=="], @@ -2248,7 +2212,7 @@ "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="], - "get-tsconfig": ["get-tsconfig@4.13.7", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q=="], + "get-tsconfig": ["get-tsconfig@4.14.0", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA=="], "glob": ["glob@13.0.6", "", { "dependencies": { "minimatch": "^10.2.2", "minipass": "^7.1.3", "path-scurry": "^2.0.2" } }, "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw=="], @@ -2256,7 +2220,7 @@ "glob-to-regexp": ["glob-to-regexp@0.4.1", "", {}, "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="], - "globals": ["globals@17.4.0", "", {}, "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw=="], + "globals": ["globals@17.6.0", "", {}, "sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA=="], "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="], @@ -2266,7 +2230,7 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], - "happy-dom": ["happy-dom@20.8.9", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.18.3" } }, "sha512-Tz23LR9T9jOGVZm2x1EPdXqwA37G/owYMxRwU0E4miurAtFsPMQ1d2Jc2okUaSjZqAFz2oEn3FLXC5a0a+siyA=="], + "happy-dom": ["happy-dom@20.9.0", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "entities": "^7.0.1", "whatwg-mimetype": "^3.0.0", "ws": "^8.18.3" } }, "sha512-GZZ9mKe8r646NUAf/zemnGbjYh4Bt8/MqASJY+pSm5ZDtc3YQox+4gsLI7yi1hba6o+eCsGxpHn5+iEVn31/FQ=="], "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], @@ -2280,7 +2244,7 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + "hasown": ["hasown@2.0.3", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg=="], "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "^3.0.0" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], @@ -2292,8 +2256,6 @@ "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "^3.0.0", "comma-separated-tokens": "^2.0.0", "hast-util-parse-selector": "^4.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], - "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], - "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="], "hermes-parser": ["hermes-parser@0.25.1", "", { "dependencies": { "hermes-estree": "0.25.1" } }, "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA=="], @@ -2306,14 +2268,10 @@ "hoist-non-react-statics": ["hoist-non-react-statics@3.3.2", "", { "dependencies": { "react-is": "^16.7.0" } }, "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw=="], - "hono": ["hono@4.12.9", "", {}, "sha512-wy3T8Zm2bsEvxKZM5w21VdHDDcwVS1yUFFY6i8UobSsKfFceT7TOwhbhfKsDyx7tYQlmRM5FLpIuYvNFyjctiA=="], - - "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], + "hono": ["hono@4.12.18", "", {}, "sha512-RWzP96k/yv0PQfyXnWjs6zot20TqfpfsNXhOnev8d1InAxubW93L11/oNUc3tQqn2G0bSdAOBpX+2uDFHV7kdQ=="], "hosted-git-info": ["hosted-git-info@7.0.2", "", { "dependencies": { "lru-cache": "^10.0.1" } }, "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w=="], - "html-entities": ["html-entities@2.6.0", "", {}, "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ=="], - "html-url-attributes": ["html-url-attributes@3.0.1", "", {}, "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ=="], "http-errors": ["http-errors@2.0.1", "", { "dependencies": { "depd": "~2.0.0", "inherits": "~2.0.4", "setprototypeof": "~1.2.0", "statuses": "~2.0.2", "toidentifier": "~1.0.1" } }, "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ=="], @@ -2324,9 +2282,9 @@ "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], - "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], + "image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="], - "import-lazy": ["import-lazy@4.0.0", "", {}, "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw=="], + "import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="], "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], @@ -2346,7 +2304,7 @@ "invariant": ["invariant@2.2.4", "", { "dependencies": { "loose-envify": "^1.0.0" } }, "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA=="], - "ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="], + "ip-address": ["ip-address@10.2.0", "", {}, "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA=="], "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], @@ -2368,7 +2326,7 @@ "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="], + "is-core-module": ["is-core-module@2.16.2", "", { "dependencies": { "hasown": "^2.0.3" } }, "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA=="], "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="], @@ -2406,8 +2364,6 @@ "is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="], - "is-reference": ["is-reference@3.0.3", "", { "dependencies": { "@types/estree": "^1.0.6" } }, "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw=="], - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], @@ -2440,11 +2396,9 @@ "jest-worker": ["jest-worker@27.5.1", "", { "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" } }, "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg=="], - "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], - - "jju": ["jju@1.4.0", "", {}, "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA=="], + "jiti": ["jiti@2.7.0", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ=="], - "jose": ["jose@6.2.2", "", {}, "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ=="], + "jose": ["jose@6.2.3", "", {}, "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw=="], "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], @@ -2454,7 +2408,7 @@ "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="], - "json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + "json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="], @@ -2466,7 +2420,7 @@ "jsonc-eslint-parser": ["jsonc-eslint-parser@3.1.0", "", { "dependencies": { "acorn": "^8.5.0", "eslint-visitor-keys": "^5.0.0", "semver": "^7.3.5" } }, "sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng=="], - "jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="], + "jsonfile": ["jsonfile@6.2.1", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q=="], "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="], @@ -2482,7 +2436,7 @@ "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="], - "lenis": ["lenis@1.3.21", "", { "peerDependencies": { "@nuxt/kit": ">=3.0.0", "react": ">=17.0.0", "vue": ">=3.0.0" }, "optionalPeers": ["@nuxt/kit", "react", "vue"] }, "sha512-RXWTYm7KQE4Kv8ezxL6wvK0Oiv7aRr6FDo+eNaaniTeu7pLdHokqMIJ5CXO4x5ezvd+9ONdpSFkprLpXsVWmEw=="], + "lenis": ["lenis@1.3.23", "", { "peerDependencies": { "@nuxt/kit": ">=3.0.0", "react": ">=17.0.0", "vue": ">=3.0.0" }, "optionalPeers": ["@nuxt/kit", "react", "vue"] }, "sha512-YxYq3TJqj9sJNv0V9SkyQHejt14xwyIwgDaaMK89Uf9SxQfIszu+gTQSSphh6BWlLTNVKvvXAGkg+Zf+oFIevg=="], "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="], @@ -2516,7 +2470,7 @@ "load-plugin": ["load-plugin@6.0.3", "", { "dependencies": { "@npmcli/config": "^8.0.0", "import-meta-resolve": "^4.0.0" } }, "sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w=="], - "loader-runner": ["loader-runner@4.3.1", "", {}, "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q=="], + "loader-runner": ["loader-runner@4.3.2", "", {}, "sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w=="], "loader-utils": ["loader-utils@2.0.4", "", { "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" } }, "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw=="], @@ -2524,8 +2478,6 @@ "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], - "lodash": ["lodash@4.17.23", "", {}, "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="], - "lodash.debounce": ["lodash.debounce@4.0.8", "", {}, "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow=="], "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], @@ -2640,9 +2592,9 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="], + "mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="], + "mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], "min-indent": ["min-indent@1.0.1", "", {}, "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="], @@ -2660,9 +2612,7 @@ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], - "muggle-string": ["muggle-string@0.4.1", "", {}, "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ=="], - - "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], + "nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="], "napi-postinstall": ["napi-postinstall@0.3.4", "", { "bin": { "napi-postinstall": "lib/cli.js" } }, "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ=="], @@ -2672,7 +2622,7 @@ "neo-async": ["neo-async@2.6.2", "", {}, "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="], - "next": ["next@16.2.1", "", { "dependencies": { "@next/env": "16.2.1", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.1", "@next/swc-darwin-x64": "16.2.1", "@next/swc-linux-arm64-gnu": "16.2.1", "@next/swc-linux-arm64-musl": "16.2.1", "@next/swc-linux-x64-gnu": "16.2.1", "@next/swc-linux-x64-musl": "16.2.1", "@next/swc-win32-arm64-msvc": "16.2.1", "@next/swc-win32-x64-msvc": "16.2.1", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-VaChzNL7o9rbfdt60HUj8tev4m6d7iC1igAy157526+cJlXOQu5LzsBXNT+xaJnTP/k+utSX5vMv7m0G+zKH+Q=="], + "next": ["next@16.2.6", "", { "dependencies": { "@next/env": "16.2.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.6", "@next/swc-darwin-x64": "16.2.6", "@next/swc-linux-arm64-gnu": "16.2.6", "@next/swc-linux-arm64-musl": "16.2.6", "@next/swc-linux-x64-gnu": "16.2.6", "@next/swc-linux-x64-musl": "16.2.6", "@next/swc-win32-arm64-msvc": "16.2.6", "@next/swc-win32-x64-msvc": "16.2.6", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-qOVgKJg1+At15NpeUP+eJgCHvTCgXsogweq87Ri/Ix7PkqQHg4sdaXmSFqKlgaIXE4kW0g25LE68W87UANlHtw=="], "next-chakra-ui-benchmark": ["next-chakra-ui-benchmark@workspace:benchmark/next-chakra-ui"], @@ -2708,7 +2658,7 @@ "node-exports-info": ["node-exports-info@1.6.0", "", { "dependencies": { "array.prototype.flatmap": "^1.3.3", "es-errors": "^1.3.0", "object.entries": "^1.1.9", "semver": "^6.3.1" } }, "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw=="], - "node-releases": ["node-releases@2.0.36", "", {}, "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA=="], + "node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="], "nopt": ["nopt@7.2.1", "", { "dependencies": { "abbrev": "^2.0.0" }, "bin": { "nopt": "bin/nopt.js" } }, "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w=="], @@ -2788,7 +2738,7 @@ "path-scurry": ["path-scurry@2.0.2", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg=="], - "path-to-regexp": ["path-to-regexp@8.4.0", "", {}, "sha512-PuseHIvAnz3bjrM2rGJtSgo1zjgxapTLZ7x2pjhzWwlp4SJQgK3f3iZIQwkpEnBaKz6seKBADpM4B4ySkuYypg=="], + "path-to-regexp": ["path-to-regexp@8.4.2", "", {}, "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA=="], "path-type": ["path-type@4.0.0", "", {}, "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw=="], @@ -2800,8 +2750,6 @@ "perfect-freehand": ["perfect-freehand@1.2.3", "", {}, "sha512-bHZSfqDHGNlPpgH2yxXgPHlQSPpEbo+qg7li0M78J9vNAi2yjwLeA4x79BEQhX44lEWpCLSFCeRZwpw0niiXPA=="], - "periscopic": ["periscopic@4.0.2", "", { "dependencies": { "@types/estree": "*", "is-reference": "^3.0.2", "zimmerframe": "^1.0.0" } }, "sha512-sqpQDUy8vgB7ycLkendSKS6HnVz1Rneoc3Rc+ZBUCe2pbqlVuCC5vF52l0NJ1aiMg/r1qfYF9/myz8CZeI2rjA=="], - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], "picomatch": ["picomatch@4.0.4", "", {}, "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A=="], @@ -2812,15 +2760,15 @@ "pkg-types": ["pkg-types@2.3.0", "", { "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", "pathe": "^2.0.3" } }, "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig=="], - "playwright": ["playwright@1.58.2", "", { "dependencies": { "playwright-core": "1.58.2" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A=="], + "playwright": ["playwright@1.59.1", "", { "dependencies": { "playwright-core": "1.59.1" }, "optionalDependencies": { "fsevents": "2.3.2" }, "bin": { "playwright": "cli.js" } }, "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw=="], - "playwright-core": ["playwright-core@1.58.2", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg=="], + "playwright-core": ["playwright-core@1.59.1", "", { "bin": { "playwright-core": "cli.js" } }, "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg=="], "pluralize": ["pluralize@8.0.0", "", {}, "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA=="], "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - "postcss": ["postcss@8.5.8", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg=="], + "postcss": ["postcss@8.5.14", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg=="], "postcss-discard-duplicates": ["postcss-discard-duplicates@7.0.2", "", { "peerDependencies": { "postcss": "^8.4.32" } }, "sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w=="], @@ -2838,7 +2786,7 @@ "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="], - "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="], + "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="], "prettier-linter-helpers": ["prettier-linter-helpers@1.0.1", "", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg=="], @@ -2864,7 +2812,7 @@ "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], - "qs": ["qs@6.15.0", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ=="], + "qs": ["qs@6.15.1", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg=="], "quansync": ["quansync@0.2.11", "", {}, "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA=="], @@ -2874,27 +2822,27 @@ "raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="], - "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="], + "react": ["react@19.2.6", "", {}, "sha512-sfWGGfavi0xr8Pg0sVsyHMAOziVYKgPLNrS7ig+ivMNb3wbCBw3KxtflsGBAwD3gYQlE/AEZsTLgToRrSCjb0Q=="], "react-docgen": ["react-docgen@8.0.3", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/traverse": "^7.28.0", "@babel/types": "^7.28.2", "@types/babel__core": "^7.20.5", "@types/babel__traverse": "^7.20.7", "@types/doctrine": "^0.0.9", "@types/resolve": "^1.20.2", "doctrine": "^3.0.0", "resolve": "^1.22.1", "strip-indent": "^4.0.0" } }, "sha512-aEZ9qP+/M+58x2qgfSFEWH1BxLyHe5+qkLNJOZQb5iGS017jpbRnoKhNRrXPeA6RfBrZO5wZrT9DMC1UqE1f1w=="], "react-docgen-typescript": ["react-docgen-typescript@2.4.0", "", { "peerDependencies": { "typescript": ">= 4.3.x" } }, "sha512-ZtAp5XTO5HRzQctjPU0ybY0RRCQO19X/8fxn3w7y2VVTUbGHDKULPTL4ky3vB05euSgG5NpALhEhDPvQ56wvXg=="], - "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="], + "react-dom": ["react-dom@19.2.6", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.6" } }, "sha512-0prMI+hvBbPjsWnxDLxlCGyM8PN6UuWjEUCYmZhO67xIV9Xasa/r/vDnq+Xyq4Lo27g8QSbO5YzARu0D1Sps3g=="], "react-icons": ["react-icons@5.6.0", "", { "peerDependencies": { "react": "*" } }, "sha512-RH93p5ki6LfOiIt0UtDyNg/cee+HLVR6cHHtW3wALfo+eOHTp8RnU2kRkI6E+H19zMIs03DyxUG/GfZMOGvmiA=="], - "react-is": ["react-is@19.2.4", "", {}, "sha512-W+EWGn2v0ApPKgKKCy/7s7WHXkboGcsrXE+2joLyVxkbyVQfO3MUEaUQDHoSmb8TFFrSKYa9mw64WZHNHSDzYA=="], + "react-is": ["react-is@19.2.6", "", {}, "sha512-XjBR15BhXuylgWGuslhDKqlSayuqvqBX91BP8pauG8kd1zY8kotkNWbXksTCNRarse4kuGbe2kIY05ARtwNIvw=="], "react-markdown": ["react-markdown@10.1.0", "", { "dependencies": { "@types/hast": "^3.0.0", "@types/mdast": "^4.0.0", "devlop": "^1.0.0", "hast-util-to-jsx-runtime": "^2.0.0", "html-url-attributes": "^3.0.0", "mdast-util-to-hast": "^13.0.0", "remark-parse": "^11.0.0", "remark-rehype": "^11.0.0", "unified": "^11.0.0", "unist-util-visit": "^5.0.0", "vfile": "^6.0.0" }, "peerDependencies": { "@types/react": ">=18", "react": ">=18" } }, "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ=="], "react-refresh": ["react-refresh@0.18.0", "", {}, "sha512-QgT5//D3jfjJb6Gsjxv0Slpj23ip+HtOpnNgnb2S5zU3CB26G/IDPGoy4RJB42wzFE46DRsstbW6tKHoKbhAxw=="], - "react-server-dom-webpack": ["react-server-dom-webpack@19.2.4", "", { "dependencies": { "acorn-loose": "^8.3.0", "neo-async": "^2.6.1", "webpack-sources": "^3.2.0" }, "peerDependencies": { "react": "^19.2.4", "react-dom": "^19.2.4", "webpack": "^5.59.0" } }, "sha512-zEhkWv6RhXDctC2N7yEUHg3751nvFg81ydHj8LTTZuukF/IF1gcOKqqAL6Ds+kS5HtDVACYPik0IvzkgYXPhlQ=="], + "react-server-dom-webpack": ["react-server-dom-webpack@19.2.6", "", { "dependencies": { "acorn-loose": "^8.3.0", "neo-async": "^2.6.1", "webpack-sources": "^3.2.0" }, "peerDependencies": { "react": "^19.2.6", "react-dom": "^19.2.6", "webpack": "^5.59.0" } }, "sha512-762YXjBPc6hw2V16k4x1sdnw0mxghcSPzoiOhefGYjiTguJLCImGBUz6EjznPIfqKhWgLtpaQMlBhp66N8dKrw=="], "react-syntax-highlighter": ["react-syntax-highlighter@16.1.1", "", { "dependencies": { "@babel/runtime": "^7.28.4", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", "prismjs": "^1.30.0", "refractor": "^5.0.0" }, "peerDependencies": { "react": ">= 0.14.0" } }, "sha512-PjVawBGy80C6YbC5DDZJeUjBmC7skaoEUdvfFQediQHgCL7aKyVHe57SaJGfQsloGDac+gCpTfRdtxzWWKmCXA=="], - "react-test-renderer": ["react-test-renderer@19.2.4", "", { "dependencies": { "react-is": "^19.2.4", "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-Ttl5D7Rnmi6JGMUpri4UjB4BAN0FPs4yRDnu2XSsigCWOLm11o8GwRlVsh27ER+4WFqsGtrBuuv5zumUaRCmKw=="], + "react-test-renderer": ["react-test-renderer@19.2.6", "", { "dependencies": { "react-is": "^19.2.6", "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.6" } }, "sha512-GbS6V23YduFTPiWJ5xICbKEjRcqx1Z90js/V5miqhz7qp/d6xSe9Dd6NjSQODFRdzdsqRMPW82E/sFpPRbY5Mw=="], "react-transition-group": ["react-transition-group@4.4.5", "", { "dependencies": { "@babel/runtime": "^7.5.5", "dom-helpers": "^5.0.1", "loose-envify": "^1.4.0", "prop-types": "^15.6.2" }, "peerDependencies": { "react": ">=16.6.0", "react-dom": ">=16.6.0" } }, "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g=="], @@ -2930,7 +2878,7 @@ "regjsgen": ["regjsgen@0.8.0", "", {}, "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q=="], - "regjsparser": ["regjsparser@0.13.0", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q=="], + "regjsparser": ["regjsparser@0.13.1", "", { "dependencies": { "jsesc": "~3.1.0" }, "bin": { "regjsparser": "bin/parser" } }, "sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw=="], "rehype-recma": ["rehype-recma@1.0.0", "", { "dependencies": { "@types/estree": "^1.0.0", "@types/hast": "^3.0.0", "hast-util-to-estree": "^3.0.0" } }, "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw=="], @@ -2950,7 +2898,7 @@ "require-main-filename": ["require-main-filename@2.0.0", "", {}, "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="], - "resolve": ["resolve@1.22.11", "", { "dependencies": { "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ=="], + "resolve": ["resolve@1.22.12", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA=="], "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], @@ -2962,9 +2910,9 @@ "rimraf": ["rimraf@6.1.3", "", { "dependencies": { "glob": "^13.0.3", "package-json-from-dist": "^1.0.1" }, "bin": { "rimraf": "dist/esm/bin.mjs" } }, "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA=="], - "rolldown": ["rolldown@1.0.0-rc.12", "", { "dependencies": { "@oxc-project/types": "=0.122.0", "@rolldown/pluginutils": "1.0.0-rc.12" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.12", "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", "@rolldown/binding-darwin-x64": "1.0.0-rc.12", "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A=="], + "rolldown": ["rolldown@1.0.0-rc.18", "", { "dependencies": { "@oxc-project/types": "=0.128.0", "@rolldown/pluginutils": "1.0.0-rc.18" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.0.0-rc.18", "@rolldown/binding-darwin-arm64": "1.0.0-rc.18", "@rolldown/binding-darwin-x64": "1.0.0-rc.18", "@rolldown/binding-freebsd-x64": "1.0.0-rc.18", "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.18", "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.18", "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.18", "@rolldown/binding-linux-x64-musl": "1.0.0-rc.18", "@rolldown/binding-openharmony-arm64": "1.0.0-rc.18", "@rolldown/binding-wasm32-wasi": "1.0.0-rc.18", "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.18", "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.18" }, "bin": { "rolldown": "bin/cli.mjs" } }, "sha512-phmyKBpuBdRYDf4hgyynGAYn/rDDe+iZXKVJ7WX5b1zQzpLkP5oJRPGsfJuHdzPMlyyEO/4sPW6yfSx2gf7lVg=="], - "rollup": ["rollup@4.60.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.1", "@rollup/rollup-android-arm64": "4.60.1", "@rollup/rollup-darwin-arm64": "4.60.1", "@rollup/rollup-darwin-x64": "4.60.1", "@rollup/rollup-freebsd-arm64": "4.60.1", "@rollup/rollup-freebsd-x64": "4.60.1", "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", "@rollup/rollup-linux-arm-musleabihf": "4.60.1", "@rollup/rollup-linux-arm64-gnu": "4.60.1", "@rollup/rollup-linux-arm64-musl": "4.60.1", "@rollup/rollup-linux-loong64-gnu": "4.60.1", "@rollup/rollup-linux-loong64-musl": "4.60.1", "@rollup/rollup-linux-ppc64-gnu": "4.60.1", "@rollup/rollup-linux-ppc64-musl": "4.60.1", "@rollup/rollup-linux-riscv64-gnu": "4.60.1", "@rollup/rollup-linux-riscv64-musl": "4.60.1", "@rollup/rollup-linux-s390x-gnu": "4.60.1", "@rollup/rollup-linux-x64-gnu": "4.60.1", "@rollup/rollup-linux-x64-musl": "4.60.1", "@rollup/rollup-openbsd-x64": "4.60.1", "@rollup/rollup-openharmony-arm64": "4.60.1", "@rollup/rollup-win32-arm64-msvc": "4.60.1", "@rollup/rollup-win32-ia32-msvc": "4.60.1", "@rollup/rollup-win32-x64-gnu": "4.60.1", "@rollup/rollup-win32-x64-msvc": "4.60.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w=="], + "rollup": ["rollup@4.60.3", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.60.3", "@rollup/rollup-android-arm64": "4.60.3", "@rollup/rollup-darwin-arm64": "4.60.3", "@rollup/rollup-darwin-x64": "4.60.3", "@rollup/rollup-freebsd-arm64": "4.60.3", "@rollup/rollup-freebsd-x64": "4.60.3", "@rollup/rollup-linux-arm-gnueabihf": "4.60.3", "@rollup/rollup-linux-arm-musleabihf": "4.60.3", "@rollup/rollup-linux-arm64-gnu": "4.60.3", "@rollup/rollup-linux-arm64-musl": "4.60.3", "@rollup/rollup-linux-loong64-gnu": "4.60.3", "@rollup/rollup-linux-loong64-musl": "4.60.3", "@rollup/rollup-linux-ppc64-gnu": "4.60.3", "@rollup/rollup-linux-ppc64-musl": "4.60.3", "@rollup/rollup-linux-riscv64-gnu": "4.60.3", "@rollup/rollup-linux-riscv64-musl": "4.60.3", "@rollup/rollup-linux-s390x-gnu": "4.60.3", "@rollup/rollup-linux-x64-gnu": "4.60.3", "@rollup/rollup-linux-x64-musl": "4.60.3", "@rollup/rollup-openbsd-x64": "4.60.3", "@rollup/rollup-openharmony-arm64": "4.60.3", "@rollup/rollup-win32-arm64-msvc": "4.60.3", "@rollup/rollup-win32-ia32-msvc": "4.60.3", "@rollup/rollup-win32-x64-gnu": "4.60.3", "@rollup/rollup-win32-x64-msvc": "4.60.3", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-pAQK9HalE84QSm4Po3EmWIZPd3FnjkShVkiMlz1iligWYkWQ7wHYd1PF/T7QZ5TVSD6uSTon5gBVMSM4JfBV+A=="], "rollup-plugin-preserve-directives": ["rollup-plugin-preserve-directives@0.4.0", "", { "dependencies": { "@rollup/pluginutils": "^5.1.0", "magic-string": "^0.30.5" }, "peerDependencies": { "rollup": "2.x || 3.x || 4.x" } }, "sha512-gx4nBxYm5BysmEQS+e2tAMrtFxrGvk+Pe5ppafRibQi0zlW7VYAbEGk6IKDw9sJGPdFWgVTE0o4BU4cdG0Fylg=="], @@ -2972,13 +2920,11 @@ "rsbuild-example": ["rsbuild-example@workspace:apps/rsbuild"], - "rsc-html-stream": ["rsc-html-stream@0.0.7", "", {}, "sha512-v9+fuY7usTgvXdNl8JmfXCvSsQbq2YMd60kOeeMIqCJFZ69fViuIxztHei7v5mlMMa2h3SqS+v44Gu9i9xANZA=="], - "run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="], "run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="], - "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="], + "safe-array-concat": ["safe-array-concat@1.1.4", "", { "dependencies": { "call-bind": "^1.0.9", "call-bound": "^1.0.4", "get-intrinsic": "^1.3.0", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg=="], "safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="], @@ -2994,7 +2940,7 @@ "schema-utils": ["schema-utils@4.3.3", "", { "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", "ajv-formats": "^2.1.1", "ajv-keywords": "^5.1.0" } }, "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA=="], - "semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="], + "semver": ["semver@7.8.0", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA=="], "send": ["send@1.2.1", "", { "dependencies": { "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.1", "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.2" } }, "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ=="], @@ -3020,7 +2966,7 @@ "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + "side-channel-list": ["side-channel-list@1.0.1", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.4" } }, "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w=="], "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], @@ -3048,21 +2994,15 @@ "spdx-license-ids": ["spdx-license-ids@3.0.23", "", {}, "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw=="], - "sprintf-js": ["sprintf-js@1.0.3", "", {}, "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="], - - "srvx": ["srvx@0.11.13", "", { "bin": { "srvx": "bin/srvx.mjs" } }, "sha512-oknN6qduuMPafxKtHucUeG32Q963pjriA5g3/Bl05cwEsUe5VVbIU4qR9LrALHbipSCyBe+VmfDGGydqazDRkw=="], + "srvx": ["srvx@0.11.15", "", { "bin": { "srvx": "bin/srvx.mjs" } }, "sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg=="], "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="], - "stackframe": ["stackframe@1.3.4", "", {}, "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="], - "statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="], "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - "storybook": ["storybook@10.3.3", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "@vitest/expect": "3.2.4", "@vitest/spy": "3.2.4", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", "open": "^10.2.0", "recast": "^0.23.5", "semver": "^7.7.3", "use-sync-external-store": "^1.5.0", "ws": "^8.18.0" }, "peerDependencies": { "prettier": "^2 || ^3" }, "optionalPeers": ["prettier"], "bin": "./dist/bin/dispatcher.js" }, "sha512-tMoRAts9EVqf+mEMPLC6z1DPyHbcPe+CV1MhLN55IKsl0HxNjvVGK44rVPSePbltPE6vIsn4bdRj6CCUt8SJwQ=="], - - "string-argv": ["string-argv@0.3.2", "", {}, "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q=="], + "storybook": ["storybook@10.3.6", "", { "dependencies": { "@storybook/global": "^5.0.0", "@storybook/icons": "^2.0.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/user-event": "^14.6.1", "@vitest/expect": "3.2.4", "@vitest/spy": "3.2.4", "@webcontainer/env": "^1.1.1", "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0", "open": "^10.2.0", "recast": "^0.23.5", "semver": "^7.7.3", "use-sync-external-store": "^1.5.0", "ws": "^8.18.0" }, "peerDependencies": { "prettier": "^2 || ^3", "vite-plus": "^0.1.15" }, "optionalPeers": ["prettier", "vite-plus"], "bin": "./dist/bin/dispatcher.js" }, "sha512-vbSz7g/1rGMC1uAULqMZjALkIuLu2QABqfhRYhyr/11kzyesi+vAmwyJLukZP1FfecxGOgMwOh6GS0YsGpHAvQ=="], "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -3106,7 +3046,7 @@ "styleq": ["styleq@0.2.1", "", {}, "sha512-L0TR0NQb+X4/ktDEKmjWyp27gla+LUYi/by5k5SjKXf6/pvZP7wbwEB5J+tqxdFVPgzbsuz+d4RTScO/QZquBw=="], - "stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], + "stylis": ["stylis@4.4.0", "", {}, "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA=="], "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], @@ -3116,25 +3056,25 @@ "table": ["table@6.9.0", "", { "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1" } }, "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A=="], - "tailwindcss": ["tailwindcss@4.2.2", "", {}, "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q=="], + "tailwindcss": ["tailwindcss@4.3.0", "", {}, "sha512-y6nxMGB1nMW9R6k96e5gdIFzcfL/gTJRNaqGes1YvkLnPVXzWgbqFF2yLC0T8G774n24cx3Pe8XrKoniCOAH+Q=="], - "tapable": ["tapable@2.3.2", "", {}, "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA=="], + "tapable": ["tapable@2.3.3", "", {}, "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A=="], - "terser": ["terser@5.46.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ=="], + "terser": ["terser@5.47.1", "", { "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" } }, "sha512-tPbLXTI6ohPASb/1YViL428oEHu6/qv1OxqYnfaonVCFHqx4+wCd95pHrQWsL5X4pl90CTyW9piSAsS2L0VoMw=="], - "terser-webpack-plugin": ["terser-webpack-plugin@5.4.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g=="], + "terser-webpack-plugin": ["terser-webpack-plugin@5.6.0", "", { "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", "terser": "^5.31.1" }, "peerDependencies": { "webpack": "^5.1.0" } }, "sha512-Eum+5ajkaOhf5KbM26osvv21kLD7BaGqQ1UA4Ami4arYwylmGUQTgHFpHDdmJod1q4QXa66p0to/FBKID+J1vA=="], "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="], "tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="], - "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tinyglobby": ["tinyglobby@0.2.16", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.4" } }, "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg=="], "tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], "tinyspy": ["tinyspy@4.0.4", "", {}, "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q=="], - "tm-grammars": ["tm-grammars@1.31.14", "", {}, "sha512-qhphx3x7soLa3gLQE5vwbpN6PK+TKsZVfG6I5L49kr/p/JtId+YJEAuME9n/POaeftEANZmDWZGDqGzCNbPGQQ=="], + "tm-grammars": ["tm-grammars@1.31.15", "", {}, "sha512-B0DZ06cAD3J/bW4TVDmrl/mYqCwuH9C/cf7IHiLcLkfktmjSf3t1faENrL4Im5/umH+SxTi6z9F/36mzXdf6pw=="], "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], @@ -3150,7 +3090,7 @@ "ts-evaluator": ["ts-evaluator@1.2.0", "", { "dependencies": { "ansi-colors": "^4.1.3", "crosspath": "^2.0.0", "object-path": "^0.11.8" }, "peerDependencies": { "jsdom": ">=14.x || >=15.x || >=16.x || >=17.x || >=18.x || >=19.x || >=20.x || >=21.x || >=22.x", "typescript": ">=3.2.x || >= 4.x || >= 5.x" }, "optionalPeers": ["jsdom"] }, "sha512-ncSGek1p92bj2ifB7s9UBgryHCkU9vwC5d+Lplt12gT9DH+e41X8dMoHRQjIMeAvyG7j9dEnuHmwgOtuRIQL+Q=="], - "ts-morph": ["ts-morph@27.0.2", "", { "dependencies": { "@ts-morph/common": "~0.28.1", "code-block-writer": "^13.0.3" } }, "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w=="], + "ts-morph": ["ts-morph@28.0.0", "", { "dependencies": { "@ts-morph/common": "~0.29.0", "code-block-writer": "^13.0.3" } }, "sha512-Wp3tnZ2bzwxyTZMtgWVzXDfm7lB1Drz+y9DmmYH/L702PQhPyVrp3pkou3yIz4qjS14GY9kcpmLiOOMvl8oG1g=="], "ts-pattern": ["ts-pattern@5.9.0", "", {}, "sha512-6s5V71mX8qBUmlgbrfL33xDUwO0fq48rxAu2LBE11WBeGdpCPOsXksQbZJHvHwhrd3QjUusd3mAOM5Gg0mFBLg=="], @@ -3180,15 +3120,15 @@ "typedarray": ["typedarray@0.0.6", "", {}, "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="], - "typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], + "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="], - "typescript-eslint": ["typescript-eslint@8.57.2", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.57.2", "@typescript-eslint/parser": "8.57.2", "@typescript-eslint/typescript-estree": "8.57.2", "@typescript-eslint/utils": "8.57.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-VEPQ0iPgWO/sBaZOU1xo4nuNdODVOajPnTIbog2GKYr31nIlZ0fWPoCQgGfF3ETyBl1vn63F/p50Um9Z4J8O8A=="], + "typescript-eslint": ["typescript-eslint@8.59.2", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.59.2", "@typescript-eslint/parser": "8.59.2", "@typescript-eslint/typescript-estree": "8.59.2", "@typescript-eslint/utils": "8.59.2" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", "typescript": ">=4.8.4 <6.1.0" } }, "sha512-pJw051uomb3ZeCzGTpRb8RbEqB5Y4WWet8gl/GcTlU35BSx0PVdZ86/bqkQCyKKuraVQEK7r6kBHQXF+fBhkoQ=="], - "ufo": ["ufo@1.6.3", "", {}, "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q=="], + "ufo": ["ufo@1.6.4", "", {}, "sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA=="], "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="], - "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="], "unicode-canonical-property-names-ecmascript": ["unicode-canonical-property-names-ecmascript@2.0.1", "", {}, "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg=="], @@ -3226,6 +3166,8 @@ "unplugin": ["unplugin@2.3.11", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "acorn": "^8.15.0", "picomatch": "^4.0.3", "webpack-virtual-modules": "^0.6.2" } }, "sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww=="], + "unplugin-dts": ["unplugin-dts@1.0.0", "", { "dependencies": { "@rollup/pluginutils": "^5.1.4", "@volar/typescript": "^2.4.26", "compare-versions": "^6.1.1", "debug": "^4.4.0", "kolorist": "^1.8.0", "local-pkg": "^1.1.1", "magic-string": "^0.30.17", "unplugin": "^2.3.2" }, "peerDependencies": { "@microsoft/api-extractor": ">=7", "@rspack/core": "^1", "@vue/language-core": "~3.1.5", "esbuild": "*", "rolldown": "*", "rollup": ">=3", "typescript": ">=4", "vite": ">=3", "webpack": "^4 || ^5" }, "optionalPeers": ["@microsoft/api-extractor", "@rspack/core", "@vue/language-core", "esbuild", "rolldown", "rollup", "vite", "webpack"] }, "sha512-qz+U1lCscwq+t8Mkaxy5Esa7IQ5wWV18b4mnioOXSdnPaNiJ0+qgE3I+KL6UkXYZWxxGo2qdGone8LEQ52Sfkw=="], + "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="], "update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="], @@ -3254,11 +3196,11 @@ "vfile-statistics": ["vfile-statistics@3.0.0", "", { "dependencies": { "vfile": "^6.0.0", "vfile-message": "^4.0.0" } }, "sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w=="], - "vinext": ["vinext@0.0.34", "", { "dependencies": { "@unpic/react": "^1.0.2", "@vercel/og": "^0.8.6", "magic-string": "^0.30.21", "rsc-html-stream": "^0.0.7", "vite-plugin-commonjs": "^0.10.4", "vite-tsconfig-paths": "^6.1.1" }, "peerDependencies": { "@mdx-js/rollup": "^3.0.0", "@vitejs/plugin-react": "^5.1.4 || ^6.0.0", "@vitejs/plugin-rsc": "^0.5.19", "react": ">=19.2.0", "react-dom": ">=19.2.0", "react-server-dom-webpack": "^19.2.4", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["@mdx-js/rollup", "@vitejs/plugin-rsc", "react-server-dom-webpack"], "bin": { "vinext": "dist/cli.js" } }, "sha512-igBP6UrL/tEtT73hPFt6EKmHTKd4lsSZ8luV5oQjmDWPcgGew3FaSt/7vo6qK42mj7yfg5MjvmQ2VmQrm2z8Cw=="], + "vinext": ["vinext@0.0.49", "", { "dependencies": { "@unpic/react": "^1.0.2", "@vercel/og": "^0.8.6", "image-size": "2.0.2", "magic-string": "^0.30.21", "vite-plugin-commonjs": "^0.10.4", "vite-tsconfig-paths": "^6.1.1" }, "peerDependencies": { "@mdx-js/rollup": "^3.0.0", "@vitejs/plugin-react": "^5.1.4 || ^6.0.0", "@vitejs/plugin-rsc": "^0.5.23", "react": "^19.2.6", "react-dom": "^19.2.6", "react-server-dom-webpack": "^19.2.6", "vite": "^7.0.0 || ^8.0.0" }, "optionalPeers": ["@mdx-js/rollup", "@vitejs/plugin-rsc", "react-server-dom-webpack"], "bin": { "vinext": "dist/cli.js" } }, "sha512-FD8JbaElijIfI1aWDo52c6r6/6k2ayuY5TwDqjAd10XEzHDMARLRukIFywqKKKliLEN4p9G0HU/TlJJ4umF5dw=="], "vinext-devup-ui-benchmark": ["vinext-devup-ui-benchmark@workspace:benchmark/vinext-devup-ui"], - "vite": ["vite@8.0.3", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.8", "rolldown": "1.0.0-rc.12", "tinyglobby": "^0.2.15" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.0", "esbuild": "^0.27.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ=="], + "vite": ["vite@8.0.11", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.4", "postcss": "^8.5.14", "rolldown": "1.0.0-rc.18", "tinyglobby": "^0.2.16" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.1.18", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-Jz1mxtUBR5xTT65VOdJZUUeoyLtqljmFkiUXhPTLZka3RDc9vpi/xXkyrnsdRcm2lIi3l3GPMnAidTsEGIj3Ow=="], "vite-example": ["vite-example@workspace:apps/vite"], @@ -3268,13 +3210,13 @@ "vite-plugin-commonjs": ["vite-plugin-commonjs@0.10.4", "", { "dependencies": { "acorn": "^8.12.1", "magic-string": "^0.30.11", "vite-plugin-dynamic-import": "^1.6.0" } }, "sha512-eWQuvQKCcx0QYB5e5xfxBNjQKyrjEWZIR9UOkOV6JAgxVhtbZvCOF+FNC2ZijBJ3U3Px04ZMMyyMyFBVWIJ5+g=="], - "vite-plugin-dts": ["vite-plugin-dts@4.5.4", "", { "dependencies": { "@microsoft/api-extractor": "^7.50.1", "@rollup/pluginutils": "^5.1.4", "@volar/typescript": "^2.4.11", "@vue/language-core": "2.2.0", "compare-versions": "^6.1.1", "debug": "^4.4.0", "kolorist": "^1.8.0", "local-pkg": "^1.0.0", "magic-string": "^0.30.17" }, "peerDependencies": { "typescript": "*", "vite": "*" }, "optionalPeers": ["vite"] }, "sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg=="], + "vite-plugin-dts": ["vite-plugin-dts@5.0.0", "", { "dependencies": { "unplugin-dts": "1.0.0" }, "peerDependencies": { "@microsoft/api-extractor": ">=7", "rollup": ">=3", "vite": ">=3" }, "optionalPeers": ["@microsoft/api-extractor", "rollup", "vite"] }, "sha512-VLNAUttBq7pLxxL/m/ztjd5zj5yiviiC7ijfPFVLK5c45FLcibvieBsdjSka3a4ag1qdrAF9K3OysH4/lW+rPQ=="], "vite-plugin-dynamic-import": ["vite-plugin-dynamic-import@1.6.0", "", { "dependencies": { "acorn": "^8.12.1", "es-module-lexer": "^1.5.4", "fast-glob": "^3.3.2", "magic-string": "^0.30.11" } }, "sha512-TM0sz70wfzTIo9YCxVFwS8OA9lNREsh+0vMHGSkWDTZ7bgd1Yjs5RV8EgB634l/91IsXJReg0xtmuQqP0mf+rg=="], "vite-tsconfig-paths": ["vite-tsconfig-paths@6.1.1", "", { "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" } }, "sha512-2cihq7zliibCCZ8P9cKJrQBkfgdvcFkOOc3Y02o3GWUDLgqjWsZudaoiuOwO/gzTzy17cS5F7ZPo4bsnS4DGkg=="], - "vitefu": ["vitefu@1.1.2", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-beta.0" }, "optionalPeers": ["vite"] }, "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw=="], + "vitefu": ["vitefu@1.1.3", "", { "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" }, "optionalPeers": ["vite"] }, "sha512-ub4okH7Z5KLjb6hDyjqrGXqWtWvoYdU3IGm/NorpgHncKoLTCfRIbvlhBm7r0YstIaQRYlp4yEbFqDcKSzXSSg=="], "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], @@ -3282,9 +3224,9 @@ "watchpack": ["watchpack@2.5.1", "", { "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" } }, "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg=="], - "webpack": ["webpack@5.105.4", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.20.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.17", "watchpack": "^2.5.1", "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw=="], + "webpack": ["webpack@5.106.2", "", { "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.16.0", "acorn-import-phases": "^1.0.3", "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.20.0", "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "loader-runner": "^4.3.1", "mime-db": "^1.54.0", "neo-async": "^2.6.2", "schema-utils": "^4.3.3", "tapable": "^2.3.0", "terser-webpack-plugin": "^5.3.17", "watchpack": "^2.5.1", "webpack-sources": "^3.3.4" }, "bin": { "webpack": "bin/webpack.js" } }, "sha512-wGN3qcrBQIFmQ/c0AiOAQBvrZ5lmY8vbbMv4Mxfgzqd/B6+9pXtLo73WuS1dSGXM5QYY3hZnIbvx+K1xxe6FyA=="], - "webpack-sources": ["webpack-sources@3.3.4", "", {}, "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q=="], + "webpack-sources": ["webpack-sources@3.4.1", "", {}, "sha512-eACpxRN02yaawnt+uUNIF7Qje6A9zArxBbcAJjK1PK3S9Ycg5jIuJ8pW4q8EMnwNZCEGltcjkRx1QzOxOkKD8A=="], "webpack-virtual-modules": ["webpack-virtual-modules@0.6.2", "", {}, "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ=="], @@ -3320,7 +3262,7 @@ "yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], - "yaml": ["yaml@2.8.3", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg=="], + "yaml": ["yaml@2.8.4", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-ml/JPOj9fOQK8RNnWojA67GbZ0ApXAUlN2UQclwv2eVgTgn7O9gg9o7paZWKMp4g0H3nTLtS9LVzhkpOFIKzog=="], "yargs": ["yargs@15.4.1", "", { "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", "find-up": "^4.1.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^4.2.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^18.1.2" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], @@ -3330,9 +3272,7 @@ "yoga-layout": ["yoga-layout@3.2.1", "", {}, "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ=="], - "zimmerframe": ["zimmerframe@1.1.4", "", {}, "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ=="], - - "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], + "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], "zod-to-json-schema": ["zod-to-json-schema@3.25.2", "", { "peerDependencies": { "zod": "^3.25.28 || ^4" } }, "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA=="], @@ -3342,7 +3282,7 @@ "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + "@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "@babel/helper-compilation-targets/lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], @@ -3354,19 +3294,21 @@ "@babel/preset-env/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "@devup-ui/bun-plugin/@types/bun": ["@types/bun@1.3.13", "", { "dependencies": { "bun-types": "1.3.13" } }, "sha512-9fqXWk5YIHGGnUau9TEi+qdlTYDAnOj+xLCmSTwXfAIqXr2x4tytJb43E9uCvt09zJURKXwAtkoH4nLQfzeTXw=="], - "@emotion/babel-plugin/convert-source-map": ["convert-source-map@1.9.0", "", {}, "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A=="], "@emotion/babel-plugin/source-map": ["source-map@0.5.7", "", {}, "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ=="], + "@emotion/babel-plugin/stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], + + "@emotion/cache/stylis": ["stylis@4.2.0", "", {}, "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw=="], + "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], - "@internationalized/date/@swc/helpers": ["@swc/helpers@0.5.20", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw=="], + "@internationalized/date/@swc/helpers": ["@swc/helpers@0.5.21", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg=="], - "@internationalized/number/@swc/helpers": ["@swc/helpers@0.5.20", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw=="], + "@internationalized/number/@swc/helpers": ["@swc/helpers@0.5.21", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], @@ -3378,17 +3320,9 @@ "@kuma-ui/webpack-plugin/esbuild": ["esbuild@0.18.20", "", { "optionalDependencies": { "@esbuild/android-arm": "0.18.20", "@esbuild/android-arm64": "0.18.20", "@esbuild/android-x64": "0.18.20", "@esbuild/darwin-arm64": "0.18.20", "@esbuild/darwin-x64": "0.18.20", "@esbuild/freebsd-arm64": "0.18.20", "@esbuild/freebsd-x64": "0.18.20", "@esbuild/linux-arm": "0.18.20", "@esbuild/linux-arm64": "0.18.20", "@esbuild/linux-ia32": "0.18.20", "@esbuild/linux-loong64": "0.18.20", "@esbuild/linux-mips64el": "0.18.20", "@esbuild/linux-ppc64": "0.18.20", "@esbuild/linux-riscv64": "0.18.20", "@esbuild/linux-s390x": "0.18.20", "@esbuild/linux-x64": "0.18.20", "@esbuild/netbsd-x64": "0.18.20", "@esbuild/openbsd-x64": "0.18.20", "@esbuild/sunos-x64": "0.18.20", "@esbuild/win32-arm64": "0.18.20", "@esbuild/win32-ia32": "0.18.20", "@esbuild/win32-x64": "0.18.20" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA=="], - "@microsoft/api-extractor/minimatch": ["minimatch@10.2.3", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-Rwi3pnapEqirPSbWbrZaa6N3nmqq4Xer/2XooiOKyV3q12ML06f7MOuc5DVH8ONZIFhwIYQ3yzPH4nt7iWHaTg=="], - - "@microsoft/api-extractor/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], - - "@microsoft/api-extractor/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], + "@modelcontextprotocol/sdk/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], - "@microsoft/api-extractor/typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], - - "@microsoft/tsdoc-config/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "@modelcontextprotocol/sdk/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "@modelcontextprotocol/sdk/ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="], @@ -3400,83 +3334,47 @@ "@npmcli/package-json/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], - "@npmcli/package-json/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], - "@npmcli/promise-spawn/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="], - "@pandacss/config/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@pandacss/config/typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="], "@pandacss/core/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], - "@pandacss/core/lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], - - "@pandacss/core/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - - "@pandacss/generator/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - "@pandacss/node/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], - "@pandacss/node/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], - - "@pandacss/node/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - "@pandacss/node/prettier": ["prettier@3.2.5", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A=="], - "@pandacss/postcss/postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], - - "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - - "@rsbuild/core/@swc/helpers": ["@swc/helpers@0.5.20", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-2egEBHUMasdypIzrprsu8g+OEVd7Vp2MM3a2eVlM/cyFYto0nGz5BX5BTgh/ShZZI9ed+ozEq+Ngt+rgmUs8tw=="], - - "@rspack/binding-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.0.7", "", { "dependencies": { "@emnapi/core": "^1.5.0", "@emnapi/runtime": "^1.5.0", "@tybys/wasm-util": "^0.10.1" } }, "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw=="], + "@pandacss/plugin-lightningcss/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], - "@rushstack/node-core-library/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "@pandacss/plugin-lightningcss/lightningcss": ["lightningcss@1.31.1", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.31.1", "lightningcss-darwin-arm64": "1.31.1", "lightningcss-darwin-x64": "1.31.1", "lightningcss-freebsd-x64": "1.31.1", "lightningcss-linux-arm-gnueabihf": "1.31.1", "lightningcss-linux-arm64-gnu": "1.31.1", "lightningcss-linux-arm64-musl": "1.31.1", "lightningcss-linux-x64-gnu": "1.31.1", "lightningcss-linux-x64-musl": "1.31.1", "lightningcss-win32-arm64-msvc": "1.31.1", "lightningcss-win32-x64-msvc": "1.31.1" } }, "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ=="], - "@rushstack/node-core-library/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], - - "@rushstack/terminal/supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "@rollup/pluginutils/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@rushstack/ts-command-line/argparse": ["argparse@1.0.10", "", { "dependencies": { "sprintf-js": "~1.0.2" } }, "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg=="], + "@rsbuild/core/@swc/helpers": ["@swc/helpers@0.5.21", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg=="], "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin": ["@stylexjs/babel-plugin@0.11.1", "", { "dependencies": { "@babel/core": "^7.26.8", "@babel/helper-module-imports": "^7.25.9", "@babel/traverse": "^7.26.8", "@babel/types": "^7.26.8", "@dual-bundle/import-meta-resolve": "^4.1.0", "@stylexjs/shared": "0.11.1", "@stylexjs/stylex": "0.11.1" } }, "sha512-hQ02pz6VLjr/yC21NyVu5Lv1djQNiYkUI/vGAawv/TYly8SGI/N2ba7ea6E7vtkdE5K4idh8o3EhY2IA28xzsg=="], "@stylexjs/open-props/@stylexjs/stylex": ["@stylexjs/stylex@0.11.1", "", { "dependencies": { "css-mediaquery": "^0.1.2", "invariant": "^2.2.4", "styleq": "0.2.1" } }, "sha512-1OofsiCP2DYV+Cw/iIuHYTAJRy34TtxQt0FDuQGTnNH915hb6NkPmX6iPa++9t4KP3HWR9oVRmAHkpP58BIYbw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.9.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.0", "tslib": "^2.4.0" }, "bundled": true }, "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/core": ["@emnapi/core@1.10.0", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.1", "tslib": "^2.4.0" }, "bundled": true }, "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.9.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/runtime": ["@emnapi/runtime@1.10.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA=="], - "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.0", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg=="], + "@tailwindcss/oxide-wasm32-wasi/@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w=="], - "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.2", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw=="], + "@tailwindcss/oxide-wasm32-wasi/@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.4", "", { "dependencies": { "@tybys/wasm-util": "^0.10.1" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" }, "bundled": true }, "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow=="], - "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.1", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg=="], + "@tailwindcss/oxide-wasm32-wasi/@tybys/wasm-util": ["@tybys/wasm-util@0.10.2", "", { "dependencies": { "tslib": "^2.4.0" }, "bundled": true }, "sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg=="], "@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], - "@testing-library/jest-dom/aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="], - "@testing-library/jest-dom/dom-accessibility-api": ["dom-accessibility-api@0.6.3", "", {}, "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w=="], - "@ts-morph/common/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "@ts-morph/common/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], - "@typescript-eslint/eslint-plugin/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "@typescript-eslint/parser/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "@typescript-eslint/project-service/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "@typescript-eslint/tsconfig-utils/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "@typescript-eslint/type-utils/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], - - "@typescript-eslint/typescript-estree/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "@typescript-eslint/utils/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], @@ -3484,33 +3382,21 @@ "@vitejs/plugin-react/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.7", "", {}, "sha512-qujRfC8sFVInYSPPMLQByRh7zhwkGFS4+tyMQ83srV1qrxL4g8E2tyxVVyxd0+8QeBM1mIk9KbWxkegRr76XzA=="], - "@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - - "@vue/compiler-sfc/@vue/compiler-core": ["@vue/compiler-core@3.5.25", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/shared": "3.5.25", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw=="], + "@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - "@vue/compiler-sfc/@vue/compiler-dom": ["@vue/compiler-dom@3.5.25", "", { "dependencies": { "@vue/compiler-core": "3.5.25", "@vue/shared": "3.5.25" } }, "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q=="], - - "@vue/compiler-sfc/@vue/shared": ["@vue/shared@3.5.25", "", {}, "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg=="], + "@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], "@vue/compiler-sfc/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - "@vue/compiler-ssr/@vue/compiler-dom": ["@vue/compiler-dom@3.5.25", "", { "dependencies": { "@vue/compiler-core": "3.5.25", "@vue/shared": "3.5.25" } }, "sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q=="], - - "@vue/compiler-ssr/@vue/shared": ["@vue/shared@3.5.25", "", {}, "sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg=="], - - "@vue/language-core/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], + "ajv-formats/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], - "accepts/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - - "ajv-formats/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "ajv-keywords/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "ajv-keywords/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], "babel-plugin-polyfill-corejs2/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], "bundle-n-require/esbuild": ["esbuild@0.25.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.25.12", "@esbuild/android-arm": "0.25.12", "@esbuild/android-arm64": "0.25.12", "@esbuild/android-x64": "0.25.12", "@esbuild/darwin-arm64": "0.25.12", "@esbuild/darwin-x64": "0.25.12", "@esbuild/freebsd-arm64": "0.25.12", "@esbuild/freebsd-x64": "0.25.12", "@esbuild/linux-arm": "0.25.12", "@esbuild/linux-arm64": "0.25.12", "@esbuild/linux-ia32": "0.25.12", "@esbuild/linux-loong64": "0.25.12", "@esbuild/linux-mips64el": "0.25.12", "@esbuild/linux-ppc64": "0.25.12", "@esbuild/linux-riscv64": "0.25.12", "@esbuild/linux-s390x": "0.25.12", "@esbuild/linux-x64": "0.25.12", "@esbuild/netbsd-arm64": "0.25.12", "@esbuild/netbsd-x64": "0.25.12", "@esbuild/openbsd-arm64": "0.25.12", "@esbuild/openbsd-x64": "0.25.12", "@esbuild/openharmony-arm64": "0.25.12", "@esbuild/sunos-x64": "0.25.12", "@esbuild/win32-arm64": "0.25.12", "@esbuild/win32-ia32": "0.25.12", "@esbuild/win32-x64": "0.25.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg=="], - "core-js-compat/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + "core-js-compat/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "cosmiconfig/parse-json": ["parse-json@5.2.0", "", { "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" } }, "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg=="], @@ -3518,15 +3404,17 @@ "crosspath/@types/node": ["@types/node@17.0.45", "", {}, "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw=="], - "csstype-extra/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - "eslint-config-next/globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="], "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "eslint-import-resolver-node/resolve": ["resolve@2.0.0-next.6", "", { "dependencies": { "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "node-exports-info": "^1.6.0", "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" } }, "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA=="], + "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - "eslint-plugin-devup/eslint": ["eslint@10.0.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.3", "@eslint/config-helpers": "^0.5.2", "@eslint/core": "^1.1.1", "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.1.1", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ=="], + "eslint-plugin-devup/@eslint/js": ["@eslint/js@10.0.1", "", { "peerDependencies": { "eslint": "^10.0.0" }, "optionalPeers": ["eslint"] }, "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA=="], + + "eslint-plugin-devup/eslint": ["eslint@10.3.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.5.5", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw=="], "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], @@ -3534,7 +3422,7 @@ "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="], - "eslint-plugin-jsonc/@eslint/core": ["@eslint/core@1.1.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ=="], + "eslint-plugin-jsonc/@eslint/core": ["@eslint/core@1.2.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ=="], "eslint-plugin-jsonc/@eslint/plugin-kit": ["@eslint/plugin-kit@0.6.1", "", { "dependencies": { "@eslint/core": "^1.1.1", "levn": "^0.4.1" } }, "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ=="], @@ -3544,11 +3432,9 @@ "eslint-plugin-react/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], - "express/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], - "glob/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "glob/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "hoist-non-react-statics/react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="], @@ -3562,7 +3448,7 @@ "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], - "next-stylex-benchmark/eslint": ["eslint@10.0.3", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.3", "@eslint/config-helpers": "^0.5.2", "@eslint/core": "^1.1.1", "@eslint/plugin-kit": "^0.6.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.1.1", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-COV33RzXZkqhG9P2rZCFl9ZmJ7WL+gQSCRzE7RhkbclbQPtLAWReL7ysA0Sh4c8Im2U9ynybdR56PV0XcKvqaQ=="], + "next-stylex-benchmark/eslint": ["eslint@10.3.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.2", "@eslint/config-array": "^0.23.5", "@eslint/config-helpers": "^0.5.5", "@eslint/core": "^1.2.1", "@eslint/plugin-kit": "^0.7.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.14.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^9.1.2", "eslint-visitor-keys": "^5.0.1", "espree": "^11.2.0", "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "minimatch": "^10.2.4", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-XbEXaRva5cF0ZQB8w6MluHA0kZZfV2DuCMJ3ozyEOHLwDpZX2Lmm/7Pp0xdJmI0GL1W05VH5VwIFHEm1Vcw2gw=="], "node-exports-info/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -3570,9 +3456,7 @@ "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "parse-json/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], - - "path-scurry/lru-cache": ["lru-cache@11.2.7", "", {}, "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA=="], + "path-scurry/lru-cache": ["lru-cache@11.3.6", "", {}, "sha512-Gf/KoL3C/MlI7Bt0PGI9I+TeTC/I6r/csU58N4BSNc4lppLBeKsOdFYkK+dX0ABDUMJNfCHTyPpzwwO21Awd3A=="], "pkg-dir/find-up": ["find-up@6.3.0", "", { "dependencies": { "locate-path": "^7.1.0", "path-exists": "^5.0.0" } }, "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw=="], @@ -3586,19 +3470,13 @@ "react-docgen/doctrine": ["doctrine@3.0.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w=="], - "read-package-json-fast/json-parse-even-better-errors": ["json-parse-even-better-errors@3.0.2", "", {}, "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ=="], - "recast/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "redent/strip-indent": ["strip-indent@3.0.0", "", { "dependencies": { "min-indent": "^1.0.0" } }, "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ=="], - "rolldown/@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.0-rc.12", "", {}, "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw=="], - - "schema-utils/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], - - "schema-utils/ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], + "rollup/@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], - "send/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], + "schema-utils/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], "source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], @@ -3608,17 +3486,13 @@ "strip-literal/js-tokens": ["js-tokens@9.0.1", "", {}, "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ=="], - "table/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="], + "table/ajv": ["ajv@8.20.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA=="], "ts_dependency_graph/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], "ts_dependency_graph/typescript": ["typescript@4.9.5", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g=="], - "type-is/mime-types": ["mime-types@3.0.2", "", { "dependencies": { "mime-db": "^1.54.0" } }, "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A=="], - - "typescript-eslint/typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "unified-engine/@types/node": ["@types/node@22.19.15", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-F0R/h2+dsy5wJAUe3tAU6oqa2qbWY5TpNfL/RGmo1y38hiyO1w3x2jPtt76wmuaJI4DQnOBu21cNXQ2STIUUWg=="], + "unified-engine/@types/node": ["@types/node@22.19.18", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-9v00a+dn2yWVsYDEunWC4g/TcRKVq3r8N5FuZp7u0SGrPvdN9c2yXI9bBuf5Fl0hNCb+QTIePTn5pJs2pwBOQQ=="], "unified-engine/glob": ["glob@10.5.0", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg=="], @@ -3632,14 +3506,12 @@ "vite-plugin-dynamic-import/es-module-lexer": ["es-module-lexer@1.7.0", "", {}, "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA=="], - "webpack/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="], + "webpack/browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="], "webpack/eslint-scope": ["eslint-scope@5.1.1", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw=="], "yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], - "@devup-ui/bun-plugin/@types/bun/bun-types": ["bun-types@1.3.13", "", { "dependencies": { "@types/node": "*" } }, "sha512-QXKeHLlOLqQX9LgYaHJfzdBaV21T63HhFJnvuRCcjZiaUDpbs5ED1MgxbMra71CsryN/1dAoXuJJJwIv/2drVA=="], - "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "@isaacs/cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], @@ -3692,12 +3564,6 @@ "@kuma-ui/webpack-plugin/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.18.20", "", { "os": "win32", "cpu": "x64" }, "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ=="], - "@microsoft/api-extractor/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - - "@microsoft/api-extractor/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], - - "@microsoft/tsdoc-config/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], @@ -3706,7 +3572,7 @@ "@npmcli/map-workspaces/glob/path-scurry": ["path-scurry@1.11.1", "", { "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" } }, "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA=="], - "@npmcli/map-workspaces/minimatch/brace-expansion": ["brace-expansion@2.0.3", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA=="], + "@npmcli/map-workspaces/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], "@npmcli/package-json/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], @@ -3714,47 +3580,35 @@ "@npmcli/promise-spawn/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="], - "@pandacss/core/lightningcss/lightningcss-android-arm64": ["lightningcss-android-arm64@1.31.1", "", { "os": "android", "cpu": "arm64" }, "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg=="], - - "@pandacss/core/lightningcss/lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.31.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-android-arm64": ["lightningcss-android-arm64@1.31.1", "", { "os": "android", "cpu": "arm64" }, "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg=="], - "@pandacss/core/lightningcss/lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.31.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.31.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg=="], - "@pandacss/core/lightningcss/lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.31.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.31.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA=="], - "@pandacss/core/lightningcss/lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.31.1", "", { "os": "linux", "cpu": "arm" }, "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.31.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A=="], - "@pandacss/core/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.31.1", "", { "os": "linux", "cpu": "arm" }, "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g=="], - "@pandacss/core/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg=="], - "@pandacss/core/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.31.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg=="], - "@pandacss/core/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA=="], - "@pandacss/core/lightningcss/lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.31.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.31.1", "", { "os": "linux", "cpu": "x64" }, "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA=="], - "@pandacss/core/lightningcss/lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.31.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w=="], - "@rushstack/node-core-library/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - - "@rushstack/node-core-library/semver/lru-cache": ["lru-cache@6.0.0", "", { "dependencies": { "yallist": "^4.0.0" } }, "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA=="], + "@pandacss/plugin-lightningcss/lightningcss/lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.31.1", "", { "os": "win32", "cpu": "x64" }, "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw=="], "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@stylexjs/shared": ["@stylexjs/shared@0.11.1", "", { "dependencies": { "postcss-value-parser": "^4.1.0" } }, "sha512-siBoO0yg6KbhHbtkwWGhZWu0pH61gEAsdSYYv+vQRkaX3iSADByrqFuhD/KQku8AfKq78u5dWGc3FDA0H90VEw=="], "@stylexjs/nextjs-plugin/@stylexjs/babel-plugin/@stylexjs/stylex": ["@stylexjs/stylex@0.11.1", "", { "dependencies": { "css-mediaquery": "^0.1.2", "invariant": "^2.2.4", "styleq": "0.2.1" } }, "sha512-1OofsiCP2DYV+Cw/iIuHYTAJRy34TtxQt0FDuQGTnNH915hb6NkPmX6iPa++9t4KP3HWR9oVRmAHkpP58BIYbw=="], - "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - - "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], - - "@vue/compiler-sfc/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - - "@vue/compiler-ssr/@vue/compiler-dom/@vue/compiler-core": ["@vue/compiler-core@3.5.25", "", { "dependencies": { "@babel/parser": "^7.28.5", "@vue/shared": "3.5.25", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw=="], + "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], - "@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.0.3", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA=="], - - "accepts/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], + "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -3812,15 +3666,17 @@ "bundle-n-require/esbuild/@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.12", "", { "os": "win32", "cpu": "x64" }, "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA=="], + "cosmiconfig/parse-json/json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="], + "cosmiconfig/parse-json/lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "eslint-plugin-devup/eslint/@eslint/config-array": ["@eslint/config-array@0.23.3", "", { "dependencies": { "@eslint/object-schema": "^3.0.3", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw=="], + "eslint-plugin-devup/eslint/@eslint/config-array": ["@eslint/config-array@0.23.5", "", { "dependencies": { "@eslint/object-schema": "^3.0.5", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA=="], - "eslint-plugin-devup/eslint/@eslint/config-helpers": ["@eslint/config-helpers@0.5.3", "", { "dependencies": { "@eslint/core": "^1.1.1" } }, "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw=="], + "eslint-plugin-devup/eslint/@eslint/config-helpers": ["@eslint/config-helpers@0.5.5", "", { "dependencies": { "@eslint/core": "^1.2.1" } }, "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w=="], - "eslint-plugin-devup/eslint/@eslint/core": ["@eslint/core@1.1.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ=="], + "eslint-plugin-devup/eslint/@eslint/core": ["@eslint/core@1.2.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ=="], - "eslint-plugin-devup/eslint/@eslint/plugin-kit": ["@eslint/plugin-kit@0.6.1", "", { "dependencies": { "@eslint/core": "^1.1.1", "levn": "^0.4.1" } }, "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ=="], + "eslint-plugin-devup/eslint/@eslint/plugin-kit": ["@eslint/plugin-kit@0.7.1", "", { "dependencies": { "@eslint/core": "^1.2.1", "levn": "^0.4.1" } }, "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ=="], "eslint-plugin-devup/eslint/eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="], @@ -3828,23 +3684,21 @@ "eslint-plugin-devup/eslint/espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], - "eslint-plugin-devup/eslint/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "eslint-plugin-devup/eslint/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": { "json5": "lib/cli.js" } }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="], - "express/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - - "glob/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + "glob/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], - "next-stylex-benchmark/eslint/@eslint/config-array": ["@eslint/config-array@0.23.3", "", { "dependencies": { "@eslint/object-schema": "^3.0.3", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw=="], + "next-stylex-benchmark/eslint/@eslint/config-array": ["@eslint/config-array@0.23.5", "", { "dependencies": { "@eslint/object-schema": "^3.0.5", "debug": "^4.3.1", "minimatch": "^10.2.4" } }, "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA=="], - "next-stylex-benchmark/eslint/@eslint/config-helpers": ["@eslint/config-helpers@0.5.3", "", { "dependencies": { "@eslint/core": "^1.1.1" } }, "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw=="], + "next-stylex-benchmark/eslint/@eslint/config-helpers": ["@eslint/config-helpers@0.5.5", "", { "dependencies": { "@eslint/core": "^1.2.1" } }, "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w=="], - "next-stylex-benchmark/eslint/@eslint/core": ["@eslint/core@1.1.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ=="], + "next-stylex-benchmark/eslint/@eslint/core": ["@eslint/core@1.2.1", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ=="], - "next-stylex-benchmark/eslint/@eslint/plugin-kit": ["@eslint/plugin-kit@0.6.1", "", { "dependencies": { "@eslint/core": "^1.1.1", "levn": "^0.4.1" } }, "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ=="], + "next-stylex-benchmark/eslint/@eslint/plugin-kit": ["@eslint/plugin-kit@0.7.1", "", { "dependencies": { "@eslint/core": "^1.2.1", "levn": "^0.4.1" } }, "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ=="], "next-stylex-benchmark/eslint/eslint-scope": ["eslint-scope@9.1.2", "", { "dependencies": { "@types/esrecurse": "^4.3.1", "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ=="], @@ -3852,7 +3706,7 @@ "next-stylex-benchmark/eslint/espree": ["espree@11.2.0", "", { "dependencies": { "acorn": "^8.16.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^5.0.1" } }, "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw=="], - "next-stylex-benchmark/eslint/minimatch": ["minimatch@10.2.4", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg=="], + "next-stylex-benchmark/eslint/minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="], "p-locate/p-limit/yocto-queue": ["yocto-queue@0.1.0", "", {}, "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="], @@ -3862,12 +3716,8 @@ "schema-utils/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "send/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - "table/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], - "type-is/mime-types/mime-db": ["mime-db@1.54.0", "", {}, "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ=="], - "unified-engine/@types/node/undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="], "unified-engine/glob/minimatch": ["minimatch@9.0.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg=="], @@ -3884,41 +3734,31 @@ "@kuma-ui/compiler/ts-morph/@ts-morph/common/minimatch": ["minimatch@7.4.9", "", { "dependencies": { "brace-expansion": "^2.0.2" } }, "sha512-Brg/fp/iAVDOQoHxkuN5bEYhyQlZhxddI78yWsCbeEwTHXQjlNLtiJDUsp1GIptVqMI7/gkJMz4vVAc01mpoBw=="], - "@microsoft/api-extractor/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - - "@microsoft/api-extractor/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], - - "@npmcli/package-json/glob/minimatch/brace-expansion": ["brace-expansion@2.0.3", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA=="], - - "@rushstack/node-core-library/semver/lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "@npmcli/package-json/glob/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], "@ts-morph/common/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], "@typescript-eslint/typescript-estree/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "@vue/compiler-ssr/@vue/compiler-dom/@vue/compiler-core/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - - "@vue/compiler-ssr/@vue/compiler-dom/@vue/compiler-core/estree-walker": ["estree-walker@2.0.2", "", {}, "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="], - - "eslint-plugin-devup/eslint/@eslint/config-array/@eslint/object-schema": ["@eslint/object-schema@3.0.3", "", {}, "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ=="], + "eslint-plugin-devup/eslint/@eslint/config-array/@eslint/object-schema": ["@eslint/object-schema@3.0.5", "", {}, "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw=="], - "eslint-plugin-devup/eslint/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + "eslint-plugin-devup/eslint/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "glob/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], - "next-stylex-benchmark/eslint/@eslint/config-array/@eslint/object-schema": ["@eslint/object-schema@3.0.3", "", {}, "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ=="], + "next-stylex-benchmark/eslint/@eslint/config-array/@eslint/object-schema": ["@eslint/object-schema@3.0.5", "", {}, "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw=="], - "next-stylex-benchmark/eslint/minimatch/brace-expansion": ["brace-expansion@5.0.5", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ=="], + "next-stylex-benchmark/eslint/minimatch/brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="], "pkg-dir/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], - "unified-engine/glob/minimatch/brace-expansion": ["brace-expansion@2.0.3", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA=="], + "unified-engine/glob/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], "vfile-reporter/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], "yargs/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], - "@kuma-ui/compiler/ts-morph/@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@2.0.3", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA=="], + "@kuma-ui/compiler/ts-morph/@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@2.1.0", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w=="], "eslint-plugin-devup/eslint/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="], diff --git a/bunfig.toml b/bunfig.toml index 83bdb95c..1241b184 100644 --- a/bunfig.toml +++ b/bunfig.toml @@ -5,4 +5,7 @@ coverage = true coverageReporter = ["text", "lcov"] coverageThreshold = { line = 1.0, function = 1.0, statement = 1.0 } coverageSkipTestFiles = true +# pkg/dist are generated artifacts. bun-plugin/src/plugin.ts registers a Bun +# plugin at import time; testing its private hooks would require exporting +# internals that are not part of the public API. coveragePathIgnorePatterns = ["**/pkg/**", "**/dist/**", "**/bun-plugin/src/plugin.ts"] diff --git a/libs/css/Cargo.toml b/libs/css/Cargo.toml index b13de935..28586bee 100644 --- a/libs/css/Cargo.toml +++ b/libs/css/Cargo.toml @@ -2,9 +2,14 @@ name = "css" version = "0.1.0" edition = "2024" +description = "CSS utilities and selector optimization for Devup UI" +license = "Apache-2.0" +repository = "https://github.com/dev-five-git/devup-ui" +keywords = ["css", "selectors", "optimization", "react", "devup-ui"] +categories = ["development-tools", "wasm", "web-programming"] -[lints.rust] -unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] } +[lints] +workspace = true [dependencies] phf = { version = "0.13", features = ["macros"] } diff --git a/libs/css/benches/css_benchmark.rs b/libs/css/benches/css_benchmark.rs index e1ae17c8..d294996b 100644 --- a/libs/css/benches/css_benchmark.rs +++ b/libs/css/benches/css_benchmark.rs @@ -30,7 +30,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) { black_box(None), black_box(None), ) - }) + }); }); group.bench_function("with_selector", |b| { @@ -44,7 +44,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) { black_box(None), black_box(None), ) - }) + }); }); group.bench_function("with_filename", |b| { @@ -58,7 +58,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) { black_box(None), black_box(Some("test.tsx")), ) - }) + }); }); group.bench_function("all_params", |b| { @@ -72,7 +72,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) { black_box(Some(1)), black_box(Some("test.tsx")), ) - }) + }); }); group.bench_function("multiple_sequential", |b| { @@ -88,7 +88,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) { sheet_to_classname("width", 0, Some("100%"), None, None, None); sheet_to_classname("height", 0, Some("50vh"), None, None, None); sheet_to_classname("border-radius", 0, Some("8px"), None, None, None); - }) + }); }); group.finish(); @@ -98,29 +98,29 @@ fn bench_optimize_value(c: &mut Criterion) { let mut group = c.benchmark_group("optimize_value"); group.bench_function("simple_keyword", |b| { - b.iter(|| optimize_value(black_box("red"))) + b.iter(|| optimize_value(black_box("red"))); }); group.bench_function("simple_px", |b| { - b.iter(|| optimize_value(black_box("14px"))) + b.iter(|| optimize_value(black_box("14px"))); }); group.bench_function("zero_unit", |b| b.iter(|| optimize_value(black_box("0px")))); group.bench_function("rgba_color", |b| { - b.iter(|| optimize_value(black_box("rgba(255, 0, 0, 0.5)"))) + b.iter(|| optimize_value(black_box("rgba(255, 0, 0, 0.5)"))); }); group.bench_function("translate", |b| { - b.iter(|| optimize_value(black_box("translate(10px, 0px)"))) + b.iter(|| optimize_value(black_box("translate(10px, 0px)"))); }); group.bench_function("complex_multi", |b| { - b.iter(|| optimize_value(black_box("0px 0px 10px rgba(0,0,0,0.1)"))) + b.iter(|| optimize_value(black_box("0px 0px 10px rgba(0,0,0,0.1)"))); }); group.bench_function("theme_var", |b| { - b.iter(|| optimize_value(black_box("$primary"))) + b.iter(|| optimize_value(black_box("$primary"))); }); group.finish(); @@ -130,23 +130,23 @@ fn bench_to_kebab_case(c: &mut Criterion) { let mut group = c.benchmark_group("to_kebab_case"); group.bench_function("backgroundColor", |b| { - b.iter(|| to_kebab_case(black_box("backgroundColor"))) + b.iter(|| to_kebab_case(black_box("backgroundColor"))); }); group.bench_function("borderRadius", |b| { - b.iter(|| to_kebab_case(black_box("borderRadius"))) + b.iter(|| to_kebab_case(black_box("borderRadius"))); }); group.bench_function("justifyContent", |b| { - b.iter(|| to_kebab_case(black_box("justifyContent"))) + b.iter(|| to_kebab_case(black_box("justifyContent"))); }); group.bench_function("WebkitTransform", |b| { - b.iter(|| to_kebab_case(black_box("WebkitTransform"))) + b.iter(|| to_kebab_case(black_box("WebkitTransform"))); }); group.bench_function("simple_color", |b| { - b.iter(|| to_kebab_case(black_box("color"))) + b.iter(|| to_kebab_case(black_box("color"))); }); group.finish(); @@ -156,15 +156,15 @@ fn bench_merge_selector(c: &mut Criterion) { let mut group = c.benchmark_group("merge_selector"); group.bench_function("no_selector", |b| { - b.iter(|| merge_selector(black_box("a"), black_box(None))) + b.iter(|| merge_selector(black_box("a"), black_box(None))); }); group.bench_function("hover", |b| { - b.iter(|| merge_selector(black_box("a"), black_box(Some(&"hover".into())))) + b.iter(|| merge_selector(black_box("a"), black_box(Some(&"hover".into())))); }); group.bench_function("theme_dark", |b| { - b.iter(|| merge_selector(black_box("a"), black_box(Some(&"theme-dark".into())))) + b.iter(|| merge_selector(black_box("a"), black_box(Some(&"theme-dark".into())))); }); group.finish(); diff --git a/libs/css/src/class_map.rs b/libs/css/src/class_map.rs index 498d2e3b..01071504 100644 --- a/libs/css/src/class_map.rs +++ b/libs/css/src/class_map.rs @@ -30,7 +30,10 @@ where } #[cfg(not(target_arch = "wasm32"))] { - f(&GLOBAL_CLASS_MAP.lock().unwrap()) + let guard = GLOBAL_CLASS_MAP + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); + f(&guard) } } @@ -46,13 +49,16 @@ where } #[cfg(not(target_arch = "wasm32"))] { - f(&mut GLOBAL_CLASS_MAP.lock().unwrap()) + let mut guard = GLOBAL_CLASS_MAP + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); + f(&mut guard) } } /// for test pub fn reset_class_map() { - with_class_map_mut(|map| map.clear()); + with_class_map_mut(HashMap::clear); } pub fn set_class_map(new_map: HashMap>) { @@ -60,7 +66,7 @@ pub fn set_class_map(new_map: HashMap>) { } pub fn get_class_map() -> HashMap> { - with_class_map(|map| map.clone()) + with_class_map(Clone::clone) } #[cfg(test)] @@ -73,7 +79,7 @@ mod tests { #[serial] fn test_set_and_get_class_map() { let mut test_map = HashMap::new(); - test_map.insert("".to_string(), HashMap::new()); + test_map.insert(String::new(), HashMap::new()); set_class_map(test_map.clone()); let got = get_class_map(); assert_eq!(got.get(""), Some(&HashMap::new())); @@ -83,7 +89,7 @@ mod tests { #[serial] fn test_reset_class_map() { let mut test_map = HashMap::new(); - test_map.insert("".to_string(), HashMap::new()); + test_map.insert(String::new(), HashMap::new()); set_class_map(test_map); reset_class_map(); let got = get_class_map(); diff --git a/libs/css/src/constant.rs b/libs/css/src/constant.rs index 55598ecf..ad18f0fd 100644 --- a/libs/css/src/constant.rs +++ b/libs/css/src/constant.rs @@ -4,6 +4,11 @@ use phf::{phf_map, phf_set}; use regex_lite::Regex; use std::sync::LazyLock; +fn compile_regex(pattern: &str) -> Regex { + Regex::new(pattern) + .unwrap_or_else(|err| panic!("invalid built-in regex pattern `{pattern}`: {err}")) +} + pub(super) static SELECTOR_ORDER_MAP: LazyLock> = LazyLock::new(|| { let mut map = HashMap::new(); for (idx, selector) in [ @@ -161,43 +166,40 @@ pub(super) static ZERO_PERCENT_FUNCTION: phf::Set<&str> = phf_set! { "tan(", }; -pub(super) static F_SPACE_RE: LazyLock = LazyLock::new(|| Regex::new(r"\s*,\s*").unwrap()); +pub(super) static F_SPACE_RE: LazyLock = LazyLock::new(|| compile_regex(r"\s*,\s*")); pub(super) static CSS_FUNCTION_RE: LazyLock = - LazyLock::new(|| Regex::new(r"^[a-zA-Z-]+(\(.*\))").unwrap()); -pub(super) static CHECK_QUOTES_RE: LazyLock = - LazyLock::new(|| Regex::new(r"[()\s]").unwrap()); + LazyLock::new(|| compile_regex(r"^[a-zA-Z-]+(\(.*\))")); +pub(super) static CHECK_QUOTES_RE: LazyLock = LazyLock::new(|| compile_regex(r"[()\s]")); pub(super) static CSS_COMMENT_RE: LazyLock = - LazyLock::new(|| Regex::new(r"/\*[\s\S]*?\*/").unwrap()); + LazyLock::new(|| compile_regex(r"/\*[\s\S]*?\*/")); -pub(super) static F_DOT_RE: LazyLock = - LazyLock::new(|| Regex::new(r"(\b|,)0\.(\d+)").unwrap()); +pub(super) static F_DOT_RE: LazyLock = LazyLock::new(|| compile_regex(r"(\b|,)0\.(\d+)")); pub(super) static DOT_ZERO_RE: LazyLock = - LazyLock::new(|| Regex::new(r"(\b|,)-?0\.0+([^\d])").unwrap()); + LazyLock::new(|| compile_regex(r"(\b|,)-?0\.0+([^\d])")); -pub(super) static COLOR_HASH: LazyLock = - LazyLock::new(|| Regex::new(r"#([0-9a-zA-Z]+)").unwrap()); +pub(super) static COLOR_HASH: LazyLock = LazyLock::new(|| compile_regex(r"#([0-9a-zA-Z]+)")); pub(super) static INNER_TRIM_RE: LazyLock = - LazyLock::new(|| Regex::new(r"\(\s*([^)]*?)\s*\)").unwrap()); + LazyLock::new(|| compile_regex(r"\(\s*([^)]*?)\s*\)")); pub(super) static RM_MINUS_ZERO_RE: LazyLock = LazyLock::new(|| { - Regex::new(r"-0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg|\)|,)").unwrap() + compile_regex(r"-0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg|\)|,)") }); pub(super) static NUM_TRIM_RE: LazyLock = LazyLock::new(|| { - Regex::new(r"(\d(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)?)\s+(\d)") - .unwrap() + compile_regex(r"(\d(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)?)\s+(\d)") }); pub(super) static ZERO_RE: LazyLock = LazyLock::new(|| { - Regex::new(r"(\b|,|\(|^|\s)-?0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)") - .unwrap() + compile_regex( + r"(\b|,|\(|^|\s)-?0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)", + ) }); pub(super) static F_RGBA_RE: LazyLock = - LazyLock::new(|| Regex::new(r"rgba\((\d+),(\d+),(\d+),(\d*\.?\d*)\)").unwrap()); + LazyLock::new(|| compile_regex(r"rgba\((\d+),(\d+),(\d+),(\d*\.?\d*)\)")); pub(super) static F_RGB_RE: LazyLock = - LazyLock::new(|| Regex::new(r"rgb\((\d+),(\d+),(\d+)\)").unwrap()); + LazyLock::new(|| compile_regex(r"rgb\((\d+),(\d+),(\d+)\)")); pub(super) static N_BASE_ARRAY: [char; 27] = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', diff --git a/libs/css/src/file_map.rs b/libs/css/src/file_map.rs index 42d890c4..01617d71 100644 --- a/libs/css/src/file_map.rs +++ b/libs/css/src/file_map.rs @@ -19,7 +19,7 @@ static GLOBAL_FILE_MAP: LazyLock>> = LazyLock::new(|| Mutex::new(BiHashMap::new())); #[inline] -fn with_file_map(f: F) -> R +pub fn with_file_map(f: F) -> R where F: FnOnce(&BiHashMap) -> R, { @@ -30,7 +30,10 @@ where } #[cfg(not(target_arch = "wasm32"))] { - f(&GLOBAL_FILE_MAP.lock().unwrap()) + let guard = GLOBAL_FILE_MAP + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); + f(&guard) } } @@ -46,13 +49,16 @@ where } #[cfg(not(target_arch = "wasm32"))] { - f(&mut GLOBAL_FILE_MAP.lock().unwrap()) + let mut guard = GLOBAL_FILE_MAP + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner); + f(&mut guard) } } /// for test pub fn reset_file_map() { - with_file_map_mut(|map| map.clear()); + with_file_map_mut(BiHashMap::clear); } pub fn set_file_map(new_map: BiHashMap) { @@ -60,24 +66,28 @@ pub fn set_file_map(new_map: BiHashMap) { } pub fn get_file_map() -> BiHashMap { - with_file_map(|map| map.clone()) + with_file_map(Clone::clone) } #[inline] +#[must_use] pub fn get_file_num_by_filename(filename: &str) -> usize { with_file_map_mut(|map| { - let len = map.len(); - if !map.contains_left(filename) { - map.insert(filename.to_string(), len); + if let Some(&file_num) = map.get_by_left(filename) { + file_num + } else { + let file_num = map.len(); + map.insert(filename.to_string(), file_num); + file_num } - *map.get_by_left(filename).unwrap() }) } +#[must_use] pub fn get_filename_by_file_num(file_num: usize) -> String { with_file_map(|map| { map.get_by_right(&file_num) - .map(|s| s.as_str()) + .map(String::as_str) .unwrap_or_default() .to_string() }) diff --git a/libs/css/src/is_special_property.rs b/libs/css/src/is_special_property.rs index fd833d66..b4098f18 100644 --- a/libs/css/src/is_special_property.rs +++ b/libs/css/src/is_special_property.rs @@ -412,6 +412,7 @@ static SPECIAL_PROPERTIES: phf::Set<&str> = phf_set! { "webpreferences", }; +#[must_use] pub fn is_special_property(name: &str) -> bool { name.starts_with("on") || name.starts_with("data-") @@ -959,7 +960,7 @@ mod tests { .map(to_camel_case), ); - for property in SPECIAL_PROPERTIES.iter() { + for property in &SPECIAL_PROPERTIES { assert!(!css.contains(*property)); } } diff --git a/libs/css/src/lib.rs b/libs/css/src/lib.rs index 4f542229..4caf9f9c 100644 --- a/libs/css/src/lib.rs +++ b/libs/css/src/lib.rs @@ -44,15 +44,21 @@ mod prefix_state { use std::sync::Mutex; static GLOBAL_PREFIX: LazyLock>> = LazyLock::new(|| Mutex::new(None)); pub fn set_prefix(prefix: Option) { - *GLOBAL_PREFIX.lock().unwrap() = prefix; + *GLOBAL_PREFIX + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner) = prefix; } pub fn get_prefix() -> Option { - GLOBAL_PREFIX.lock().unwrap().clone() + GLOBAL_PREFIX + .lock() + .unwrap_or_else(std::sync::PoisonError::into_inner) + .clone() } } pub use prefix_state::{get_prefix, set_prefix}; +#[must_use] pub fn merge_selector(class_name: &str, selector: Option<&StyleSelector>) -> String { if let Some(selector) = selector { match selector { @@ -60,14 +66,14 @@ pub fn merge_selector(class_name: &str, selector: Option<&StyleSelector>) -> Str let mut dot_class = String::with_capacity(1 + class_name.len()); dot_class.push('.'); dot_class.push_str(class_name); - value.replace("&", &dot_class) + value.replace('&', &dot_class) } StyleSelector::At { selector: s, .. } => { if let Some(s) = s { let mut dot_class = String::with_capacity(1 + class_name.len()); dot_class.push('.'); dot_class.push_str(class_name); - s.replace("&", &dot_class) + s.replace('&', &dot_class) } else { let mut result = String::with_capacity(1 + class_name.len()); result.push('.'); @@ -75,7 +81,7 @@ pub fn merge_selector(class_name: &str, selector: Option<&StyleSelector>) -> Str result } } - StyleSelector::Global(v, _) => v.to_string(), + StyleSelector::Global(v, _) => v.clone(), } } else { let mut result = String::with_capacity(1 + class_name.len()); @@ -85,36 +91,47 @@ pub fn merge_selector(class_name: &str, selector: Option<&StyleSelector>) -> Str } } +#[must_use] pub fn disassemble_property(property: &str) -> Vec { - GLOBAL_STYLE_PROPERTY - .get(property) - .map(|v| match v.len() { - 1 => vec![v[0].to_string()], - _ => v.iter().map(|v| v.to_string()).collect(), - }) - .unwrap_or_else(|| { + GLOBAL_STYLE_PROPERTY.get(property).map_or_else( + || { vec![if (property.starts_with("Webkit") && property.len() > 6 - && property.chars().nth(6).unwrap().is_uppercase()) + && property + .as_bytes() + .get(6) + .is_some_and(u8::is_ascii_uppercase)) || (property.starts_with("Moz") && property.len() > 3 - && property.chars().nth(3).unwrap().is_uppercase()) + && property + .as_bytes() + .get(3) + .is_some_and(u8::is_ascii_uppercase)) || (property.starts_with("ms") && property.len() > 2 - && property.chars().nth(2).unwrap().is_uppercase()) + && property + .as_bytes() + .get(2) + .is_some_and(u8::is_ascii_uppercase)) { format!("-{}", to_kebab_case(property)) } else { to_kebab_case(property) }] - }) + }, + |v| match v.len() { + 1 => vec![v[0].to_string()], + _ => v.iter().map(ToString::to_string).collect(), + }, + ) } +#[must_use] pub fn add_selector_params(selector: StyleSelector, params: &str) -> StyleSelector { match selector { - StyleSelector::Selector(value) => StyleSelector::Selector(format!("{}({})", value, params)), + StyleSelector::Selector(value) => StyleSelector::Selector(format!("{value}({params})")), StyleSelector::Global(value, file) => { - StyleSelector::Global(format!("{}({})", value, params), file) + StyleSelector::Global(format!("{value}({params})"), file) } StyleSelector::At { kind, @@ -122,12 +139,13 @@ pub fn add_selector_params(selector: StyleSelector, params: &str) -> StyleSelect selector, } => StyleSelector::At { kind, - query: query.to_string(), - selector: selector.map(|s| format!("{}({})", s, params)), + query, + selector: selector.map(|s| format!("{s}({params})")), }, } } +#[must_use] pub fn get_enum_property_value(property: &str, value: &str) -> Option> { if let Some(map) = GLOBAL_ENUM_STYLE_PROPERTY.get(property) { if let Some(map) = map.get(value) { @@ -144,6 +162,7 @@ pub fn get_enum_property_value(property: &str, value: &str) -> Option Option>> { if let Some(map) = GLOBAL_ENUM_STYLE_PROPERTY.get(property) { let mut ret = BTreeMap::new(); @@ -160,6 +179,7 @@ pub fn get_enum_property_map(property: &str) -> Option) -> String { let prefix = get_prefix().unwrap_or_default(); if is_debug() { @@ -338,10 +358,10 @@ pub fn sheet_to_classname( num_to_nm_base(len) } }); - if filename.is_some() { + if let Some(file_num) = file_num { let mut result = String::with_capacity(prefix.len() + 8 + clas_num.len()); result.push_str(&prefix); - result.push_str(&num_to_nm_base(file_num.unwrap())); + result.push_str(&num_to_nm_base(file_num)); result.push('-'); result.push_str(&clas_num); result @@ -369,6 +389,7 @@ fn write_u8(s: &mut String, v: u8) { } } +#[must_use] pub fn sheet_to_variable_name(property: &str, level: u8, selector: Option<&str>) -> String { let prefix = get_prefix().unwrap_or_default(); if is_debug() { @@ -596,7 +617,8 @@ mod tests { class_map::with_class_map(|map| { assert_eq!( - map.get("").unwrap().get("background-0-#FF000080--255"), + map.get("") + .and_then(|entry| entry.get("background-0-#FF000080--255")), Some(&2) ); }); @@ -611,7 +633,11 @@ mod tests { ); class_map::with_class_map(|map| { - assert_eq!(map.get("").unwrap().get("background-0-#FFF--255"), Some(&3)); + assert_eq!( + map.get("") + .and_then(|entry| entry.get("background-0-#FFF--255")), + Some(&3) + ); }); assert_eq!( @@ -626,7 +652,8 @@ mod tests { class_map::with_class_map(|map| { assert_eq!( - map.get("").unwrap().get("background-0-#FFFA--255"), + map.get("") + .and_then(|entry| entry.get("background-0-#FFFA--255")), Some(&4) ); }); @@ -820,9 +847,8 @@ mod tests { sheet_to_classname("background", 0, Some("red"), None, None, Some("test.tsx")); assert!(class_name.contains("background-0-red--255-")); // Should have a file number suffix - let parts: Vec<&str> = class_name.split('-').collect(); assert!( - parts.len() >= 6, + class_name.split('-').count() >= 6, "Expected file suffix in debug classname: {class_name}" ); set_debug(false); @@ -902,9 +928,9 @@ mod tests { #[serial] fn test_set_class_map() { let mut map = HashMap::new(); - map.insert("".to_string(), HashMap::new()); - map.get_mut("") - .unwrap() + map.insert(String::new(), HashMap::new()); + map.entry(String::new()) + .or_default() .insert("background-0-rgba(255,0,0,0.5)-".to_string(), 1); set_class_map(map); assert_eq!(get_class_map().len(), 1); @@ -1023,7 +1049,7 @@ mod tests { set_debug(false); reset_class_map(); - set_prefix(Some("".to_string())); + set_prefix(Some(String::new())); let class1 = sheet_to_classname("background", 0, Some("red"), None, None, None); reset_class_map(); @@ -1041,7 +1067,7 @@ mod tests { // Test with filename to cover lines 148-151 let name = keyframes_to_keyframes_name("spin", Some("test.tsx")); // Should include file number prefix - assert!(name.contains("-")); + assert!(name.contains('-')); // Same keyframe in same file should return same name let name2 = keyframes_to_keyframes_name("spin", Some("test.tsx")); @@ -1060,7 +1086,7 @@ mod tests { // Test with filename to cover the filename branch let class1 = sheet_to_classname("background", 0, Some("red"), None, None, Some("test.tsx")); // Should include file number prefix - assert!(class1.contains("-")); + assert!(class1.contains('-')); // Same property in same file should return same classname let class2 = sheet_to_classname("background", 0, Some("red"), None, None, Some("test.tsx")); diff --git a/libs/css/src/num_to_nm_base.rs b/libs/css/src/num_to_nm_base.rs index 7c31569d..d3b30744 100644 --- a/libs/css/src/num_to_nm_base.rs +++ b/libs/css/src/num_to_nm_base.rs @@ -16,13 +16,12 @@ pub fn num_to_nm_base(num: usize) -> String { if n < first_base { result.insert(0, N_BASE_ARRAY[n]); break; - } else { - result.insert(0, M_BASE_ARRAY[(n - first_base) % other_base]); - n = (n - first_base) / other_base; - if n == 0 { - result.insert(0, N_BASE_ARRAY[0]); - break; - } + } + result.insert(0, M_BASE_ARRAY[(n - first_base) % other_base]); + n = (n - first_base) / other_base; + if n == 0 { + result.insert(0, N_BASE_ARRAY[0]); + break; } } if result.ends_with("ad") { diff --git a/libs/css/src/optimize_multi_css_value.rs b/libs/css/src/optimize_multi_css_value.rs index ff0e1a0f..c0fd6900 100644 --- a/libs/css/src/optimize_multi_css_value.rs +++ b/libs/css/src/optimize_multi_css_value.rs @@ -1,25 +1,32 @@ use crate::constant::{CHECK_QUOTES_RE, CSS_FUNCTION_RE, OPTIMIZE_MULTI_CSS_VALUE_PROPERTY}; +#[must_use] pub fn optimize_mutli_css_value(value: &str) -> String { - value - .split(",") - .map(|s| { - let s = s.trim(); - let s = if s.starts_with("'") && s.ends_with("'") - || s.starts_with('"') && s.ends_with('"') - { - s[1..s.len() - 1].to_string() - } else { - s.to_string() - }; - if CHECK_QUOTES_RE.is_match(&s) && !CSS_FUNCTION_RE.is_match(&s) { - format!("\"{s}\"") - } else { - s - } - }) - .collect::>() - .join(",") + let mut result = String::with_capacity(value.len()); + for (idx, s) in value.split(',').enumerate() { + if idx > 0 { + result.push(','); + } + + let s = s.trim(); + let unquoted = if s.len() >= 2 + && ((s.starts_with('\'') && s.ends_with('\'')) + || (s.starts_with('"') && s.ends_with('"'))) + { + &s[1..s.len() - 1] + } else { + s + }; + + if CHECK_QUOTES_RE.is_match(unquoted) && !CSS_FUNCTION_RE.is_match(unquoted) { + result.push('"'); + result.push_str(unquoted); + result.push('"'); + } else { + result.push_str(unquoted); + } + } + result } pub fn wrap_url(s: &str) -> String { @@ -30,6 +37,7 @@ pub fn wrap_url(s: &str) -> String { } } +#[must_use] pub fn check_multi_css_optimize(property: &str) -> bool { OPTIMIZE_MULTI_CSS_VALUE_PROPERTY.contains(property) } @@ -57,6 +65,8 @@ mod tests { #[case("'A B', 'C D', E", "\"A B\",\"C D\",E")] #[case("A,B,C", "A,B,C")] #[case("A, B, C", "A,B,C")] + #[case("'", "'")] + #[case("\"", "\"")] #[case("url(abc)", "url(abc)")] #[case("url(\"a bc\")", "url(\"a bc\")")] #[case("'A', 'B', 'C'", "A,B,C")] diff --git a/libs/css/src/optimize_value.rs b/libs/css/src/optimize_value.rs index 52ae8566..060069de 100644 --- a/libs/css/src/optimize_value.rs +++ b/libs/css/src/optimize_value.rs @@ -45,17 +45,21 @@ pub fn optimize_value(value: &str) -> String { } if ret.contains("rgba(") { let replaced = F_RGBA_RE.replace_all(&ret, |c: ®ex_lite::Captures| { - let r = c[1].parse::().unwrap(); - let g = c[2].parse::().unwrap(); - let b = c[3].parse::().unwrap(); - let a = c[4].parse::().unwrap(); - format!( - "#{:02X}{:02X}{:02X}{:02X}", - r, - g, - b, - (a * 255.0).round() as i32 - ) + match ( + c[1].parse::(), + c[2].parse::(), + c[3].parse::(), + c[4].parse::(), + ) { + (Ok(r), Ok(g), Ok(b), Ok(a)) => format!( + "#{:02X}{:02X}{:02X}{:02X}", + r, + g, + b, + (a * 255.0).round() as i32 + ), + _ => c[0].to_string(), + } }); if let std::borrow::Cow::Owned(s) = replaced { ret = s; @@ -63,10 +67,14 @@ pub fn optimize_value(value: &str) -> String { } if ret.contains("rgb(") { let replaced = F_RGB_RE.replace_all(&ret, |c: ®ex_lite::Captures| { - let r = c[1].parse::().unwrap(); - let g = c[2].parse::().unwrap(); - let b = c[3].parse::().unwrap(); - format!("#{r:02X}{g:02X}{b:02X}") + match ( + c[1].parse::(), + c[2].parse::(), + c[3].parse::(), + ) { + (Ok(r), Ok(g), Ok(b)) => format!("#{r:02X}{g:02X}{b:02X}"), + _ => c[0].to_string(), + } }); if let std::borrow::Cow::Owned(s) = replaced { ret = s; @@ -94,7 +102,7 @@ pub fn optimize_value(value: &str) -> String { } let mut lower = ret.to_lowercase(); - for f in ZERO_PERCENT_FUNCTION.iter() { + for f in &ZERO_PERCENT_FUNCTION { if let Some(start) = lower.find(f) { let index = start + f.len(); let mut zero_idx = Vec::with_capacity(4); @@ -116,7 +124,7 @@ pub fn optimize_value(value: &str) -> String { } // In-place replacement: replace each '0' with '0%' from back to front for i in zero_idx.iter().rev() { - ret.replace_range(*i..*i + 1, "0%"); + ret.replace_range((*i)..=(*i), "0%"); } if !zero_idx.is_empty() { // Refresh lowercase only when modification occurred @@ -314,6 +322,12 @@ mod tests { #[case("translate(0px) scale(0deg)", "translate(0) scale(0)")] #[case("translate(-0px) scale(-0deg)", "translate(0) scale(0)")] #[case("translate(-10px) scale(-10deg)", "translate(-10px) scale(-10deg)")] + // rgba/rgb fallback paths when channel parsing fails + // i32 overflow for r/g/b (> i32::MAX = 2_147_483_647) → falls back to original + #[case("rgba(2147483648,0,0,0.5)", "rgba(2147483648,0,0,.5)")] + #[case("rgb(2147483648,0,0)", "rgb(2147483648,0,0)")] + // f32 parse failure for alpha (".") → falls back to original + #[case("rgba(255,0,0,.)", "rgba(255,0,0,.)")] fn test_optimize_value(#[case] input: &str, #[case] expected: &str) { assert_eq!(optimize_value(input), expected); } diff --git a/libs/css/src/rm_css_comment.rs b/libs/css/src/rm_css_comment.rs index 7178a123..bff77a96 100644 --- a/libs/css/src/rm_css_comment.rs +++ b/libs/css/src/rm_css_comment.rs @@ -1,13 +1,7 @@ -use crate::constant::CSS_COMMENT_RE; +use crate::{constant::CSS_COMMENT_RE, utils::collapse_whitespace}; pub fn rm_css_comment(value: &str) -> String { - CSS_COMMENT_RE - .replace_all(value, "") - .trim() - .split_ascii_whitespace() - .collect::>() - .join(" ") - .replace(", ", ",") + collapse_whitespace(&CSS_COMMENT_RE.replace_all(value, "")) } #[cfg(test)] diff --git a/libs/css/src/selector_separator.rs b/libs/css/src/selector_separator.rs index ff0f2116..dfef2ea9 100644 --- a/libs/css/src/selector_separator.rs +++ b/libs/css/src/selector_separator.rs @@ -24,15 +24,15 @@ impl Display for SelectorSeparator { } impl From<&str> for SelectorSeparator { fn from(value: &str) -> Self { - if value.starts_with(":") + if value.starts_with(':') || value.is_empty() - || value.starts_with("[") - || value.starts_with(" ") + || value.starts_with('[') + || value.starts_with(' ') { SelectorSeparator::None } else if DOUBLE_SEPARATOR.contains(value) { SelectorSeparator::Double - } else if value.starts_with("#") || value.starts_with(".") || value.starts_with("*") { + } else if value.starts_with('#') || value.starts_with('.') || value.starts_with('*') { SelectorSeparator::Space } else { SelectorSeparator::Single diff --git a/libs/css/src/style_selector.rs b/libs/css/src/style_selector.rs index 6cd0b29f..ada9ee10 100644 --- a/libs/css/src/style_selector.rs +++ b/libs/css/src/style_selector.rs @@ -6,8 +6,10 @@ use std::{ use serde::{Deserialize, Serialize}; use crate::{ - constant::SELECTOR_ORDER_MAP, selector_separator::SelectorSeparator, to_kebab_case, - utils::to_camel_case, + constant::SELECTOR_ORDER_MAP, + selector_separator::SelectorSeparator, + to_kebab_case, + utils::{collapse_whitespace, to_camel_case}, }; #[derive( @@ -57,12 +59,9 @@ pub enum StyleSelector { } fn optimize_selector_string(selector: &str) -> String { - selector - .split_whitespace() - .collect::>() - .join(" ") - .replace(", ", ",") + collapse_whitespace(selector) } +#[must_use] pub fn optimize_selector(selector: StyleSelector) -> StyleSelector { match selector { StyleSelector::At { @@ -118,16 +117,18 @@ impl Ord for StyleSelector { order_cmp } } - (StyleSelector::At { .. }, StyleSelector::Selector(_)) => Ordering::Greater, - (StyleSelector::Selector(_), StyleSelector::At { .. }) => Ordering::Less, (StyleSelector::Global(a, _), StyleSelector::Global(b, _)) => { if a == b { return Ordering::Equal; } - match (a.contains(":"), b.contains(":")) { + match (a.contains(':'), b.contains(':')) { (true, true) => { - let a_order = format!(":{}", a.split(":").nth(1).unwrap()); - let b_order = format!(":{}", b.split(":").nth(1).unwrap()); + let a_order = a + .split_once(':') + .map_or_else(String::new, |(_, post)| format!(":{post}")); + let b_order = b + .split_once(':') + .map_or_else(String::new, |(_, post)| format!(":{post}")); let mut a_order_value = 0; let mut b_order_value = 0; for (order, order_value) in SELECTOR_ORDER_MAP.iter() { @@ -149,21 +150,19 @@ impl Ord for StyleSelector { (false, false) => a.cmp(b), } } - (StyleSelector::Global(_, _), _) => Ordering::Less, - (_, StyleSelector::Global(_, _)) => Ordering::Greater, + (StyleSelector::At { .. }, StyleSelector::Selector(_)) + | (_, StyleSelector::Global(_, _)) => Ordering::Greater, + (StyleSelector::Selector(_), StyleSelector::At { .. }) + | (StyleSelector::Global(_, _), _) => Ordering::Less, } } } impl From<&str> for StyleSelector { fn from(value: &str) -> Self { - let value = value - .split_whitespace() - .collect::>() - .join(" ") - .replace(", ", ","); - if value.contains("&") { - StyleSelector::Selector(value.to_string()) + let value = collapse_whitespace(value); + if value.contains('&') { + StyleSelector::Selector(value) } else if let Some(s) = value.strip_prefix("group-") { let post = to_kebab_case(s); StyleSelector::Selector(format!( @@ -178,7 +177,7 @@ impl From<&str> for StyleSelector { } else if matches!(value.as_str(), "print" | "screen" | "speech" | "all") { StyleSelector::At { kind: AtRuleKind::Media, - query: value.to_string(), + query: value, selector: None, } } else { @@ -196,7 +195,7 @@ impl From<&str> for StyleSelector { impl From<[&str; 2]> for StyleSelector { fn from(value: [&str; 2]) -> Self { let post = if value[1].contains("&:") { - to_kebab_case(value[1].split(":").last().unwrap()) + to_kebab_case(value[1].rsplit_once(':').map_or(value[1], |(_, post)| post)) } else { to_kebab_case(value[1]) }; @@ -230,7 +229,7 @@ impl From<(&StyleSelector, &str)> for StyleSelector { impl Display for StyleSelector { fn fmt(&self, f: &mut Formatter) -> std::fmt::Result { match self { - StyleSelector::Selector(value) => f.write_str(value), + StyleSelector::Selector(value) | StyleSelector::Global(value, _) => f.write_str(value), StyleSelector::At { kind, query, @@ -246,7 +245,6 @@ impl Display for StyleSelector { } Ok(()) } - StyleSelector::Global(value, _) => f.write_str(value), } } } @@ -526,7 +524,7 @@ mod tests { } #[test] - #[should_panic] + #[should_panic(expected = "internal error: entered unreachable code")] fn test_at_rule_kind_from_str_unknown() { let _ = AtRuleKind::from("unknown"); } diff --git a/libs/css/src/utils.rs b/libs/css/src/utils.rs index fed267f0..dd83a4f5 100644 --- a/libs/css/src/utils.rs +++ b/libs/css/src/utils.rs @@ -1,4 +1,5 @@ #[inline] +#[must_use] pub fn to_kebab_case(value: &str) -> String { let mut result = String::with_capacity(value.len() + 4); for (i, c) in value.chars().enumerate() { @@ -15,6 +16,7 @@ pub fn to_kebab_case(value: &str) -> String { } #[inline] +#[must_use] pub fn to_camel_case(value: &str) -> String { let mut result = String::with_capacity(value.len()); for (i, s) in value.split('-').enumerate() { @@ -28,6 +30,19 @@ pub fn to_camel_case(value: &str) -> String { result } +#[inline] +#[must_use] +pub(crate) fn collapse_whitespace(value: &str) -> String { + let mut result = String::with_capacity(value.len()); + for part in value.split_whitespace() { + if !result.is_empty() && !result.ends_with(',') { + result.push(' '); + } + result.push_str(part); + } + result +} + #[cfg(test)] mod tests { use super::*; @@ -52,4 +67,13 @@ mod tests { fn test_to_kebab_case(#[case] input: &str, #[case] expected: &str) { assert_eq!(to_kebab_case(input), expected); } + + #[rstest] + #[case(" a b ", "a b")] + #[case("a, b", "a,b")] + #[case("a , b", "a ,b")] + #[case("a, b c", "a,b c")] + fn test_collapse_whitespace(#[case] input: &str, #[case] expected: &str) { + assert_eq!(collapse_whitespace(input), expected); + } } diff --git a/libs/extractor/Cargo.toml b/libs/extractor/Cargo.toml index 7ebca084..fbf29976 100644 --- a/libs/extractor/Cargo.toml +++ b/libs/extractor/Cargo.toml @@ -2,17 +2,25 @@ name = "extractor" version = "0.1.0" edition = "2024" +description = "Static style extraction engine for Devup UI" +license = "Apache-2.0" +repository = "https://github.com/dev-five-git/devup-ui" +keywords = ["css", "extractor", "jsx", "react", "devup-ui"] +categories = ["development-tools", "wasm", "web-programming"] + +[lints] +workspace = true [dependencies] -oxc_parser = "0.124.0" -oxc_syntax = "0.124.0" -oxc_span = "0.124.0" -oxc_allocator = "0.124.0" -oxc_ast = "0.124.0" -oxc_ast_visit = "0.124.0" -oxc_codegen = "0.124.0" -oxc_transformer = "0.124.0" -oxc_semantic = "0.124.0" +oxc_parser = "0.129.0" +oxc_syntax = "0.129.0" +oxc_span = "0.129.0" +oxc_allocator = "0.129.0" +oxc_ast = "0.129.0" +oxc_ast_visit = "0.129.0" +oxc_codegen = "0.129.0" +oxc_transformer = "0.129.0" +oxc_semantic = "0.129.0" css = { path = "../css" } phf = "0.13" strum = "0.28.0" diff --git a/libs/extractor/benches/extract_benchmark.rs b/libs/extractor/benches/extract_benchmark.rs index f22e4cee..0d373609 100644 --- a/libs/extractor/benches/extract_benchmark.rs +++ b/libs/extractor/benches/extract_benchmark.rs @@ -1,3 +1,5 @@ +#![allow(clippy::expect_used, clippy::unwrap_used)] + use criterion::{Criterion, criterion_group, criterion_main}; use std::collections::HashMap; use std::hint::black_box; @@ -18,6 +20,16 @@ fn make_option() -> ExtractOption { } } +fn make_vanilla_option() -> ExtractOption { + ExtractOption { + package: "@devup-ui/react".to_string(), + css_dir: "@devup-ui/react".to_string(), + single_css: true, + import_main_css: false, + import_aliases: HashMap::new(), + } +} + fn reset_state() { reset_class_map(); reset_file_map(); @@ -71,12 +83,22 @@ const a = "#; +const TAILWIND_INPUT: &str = r#"import {Box} from '@devup-ui/react' +const a = "#; + +const VANILLA_INPUT: &str = r"import { style } from '@devup-ui/react' +const base = style({ padding: 12, borderRadius: 4 }) +const interactive = style({ cursor: 'pointer', transition: 'all 0.2s' }) +export const button = style([base, interactive, { background: 'blue', color: 'white' }]) +export const danger = style([button, { background: 'red', color: 'white' }]) +export const ghost = style([base, { background: 'transparent', color: 'blue' }])"; + fn criterion_benchmark(c: &mut Criterion) { c.bench_function("extract_small", |b| { b.iter(|| { reset_state(); extract(black_box("test.tsx"), black_box(SMALL_INPUT), make_option()).unwrap() - }) + }); }); c.bench_function("extract_medium", |b| { @@ -88,14 +110,38 @@ fn criterion_benchmark(c: &mut Criterion) { make_option(), ) .unwrap() - }) + }); }); c.bench_function("extract_large", |b| { b.iter(|| { reset_state(); extract(black_box("test.tsx"), black_box(LARGE_INPUT), make_option()).unwrap() - }) + }); + }); + + c.bench_function("extract_tailwind_dense", |b| { + b.iter(|| { + reset_state(); + extract( + black_box("tailwind.tsx"), + black_box(TAILWIND_INPUT), + make_option(), + ) + .unwrap() + }); + }); + + c.bench_function("extract_vanilla_placeholders", |b| { + b.iter(|| { + reset_state(); + extract( + black_box("styles.css.ts"), + black_box(VANILLA_INPUT), + make_vanilla_option(), + ) + .unwrap() + }); }); } diff --git a/libs/extractor/src/component.rs b/libs/extractor/src/component.rs index ca51a80c..33d11f65 100644 --- a/libs/extractor/src/component.rs +++ b/libs/extractor/src/component.rs @@ -6,7 +6,7 @@ use crate::extract_style::{ }; /// devup-ui export variable kind -#[derive(Debug, PartialEq, Clone, EnumIter, Display)] +#[derive(Debug, PartialEq, Eq, Clone, EnumIter, Display)] pub enum ExportVariableKind { Box, Text, @@ -21,7 +21,7 @@ pub enum ExportVariableKind { impl ExportVariableKind { /// Convert the kind to a tag - pub fn to_tag(&self) -> &str { + pub const fn to_tag(&self) -> &str { match self { ExportVariableKind::Center | ExportVariableKind::VStack diff --git a/libs/extractor/src/css_utils.rs b/libs/extractor/src/css_utils.rs index eabd6cfa..bf923b15 100644 --- a/libs/extractor/src/css_utils.rs +++ b/libs/extractor/src/css_utils.rs @@ -36,8 +36,8 @@ pub fn rm_last_semi_colon(code: &str) -> &str { code.trim_end_matches(';') } -pub fn css_to_style_literal<'a>( - css: &TemplateLiteral<'a>, +pub fn css_to_style_literal( + css: &TemplateLiteral<'_>, level: u8, selector: &Option, ) -> Vec { @@ -45,7 +45,7 @@ pub fn css_to_style_literal<'a>( // If there are no expressions, just process quasis as static CSS if css.expressions.is_empty() { - for quasi in css.quasis.iter() { + for quasi in &css.quasis { styles.extend( css_to_style(&quasi.value.raw, level, selector) .into_iter() @@ -71,7 +71,7 @@ pub fn css_to_style_literal<'a>( // Add expression placeholder if not the last quasi if i < css.expressions.len() { // Use a unique placeholder format that CSS parser won't modify - let placeholder = format!("__EXPR_{}__", i); + let placeholder = format!("__EXPR_{i}__"); expression_map.insert(placeholder.clone(), i); css_parts.push(placeholder); } @@ -91,13 +91,23 @@ pub fn css_to_style_literal<'a>( // Find all placeholders in this value let mut found_placeholders = Vec::new(); - for (placeholder, &idx) in expression_map.iter() { + for (placeholder, &idx) in &expression_map { if value.contains(placeholder) { found_placeholders.push((placeholder.clone(), idx)); } } - if !found_placeholders.is_empty() { + if found_placeholders.is_empty() { + // Check if property name contains a dynamic expression placeholder + let property = style.property(); + + if !expression_map.keys().any(|p| property.contains(p)) { + // Static style + styles.push(CssToStyleResult::Static(style)); + } + + // Property name is dynamic - skip for now as it's more complex + } else { // Check if all expressions are literals that can be statically evaluated let mut all_literals = true; @@ -209,12 +219,12 @@ pub fn css_to_style_literal<'a>( let expr_code = rm_last_semi_colon(&expr_code); // Replace placeholder with ${expr} syntax template_literal = template_literal - .replace(placeholder.as_str(), &format!("${{{}}}", expr_code)); + .replace(placeholder.as_str(), &format!("${{{expr_code}}}")); } } // Wrap in template literal backticks - let final_identifier = format!("`{}`", template_literal); + let final_identifier = format!("`{template_literal}`"); styles.push(CssToStyleResult::Dynamic(ExtractDynamicStyle::new( style.property(), @@ -224,16 +234,6 @@ pub fn css_to_style_literal<'a>( ))); } } - } else { - // Check if property name contains a dynamic expression placeholder - let property = style.property(); - - if !expression_map.keys().any(|p| property.contains(p)) { - // Static style - styles.push(CssToStyleResult::Static(style)); - } - - // Property name is dynamic - skip for now as it's more complex } } @@ -253,7 +253,7 @@ pub fn css_to_style( if input.contains(at_rule) { let at_inputs = input .split(at_rule) - .flat_map(|s| { + .filter_map(|s| { let s = s.trim(); if s.is_empty() { None @@ -277,7 +277,7 @@ pub fn css_to_style( let before_brace = &input[..start].trim(); // Split by semicolon to find the last part which should be the selector - let parts: Vec<&str> = before_brace.split(';').map(|s| s.trim()).collect(); + let parts: Vec<&str> = before_brace.split(';').map(str::trim).collect(); // Find the selector part (the last part that doesn't contain ':') // or if all parts contain ':', then the last part is the selector @@ -295,7 +295,7 @@ pub fn css_to_style( let (props, sel) = parts.split_at(parts.len().min(selector_idx)); (props.join(";"), sel.join(";")) } else { - ("".to_string(), before_brace.to_string()) + (String::new(), before_brace.to_string()) }; // Process plain properties if any @@ -343,21 +343,21 @@ pub fn css_to_style( if sel.starts_with("@media") { Some(StyleSelector::At { kind: AtRuleKind::Media, - query: sel.replace(" ", "").replace("and(", "and (")["@media".len()..] + query: sel.replace(' ', "").replace("and(", "and (")["@media".len()..] .to_string(), selector: None, }) } else if sel.starts_with("@supports") { Some(StyleSelector::At { kind: AtRuleKind::Supports, - query: sel.replace(" ", "").replace("and(", "and (")["@supports".len()..] + query: sel.replace(' ', "").replace("and(", "and (")["@supports".len()..] .to_string(), selector: None, }) } else if sel.starts_with("@container") { Some(StyleSelector::At { kind: AtRuleKind::Container, - query: sel.replace(" ", "").replace("and(", "and (")["@container".len()..] + query: sel.replace(' ', "").replace("and(", "and (")["@container".len()..] .to_string(), selector: None, }) @@ -383,18 +383,17 @@ pub fn css_to_style( // Check if there's more content after the closing brace if closing_brace_pos + 1 < input.len() { let remaining = &input[closing_brace_pos + 1..].trim(); - if !remaining.is_empty() { - // If there's remaining text after the closing brace, process it - // This handles cases like "} color: blue;" - if remaining.contains('{') { - // If it contains '{', continue the loop - input = remaining; - } else { - // If it doesn't contain '{', process it as a block and break - styles.extend(css_to_style_block(remaining, level, selector)); - break; - } + if remaining.is_empty() { + break; + } + // If there's remaining text after the closing brace, process it + // This handles cases like "} color: blue;" + if remaining.contains('{') { + // If it contains '{', continue the loop + input = remaining; } else { + // If it doesn't contain '{', process it as a block and break + styles.extend(css_to_style_block(remaining, level, selector)); break; } } else { @@ -415,15 +414,15 @@ fn css_to_style_block( selector: &Option, ) -> Vec { rm_css_comment(css) - .split(";") + .split(';') .filter_map(|s| { let s = s.trim(); if s.is_empty() { None } else { - let mut iter = s.split(":").map(|s| s.trim()); - let property = iter.next().unwrap(); - let value = iter.next().unwrap(); + let (property, value) = s.split_once(':')?; + let property = property.trim(); + let value = value.trim(); let value = if check_multi_css_optimize(property) { optimize_mutli_css_value(value) } else { @@ -492,48 +491,70 @@ pub fn optimize_css_block(css: &str) -> String { result.push(';'); } first_segment = false; - let parts: Vec<&str> = s.split('{').collect(); - let first_part_str = if parts.len() > 1 { - parts[..parts.len() - 1] - .iter() - .map(|p| p.trim()) - .collect::>() - .join("{") - + "{" + + let last_part = if let Some((prefix, last_part)) = s.rsplit_once('{') { + append_brace_prefix(&mut result, prefix); + last_part.trim() } else { - String::new() + s.trim() }; - let last_part = parts.last().unwrap().trim(); - if !last_part.contains(':') { - result.push_str(&first_part_str); - result.push_str(last_part); - } else { - let mut iter = last_part.split(':'); - let property = iter.next().unwrap().trim(); - let value = iter.next().unwrap().trim(); - let optimized_value = - if check_multi_css_optimize(property.split('{').next_back().unwrap()) { - optimize_mutli_css_value(value) - } else { - value.to_string() - }; - result.push_str(&first_part_str); + if let Some((property, value)) = last_part.split_once(':') { + let property = property.trim(); + let value = value.trim(); + + let property_name = property + .rsplit_once('{') + .map_or(property, |(_, property_name)| property_name); + let optimized_value = if check_multi_css_optimize(property_name) { + optimize_mutli_css_value(value) + } else { + value.to_string() + }; result.push_str(property); result.push(':'); result.push_str(&optimized_value); + } else { + result.push_str(last_part); } } - // Remove trailing ";}" -> "}" - let trimmed_result = result.trim(); - if trimmed_result.is_empty() { + trim_string_in_place(&mut result); + if result.is_empty() { return String::new(); } - trimmed_result.replace(";}", "}").to_string() + remove_semicolon_before_closing_brace(&mut result); + result +} + +fn append_brace_prefix(result: &mut String, prefix: &str) { + for (idx, part) in prefix.split('{').enumerate() { + if idx > 0 { + result.push('{'); + } + result.push_str(part.trim()); + } + result.push('{'); +} + +fn trim_string_in_place(value: &mut String) { + let trimmed_start = value.len() - value.trim_start().len(); + if trimmed_start > 0 { + value.drain(..trimmed_start); + } + + let trimmed_len = value.trim_end().len(); + value.truncate(trimmed_len); +} + +fn remove_semicolon_before_closing_brace(value: &mut String) { + while let Some(idx) = value.find(";}") { + value.remove(idx); + } } #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use super::*; @@ -1041,7 +1062,11 @@ mod tests { #[case(":root{ background: red; }", ":root{background:red}")] #[case( ":root, :section{ background: red; }", - ":root,:section{background:red}" + concat!(":root,:section", "{background:red}") + )] + #[case( + "@supports (display: grid) { .grid { gap : 1rem ; } }", + concat!("@supports (display: grid)", "{.grid", "{gap:1rem}}") )] #[case("*:hover{ background: red; }", "*:hover{background:red}")] #[case(":root {color-scheme: light dark }", ":root{color-scheme:light dark}")] @@ -1391,23 +1416,38 @@ mod tests { #[case] expected: Vec<(&str, Vec<(&str, &str)>)>, ) { let styles = keyframes_to_keyframes_style(input); - if styles.len() != expected.len() { - panic!("styles.len() != expected.len()"); - } - for (expected_key, expected_styles) in styles.iter() { + assert!( + styles.len() == expected.len(), + "styles.len() != expected.len()" + ); + for (expected_key, expected_styles) in &styles { let styles = expected_styles; let mut result: Vec<(&str, &str)> = styles .iter() .map(|prop| (prop.property(), prop.value())) .collect(); - result.sort(); + result.sort_unstable(); let mut expected_sorted = expected .iter() .find(|(k, _)| k == expected_key) .map(|(_, v)| v.clone()) .unwrap(); - expected_sorted.sort(); + expected_sorted.sort_unstable(); assert_eq!(result, expected_sorted); } } + + #[rstest] + #[case(" hello", "hello")] + #[case("\t\nhello", "hello")] + #[case(" hello ", "hello")] + #[case("hello ", "hello")] + #[case("hello", "hello")] + #[case("", "")] + #[case(" ", "")] + fn test_trim_string_in_place(#[case] input: &str, #[case] expected: &str) { + let mut value = input.to_string(); + trim_string_in_place(&mut value); + assert_eq!(value, expected); + } } diff --git a/libs/extractor/src/extract_style/extract_dynamic_style.rs b/libs/extractor/src/extract_style/extract_dynamic_style.rs index 4fa2a656..455f8df8 100644 --- a/libs/extractor/src/extract_style/extract_dynamic_style.rs +++ b/libs/extractor/src/extract_style/extract_dynamic_style.rs @@ -58,7 +58,7 @@ fn strip_important(identifier: &str) -> (String, bool) { } impl ExtractDynamicStyle { - /// create a new ExtractDynamicStyle + /// create a new `ExtractDynamicStyle` pub fn new( property: &str, level: u8, @@ -77,27 +77,27 @@ impl ExtractDynamicStyle { } } - pub fn property(&self) -> &str { + pub const fn property(&self) -> &str { self.property.as_str() } - pub fn level(&self) -> u8 { + pub const fn level(&self) -> u8 { self.level } - pub fn selector(&self) -> Option<&StyleSelector> { + pub const fn selector(&self) -> Option<&StyleSelector> { self.selector.as_ref() } - pub fn identifier(&self) -> &str { + pub const fn identifier(&self) -> &str { self.identifier.as_str() } - pub fn style_order(&self) -> Option { + pub const fn style_order(&self) -> Option { self.style_order } - pub fn important(&self) -> bool { + pub const fn important(&self) -> bool { self.important } } diff --git a/libs/extractor/src/extract_style/extract_static_style.rs b/libs/extractor/src/extract_style/extract_static_style.rs index 940a7e51..35a42397 100644 --- a/libs/extractor/src/extract_style/extract_static_style.rs +++ b/libs/extractor/src/extract_style/extract_static_style.rs @@ -33,7 +33,7 @@ pub struct ExtractStaticStyle { pub selector: Option, /// None is inf, 0 is first, 1 is second, etc pub style_order: Option, - /// CSS layer name (from vanilla-extract layer()) + /// CSS layer name (from vanilla-extract `layer()`) pub layer: Option, /// How theme tokens should be resolved when converting to CSS. pub theme_token_resolution: ThemeTokenResolution, @@ -53,16 +53,14 @@ impl Debug for ExtractStaticStyle { } impl ExtractStaticStyle { - /// create a new ExtractStaticStyle + /// create a new `ExtractStaticStyle` pub fn new(property: &str, value: &str, level: u8, selector: Option) -> Self { Self { value: optimize_value(&if MAINTAIN_VALUE_PROPERTIES.contains(property) { - if property == "aspect-ratio" && value.contains("/") { - if let [Ok(a), Ok(b)] = value - .split('/') - .map(|v| v.trim().parse::()) - .collect::>()[..] - { + if property == "aspect-ratio" && value.contains('/') { + if let Some((a, b)) = value.split_once('/').and_then(|(a, b)| { + Some((a.trim().parse::().ok()?, b.trim().parse::().ok()?)) + }) { let gcd = gcd(a, b); format!("{}/{}", a / gcd, b / gcd) } else { @@ -83,7 +81,8 @@ impl ExtractStaticStyle { } } - /// create a new ExtractStaticStyle with layer + /// create a new `ExtractStaticStyle` with layer + #[must_use] pub fn new_with_layer( property: &str, value: &str, @@ -96,6 +95,7 @@ impl ExtractStaticStyle { style } + #[must_use] pub fn new_basic( property: &str, value: &str, @@ -117,37 +117,45 @@ impl ExtractStaticStyle { } } - pub fn with_theme_token_resolution(mut self, resolution: ThemeTokenResolution) -> Self { + #[must_use] + pub const fn with_theme_token_resolution(mut self, resolution: ThemeTokenResolution) -> Self { self.theme_token_resolution = resolution; self } /// Get the layer name + #[must_use] pub fn layer(&self) -> Option<&str> { self.layer.as_deref() } - pub fn property(&self) -> &str { + #[must_use] + pub const fn property(&self) -> &str { self.property.as_str() } - pub fn value(&self) -> &str { + #[must_use] + pub const fn value(&self) -> &str { self.value.as_str() } - pub fn level(&self) -> u8 { + #[must_use] + pub const fn level(&self) -> u8 { self.level } - pub fn selector(&self) -> Option<&StyleSelector> { + #[must_use] + pub const fn selector(&self) -> Option<&StyleSelector> { self.selector.as_ref() } - pub fn style_order(&self) -> Option { + #[must_use] + pub const fn style_order(&self) -> Option { self.style_order } - pub fn theme_token_resolution(&self) -> ThemeTokenResolution { + #[must_use] + pub const fn theme_token_resolution(&self) -> ThemeTokenResolution { self.theme_token_resolution } } @@ -156,7 +164,7 @@ impl ExtractStyleProperty for ExtractStaticStyle { fn extract(&self, filename: Option<&str>) -> StyleProperty { let s = self.selector.clone().map(|s| s.to_string()); let v = optimize_value(&if MAINTAIN_VALUE_PROPERTIES.contains(&self.property) { - self.value.to_string() + self.value.clone() } else { convert_value(&self.value) }); diff --git a/libs/extractor/src/extract_style/extract_style_value.rs b/libs/extractor/src/extract_style/extract_style_value.rs index fe86f5b5..86dab615 100644 --- a/libs/extractor/src/extract_style/extract_style_value.rs +++ b/libs/extractor/src/extract_style/extract_style_value.rs @@ -17,20 +17,24 @@ pub enum ExtractStyleValue { } impl ExtractStyleValue { + #[must_use] pub fn extract(&self, filename: Option<&str>) -> Option { match self { ExtractStyleValue::Static(style) => Some(style.extract(filename)), ExtractStyleValue::Dynamic(style) => Some(style.extract(filename)), ExtractStyleValue::Keyframes(keyframes) => Some(keyframes.extract(filename)), ExtractStyleValue::Typography(typo) => { - Some(StyleProperty::ClassName(format!("typo-{typo}"))) + let mut class_name = String::with_capacity("typo-".len() + typo.len()); + class_name.push_str("typo-"); + class_name.push_str(typo); + Some(StyleProperty::ClassName(class_name)) } ExtractStyleValue::Css(_) | ExtractStyleValue::Import(_) | ExtractStyleValue::FontFace(_) => None, } } - pub fn set_style_order(&mut self, order: u8) { + pub const fn set_style_order(&mut self, order: u8) { match self { ExtractStyleValue::Static(style) if style.style_order.is_none() => { style.style_order = Some(order); @@ -84,14 +88,14 @@ mod tests { assert!(matches!(extracted, Some(StyleProperty::ClassName(_)))); let value = ExtractStyleValue::Css(ExtractCss { - css: "".to_string(), - file: "".to_string(), + css: String::new(), + file: String::new(), }); assert!(value.extract(None).is_none()); let value = ExtractStyleValue::Import(ExtractImport { - url: "".to_string(), - file: "".to_string(), + url: String::new(), + file: String::new(), }); assert!(value.extract(None).is_none()); } diff --git a/libs/extractor/src/extractor/extract_global_style_from_expression.rs b/libs/extractor/src/extractor/extract_global_style_from_expression.rs index 3186e876..50829e6d 100644 --- a/libs/extractor/src/extractor/extract_global_style_from_expression.rs +++ b/libs/extractor/src/extractor/extract_global_style_from_expression.rs @@ -31,17 +31,17 @@ pub fn extract_global_style_from_expression<'a>( let mut styles = vec![]; if let Expression::ObjectExpression(obj) = expression { - for p in obj.properties.iter_mut() { + for p in &mut obj.properties { match p { ObjectPropertyKind::ObjectProperty(o) => { if let Some(name) = get_string_by_property_key(&o.key) { if name == "imports" { if let Expression::ArrayExpression(arr) = &o.value { - for p in arr.elements.iter() { + for p in &arr.elements { if let Expression::ObjectExpression(obj) = p.to_expression() { let mut url = None; let mut query = None; - for p in obj.properties.iter() { + for p in &obj.properties { if let ObjectPropertyKind::ObjectProperty(o) = p && let Some(ident) = o.key.as_expression() && let Some(ident) = @@ -64,7 +64,7 @@ pub fn extract_global_style_from_expression<'a>( if let Some(query) = query { format!(" {query}") } else { - "".to_string() + String::new() } ), file: file.to_string(), @@ -88,7 +88,7 @@ pub fn extract_global_style_from_expression<'a>( } } else if name == "fontFaces" { if let Expression::ArrayExpression(arr) = &o.value { - for p in arr.elements.iter() { + for p in &arr.elements { if let ArrayExpressionElement::ObjectExpression(o) = p { styles.push(ExtractStyleProp::Static(ExtractStyleValue::FontFace(ExtractFontFace { properties: BTreeMap::from_iter( @@ -147,12 +147,13 @@ pub fn extract_global_style_from_expression<'a>( } else { // Handle @layer property in globalStyle // Extract the layer name if present in the style object - let mut layer_name: Option = None; - if let Expression::ObjectExpression(style_obj) = &o.value + let layer_name = if let Expression::ObjectExpression(style_obj) = &o.value && let Some(ObjectPropertyKind::ObjectProperty(sp)) = style_obj.properties.iter().find(|style_prop| matches!(style_prop, ObjectPropertyKind::ObjectProperty(s) if get_string_by_property_key(&s.key) == Some("@layer".to_string()))) { - layer_name = get_string_by_literal_expression(&sp.value); - } + get_string_by_literal_expression(&sp.value) + } else { + None + }; let extracted = extract_style_from_expression( ast_builder, @@ -161,9 +162,9 @@ pub fn extract_global_style_from_expression<'a>( 0, &Some(StyleSelector::Global( if let Some(name) = name.strip_prefix("_") { - StyleSelector::from(name).to_string().replace("&", "*") + StyleSelector::from(name).to_string().replace('&', "*") } else { - name.to_string() + name.clone() }, file.to_string(), )), diff --git a/libs/extractor/src/extractor/extract_keyframes_from_expression.rs b/libs/extractor/src/extractor/extract_keyframes_from_expression.rs index a13900ce..3643f9a0 100644 --- a/libs/extractor/src/extractor/extract_keyframes_from_expression.rs +++ b/libs/extractor/src/extractor/extract_keyframes_from_expression.rs @@ -19,7 +19,7 @@ pub fn extract_keyframes_from_expression<'a>( let mut keyframes = ExtractKeyframes::default(); if let Expression::ObjectExpression(obj) = expression { - for p in obj.properties.iter_mut() { + for p in &mut obj.properties { if let ObjectPropertyKind::ObjectProperty(o) = p && let Some(name) = get_string_by_property_key(&o.key) { diff --git a/libs/extractor/src/extractor/extract_style_from_expression.rs b/libs/extractor/src/extractor/extract_style_from_expression.rs index 7fed9b6e..10246dda 100644 --- a/libs/extractor/src/extractor/extract_style_from_expression.rs +++ b/libs/extractor/src/extractor/extract_style_from_expression.rs @@ -90,7 +90,7 @@ pub fn extract_style_from_expression<'a>( if let Some(name) = get_string_by_property_key(&prop.key) && !is_special_property(&name) { - let property_name = name.to_string(); + let property_name = name.clone(); for name in disassemble_property(&property_name) { if &property_name == "styleOrder" { style_order = get_number_by_literal_expression(&prop.value) @@ -208,9 +208,12 @@ pub fn extract_style_from_expression<'a>( && let Expression::ObjectExpression(obj) = expression { let mut props = vec![]; - for p in obj.properties.iter_mut() { + for p in &mut obj.properties { if let ObjectPropertyKind::ObjectProperty(o) = p { - let key_name = o.key.name().unwrap().to_string(); + let Some(key_name) = o.key.name() else { + continue; + }; + let key_name = key_name.to_string(); let name = key_name.trim(); let mut part_of_selector = vec![]; @@ -234,7 +237,7 @@ pub fn extract_style_from_expression<'a>( for sel in part_of_selector.iter().map(|name| { if let Some(selector) = selector { - if name.starts_with("_") { + if name.starts_with('_') { if name.starts_with("_theme") { StyleSelector::from([ to_kebab_case(name.strip_prefix("_").unwrap_or(name)) @@ -251,9 +254,9 @@ pub fn extract_style_from_expression<'a>( .to_string() } } else { - name.replace("&", &selector.to_string()) + name.replace('&', &selector.to_string()) } - } else if name.starts_with("_") { + } else if name.starts_with('_') { StyleSelector::from( to_kebab_case(name.strip_prefix("_").unwrap_or(name)).as_str(), ) @@ -292,14 +295,14 @@ pub fn extract_style_from_expression<'a>( && let Expression::ObjectExpression(obj) = expression { let mut props = vec![]; - for p in obj.properties.iter_mut() { + for p in &mut obj.properties { if let ObjectPropertyKind::ObjectProperty(o) = p && let Some(query) = get_string_by_property_key(&o.key) { let at_selector = StyleSelector::At { kind: at_rule.into(), - query: query.to_string(), - selector: selector.as_ref().map(|s| s.to_string()), + query: query.clone(), + selector: selector.as_ref().map(ToString::to_string), }; props.extend( extract_style_from_expression( @@ -341,37 +344,19 @@ pub fn extract_style_from_expression<'a>( ExtractResult { styles: if typo { vec![ExtractStyleProp::Static(ExtractStyleValue::Typography( - value.to_string(), + value.clone(), ))] - } else { - if matches!( - literal_handling, - LiteralHandling::ExpandResponsiveThemeToken - ) { - if let Some(levels) = get_responsive_theme_token(&value) { - create_static_styles( - name, - &value, - &levels, - selector, - ThemeTokenResolution::CssVariable, - ) - } else { - create_static_styles( - name, - &value, - &[level], - selector, - ThemeTokenResolution::CssVariable, - ) - } - } else if get_responsive_theme_token(&value).is_some() { + } else if matches!( + literal_handling, + LiteralHandling::ExpandResponsiveThemeToken + ) { + if let Some(levels) = get_responsive_theme_token(&value) { create_static_styles( name, &value, - &[level], + &levels, selector, - ThemeTokenResolution::FirstValue, + ThemeTokenResolution::CssVariable, ) } else { create_static_styles( @@ -382,6 +367,22 @@ pub fn extract_style_from_expression<'a>( ThemeTokenResolution::CssVariable, ) } + } else if get_responsive_theme_token(&value).is_some() { + create_static_styles( + name, + &value, + &[level], + selector, + ThemeTokenResolution::FirstValue, + ) + } else { + create_static_styles( + name, + &value, + &[level], + selector, + ThemeTokenResolution::CssVariable, + ) }, ..ExtractResult::default() } @@ -707,7 +708,7 @@ pub fn extract_style_from_expression<'a>( let mut props = vec![]; let params = obj.properties.iter().find_map(|p| { if let ObjectPropertyKind::ObjectProperty(o) = p - && o.key.name().unwrap() == "params" + && o.key.name().is_some_and(|name| name == "params") && selector.is_some() && let Expression::ArrayExpression(array) = &o.value { @@ -736,11 +737,12 @@ pub fn extract_style_from_expression<'a>( } }); - for p in obj.properties.iter_mut() { + for p in &mut obj.properties { if let ObjectPropertyKind::ObjectProperty(o) = p - && o.key.name().unwrap() != "params" + && let Some(key_name) = o.key.name() + && key_name != "params" { - for name in disassemble_property(&o.key.name().unwrap()) { + for name in disassemble_property(&key_name) { props.extend( extract_style_from_expression( ast_builder, diff --git a/libs/extractor/src/extractor/extract_style_from_member_expression.rs b/libs/extractor/src/extractor/extract_style_from_member_expression.rs index 0bbf5080..1bb9876a 100644 --- a/libs/extractor/src/extractor/extract_style_from_member_expression.rs +++ b/libs/extractor/src/extractor/extract_style_from_member_expression.rs @@ -49,10 +49,11 @@ pub(super) fn extract_style_from_member_expression<'a>( return ExtractResult::default(); } let mut etc = None; + let selected_index = (num.fract() == 0.0).then_some(num as usize); for (idx, p) in array.elements.iter_mut().enumerate() { if let ArrayExpressionElement::SpreadElement(sp) = p { etc = Some(sp.argument.clone_in(ast_builder.allocator)); - } else if idx as f64 == num + } else if Some(idx) == selected_index && let Some(p) = p.as_expression_mut() { return extract_style_from_expression( @@ -147,7 +148,7 @@ pub(super) fn extract_style_from_member_expression<'a>( let mut map = BTreeMap::new(); if let Some(k) = get_string_by_literal_expression(mem_expression) { let mut etc = None; - for p in obj.properties.iter_mut() { + for p in &mut obj.properties { if let ObjectPropertyKind::ObjectProperty(o) = p { if let Some(property_name) = get_string_by_property_key(&o.key) && property_name == k @@ -191,7 +192,7 @@ pub(super) fn extract_style_from_member_expression<'a>( } } - for p in obj.properties.iter_mut() { + for p in &mut obj.properties { if let ObjectPropertyKind::ObjectProperty(o) = p && let Some(property_name) = get_string_by_property_key(&o.key) { @@ -231,7 +232,7 @@ pub(super) fn extract_style_from_member_expression<'a>( )), level, selector, - )) + )); } ExtractResult { diff --git a/libs/extractor/src/extractor/extract_style_from_styled.rs b/libs/extractor/src/extractor/extract_style_from_styled.rs index 53dba85e..93806262 100644 --- a/libs/extractor/src/extractor/extract_style_from_styled.rs +++ b/libs/extractor/src/extractor/extract_style_from_styled.rs @@ -20,8 +20,8 @@ use oxc_ast::{ }; use oxc_span::SPAN; -fn extract_base_tag_and_class_name<'a>( - input: &Expression<'a>, +fn extract_base_tag_and_class_name( + input: &Expression<'_>, imports: &FxHashMap, ) -> (Option, Option>) { if let Expression::StaticMemberExpression(member) = input { @@ -154,8 +154,8 @@ pub fn extract_style_from_styled<'a>( (None, None) }; ( - result.unwrap_or(ExtractResult::default()), - new_expr.unwrap_or(expression.clone_in(ast_builder.allocator)), + result.unwrap_or_else(ExtractResult::default), + new_expr.unwrap_or_else(|| expression.clone_in(ast_builder.allocator)), ) } @@ -246,27 +246,33 @@ fn create_styled_component<'a>( SPAN, class_name .as_ref() - .map(|name| { - wrap_array_filter( - ast_builder, - &[ - name.clone_in( - ast_builder.allocator, - ), - ast_builder.expression_identifier( - SPAN, - ast_builder.str("className"), - ), - ], - ) - .unwrap() - }) - .unwrap_or_else(|| { - ast_builder.expression_identifier( - SPAN, - ast_builder.str("className"), - ) - }) + .map_or_else( + || { + ast_builder.expression_identifier( + SPAN, + ast_builder.str("className"), + ) + }, + |name| { + wrap_array_filter( + ast_builder, + &[ + name.clone_in( + ast_builder.allocator, + ), + ast_builder + .expression_identifier( + SPAN, + ast_builder + .str("className"), + ), + ], + ) + .unwrap_or_else(|| { + name.clone_in(ast_builder.allocator) + }) + }, + ) .into(), ), ), @@ -282,27 +288,34 @@ fn create_styled_component<'a>( SPAN, style_vars .as_ref() - .map(|style_vars| { - merge_object_expressions( - ast_builder, - &[ - style_vars.clone_in( - ast_builder.allocator, - ), - ast_builder.expression_identifier( - SPAN, - ast_builder.str("style"), - ), - ], - ) - .unwrap() - }) - .unwrap_or_else(|| { - ast_builder.expression_identifier( - SPAN, - ast_builder.str("style"), - ) - }) + .map_or_else( + || { + ast_builder.expression_identifier( + SPAN, + ast_builder.str("style"), + ) + }, + |style_vars| { + merge_object_expressions( + ast_builder, + &[ + style_vars.clone_in( + ast_builder.allocator, + ), + ast_builder + .expression_identifier( + SPAN, + ast_builder + .str("style"), + ), + ], + ) + .unwrap_or_else(|| { + style_vars + .clone_in(ast_builder.allocator) + }) + }, + ) .into(), ), ), diff --git a/libs/extractor/src/extractor/extract_style_from_stylex.rs b/libs/extractor/src/extractor/extract_style_from_stylex.rs index 032f19f4..af9149b4 100644 --- a/libs/extractor/src/extractor/extract_style_from_stylex.rs +++ b/libs/extractor/src/extractor/extract_style_from_stylex.rs @@ -15,7 +15,28 @@ use rustc_hash::FxHashMap; use crate::utils::get_string_by_property_key; -/// Extract styles from a `stylex.create()` call's argument (ObjectExpression). +const SHORTHAND_PROPERTIES: &[&str] = &[ + "margin", + "padding", + "background", + "border", + "font", + "outline", + "overflow", + "flex", + "grid", + "gap", + "border-radius", + "border-color", + "border-style", + "border-width", + "margin-inline", + "margin-block", + "padding-inline", + "padding-block", +]; + +/// Extract styles from a `stylex.create()` call's argument (`ObjectExpression`). /// /// Handles static string/number values (Phase 1) and value-level conditions (Phase 2). /// @@ -38,7 +59,7 @@ pub fn extract_stylex_namespace_styles<'a>( let mut result = vec![]; - for prop in obj.properties.iter() { + for prop in &obj.properties { let ObjectPropertyKind::ObjectProperty(prop) = prop else { // Phase 4c: Spread not supported at namespace level if matches!(prop, ObjectPropertyKind::SpreadProperty(_)) { @@ -80,7 +101,7 @@ pub fn extract_stylex_namespace_styles<'a>( let mut styles = vec![]; let mut include_refs = vec![]; - for style_prop in ns_obj.properties.iter() { + for style_prop in &ns_obj.properties { let ObjectPropertyKind::ObjectProperty(style_prop) = style_prop else { // Check for stylex.include() spread if let ObjectPropertyKind::SpreadProperty(spread) = style_prop @@ -121,7 +142,7 @@ pub fn extract_stylex_namespace_styles<'a>( let Expression::ObjectExpression(inner_obj) = &style_prop.value else { continue; }; - for inner_prop in inner_obj.properties.iter() { + for inner_prop in &inner_obj.properties { let ObjectPropertyKind::ObjectProperty(inner_prop) = inner_prop else { continue; }; @@ -155,31 +176,9 @@ pub fn extract_stylex_namespace_styles<'a>( let css_property = normalize_stylex_property(&prop_name); - // Phase 4c: Warn about CSS shorthand properties - const SHORTHAND_PROPERTIES: &[&str] = &[ - "margin", - "padding", - "background", - "border", - "font", - "outline", - "overflow", - "flex", - "grid", - "gap", - "border-radius", - "border-color", - "border-style", - "border-width", - "margin-inline", - "margin-block", - "padding-inline", - "padding-block", - ]; if SHORTHAND_PROPERTIES.contains(&css_property.as_str()) { eprintln!( - "[stylex] WARNING: Shorthand property '{}' may cause unexpected specificity issues. Consider using longhand properties (e.g., 'marginTop', 'paddingLeft').", - css_property + "[stylex] WARNING: Shorthand property '{css_property}' may cause unexpected specificity issues. Consider using longhand properties (e.g., 'marginTop', 'paddingLeft')." ); } @@ -272,8 +271,7 @@ pub fn extract_stylex_namespace_styles<'a>( // Phase 4c: Non-static values in create() are not supported if !matches!(&style_prop.value, Expression::NullLiteral(_)) { eprintln!( - "[stylex] ERROR: Non-static value for property '{}' in stylex.create(). Only string literals, numbers, null, objects (conditions), firstThatWorks(), types.*(), and arrow functions are allowed.", - prop_name + "[stylex] ERROR: Non-static value for property '{prop_name}' in stylex.create(). Only string literals, numbers, null, objects (conditions), firstThatWorks(), types.*(), and arrow functions are allowed." ); } continue; @@ -300,8 +298,8 @@ pub fn extract_stylex_namespace_styles<'a>( result } -/// Extract styles from a dynamic StyleX namespace (arrow function). -/// Returns (styles_for_css, css_vars) where css_vars maps param_index to CSS variable name. +/// Extract styles from a dynamic `StyleX` namespace (arrow function). +/// Returns (`styles_for_css`, `css_vars`) where `css_vars` maps `param_index` to CSS variable name. #[allow(clippy::type_complexity)] fn extract_stylex_dynamic_namespace<'a>( arrow: &oxc_ast::ast::ArrowFunctionExpression<'a>, @@ -351,7 +349,7 @@ fn extract_stylex_dynamic_namespace<'a>( let mut styles = vec![]; let mut css_vars = vec![]; - for prop in body_obj.properties.iter() { + for prop in &body_obj.properties { let ObjectPropertyKind::ObjectProperty(prop) = prop else { continue; }; diff --git a/libs/extractor/src/gen_class_name.rs b/libs/extractor/src/gen_class_name.rs index 3583cd80..ff40f03f 100644 --- a/libs/extractor/src/gen_class_name.rs +++ b/libs/extractor/src/gen_class_name.rs @@ -18,8 +18,7 @@ pub fn gen_class_names<'a>( style_props .iter_mut() .filter_map(|st| gen_class_name(ast_builder, st, style_order, filename)) - .rev() - .collect(), + .rev(), ) } @@ -31,27 +30,28 @@ fn gen_class_name<'a>( ) -> Option> { match style_prop { ExtractStyleProp::Enum { map, condition } => { - let properties = map.iter_mut().map(|(key, value)| { - ast_builder.object_property_kind_object_property( - SPAN, - PropertyKind::Init, - PropertyKey::StringLiteral(ast_builder.alloc_string_literal( + let properties = map.iter_mut().filter_map(|(key, value)| { + merge_expression_for_class_name( + ast_builder, + value + .iter_mut() + .filter_map(|v| gen_class_name(ast_builder, v, style_order, filename)), + ) + .map(|class_name| { + ast_builder.object_property_kind_object_property( SPAN, - ast_builder.str(key), - None, - )), - merge_expression_for_class_name( - ast_builder, - value - .iter_mut() - .map(|v| gen_class_name(ast_builder, v, style_order, filename).unwrap()) - .collect::>(), + PropertyKind::Init, + PropertyKey::StringLiteral(ast_builder.alloc_string_literal( + SPAN, + ast_builder.str(key), + None, + )), + class_name, + false, + false, + false, ) - .unwrap(), - false, - false, - false, - ) + }) }); let obj = ast_builder.expression_object( SPAN, @@ -84,8 +84,7 @@ fn gen_class_name<'a>( ExtractStyleProp::StaticArray(res) => merge_expression_for_class_name( ast_builder, res.iter_mut() - .filter_map(|st| gen_class_name(ast_builder, st, style_order, filename)) - .collect(), + .filter_map(|st| gen_class_name(ast_builder, st, style_order, filename)), ), ExtractStyleProp::Conditional { condition, @@ -161,55 +160,61 @@ fn gen_class_name<'a>( pub fn merge_expression_for_class_name<'a>( ast_builder: &AstBuilder<'a>, - expressions: Vec>, + expressions: impl IntoIterator>, ) -> Option> { - let mut class_names = vec![]; let mut unknown_expr = vec![]; + let mut class_name = String::new(); for expr in expressions { if let Expression::StringLiteral(str) = &expr { - class_names.push(str.value.trim().to_string()) + let value = str.value.trim(); + if !value.is_empty() { + if !class_name.is_empty() { + class_name.push(' '); + } + class_name.push_str(value); + } } else { unknown_expr.push(expr); } } - if unknown_expr.is_empty() && class_names.is_empty() { - return None; + if unknown_expr.is_empty() { + if class_name.is_empty() { + return None; + } + return Some(ast_builder.expression_string_literal( + SPAN, + ast_builder.str(&class_name), + None, + )); } - let mut class_name = class_names.join(" "); - if !unknown_expr.is_empty() { - if class_name.is_empty() && unknown_expr.len() == 1 { - Some(unknown_expr.remove(0)) - } else { - let mut qu = oxc_allocator::Vec::new_in(ast_builder.allocator); - for idx in 0..unknown_expr.len() + 1 { - let tail = idx == unknown_expr.len(); - let t = TemplateElementValue { - raw: ast_builder.str(if idx == 0 { - if class_name.is_empty() { - "" - } else { - class_name.push(' '); - class_name.as_str() - } - } else if tail { + if class_name.is_empty() && unknown_expr.len() == 1 { + Some(unknown_expr.remove(0)) + } else { + let mut qu = oxc_allocator::Vec::new_in(ast_builder.allocator); + for idx in 0..=unknown_expr.len() { + let tail = idx == unknown_expr.len(); + let t = TemplateElementValue { + raw: ast_builder.str(if idx == 0 { + if class_name.is_empty() { "" } else { - " " - }), - cooked: None, - }; - qu.push(ast_builder.template_element(SPAN, t, tail, false)); - } - - Some(ast_builder.expression_template_literal( - SPAN, - qu, - oxc_allocator::Vec::from_iter_in(unknown_expr, ast_builder.allocator), - )) + class_name.push(' '); + class_name.as_str() + } + } else if tail { + "" + } else { + " " + }), + cooked: None, + }; + qu.push(ast_builder.template_element(SPAN, t, tail, false)); } - } else if class_name.is_empty() { - None - } else { - Some(ast_builder.expression_string_literal(SPAN, ast_builder.str(&class_name), None)) + + Some(ast_builder.expression_template_literal( + SPAN, + qu, + oxc_allocator::Vec::from_iter_in(unknown_expr, ast_builder.allocator), + )) } } diff --git a/libs/extractor/src/gen_style.rs b/libs/extractor/src/gen_style.rs index ed0561a3..41bcefdd 100644 --- a/libs/extractor/src/gen_style.rs +++ b/libs/extractor/src/gen_style.rs @@ -86,7 +86,7 @@ fn gen_style<'a>( false, false, false, - )) + )); } }); } else if let (Some(c), None) = r { @@ -107,7 +107,7 @@ fn gen_style<'a>( false, false, false, - )) + )); } }); } else if let (Some(c), Some(a)) = r { @@ -116,7 +116,7 @@ fn gen_style<'a>( if collect_c.is_empty() && collect_a.is_empty() { return vec![]; } - for p in collect_c.iter() { + for p in &collect_c { let found = collect_a.iter().any(|q| { let r = matches!((p, q), (ObjectPropertyKind::ObjectProperty(p), ObjectPropertyKind::ObjectProperty(q)) if p.key.name() == q.key.name()); if let ObjectPropertyKind::ObjectProperty(p) = p @@ -140,7 +140,7 @@ fn gen_style<'a>( } } - for q in collect_a.iter() { + for q in &collect_a { let found = collect_c.iter().any(|p| matches!((p, q), (ObjectPropertyKind::ObjectProperty(p), ObjectPropertyKind::ObjectProperty(q)) if p.key.name() == q.key.name())); if !found && let ObjectPropertyKind::ObjectProperty(q) = q { properties.push(ast_builder.object_property_kind_object_property( @@ -157,7 +157,7 @@ fn gen_style<'a>( } } else if let ExtractStyleProp::MemberExpression { map, expression } = style { let mut tmp_map = BTreeMap::>::new(); - for (key, value) in map.iter() { + for (key, value) in map { for style in value.extract() { if let Some(StyleProperty::Variable { variable_name, @@ -168,7 +168,7 @@ fn gen_style<'a>( tmp_map .entry(variable_name) .or_default() - .push((key.to_string(), identifier)); + .push((key.clone(), identifier)); } } } @@ -178,37 +178,29 @@ fn gen_style<'a>( // do not create object expression when property is single ast_builder.expression_identifier(SPAN, ast_builder.str(&value[0].1)) } else { - Expression::ComputedMemberExpression( - ast_builder.alloc_computed_member_expression( + Expression::ComputedMemberExpression(ast_builder.alloc_computed_member_expression( + SPAN, + ast_builder.expression_object( SPAN, - ast_builder.expression_object( - SPAN, - oxc_allocator::Vec::from_iter_in( - value - .into_iter() - .map(|(k, v)| { - ast_builder.object_property_kind_object_property( - SPAN, - PropertyKind::Init, - ast_builder.property_key_static_identifier( - SPAN, - ast_builder.str(&k), - ), - ast_builder - .expression_identifier(SPAN, ast_builder.str(&v)), - false, - false, - false, - ) - }) - .collect::>(), - ast_builder.allocator, - ), + oxc_allocator::Vec::from_iter_in( + value.into_iter().map(|(k, v)| { + ast_builder.object_property_kind_object_property( + SPAN, + PropertyKind::Init, + ast_builder + .property_key_static_identifier(SPAN, ast_builder.str(&k)), + ast_builder.expression_identifier(SPAN, ast_builder.str(&v)), + false, + false, + false, + ) + }), + ast_builder.allocator, ), - expression.clone_in(ast_builder.allocator), - false, ), - ) + expression.clone_in(ast_builder.allocator), + false, + )) }; properties.push(ast_builder.object_property_kind_object_property( SPAN, diff --git a/libs/extractor/src/import_alias_visit.rs b/libs/extractor/src/import_alias_visit.rs index 60fce27b..b3b3f0d8 100644 --- a/libs/extractor/src/import_alias_visit.rs +++ b/libs/extractor/src/import_alias_visit.rs @@ -13,7 +13,6 @@ use oxc_ast::ast::ImportDeclarationSpecifier; use oxc_parser::Parser; use oxc_span::SourceType; use std::collections::HashMap; -use std::fmt::Write; /// Transform source code by rewriting aliased imports to the target package /// @@ -79,7 +78,7 @@ fn generate_transformed_import( ) -> String { let specifiers = match &import_decl.specifiers { Some(specs) => specs, - None => return format!("import '{}';", package), + None => return format!("import '{package}';"), }; match alias { @@ -111,10 +110,10 @@ fn generate_transformed_import( } }) { let local_name = default_spec.local.name.as_str(); - if local_name == named_export { - parts.push_str(named_export); - } else { - write!(parts, "{} as {}", named_export, local_name).unwrap(); + parts.push_str(named_export); + if local_name != named_export { + parts.push_str(" as "); + parts.push_str(local_name); } } @@ -126,15 +125,15 @@ fn generate_transformed_import( } let imported = spec.imported.to_string(); let local = spec.local.name.as_str(); - if imported == local { - parts.push_str(&imported); - } else { - write!(parts, "{} as {}", imported, local).unwrap(); + parts.push_str(&imported); + if imported != local { + parts.push_str(" as "); + parts.push_str(local); } } } - format!("import {{ {} }} from '{}';", parts, package) + format!("import {{ {parts} }} from '{package}';") } ImportAlias::NamedToNamed => { // Just change the source, keep specifiers as-is @@ -164,7 +163,8 @@ fn generate_transformed_import( None } }) { - write!(parts, "default as {}", default_spec.local.name.as_str()).unwrap(); + parts.push_str("default as "); + parts.push_str(default_spec.local.name.as_str()); } // Handle named specifiers @@ -175,15 +175,15 @@ fn generate_transformed_import( } let imported = spec.imported.to_string(); let local = spec.local.name.as_str(); - if imported == local { - parts.push_str(&imported); - } else { - write!(parts, "{} as {}", imported, local).unwrap(); + parts.push_str(&imported); + if imported != local { + parts.push_str(" as "); + parts.push_str(local); } } } - format!("import {{ {} }} from '{}';", parts, package) + format!("import {{ {parts} }} from '{package}';") } } } @@ -236,7 +236,7 @@ mod tests { #[test] fn test_default_to_named_same_name() { assert_snapshot!(transform_import_aliases( - r#"import styled from '@emotion/styled'"#, + r"import styled from '@emotion/styled'", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -246,7 +246,7 @@ mod tests { #[test] fn test_default_to_named_different_name() { assert_snapshot!(transform_import_aliases( - r#"import styledA from '@emotion/styled'"#, + r"import styledA from '@emotion/styled'", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -256,7 +256,7 @@ mod tests { #[test] fn test_named_to_named() { assert_snapshot!(transform_import_aliases( - r#"import { style, globalStyle } from '@vanilla-extract/css'"#, + r"import { style, globalStyle } from '@vanilla-extract/css'", "test.tsx", "@devup-ui/react", &vanilla_extract_alias() @@ -266,7 +266,7 @@ mod tests { #[test] fn test_no_matching_alias() { assert_snapshot!(transform_import_aliases( - r#"import { useState } from 'react'"#, + r"import { useState } from 'react'", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -276,7 +276,7 @@ mod tests { #[test] fn test_empty_aliases() { assert_snapshot!(transform_import_aliases( - r#"import styled from '@emotion/styled'"#, + r"import styled from '@emotion/styled'", "test.tsx", "@devup-ui/react", &HashMap::new() @@ -286,7 +286,7 @@ mod tests { #[test] fn test_styled_components() { assert_snapshot!(transform_import_aliases( - r#"import styled from 'styled-components'"#, + r"import styled from 'styled-components'", "test.tsx", "@devup-ui/react", &styled_components_alias() @@ -296,8 +296,8 @@ mod tests { #[test] fn test_css_ts_file_vanilla_extract() { assert_snapshot!(transform_import_aliases( - r#"import { style } from '@vanilla-extract/css' -export const container = style({ background: 'red' })"#, + r"import { style } from '@vanilla-extract/css' +export const container = style({ background: 'red' })", "styles.css.ts", "@devup-ui/react", &vanilla_extract_alias() @@ -307,9 +307,9 @@ export const container = style({ background: 'red' })"#, #[test] fn test_multiple_imports_same_file() { assert_snapshot!(transform_import_aliases( - r#"import styled from '@emotion/styled' + r"import styled from '@emotion/styled' import { style } from '@vanilla-extract/css' -import { useState } from 'react'"#, +import { useState } from 'react'", "test.tsx", "@devup-ui/react", &combined_aliases() @@ -319,12 +319,12 @@ import { useState } from 'react'"#, #[test] fn test_preserves_code_after_import() { assert_snapshot!(transform_import_aliases( - r#"import { style } from '@vanilla-extract/css' + r"import { style } from '@vanilla-extract/css' export const button = style({ background: 'blue', padding: '8px', -});"#, +});", "test.css.ts", "@devup-ui/react", &vanilla_extract_alias() @@ -334,7 +334,7 @@ export const button = style({ #[test] fn test_named_import_with_alias() { assert_snapshot!(transform_import_aliases( - r#"import { style as myStyle } from '@vanilla-extract/css'"#, + r"import { style as myStyle } from '@vanilla-extract/css'", "test.tsx", "@devup-ui/react", &vanilla_extract_alias() @@ -344,7 +344,7 @@ export const button = style({ #[test] fn test_side_effect_import_no_specifiers() { assert_snapshot!(transform_import_aliases( - r#"import '@emotion/styled'"#, + r"import '@emotion/styled'", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -354,8 +354,8 @@ export const button = style({ #[test] fn test_alias_in_comment_not_transformed() { assert_snapshot!(transform_import_aliases( - r#"// This uses @emotion/styled but doesn't import it -const x = 1;"#, + r"// This uses @emotion/styled but doesn't import it +const x = 1;", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -365,7 +365,7 @@ const x = 1;"#, #[test] fn test_default_to_named_with_additional_named_imports() { assert_snapshot!(transform_import_aliases( - r#"import styled, { css, keyframes } from '@emotion/styled'"#, + r"import styled, { css, keyframes } from '@emotion/styled'", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -375,7 +375,7 @@ const x = 1;"#, #[test] fn test_default_to_named_with_aliased_named_import() { assert_snapshot!(transform_import_aliases( - r#"import styled, { css as emotionCss } from '@emotion/styled'"#, + r"import styled, { css as emotionCss } from '@emotion/styled'", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -385,7 +385,7 @@ const x = 1;"#, #[test] fn test_default_to_named_namespace_import() { assert_snapshot!(transform_import_aliases( - r#"import * as Emotion from '@emotion/styled'"#, + r"import * as Emotion from '@emotion/styled'", "test.tsx", "@devup-ui/react", &emotion_alias() @@ -395,7 +395,7 @@ const x = 1;"#, #[test] fn test_named_to_named_with_default_specifier() { assert_snapshot!(transform_import_aliases( - r#"import vanillaDefault, { style } from '@vanilla-extract/css'"#, + r"import vanillaDefault, { style } from '@vanilla-extract/css'", "test.tsx", "@devup-ui/react", &vanilla_extract_alias() @@ -405,7 +405,7 @@ const x = 1;"#, #[test] fn test_named_to_named_namespace_import() { assert_snapshot!(transform_import_aliases( - r#"import * as VE from '@vanilla-extract/css'"#, + r"import * as VE from '@vanilla-extract/css'", "test.tsx", "@devup-ui/react", &vanilla_extract_alias() diff --git a/libs/extractor/src/lib.rs b/libs/extractor/src/lib.rs index 3113e37a..e38c0c09 100644 --- a/libs/extractor/src/lib.rs +++ b/libs/extractor/src/lib.rs @@ -28,7 +28,7 @@ use std::error::Error; use std::path::PathBuf; /// Import alias configuration for redirecting imports from other CSS-in-JS libraries -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub enum ImportAlias { /// Default export → named export (e.g., `import styled from '@emotion/styled'` → `import { styled } from '@devup-ui/react'`) DefaultToNamed(String), @@ -116,15 +116,15 @@ impl<'a> ExtractStyleProp<'a> { styles } ExtractStyleProp::StaticArray(array) => { - array.iter().flat_map(|s| s.extract()).collect() + array.iter().flat_map(ExtractStyleProp::extract).collect() } - ExtractStyleProp::Expression { styles, .. } => styles.to_vec(), + ExtractStyleProp::Expression { styles, .. } => styles.clone(), ExtractStyleProp::MemberExpression { map, .. } => { map.values().flat_map(|s| s.extract()).collect() } ExtractStyleProp::Enum { map, .. } => map .values() - .flat_map(|s| s.iter().flat_map(|s| s.extract())) + .flat_map(|s| s.iter().flat_map(ExtractStyleProp::extract)) .collect(), } } @@ -216,10 +216,10 @@ pub fn extract( ); // Build class map by extracting the partial code - let class_map = if !partial_code.is_empty() { - extract_class_map_from_code(filename, &partial_code, &option, &referenced)? - } else { + let class_map = if partial_code.is_empty() { FxHashMap::default() + } else { + extract_class_map_from_code(filename, &partial_code, &option, &referenced)? }; // Generate full code with class names substituted into selectors @@ -285,10 +285,10 @@ pub fn extract( filename, &option.package, css_files, - if !option.single_css { - Some(filename.to_string()) - } else { + if option.single_css { None + } else { + Some(filename.to_string()) }, ); visitor.visit_program(&mut program); @@ -341,10 +341,10 @@ fn extract_class_map_from_code( filename, &option.package, css_files, - if !option.single_css { - Some(filename.to_string()) - } else { + if option.single_css { None + } else { + Some(filename.to_string()) }, ); visitor.visit_program(&mut program); @@ -384,6 +384,7 @@ fn extract_class_map_from_code( } /// Check if the code has an import from the specified package +#[must_use] pub fn has_devup_ui(filename: &str, code: &str, package: &str) -> bool { if !code.contains(package) { return false; @@ -415,6 +416,7 @@ pub fn has_devup_ui(filename: &str, code: &str, package: &str) -> bool { } #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use std::collections::BTreeSet; @@ -578,9 +580,9 @@ mod tests { assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -616,9 +618,9 @@ mod tests { assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -749,9 +751,9 @@ mod tests { assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -1181,9 +1183,9 @@ mod tests { assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box as C} from '@devup-ui/core' + r"import {Box as C} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -1243,9 +1245,9 @@ mod tests { assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box as C} from '@devup-ui/core' + r"import {Box as C} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -1262,13 +1264,13 @@ mod tests { assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box as C} from '@devup-ui/core' + r"import {Box as C} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -3049,11 +3051,11 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4002,9 +4004,9 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4063,9 +4065,9 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Text} from '@devup-ui/core' + r"import {Text} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4104,9 +4106,9 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Text} from '@devup-ui/core' + r"import {Text} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4123,9 +4125,9 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Text} from '@devup-ui/core' + r"import {Text} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4142,9 +4144,9 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Text} from '@devup-ui/core' + r"import {Text} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4288,8 +4290,8 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {W} from '@devup-ui/core' - "#, + r"import {W} from '@devup-ui/core' + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4306,9 +4308,9 @@ import clsx from 'clsx' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {W, useTheme} from '@devup-ui/core'; + r"import {W, useTheme} from '@devup-ui/core'; useTheme(); - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4543,9 +4545,9 @@ e(o, { className: "a", bg: variable, style: { color: "blue" }, ...props }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), single_css: true, import_main_css: false, import_aliases: HashMap::new() } ) .unwrap() @@ -4560,9 +4562,9 @@ e(o, { className: "a", bg: variable, style: { color: "blue" }, ...props }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4705,9 +4707,9 @@ e(o, { className: "a", bg: variable, style: { color: "blue" }, ...props }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4724,7 +4726,7 @@ e(o, { className: "a", bg: variable, style: { color: "blue" }, ...props }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import { VStack } from '@devup-ui/core' + r"import { VStack } from '@devup-ui/core' export default function Card({ children, @@ -4745,7 +4747,7 @@ export default function Card({ ) } - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4766,9 +4768,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4785,9 +4787,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4804,9 +4806,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4823,9 +4825,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4924,9 +4926,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4943,9 +4945,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4962,9 +4964,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -4981,9 +4983,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5000,9 +5002,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5019,9 +5021,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5038,9 +5040,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5061,9 +5063,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5099,9 +5101,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5118,9 +5120,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5161,13 +5163,13 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box as DevupButton} from '@devup-ui/core' + r"import {Box as DevupButton} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5207,9 +5209,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5226,9 +5228,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5264,9 +5266,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5283,12 +5285,12 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Center} from '@devup-ui/core' + r"import {Center} from '@devup-ui/core'
- "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5305,9 +5307,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5324,9 +5326,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5347,7 +5349,7 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import { + r"import { Box, Button as DevupButton, Center, @@ -5369,7 +5371,7 @@ export default function Card({ }[(!!icon).toString()] } /> -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5470,9 +5472,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5488,9 +5490,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5511,9 +5513,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' ; - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5575,9 +5577,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' ; - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5594,9 +5596,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' ; - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5616,9 +5618,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' ; - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5635,9 +5637,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' ; - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5658,9 +5660,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' ; - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5681,9 +5683,9 @@ export default function Card({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Flex} from '@devup-ui/core' + r"import {Flex} from '@devup-ui/core' ; - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5731,9 +5733,9 @@ PROCESS_DATA.map(({ id, title, content }, idx) => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5750,9 +5752,9 @@ PROCESS_DATA.map(({ id, title, content }, idx) => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5844,12 +5846,12 @@ import {Button} from '@devup/ui' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {css} from '@devup-ui/core' + r"import {css} from '@devup-ui/core'
- "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5969,9 +5971,9 @@ import {Button} from '@devup/ui' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -5988,9 +5990,9 @@ import {Button} from '@devup/ui' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -6007,9 +6009,9 @@ import {Button} from '@devup/ui' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -6026,9 +6028,9 @@ import {Button} from '@devup/ui' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -6202,6 +6204,27 @@ import {Button} from '@devup/ui' ) .unwrap() )); + + // Computed selector key whose `key.name()` is None must be skipped. + // Mixed with a valid selector to ensure extraction still proceeds. + reset_class_map(); + reset_file_map(); + assert_debug_snapshot!(ToBTreeSet::from( + extract( + "test.jsx", + r#"import {Box} from '@devup-ui/core' + + "#, + ExtractOption { + package: "@devup-ui/core".to_string(), + css_dir: "@devup-ui/core".to_string(), + single_css: true, + import_main_css: false, + import_aliases: HashMap::new() + } + ) + .unwrap() + )); } #[test] @@ -6583,9 +6606,9 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -6603,9 +6626,9 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Text} from '@devup-ui/core' + r"import {Text} from '@devup-ui/core' -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -6644,9 +6667,9 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -6956,11 +6979,11 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -7085,9 +7108,9 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -7104,9 +7127,9 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -7127,9 +7150,9 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.jsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -8759,9 +8782,9 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -8844,9 +8867,9 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -8969,11 +8992,11 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9119,12 +9142,12 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const StyledDiv = styled.section` background: red; color: blue; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9229,12 +9252,12 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled, Text} from '@devup-ui/core' + r"import {styled, Text} from '@devup-ui/core' const StyledComponent = styled(Text)` background: red; color: blue; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9272,12 +9295,12 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled, VStack} from '@devup-ui/core' + r"import {styled, VStack} from '@devup-ui/core' const StyledComponent = styled(VStack)` background: red; color: blue; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9315,12 +9338,12 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const StyledComponent = styled(CustomComponent)` background: red; color: blue; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9405,12 +9428,12 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const StyledDiv = styled.div` background: var(--text); color: var(--primary); ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9478,13 +9501,13 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const color = 'red'; const StyledDiv = styled.div` color: ${color}; background: blue; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9550,11 +9573,11 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const primaryColor = 'blue'; const padding = '16px'; const StyledDiv = styled.div({ bg: primaryColor, padding }) - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9616,9 +9639,9 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const StyledDiv = styled.div({ bg: obj.bg, padding: func(), color: obj.color() }) - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9641,12 +9664,12 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const StyledDiv = styled.div` background: ${props => props.bg}; color: red; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9665,13 +9688,13 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled, Box} from '@devup-ui/core' + r"import {styled, Box} from '@devup-ui/core' const fontSize = '18px'; const StyledComponent = styled(Box)` font-size: ${fontSize}; color: ${props => props.color || 'black'}; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9690,7 +9713,7 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const margin = '10px'; const padding = '20px'; const StyledDiv = styled.div` @@ -9698,7 +9721,7 @@ keyframes({ padding: ${padding}; background: ${props => props.bg || 'white'}; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9717,13 +9740,13 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const isActive = true; const StyledDiv = styled.div` color: ${isActive ? 'red' : 'blue'}; opacity: ${isActive ? 1 : 0.5}; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9745,12 +9768,12 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {styled} from '@devup-ui/core' + r"import {styled} from '@devup-ui/core' const StyledDiv = styled(null)` background: ${props => props.bg}; color: red; ` - "#, + ", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9854,7 +9877,7 @@ keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r###"import {Box} from '@devup-ui/core' + r##"import {Box} from '@devup-ui/core' - "###, + "##, ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -9995,9 +10018,9 @@ const StyledDiv = styled.div({ ...baseStyles }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {css} from '@devup-ui/core' + r"import {css} from '@devup-ui/core' const className = css() -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -10019,9 +10042,9 @@ const className = css() assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {css} from '@devup-ui/core' + r"import {css} from '@devup-ui/core' const className = css({}) -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -10070,11 +10093,11 @@ const spin = keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {globalCss} from '@devup-ui/core' + r"import {globalCss} from '@devup-ui/core' globalCss({ body: { margin: 0, padding: 0 } }) -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -10232,9 +10255,9 @@ globalCss({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -10332,10 +10355,10 @@ const Component = ({ className }) => { assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {css} from '@devup-ui/core' + r"import {css} from '@devup-ui/core' const size = 16; const className = css({ fontSize: `${size}px` }) -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -10459,9 +10482,9 @@ const color = "red"; assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {keyframes} from '@devup-ui/core' + r"import {keyframes} from '@devup-ui/core' const spin = keyframes() -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -10483,9 +10506,9 @@ const spin = keyframes() assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {globalCss} from '@devup-ui/core' + r"import {globalCss} from '@devup-ui/core' globalCss() -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -11243,7 +11266,7 @@ export const link = style({ color: "blue", textDecoration: "underline" }) assert_debug_snapshot!(ToBTreeSet::from( extract( "styles.css.ts", - r#"import { style } from '@vanilla-extract/css' + r"import { style } from '@vanilla-extract/css' export const hello = style({ cursor: 'pointer', fontSize: 32, @@ -11253,7 +11276,7 @@ export const hello = style({ export const text = style({ color: 'var(--text)', }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11301,10 +11324,10 @@ export const button = style({ background: primaryColor, padding: spacing }) assert_debug_snapshot!(ToBTreeSet::from( extract( "computed.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' const base = 8; export const box = style({ padding: base * 2, margin: base / 2 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11375,9 +11398,9 @@ export const hoverButton = style({ background: "gray", _hover: { background: "bl assert_debug_snapshot!(ToBTreeSet::from( extract( "responsive.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const responsiveBox = style({ padding: [8, 16, 32] }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11444,7 +11467,7 @@ globalStyle("body", { margin: 0, padding: 0 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "vars.css.ts", - r#"import { createVar, style } from '@devup-ui/react' + r"import { createVar, style } from '@devup-ui/react' export const colorVar = createVar() export const box = style({ vars: { @@ -11452,7 +11475,7 @@ export const box = style({ }, color: colorVar }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11470,12 +11493,12 @@ export const box = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "fallback.css.ts", - r#"import { createVar, fallbackVar, style } from '@devup-ui/react' + r"import { createVar, fallbackVar, style } from '@devup-ui/react' export const colorVar = createVar() export const box = style({ color: fallbackVar(colorVar, 'red') }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11497,13 +11520,13 @@ export const box = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "variants.css.ts", - r#"import { styleVariants } from '@devup-ui/react' + r"import { styleVariants } from '@devup-ui/react' export const background = styleVariants({ primary: { background: 'blue' }, secondary: { background: 'gray' }, danger: { background: 'red' } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11521,13 +11544,13 @@ export const background = styleVariants({ assert_debug_snapshot!(ToBTreeSet::from( extract( "variants-composed.css.ts", - r#"import { style, styleVariants } from '@devup-ui/react' + r"import { style, styleVariants } from '@devup-ui/react' const base = style({ padding: 12, borderRadius: 4 }) export const button = styleVariants({ primary: [base, { background: 'blue', color: 'white' }], secondary: [base, { background: 'gray', color: 'black' }] }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11607,7 +11630,7 @@ export const body = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "theme.css.ts", - r#"import { createTheme, style } from '@devup-ui/react' + r"import { createTheme, style } from '@devup-ui/react' export const [themeClass, vars] = createTheme({ color: { brand: 'blue', @@ -11623,7 +11646,7 @@ export const box = style({ color: vars.color.text, padding: vars.space.medium }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11642,7 +11665,7 @@ export const box = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-contract.css.ts", - r#"import { createThemeContract, createTheme, style } from '@devup-ui/react' + r"import { createThemeContract, createTheme, style } from '@devup-ui/react' const vars = createThemeContract({ color: { brand: null, @@ -11661,7 +11684,7 @@ export const darkTheme = createTheme(vars, { text: 'white' } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11684,7 +11707,7 @@ export const darkTheme = createTheme(vars, { assert_debug_snapshot!(ToBTreeSet::from( extract( "layers.css.ts", - r#"import { layer, style, globalStyle } from '@devup-ui/react' + r"import { layer, style, globalStyle } from '@devup-ui/react' export const reset = layer('reset') export const base = layer('base') export const components = layer('components') @@ -11693,7 +11716,7 @@ globalStyle('*', { margin: 0, padding: 0 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11715,7 +11738,7 @@ globalStyle('*', { assert_debug_snapshot!(ToBTreeSet::from( extract( "container.css.ts", - r#"import { createContainer, style } from '@devup-ui/react' + r"import { createContainer, style } from '@devup-ui/react' export const sidebar = createContainer() export const sidebarContainer = style({ containerName: sidebar, @@ -11728,7 +11751,7 @@ export const responsive = style({ } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11750,7 +11773,7 @@ export const responsive = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "global-theme.css.ts", - r#"import { createGlobalTheme } from '@devup-ui/react' + r"import { createGlobalTheme } from '@devup-ui/react' export const vars = createGlobalTheme(':root', { color: { brand: 'blue', @@ -11761,7 +11784,7 @@ export const vars = createGlobalTheme(':root', { body: 'system-ui, sans-serif' } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11783,7 +11806,7 @@ export const vars = createGlobalTheme(':root', { assert_debug_snapshot!(ToBTreeSet::from( extract( "composition.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' const base = style({ padding: 12, borderRadius: 4 @@ -11796,7 +11819,7 @@ export const button = style([base, interactive, { background: 'blue', color: 'white' }]) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11818,7 +11841,7 @@ export const button = style([base, interactive, { assert_debug_snapshot!(ToBTreeSet::from( extract( "selectors.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const button = style({ background: 'blue', selectors: { @@ -11837,7 +11860,7 @@ export const button = style({ } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11855,7 +11878,7 @@ export const button = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "selectors-complex.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const parent = style({ background: 'white' }) @@ -11869,7 +11892,7 @@ export const child = style({ } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11891,7 +11914,7 @@ export const child = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "media.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const responsive = style({ display: 'block', '@media': { @@ -11907,7 +11930,7 @@ export const responsive = style({ } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -11929,7 +11952,7 @@ export const responsive = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "supports.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const grid = style({ display: 'flex', '@supports': { @@ -11938,7 +11961,7 @@ export const grid = style({ } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12150,10 +12173,10 @@ export const broken = style((() => { throw new Error("fail"); })()) // File with no style() calls let result = extract( "empty.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' // No actual style calls, just comments const unused = 1; -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12175,11 +12198,11 @@ const unused = 1; assert_debug_snapshot!(ToBTreeSet::from( extract( "constants.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const SPACING = 8; export const COLORS = { primary: 'blue', secondary: 'green' }; export const box = style({ padding: SPACING }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12202,7 +12225,7 @@ export const box = style({ padding: SPACING }) assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-vars.css.ts", - r#"import { createTheme } from '@devup-ui/react' + r"import { createTheme } from '@devup-ui/react' export const [lightTheme, vars] = createTheme({ color: { primary: 'blue', @@ -12213,7 +12236,7 @@ export const [lightTheme, vars] = createTheme({ medium: '8px' } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12236,7 +12259,7 @@ export const [lightTheme, vars] = createTheme({ assert_debug_snapshot!(ToBTreeSet::from( extract( "internal-theme.css.ts", - r#"import { createTheme, style } from '@devup-ui/react' + r"import { createTheme, style } from '@devup-ui/react' const [internalTheme, themeVars] = createTheme({ colors: { bg: 'white', @@ -12246,7 +12269,7 @@ const [internalTheme, themeVars] = createTheme({ export const themed = style({ background: 'red' }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12269,10 +12292,10 @@ export const themed = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "empty-comp.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const empty = style([]) export const withEmpty = style([{}]) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12295,7 +12318,7 @@ export const withEmpty = style([{}]) assert_debug_snapshot!(ToBTreeSet::from( extract( "variants-base.css.ts", - r#"import { style, styleVariants } from '@devup-ui/react' + r"import { style, styleVariants } from '@devup-ui/react' const base = style({ padding: 8, borderRadius: 4 @@ -12305,7 +12328,7 @@ export const sizes = styleVariants({ medium: [base, { fontSize: 16 }], large: [base, { fontSize: 20 }] }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12328,7 +12351,7 @@ export const sizes = styleVariants({ assert_debug_snapshot!(ToBTreeSet::from( extract( "layer-container.css.ts", - r#"import { layer, createContainer, style } from '@devup-ui/react' + r"import { layer, createContainer, style } from '@devup-ui/react' export const resetLayer = layer('reset') export const baseLayer = layer('base') export const myContainer = createContainer() @@ -12336,7 +12359,7 @@ export const containerStyle = style({ containerName: myContainer, containerType: 'inline-size' }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12359,7 +12382,7 @@ export const containerStyle = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "all-imports.css.ts", - r#"import { style, globalStyle, keyframes, createTheme } from '@devup-ui/react' + r"import { style, globalStyle, keyframes, createTheme } from '@devup-ui/react' export const [theme, vars] = createTheme({ color: { primary: 'blue' } }) @@ -12373,7 +12396,7 @@ globalStyle('body', { export const box = style({ animation: 'fadeIn 1s' }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12396,7 +12419,7 @@ export const box = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-two-arg.css.ts", - r#"import { createThemeContract, createTheme } from '@devup-ui/react' + r"import { createThemeContract, createTheme } from '@devup-ui/react' const contract = createThemeContract({ color: { brand: null, @@ -12409,7 +12432,7 @@ export const darkTheme = createTheme(contract, { text: 'lightgray' } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12463,14 +12486,14 @@ export const text = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "vars-only.css.ts", - r#"import { createVar, style, fallbackVar } from '@devup-ui/react' + r"import { createVar, style, fallbackVar } from '@devup-ui/react' export const colorVar = createVar() export const sizeVar = createVar() export const box = style({ color: fallbackVar(colorVar, 'blue'), fontSize: sizeVar }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12493,10 +12516,10 @@ export const box = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "global-theme-empty.css.ts", - r#"import { createGlobalTheme, style } from '@devup-ui/react' + r"import { createGlobalTheme, style } from '@devup-ui/react' export const emptyVars = createGlobalTheme(':root', {}) export const box = style({ padding: 8 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12519,14 +12542,14 @@ export const box = style({ padding: 8 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "mixed-exports.css.ts", - r#"import { style, keyframes, createVar, createContainer, layer } from '@devup-ui/react' + r"import { style, keyframes, createVar, createContainer, layer } from '@devup-ui/react' const internalStyle = style({ padding: 4 }) const internalKeyframe = keyframes({ from: { opacity: 0 }, to: { opacity: 1 } }) const internalVar = createVar() const internalContainer = createContainer() const internalLayer = layer('internal') export const publicStyle = style({ margin: 8 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), single_css: true, import_main_css: false, import_aliases: HashMap::new() } ) .unwrap() @@ -12543,7 +12566,7 @@ export const publicStyle = style({ margin: 8 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "selector-refs.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const parent = style({ background: 'white' }) export const child = style({ selectors: { @@ -12559,7 +12582,7 @@ export const sibling = style({ } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12800,9 +12823,9 @@ globalCss({ // Syntax error in JS execution will trigger fallback let result = extract( "error.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' const x = style({ padding: [[[}}} // invalid syntax -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12832,9 +12855,9 @@ const x = style({ padding: [[[}}} // invalid syntax assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { css } from '@vanilla-extract/css' + r"import { css } from '@vanilla-extract/css' const buttonStyle = css({ bg: 'red', p: 4 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12857,7 +12880,7 @@ const buttonStyle = css({ bg: 'red', p: 4 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "keyframes-export.css.ts", - r#"import { keyframes, style } from '@devup-ui/react' + r"import { keyframes, style } from '@devup-ui/react' export const spin = keyframes({ from: { transform: 'rotate(0deg)' }, to: { transform: 'rotate(360deg)' } @@ -12867,7 +12890,7 @@ const internal = keyframes({ '100%': { opacity: 1 } }) export const spinner = style({ animation: spin }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12890,11 +12913,11 @@ export const spinner = style({ animation: spin }) assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-vars-name.css.ts", - r#"import { createTheme } from '@devup-ui/react' + r"import { createTheme } from '@devup-ui/react' export const myTheme = createTheme({ color: { primary: 'blue' } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12917,14 +12940,14 @@ export const myTheme = createTheme({ assert_debug_snapshot!(ToBTreeSet::from( extract( "variants-mixed.css.ts", - r#"import { style, styleVariants } from '@devup-ui/react' + r"import { style, styleVariants } from '@devup-ui/react' const base = style({ borderRadius: 4, padding: 8 }) export const buttons = styleVariants({ primary: [base, { background: 'blue', color: 'white' }], secondary: { background: 'gray', color: 'black' }, danger: [base, { background: 'red' }] }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12947,7 +12970,7 @@ export const buttons = styleVariants({ assert_debug_snapshot!(ToBTreeSet::from( extract( "global-theme-vars.css.ts", - r#"import { createGlobalTheme, style } from '@devup-ui/react' + r"import { createGlobalTheme, style } from '@devup-ui/react' export const vars = createGlobalTheme(':root', { color: { primary: 'blue', @@ -12959,7 +12982,7 @@ export const vars = createGlobalTheme(':root', { } }) export const box = style({ padding: 8 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -12982,10 +13005,10 @@ export const box = style({ padding: 8 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "fontface-minimal.css.ts", - r#"import { fontFace, style } from '@devup-ui/react' + r"import { fontFace, style } from '@devup-ui/react' export const minimalFont = fontFace({}) export const text = style({ fontFamily: minimalFont }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13008,12 +13031,12 @@ export const text = style({ fontFamily: minimalFont }) assert_debug_snapshot!(ToBTreeSet::from( extract( "imports-combo.css.ts", - r#"import { style, globalStyle, keyframes, fontFace } from '@devup-ui/react' + r"import { style, globalStyle, keyframes, fontFace } from '@devup-ui/react' export const fadeIn = keyframes({ from: { opacity: 0 }, to: { opacity: 1 } }) export const myFont = fontFace({ src: 'local(Arial)' }) globalStyle('body', { margin: 0, fontFamily: myFont }) export const animated = style({ animation: fadeIn }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13036,7 +13059,7 @@ export const animated = style({ animation: fadeIn }) assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-exports.css.ts", - r#"import { createTheme, createThemeContract, style } from '@devup-ui/react' + r"import { createTheme, createThemeContract, style } from '@devup-ui/react' const contract = createThemeContract({ colors: { bg: null, text: null } }) @@ -13047,7 +13070,7 @@ const internalTheme = createTheme(contract, { colors: { bg: 'gray', text: 'darkgray' } }) export const box = style({ padding: 8 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13070,10 +13093,10 @@ export const box = style({ padding: 8 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "multi-comp.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' const base = style({ padding: 8 }) export const complex = style([base, { margin: 4 }, { color: 'blue' }]) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13096,14 +13119,14 @@ export const complex = style([base, { margin: 4 }, { color: 'blue' }]) assert_debug_snapshot!(ToBTreeSet::from( extract( "selector-ref.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const parent = style({ display: 'flex' }) export const child = style({ selectors: { [`${parent}:hover &`]: { background: 'red' } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13127,7 +13150,7 @@ export const child = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "all-combined.css.ts", - r#"import { style, globalStyle, keyframes, createVar, createContainer, layer, fontFace, createGlobalTheme, styleVariants } from '@devup-ui/react' + r"import { style, globalStyle, keyframes, createVar, createContainer, layer, fontFace, createGlobalTheme, styleVariants } from '@devup-ui/react' export const myVar = createVar() export const myContainer = createContainer() export const myLayer = layer('components') @@ -13141,7 +13164,7 @@ export const buttons = styleVariants({ secondary: { bg: 'gray' } }) export const box = style({ fontFamily: myFont }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), single_css: true, import_main_css: false, import_aliases: HashMap::new() } ) .unwrap() @@ -13158,13 +13181,13 @@ export const box = style({ fontFamily: myFont }) assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-array.css.ts", - r#"import { createTheme, style } from '@devup-ui/react' + r"import { createTheme, style } from '@devup-ui/react' export const [themeClass, themeVars] = createTheme({ colors: { primary: 'blue', secondary: 'green' }, spacing: { small: '4px', medium: '8px' } }) export const themed = style({ color: themeVars.colors.primary }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13221,7 +13244,7 @@ export const heading = style({ fontFamily: secondFont }) assert_debug_snapshot!(ToBTreeSet::from( extract( "globaltheme-remap.css.ts", - r#"import { createGlobalTheme, style } from '@devup-ui/react' + r"import { createGlobalTheme, style } from '@devup-ui/react' export const lightVars = createGlobalTheme(':root', { colors: { bg: 'white', text: 'black' } }) @@ -13229,7 +13252,7 @@ export const darkVars = createGlobalTheme('.dark', { colors: { bg: 'black', text: 'white' } }) export const box = style({ padding: 8 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13345,7 +13368,7 @@ globalCss({ assert_debug_snapshot!(ToBTreeSet::from( extract( "refs.css.ts", - r#"import { style, globalStyle, keyframes, createVar, fontFace, createContainer, layer } from '@devup-ui/react' + r"import { style, globalStyle, keyframes, createVar, fontFace, createContainer, layer } from '@devup-ui/react' export const colorVar = createVar() export const myContainer = createContainer() export const myLayer = layer('ui') @@ -13358,7 +13381,7 @@ export const child = style({ } }) globalStyle('body', { margin: 0 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), single_css: true, import_main_css: false, import_aliases: HashMap::new() } ) .unwrap() @@ -13375,7 +13398,7 @@ globalStyle('body', { margin: 0 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-simple.css.ts", - r#"import { createThemeContract, createTheme, style } from '@devup-ui/react' + r"import { createThemeContract, createTheme, style } from '@devup-ui/react' const contract = createThemeContract({ colors: { primary: null } }) @@ -13383,7 +13406,7 @@ export const lightTheme = createTheme(contract, { colors: { primary: 'blue' } }) export const box = style({ padding: 8 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13440,7 +13463,7 @@ globalCss({ assert_debug_snapshot!(ToBTreeSet::from( extract( "theme-refs.css.ts", - r#"import { style, createGlobalTheme } from '@devup-ui/react' + r"import { style, createGlobalTheme } from '@devup-ui/react' export const vars = createGlobalTheme(':root', { colors: { primary: 'blue', secondary: 'green' } }) @@ -13450,7 +13473,7 @@ export const child = style({ [`${parent}:hover &`]: { color: 'red' } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13473,7 +13496,7 @@ export const child = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "container.css.ts", - r#"import { style } from '@devup-ui/react' + r"import { style } from '@devup-ui/react' export const card = style({ containerType: 'inline-size', '@container': { @@ -13483,7 +13506,7 @@ export const card = style({ } } }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13538,9 +13561,9 @@ export const card = style({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import styled from '@emotion/styled' + r"import styled from '@emotion/styled' const Button = styled.button({ bg: 'red', p: 4 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13598,8 +13621,8 @@ const Card = styled("div")({ bg: 'blue', m: 2 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import React from 'react' -const element =
Hello
"#, + r"import React from 'react' +const element =
Hello
", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13627,9 +13650,9 @@ const element =
Hello
"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import myStyled from '@emotion/styled' + r"import myStyled from '@emotion/styled' const Button = myStyled.button({ bg: 'green', p: 2 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13658,9 +13681,9 @@ const Button = myStyled.button({ bg: 'green', p: 2 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import emotionStyled from '@emotion/styled' + r"import emotionStyled from '@emotion/styled' const Button = emotionStyled.button({ bg: 'purple', p: 3 }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13697,9 +13720,9 @@ const Button = emotionStyled.button({ bg: 'purple', p: 3 }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import styled from '@emotion/styled' + r"import styled from '@emotion/styled' const Button = styled.button({ bg: 'red' }) -"#, +", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -13950,11 +13973,11 @@ export const Card = () => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' hello -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -13976,11 +13999,11 @@ export const Card = () => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' hello -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -14002,11 +14025,11 @@ export const Card = () => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' hello -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -14028,11 +14051,11 @@ export const Card = () => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' hello -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -14054,11 +14077,11 @@ export const Card = () => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' hello -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -14080,11 +14103,11 @@ export const Card = () => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' hello -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -14107,11 +14130,11 @@ export const Card = () => ( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import {Box} from '@devup-ui/core' + r"import {Box} from '@devup-ui/core' hello -"#, +", ExtractOption { package: "@devup-ui/core".to_string(), css_dir: "@devup-ui/core".to_string(), @@ -14326,8 +14349,8 @@ export { c as Lib };"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { color: 'red' } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { color: 'red' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14348,8 +14371,8 @@ const styles = stylex.create({ base: { color: 'red' } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import * as stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { color: 'blue' } });"#, + r"import * as stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { color: 'blue' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14370,8 +14393,8 @@ const styles = stylex.create({ base: { color: 'blue' } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { create } from '@stylexjs/stylex'; -const styles = create({ base: { color: 'green' } });"#, + r"import { create } from '@stylexjs/stylex'; +const styles = create({ base: { color: 'green' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14392,14 +14415,14 @@ const styles = create({ base: { color: 'green' } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red', backgroundColor: 'blue', padding: '10px', } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14420,7 +14443,7 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red', @@ -14429,7 +14452,7 @@ const styles = stylex.create({ color: 'blue', fontWeight: 'bold', } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14450,7 +14473,7 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { fontSize: 16, @@ -14460,7 +14483,7 @@ const styles = stylex.create({ padding: 8, flex: 1, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14481,8 +14504,8 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({});"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14503,8 +14526,8 @@ const styles = stylex.create({});"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: {} });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: {} });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14525,12 +14548,12 @@ const styles = stylex.create({ base: {} });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: { default: 'red', ':hover': 'blue' }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14551,12 +14574,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: { default: 'red', ':focus': 'blue' }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14577,12 +14600,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: { default: 'red', '@media (max-width: 600px)': 'blue' }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14603,12 +14626,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { display: { default: 'block', '@supports (display: grid)': 'grid' }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14629,12 +14652,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: { ':hover': { default: null, '@media (hover: hover)': 'blue' } }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14655,12 +14678,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: { '@media (min-width: 768px)': { default: 'red', ':hover': 'blue' } }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14681,12 +14704,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { '::placeholder': { color: '#999', opacity: 1 }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14733,12 +14756,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: { default: null, ':hover': 'blue' }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14759,13 +14782,13 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { backgroundColor: { default: 'white', ':hover': 'gray' }, color: { default: 'black', ':hover': 'red' }, } -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14788,11 +14811,11 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red', fontSize: '16px' }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14813,12 +14836,12 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' }, active: { backgroundColor: 'blue' }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14839,12 +14862,12 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' }, active: { backgroundColor: 'blue' }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14865,12 +14888,12 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ primary: { color: 'red' }, secondary: { color: 'blue' }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14891,8 +14914,8 @@ const el =
;"#, + r"import stylex from '@stylexjs/stylex'; +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14913,11 +14936,11 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: { default: 'red', ':hover': 'blue' } }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14938,11 +14961,11 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { create, props } from '@stylexjs/stylex'; + r"import { create, props } from '@stylexjs/stylex'; const styles = create({ base: { color: 'red' }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14963,11 +14986,11 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -14992,11 +15015,11 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const fadeIn = stylex.keyframes({ from: { opacity: 0 }, to: { opacity: 1 }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15017,14 +15040,14 @@ const fadeIn = stylex.keyframes({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const fadeIn = stylex.keyframes({ from: { opacity: 0 }, to: { opacity: 1 }, }); const styles = stylex.create({ base: { animationName: fadeIn, animationDuration: '0.5s' }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15045,10 +15068,10 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { position: stylex.firstThatWorks('sticky', '-webkit-sticky', 'fixed') }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15069,10 +15092,10 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { display: stylex.firstThatWorks('grid', 'flex') }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15093,10 +15116,10 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { width: stylex.types.length('100px') }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15117,10 +15140,10 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: stylex.types.color('red') }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15141,14 +15164,14 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { keyframes, create } from '@stylexjs/stylex'; + r"import { keyframes, create } from '@stylexjs/stylex'; const fadeIn = keyframes({ from: { opacity: 0 }, to: { opacity: 1 }, }); const styles = create({ base: { animationName: fadeIn }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15169,13 +15192,13 @@ const styles = create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ bar: (height) => ({ height, }), }); -const result = stylex.props(styles.bar(h));"#, +const result = stylex.props(styles.bar(h));", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15196,14 +15219,14 @@ const result = stylex.props(styles.bar(h));"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ bar: (height) => ({ height, width: '100%', }), }); -const result = stylex.props(styles.bar(h));"#, +const result = stylex.props(styles.bar(h));", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15224,14 +15247,14 @@ const result = stylex.props(styles.bar(h));"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ bar: (h, w) => ({ height: h, width: w, }), }); -const result = stylex.props(styles.bar(myH, myW));"#, +const result = stylex.props(styles.bar(myH, myW));", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15256,13 +15279,13 @@ const result = stylex.props(styles.bar(myH, myW));"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const key = 'color'; const styles = stylex.create({ base: { [key]: 'red', }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15283,14 +15306,14 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const shared = { color: 'red' }; const styles = stylex.create({ base: { ...shared, fontSize: '16px', }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15311,13 +15334,13 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: someVariable, fontSize: '16px', }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15338,13 +15361,13 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { margin: '10px', color: 'red', }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15365,12 +15388,12 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const { base } = stylex.create({ base: { color: 'red', }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15420,7 +15443,7 @@ const el =
assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; import { css } from '@devup-ui/react'; const stylexStyles = stylex.create({ base: { color: 'blue' }, @@ -15429,7 +15452,7 @@ const devupClass = css({ bg: 'red' }); const el =
-
;"#, +
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15450,7 +15473,7 @@ const el =
assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red', @@ -15458,7 +15481,7 @@ const styles = stylex.create({ display: stylex.firstThatWorks('grid', 'flex'), }, }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15479,7 +15502,7 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { width: { @@ -15487,7 +15510,7 @@ const styles = stylex.create({ '@media (min-width: 768px)': stylex.types.length('50%'), }, }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15508,13 +15531,13 @@ const styles = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const base = stylex.create({ root: { color: 'red', fontSize: '16px' }, }); const composed = stylex.create({ fancy: { ...stylex.include(base.root), backgroundColor: 'blue' }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15535,13 +15558,13 @@ const composed = stylex.create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { create, include } from '@stylexjs/stylex'; + r"import { create, include } from '@stylexjs/stylex'; const base = create({ root: { color: 'red' }, }); const composed = create({ fancy: { ...include(base.root), padding: '8px' }, -});"#, +});", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15562,14 +15585,14 @@ const composed = create({ assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const base = stylex.create({ root: { color: 'red' }, }); const composed = stylex.create({ fancy: { ...stylex.include(base.root), backgroundColor: 'blue' }, }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15594,8 +15617,8 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { create, firstThatWorks } from '@stylexjs/stylex'; -const styles = create({ base: { color: firstThatWorks('red', 'blue') } });"#, + r"import { create, firstThatWorks } from '@stylexjs/stylex'; +const styles = create({ base: { color: firstThatWorks('red', 'blue') } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15616,8 +15639,8 @@ const styles = create({ base: { color: firstThatWorks('red', 'blue') } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { fontSize: 16, lineHeight: 1.5 } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { fontSize: 16, lineHeight: 1.5 } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15638,8 +15661,8 @@ const styles = stylex.create({ base: { fontSize: 16, lineHeight: 1.5 } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { zIndex: stylex.firstThatWorks(10, 20) } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { zIndex: stylex.firstThatWorks(10, 20) } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15660,8 +15683,8 @@ const styles = stylex.create({ base: { zIndex: stylex.firstThatWorks(10, 20) } } assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { fontSize: stylex.types.length(16) } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { fontSize: stylex.types.length(16) } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15682,8 +15705,8 @@ const styles = stylex.create({ base: { fontSize: stylex.types.length(16) } });"# assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { fontSize: stylex.types.length(someVar) } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { fontSize: stylex.types.length(someVar) } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15704,8 +15727,8 @@ const styles = stylex.create({ base: { fontSize: stylex.types.length(someVar) } assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { ':hover': 'invalid' } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { ':hover': 'invalid' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15726,8 +15749,8 @@ const styles = stylex.create({ base: { ':hover': 'invalid' } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: 'not-an-object', active: { color: 'blue' } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: 'not-an-object', active: { color: 'blue' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15748,9 +15771,9 @@ const styles = stylex.create({ base: 'not-an-object', active: { color: 'blue' } assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const other = {}; -const styles = stylex.create({ ...other, base: { color: 'red' } });"#, +const styles = stylex.create({ ...other, base: { color: 'red' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15771,9 +15794,9 @@ const styles = stylex.create({ ...other, base: { color: 'red' } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const key = 'base'; -const styles = stylex.create({ [key]: { color: 'red' } });"#, +const styles = stylex.create({ [key]: { color: 'red' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15794,8 +15817,8 @@ const styles = stylex.create({ [key]: { color: 'red' } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: () => ({ color: 'red' }) });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: () => ({ color: 'red' }) });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15816,8 +15839,8 @@ const styles = stylex.create({ base: () => ({ color: 'red' }) });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: (x) => { return { color: x }; } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: (x) => { return { color: x }; } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15838,8 +15861,8 @@ const styles = stylex.create({ base: (x) => { return { color: x }; } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: (x) => ({ fontSize: 16, height: x }) });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: (x) => ({ fontSize: 16, height: x }) });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15860,9 +15883,9 @@ const styles = stylex.create({ base: (x) => ({ fontSize: 16, height: x }) });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const fadeIn = stylex.keyframes({ from: { opacity: '0' }, to: { opacity: '1' } }); -const styles = stylex.create({ base: (dur) => ({ animationName: fadeIn, animationDuration: dur }) });"#, +const styles = stylex.create({ base: (dur) => ({ animationName: fadeIn, animationDuration: dur }) });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), single_css: true, import_main_css: false, import_aliases: HashMap::new() }, ) .unwrap() @@ -15877,9 +15900,9 @@ const styles = stylex.create({ base: (dur) => ({ animationName: fadeIn, animatio assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ active: { color: 'red' } }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15900,9 +15923,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ fallback: { color: 'gray' } }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15923,9 +15946,9 @@ const el =
;"# assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' } }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15946,9 +15969,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' } }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15969,9 +15992,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' } }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -15992,9 +16015,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: (x) => ({ color: x }) }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16015,9 +16038,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const base = stylex.create({ dynamic: (x) => ({ color: x, fontSize: '14px' }) }); -const composed = stylex.create({ fancy: { ...stylex.include(base.dynamic), backgroundColor: 'blue' } });"#, +const composed = stylex.create({ fancy: { ...stylex.include(base.dynamic), backgroundColor: 'blue' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), single_css: true, import_main_css: false, import_aliases: HashMap::new() }, ) .unwrap() @@ -16032,8 +16055,8 @@ const composed = stylex.create({ fancy: { ...stylex.include(base.dynamic), backg assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { create, unknownFunction } from '@stylexjs/stylex'; -const styles = create({ base: { color: 'red' } });"#, + r"import { create, unknownFunction } from '@stylexjs/stylex'; +const styles = create({ base: { color: 'red' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16050,7 +16073,7 @@ const styles = create({ base: { color: 'red' } });"#, // Coverage tests: extract_style_from_stylex.rs // ========================================== - /// Line 24: Non-object argument to stylex.create() + /// Line 24: Non-object argument to `stylex.create()` #[test] #[serial] fn test_stylex_create_non_object_arg() { @@ -16082,9 +16105,9 @@ const styles = stylex.create("not-object");"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const other = { fontSize: '14px' }; -const styles = stylex.create({ base: { ':hover': { ...other, [Symbol()]: 'val', color: 'red' } } });"#, +const styles = stylex.create({ base: { ':hover': { ...other, [Symbol()]: 'val', color: 'red' } } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), single_css: true, import_main_css: false, import_aliases: HashMap::new() }, ) .unwrap() @@ -16100,9 +16123,9 @@ const styles = stylex.create({ base: { ':hover': { ...other, [Symbol()]: 'val', assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const other = { fontSize: '14px' }; -const styles = stylex.create({ base: (x) => ({ ...other, [Symbol()]: x, color: 'red' }) });"#, +const styles = stylex.create({ base: (x) => ({ ...other, [Symbol()]: x, color: 'red' }) });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16124,9 +16147,9 @@ const styles = stylex.create({ base: (x) => ({ ...other, [Symbol()]: x, color: ' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const someVar = getSomething(); -const styles = stylex.create({ base: (x) => ({ color: x, fontSize: someVar }) });"#, +const styles = stylex.create({ base: (x) => ({ color: x, fontSize: someVar }) });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16143,7 +16166,7 @@ const styles = stylex.create({ base: (x) => ({ color: x, fontSize: someVar }) }) // Coverage tests: stylex.rs // ========================================== - /// Line 48: false from is_include_call_static — spread with non-include call + /// Line 48: false from `is_include_call_static` — spread with non-include call #[test] #[serial] fn test_stylex_spread_non_include_call() { @@ -16152,9 +16175,9 @@ const styles = stylex.create({ base: (x) => ({ color: x, fontSize: someVar }) }) assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; function notInclude() { return {}; } -const styles = stylex.create({ base: { ...notInclude(), color: 'red' } });"#, +const styles = stylex.create({ base: { ...notInclude(), color: 'red' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16167,7 +16190,7 @@ const styles = stylex.create({ base: { ...notInclude(), color: 'red' } });"#, )); } - /// Lines 66-67: Named import types.X() + /// Lines 66-67: Named import `types.X()` #[test] #[serial] fn test_stylex_named_import_types() { @@ -16176,8 +16199,8 @@ const styles = stylex.create({ base: { ...notInclude(), color: 'red' } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import { create, types } from '@stylexjs/stylex'; -const styles = create({ base: { width: types.length('100px') } });"#, + r"import { create, types } from '@stylexjs/stylex'; +const styles = create({ base: { width: types.length('100px') } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16190,7 +16213,7 @@ const styles = create({ base: { width: types.length('100px') } });"#, )); } - /// Line 70: false from is_types_call — call expression value that's not types or firstThatWorks + /// Line 70: false from `is_types_call` — call expression value that's not types or firstThatWorks #[test] #[serial] fn test_stylex_non_types_non_ftw_call() { @@ -16199,9 +16222,9 @@ const styles = create({ base: { width: types.length('100px') } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; function someFunc() { return 'red'; } -const styles = stylex.create({ base: { color: someFunc() } });"#, +const styles = stylex.create({ base: { color: someFunc() } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16223,9 +16246,9 @@ const styles = stylex.create({ base: { color: someFunc() } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const someVar = getSomething(); -const styles = stylex.create({ base: { fontSize: { default: stylex.types.length(someVar) } } });"#, +const styles = stylex.create({ base: { fontSize: { default: stylex.types.length(someVar) } } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16247,8 +16270,8 @@ const styles = stylex.create({ base: { fontSize: { default: stylex.types.length( assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: { opacity: { default: [1, 2] } } });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: { opacity: { default: [1, 2] } } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16270,9 +16293,9 @@ const styles = stylex.create({ base: { opacity: { default: [1, 2] } } });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const spreadObj = { ':hover': 'blue' }; -const styles = stylex.create({ base: { color: { ...spreadObj, default: 'red' } } });"#, +const styles = stylex.create({ base: { color: { ...spreadObj, default: 'red' } } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16294,9 +16317,9 @@ const styles = stylex.create({ base: { color: { ...spreadObj, default: 'red' } } assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const key = ':hover'; -const styles = stylex.create({ base: { color: { [key]: 'blue', default: 'red' } } });"#, +const styles = stylex.create({ base: { color: { [key]: 'blue', default: 'red' } } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16322,9 +16345,9 @@ const styles = stylex.create({ base: { color: { [key]: 'blue', default: 'red' } assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ empty: {} }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16346,9 +16369,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' } }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16361,7 +16384,7 @@ const el =
;"#, )); } - /// Line 208: None from LogicalExpression when right side can't resolve + /// Line 208: None from `LogicalExpression` when right side can't resolve #[test] #[serial] fn test_stylex_props_logical_unresolvable_right() { @@ -16370,9 +16393,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const styles = stylex.create({ base: { color: 'red' } }); -const el =
;"#, +const el =
;", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16385,7 +16408,7 @@ const el =
;"#, )); } - /// Line 332: include with empty class_name_str — include a namespace that has no properties + /// Line 332: include with empty `class_name_str` — include a namespace that has no properties #[test] #[serial] fn test_stylex_include_empty_namespace() { @@ -16394,9 +16417,9 @@ const el =
;"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const base = stylex.create({ empty: {} }); -const composed = stylex.create({ test: { ...stylex.include(base.empty), color: 'red' } });"#, +const composed = stylex.create({ test: { ...stylex.include(base.empty), color: 'red' } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16410,7 +16433,7 @@ const composed = stylex.create({ test: { ...stylex.include(base.empty), color: ' } /// Dynamic namespace with bare expression body (not object): (x) => x - /// Covers: extract_style_from_stylex.rs ObjectExpression else branch + /// Covers: `extract_style_from_stylex.rs` `ObjectExpression` else branch #[test] #[serial] fn test_stylex_dynamic_bare_expression_body() { @@ -16419,8 +16442,8 @@ const composed = stylex.create({ test: { ...stylex.include(base.empty), color: ' assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: (x) => x });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: (x) => x });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16434,7 +16457,7 @@ const styles = stylex.create({ base: (x) => x });"#, } /// Dynamic namespace with parenthesized non-object body: (x) => (x) - /// Covers: extract_style_from_stylex.rs ParenthesizedExpression unwrap + ObjectExpression else + /// Covers: `extract_style_from_stylex.rs` `ParenthesizedExpression` unwrap + `ObjectExpression` else #[test] #[serial] fn test_stylex_dynamic_paren_non_object_body() { @@ -16443,8 +16466,8 @@ const styles = stylex.create({ base: (x) => x });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; -const styles = stylex.create({ base: (x) => (x) });"#, + r"import stylex from '@stylexjs/stylex'; +const styles = stylex.create({ base: (x) => (x) });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16457,8 +16480,8 @@ const styles = stylex.create({ base: (x) => (x) });"#, )); } - /// Include-only namespace with no own styles — class_name_str starts empty - /// Covers: visit.rs line 332 (class_name_str = included_class when empty) + /// Include-only namespace with no own styles — `class_name_str` starts empty + /// Covers: visit.rs line 332 (`class_name_str` = `included_class` when empty) #[test] #[serial] fn test_stylex_include_only_no_own_styles() { @@ -16467,9 +16490,9 @@ const styles = stylex.create({ base: (x) => (x) });"#, assert_debug_snapshot!(ToBTreeSet::from( extract( "test.tsx", - r#"import stylex from '@stylexjs/stylex'; + r"import stylex from '@stylexjs/stylex'; const base = stylex.create({ root: { color: 'red' } }); -const composed = stylex.create({ combined: { ...stylex.include(base.root) } });"#, +const composed = stylex.create({ combined: { ...stylex.include(base.root) } });", ExtractOption { package: "@devup-ui/react".to_string(), css_dir: "@devup-ui/react".to_string(), @@ -16793,52 +16816,52 @@ const composed = stylex.create({ combined: { ...stylex.include(base.root) } });" let cases: &[(&str, &str)] = &[ ( "identifier", - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' const hoverStyle = { opacity: 1 }; export const A = () => ; -"#, +", ), ( "call expression", - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const getHover: () => object; export const A = () => ; -"#, +", ), ( "member expression", - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const styles: { hover: object }; export const A = () => ; -"#, +", ), ( "binary expression", - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const a: any; declare const b: any; export const A = () => ; -"#, +", ), ( "template literal", - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const x: string; export const A = () => ; -"#, +", ), ( "unary expression", - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const v: any; export const A = () => ; -"#, +", ), ( "computed member expression (array index)", - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const arr: any[]; export const A = () => ; -"#, +", ), ]; @@ -16993,20 +17016,20 @@ export const A = () => ; // pseudo-selector attribute. for src in [ // BinaryExpression - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const a: any; declare const b: any; export const A = () => ; -"#, +", // StaticMemberExpression - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const t: { hover: object }; export const A = () => ; -"#, +", // CallExpression - r#"import {Box} from '@devup-ui/react' + r"import {Box} from '@devup-ui/react' declare const fn: () => object; export const A = () => ; -"#, +", ] { reset_class_map(); reset_file_map(); diff --git a/libs/extractor/src/prop_modify_utils.rs b/libs/extractor/src/prop_modify_utils.rs index da1bbba2..d648c1f9 100644 --- a/libs/extractor/src/prop_modify_utils.rs +++ b/libs/extractor/src/prop_modify_utils.rs @@ -46,7 +46,7 @@ pub(crate) fn combine_conditional_class_name<'a>( /// modify object props /// Returns extracted Tailwind styles from static className strings -/// `conditional_branch`: If Some, contains (condition, alternate_styles, alternate_style_order) +/// `conditional_branch`: If Some, contains (condition, `alternate_styles`, `alternate_style_order`) /// for generating a conditional className expression: `condition ? consequent_class : alternate_class` #[allow(clippy::too_many_arguments)] pub fn modify_prop_object<'a>( @@ -164,7 +164,7 @@ pub fn modify_prop_object<'a>( } /// modify JSX props /// Returns extracted Tailwind styles from static className strings -/// `conditional_branch`: If Some, contains (condition, alternate_styles, alternate_style_order) +/// `conditional_branch`: If Some, contains (condition, `alternate_styles`, `alternate_style_order`) /// for generating a conditional className expression: `condition ? consequent_class : alternate_class` #[allow(clippy::too_many_arguments)] pub fn modify_props<'a>( @@ -317,42 +317,32 @@ pub fn get_class_name_expression<'a>( }; // Merge class names: [tailwind/original class names] + [devup-ui component styles] - let expression = merge_string_expressions( - ast_builder, - [ - class_name_to_use, - gen_class_names(ast_builder, styles, style_order, filename), - ] - .into_iter() - .flatten() - .chain(if class_name_prop.is_some() { - vec![] - } else { - spread_props - .iter() - .map(|ex| { - convert_class_name( - ast_builder, - &Expression::StaticMemberExpression( - ast_builder.alloc_static_member_expression( - SPAN, - ex.clone_in(ast_builder.allocator), - ast_builder.identifier_name(SPAN, ast_builder.str("className")), - true, - ), - ), - ) - }) - .collect::>() - }) - .collect::>() - .as_slice(), - ); + let mut class_expressions = Vec::with_capacity(2 + spread_props.len()); + if let Some(class_name) = class_name_to_use { + class_expressions.push(class_name); + } + if let Some(class_name) = gen_class_names(ast_builder, styles, style_order, filename) { + class_expressions.push(class_name); + } + if class_name_prop.is_none() { + class_expressions.extend(spread_props.iter().map(|ex| { + convert_class_name( + ast_builder, + &Expression::StaticMemberExpression(ast_builder.alloc_static_member_expression( + SPAN, + ex.clone_in(ast_builder.allocator), + ast_builder.identifier_name(SPAN, ast_builder.str("className")), + true, + )), + ) + })); + } + let expression = merge_string_expressions(ast_builder, &class_expressions); (expression, tailwind_styles) } -/// Apply style_order to all ExtractStyleValue items +/// Apply `style_order` to all `ExtractStyleValue` items fn apply_style_order_to_styles(styles: &mut [ExtractStyleValue], style_order: Option) { if let Some(order) = style_order { for style in styles.iter_mut() { @@ -541,14 +531,12 @@ fn rebuild_expression_with_mapping<'a>( /// Extract all class name strings from a template literal, including from conditional expressions fn extract_all_classes_from_template_literal(template: &oxc_ast::ast::TemplateLiteral) -> String { - let mut classes = Vec::new(); + let mut classes = String::new(); // Extract from quasis (static parts of template literal) for quasi in &template.quasis { let raw = quasi.value.raw.as_str(); - if !raw.trim().is_empty() { - classes.push(raw.trim().to_string()); - } + push_class_segment(&mut classes, raw.trim()); } // Extract from expressions (dynamic parts) @@ -556,18 +544,26 @@ fn extract_all_classes_from_template_literal(template: &oxc_ast::ast::TemplateLi extract_classes_from_expression(expr, &mut classes); } - classes.join(" ") + classes +} + +fn push_class_segment(classes: &mut String, value: &str) { + if value.is_empty() { + return; + } + if !classes.is_empty() { + classes.push(' '); + } + classes.push_str(value); } /// Recursively extract class name strings from an expression -fn extract_classes_from_expression(expr: &Expression, classes: &mut Vec) { +fn extract_classes_from_expression(expr: &Expression, classes: &mut String) { match expr { // Direct string literal: 'text-red-500' Expression::StringLiteral(lit) => { let value = lit.value.as_str().trim(); - if !value.is_empty() { - classes.push(value.to_string()); - } + push_class_segment(classes, value); } // Ternary/conditional: cond ? 'text-red' : 'text-blue' Expression::ConditionalExpression(cond) => { @@ -586,9 +582,7 @@ fn extract_classes_from_expression(expr: &Expression, classes: &mut Vec) // Template literal inside expression Expression::TemplateLiteral(inner_template) => { let inner_classes = extract_all_classes_from_template_literal(inner_template); - if !inner_classes.is_empty() { - classes.push(inner_classes); - } + push_class_segment(classes, &inner_classes); } // Other expressions (variables, function calls, etc.) - skip, can't extract statically _ => {} @@ -603,35 +597,31 @@ pub fn get_style_expression<'a>( spread_props: &[Expression<'a>], filename: Option<&str>, ) -> Option> { - merge_object_expressions( - ast_builder, - [ - gen_styles(ast_builder, styles, filename), - style_vars - .as_ref() - .map(|style_vars| convert_style_vars(ast_builder, style_vars)), - style_prop.clone_in(ast_builder.allocator), - ] - .into_iter() - .flatten() - .chain(if style_prop.is_some() { - vec![] - } else { - spread_props - .iter() - .map(|ex| { - Expression::StaticMemberExpression(ast_builder.alloc_static_member_expression( - SPAN, - ex.clone_in(ast_builder.allocator), - ast_builder.identifier_name(SPAN, ast_builder.str("style")), - true, - )) - }) - .collect::>() - }) - .collect::>() - .as_slice(), - ) + let mut style_expressions = Vec::with_capacity(3 + spread_props.len()); + if let Some(style) = gen_styles(ast_builder, styles, filename) { + style_expressions.push(style); + } + if let Some(style_vars) = style_vars + .as_ref() + .map(|style_vars| convert_style_vars(ast_builder, style_vars)) + { + style_expressions.push(style_vars); + } + if let Some(style_prop) = style_prop.clone_in(ast_builder.allocator) { + style_expressions.push(style_prop); + } + if style_prop.is_none() { + style_expressions.extend(spread_props.iter().map(|ex| { + Expression::StaticMemberExpression(ast_builder.alloc_static_member_expression( + SPAN, + ex.clone_in(ast_builder.allocator), + ast_builder.identifier_name(SPAN, ast_builder.str("style")), + true, + )) + })); + } + + merge_object_expressions(ast_builder, &style_expressions) } fn merge_string_expressions<'a>( @@ -641,19 +631,19 @@ fn merge_string_expressions<'a>( if expressions.is_empty() { return None; } - if expressions.len() == 1 + if let [expression] = expressions && !matches!( - expressions.first().unwrap(), + expression, Expression::StringLiteral(_) | Expression::TemplateLiteral(_) ) { - return Some(expressions.first().unwrap().clone_in(ast_builder.allocator)); + return Some(expression.clone_in(ast_builder.allocator)); } let mut string_literals: std::vec::Vec = vec![]; let mut other_expressions = vec![]; let mut prev_str = String::new(); - for ex in expressions.iter() { + for ex in expressions { if let Expression::StringLiteral(literal) = ex { let target_prev = prev_str.trim(); let target = literal.value.trim(); @@ -676,7 +666,7 @@ fn merge_string_expressions<'a>( "" }, target_prev, - if !target_prev.is_empty() { " " } else { "" }, + if target_prev.is_empty() { "" } else { " " }, target, if !target.is_empty() && !target.ends_with("typo-") { " " @@ -693,13 +683,13 @@ fn merge_string_expressions<'a>( let target_prev = prev_str.trim(); string_literals.push(format!( "{}{}{}", - if !other_expressions.is_empty() { - " " - } else { + if other_expressions.is_empty() { "" + } else { + " " }, target_prev, - if !target_prev.is_empty() { " " } else { "" } + if target_prev.is_empty() { "" } else { " " } )); other_expressions.push(ex.clone_in(ast_builder.allocator)); prev_str = String::new(); @@ -707,7 +697,7 @@ fn merge_string_expressions<'a>( } string_literals.push(format!( "{}{}", - if !prev_str.trim().is_empty() { " " } else { "" }, + if prev_str.trim().is_empty() { "" } else { " " }, prev_str.trim(), )); if other_expressions.is_empty() { diff --git a/libs/extractor/src/snapshots/extractor__tests__custom_selector-4.snap b/libs/extractor/src/snapshots/extractor__tests__custom_selector-4.snap new file mode 100644 index 00000000..05da9455 --- /dev/null +++ b/libs/extractor/src/snapshots/extractor__tests__custom_selector-4.snap @@ -0,0 +1,23 @@ +--- +source: libs/extractor/src/lib.rs +expression: "ToBTreeSet::from(extract(\"test.jsx\",\nr#\"import {Box} from '@devup-ui/core'\n\n \"#,\nExtractOption\n{\n package: \"@devup-ui/core\".to_string(), css_dir:\n \"@devup-ui/core\".to_string(), single_css: true, import_main_css: false,\n import_aliases: HashMap::new()\n}).unwrap())" +--- +ToBTreeSet { + styles: { + Static( + ExtractStaticStyle { + property: "color", + value: "blue", + level: 0, + selector: Some( + Selector( + "&:focus", + ), + ), + style_order: None, + layer: None, + }, + ), + }, + code: "import \"@devup-ui/core/devup-ui.css\";\n
;\n", +} diff --git a/libs/extractor/src/stylex.rs b/libs/extractor/src/stylex.rs index 05e1a930..8aec88a7 100644 --- a/libs/extractor/src/stylex.rs +++ b/libs/extractor/src/stylex.rs @@ -3,8 +3,8 @@ use oxc_ast::ast::{Expression, ObjectPropertyKind}; use crate::utils::{get_string_by_literal_expression, get_string_by_property_key}; -/// Which StyleX function a named import refers to -#[derive(Debug, Clone, PartialEq)] +/// Which `StyleX` function a named import refers to +#[derive(Debug, Clone, PartialEq, Eq)] pub enum StylexFunction { Create, Props, @@ -15,7 +15,7 @@ pub enum StylexFunction { Include, } -/// Check if a call expression is stylex.firstThatWorks() or named firstThatWorks(). +/// Check if a call expression is `stylex.firstThatWorks()` or named `firstThatWorks()`. pub fn is_first_that_works_call(callee: &Expression) -> bool { // stylex.firstThatWorks(...) if let Expression::StaticMemberExpression(member) = callee @@ -32,7 +32,7 @@ pub fn is_first_that_works_call(callee: &Expression) -> bool { false } -/// Check if a call expression is stylex.include() or named include(). +/// Check if a call expression is `stylex.include()` or named `include()`. /// This is a static check that does NOT require access to the visitor. pub fn is_include_call_static(callee: &Expression) -> bool { if let Expression::StaticMemberExpression(member) = callee @@ -48,14 +48,14 @@ pub fn is_include_call_static(callee: &Expression) -> bool { false } -/// A reference to a stylex.include(base.member) call found inside stylex.create(). +/// A reference to a stylex.include(base.member) call found inside `stylex.create()`. #[derive(Debug, Clone)] pub struct StylexIncludeRef { pub var_name: String, pub member_name: String, } -/// Check if a call expression is stylex.types.X() or types.X() (type wrapper). +/// Check if a call expression is `stylex.types.X()` or `types.X()` (type wrapper). pub fn is_types_call(callee: &Expression) -> bool { if let Expression::StaticMemberExpression(member) = callee { // stylex.types.X(...) @@ -71,7 +71,7 @@ pub fn is_types_call(callee: &Expression) -> bool { } /// Convert camelCase CSS property name to kebab-case. -/// StyleX uses standard CSS properties only — NO devup-ui shorthand expansion. +/// `StyleX` uses standard CSS properties only — NO devup-ui shorthand expansion. pub fn normalize_stylex_property(name: &str) -> String { css::utils::to_kebab_case(name) } @@ -79,7 +79,7 @@ pub fn normalize_stylex_property(name: &str) -> String { /// Intermediate selector parts collected during recursion. #[derive(Debug, Clone)] pub enum SelectorPart { - /// Pseudo-class or pseudo-element, e.g. ":hover", "::placeholder" + /// Pseudo-class or pseudo-element, e.g. ":hover", "`::placeholder`" Pseudo(String), /// At-rule condition, e.g. @media (max-width: 600px) AtRule { kind: AtRuleKind, query: String }, @@ -94,16 +94,16 @@ pub struct DecomposedStyle { pub selector: Option, } -/// Information about a dynamic StyleX namespace (arrow function in stylex.create()) +/// Information about a dynamic `StyleX` namespace (arrow function in `stylex.create()`) #[derive(Debug, Clone)] pub struct StylexDynamicInfo { /// Combined class name string for all properties (static + dynamic) pub class_name: String, - /// Maps (param_index, css_variable_name) for each dynamic property + /// Maps (`param_index`, `css_variable_name`) for each dynamic property pub css_vars: Vec<(usize, String)>, } -/// A StyleX namespace entry — either static or dynamic (arrow function) +/// A `StyleX` namespace entry — either static or dynamic (arrow function) #[derive(Debug, Clone)] pub enum StylexNamespaceValue { /// Static namespace: just a className string @@ -112,14 +112,14 @@ pub enum StylexNamespaceValue { Dynamic(StylexDynamicInfo), } -/// Decompose a StyleX value-level condition object into flat (css_value, selector) tuples. +/// Decompose a `StyleX` value-level condition object into flat (`css_value`, selector) tuples. /// -/// StyleX allows values to be objects with condition keys: +/// `StyleX` allows values to be objects with condition keys: /// ```js /// { color: { default: 'red', ':hover': 'blue', '@media (max-width:600px)': 'green' } } /// ``` /// -/// This recursively walks the value tree and returns flat tuples of (value_or_none, selector). +/// This recursively walks the value tree and returns flat tuples of (`value_or_none`, selector). /// `None` value means null/no CSS emitted (but tracked for atomic override). pub fn decompose_value_conditions( css_property: &str, @@ -185,7 +185,7 @@ pub fn decompose_value_conditions( let mut results = vec![]; - for prop in obj.properties.iter() { + for prop in &obj.properties { let ObjectPropertyKind::ObjectProperty(prop) = prop else { continue; }; @@ -249,15 +249,14 @@ fn compose_selectors(parts: &[SelectorPart]) -> Option { Some(format!("&{}", pseudos.join(""))) }; - if at_rules.is_empty() { - pseudo_str.map(StyleSelector::Selector) - } else { - let (kind, query) = at_rules.last().expect("at_rules is non-empty"); + if let Some((kind, query)) = at_rules.last() { Some(StyleSelector::At { kind: *kind, query: query.to_string(), selector: pseudo_str, }) + } else { + pseudo_str.map(StyleSelector::Selector) } } @@ -276,6 +275,7 @@ fn parse_at_rule_key(key: &str) -> Option<(AtRuleKind, String)> { } #[cfg(test)] +#[allow(clippy::expect_used)] mod tests { use super::*; diff --git a/libs/extractor/src/tailwind.rs b/libs/extractor/src/tailwind.rs index 72b72a50..1779ed5a 100644 --- a/libs/extractor/src/tailwind.rs +++ b/libs/extractor/src/tailwind.rs @@ -1,7 +1,7 @@ //! Tailwind CSS class parser for devup-ui extraction //! //! This module parses Tailwind CSS class strings and converts them to -//! ExtractStyleValue objects for integration with the devup-ui extraction system. +//! `ExtractStyleValue` objects for integration with the devup-ui extraction system. // The nested if-let pattern is intentional for readability in parsing code. // Using if-let chains would make the code harder to read and modify. @@ -98,7 +98,7 @@ pub enum TailwindVariant { } impl TailwindVariant { - /// Convert variant to StyleSelector + /// Convert variant to `StyleSelector` pub fn to_selector(self) -> StyleSelector { match self { TailwindVariant::Hover => StyleSelector::Selector("&:hover".to_string()), @@ -291,7 +291,7 @@ impl TailwindVariant { } /// Parsed Tailwind class with all components -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct TailwindClass { /// Responsive level (0=base, 1=sm, 2=md, 3=lg, 4=xl, 5=2xl) pub responsive: u8, @@ -306,7 +306,7 @@ pub struct TailwindClass { } impl TailwindClass { - /// Convert to ExtractStaticStyle + /// Convert to `ExtractStaticStyle` pub fn to_static_style(&self) -> ExtractStaticStyle { // For transform property, negative is already incorporated into the value // (e.g., translateX(-1rem)), so don't add prefix again @@ -346,7 +346,7 @@ impl TailwindClass { } else { // Combine selectors selector_str = - format!("{}{}", selector_str.replace(" &", ""), s.replace("&", "")); + format!("{}{}", selector_str.replace(" &", ""), s.replace('&', "")); if !selector_str.contains(" &") && !selector_str.ends_with(" &") { selector_str.push_str(" &"); } @@ -853,8 +853,7 @@ static EASE_SCALE: phf::Map<&'static str, &'static str> = phf_map! { /// Check if a string contains Tailwind classes pub fn has_tailwind_classes(class_str: &str) -> bool { // Simple heuristic: if it looks like a Tailwind class pattern - let parts: Vec<&str> = class_str.split_whitespace().collect(); - for part in parts { + for part in class_str.split_whitespace() { if is_likely_tailwind_class(part) { return true; } @@ -1188,8 +1187,8 @@ fn is_valid_tailwind_value(value: &str) -> bool { } // Numeric values (including decimals like 0.5, 1.5) - let first_char = value.chars().next().unwrap(); - if first_char.is_ascii_digit() { + // Safe: `value.is_empty()` returns early above, so `value` has at least one char. + if value.starts_with(|c: char| c.is_ascii_digit()) { return true; } @@ -1217,11 +1216,10 @@ fn is_valid_tailwind_value(value: &str) -> bool { } // Fraction values (1/2, 1/3, 2/3, etc.) - if value.contains('/') { - let parts: Vec<&str> = value.split('/').collect(); - if parts.len() == 2 - && parts[0].chars().all(|c| c.is_ascii_digit()) - && parts[1].chars().all(|c| c.is_ascii_digit()) + if let Some((numerator, denominator)) = value.split_once('/') { + if !denominator.contains('/') + && numerator.chars().all(|c| c.is_ascii_digit()) + && denominator.chars().all(|c| c.is_ascii_digit()) { return true; } @@ -1230,11 +1228,12 @@ fn is_valid_tailwind_value(value: &str) -> bool { false } -/// Parse a className string into a list of ExtractStyleValue +/// Parse a className string into a list of `ExtractStyleValue` pub fn parse_tailwind_to_styles(class_str: &str, filename: Option<&str>) -> Vec { - let mut styles = Vec::new(); + let classes = class_str.split_whitespace(); + let mut styles = Vec::with_capacity(classes.clone().count()); - for class in class_str.split_whitespace() { + for class in classes { if let Some(parsed) = parse_single_class(class) { let static_style = parsed.to_static_style(); styles.push(ExtractStyleValue::Static(static_style)); @@ -1429,36 +1428,36 @@ fn parse_arbitrary_value(class: &str) -> Option<(String, String)> { "leading-" => Some(("line-height".to_string(), value)), "duration-" => Some(("transition-duration".to_string(), value)), "delay-" => Some(("transition-delay".to_string(), value)), - "scale-" => Some(("transform".to_string(), format!("scale({})", value))), - "rotate-" => Some(("transform".to_string(), format!("rotate({})", value))), - "translate-x-" => Some(("transform".to_string(), format!("translateX({})", value))), - "translate-y-" => Some(("transform".to_string(), format!("translateY({})", value))), - "skew-x-" => Some(("transform".to_string(), format!("skewX({})", value))), - "skew-y-" => Some(("transform".to_string(), format!("skewY({})", value))), + "scale-" => Some(("transform".to_string(), format!("scale({value})"))), + "rotate-" => Some(("transform".to_string(), format!("rotate({value})"))), + "translate-x-" => Some(("transform".to_string(), format!("translateX({value})"))), + "translate-y-" => Some(("transform".to_string(), format!("translateY({value})"))), + "skew-x-" => Some(("transform".to_string(), format!("skewX({value})"))), + "skew-y-" => Some(("transform".to_string(), format!("skewY({value})"))), "aspect-" => Some(("aspect-ratio".to_string(), value)), "columns-" => Some(("columns".to_string(), value)), "grid-cols-" => Some(( "grid-template-columns".to_string(), - format!("repeat({}, minmax(0, 1fr))", value), + format!("repeat({value}, minmax(0, 1fr))"), )), "grid-rows-" => Some(( "grid-template-rows".to_string(), - format!("repeat({}, minmax(0, 1fr))", value), + format!("repeat({value}, minmax(0, 1fr))"), )), "col-span-" => Some(( "grid-column".to_string(), - format!("span {} / span {}", value, value), + format!("span {value} / span {value}"), )), "row-span-" => Some(( "grid-row".to_string(), - format!("span {} / span {}", value, value), + format!("span {value} / span {value}"), )), "basis-" => Some(("flex-basis".to_string(), value)), - "blur-" => Some(("filter".to_string(), format!("blur({})", value))), - "brightness-" => Some(("filter".to_string(), format!("brightness({})", value))), - "contrast-" => Some(("filter".to_string(), format!("contrast({})", value))), - "saturate-" => Some(("filter".to_string(), format!("saturate({})", value))), - "backdrop-blur-" => Some(("backdrop-filter".to_string(), format!("blur({})", value))), + "blur-" => Some(("filter".to_string(), format!("blur({value})"))), + "brightness-" => Some(("filter".to_string(), format!("brightness({value})"))), + "contrast-" => Some(("filter".to_string(), format!("contrast({value})"))), + "saturate-" => Some(("filter".to_string(), format!("saturate({value})"))), + "backdrop-blur-" => Some(("backdrop-filter".to_string(), format!("blur({value})"))), _ => None, } } @@ -1868,7 +1867,7 @@ fn parse_flex_grid_utility(class: &str) -> Option<(String, String)> { if let Ok(n) = rest.parse::() { return Some(( "grid-template-columns".to_string(), - format!("repeat({}, minmax(0, 1fr))", n), + format!("repeat({n}, minmax(0, 1fr))"), )); } } @@ -1878,7 +1877,7 @@ fn parse_flex_grid_utility(class: &str) -> Option<(String, String)> { if let Ok(n) = rest.parse::() { return Some(( "grid-template-rows".to_string(), - format!("repeat({}, minmax(0, 1fr))", n), + format!("repeat({n}, minmax(0, 1fr))"), )); } } @@ -1886,10 +1885,7 @@ fn parse_flex_grid_utility(class: &str) -> Option<(String, String)> { // Col span if let Some(rest) = class.strip_prefix("col-span-") { if let Ok(n) = rest.parse::() { - return Some(( - "grid-column".to_string(), - format!("span {} / span {}", n, n), - )); + return Some(("grid-column".to_string(), format!("span {n} / span {n}"))); } } @@ -1906,7 +1902,7 @@ fn parse_flex_grid_utility(class: &str) -> Option<(String, String)> { // Row span if let Some(rest) = class.strip_prefix("row-span-") { if let Ok(n) = rest.parse::() { - return Some(("grid-row".to_string(), format!("span {} / span {}", n, n))); + return Some(("grid-row".to_string(), format!("span {n} / span {n}"))); } } @@ -2458,7 +2454,7 @@ fn parse_background_utility(class: &str) -> Option<(String, String)> { }; return Some(( "background-image".to_string(), - format!("linear-gradient({}, var(--tw-gradient-stops))", direction), + format!("linear-gradient({direction}, var(--tw-gradient-stops))"), )); } } @@ -2765,7 +2761,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "3xl" => "64px".to_string(), _ => return None, }; - return Some(("filter".to_string(), format!("blur({})", value))); + return Some(("filter".to_string(), format!("blur({value})"))); } if class == "blur" { return Some(("filter".to_string(), "blur(8px)".to_string())); @@ -2787,7 +2783,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "200" => "2".to_string(), _ => return None, }; - return Some(("filter".to_string(), format!("brightness({})", value))); + return Some(("filter".to_string(), format!("brightness({value})"))); } // Contrast @@ -2802,7 +2798,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "200" => "2".to_string(), _ => return None, }; - return Some(("filter".to_string(), format!("contrast({})", value))); + return Some(("filter".to_string(), format!("contrast({value})"))); } // Drop shadow @@ -2845,7 +2841,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "180" => "180deg".to_string(), _ => return None, }; - return Some(("filter".to_string(), format!("hue-rotate({})", value))); + return Some(("filter".to_string(), format!("hue-rotate({value})"))); } // Invert @@ -2866,7 +2862,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "200" => "2".to_string(), _ => return None, }; - return Some(("filter".to_string(), format!("saturate({})", value))); + return Some(("filter".to_string(), format!("saturate({value})"))); } // Sepia @@ -2889,7 +2885,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "3xl" => "64px".to_string(), _ => return None, }; - return Some(("backdrop-filter".to_string(), format!("blur({})", value))); + return Some(("backdrop-filter".to_string(), format!("blur({value})"))); } if class == "backdrop-blur" { return Some(("backdrop-filter".to_string(), "blur(8px)".to_string())); @@ -2912,7 +2908,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { }; return Some(( "backdrop-filter".to_string(), - format!("brightness({})", value), + format!("brightness({value})"), )); } @@ -2927,10 +2923,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "200" => "2".to_string(), _ => return None, }; - return Some(( - "backdrop-filter".to_string(), - format!("contrast({})", value), - )); + return Some(("backdrop-filter".to_string(), format!("contrast({value})"))); } if class == "backdrop-grayscale" { @@ -2949,7 +2942,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { if let Some(rest) = class.strip_prefix("backdrop-opacity-") { if let Some(&value) = OPACITY_SCALE.get(rest) { - return Some(("backdrop-filter".to_string(), format!("opacity({})", value))); + return Some(("backdrop-filter".to_string(), format!("opacity({value})"))); } } @@ -2962,10 +2955,7 @@ fn parse_filter_utility(class: &str) -> Option<(String, String)> { "200" => "2".to_string(), _ => return None, }; - return Some(( - "backdrop-filter".to_string(), - format!("saturate({})", value), - )); + return Some(("backdrop-filter".to_string(), format!("saturate({value})"))); } if class == "backdrop-sepia" { @@ -3048,15 +3038,15 @@ fn parse_transform_utility(class: &str, is_negative: bool) -> Option<(String, St // Scale if let Some(rest) = class.strip_prefix("scale-x-") { let value = parse_scale_value(rest)?; - return Some(("transform".to_string(), format!("scaleX({})", value))); + return Some(("transform".to_string(), format!("scaleX({value})"))); } if let Some(rest) = class.strip_prefix("scale-y-") { let value = parse_scale_value(rest)?; - return Some(("transform".to_string(), format!("scaleY({})", value))); + return Some(("transform".to_string(), format!("scaleY({value})"))); } if let Some(rest) = class.strip_prefix("scale-") { let value = parse_scale_value(rest)?; - return Some(("transform".to_string(), format!("scale({})", value))); + return Some(("transform".to_string(), format!("scale({value})"))); } // Rotate @@ -3076,7 +3066,7 @@ fn parse_transform_utility(class: &str, is_negative: bool) -> Option<(String, St let neg_prefix = if is_negative { "-" } else { "" }; return Some(( "transform".to_string(), - format!("rotate({}{})", neg_prefix, value), + format!("rotate({neg_prefix}{value})"), )); } @@ -3086,7 +3076,7 @@ fn parse_transform_utility(class: &str, is_negative: bool) -> Option<(String, St let neg_prefix = if is_negative { "-" } else { "" }; return Some(( "transform".to_string(), - format!("translateX({}{})", neg_prefix, value), + format!("translateX({neg_prefix}{value})"), )); } } @@ -3095,7 +3085,7 @@ fn parse_transform_utility(class: &str, is_negative: bool) -> Option<(String, St let neg_prefix = if is_negative { "-" } else { "" }; return Some(( "transform".to_string(), - format!("translateY({}{})", neg_prefix, value), + format!("translateY({neg_prefix}{value})"), )); } } @@ -3114,7 +3104,7 @@ fn parse_transform_utility(class: &str, is_negative: bool) -> Option<(String, St let neg_prefix = if is_negative { "-" } else { "" }; return Some(( "transform".to_string(), - format!("skewX({}{})", neg_prefix, value), + format!("skewX({neg_prefix}{value})"), )); } if let Some(rest) = class.strip_prefix("skew-y-") { @@ -3130,7 +3120,7 @@ fn parse_transform_utility(class: &str, is_negative: bool) -> Option<(String, St let neg_prefix = if is_negative { "-" } else { "" }; return Some(( "transform".to_string(), - format!("skewY({}{})", neg_prefix, value), + format!("skewY({neg_prefix}{value})"), )); } @@ -3157,7 +3147,7 @@ fn parse_transform_utility(class: &str, is_negative: bool) -> Option<(String, St /// Parse scale value (50 -> 0.5, 100 -> 1, 150 -> 1.5) fn parse_scale_value(s: &str) -> Option { let n: u32 = s.parse().ok()?; - Some(n as f64 / 100.0) + Some(f64::from(n) / 100.0) } /// Parse interactivity utilities (cursor, pointer-events, resize, etc.) @@ -3342,6 +3332,7 @@ fn parse_accessibility_utility(class: &str) -> Option<(String, String)> { } #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use super::*; use css::class_map::reset_class_map; @@ -4004,7 +3995,7 @@ mod tests { assert_eq!(kind, css::style_selector::AtRuleKind::Media); assert_eq!(query, expected_query); } else { - panic!("Expected At selector for {:?}", variant); + panic!("Expected At selector for {variant:?}"); } } diff --git a/libs/extractor/src/util_type.rs b/libs/extractor/src/util_type.rs index cdfde6e6..316a207a 100644 --- a/libs/extractor/src/util_type.rs +++ b/libs/extractor/src/util_type.rs @@ -1,4 +1,4 @@ -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum UtilType { Css, GlobalCss, @@ -37,7 +37,7 @@ mod tests { #[case("globalCss".to_string(), Ok(UtilType::GlobalCss))] #[case("keyframes".to_string(), Ok(UtilType::Keyframes))] #[case("unknown".to_string(), Err("unknown".to_string()))] - #[case("".to_string(), Err("".to_string()))] + #[case(String::new(), Err(String::new()))] fn test_util_type_try_from(#[case] input: String, #[case] expected: Result) { assert_eq!(UtilType::try_from(input), expected); } diff --git a/libs/extractor/src/utils.rs b/libs/extractor/src/utils.rs index 2b2fe455..163ecf09 100644 --- a/libs/extractor/src/utils.rs +++ b/libs/extractor/src/utils.rs @@ -73,7 +73,7 @@ pub(super) enum ParsedStyleOrder<'a> { impl ParsedStyleOrder<'_> { /// Convert to Option for backward compatibility (returns None for Conditional) - pub fn as_static(&self) -> Option { + pub const fn as_static(&self) -> Option { match self { ParsedStyleOrder::Static(v) => Some(*v), _ => None, @@ -334,6 +334,7 @@ pub fn gcd(a: u32, b: u32) -> u32 { } #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use oxc_allocator::Vec; use oxc_ast::ast::NumberBase; @@ -574,14 +575,13 @@ mod tests { } else { assert!( result.is_some(), - "Expected Some, but got None for input: {:?}", - input + "Expected Some, but got None for input: {input:?}" ); if let Some(expr) = result { let code = super::expression_to_code(&expr); let snapshot_name = format!( "wrap_array_filter_{}", - input.join("_").replace("\"", "quote") + input.join("_").replace('"', "quote") ); assert_snapshot!(snapshot_name, code); } diff --git a/libs/extractor/src/vanilla_extract.rs b/libs/extractor/src/vanilla_extract.rs index 8b28aa44..9fcb427c 100644 --- a/libs/extractor/src/vanilla_extract.rs +++ b/libs/extractor/src/vanilla_extract.rs @@ -1,6 +1,6 @@ //! Vanilla-extract style file (.css.ts, .css.js) processor //! -//! This module uses boa_engine to execute vanilla-extract style files +//! This module uses `boa_engine` to execute vanilla-extract style files //! and extract style definitions for processing by the existing extract logic. #![allow(dead_code)] // Public API fields/functions for future expansion @@ -19,7 +19,6 @@ use oxc_transformer::{TransformOptions, Transformer}; use rustc_hash::{FxHashMap, FxHashSet}; use smallvec::SmallVec; use std::cell::RefCell; -use std::fmt::Write; use std::path::Path; use std::rc::Rc; @@ -39,65 +38,65 @@ pub struct StyleEntry { pub json: String, /// Whether this style is exported pub exported: bool, - /// Base class references for composition (placeholder IDs like "__style_0__") + /// Base class references for composition (placeholder IDs like "__`style_0`__") pub bases: SmallVec<[String; 2]>, } -/// Entry for createGlobalTheme() - CSS variables scoped to a selector +/// Entry for `createGlobalTheme()` - CSS variables scoped to a selector #[derive(Debug, Clone, Default)] pub struct GlobalThemeEntry { /// CSS selector (e.g., ":root") pub selector: String, - /// CSS variables: Vec<(var_name, value)> e.g. [("--color-brand-0-0", "blue")] + /// CSS variables: Vec<(`var_name`, value)> e.g. [("--color-brand-0-0", "blue")] pub css_vars: SmallVec<[(String, String); 8]>, - /// Serialized JS object with var() references + /// Serialized JS object with `var()` references pub vars_object_json: String, /// Whether this is exported pub exported: bool, } -/// Entry for createTheme() - CSS variables scoped to a generated class +/// Entry for `createTheme()` - CSS variables scoped to a generated class #[derive(Debug, Clone, Default)] pub struct ThemeEntry { - /// CSS variables: Vec<(var_name, value)> e.g. [("--color-brand", "blue")] + /// CSS variables: Vec<(`var_name`, value)> e.g. [("--color-brand", "blue")] pub css_vars: SmallVec<[(String, String); 8]>, /// Whether this is exported pub exported: bool, - /// For single-arg createTheme: the vars object JSON with var() references + /// For single-arg createTheme: the vars object JSON with `var()` references /// Used to generate the second element of the returned array pub vars_object_json: Option, /// For single-arg createTheme: the name of the vars variable from [themeClass, vars] pub vars_name: Option, - /// The unique generated class name (file_prefix + variable_name) + /// The unique generated class name (`file_prefix` + `variable_name`) pub class_name: String, } /// Collected style definitions from vanilla-extract API calls #[derive(Debug, Default)] pub struct CollectedStyles { - /// style() calls: variable_name -> (json, exported) + /// `style()` calls: `variable_name` -> (json, exported) pub styles: FxHashMap, - /// globalStyle() calls: selector -> style object JSON + /// `globalStyle()` calls: selector -> style object JSON pub global_styles: Vec<(String, String)>, - /// keyframes() calls: variable_name -> (json, exported) + /// `keyframes()` calls: `variable_name` -> (json, exported) pub keyframes: FxHashMap, - /// createVar() calls: variable_name -> (CSS variable string, exported) + /// `createVar()` calls: `variable_name` -> (CSS variable string, exported) pub vars: FxHashMap, - /// fontFace() calls: placeholder_id -> (font_face JSON, font-family name, exported) + /// `fontFace()` calls: `placeholder_id` -> (`font_face` JSON, font-family name, exported) pub font_faces: FxHashMap, - /// styleVariants() calls: variable_name -> (variants, exported) + /// `styleVariants()` calls: `variable_name` -> (variants, exported) pub style_variants: FxHashMap, bool)>, - /// createContainer() calls: variable_name -> (container name string, exported) + /// `createContainer()` calls: `variable_name` -> (container name string, exported) pub containers: FxHashMap, - /// layer() calls: variable_name -> (layer name string, exported) + /// `layer()` calls: `variable_name` -> (layer name string, exported) pub layers: FxHashMap, - /// createGlobalTheme() calls: variable_name -> GlobalThemeEntry + /// `createGlobalTheme()` calls: `variable_name` -> `GlobalThemeEntry` pub global_themes: FxHashMap, - /// createTheme() calls: variable_name -> ThemeEntry + /// `createTheme()` calls: `variable_name` -> `ThemeEntry` pub themes: FxHashMap, - /// Theme vars from array destructuring: vars_name -> (vars_object_json, exported) + /// Theme vars from array destructuring: `vars_name` -> (`vars_object_json`, exported) pub theme_vars: FxHashMap, - /// Non-style constant exports: variable_name -> value (as code string) + /// Non-style constant exports: `variable_name` -> value (as code string) pub constant_exports: FxHashMap, } @@ -166,7 +165,7 @@ fn parse_font_face_json(json: &str) -> Vec<(String, String)> { .collect() } -/// Recursively transform theme contract object to CSS var() references +/// Recursively transform theme contract object to CSS `var()` references /// Returns a new JS object with null leaves replaced by var(--path) fn transform_contract_to_vars(value: &JsValue, ctx: &mut Context, path: &[String]) -> JsValue { if let Some(obj) = value.as_object() { @@ -258,7 +257,7 @@ fn extract_theme_vars( } } -/// Recursively transform theme object to CSS var() references +/// Recursively transform theme object to CSS `var()` references /// Returns a new JS object with the same structure but leaf values replaced with var(--path) fn transform_theme_to_vars( value: &JsValue, @@ -330,7 +329,7 @@ fn transform_theme_to_vars( } } -/// Convert JsValue to JSON string using JSON.stringify +/// Convert `JsValue` to JSON string using JSON.stringify fn js_value_to_json(value: &JsValue, context: &mut Context) -> String { // Use JSON.stringify to convert the value let json_obj = context.intrinsics().objects().json(); @@ -377,7 +376,7 @@ pub fn execute_vanilla_extract( // Execute the code context .eval(Source::from_bytes(js_code.as_bytes())) - .map_err(|e| format!("JS execution error: {}", e))?; + .map_err(|e| format!("JS execution error: {e}"))?; // Map placeholder IDs back to original variable names let mut result = std::mem::take(&mut collector.borrow_mut().styles); @@ -398,7 +397,7 @@ enum VarInfo { } /// Extract all variable names and their info from the original code -/// Returns (style_api_vars, exported_constants) +/// Returns (`style_api_vars`, `exported_constants`) fn extract_var_names(code: &str, _package: &str) -> Vec<(String, VarInfo)> { let allocator = Allocator::default(); let source_type = SourceType::ts(); @@ -527,7 +526,7 @@ fn remap_style_names( ) { // Generate a file-based prefix for unique class names // e.g., file_num 0 -> "f0" - let file_prefix = format!("f{}", file_num); + let file_prefix = format!("f{file_num}"); // Build mapping from placeholder ID to original name // The order of style() calls matches the order of variable declarations let mut placeholder_to_name: FxHashMap = FxHashMap::default(); @@ -562,7 +561,7 @@ fn remap_style_names( match info { VarInfo::StyleApi { exported } => { // First check if this is a fontFace (uses __font_N__ placeholder) - let font_placeholder = format!("__font_{}__", font_idx); + let font_placeholder = format!("__font_{font_idx}__"); if let Some((json, font_family, _)) = old_font_faces.remove(&font_placeholder) { font_placeholder_to_name.insert(font_placeholder, name.clone()); new_font_faces.insert(name.clone(), (json, font_family, *exported)); @@ -571,7 +570,7 @@ fn remap_style_names( } // Check if this is a createGlobalTheme (uses __global_theme_N__ placeholder) - let global_theme_placeholder = format!("__global_theme_{}__", global_theme_idx); + let global_theme_placeholder = format!("__global_theme_{global_theme_idx}__"); if let Some(mut entry) = old_global_themes.remove(&global_theme_placeholder) { entry.exported = *exported; new_global_themes.insert(name.clone(), entry); @@ -579,7 +578,7 @@ fn remap_style_names( continue; } - let placeholder = format!("__style_{}__", style_idx); + let placeholder = format!("__style_{style_idx}__"); placeholder_to_name.insert(placeholder.clone(), name.clone()); if let Some(mut entry) = old_styles.remove(&placeholder) { @@ -609,7 +608,7 @@ fn remap_style_names( } // Generate unique class name: file_prefix + variable_name - let class_name = format!("{}_{}", file_prefix, name); + let class_name = format!("{file_prefix}_{name}"); // Add CSS variables to global_styles with class selector if !entry.css_vars.is_empty() { @@ -618,13 +617,13 @@ fn remap_style_names( entry .css_vars .iter() - .map(|(var_name, value)| format!("\"{}\": \"{}\"", var_name, value)) + .map(|(var_name, value)| format!("\"{var_name}\": \"{value}\"")) .collect::>() .join(", ") ); collected .global_styles - .push((format!(".{}", class_name), vars_json)); + .push((format!(".{class_name}"), vars_json)); } entry.exported = *exported; @@ -688,23 +687,10 @@ fn remap_style_names( }) .collect(); - // Replace __font_N__ placeholders in style JSON with font-family names + // Replace placeholders in a single pass per style JSON. + // This is needed for font-family references and selectors like `${parent}:hover &`. for entry in new_styles.values_mut() { - for (placeholder, font_family) in &font_family_map { - if entry.json.contains(placeholder) { - entry.json = entry.json.replace(placeholder, font_family); - } - } - } - - // Replace __style_N__ placeholders in style JSON with variable names - // This is needed for selectors that reference other styles like `${parent}:hover &` - for entry in new_styles.values_mut() { - for (placeholder, var_name) in &placeholder_to_name { - if entry.json.contains(placeholder) { - entry.json = entry.json.replace(placeholder, var_name); - } - } + replace_placeholders_in_json(&mut entry.json, &font_family_map, &placeholder_to_name); } collected.styles = new_styles; @@ -718,6 +704,45 @@ fn remap_style_names( collected.themes = new_themes; } +fn replace_placeholders_in_json( + json: &mut String, + font_family_map: &FxHashMap<&str, &str>, + placeholder_to_name: &FxHashMap, +) { + let source = json.as_str(); + let mut search_start = 0; + let mut last_copied = 0; + let mut output = None::; + + while let Some(relative_start) = source[search_start..].find("__") { + let start = search_start + relative_start; + let Some(relative_end) = source[start + 2..].find("__") else { + break; + }; + let end = start + 2 + relative_end + 2; + let placeholder = &source[start..end]; + let replacement = font_family_map + .get(placeholder) + .copied() + .or_else(|| placeholder_to_name.get(placeholder).map(String::as_str)); + + if let Some(replacement) = replacement { + let output = output.get_or_insert_with(|| String::with_capacity(source.len())); + output.push_str(&source[last_copied..start]); + output.push_str(replacement); + last_copied = end; + search_start = end; + } else { + search_start = start + 2; + } + } + + if let Some(mut output) = output { + output.push_str(&source[last_copied..]); + *json = output; + } +} + /// Convert TypeScript to JavaScript using Oxc Transformer and replace imports fn preprocess_typescript(code: &str, package: &str) -> String { let allocator = Allocator::default(); @@ -737,21 +762,19 @@ fn preprocess_typescript(code: &str, package: &str) -> String { let _ = Transformer::new(&allocator, path, &options).build_with_scoping(scoping, &mut program); // Generate JavaScript - let mut js_code = Codegen::new().build(&program).code; + let js_code = Codegen::new().build(&program).code; // Replace import from package with our mock object destructuring // e.g., import { style } from '@devup-ui/react' -> const { style } = __vanilla_extract__; // Note: Import aliases (like @vanilla-extract/css) are already transformed by import_alias_visit - let import_patterns = [ - format!("from \"{}\"", package), - format!("from '{}'", package), - ]; + let import_patterns = [format!("from \"{package}\""), format!("from '{package}'")]; // Process all import patterns (multiple imports may exist) - let lines: Vec<&str> = js_code.lines().collect(); - let mut new_lines = Vec::with_capacity(lines.len()); - - for line in lines { + let mut transformed = String::with_capacity(js_code.len()); + for (idx, line) in js_code.lines().enumerate() { + if idx > 0 { + transformed.push('\n'); + } let mut matched = false; for pattern in &import_patterns { if line.contains(pattern) { @@ -760,25 +783,33 @@ fn preprocess_typescript(code: &str, package: &str) -> String { && let Some(end) = line.find('}') { let imports = &line[start + 1..end]; - new_lines.push(format!("const {{{}}} = __vanilla_extract__;", imports)); + transformed.push_str("const {"); + transformed.push_str(imports); + transformed.push_str("} = __vanilla_extract__;"); matched = true; break; } } } if !matched { - new_lines.push(line.to_string()); + transformed.push_str(strip_export_keyword(line)); } } - js_code = new_lines.join("\n"); - - // Remove 'export' keyword (boa doesn't support ES modules) - js_code = js_code.replace("export const ", "const "); - js_code = js_code.replace("export let ", "let "); - js_code = js_code.replace("export var ", "var "); - js_code = js_code.replace("export function ", "function "); + transformed +} - js_code +fn strip_export_keyword(line: &str) -> &str { + line.strip_prefix("export ").map_or(line, |rest| { + if rest.starts_with("const ") + || rest.starts_with("let ") + || rest.starts_with("var ") + || rest.starts_with("function ") + { + rest + } else { + line + } + }) } /// Register vanilla-extract mock APIs in the JS context @@ -905,7 +936,7 @@ fn register_vanilla_extract_apis( .borrow_mut() .styles .vars - .insert(id.clone(), (var_name.clone(), false)); + .insert(id, (var_name.clone(), false)); // Return just the CSS custom property name, without var() wrapper Ok(JsValue::from(js_string!(var_name))) }) @@ -932,7 +963,7 @@ fn register_vanilla_extract_apis( .borrow_mut() .styles .font_faces - .insert(id.clone(), (json, font_family.clone(), false)); + .insert(id.clone(), (json, font_family, false)); // Return the placeholder ID - will be replaced in code generation Ok(JsValue::from(js_string!(id))) @@ -972,7 +1003,7 @@ fn register_vanilla_extract_apis( // var_value is now just "--var-0" (CSS custom property name) // Return var(--var-0, fallback) - let result = format!("var({}, {})", var_value, fallback); + let result = format!("var({var_value}, {fallback})"); Ok(JsValue::from(js_string!(result))) }) }; @@ -1072,7 +1103,7 @@ fn register_vanilla_extract_apis( .borrow_mut() .styles .layers - .insert(id.clone(), (name.clone(), false)); + .insert(id, (name.clone(), false)); Ok(JsValue::from(js_string!(name))) }) }; @@ -1090,21 +1121,20 @@ fn register_vanilla_extract_apis( .borrow_mut() .styles .containers - .insert(id.clone(), (container_name.clone(), false)); + .insert(id, (container_name.clone(), false)); Ok(JsValue::from(js_string!(container_name))) }) }; // createGlobalTheme() function - let collector_global_theme = collector.clone(); + let collector_global_theme = collector; let create_global_theme_fn = unsafe { NativeFunction::from_closure(move |_this, args, ctx| { let placeholder_id = next_global_theme_id(&collector_global_theme); let selector = args .get_or_undefined(0) .to_string(ctx) - .map(|s| s.to_std_string_escaped()) - .unwrap_or_else(|_| ":root".to_string()); + .map_or_else(|_| ":root".to_string(), |s| s.to_std_string_escaped()); let theme_obj = args.get_or_undefined(1); // Collect CSS variables and build new object with var() references @@ -1165,7 +1195,7 @@ fn register_vanilla_extract_apis( // Register as global __vanilla_extract__ context .register_global_property(js_string!("__vanilla_extract__"), ve_obj, Attribute::all()) - .map_err(|e| format!("Failed to register __vanilla_extract__: {}", e))?; + .map_err(|e| format!("Failed to register __vanilla_extract__: {e}"))?; Ok(()) } @@ -1174,15 +1204,15 @@ fn register_vanilla_extract_apis( /// Returns a set of style names that need to be extracted first pub fn find_selector_references(collected: &CollectedStyles) -> FxHashSet { let mut referenced = rustc_hash::FxHashSet::default(); - let style_names: FxHashSet<&str> = collected.styles.keys().map(|s| s.as_str()).collect(); + let style_names: FxHashSet<&str> = collected.styles.keys().map(String::as_str).collect(); for entry in collected.styles.values() { // Check if this style's JSON contains references to other style names for style_name in &style_names { // Look for patterns like "stylename:" or "stylename " in selectors // The JSON has selectors like {"selectors":{"parent:hover &":{...}}} - if entry.json.contains(&format!("\"{}:", style_name)) - || entry.json.contains(&format!("\"{} ", style_name)) + if entry.json.contains(&format!("\"{style_name}:")) + || entry.json.contains(&format!("\"{style_name} ")) { referenced.insert(style_name.to_string()); } @@ -1201,7 +1231,9 @@ pub fn collected_styles_to_code_partial( let mut output = String::new(); if !style_names.is_empty() { - write!(output, "import {{ css }} from '{}'", package).unwrap(); + output.push_str("import { css } from '"); + output.push_str(package); + output.push('\''); } // Generate only the specified styles @@ -1217,7 +1249,11 @@ pub fn collected_styles_to_code_partial( if !output.is_empty() { output.push('\n'); } - write!(output, "const {} = css({})", name, entry.json).unwrap(); + output.push_str("const "); + output.push_str(name); + output.push_str(" = css("); + output.push_str(&entry.json); + output.push(')'); } output @@ -1269,10 +1305,10 @@ pub fn collected_styles_to_code_with_classes( .iter() .map(|(style_name, class_name)| { ( - format!("\"{}:", style_name), - format!("\"{}:", class_name), - format!("\"{} ", style_name), - format!("\"{} ", class_name), + format!("\"{style_name}:"), + format!("\"{class_name}:"), + format!("\"{style_name} "), + format!("\"{class_name} "), ) }) .collect(); @@ -1295,7 +1331,7 @@ pub fn collected_styles_to_code_with_classes( } if entry.bases.is_empty() { - code_parts.push(format!("{}const {} = css({})", prefix, name, json)); + code_parts.push(format!("{prefix}const {name} = css({json})")); } else { // Composition: merge all base styles let mut merged_parts = Vec::new(); @@ -1320,7 +1356,7 @@ pub fn collected_styles_to_code_with_classes( merged_parts.push(own_inner.to_string()); } let merged_json = format!("{{{}}}", merged_parts.join(",")); - code_parts.push(format!("{}const {} = css({})", prefix, name, merged_json)); + code_parts.push(format!("{prefix}const {name} = css({merged_json})")); } } @@ -1364,7 +1400,7 @@ fn append_non_style_code( ) { // Generate globalCss calls for (selector, json) in &collected.global_styles { - code_parts.push(format!("globalCss({{ \"{}\": {} }})", selector, json)); + code_parts.push(format!("globalCss({{ \"{selector}\": {json} }})")); } // Generate @font-face rules @@ -1374,18 +1410,14 @@ fn append_non_style_code( let props = parse_font_face_json(json); let props_str = props .iter() - .map(|(k, v)| format!("{}: {}", k, v)) + .map(|(k, v)| format!("{k}: {v}")) .collect::>() .join(", "); let code = if props_str.is_empty() { - format!( - "globalCss({{ fontFaces: [{{ fontFamily: \"{}\" }}] }})", - font_family - ) + format!("globalCss({{ fontFaces: [{{ fontFamily: \"{font_family}\" }}] }})") } else { format!( - "globalCss({{ fontFaces: [{{ fontFamily: \"{}\", {} }}] }})", - font_family, props_str + "globalCss({{ fontFaces: [{{ fontFamily: \"{font_family}\", {props_str} }}] }})" ) }; code_parts.push(code); @@ -1399,7 +1431,7 @@ fn append_non_style_code( let vars_str = entry .css_vars .iter() - .map(|(var_name, value)| format!("\"{}\": \"{}\"", var_name, value)) + .map(|(var_name, value)| format!("\"{var_name}\": \"{value}\"")) .collect::>() .join(", "); code_parts.push(format!( @@ -1458,7 +1490,7 @@ fn append_non_style_code( } else { format!("css({})", variant.styles_json) }; - object_parts.push(format!(" {}: {}", variant_key, value)); + object_parts.push(format!(" {variant_key}: {value}")); } let prefix = if *exported { "export " } else { "" }; code_parts.push(format!( @@ -1474,7 +1506,7 @@ fn append_non_style_code( vars.sort_by_key(|(name, _)| *name); for (name, (value, exported)) in vars { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, value)); + code_parts.push(format!("{prefix}const {name} = \"{value}\"")); } // Generate fontFace declarations @@ -1482,7 +1514,7 @@ fn append_non_style_code( font_faces.sort_by_key(|(name, _)| *name); for (name, (_, font_family, exported)) in font_faces { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, font_family)); + code_parts.push(format!("{prefix}const {name} = \"{font_family}\"")); } // Generate createContainer declarations @@ -1490,7 +1522,7 @@ fn append_non_style_code( containers.sort_by_key(|(name, _)| *name); for (name, (value, exported)) in containers { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, value)); + code_parts.push(format!("{prefix}const {name} = \"{value}\"")); } // Generate layer declarations @@ -1498,7 +1530,7 @@ fn append_non_style_code( layers.sort_by_key(|(name, _)| *name); for (name, (value, exported)) in layers { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, value)); + code_parts.push(format!("{prefix}const {name} = \"{value}\"")); } // Generate createGlobalTheme vars object declarations @@ -1514,7 +1546,7 @@ fn append_non_style_code( let mut constants: Vec<_> = collected.constant_exports.iter().collect(); constants.sort_by_key(|(name, _)| *name); for (name, value) in constants { - code_parts.push(format!("export const {} = {}", name, value)); + code_parts.push(format!("export const {name} = {value}")); } } @@ -1594,7 +1626,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S } let merged_json = format!("{{{}}}", merged_parts.join(",")); - code_parts.push(format!("{}const {} = css({})", prefix, name, merged_json)); + code_parts.push(format!("{prefix}const {name} = css({merged_json})")); } } @@ -1627,7 +1659,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S // Generate globalCss calls for (selector, json) in &collected.global_styles { - code_parts.push(format!("globalCss({{ \"{}\": {} }})", selector, json)); + code_parts.push(format!("globalCss({{ \"{selector}\": {json} }})")); } // Generate @font-face rules via globalCss fontFaces (sorted for deterministic output) @@ -1640,20 +1672,16 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S let props = parse_font_face_json(json); let props_str = props .iter() - .map(|(k, v)| format!("{}: {}", k, v)) + .map(|(k, v)| format!("{k}: {v}")) .collect::>() .join(", "); // Generate clean single-line globalCss call let code = if props_str.is_empty() { - format!( - "globalCss({{ fontFaces: [{{ fontFamily: \"{}\" }}] }})", - font_family - ) + format!("globalCss({{ fontFaces: [{{ fontFamily: \"{font_family}\" }}] }})") } else { format!( - "globalCss({{ fontFaces: [{{ fontFamily: \"{}\", {} }}] }})", - font_family, props_str + "globalCss({{ fontFaces: [{{ fontFamily: \"{font_family}\", {props_str} }}] }})" ) }; code_parts.push(code); @@ -1668,7 +1696,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S let vars_str = entry .css_vars .iter() - .map(|(var_name, value)| format!("\"{}\": \"{}\"", var_name, value)) + .map(|(var_name, value)| format!("\"{var_name}\": \"{value}\"")) .collect::>() .join(", "); code_parts.push(format!( @@ -1731,7 +1759,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S // No composition, just the styles format!("css({})", variant.styles_json) }; - object_parts.push(format!(" {}: {}", variant_key, value)); + object_parts.push(format!(" {variant_key}: {value}")); } let prefix = if *exported { "export " } else { "" }; @@ -1748,7 +1776,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S vars.sort_by_key(|(name, _)| *name); for (name, (value, exported)) in vars { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, value)); + code_parts.push(format!("{prefix}const {name} = \"{value}\"")); } // Generate fontFace declarations (sorted for deterministic output) @@ -1757,7 +1785,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S font_faces.sort_by_key(|(name, _)| *name); for (name, (_, font_family, exported)) in font_faces { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, font_family)); + code_parts.push(format!("{prefix}const {name} = \"{font_family}\"")); } // Generate createContainer declarations (sorted for deterministic output) @@ -1765,7 +1793,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S containers.sort_by_key(|(name, _)| *name); for (name, (value, exported)) in containers { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, value)); + code_parts.push(format!("{prefix}const {name} = \"{value}\"")); } // Generate layer declarations (sorted for deterministic output) @@ -1773,7 +1801,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S layers.sort_by_key(|(name, _)| *name); for (name, (value, exported)) in layers { let prefix = if *exported { "export " } else { "" }; - code_parts.push(format!("{}const {} = \"{}\"", prefix, name, value)); + code_parts.push(format!("{prefix}const {name} = \"{value}\"")); } // Generate createGlobalTheme vars object declarations (sorted for deterministic output) @@ -1789,7 +1817,7 @@ pub fn collected_styles_to_code(collected: &CollectedStyles, package: &str) -> S let mut constants: Vec<_> = collected.constant_exports.iter().collect(); constants.sort_by_key(|(name, _)| *name); for (name, value) in constants { - code_parts.push(format!("export const {} = {}", name, value)); + code_parts.push(format!("export const {name} = {value}")); } code_parts.join("\n") @@ -1880,6 +1908,7 @@ fn parse_single_variant(value: &JsValue, context: &mut Context) -> StyleVariant } #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use super::*; use smallvec::smallvec; @@ -1902,13 +1931,11 @@ export const container = style({ background: "red" })"#; // The result should have destructuring from __vanilla_extract__ and no export keyword assert!( result.contains("__vanilla_extract__"), - "Expected __vanilla_extract__ but got: {}", - result + "Expected __vanilla_extract__ but got: {result}" ); assert!( !result.contains("export const"), - "Should not contain 'export const': {}", - result + "Should not contain 'export const': {result}" ); } @@ -1923,8 +1950,7 @@ export const container = style({ background: "red" })"#; // TypeScript interface should be stripped assert!( !result.contains("interface"), - "Should not contain interface: {}", - result + "Should not contain interface: {result}" ); } @@ -1945,8 +1971,7 @@ export const button = style({ color: "blue" })"#; let result = execute_vanilla_extract(code, "@devup-ui/react", "test.css.ts").unwrap(); assert!( result.styles.len() >= 2, - "Expected at least 2 styles but got: {:?}", - result + "Expected at least 2 styles but got: {result:?}" ); } @@ -1959,20 +1984,18 @@ export const container = style({ background: "red", padding: 16 })"#; let generated = super::collected_styles_to_code(&collected, "@devup-ui/react"); assert!( !generated.is_empty(), - "Expected non-empty generated code. Collected: {:?}", - collected + "Expected non-empty generated code. Collected: {collected:?}" ); assert!( generated.contains("css("), - "Expected css() call in generated code: {}", - generated + "Expected css() call in generated code: {generated}" ); } #[test] fn test_full_flow_multiline() { // Test exactly what lib.rs extract function does (with already-transformed imports) - let code = r#"import { style } from '@devup-ui/react' + let code = r"import { style } from '@devup-ui/react' export const hello = style({ cursor: 'pointer', fontSize: 32, @@ -1982,7 +2005,7 @@ export const hello = style({ export const text = style({ color: 'var(--text)', }) -"#; +"; let package = "@devup-ui/react"; let filename = "styles.css.ts"; @@ -1997,19 +2020,17 @@ export const text = style({ Ok(collected) => { assert!( !collected.styles.is_empty(), - "Styles should not be empty. Collected: {:?}", - collected + "Styles should not be empty. Collected: {collected:?}" ); let generated = super::collected_styles_to_code(&collected, package); assert!( !generated.is_empty(), - "Generated code should not be empty. Generated: {}", - generated + "Generated code should not be empty. Generated: {generated}" ); - println!("Generated code:\n{}", generated); + println!("Generated code:\n{generated}"); } Err(e) => { - panic!("execute_vanilla_extract failed: {}", e); + panic!("execute_vanilla_extract failed: {e}"); } } } @@ -2066,9 +2087,9 @@ export const button = style({ background: primaryColor, padding: spacing })"#; #[test] fn test_execute_vanilla_extract_with_computed_value() { // Test computed values - let code = r#"import { style } from '@devup-ui/react' + let code = r"import { style } from '@devup-ui/react' const base = 8; -export const box = style({ padding: base * 2, margin: base / 2 })"#; +export const box = style({ padding: base * 2, margin: base / 2 })"; let result = execute_vanilla_extract(code, "@devup-ui/react", "test.css.ts").unwrap(); assert!(result.styles.contains_key("box")); let entry = &result.styles["box"]; @@ -2078,7 +2099,7 @@ export const box = style({ padding: base * 2, margin: base / 2 })"#; entry.json ); assert!( - entry.json.contains("4"), + entry.json.contains('4'), "Expected margin 4 in JSON: {}", entry.json ); @@ -2110,12 +2131,12 @@ export const extended = style({ ...baseStyle, background: "red" })"#; assert!(result.styles.contains_key("extended")); let entry = &result.styles["extended"]; assert!( - entry.json.contains("8"), + entry.json.contains('8'), "Expected padding 8 in JSON: {}", entry.json ); assert!( - entry.json.contains("4"), + entry.json.contains('4'), "Expected margin 4 in JSON: {}", entry.json ); @@ -2129,7 +2150,7 @@ export const extended = style({ ...baseStyle, background: "red" })"#; #[test] fn test_execute_vanilla_extract_create_theme_contract() { // Test createThemeContract + createTheme - let code = r#"import { createThemeContract, createTheme } from '@devup-ui/react' + let code = r"import { createThemeContract, createTheme } from '@devup-ui/react' const vars = createThemeContract({ color: { brand: null, @@ -2141,7 +2162,7 @@ export const lightTheme = createTheme(vars, { brand: 'blue', text: 'black' } -})"#; +})"; let result = execute_vanilla_extract(code, "@devup-ui/react", "test.css.ts").unwrap(); // Check that themes were collected @@ -2160,8 +2181,7 @@ export const lightTheme = createTheme(vars, { let theme_entry = &result.themes["lightTheme"]; assert!( !theme_entry.css_vars.is_empty(), - "Expected CSS vars in theme: {:?}", - theme_entry + "Expected CSS vars in theme: {theme_entry:?}" ); // Check that CSS vars are correct @@ -2170,8 +2190,7 @@ export const lightTheme = createTheme(vars, { css_vars .iter() .any(|(name, val)| name == "--color-brand" && val == "blue"), - "Expected --color-brand: blue in {:?}", - css_vars + "Expected --color-brand: blue in {css_vars:?}" ); } @@ -2885,11 +2904,11 @@ export const lightTheme = createTheme(vars, { #[test] fn test_extract_var_names_non_style_api() { // Test extract_var_names with non-style-api expressions - let code = r#"import { style } from '@devup-ui/react' + let code = r"import { style } from '@devup-ui/react' export const CONSTANT = 42; export const OBJECT = { key: 'value' }; export const computed = 1 + 2; -"#; +"; let vars = super::extract_var_names(code, "@devup-ui/react"); // Should have constants assert!(vars.iter().any(|(name, _)| name == "CONSTANT")); @@ -2899,8 +2918,8 @@ export const computed = 1 + 2; #[test] fn test_preprocess_typescript_single_quotes() { // Test preprocess with single quotes in import - let code = r#"import { style } from '@devup-ui/react' -export const box = style({ padding: 8 })"#; + let code = r"import { style } from '@devup-ui/react' +export const box = style({ padding: 8 })"; let result = super::preprocess_typescript(code, "@devup-ui/react"); assert!(result.contains("__vanilla_extract__")); assert!(!result.contains("export const")); @@ -2967,9 +2986,7 @@ export const box = style({ padding: 8 })"#; ); let class_map: rustc_hash::FxHashMap = - [("parent".to_string(), "a".to_string())] - .into_iter() - .collect(); + std::iter::once(("parent".to_string(), "a".to_string())).collect(); let code = super::collected_styles_to_code_with_classes(&collected, "@devup-ui/react", &class_map); assert!(code.contains("a:hover")); @@ -3322,7 +3339,7 @@ export const box = style({ padding: 8 })"#; collected.styles.insert( "box".to_string(), StyleEntry { - json: r#"{}"#.to_string(), + json: r"{}".to_string(), exported: true, bases: SmallVec::new(), }, @@ -3388,7 +3405,7 @@ export const box = style({ padding: 8 })"#; ); let class_map: rustc_hash::FxHashMap = - [("box".to_string(), "a".to_string())].into_iter().collect(); + std::iter::once(("box".to_string(), "a".to_string())).collect(); let code = super::collected_styles_to_code_with_classes(&collected, "@devup-ui/react", &class_map); @@ -3404,7 +3421,7 @@ export const box = style({ padding: 8 })"#; collected.styles.insert( "box".to_string(), StyleEntry { - json: r#"{}"#.to_string(), + json: r"{}".to_string(), exported: true, bases: SmallVec::new(), }, @@ -3533,12 +3550,12 @@ export const box = style({ padding: 8 })"#; let mut collected = CollectedStyles::default(); collected.font_faces.insert( "customFont".to_string(), - (r#"{}"#.to_string(), "__devup_font_custom".to_string(), true), + (r"{}".to_string(), "__devup_font_custom".to_string(), true), ); collected.font_faces.insert( "internalFont".to_string(), ( - r#"{}"#.to_string(), + r"{}".to_string(), "__devup_font_internal".to_string(), false, ), @@ -3605,11 +3622,11 @@ export const box = style({ padding: 8 })"#; fn test_style_with_non_object_argument() { // Test style() with primitive value (covers line 749) // This is tested through execute_vanilla_extract with edge case input - let code = r#" + let code = r" import { style } from '@devup-ui/react' // This should still work - style with null or undefined would be an edge case export const empty = style({}) -"#; +"; let result = super::execute_vanilla_extract(code, "@devup-ui/react", "test.css.ts"); assert!(result.is_ok()); } @@ -3617,10 +3634,10 @@ export const empty = style({}) #[test] fn test_style_with_object_no_length() { // Test style() with regular object (covers line 745) - let code = r#" + let code = r" import { style } from '@devup-ui/react' export const box = style({ padding: 8, margin: 4 }) -"#; +"; let result = super::execute_vanilla_extract(code, "@devup-ui/react", "test.css.ts"); assert!(result.is_ok()); let collected = result.unwrap(); diff --git a/libs/extractor/src/visit.rs b/libs/extractor/src/visit.rs index 157b13e9..c9f61007 100644 --- a/libs/extractor/src/visit.rs +++ b/libs/extractor/src/visit.rs @@ -59,22 +59,22 @@ pub struct DevupVisitor<'a> { pub css_files: Vec, pub styles: FxHashSet, styled_import: Option, - /// Tracked StyleX default/namespace import name (e.g., `stylex` from `import stylex from '...'`) + /// Tracked `StyleX` default/namespace import name (e.g., `stylex` from `import stylex from '...'`) stylex_import: Option, - /// Tracked StyleX named imports (e.g., `create` from `import { create } from '...'`) + /// Tracked `StyleX` named imports (e.g., `create` from `import { create } from '...'`) stylex_named_imports: FxHashMap, - /// Pending StyleX namespace map from the most recent stylex.create() call. - /// Set in visit_expression, consumed in visit_variable_declarator. + /// Pending `StyleX` namespace map from the most recent `stylex.create()` call. + /// Set in `visit_expression`, consumed in `visit_variable_declarator`. stylex_pending_create: Option>, - /// Maps variable names to their namespace→className mappings from stylex.create(). + /// Maps variable names to their namespace→className mappings from `stylex.create()`. /// e.g., "styles" → { "base" → "a b", "active" → "c" } stylex_namespaces: FxHashMap>, - /// Pending keyframe animation name from most recent stylex.keyframes() call. + /// Pending keyframe animation name from most recent `stylex.keyframes()` call. stylex_pending_keyframe_name: Option, /// Maps variable names to their keyframe animation names. /// e.g., "fadeIn" → "a-a" stylex_keyframe_names: FxHashMap, - /// Pending JSXFragment children from dynamic `as` prop resolution. + /// Pending `JSXFragment` children from dynamic `as` prop resolution. /// Set in `visit_jsx_element`, consumed in `visit_expression` to replace /// `Expression::JSXElement` with `Expression::JSXFragment`. pending_fragment_children: Option>>, @@ -126,7 +126,10 @@ impl<'a> DevupVisitor<'a> { } // Check named import call: create(...) if let Expression::Identifier(ident) = callee - && let Some(StylexFunction::Create) = self.stylex_named_imports.get(ident.name.as_str()) + && matches!( + self.stylex_named_imports.get(ident.name.as_str()), + Some(StylexFunction::Create) + ) { return true; } @@ -146,14 +149,17 @@ impl<'a> DevupVisitor<'a> { } // Check named import call: props(...) if let Expression::Identifier(ident) = callee - && let Some(StylexFunction::Props) = self.stylex_named_imports.get(ident.name.as_str()) + && matches!( + self.stylex_named_imports.get(ident.name.as_str()), + Some(StylexFunction::Props) + ) { return true; } false } - /// Check if a callee is stylex.keyframes() or named keyframes() call. + /// Check if a callee is `stylex.keyframes()` or named `keyframes()` call. fn is_stylex_keyframes_call(&self, callee: &Expression) -> bool { if let Some(stylex_name) = &self.stylex_import && let Expression::StaticMemberExpression(member) = callee @@ -164,25 +170,27 @@ impl<'a> DevupVisitor<'a> { return true; } if let Expression::Identifier(ident) = callee - && let Some(StylexFunction::Keyframes) = - self.stylex_named_imports.get(ident.name.as_str()) + && matches!( + self.stylex_named_imports.get(ident.name.as_str()), + Some(StylexFunction::Keyframes) + ) { return true; } false } - /// Resolve stylex.props() arguments to className expressions and style properties. - /// Returns (class_exprs, style_props) where style_props are CSS variable assignments + /// Resolve `stylex.props()` arguments to className expressions and style properties. + /// Returns (`class_exprs`, `style_props`) where `style_props` are CSS variable assignments /// from dynamic namespace calls like `styles.bar(h)`. fn resolve_stylex_props_args( &self, - arguments: &mut oxc_allocator::Vec<'a, Argument<'a>>, + arguments: &oxc_allocator::Vec<'a, Argument<'a>>, ) -> (Vec>, Vec>) { let mut class_exprs: Vec> = vec![]; let mut style_props: Vec> = vec![]; - for arg in arguments.iter() { + for arg in arguments { let expr = arg.to_expression(); // Check for dynamic namespace call first: styles.bar(h) if let Expression::CallExpression(call) = expr @@ -200,7 +208,7 @@ impl<'a> DevupVisitor<'a> { (class_exprs, style_props) } - /// Resolve a dynamic namespace call like `styles.bar(h)` to (className, style_props). + /// Resolve a dynamic namespace call like `styles.bar(h)` to (className, `style_props`). fn resolve_stylex_dynamic_call( &self, call: &CallExpression<'a>, @@ -241,7 +249,7 @@ impl<'a> DevupVisitor<'a> { } } - /// Resolve a single stylex.props() argument to a className expression. + /// Resolve a single `stylex.props()` argument to a className expression. fn resolve_stylex_arg(&self, expr: &Expression<'a>) -> Option> { match expr { // styles.base → StaticMemberExpression @@ -313,7 +321,6 @@ impl<'a> DevupVisitor<'a> { } // false, null, undefined, 0, "" → falsy, skip Expression::BooleanLiteral(b) if !b.value => None, - Expression::NullLiteral(_) => None, Expression::NumericLiteral(n) if n.value == 0.0 => None, Expression::StringLiteral(s) if s.value.is_empty() => None, // Anything else we can't resolve → skip @@ -456,7 +463,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { if class_name_str.is_empty() { class_name_str = included_class; } else { - class_name_str = format!("{} {}", included_class, class_name_str); + class_name_str = format!("{included_class} {class_name_str}"); } } } @@ -524,7 +531,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { if let Expression::CallExpression(call) = it && self.is_stylex_props_call(&call.callee) { - let (class_exprs, style_props) = self.resolve_stylex_props_args(&mut call.arguments); + let (class_exprs, style_props) = self.resolve_stylex_props_args(&call.arguments); // Build className expression using existing merge utility let class_name_expr = merge_expression_for_class_name(&self.ast, class_exprs) @@ -576,19 +583,9 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { if let Some(util_import_key) = util_import_key && let Some(util_type) = self.util_imports.get(&util_import_key) { - if call.arguments.len() != 1 { - *it = match util_type.as_ref() { - UtilType::Css | UtilType::Keyframes => { - self.ast - .expression_string_literal(SPAN, self.ast.str(""), None) - } - UtilType::GlobalCss => { - self.ast.expression_identifier(SPAN, self.ast.str("")) - } - }; - } else { + if call.arguments.len() == 1 { let r = util_type.as_ref(); - *it = if let UtilType::Css = r { + *it = if matches!(r, UtilType::Css) { let ExtractResult { mut styles, style_order, @@ -628,7 +625,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { .expression_string_literal(SPAN, self.ast.str(""), None) } } - } else if let UtilType::Keyframes = r { + } else if matches!(r, UtilType::Keyframes) { let KeyframesExtractResult { keyframes } = extract_keyframes_from_expression( &self.ast, @@ -668,6 +665,16 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { })); self.ast.expression_identifier(SPAN, self.ast.str("")) } + } else { + *it = match util_type.as_ref() { + UtilType::Css | UtilType::Keyframes => { + self.ast + .expression_string_literal(SPAN, self.ast.str(""), None) + } + UtilType::GlobalCss => { + self.ast.expression_identifier(SPAN, self.ast.str("")) + } + }; } } } else if let Expression::TaggedTemplateExpression(tag) = it @@ -676,13 +683,13 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { { let css_str = { let mut s = String::new(); - for quasi in tag.quasi.quasis.iter() { + for quasi in &tag.quasi.quasis { s.push_str(quasi.value.raw.as_str()); } s }; let r = css_type.as_ref(); - *it = if let UtilType::Css = r { + *it = if matches!(r, UtilType::Css) { let styles = css_to_style_literal(&tag.quasi, 0, &None); let class_name = gen_class_names( &self.ast, @@ -694,7 +701,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { self.split_filename.as_deref(), ); - self.styles.extend(styles.into_iter().map(|ex| ex.into())); + self.styles.extend(styles.into_iter().map(Into::into)); if let Some(cls) = class_name { cls } else { @@ -702,7 +709,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { .expression_string_literal(SPAN, self.ast.str(""), None) } // already set style order - } else if let UtilType::Keyframes = r { + } else if matches!(r, UtilType::Keyframes) { let keyframes = ExtractKeyframes { keyframes: keyframes_to_keyframes_style(&css_str), }; @@ -864,7 +871,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { s.set_style_order(*order); } s - })) + })); }); alt_props_styles.iter().rev().for_each(|style| { self.styles.extend(style.extract().into_iter().map(|mut s| { @@ -872,7 +879,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { s.set_style_order(*order); } s - })) + })); }); } else { let style_order = parsed_style_order.as_static(); @@ -882,7 +889,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { s.set_style_order(order); }); s - })) + })); }); if let Expression::ObjectExpression(obj) = it.arguments[1].to_expression_mut() { @@ -1103,10 +1110,10 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { if !duplicate_set.contains(&name) { duplicate_set.insert(name.clone()); if property_name == "styleOrder" { - parsed_style_order = jsx_expression_to_style_order( - attr.value.as_ref().unwrap(), - self.ast.allocator, - ); + if let Some(value) = attr.value.as_ref() { + parsed_style_order = + jsx_expression_to_style_order(value, self.ast.allocator); + } } else if property_name == "props" { if let Some(value) = attr.value.as_ref() && let JSXAttributeValue::ExpressionContainer(expr) = value @@ -1139,10 +1146,10 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { &None, LiteralHandling::ExpandResponsiveThemeToken, ); - if !styles.is_empty() { - props_styles.extend(styles.into_iter().rev()); - } else { + if styles.is_empty() { attrs.insert(i, attr); + } else { + props_styles.extend(styles.into_iter().rev()); } } else { attrs.insert(i, attr); @@ -1190,7 +1197,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { s.set_style_order(*order); } s - })) + })); }); alt_props_styles.iter().rev().for_each(|style| { self.styles.extend(style.extract().into_iter().map(|mut s| { @@ -1198,7 +1205,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { s.set_style_order(*order); } s - })) + })); }); } else { let style_order = parsed_style_order.as_static(); @@ -1244,7 +1251,7 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { elem.opening_element.name = ident.clone_in(self.ast.allocator); if let Some(el) = &mut elem.closing_element { - el.name = ident + el.name = ident; } } } diff --git a/libs/sheet/Cargo.toml b/libs/sheet/Cargo.toml index a1774513..fb96383e 100644 --- a/libs/sheet/Cargo.toml +++ b/libs/sheet/Cargo.toml @@ -2,6 +2,14 @@ name = "sheet" version = "0.1.0" edition = "2024" +description = "CSS sheet generation and theme system for Devup UI" +license = "Apache-2.0" +repository = "https://github.com/dev-five-git/devup-ui" +keywords = ["css", "theme", "stylesheet", "react", "devup-ui"] +categories = ["development-tools", "wasm", "web-programming"] + +[lints] +workspace = true [dependencies] css = { path = "../css" } diff --git a/libs/sheet/benches/my_benchmark.rs b/libs/sheet/benches/my_benchmark.rs index a88d66ba..c4dc6617 100644 --- a/libs/sheet/benches/my_benchmark.rs +++ b/libs/sheet/benches/my_benchmark.rs @@ -1,12 +1,17 @@ use criterion::{Criterion, criterion_group, criterion_main}; use regex_lite::Regex; +use sheet::StyleSheet; +use sheet::theme::{ColorTheme, Theme, Typography}; use std::hint::black_box; use std::sync::LazyLock; -static VAR_RE: LazyLock = LazyLock::new(|| Regex::new(r"\$\w+").unwrap()); +static VAR_RE: LazyLock = LazyLock::new(|| { + Regex::new(r"\$\w+") + .unwrap_or_else(|err| panic!("invalid built-in regex pattern `\\$\\w+`: {err}")) +}); fn convert_theme_variable_value_a(value: &str) -> String { - if value.contains("$") { + if value.contains('$') { VAR_RE .replace_all(value, |caps: ®ex_lite::Captures| { format!("var(--{})", &caps[0][1..]) @@ -25,6 +30,81 @@ fn convert_theme_variable_value_b(value: &str) -> String { .to_string() } +fn make_large_theme() -> Theme { + let mut theme = Theme::default(); + let mut default_colors = ColorTheme::default(); + let mut dark_colors = ColorTheme::default(); + + for idx in 0..80 { + let name = format!("color.{idx}"); + default_colors.add_color(&name, &format!("#{idx:02x}{idx:02x}{idx:02x}")); + dark_colors.add_color( + &name, + &format!("#{:02x}{:02x}{:02x}", 255 - idx, 255 - idx, 255 - idx), + ); + } + theme.add_color_theme("default", default_colors); + theme.add_color_theme("dark", dark_colors); + + for idx in 0..80 { + theme.add_length( + "default", + &format!("space{idx}"), + vec![ + Some(format!("{}px", idx + 1)), + Some(format!("{}px", idx + 2)), + None, + Some(format!("{}px", idx + 4)), + ], + ); + theme.add_shadow( + "default", + &format!("shadow{idx}"), + vec![ + Some(format!("0 {}px {}px #0003", idx + 1, idx + 2)), + None, + Some(format!("0 {}px {}px #0004", idx + 2, idx + 4)), + ], + ); + } + + for idx in 0..40 { + theme.add_typography( + &format!("type{idx}"), + vec![ + Some(Typography::new( + Some("Inter".to_string()), + Some(format!("{}px", 12 + idx)), + Some("600".to_string()), + Some("1.4".to_string()), + None, + )), + Some(Typography::new( + Some("Inter".to_string()), + Some(format!("{}px", 14 + idx)), + Some("700".to_string()), + Some("1.5".to_string()), + Some("0.01em".to_string()), + )), + ], + ); + } + + theme +} + +fn make_large_sheet() -> StyleSheet { + let mut sheet = StyleSheet::default(); + sheet.set_theme(make_large_theme()); + for idx in 0..300 { + let class_name = format!("c{idx}"); + let property = if idx % 2 == 0 { "color" } else { "background" }; + let value = if idx % 3 == 0 { "$color.1" } else { "red" }; + sheet.add_property(&class_name, property, 0, value, None, None, Some("app.tsx")); + } + sheet +} + fn criterion_benchmark(c: &mut Criterion) { c.bench_function("convert_theme_variable_value_a", |b| { b.iter(|| { @@ -32,7 +112,7 @@ fn criterion_benchmark(c: &mut Criterion) { convert_theme_variable_value_a(black_box("red")); convert_theme_variable_value_a(black_box("solid 2px red")); convert_theme_variable_value_a(black_box("solid 2px $primary")); - }) + }); }); c.bench_function("convert_theme_variable_value_b", |b| { @@ -41,7 +121,17 @@ fn criterion_benchmark(c: &mut Criterion) { convert_theme_variable_value_b(black_box("red")); convert_theme_variable_value_b(black_box("solid 2px red")); convert_theme_variable_value_b(black_box("solid 2px $primary")); - }) + }); + }); + + c.bench_function("theme_to_css_large", |b| { + let theme = make_large_theme(); + b.iter(|| black_box(theme.to_css())); + }); + + c.bench_function("sheet_create_css_large", |b| { + let sheet = make_large_sheet(); + b.iter(|| black_box(sheet.create_css(Some("app.tsx"), false))); }); } diff --git a/libs/sheet/src/lib.rs b/libs/sheet/src/lib.rs index 746ed990..8a7cefec 100644 --- a/libs/sheet/src/lib.rs +++ b/libs/sheet/src/lib.rs @@ -17,11 +17,13 @@ use serde::{Deserialize, Deserializer, Serialize}; use std::borrow::Cow; use std::cmp::Ordering::Equal; use std::collections::{BTreeMap, BTreeSet}; -use std::fmt::Write; use std::sync::LazyLock; -trait ExtractStyle { - fn extract(&self) -> String; +macro_rules! push_fmt { + ($target:expr, $($arg:tt)*) => {{ + // `std::fmt::Write::write_fmt` on `&mut String` is infallible; discard result. + let _ = std::fmt::Write::write_fmt($target, format_args!($($arg)*)); + }}; } #[derive(Debug, Hash, Eq, PartialEq, Deserialize, Serialize, Clone)] @@ -35,7 +37,7 @@ pub struct StyleSheetProperty { pub value: String, #[serde(rename = "s")] pub selector: Option, - /// CSS layer name (from vanilla-extract layer()) + /// CSS layer name (from vanilla-extract `layer()`) #[serde(rename = "l", skip_serializing_if = "Option::is_none")] pub layer: Option, } @@ -72,20 +74,25 @@ impl Ord for StyleSheetProperty { } } -impl ExtractStyle for StyleSheetProperty { - fn extract(&self) -> String { - format!( - "{}{{{}:{}}}", - merge_selector(&self.class_name, self.selector.as_ref()), - self.property, - convert_theme_variable_value(&self.value) - ) +impl StyleSheetProperty { + fn write_extract(&self, css: &mut String) { + css.push_str(&merge_selector(&self.class_name, self.selector.as_ref())); + css.push('{'); + css.push_str(&self.property); + css.push(':'); + css.push_str(&convert_theme_variable_value(&self.value)); + css.push('}'); } } -static VAR_RE: LazyLock = LazyLock::new(|| Regex::new(r"\$[\w.]+").unwrap()); +fn compile_regex(pattern: &str) -> Regex { + Regex::new(pattern) + .unwrap_or_else(|err| panic!("invalid built-in regex pattern `{pattern}`: {err}")) +} + +static VAR_RE: LazyLock = LazyLock::new(|| compile_regex(r"\$[\w.]+")); static INTERFACE_KEY_RE: LazyLock = - LazyLock::new(|| Regex::new(r"^[a-zA-Z_$][a-zA-Z0-9_$]*$").unwrap()); + LazyLock::new(|| compile_regex(r"^[a-zA-Z_$][a-zA-Z0-9_$]*$")); /// Cached header string — computed once from compile-time included package.json static HEADER: LazyLock = LazyLock::new(|| { @@ -94,12 +101,10 @@ static HEADER: LazyLock = LazyLock::new(|| { version = include_str!("../../../bindings/devup-ui-wasm/package.json") .lines() .find(|line| line.contains("\"version\"")) - .unwrap() - .split(":") - .nth(1) - .unwrap() + .and_then(|line| line.split(':').nth(1)) + .unwrap_or("\"unknown\"") .trim() - .replace("\"", ""), + .replace('"', ""), ) }); @@ -107,7 +112,7 @@ fn convert_interface_key(key: &str) -> String { if INTERFACE_KEY_RE.is_match(key) { key.to_string() } else { - format!("[`{}`]", key.replace("`", "\\`")) + format!("[`{}`]", key.replace('`', "\\`")) } } @@ -130,12 +135,6 @@ pub struct StyleSheetCss { pub css: String, } -impl ExtractStyle for StyleSheetCss { - fn extract(&self) -> String { - self.css.clone() - } -} - type PropertyMap = BTreeMap>>; type KeyframesMap = BTreeMap>>>; @@ -153,9 +152,9 @@ where { let mut tmp_map: PropertyMap = BTreeMap::new(); - for (key, value) in value.into_iter() { + for (key, value) in value { let mut inner_tmp_map = BTreeMap::new(); - for (key, value) in value.into_iter() { + for (key, value) in value { inner_tmp_map.insert(key.parse().map_err(Error::custom)?, value); } tmp_map.insert(key.parse().map_err(Error::custom)?, inner_tmp_map); @@ -237,7 +236,7 @@ impl StyleSheet { property: property.to_string(), value: value.to_string(), selector: selector.cloned(), - layer: layer.map(|s| s.to_string()), + layer: layer.map(ToString::to_string), }) } @@ -341,7 +340,7 @@ impl StyleSheet { ) -> (bool, bool) { let mut collected = false; let mut updated_base_style = false; - for style in styles.iter() { + for style in styles { match style { ExtractStyleValue::Static(st) => { let resolved_value = @@ -351,13 +350,11 @@ impl StyleSheet { "box-shadow" => self .theme .get_default_shadow_value(token) - .map(str::to_string) - .unwrap_or_else(|| st.value().to_string()), + .map_or_else(|| st.value().to_string(), str::to_string), _ => self .theme .get_default_length_value(token) - .map(str::to_string) - .unwrap_or_else(|| st.value().to_string()), + .map_or_else(|| st.value().to_string(), str::to_string), } } else { st.value().to_string() @@ -375,10 +372,10 @@ impl StyleSheet { Some(&resolved_value), selector.as_deref(), st.style_order(), - if !single_css { Some(filename) } else { None }, + if single_css { None } else { Some(filename) }, ) } else { - match st.extract(if !single_css { Some(filename) } else { None }) { + match st.extract(if single_css { None } else { Some(filename) }) { StyleProperty::ClassName(cls) | StyleProperty::Variable { class_name: cls, .. @@ -393,7 +390,7 @@ impl StyleSheet { &resolved_value, st.selector(), st.style_order(), - if !single_css { Some(filename) } else { None }, + if single_css { None } else { Some(filename) }, st.layer(), ) { collected = true; @@ -407,19 +404,19 @@ impl StyleSheet { class_name, variable_name, .. - }) = style.extract(if !single_css { Some(filename) } else { None }) + }) = style.extract(if single_css { None } else { Some(filename) }) && self.add_property( &class_name, dy.property(), dy.level(), &if dy.important() { - format!("var({}) !important", variable_name) + format!("var({variable_name}) !important") } else { - format!("var({})", variable_name) + format!("var({variable_name})") }, dy.selector(), dy.style_order(), - if !single_css { Some(filename) } else { None }, + if single_css { None } else { Some(filename) }, ) { collected = true; @@ -432,7 +429,7 @@ impl StyleSheet { ExtractStyleValue::Keyframes(keyframes) => { if self.add_keyframes( &keyframes - .extract(if !single_css { Some(filename) } else { None }) + .extract(if single_css { None } else { Some(filename) }) .to_string(), keyframes .keyframes @@ -452,7 +449,7 @@ impl StyleSheet { ) }) .collect(), - if !single_css { Some(filename) } else { None }, + if single_css { None } else { Some(filename) }, ) { collected = true; } @@ -475,6 +472,7 @@ impl StyleSheet { (collected, updated_base_style) } + #[must_use] pub fn create_interface( &self, package_name: &str, @@ -512,16 +510,26 @@ impl StyleSheet { String::new() } else { let dollar_keys = |keys: BTreeSet| { - keys.into_iter() - .map(|key| format!("{}:null", convert_interface_key(&format!("${key}")))) - .collect::>() - .join(";") + let mut contents = String::new(); + for key in keys { + if !contents.is_empty() { + contents.push(';'); + } + contents.push_str(&convert_interface_key(&format!("${key}"))); + contents.push_str(":null"); + } + contents }; let plain_keys = |keys: BTreeSet| { - keys.into_iter() - .map(|key| format!("{}:null", convert_interface_key(&key))) - .collect::>() - .join(";") + let mut contents = String::new(); + for key in keys { + if !contents.is_empty() { + contents.push(';'); + } + contents.push_str(&convert_interface_key(&key)); + contents.push_str(":null"); + } + contents }; format!( "import \"{}\";declare module \"{}\"{{interface {}{{{}}}interface {}{{{}}}interface {}{{{}}}interface {}{{{}}}interface {}{{{}}}}}", @@ -550,9 +558,9 @@ impl StyleSheet { layered_styles: &mut BTreeMap>, // layer -> Vec<(selector, property, value)> ) -> String { // Estimate ~64 bytes per property for pre-allocation - let prop_count: usize = map.values().map(|s| s.len()).sum(); + let prop_count: usize = map.values().map(FxHashSet::len).sum(); let mut current_css = String::with_capacity(prop_count * 64); - for (level, props) in map.iter() { + for (level, props) in map { let (mut global_props, rest): (Vec<_>, Vec<_>) = props .iter() .partition(|prop| matches!(prop.selector, Some(StyleSelector::Global(_, _)))); @@ -583,8 +591,10 @@ impl StyleSheet { .iter() .enumerate() .find(|(idx, _)| (*idx as u8) == *level) - .map(|(_, bp)| *bp) - .unwrap_or_else(|| self.theme.breakpoints.last().cloned().unwrap_or(0)), + .map_or_else( + || self.theme.breakpoints.last().copied().unwrap_or(0), + |(_, bp)| *bp, + ), ) }; @@ -616,7 +626,7 @@ impl StyleSheet { } } if let Some(break_point) = break_point { - write!(current_css, "@media(min-width:{break_point}px){{").unwrap(); + push_fmt!(&mut current_css, "@media(min-width:{break_point}px){{"); } for (selector, props) in selector_map { current_css.push_str(selector); @@ -641,10 +651,10 @@ impl StyleSheet { if !sorted_props.is_empty() { if let Some(break_point) = break_point { - write!(current_css, "@media(min-width:{break_point}px){{").unwrap(); + push_fmt!(&mut current_css, "@media(min-width:{break_point}px){{"); } for prop in sorted_props { - current_css.push_str(&prop.extract()); + prop.write_extract(&mut current_css); } if break_point.is_some() { current_css.push('}'); @@ -654,50 +664,46 @@ impl StyleSheet { if let Some(break_point) = break_point { match kind { AtRuleKind::Media => { - write!( - current_css, + push_fmt!( + &mut current_css, "@media(min-width:{break_point}px)and {query}{{" - ) - .unwrap(); + ); } AtRuleKind::Supports => { - write!( - current_css, + push_fmt!( + &mut current_css, "@media(min-width:{break_point}px){{@supports{query}{{" - ) - .unwrap(); + ); } AtRuleKind::Container => { - write!( - current_css, + push_fmt!( + &mut current_css, "@media(min-width:{break_point}px){{@container{query}{{" - ) - .unwrap(); + ); } AtRuleKind::Layer => { - write!( - current_css, + push_fmt!( + &mut current_css, "@media(min-width:{break_point}px){{@layer {query}{{" - ) - .unwrap(); + ); } } for prop in props { - current_css.push_str(&prop.extract()); + prop.write_extract(&mut current_css); } match kind { AtRuleKind::Media => current_css.push('}'), _ => current_css.push_str("}}"), } } else { - write!(current_css, "@{kind}").unwrap(); + push_fmt!(&mut current_css, "@{kind}"); if query.starts_with('(') { - write!(current_css, "{query}{{").unwrap(); + push_fmt!(&mut current_css, "{query}{{"); } else { - write!(current_css, " {query}{{").unwrap(); + push_fmt!(&mut current_css, " {query}{{"); } for prop in props { - current_css.push_str(&prop.extract()); + prop.write_extract(&mut current_css); } current_css.push('}'); } @@ -707,18 +713,19 @@ impl StyleSheet { } #[inline] - fn create_header(&self) -> &'static str { + fn create_header() -> &'static str { &HEADER } + #[must_use] pub fn create_css(&self, filename: Option<&str>, import_main_css: bool) -> String { let mut css = String::with_capacity(4096); - css.push_str(self.create_header()); + css.push_str(Self::create_header()); for import in self.imports.values().flatten() { if import.starts_with('"') { - write!(css, "@import {import};").unwrap(); + push_fmt!(&mut css, "@import {import};"); } else { - write!(css, "@import \"{import}\";").unwrap(); + push_fmt!(&mut css, "@import \"{import}\";"); } } @@ -748,11 +755,12 @@ impl StyleSheet { let has_orders = !style_orders.is_empty(); if has_base || has_theme || has_orders { css.push_str("@layer "); - let mut first = true; - if has_base { + let mut first = if has_base { css.push('b'); - first = false; - } + false + } else { + true + }; if has_theme { if !first { css.push(','); @@ -765,31 +773,31 @@ impl StyleSheet { css.push(','); } first = false; - write!(css, "o{v}").unwrap(); + push_fmt!(&mut css, "o{v}"); } css.push(';'); } if !theme_css.is_empty() { - write!(css, "@layer t{{{theme_css}}}").unwrap(); + push_fmt!(&mut css, "@layer t{{{theme_css}}}"); } - for (_, font_faces) in self.font_faces.iter() { - for font_face in font_faces.iter() { + for font_faces in self.font_faces.values() { + for font_face in font_faces { css.push_str("@font-face{"); let mut first = true; - for (key, value) in font_face.iter() { + for (key, value) in font_face { if !first { css.push(';'); } first = false; - write!(css, "{key}:{value}").unwrap(); + push_fmt!(&mut css, "{key}:{value}"); } css.push('}'); } } // global css - for (_, _css) in self.css.iter() { - for _css in _css.iter() { + for _css in self.css.values() { + for _css in _css { css.push_str(&_css.css); } } @@ -799,7 +807,7 @@ impl StyleSheet { BTreeMap::new(); let base_css = self.create_style_with_layers(&base_styles, &mut layered_styles); if !base_css.is_empty() { - write!(css, "@layer b{{{base_css}}}").unwrap(); + push_fmt!(&mut css, "@layer b{{{base_css}}}"); } // Generate @layer declarations and wrapped styles for custom layers @@ -827,7 +835,7 @@ impl StyleSheet { .push((property, value)); } - write!(css, "@layer {layer_name}{{").unwrap(); + push_fmt!(&mut css, "@layer {layer_name}{{"); for (selector, props) in selector_map { css.push_str(&selector); css.push('{'); @@ -837,7 +845,7 @@ impl StyleSheet { css.push(';'); } first = false; - write!(css, "{p}:{v}").unwrap(); + push_fmt!(&mut css, "{p}:{v}"); } css.push('}'); } @@ -854,16 +862,16 @@ impl StyleSheet { if let Some(keyframes) = self.keyframes.get(filename.unwrap_or_default()) { for (name, map) in keyframes { - write!(css, "@keyframes {name}{{").unwrap(); - for (key, props) in map.iter() { - write!(css, "{key}{{").unwrap(); + push_fmt!(&mut css, "@keyframes {name}{{"); + for (key, props) in map { + push_fmt!(&mut css, "{key}{{"); let mut first = true; - for (k, v) in props.iter() { + for (k, v) in props { if !first { css.push(';'); } first = false; - write!(css, "{k}:{v}").unwrap(); + push_fmt!(&mut css, "{k}:{v}"); } css.push('}'); } @@ -873,7 +881,7 @@ impl StyleSheet { // order if let Some(maps) = self.properties.get(filename.unwrap_or_default()) { - for (style_order, map) in maps.iter() { + for (style_order, map) in maps { if *style_order == 0 { // base style was created in global css continue; @@ -885,7 +893,7 @@ impl StyleSheet { if *style_order == 255 { css.push_str(¤t_css); } else { - write!(css, "@layer o{style_order}{{{current_css}}}").unwrap(); + push_fmt!(&mut css, "@layer o{style_order}{{{current_css}}}"); } } } @@ -895,6 +903,7 @@ impl StyleSheet { } #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use crate::theme::{ColorTheme, Typography}; @@ -2030,6 +2039,37 @@ mod tests { "ShadowsInterface", "ThemeInterface" )); + + // Multiple typography keys + multiple color themes exercise the + // `plain_keys` semicolon separator (joins 2+ entries). + let mut sheet = StyleSheet::default(); + let mut theme = Theme::default(); + let mut light_theme = ColorTheme::default(); + light_theme.add_color("primary", "#000"); + let mut dark_theme = ColorTheme::default(); + dark_theme.add_color("primary", "#fff"); + theme.add_color_theme("default", light_theme); + theme.add_color_theme("dark", dark_theme); + let make_typography = || { + Typography::new( + Some("Arial".to_string()), + Some("16px".to_string()), + Some("400".to_string()), + Some("1.5".to_string()), + Some("0.5".to_string()), + ) + }; + theme.add_typography("heading", vec![Some(make_typography())]); + theme.add_typography("body", vec![Some(make_typography())]); + sheet.set_theme(theme); + assert_debug_snapshot!(sheet.create_interface( + "package", + "ColorInterface", + "TypographyInterface", + "LengthInterface", + "ShadowsInterface", + "ThemeInterface" + )); } #[test] @@ -2037,27 +2077,11 @@ mod tests { let mut sheet = StyleSheet::default(); let mut keyframes: BTreeMap> = BTreeMap::new(); - let mut from_props = BTreeSet::new(); - from_props.insert(StyleSheetProperty { - class_name: String::from("test"), - property: String::from("opacity"), - value: String::from("0"), - selector: None, - layer: None, - }); keyframes.insert( String::from("from"), vec![(String::from("opacity"), String::from("0"))], ); - let mut to_props = BTreeSet::new(); - to_props.insert(StyleSheetProperty { - class_name: String::from("test"), - property: String::from("opacity"), - value: String::from("1"), - selector: None, - layer: None, - }); keyframes.insert( String::from("to"), vec![(String::from("opacity"), String::from("1"))], @@ -2068,27 +2092,11 @@ mod tests { assert_debug_snapshot!(past.split("*/").nth(1).unwrap()); let mut keyframes: BTreeMap> = BTreeMap::new(); - let mut from_props = BTreeSet::new(); - from_props.insert(StyleSheetProperty { - class_name: String::from("test"), - property: String::from("opacity"), - value: String::from("0"), - selector: None, - layer: None, - }); keyframes.insert( String::from("from"), vec![(String::from("opacity"), String::from("0"))], ); - let mut to_props = BTreeSet::new(); - to_props.insert(StyleSheetProperty { - class_name: String::from("test"), - property: String::from("opacity"), - value: String::from("1"), - selector: None, - layer: None, - }); keyframes.insert( String::from("to"), vec![(String::from("opacity"), String::from("1"))], @@ -2297,14 +2305,30 @@ mod tests { } #[test] - fn test_stylesheet_css_extract() { + fn test_stylesheet_css_struct() { let css_entry = StyleSheetCss { css: "div{display:flex}".to_string(), }; - assert_eq!(css_entry.extract(), "div{display:flex}"); + assert_eq!(css_entry.css, "div{display:flex}"); let empty = StyleSheetCss { css: String::new() }; - assert_eq!(empty.extract(), ""); + assert_eq!(empty.css, ""); + } + + #[test] + fn test_stylesheet_property_ord_no_selectors() { + // Both sides without selectors: branches on property then value. + let make = |property: &str, value: &str| StyleSheetProperty { + class_name: "a".to_string(), + property: property.to_string(), + value: value.to_string(), + selector: None, + layer: None, + }; + assert_eq!(make("color", "red").cmp(&make("color", "red")), Equal); + assert!(make("color", "red") < make("color", "white")); + assert!(make("color", "red") < make("display", "block")); + assert!(make("display", "block") > make("color", "white")); } #[test] diff --git a/libs/sheet/src/snapshots/sheet__tests__get_theme_interface-5.snap b/libs/sheet/src/snapshots/sheet__tests__get_theme_interface-5.snap new file mode 100644 index 00000000..2c5ac937 --- /dev/null +++ b/libs/sheet/src/snapshots/sheet__tests__get_theme_interface-5.snap @@ -0,0 +1,5 @@ +--- +source: libs/sheet/src/lib.rs +expression: "sheet.create_interface(\"package\", \"ColorInterface\", \"TypographyInterface\",\n\"LengthInterface\", \"ShadowsInterface\", \"ThemeInterface\")" +--- +"import \"package\";declare module \"package\"{interface ColorInterface{$primary:null}interface TypographyInterface{body:null;heading:null}interface LengthInterface{}interface ShadowsInterface{}interface ThemeInterface{dark:null;default:null}}" diff --git a/libs/sheet/src/theme.rs b/libs/sheet/src/theme.rs index 2b878922..3d8608a2 100644 --- a/libs/sheet/src/theme.rs +++ b/libs/sheet/src/theme.rs @@ -2,9 +2,9 @@ use css::optimize_value::optimize_value; use serde::{Deserialize, Deserializer, Serialize}; use serde_json::Value; use std::collections::{BTreeMap, HashMap}; -use std::fmt::Write; +use std::fmt::Write as _; -/// ColorEntry stores both the original key (for TypeScript interface) and CSS key (for CSS variables) +/// `ColorEntry` stores both the original key (for TypeScript interface) and CSS key (for CSS variables) #[derive(Debug, Clone, Serialize)] pub struct ColorEntry { /// Original key with dots for TypeScript interface (e.g., "gray.100") @@ -15,20 +15,20 @@ pub struct ColorEntry { pub value: String, } -/// ColorTheme stores flattened color entries +/// `ColorTheme` stores flattened color entries /// Supports: -/// - Simple: `primary: "#000"` -> interface_key: "primary", css_key: "primary" -/// - Dot notation: `"primary.100": "#000"` -> interface_key: "primary.100", css_key: "primary-100" -/// - Nested object: `hello: { 100: "#000" }` -> interface_key: "hello.100", css_key: "hello-100" -/// - Deep nested: `gray: { light: { 100: "#000" } }` -> interface_key: "gray.light.100", css_key: "gray-light-100" +/// - Simple: `primary: "#000"` -> `interface_key`: "primary", `css_key`: "primary" +/// - Dot notation: `"primary.100": "#000"` -> `interface_key`: "primary.100", `css_key`: "primary-100" +/// - Nested object: `hello: { 100: "#000" }` -> `interface_key`: "hello.100", `css_key`: "hello-100" +/// - Deep nested: `gray: { light: { 100: "#000" } }` -> `interface_key`: "gray.light.100", `css_key`: "gray-light-100" #[derive(Default, Serialize, Debug)] pub struct ColorTheme { - /// Map from css_key to ColorEntry for quick lookup + /// Map from `css_key` to `ColorEntry` for quick lookup entries: HashMap, } -/// Recursively flatten a JSON value into ColorEntry list -/// interface_prefix uses dots, css_prefix uses dashes +/// Recursively flatten a JSON value into `ColorEntry` list +/// `interface_prefix` uses dots, `css_prefix` uses dashes fn flatten_color_value( interface_prefix: &str, css_prefix: &str, @@ -52,7 +52,7 @@ fn flatten_color_value( let new_interface_prefix = if interface_prefix.is_empty() { key.clone() } else { - format!("{}.{}", interface_prefix, key) + format!("{interface_prefix}.{key}") }; let new_css_prefix = if css_prefix.is_empty() { key.replace('.', "-") @@ -64,8 +64,7 @@ fn flatten_color_value( Ok(()) } _ => Err(format!( - "color value for key '{}' must be a string or an object, got {:?}", - interface_prefix, value + "color value for key '{interface_prefix}' must be a string or an object, got {value:?}" )), } } @@ -112,17 +111,19 @@ impl ColorTheme { self.entries.keys() } - /// Get iterator over (css_key, value) pairs for CSS generation + /// Get iterator over (`css_key`, value) pairs for CSS generation pub fn css_entries(&self) -> impl Iterator { self.entries.iter().map(|(k, e)| (k, &e.value)) } /// Get value by CSS key + #[must_use] pub fn get(&self, css_key: &str) -> Option<&String> { self.entries.get(css_key).map(|e| &e.value) } /// Check if CSS key exists + #[must_use] pub fn contains_key(&self, css_key: &str) -> bool { self.entries.contains_key(css_key) } @@ -159,7 +160,8 @@ pub struct Typography { pub letter_spacing: Option, } impl Typography { - pub fn new( + #[must_use] + pub const fn new( font_family: Option, font_size: Option, font_weight: Option, @@ -198,12 +200,12 @@ fn deserialize_typo_prop(value: &Value) -> Result>, String> { Value::Null => result.push(None), Value::String(s) => result.push(Some(s.clone())), Value::Number(n) => result.push(Some(n.to_string())), - _ => return Err(format!("Invalid typography property value: {:?}", item)), + _ => return Err(format!("Invalid typography property value: {item:?}")), } } Ok(result) } - _ => Err(format!("Invalid typography property value: {:?}", value)), + _ => Err(format!("Invalid typography property value: {value:?}")), } } @@ -327,8 +329,7 @@ impl<'de> Deserialize<'de> for Typographies { Ok(Self(result)) } _ => Err(D::Error::custom(format!( - "Typography must be an object or array, got: {:?}", - value + "Typography must be an object or array, got: {value:?}" ))), } } @@ -373,13 +374,14 @@ impl<'de> Deserialize<'de> for TokenValues { } } -/// LengthTheme stores a set of named length tokens for one theme variant -/// e.g., { "gutterMd": ["2px", "4px"], "gutterLg": "16px", "gap": 8 } +/// `LengthTheme` stores named length tokens for one theme variant. +/// +/// e.g., `{ "gutterMd": ["2px", "4px"], "gutterLg": "16px", "gap": 8 }` /// Plain numbers are multiplied by 4 and suffixed with "px" (e.g., 8 → "32px"). pub type LengthTheme = BTreeMap; -/// ShadowTheme stores a set of named shadow tokens for one theme variant -/// e.g., { "sm": "0 1px 2px rgba(0,0,0,0.1)", "md": ["0 2px 4px rgba(0,0,0,0.1)", null, "0 4px 8px rgba(0,0,0,0.2)"] } +/// `ShadowTheme` stores a set of named shadow tokens for one theme variant +/// e.g., `{ "sm": "0 1px 2px rgba(0,0,0,0.1)", "md": ["0 2px 4px rgba(0,0,0,0.1)", null, "0 4px 8px rgba(0,0,0,0.2)"] }` pub type ShadowTheme = BTreeMap; fn default_variant_key(themes: &BTreeMap) -> Option<&str> { @@ -518,6 +520,7 @@ impl Theme { default_variant_key(&self.colors).map(str::to_string) } + #[must_use] pub fn get_length_token_levels(&self) -> BTreeMap> { self.length.values().flat_map(|theme| theme.iter()).fold( BTreeMap::>::new(), @@ -536,6 +539,7 @@ impl Theme { ) } + #[must_use] pub fn get_shadow_token_levels(&self) -> BTreeMap> { self.shadows.values().flat_map(|theme| theme.iter()).fold( BTreeMap::>::new(), @@ -554,6 +558,7 @@ impl Theme { ) } + #[must_use] pub fn get_default_length_value(&self, token: &str) -> Option<&str> { let default_key = default_variant_key(&self.length)?; self.length @@ -564,6 +569,7 @@ impl Theme { .as_deref() } + #[must_use] pub fn get_default_shadow_value(&self, token: &str) -> Option<&str> { let default_key = default_variant_key(&self.shadows)?; self.shadows @@ -574,6 +580,7 @@ impl Theme { .as_deref() } + #[must_use] pub fn to_css(&self) -> String { let mut theme_declaration = String::new(); @@ -598,25 +605,26 @@ impl Theme { entries .iter() .find(|(k, _)| *k != &default_theme_key) - .map(|(k, _)| k.to_string()) + .map(|(k, _)| (*k).clone()) } else { None }; for (theme_name, theme_properties) in entries { - let mut css_contents = vec![]; - let mut css_color_contents = vec![]; + let mut theme_contents = String::new(); let theme_key = if *theme_name == *default_theme_key { None } else { Some(theme_name) }; if let Some(theme_key) = theme_key { - write!(theme_declaration, ":root[data-theme={theme_key}]{{").unwrap(); - css_contents.push("color-scheme:dark".to_string()); + theme_declaration.push_str(":root[data-theme="); + theme_declaration.push_str(theme_key); + theme_declaration.push_str("]{"); + push_css_declaration(&mut theme_contents, "color-scheme:dark"); } else { theme_declaration.push_str(":root{"); if !single_theme { - css_contents.push("color-scheme:light".to_string()); + push_css_declaration(&mut theme_contents, "color-scheme:light"); } } for (prop, value) in theme_properties.css_entries() { @@ -634,7 +642,7 @@ impl Theme { }) }) { - css_color_contents.push(format!("--{prop}:{default_value}")); + push_css_variable(&mut theme_contents, prop, &default_value); } } else { let other_theme_value = @@ -651,85 +659,91 @@ impl Theme { }) }); // default theme - css_color_contents.push(format!( - "--{prop}:{}", - if let Some(other_theme_value) = other_theme_value { - format!("light-dark({optimized_value},{other_theme_value})") - } else { - optimized_value - } - )); + if !theme_contents.is_empty() { + theme_contents.push(';'); + } + theme_contents.push_str("--"); + theme_contents.push_str(prop); + theme_contents.push(':'); + if let Some(other_theme_value) = other_theme_value { + theme_contents.push_str("light-dark("); + theme_contents.push_str(&optimized_value); + theme_contents.push(','); + theme_contents.push_str(&other_theme_value); + theme_contents.push(')'); + } else { + theme_contents.push_str(&optimized_value); + } } } - theme_declaration.push_str( - [css_contents, css_color_contents] - .concat() - .join(";") - .as_str(), - ); + theme_declaration.push_str(&theme_contents); theme_declaration.push('}'); } } let mut css = theme_declaration; - let mut level_map = BTreeMap::>::new(); - for ty in self.typography.iter() { + let mut level_map = BTreeMap::::new(); + for ty in &self.typography { for (idx, t) in ty.1.0.iter().enumerate() { if let Some(t) = t { let resolve = |v: &str| -> String { if let Some(token) = v.strip_prefix('$') { - format!("var(--{})", token) + format!("var(--{token})") } else { optimize_value(v) } }; - let css_content = [ - t.font_family - .as_ref() - .map(|v| format!("font-family:{}", resolve(v))) - .unwrap_or_default(), - t.font_size - .as_ref() - .map(|v| format!("font-size:{}", resolve(v))) - .unwrap_or_default(), - t.font_weight - .as_ref() - .map(|v| format!("font-weight:{}", resolve(v))) - .unwrap_or_default(), - t.line_height - .as_ref() - .map(|v| format!("line-height:{}", resolve(v))) - .unwrap_or_default(), - t.letter_spacing - .as_ref() - .map(|v| format!("letter-spacing:{}", resolve(v))) - .unwrap_or_default(), - ] - .iter() - .filter_map(|v| { - let v = v.trim(); - if v.is_empty() { None } else { Some(v) } - }) - .collect::>() - .join(";"); + let mut css_content = String::new(); + push_typography_property( + &mut css_content, + "font-family", + t.font_family.as_deref(), + &resolve, + ); + push_typography_property( + &mut css_content, + "font-size", + t.font_size.as_deref(), + &resolve, + ); + push_typography_property( + &mut css_content, + "font-weight", + t.font_weight.as_deref(), + &resolve, + ); + push_typography_property( + &mut css_content, + "line-height", + t.line_height.as_deref(), + &resolve, + ); + push_typography_property( + &mut css_content, + "letter-spacing", + t.letter_spacing.as_deref(), + &resolve, + ); if !css_content.is_empty() { - level_map - .entry(idx as u8) - .or_default() - .push(format!(".typo-{}{{{}}}", ty.0, css_content)); + let level_css = level_map.entry(idx as u8).or_default(); + level_css.push_str(".typo-"); + level_css.push_str(ty.0); + level_css.push('{'); + level_css.push_str(&css_content); + level_css.push('}'); } } } } for (level, css_vec) in level_map { if level == 0 { - css.push_str(css_vec.join("").as_str()); - } else if let Some(media) = self - .breakpoints - .get(level as usize) - .map(|v| format!("(min-width:{v}px)")) - { - css.push_str(&format!("@media{media}{{{}}}", css_vec.join(""))); + css.push_str(&css_vec); + } else if let Some(bp) = self.breakpoints.get(level as usize) { + write!(css, "@media(min-width:{bp}px)") + .unwrap_or_else(|err| panic!("failed to write CSS into string: {err}")); + css.push('{'); + css.push_str(&css_vec); + css.push('}'); } } // Generate CSS variables for length tokens @@ -746,16 +760,14 @@ impl Theme { themes: &BTreeMap>, breakpoints: &[u16], ) { - if themes.is_empty() { - return; - } - // Safe: themes is non-empty, so at least one key exists - let default_key = themes + let Some(default_key) = themes .keys() .find(|k| *k == "default") .or_else(|| themes.keys().next()) .cloned() - .unwrap(); + else { + return; + }; // Sort variants: default first, then alphabetical let mut sorted_variants: Vec<_> = themes.iter().collect(); @@ -774,9 +786,9 @@ impl Theme { format!(":root[data-theme={variant_name}]") }; - // Group variables by breakpoint level - let mut level_map = BTreeMap::>::new(); - for (name, values) in token_theme.iter() { + // Group variables by breakpoint level without allocating one String per variable. + let mut level_map = BTreeMap::::new(); + for (name, values) in *token_theme { for (idx, val) in values.0.iter().enumerate() { if let Some(v) = val { let optimized = optimize_value(v); @@ -790,10 +802,14 @@ impl Theme { .is_some_and(|d| optimize_value(d) == optimized) }); if !is_same_as_default { - level_map - .entry(idx) - .or_default() - .push(format!("--{name}:{optimized}")); + let vars = level_map.entry(idx).or_default(); + if !vars.is_empty() { + vars.push(';'); + } + vars.push_str("--"); + vars.push_str(name); + vars.push(':'); + vars.push_str(&optimized); } } } @@ -801,12 +817,18 @@ impl Theme { for (level, vars) in &level_map { if !vars.is_empty() { - let vars_str = vars.join(";"); if *level == 0 { - write!(css, "{selector}{{{vars_str}}}").unwrap(); + css.push_str(&selector); + css.push('{'); + css.push_str(vars); + css.push('}'); } else if let Some(bp) = breakpoints.get(*level) { - write!(css, "@media(min-width:{bp}px){{{selector}{{{vars_str}}}}}") - .unwrap(); + write!(css, "@media(min-width:{bp}px){{") + .unwrap_or_else(|err| panic!("failed to write CSS into string: {err}")); + css.push_str(&selector); + css.push('{'); + css.push_str(vars); + css.push_str("}}"); } } } @@ -814,12 +836,57 @@ impl Theme { } } +fn push_typography_property( + css_content: &mut String, + property: &str, + value: Option<&str>, + resolve: &impl Fn(&str) -> String, +) { + let Some(value) = value else { + return; + }; + let value = value.trim(); + if value.is_empty() { + return; + } + if !css_content.is_empty() { + css_content.push(';'); + } + css_content.push_str(property); + css_content.push(':'); + css_content.push_str(&resolve(value)); +} + +fn push_css_declaration(css_content: &mut String, declaration: &str) { + if !css_content.is_empty() { + css_content.push(';'); + } + css_content.push_str(declaration); +} + +fn push_css_variable(css_content: &mut String, name: &str, value: &str) { + if !css_content.is_empty() { + css_content.push(';'); + } + css_content.push_str("--"); + css_content.push_str(name); + css_content.push(':'); + css_content.push_str(value); +} + #[cfg(test)] +#[allow(clippy::expect_used, clippy::unwrap_used)] mod tests { use super::*; use insta::assert_debug_snapshot; use rstest::rstest; + fn make_named_color_theme(name: &str, value: &str) -> ColorTheme { + let mut ct = ColorTheme::default(); + ct.add_color(name, value); + ct + } + #[test] fn to_css_from_theme() { let mut theme = Theme::default(); @@ -876,44 +943,37 @@ mod tests { ); assert_eq!(theme.to_css(), ""); - // Helper to create a ColorTheme with a single color - fn make_color_theme(name: &str, value: &str) -> ColorTheme { - let mut ct = ColorTheme::default(); - ct.add_color(name, value); - ct - } - let mut theme = Theme::default(); - theme.add_color_theme("default", make_color_theme("primary", "#000")); - theme.add_color_theme("dark", make_color_theme("primary", "#000")); + theme.add_color_theme("default", make_named_color_theme("primary", "#000")); + theme.add_color_theme("dark", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); - theme.add_color_theme("dark", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); + theme.add_color_theme("dark", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("a", make_color_theme("primary", "#000")); - theme.add_color_theme("b", make_color_theme("primary", "#000")); + theme.add_color_theme("a", make_named_color_theme("primary", "#000")); + theme.add_color_theme("b", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); - theme.add_color_theme("b", make_color_theme("primary", "#000")); - theme.add_color_theme("a", make_color_theme("primary", "#000")); - theme.add_color_theme("c", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); + theme.add_color_theme("b", make_named_color_theme("primary", "#000")); + theme.add_color_theme("a", make_named_color_theme("primary", "#000")); + theme.add_color_theme("c", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); let mut theme = Theme::default(); - theme.add_color_theme("light", make_color_theme("primary", "#000")); - theme.add_color_theme("b", make_color_theme("primary", "#001")); - theme.add_color_theme("a", make_color_theme("primary", "#002")); - theme.add_color_theme("c", make_color_theme("primary", "#000")); + theme.add_color_theme("light", make_named_color_theme("primary", "#000")); + theme.add_color_theme("b", make_named_color_theme("primary", "#001")); + theme.add_color_theme("a", make_named_color_theme("primary", "#002")); + theme.add_color_theme("c", make_named_color_theme("primary", "#000")); assert_debug_snapshot!(theme.to_css()); } @@ -1119,7 +1179,7 @@ mod tests { fn test_nested_with_number_value_should_fail() { // Nested object with non-string value should fail let result: Result = serde_json::from_str( - r##"{ + r#"{ "colors": { "light": { "gray": { @@ -1127,7 +1187,7 @@ mod tests { } } } - }"##, + }"#, ); assert!(result.is_err()); } @@ -1186,20 +1246,17 @@ mod tests { .unwrap(); let light = theme.colors.get("light").unwrap(); - let interface_keys: Vec<_> = light.interface_keys().cloned().collect(); - let css_keys: Vec<_> = light.css_keys().cloned().collect(); - // Interface key uses dots - assert!(interface_keys.contains(&"a.b.c".to_string())); + assert!(light.interface_keys().any(|key| key == "a.b.c")); // CSS key uses dashes - assert!(css_keys.contains(&"a-b-c".to_string())); + assert!(light.css_keys().any(|key| key == "a-b-c")); } #[test] fn test_compact_typography_format() { // Test new compact format with property-level arrays let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "fontFamily": "Pretendard", @@ -1210,7 +1267,7 @@ mod tests { "letterSpacing": "-0.03em" } } - }"##, + }"#, ) .unwrap(); @@ -1239,7 +1296,7 @@ mod tests { fn test_compact_typography_all_arrays() { // Test compact format where multiple properties have arrays let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "body": { "fontFamily": "Pretendard", @@ -1248,7 +1305,7 @@ mod tests { "lineHeight": [1.3, null, 1.5] } } - }"##, + }"#, ) .unwrap(); @@ -1276,7 +1333,7 @@ mod tests { fn test_compact_typography_single_value() { // Test compact format with all single values (no arrays) let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "caption": { "fontFamily": "Pretendard", @@ -1287,7 +1344,7 @@ mod tests { "letterSpacing": "-0.03em" } } - }"##, + }"#, ) .unwrap(); @@ -1306,7 +1363,7 @@ mod tests { fn test_traditional_typography_array_still_works() { // Ensure backward compatibility with traditional array format let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": [ { @@ -1326,7 +1383,7 @@ mod tests { } ] } - }"##, + }"#, ) .unwrap(); @@ -1348,7 +1405,7 @@ mod tests { fn test_compact_typography_css_output() { // Verify CSS output is correct for compact format let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "fontFamily": "Pretendard", @@ -1357,7 +1414,7 @@ mod tests { "lineHeight": 1.3 } } - }"##, + }"#, ) .unwrap(); @@ -1376,11 +1433,11 @@ mod tests { fn test_invalid_top_level_array_should_fail() { // Top-level array that's not traditional format should fail let result: Result = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": ["38px", null, "52px"] } - }"##, + }"#, ); assert!(result.is_err()); let err = result.unwrap_err().to_string(); @@ -1390,7 +1447,7 @@ mod tests { #[test] fn test_typography_variable_reference() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "body": { "fontSize": "$text", @@ -1398,20 +1455,18 @@ mod tests { "fontWeight": 400 } } - }"##, + }"#, ) .unwrap(); let css = theme.to_css(); assert!( css.contains("font-size:var(--text)"), - "Expected font-size:var(--text), got: {}", - css + "Expected font-size:var(--text), got: {css}" ); assert!( css.contains("line-height:var(--leading)"), - "Expected line-height:var(--leading), got: {}", - css + "Expected line-height:var(--leading), got: {css}" ); assert!(css.contains("font-weight:400")); } @@ -1419,7 +1474,7 @@ mod tests { #[test] fn test_typography_variable_reference_responsive() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "heading": [ { @@ -1435,20 +1490,18 @@ mod tests { } ] } - }"##, + }"#, ) .unwrap(); let css = theme.to_css(); assert!( css.contains("font-size:var(--textSm)"), - "Expected font-size:var(--textSm), got: {}", - css + "Expected font-size:var(--textSm), got: {css}" ); assert!( css.contains("font-size:var(--textLg)"), - "Expected font-size:var(--textLg), got: {}", - css + "Expected font-size:var(--textLg), got: {css}" ); } @@ -1456,7 +1509,7 @@ mod tests { fn test_mixed_typography_formats() { // Test that both formats can coexist in the same theme let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": [ { "fontFamily": "Pretendard", "fontSize": "38px" }, @@ -1468,7 +1521,7 @@ mod tests { "fontSize": ["14px", null, "16px"] } } - }"##, + }"#, ) .unwrap(); @@ -1493,14 +1546,14 @@ mod tests { fn test_deserialize_typo_prop_null_value() { // Test compact format with null values in arrays let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "fontFamily": null, "fontSize": ["14px", null, "16px"] } } - }"##, + }"#, ) .unwrap(); @@ -1518,13 +1571,13 @@ mod tests { fn test_deserialize_typo_prop_invalid_array_value() { // Test that invalid values in typography arrays fail let result: Result = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "fontSize": ["14px", {"invalid": "object"}, "16px"] } } - }"##, + }"#, ); assert!(result.is_err()); } @@ -1533,13 +1586,13 @@ mod tests { fn test_deserialize_typo_prop_invalid_single_value() { // Test that invalid single value fails let result: Result = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "fontSize": true } } - }"##, + }"#, ); assert!(result.is_err()); } @@ -1548,11 +1601,11 @@ mod tests { fn test_typography_invalid_type() { // Test that typography with invalid type (string) fails let result: Result = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": "invalid string" } - }"##, + }"#, ); assert!(result.is_err()); let err = result.unwrap_err().to_string(); @@ -1621,11 +1674,11 @@ mod tests { fn test_typography_empty_properties_all_none() { // Test that empty compact format with no properties creates None let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "empty": {} } - }"##, + }"#, ) .unwrap(); @@ -1638,13 +1691,13 @@ mod tests { fn test_typography_with_only_letter_spacing() { // Test typography with only letterSpacing property let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "letterSpacing": ["-0.02em", null, "-0.03em"] } } - }"##, + }"#, ) .unwrap(); @@ -1675,7 +1728,7 @@ mod tests { fn test_traditional_typography_with_invalid_item() { // Test that traditional array with invalid item (not object/null) fails let result: Result = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": [ { "fontFamily": "Arial" }, @@ -1683,7 +1736,7 @@ mod tests { null ] } - }"##, + }"#, ); // This should fail because "invalid string item" is not null or object // But the current implementation detects this as non-traditional and fails differently @@ -1694,14 +1747,14 @@ mod tests { fn test_compact_typography_different_array_lengths() { // Test when different properties have different array lengths let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "fontSize": ["14px", "16px"], "fontWeight": ["400", "500", "600", "700"] } } - }"##, + }"#, ) .unwrap(); @@ -1746,14 +1799,14 @@ mod tests { fn test_typography_float_values() { // Test that float values are properly converted let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "typography": { "h1": { "lineHeight": [1.2, 1.5, 1.8], "fontWeight": [400.5, 500, 600] } } - }"##, + }"#, ) .unwrap(); @@ -1772,11 +1825,11 @@ mod tests { fn test_typographies_direct_traditional_array_deserialize() { // Directly deserialize Typographies to ensure Value::Object branch is covered (line 183) let typographies: Typographies = serde_json::from_str( - r##"[ + r#"[ { "fontFamily": "Arial", "fontSize": "16px" }, null, { "fontFamily": "Helvetica", "fontSize": "18px" } - ]"##, + ]"#, ) .unwrap(); @@ -1796,11 +1849,11 @@ mod tests { fn test_typographies_direct_invalid_array_item() { // Directly deserialize Typographies with invalid array item to cover line 188 let result: Result = serde_json::from_str( - r##"[ + r#"[ { "fontFamily": "Arial" }, "invalid string", null - ]"##, + ]"#, ); assert!(result.is_err()); @@ -1812,11 +1865,11 @@ mod tests { fn test_typographies_direct_number_in_array() { // Test with number in traditional array to ensure error branch is hit let result: Result = serde_json::from_str( - r##"[ + r#"[ { "fontFamily": "Arial" }, 123, null - ]"##, + ]"#, ); assert!(result.is_err()); @@ -1828,11 +1881,11 @@ mod tests { fn test_typographies_direct_bool_in_array() { // Test with boolean in traditional array let result: Result = serde_json::from_str( - r##"[ + r#"[ null, { "fontFamily": "Arial" }, true - ]"##, + ]"#, ); assert!(result.is_err()); @@ -1844,11 +1897,11 @@ mod tests { fn test_typographies_direct_nested_array_in_array() { // Test with nested array in traditional array let result: Result = serde_json::from_str( - r##"[ + r#"[ { "fontFamily": "Arial" }, ["nested", "array"], null - ]"##, + ]"#, ); assert!(result.is_err()); @@ -1861,13 +1914,13 @@ mod tests { #[test] fn test_length_deserialization_single_string() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gutterMd": "8px" } } - }"##, + }"#, ) .unwrap(); @@ -1880,13 +1933,13 @@ mod tests { #[test] fn test_length_deserialization_single_number() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gap": 4 } } - }"##, + }"#, ) .unwrap(); @@ -1899,13 +1952,13 @@ mod tests { #[test] fn test_length_deserialization_responsive_array() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gutterMd": ["2px", "4px"] } } - }"##, + }"#, ) .unwrap(); @@ -1919,13 +1972,13 @@ mod tests { #[test] fn test_length_deserialization_responsive_array_with_nulls() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gutterLg": ["8px", null, null, null, "16px"] } } - }"##, + }"#, ) .unwrap(); @@ -1942,13 +1995,13 @@ mod tests { #[test] fn test_length_deserialization_number_in_array() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gap": [4, null, 8] } } - }"##, + }"#, ) .unwrap(); @@ -1963,13 +2016,13 @@ mod tests { #[test] fn test_length_deserialization_invalid_value() { let result: Result = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gap": true } } - }"##, + }"#, ); assert!(result.is_err()); } @@ -1977,13 +2030,13 @@ mod tests { #[test] fn test_length_deserialization_invalid_array_value() { let result: Result = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gap": [true] } } - }"##, + }"#, ); assert!(result.is_err()); } @@ -2113,7 +2166,7 @@ mod tests { #[test] fn test_length_deserialization_from_json() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "length": { "default": { "gutterMd": ["2px", "4px"], @@ -2121,7 +2174,7 @@ mod tests { "gap": 8 } } - }"##, + }"#, ) .unwrap(); @@ -2146,14 +2199,14 @@ mod tests { #[test] fn test_shadow_deserialization_from_json() { let theme: Theme = serde_json::from_str( - r##"{ + r#"{ "shadows": { "default": { "sm": "0 1px 2px rgba(0,0,0,0.1)", "md": ["0 2px 4px rgba(0,0,0,0.1)", null, "0 4px 8px rgba(0,0,0,0.2)"] } } - }"##, + }"#, ) .unwrap(); @@ -2256,7 +2309,7 @@ mod tests { #[test] fn test_token_values_deserialize_invalid_array_item() { // Covers _ branch inside array match - let result: Result = serde_json::from_str(r#"[true]"#); + let result: Result = serde_json::from_str(r"[true]"); assert!(result.is_err()); } @@ -2380,4 +2433,65 @@ mod tests { let empty = Theme::default(); assert_eq!(empty.get_default_shadow_value("card"), None); } + + // ===== Coverage: push_typography_property edge cases ===== + + #[test] + fn test_push_typography_property_none_value() { + // Covers early return when value is None + let mut css = String::new(); + push_typography_property(&mut css, "font-family", None, &|v| v.to_string()); + assert_eq!(css, ""); + } + + #[test] + fn test_push_typography_property_empty_value() { + // Covers early return when trimmed value is empty + let mut css = String::new(); + push_typography_property(&mut css, "font-family", Some(""), &|v| v.to_string()); + assert_eq!(css, ""); + + // Whitespace-only also returns early + let mut css = String::new(); + push_typography_property(&mut css, "font-family", Some(" "), &|v| v.to_string()); + assert_eq!(css, ""); + } + + #[test] + fn test_push_typography_property_appends_separator() { + // Empty css → no leading semicolon + let mut css = String::new(); + push_typography_property(&mut css, "font-family", Some("Arial"), &|v| v.to_string()); + assert_eq!(css, "font-family:Arial"); + + // Non-empty css → prepends ';' before declaration + push_typography_property(&mut css, "font-size", Some("16px"), &|v| v.to_string()); + assert_eq!(css, "font-family:Arial;font-size:16px"); + } + + // ===== Coverage: push_css_declaration / push_css_variable separators ===== + + #[test] + fn test_push_css_declaration_separator() { + let mut css = String::new(); + push_css_declaration(&mut css, "color-scheme:light"); + // First call → no separator + assert_eq!(css, "color-scheme:light"); + + // Second call on non-empty buffer → prepends ';' + push_css_declaration(&mut css, "color:red"); + assert_eq!(css, "color-scheme:light;color:red"); + } + + #[test] + fn test_push_css_variable_separator() { + let mut css = String::new(); + push_css_variable(&mut css, "primary", "#000"); + // First call → no separator + assert_eq!(css, "--primary:#000"); + + // Second call → prepends ';' + push_css_variable(&mut css, "secondary", "#fff"); + assert_eq!(css, "--primary:#000;--secondary:#fff"); + } } diff --git a/package.json b/package.json index c57fc11a..a6df7df8 100644 --- a/package.json +++ b/package.json @@ -15,20 +15,21 @@ "dev": "bun run --filter '*' dev", "benchmark": "bun benchmark.js", "prepare": "husky", - "changepacks": "bunx @changepacks/cli" + "changepacks": "bunx @changepacks/cli", + "build:landing": "bun run --filter landing build" }, "devDependencies": { "@devup-ui/eslint-plugin": "workspace:^", - "@playwright/test": "^1.58.2", + "@playwright/test": "^1.59.1", "@types/bun": "latest", - "@types/node": "^25.5", + "@types/node": "^25.6", "bun-test-env-dom": "^1.0.3", "eslint": "^9", "eslint-plugin-devup": "^2.0", "eslint-plugin-eslint-plugin": "^7.3", "eslint-plugin-jsonc": "^3.1", "eslint-plugin-mdx": "^3.7", - "globals": "^17.4", + "globals": "^17.6", "husky": "^9.1" }, "author": "devfive", diff --git a/packages/bun-plugin/package.json b/packages/bun-plugin/package.json index db8e8ec7..2a03b1ab 100644 --- a/packages/bun-plugin/package.json +++ b/packages/bun-plugin/package.json @@ -46,7 +46,7 @@ }, "devDependencies": { "@types/bun": "latest", - "typescript": "^6.0.2" + "typescript": "^6.0.3" }, "peerDependencies": { "@devup-ui/wasm": "*" diff --git a/packages/bun-plugin/src/__tests__/plugin.test.ts b/packages/bun-plugin/src/__tests__/plugin.test.ts index 1fb4d931..e93d6741 100644 --- a/packages/bun-plugin/src/__tests__/plugin.test.ts +++ b/packages/bun-plugin/src/__tests__/plugin.test.ts @@ -26,6 +26,20 @@ let setDebugSpy: ReturnType let hasDevupUISpy: ReturnType let codeExtractSpy: ReturnType +type CodeExtractResult = ReturnType + +function createCodeExtractResult(): CodeExtractResult { + return { + code: 'code', + css: '', + cssFile: null, + map: null, + updatedBaseStyle: false, + free: mock(), + [Symbol.dispose]: mock(), + } as unknown as CodeExtractResult +} + beforeEach(() => { getDefaultThemeSpy = spyOn(wasm, 'getDefaultTheme').mockReturnValue('default') existsSyncSpy = spyOn(fs, 'existsSync').mockReturnValue(false) @@ -38,15 +52,9 @@ beforeEach(() => { consoleErrorSpy = spyOn(console, 'error').mockImplementation(() => {}) setDebugSpy = spyOn(wasm, 'setDebug').mockReturnValue(undefined) hasDevupUISpy = spyOn(wasm, 'hasDevupUI').mockReturnValue(false) - codeExtractSpy = spyOn(wasm, 'codeExtract').mockReturnValue({ - code: 'code', - css: '', - cssFile: null, - map: null, - updatedBaseStyle: false, - free: mock(), - [Symbol.dispose]: mock(), - } as any) + codeExtractSpy = spyOn(wasm, 'codeExtract').mockReturnValue( + createCodeExtractResult(), + ) }) afterEach(() => { @@ -78,11 +86,10 @@ describe('getDevupDefine', () => { describe('writeDataFiles behavior', () => { it('should register theme from devup.json when it exists', async () => { - existsSyncSpy.mockImplementation((path: string) => path === 'devup.json') readFileSpy.mockResolvedValue('{"theme": {"colors": {"primary": "#000"}}}') getThemeInterfaceSpy.mockReturnValue('interface CustomColors {}') - // Simulate writeDataFiles behavior + // Simulate writeDataFiles behavior without exporting private plugin helpers. const content = '{"theme": {"colors": {"primary": "#000"}}}' const parsed = JSON.parse(content) registerThemeSpy(parsed?.['theme'] ?? {}) @@ -93,7 +100,6 @@ describe('writeDataFiles behavior', () => { }) it('should write theme.d.ts when interfaceCode is returned', async () => { - existsSyncSpy.mockImplementation((path: string) => path === 'devup.json') getThemeInterfaceSpy.mockReturnValue('interface CustomColors {}') const interfaceCode = getThemeInterfaceSpy( @@ -119,7 +125,7 @@ describe('writeDataFiles behavior', () => { it('should register empty theme when devup.json does not exist', async () => { existsSyncSpy.mockReturnValue(false) - // Simulate the else branch + // Simulate the missing config branch. const content = undefined if (!content) { registerThemeSpy({}) @@ -156,7 +162,7 @@ describe('writeDataFiles behavior', () => { it('should create css directory when it does not exist', async () => { existsSyncSpy.mockReturnValue(false) - // Simulate the Promise.all behavior + // Simulate the directory creation branch without exposing internals. if (!existsSyncSpy('df/devup-ui')) { await mkdirSpy('df/devup-ui', { recursive: true }) } diff --git a/packages/bun-plugin/src/plugin.ts b/packages/bun-plugin/src/plugin.ts index 995e7f53..d8bb06e1 100644 --- a/packages/bun-plugin/src/plugin.ts +++ b/packages/bun-plugin/src/plugin.ts @@ -2,7 +2,11 @@ import { existsSync } from 'node:fs' import { mkdir, writeFile } from 'node:fs/promises' import { basename, dirname, join, relative, resolve } from 'node:path' -import { loadDevupConfig, mergeImportAliases } from '@devup-ui/plugin-utils' +import { + createThemeInterfaceArgs, + loadDevupConfig, + mergeImportAliases, +} from '@devup-ui/plugin-utils' import { codeExtract, getThemeInterface, @@ -32,14 +36,7 @@ async function writeDataFiles() { // Generate theme interface after registration (always write, even if empty) await writeFile( join(distDir, 'theme.d.ts'), - getThemeInterface( - libPackage, - 'CustomColors', - 'DevupThemeTypography', - 'CustomLength', - 'CustomShadows', - 'DevupTheme', - ), + getThemeInterface(...createThemeInterfaceArgs(libPackage)), 'utf-8', ) diff --git a/packages/components/package.json b/packages/components/package.json index 64aa57be..c433848d 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -44,7 +44,7 @@ "types": "./dist/index.d.ts", "dependencies": { "@devup-ui/react": "workspace:^", - "react": "^19.2.4", + "react": "^19.2.6", "clsx": "^2.1" }, "devDependencies": { @@ -58,7 +58,7 @@ "storybook": "^10.3", "typescript": "^6.0", "vite": "^8.0", - "vite-plugin-dts": "^4.5" + "vite-plugin-dts": "^5.0" }, "peerDependencies": { "@devup-ui/react": "workspace:^", diff --git a/packages/components/src/components/Button/__tests__/__snapshots__/index.browser.test.tsx.snap b/packages/components/src/components/Button/__tests__/__snapshots__/index.browser.test.tsx.snap index 065451e1..dbdda827 100644 --- a/packages/components/src/components/Button/__tests__/__snapshots__/index.browser.test.tsx.snap +++ b/packages/components/src/components/Button/__tests__/__snapshots__/index.browser.test.tsx.snap @@ -159,7 +159,7 @@ exports[`Button should render icon when icon is provided 1`] = `