From b12a29ee0bc2b41a52e44f21c7e195006b49fb64 Mon Sep 17 00:00:00 2001 From: Franco Kaddour <147673141+FrancoKaddour@users.noreply.github.com> Date: Sun, 9 Aug 2026 22:33:29 -0300 Subject: [PATCH 1/2] Fix Ethiopic/Coptic year estimation in julianDayToCE on new year dates (#10424) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit julianDayToCE estimates the year assuming years average exactly 365.25 days, but year starts are placed at 365 * year + floor(year / 4) days after the epoch — up to 3/4 of a day earlier. On the first day of any year not divisible by 4 (3 of every 4 years), the estimate lands one year low, so New Year's Day is reported as the previous year's constrained last day (13-5) and gregorian round trips lose a day. Correct the estimate by comparing against the julian day of the start of the next year, as proposed in #10390. The estimate is never more than one year low and never high, so a single correction suffices, and it only fires on the exact year-start days that were previously wrong. Affects ethiopic, ethioaa and coptic, which share this function. --- .../date/src/calendars/EthiopicCalendar.ts | 6 ++ .../date/tests/conversion.test.js | 76 +++++++++++++++++++ 2 files changed, 82 insertions(+) diff --git a/packages/@internationalized/date/src/calendars/EthiopicCalendar.ts b/packages/@internationalized/date/src/calendars/EthiopicCalendar.ts index 5169328b538..c1398576da9 100644 --- a/packages/@internationalized/date/src/calendars/EthiopicCalendar.ts +++ b/packages/@internationalized/date/src/calendars/EthiopicCalendar.ts @@ -37,6 +37,12 @@ function ceToJulianDay(epoch: number, year: number, month: number, day: number): function julianDayToCE(epoch: number, jd: number) { let year = Math.floor((4 * (jd - epoch)) / 1461); + // Years are 365 * year + floor(year / 4) days long, slightly less than the + // 365.25 day average assumed by the estimate above. As a result, the estimate + // can be one year too low on the first day of a year (3 of every 4 years). + if (jd >= ceToJulianDay(epoch, year + 1, 1, 1)) { + year++; + } let month = 1 + Math.floor((jd - ceToJulianDay(epoch, year, 1, 1)) / 30); let day = jd + 1 - ceToJulianDay(epoch, year, month, 1); return [year, month, day]; diff --git a/packages/@internationalized/date/tests/conversion.test.js b/packages/@internationalized/date/tests/conversion.test.js index 0c100c91b21..8d40c0c4cd9 100644 --- a/packages/@internationalized/date/tests/conversion.test.js +++ b/packages/@internationalized/date/tests/conversion.test.js @@ -14,6 +14,7 @@ import { BuddhistCalendar, CalendarDate, CalendarDateTime, + CopticCalendar, EthiopicAmeteAlemCalendar, EthiopicCalendar, GregorianCalendar, @@ -533,6 +534,50 @@ describe('CalendarDate conversion', function () { new CalendarDate(new EthiopicCalendar(), 'AA', 4294, 2, 13) ); }); + + it('gregorian to ethiopic on new year', function () { + // 2022-09-11 is Ethiopian New Year (1 Meskerem 2015). See #10390. + let date = new CalendarDate(2022, 9, 10); + expect(toCalendar(date, new EthiopicCalendar())).toEqual( + new CalendarDate(new EthiopicCalendar(), 'AM', 2014, 13, 5) + ); + + date = new CalendarDate(2022, 9, 11); + expect(toCalendar(date, new EthiopicCalendar())).toEqual( + new CalendarDate(new EthiopicCalendar(), 'AM', 2015, 1, 1) + ); + + date = new CalendarDate(2022, 9, 12); + expect(toCalendar(date, new EthiopicCalendar())).toEqual( + new CalendarDate(new EthiopicCalendar(), 'AM', 2015, 1, 2) + ); + + // 2015 is a leap year, so the following new year is one day later. + date = new CalendarDate(2023, 9, 11); + expect(toCalendar(date, new EthiopicCalendar())).toEqual( + new CalendarDate(new EthiopicCalendar(), 'AM', 2015, 13, 6) + ); + + date = new CalendarDate(2023, 9, 12); + expect(toCalendar(date, new EthiopicCalendar())).toEqual( + new CalendarDate(new EthiopicCalendar(), 'AM', 2016, 1, 1) + ); + + // Era boundary: first day of AM 1. + date = new CalendarDate(8, 8, 27); + expect(toCalendar(date, new EthiopicCalendar())).toEqual( + new CalendarDate(new EthiopicCalendar(), 'AM', 1, 1, 1) + ); + }); + + it('round trips between gregorian and ethiopic', function () { + let date = new CalendarDate(2020, 1, 1); + for (let i = 0; i < 365 * 8; i++) { + let ethiopic = toCalendar(date, new EthiopicCalendar()); + expect(toCalendar(ethiopic, new GregorianCalendar())).toEqual(date); + date = date.add({days: 1}); + } + }); }); describe('ethioaa', function () { @@ -547,6 +592,37 @@ describe('CalendarDate conversion', function () { new CalendarDate(new EthiopicAmeteAlemCalendar(), 9999, 13, 5) ); }); + + it('gregorian to ethioaa on new year', function () { + let date = new CalendarDate(2022, 9, 11); + expect(toCalendar(date, new EthiopicAmeteAlemCalendar())).toEqual( + new CalendarDate(new EthiopicAmeteAlemCalendar(), 7515, 1, 1) + ); + }); + }); + + describe('coptic', function () { + it('gregorian to coptic on new year', function () { + // 2022-09-11 is Coptic New Year (1 Thout 1739). See #10390. + let date = new CalendarDate(2022, 9, 10); + expect(toCalendar(date, new CopticCalendar())).toEqual( + new CalendarDate(new CopticCalendar(), 1738, 13, 5) + ); + + date = new CalendarDate(2022, 9, 11); + expect(toCalendar(date, new CopticCalendar())).toEqual( + new CalendarDate(new CopticCalendar(), 1739, 1, 1) + ); + }); + + it('round trips between gregorian and coptic', function () { + let date = new CalendarDate(2020, 1, 1); + for (let i = 0; i < 365 * 8; i++) { + let coptic = toCalendar(date, new CopticCalendar()); + expect(toCalendar(coptic, new GregorianCalendar())).toEqual(date); + date = date.add({days: 1}); + } + }); }); describe('custom calendar', function () { From dd1026ce249c38553ff994d3adc221d8e4d6bfd5 Mon Sep 17 00:00:00 2001 From: David Ferguson Date: Mon, 10 Aug 2026 07:13:21 +0100 Subject: [PATCH 2/2] chore: example of rslib in React Spectrum (#9728) * example of rslib issues in React Spectrum * Commit a working rslib --------- Co-authored-by: Rob Snow --- examples/s2-rslib/.gitignore | 15 + examples/s2-rslib/.yarn/install-state.gz | Bin 0 -> 71335 bytes .../unplugin-npm-1.16.1-77bc28083a.patch | 84 ++ examples/s2-rslib/README.md | 69 ++ examples/s2-rslib/package.json | 36 + examples/s2-rslib/rslib.config.ts | 34 + examples/s2-rslib/src/App.tsx | 68 ++ examples/s2-rslib/src/Button.tsx | 51 + examples/s2-rslib/src/Card.tsx | 11 + examples/s2-rslib/src/Icon.tsx | 8 + examples/s2-rslib/src/button.css | 34 + examples/s2-rslib/src/index.tsx | 1 + examples/s2-rslib/tsconfig.json | 14 + examples/s2-rslib/yarn.lock | 1009 +++++++++++++++++ 14 files changed, 1434 insertions(+) create mode 100644 examples/s2-rslib/.gitignore create mode 100644 examples/s2-rslib/.yarn/install-state.gz create mode 100644 examples/s2-rslib/.yarn/patches/unplugin-npm-1.16.1-77bc28083a.patch create mode 100644 examples/s2-rslib/README.md create mode 100644 examples/s2-rslib/package.json create mode 100644 examples/s2-rslib/rslib.config.ts create mode 100644 examples/s2-rslib/src/App.tsx create mode 100644 examples/s2-rslib/src/Button.tsx create mode 100644 examples/s2-rslib/src/Card.tsx create mode 100644 examples/s2-rslib/src/Icon.tsx create mode 100644 examples/s2-rslib/src/button.css create mode 100644 examples/s2-rslib/src/index.tsx create mode 100644 examples/s2-rslib/tsconfig.json create mode 100644 examples/s2-rslib/yarn.lock diff --git a/examples/s2-rslib/.gitignore b/examples/s2-rslib/.gitignore new file mode 100644 index 00000000000..14419eef53e --- /dev/null +++ b/examples/s2-rslib/.gitignore @@ -0,0 +1,15 @@ +# Local +.DS_Store +*.local +*.log* + +# Dist +node_modules +dist/ +storybook-static +doc_build/ + +# IDE +.vscode/* +!.vscode/extensions.json +.idea diff --git a/examples/s2-rslib/.yarn/install-state.gz b/examples/s2-rslib/.yarn/install-state.gz new file mode 100644 index 0000000000000000000000000000000000000000..db610d2e9b1437e7cb75d625de14d5296f4a4e74 GIT binary patch literal 71335 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.x): share the virtual dir per-process and ++ // reference-count it so parallel compilers in one process (e.g. rslib's js+dts) ++ // don't delete the dir out from under each other on shutdown. ++ static counters = /* @__PURE__ */ new Map(); ++ static initCleanup = false; ++ name = "FakeVirtualModulesPlugin"; + constructor(plugin) { + this.plugin = plugin; ++ if (!FakeVirtualModulesPlugin.initCleanup) { ++ FakeVirtualModulesPlugin.initCleanup = true; ++ process.once("exit", () => { ++ FakeVirtualModulesPlugin.counters.forEach((_, dir) => { ++ import_fs3.default.rmSync(dir, { recursive: true, force: true }); ++ }); ++ }); ++ } + } +- name = "FakeVirtualModulesPlugin"; + apply(compiler) { + const dir = this.plugin.__virtualModulePrefix; + if (!import_fs3.default.existsSync(dir)) { + import_fs3.default.mkdirSync(dir, { recursive: true }); + } ++ const counter = FakeVirtualModulesPlugin.counters.get(dir) ?? 0; ++ FakeVirtualModulesPlugin.counters.set(dir, counter + 1); + compiler.hooks.shutdown.tap(this.name, () => { +- if (import_fs3.default.existsSync(dir)) { +- import_fs3.default.rmdirSync(dir, { recursive: true }); ++ const remaining = (FakeVirtualModulesPlugin.counters.get(dir) ?? 1) - 1; ++ if (remaining === 0) { ++ FakeVirtualModulesPlugin.counters.delete(dir); ++ import_fs3.default.rmSync(dir, { recursive: true, force: true }); ++ } else { ++ FakeVirtualModulesPlugin.counters.set(dir, remaining); + } + }); + } +@@ -1682,7 +1701,7 @@ function getRspackPlugin(factory) { + return (userOptions) => { + return { + apply(compiler) { +- const VIRTUAL_MODULE_PREFIX = (0, import_path9.resolve)(compiler.options.context ?? process.cwd(), "node_modules/.virtual"); ++ const VIRTUAL_MODULE_PREFIX = (0, import_path9.resolve)(compiler.options.context ?? process.cwd(), "node_modules/.virtual", compiler.rspack.experiments.VirtualModulesPlugin ? "" : process.pid.toString()); + const injected = compiler.$unpluginContext || {}; + compiler.$unpluginContext = injected; + const meta = { +@@ -1710,7 +1729,7 @@ function getRspackPlugin(factory) { + }); + const externalModules = /* @__PURE__ */ new Set(); + if (plugin.resolveId) { +- const vfs = new FakeVirtualModulesPlugin(plugin); ++ const vfs = compiler.rspack.experiments.VirtualModulesPlugin ? new compiler.rspack.experiments.VirtualModulesPlugin() : new FakeVirtualModulesPlugin(plugin); + vfs.apply(compiler); + plugin.__vfsModules = /* @__PURE__ */ new Set(); + compiler.hooks.compilation.tap(plugin.name, (compilation, { normalModuleFactory }) => { +@@ -1744,11 +1763,16 @@ function getRspackPlugin(factory) { + if (isExternal) + externalModules.add(resolved); + if (!import_fs4.default.existsSync(resolved)) { ++ const encodedVirtualPath = encodeVirtualModuleId(resolved, plugin); + if (!plugin.__vfsModules.has(resolved)) { + plugin.__vfsModules.add(resolved); +- await vfs.writeModule(resolved); ++ if (compiler.rspack.experiments.VirtualModulesPlugin) { ++ await vfs.writeModule(encodedVirtualPath, ""); ++ } else { ++ await vfs.writeModule(resolved); ++ } + } +- resolved = encodeVirtualModuleId(resolved, plugin); ++ resolved = encodedVirtualPath; + } + resolveData.request = resolved; + }); diff --git a/examples/s2-rslib/README.md b/examples/s2-rslib/README.md new file mode 100644 index 00000000000..6fa6e8a8111 --- /dev/null +++ b/examples/s2-rslib/README.md @@ -0,0 +1,69 @@ +# s2-rslib + +With the patch, it should work. Maintaining the rest of this README for historical context. + +Patch is based on these PRs with assistance from Claude: +https://github.com/unjs/unplugin/pull/510 +https://github.com/unjs/unplugin/pull/549 +https://github.com/unjs/unplugin/pull/538 +Because the newer version of unplugin works. We're currently unable to upgrade to the newer version though due to some old build tools we still support. + +This is an example of Rslib with unplugin-parcel-macros, that reliably does not work and fails to build if you turn off the unplugin patch. + + +## Reproduction steps + +1. turn off the patch (delete from resolutions) +2. `yarn install` +3. `yarn build` +4. Observe the error `Module not found: Can't resolve 'macro-xyz.css'` + +## Debugging notes from AI + +*TL;DR: It's a race condition in `unplugin-parcel-macros` + `unplugin`'s virtual module system within rspack. No config-level fix found yet — likely needs an upstream fix or inlining styles.* + +--- + +:mag: **The Problem** +`pnpm nx build @pandora/react-card-container` fails ~50% of the time with: +``` +Module not found: Can't resolve 'macro-.css' +``` +Errors come from `EmptyStateStyles.ts` and `ErrorStateStyles.ts`. + +--- + +:detective: **Root Cause** +The S2 `style()` macro generates CSS at build time. That CSS lives in: +• A module-level `assets` Map inside `unplugin-parcel-macros` (shared across plugin instances) +• Empty placeholder files in `node_modules/.virtual/` written by unplugin's `FakeVirtualModulesPlugin` + +The `transform` hook generates CSS → adds to `assets` Map → appends `import "macro-.css"` to the source. Then `resolveId` maps it to a `.virtual/` file, and the `load` hook serves the real CSS from the Map. + +The race happens within rspack's internal concurrent module processing. Even with a *single* lib entry and a *single* rspack compiler, the async `transform → resolveId → load` pipeline has a timing window where virtual CSS module resolution fails. + +--- + +:test_tube: **What I Tested** + +| Approach | Result | +|---|---| +| Normal build (ESM + CJS parallel) | ~40% pass | +| Patch: remove `assets.delete()` cleanup | Still fails | +| Patch: prevent `.virtual/` dir deletion on shutdown | Still fails | +| Both patches combined | Still fails | +| Patch: per-instance `assets` Map | Worse | +| Sequential builds (separate processes) | ESM passes, CJS still flaky | +| Single lib entry only | Still flaky (3/10) | +| Disable DTS | Still fails | +| Clean `.virtual/` before every build | Still fails | +| `cssModules: { namedExport: false }` | Still fails | + +--- + +:bulb: **Key Takeaways** +• Not caused by parallel ESM+CJS — fails with a single lib entry too +• Not caused by stale `.virtual/` files — cleaning doesn't help +• Not caused by the asset cleanup code — removing it doesn't fix it +• The working repo (`pandora-tooling-demo`) has fewer macro files and simpler inline `style()` calls — smaller race window +• Importing style files `with { type: 'macro' }` doesn't work — S2 throws an error since the exports are already-expanded values, not macro functions diff --git a/examples/s2-rslib/package.json b/examples/s2-rslib/package.json new file mode 100644 index 00000000000..9fb2c22d634 --- /dev/null +++ b/examples/s2-rslib/package.json @@ -0,0 +1,36 @@ +{ + "name": "s2-rslib", + "version": "0.0.0", + "private": true, + "files": [ + "dist" + ], + "type": "module", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js" + } + }, + "scripts": { + "build": "rslib build", + "dev": "rslib build --watch" + }, + "dependencies": { + "@react-spectrum/s2": "latest", + "react": "^19.2.0", + "react-dom": "^19.2.0" + }, + "devDependencies": { + "@rsbuild/plugin-react": "^1.4.5", + "@rslib/core": "^0.19.6", + "@types/react": "^19.2.14", + "react": "^19.2.4", + "typescript": "^5.9.3", + "unplugin-parcel-macros": "^0.2.0" + }, + "resolutions": { + "unplugin@npm:^1.9.0": "patch:unplugin@npm%3A1.16.1#~/.yarn/patches/unplugin-npm-1.16.1-77bc28083a.patch" + } +} diff --git a/examples/s2-rslib/rslib.config.ts b/examples/s2-rslib/rslib.config.ts new file mode 100644 index 00000000000..e14d25db301 --- /dev/null +++ b/examples/s2-rslib/rslib.config.ts @@ -0,0 +1,34 @@ +import {pluginReact} from '@rsbuild/plugin-react'; +import {defineConfig} from '@rslib/core'; +import {rspack as macros} from 'unplugin-parcel-macros'; + +export default defineConfig({ + source: { + entry: { + index: ['./src/index.tsx'] + } + }, + lib: [ + { + bundle: true, + dts: true, + format: 'esm' + } + ], + output: { + target: 'web' + }, + plugins: [pluginReact()], + tools: { + /** + * Add the macros plugin to enable support for React Spectrum S2 styles. + * This is a webpack plugin, so it is added to the rspack config. We should + * use the appendPlugins rather than appending it directly to the config, as + * this is the recommended way to add plugins. + */ + rspack: (config, {appendPlugins}) => { + appendPlugins(macros()); + return config; + } + } +}); diff --git a/examples/s2-rslib/src/App.tsx b/examples/s2-rslib/src/App.tsx new file mode 100644 index 00000000000..1c9e5e7aba6 --- /dev/null +++ b/examples/s2-rslib/src/App.tsx @@ -0,0 +1,68 @@ +import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; +import Button from './Button'; +import Card from './Card'; +import Icon from './Icon'; + +const Header = () => { + return ( +
+

Header

+
+ ); +}; + +const Nav = () => { + return ( + + ); +}; + +const Main = () => { + return ( +
+

Main

+
+ ); +}; + +const Footer = () => { + return ( +
+

Footer

+
+ ); +}; + +const appStyles = style({ + display: 'flex', + flexDirection: 'column', + height: '100vh', + gridTemplateAreas: { + default: ['header', 'nav main', 'footer'] + }, + gridTemplateRows: ['auto', '1fr', 'auto'], + gridTemplateColumns: ['1fr', '1fr'], + gridGap: 8, + gridAutoFlow: 'row', + gridAutoColumns: '1fr', + gridAutoRows: 'auto' +}); + +const App = () => { + return ( +
+
+
+ ); +}; + +export default App; diff --git a/examples/s2-rslib/src/Button.tsx b/examples/s2-rslib/src/Button.tsx new file mode 100644 index 00000000000..72cd3ab92ac --- /dev/null +++ b/examples/s2-rslib/src/Button.tsx @@ -0,0 +1,51 @@ +import './button.css'; +import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; + +export interface ButtonProps { + /** + * Whether the button is primary. + * + * @default false + */ + primary?: boolean; + /** + * Background color of the button. + */ + backgroundColor?: string; + /** + * Size of Button. + * + * @default 'medium' + */ + size?: 'small' | 'medium' | 'large'; + /** + * Label of the button. + */ + label: string; + /** + * Optional click handler. + */ + onClick?: () => void; +} + +const Button = ({ + primary = false, + size = 'medium', + backgroundColor, + label, + ...props +}: ButtonProps) => { + const mode = primary ? 'demo-button--primary' : 'demo-button--secondary'; + return ( +
+ +
+ ); +}; + +export default Button; diff --git a/examples/s2-rslib/src/Card.tsx b/examples/s2-rslib/src/Card.tsx new file mode 100644 index 00000000000..686103fc258 --- /dev/null +++ b/examples/s2-rslib/src/Card.tsx @@ -0,0 +1,11 @@ +import {style} from '@react-spectrum/s2/style' with {type: 'macro'}; + +const Card = () => { + return ( +
+

Card

+
+ ); +}; + +export default Card; diff --git a/examples/s2-rslib/src/Icon.tsx b/examples/s2-rslib/src/Icon.tsx new file mode 100644 index 00000000000..c3d9ea960d8 --- /dev/null +++ b/examples/s2-rslib/src/Icon.tsx @@ -0,0 +1,8 @@ +import AlertTriangle from '@react-spectrum/s2/icons/AlertTriangle'; +import {iconStyle} from '@react-spectrum/s2/style' with {type: 'macro'}; + +const Icon = () => { + return ; +}; + +export default Icon; diff --git a/examples/s2-rslib/src/button.css b/examples/s2-rslib/src/button.css new file mode 100644 index 00000000000..b7a36cbde4f --- /dev/null +++ b/examples/s2-rslib/src/button.css @@ -0,0 +1,34 @@ +.demo-button { + font-weight: 700; + border: 0; + border-radius: 3em; + cursor: pointer; + display: inline-block; + line-height: 1; +} + +.demo-button--primary { + color: white; + background-color: #1ea7fd; +} + +.demo-button--secondary { + color: #333; + background-color: transparent; + box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset; +} + +.demo-button--small { + font-size: 12px; + padding: 10px 16px; +} + +.demo-button--medium { + font-size: 14px; + padding: 11px 20px; +} + +.demo-button--large { + font-size: 16px; + padding: 12px 24px; +} diff --git a/examples/s2-rslib/src/index.tsx b/examples/s2-rslib/src/index.tsx new file mode 100644 index 00000000000..3bc413b9acc --- /dev/null +++ b/examples/s2-rslib/src/index.tsx @@ -0,0 +1 @@ +export {default as App} from './App'; diff --git a/examples/s2-rslib/tsconfig.json b/examples/s2-rslib/tsconfig.json new file mode 100644 index 00000000000..510ab68dfbb --- /dev/null +++ b/examples/s2-rslib/tsconfig.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "lib": ["DOM", "ES2022"], + "module": "ESNext", + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "useDefineForClassFields": true + }, + "include": ["src"] +} diff --git a/examples/s2-rslib/yarn.lock b/examples/s2-rslib/yarn.lock new file mode 100644 index 00000000000..0113a821afc --- /dev/null +++ b/examples/s2-rslib/yarn.lock @@ -0,0 +1,1009 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@ast-grep/napi-darwin-arm64@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-darwin-arm64@npm:0.37.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@ast-grep/napi-darwin-x64@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-darwin-x64@npm:0.37.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@ast-grep/napi-linux-arm64-gnu@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-linux-arm64-gnu@npm:0.37.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@ast-grep/napi-linux-arm64-musl@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-linux-arm64-musl@npm:0.37.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@ast-grep/napi-linux-x64-gnu@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-linux-x64-gnu@npm:0.37.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@ast-grep/napi-linux-x64-musl@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-linux-x64-musl@npm:0.37.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@ast-grep/napi-win32-arm64-msvc@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-win32-arm64-msvc@npm:0.37.0" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@ast-grep/napi-win32-ia32-msvc@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-win32-ia32-msvc@npm:0.37.0" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@ast-grep/napi-win32-x64-msvc@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi-win32-x64-msvc@npm:0.37.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@ast-grep/napi@npm:0.37.0": + version: 0.37.0 + resolution: "@ast-grep/napi@npm:0.37.0" + dependencies: + "@ast-grep/napi-darwin-arm64": "npm:0.37.0" + "@ast-grep/napi-darwin-x64": "npm:0.37.0" + "@ast-grep/napi-linux-arm64-gnu": "npm:0.37.0" + "@ast-grep/napi-linux-arm64-musl": "npm:0.37.0" + "@ast-grep/napi-linux-x64-gnu": "npm:0.37.0" + "@ast-grep/napi-linux-x64-musl": "npm:0.37.0" + "@ast-grep/napi-win32-arm64-msvc": "npm:0.37.0" + "@ast-grep/napi-win32-ia32-msvc": "npm:0.37.0" + "@ast-grep/napi-win32-x64-msvc": "npm:0.37.0" + dependenciesMeta: + "@ast-grep/napi-darwin-arm64": + optional: true + "@ast-grep/napi-darwin-x64": + optional: true + "@ast-grep/napi-linux-arm64-gnu": + optional: true + "@ast-grep/napi-linux-arm64-musl": + optional: true + "@ast-grep/napi-linux-x64-gnu": + optional: true + "@ast-grep/napi-linux-x64-musl": + optional: true + "@ast-grep/napi-win32-arm64-msvc": + optional: true + "@ast-grep/napi-win32-ia32-msvc": + optional: true + "@ast-grep/napi-win32-x64-msvc": + optional: true + checksum: 10c0/9038ca27e64a83268ed6b23a6e860ee51c4cf5e1d72a6bd0b9130a33730240ecc5bf1035260d29443b488e53fb9c941eabea7e7953e11919e357454a9c8ce6c7 + languageName: node + linkType: hard + +"@emnapi/core@npm:^1.5.0": + version: 1.11.3 + resolution: "@emnapi/core@npm:1.11.3" + dependencies: + "@emnapi/wasi-threads": "npm:1.2.3" + tslib: "npm:^2.4.0" + checksum: 10c0/4ca08d349a82d5d2887ccc9e12df630877b0412ddcd59b9faee61e3c3947ccead27a18257a18bfe17abdf2b0709857808ad75d423ac49edd50c32fb140a7ed6e + languageName: node + linkType: hard + +"@emnapi/runtime@npm:^1.5.0": + version: 1.11.3 + resolution: "@emnapi/runtime@npm:1.11.3" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/a00f1020fefb9d4145c367f93a9fddb383a00da8ffd7871e20b19659890379b83aeecb9f84d7d0eda5456343f4a09eb05b0acb5153b0d3d889539dedb1ed87c3 + languageName: node + linkType: hard + +"@emnapi/wasi-threads@npm:1.2.3": + version: 1.2.3 + resolution: "@emnapi/wasi-threads@npm:1.2.3" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/5aed84bc5dbe867973b20406ca1ed95661a4892ecaef80378fdf2d37424b3f7b9c428df8a3e1d82b783a3345a530032bf049e699e1f113ea52203c3e9b4e6ce5 + languageName: node + linkType: hard + +"@internationalized/date@npm:^3.12.3": + version: 3.12.3 + resolution: "@internationalized/date@npm:3.12.3" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10c0/d99ef774b45326ecc3e96642b234de4e92440e4cc929f11141f91403515f1cdb321e66c40f4f71cc4140069776b78a8231c3a72966f3024018ee88da3c4a2726 + languageName: node + linkType: hard + +"@internationalized/number@npm:^3.6.7": + version: 3.6.7 + resolution: "@internationalized/number@npm:3.6.7" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10c0/b5d60cccc05e4549eedcaee4ef3fc7b972532321e841bce1251c4993f1f7b3416c2b92e7fddd22292ed494140fb3ca6eb6dafc6cbe37e267483e9510954a618f + languageName: node + linkType: hard + +"@internationalized/string@npm:^3.2.10": + version: 3.2.10 + resolution: "@internationalized/string@npm:3.2.10" + dependencies: + "@swc/helpers": "npm:^0.5.0" + checksum: 10c0/c9d3fa0846ab6afe67ca8342bec551c659ece9aa283972e7a3255b7e0976f6389ccadd3112f64470af6096bb68d0889fb8ff7afa1bc800ef88d15a122ead8cb5 + languageName: node + linkType: hard + +"@module-federation/error-codes@npm:0.22.0": + version: 0.22.0 + resolution: "@module-federation/error-codes@npm:0.22.0" + checksum: 10c0/a9b25e8c930971e146e6352f482f915f1b54965ce54706984e834a87be714d30caebbd3946f9eb408e7821b2cc326b90787eeb2f8306edf1d322d9931543a139 + languageName: node + linkType: hard + +"@module-federation/runtime-core@npm:0.22.0": + version: 0.22.0 + resolution: "@module-federation/runtime-core@npm:0.22.0" + dependencies: + "@module-federation/error-codes": "npm:0.22.0" + "@module-federation/sdk": "npm:0.22.0" + checksum: 10c0/0406c26b119065dca23a8fb65872b8ab5794984d5d82984ed625c433658693050a8a800cde8c97cc1572b0bc154a7824fa9db5bb05106b7250643e799ba7091d + languageName: node + linkType: hard + +"@module-federation/runtime-tools@npm:0.22.0": + version: 0.22.0 + resolution: "@module-federation/runtime-tools@npm:0.22.0" + dependencies: + "@module-federation/runtime": "npm:0.22.0" + "@module-federation/webpack-bundler-runtime": "npm:0.22.0" + checksum: 10c0/fbe76616fb176ce03550e3ce2bb43fa5d44c12d7d0939593f29dab5658accfb559b857df4180f7f681dc601aab928658cd9b49a78daad866089390b820854fbd + languageName: node + linkType: hard + +"@module-federation/runtime@npm:0.22.0": + version: 0.22.0 + resolution: "@module-federation/runtime@npm:0.22.0" + dependencies: + "@module-federation/error-codes": "npm:0.22.0" + "@module-federation/runtime-core": "npm:0.22.0" + "@module-federation/sdk": "npm:0.22.0" + checksum: 10c0/f9cfaf7f8599a215195cb612a5d4532d4399cc8eb5a928ced60c4bdf0e7e2028849cdc384fa3f1506f9e7e0e112f74f6c30a5a76136dc56e155012d111ea075b + languageName: node + linkType: hard + +"@module-federation/sdk@npm:0.22.0": + version: 0.22.0 + resolution: "@module-federation/sdk@npm:0.22.0" + checksum: 10c0/c09ba0147368151b67ba33b9174ef451a028e1709d2208aa811cacc1ae4efcae0f1987f02119f9b54754ee6430af3610e357c9b744147f112a25d8f7564f8041 + languageName: node + linkType: hard + +"@module-federation/webpack-bundler-runtime@npm:0.22.0": + version: 0.22.0 + resolution: "@module-federation/webpack-bundler-runtime@npm:0.22.0" + dependencies: + "@module-federation/runtime": "npm:0.22.0" + "@module-federation/sdk": "npm:0.22.0" + checksum: 10c0/4c1354b881ffc0c1521f1d676c9301db0b0d59186c386dde4dbb6d33f00fdb16bf118e85cfc38e2ffb36084fa87df8390d415a41c0c93b33bd0e5460a9a934f5 + languageName: node + linkType: hard + +"@napi-rs/wasm-runtime@npm:1.0.7": + version: 1.0.7 + resolution: "@napi-rs/wasm-runtime@npm:1.0.7" + dependencies: + "@emnapi/core": "npm:^1.5.0" + "@emnapi/runtime": "npm:^1.5.0" + "@tybys/wasm-util": "npm:^0.10.1" + checksum: 10c0/2d8635498136abb49d6dbf7395b78c63422292240963bf055f307b77aeafbde57ae2c0ceaaef215601531b36d6eb92a2cdd6f5ba90ed2aa8127c27aff9c4ae55 + languageName: node + linkType: hard + +"@parcel/macros@npm:^2.16.3": + version: 2.16.4 + resolution: "@parcel/macros@npm:2.16.4" + checksum: 10c0/e2000bffc469e728871fd16caa5c7797d576d08e1b3a881a204e5152a40d838d21efe0a01063b409b7e6e81b40c01c5c38475ab30b904dfed493ca106bb59cfe + languageName: node + linkType: hard + +"@parcel/source-map@npm:^2.1.1": + version: 2.1.1 + resolution: "@parcel/source-map@npm:2.1.1" + dependencies: + detect-libc: "npm:^1.0.3" + checksum: 10c0/cea8450e152666be413556f0d100f125e81646bffc497e7c792bd9fc5067d052f1a008c8404ce1cd3a587d58b9ef57207ada89149cf2c705e71b1978308045f6 + languageName: node + linkType: hard + +"@react-spectrum/s2@npm:latest": + version: 1.6.0 + resolution: "@react-spectrum/s2@npm:1.6.0" + dependencies: + "@internationalized/date": "npm:^3.12.3" + "@internationalized/number": "npm:^3.6.7" + "@parcel/macros": "npm:^2.16.3" + "@react-types/shared": "npm:^3.36.1" + react-aria: "npm:3.51.0" + react-aria-components: "npm:1.20.0" + react-stately: "npm:3.49.0" + peerDependencies: + react: ^19.0.0-rc.1 + react-dom: ^19.0.0-rc.1 + checksum: 10c0/b223109c9c6a809de6a3d3d78bb0fecfb3a8075c265333dd48c054ae64c723a10e2bfcc73be85f15096b74f6dd75b9f75672dc74edfa4a417781bb3260844040 + languageName: node + linkType: hard + +"@react-types/shared@npm:^3.36.1": + version: 3.36.1 + resolution: "@react-types/shared@npm:3.36.1" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/377e9287025f046f3b088e73655a53813ce60f08d569094c098fd46f45d4eac1d288c5005bcb8a5a388aa9d1245763ef11e6fa86c00a2355b43f24fde447ca54 + languageName: node + linkType: hard + +"@rsbuild/core@npm:~1.7.3": + version: 1.7.6 + resolution: "@rsbuild/core@npm:1.7.6" + dependencies: + "@rspack/core": "npm:~1.7.10" + "@rspack/lite-tapable": "npm:~1.1.0" + "@swc/helpers": "npm:^0.5.20" + core-js: "npm:~3.47.0" + jiti: "npm:^2.6.1" + bin: + rsbuild: ./bin/rsbuild.js + checksum: 10c0/f4681387532d8645dacf8721bfc8a3c5dbda79dae8db246771d0bd12039393dc797215f00ce4a5e3a51d4febdf16cd7a6b129098b3e444ca967e85921484ae7f + languageName: node + linkType: hard + +"@rsbuild/plugin-react@npm:^1.4.5": + version: 1.4.6 + resolution: "@rsbuild/plugin-react@npm:1.4.6" + dependencies: + "@rspack/plugin-react-refresh": "npm:^1.6.1" + react-refresh: "npm:^0.18.0" + peerDependencies: + "@rsbuild/core": ^1.0.0 || ^2.0.0-0 + peerDependenciesMeta: + "@rsbuild/core": + optional: true + checksum: 10c0/e878c565ecdb23a1b08050adcd05e06c2c07dd8fc06be3d4de52b4976f593c27a823c42a2fbd21628ff70a24ad00f00171e889615a5b291a3bc02834e009f96f + languageName: node + linkType: hard + +"@rslib/core@npm:^0.19.6": + version: 0.19.6 + resolution: "@rslib/core@npm:0.19.6" + dependencies: + "@rsbuild/core": "npm:~1.7.3" + rsbuild-plugin-dts: "npm:0.19.6" + peerDependencies: + "@microsoft/api-extractor": ^7 + typescript: ^5 + peerDependenciesMeta: + "@microsoft/api-extractor": + optional: true + typescript: + optional: true + bin: + rslib: bin/rslib.js + checksum: 10c0/9359da1d84881877bc73ad35b134a88bcfb7a89c663f019e8646843d3567465b39d64c1fd1edf0a9df60a2bd6590d588a05ae0d4b3ada18980947f7de4abde2d + languageName: node + linkType: hard + +"@rspack/binding-darwin-arm64@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-darwin-arm64@npm:1.7.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rspack/binding-darwin-x64@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-darwin-x64@npm:1.7.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rspack/binding-linux-arm64-gnu@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-linux-arm64-gnu@npm:1.7.12" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rspack/binding-linux-arm64-musl@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-linux-arm64-musl@npm:1.7.12" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rspack/binding-linux-x64-gnu@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-linux-x64-gnu@npm:1.7.12" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rspack/binding-linux-x64-musl@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-linux-x64-musl@npm:1.7.12" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rspack/binding-wasm32-wasi@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-wasm32-wasi@npm:1.7.12" + dependencies: + "@napi-rs/wasm-runtime": "npm:1.0.7" + conditions: cpu=wasm32 + languageName: node + linkType: hard + +"@rspack/binding-win32-arm64-msvc@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-win32-arm64-msvc@npm:1.7.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rspack/binding-win32-ia32-msvc@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-win32-ia32-msvc@npm:1.7.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rspack/binding-win32-x64-msvc@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding-win32-x64-msvc@npm:1.7.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rspack/binding@npm:1.7.12": + version: 1.7.12 + resolution: "@rspack/binding@npm:1.7.12" + dependencies: + "@rspack/binding-darwin-arm64": "npm:1.7.12" + "@rspack/binding-darwin-x64": "npm:1.7.12" + "@rspack/binding-linux-arm64-gnu": "npm:1.7.12" + "@rspack/binding-linux-arm64-musl": "npm:1.7.12" + "@rspack/binding-linux-x64-gnu": "npm:1.7.12" + "@rspack/binding-linux-x64-musl": "npm:1.7.12" + "@rspack/binding-wasm32-wasi": "npm:1.7.12" + "@rspack/binding-win32-arm64-msvc": "npm:1.7.12" + "@rspack/binding-win32-ia32-msvc": "npm:1.7.12" + "@rspack/binding-win32-x64-msvc": "npm:1.7.12" + dependenciesMeta: + "@rspack/binding-darwin-arm64": + optional: true + "@rspack/binding-darwin-x64": + optional: true + "@rspack/binding-linux-arm64-gnu": + optional: true + "@rspack/binding-linux-arm64-musl": + optional: true + "@rspack/binding-linux-x64-gnu": + optional: true + "@rspack/binding-linux-x64-musl": + optional: true + "@rspack/binding-wasm32-wasi": + optional: true + "@rspack/binding-win32-arm64-msvc": + optional: true + "@rspack/binding-win32-ia32-msvc": + optional: true + "@rspack/binding-win32-x64-msvc": + optional: true + checksum: 10c0/0bca963309c75418148ce67f9c102b11662844bc2412257da9e4fb56917bf279f37d5ebd8f6d641405bcde54d43384adc5693e22bc15c571f949a99a90aa6ec9 + languageName: node + linkType: hard + +"@rspack/core@npm:~1.7.10": + version: 1.7.12 + resolution: "@rspack/core@npm:1.7.12" + dependencies: + "@module-federation/runtime-tools": "npm:0.22.0" + "@rspack/binding": "npm:1.7.12" + "@rspack/lite-tapable": "npm:1.1.0" + peerDependencies: + "@swc/helpers": ">=0.5.1" + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10c0/575737cffae45720563a8f5bc933058a0c6c42dbae1a41b53f98c44281146eb5f917f118c866d53aa8e0f2b4533dae092c564f27412affb58ae3dbeb853266b4 + languageName: node + linkType: hard + +"@rspack/lite-tapable@npm:1.1.0": + version: 1.1.0 + resolution: "@rspack/lite-tapable@npm:1.1.0" + checksum: 10c0/15059d1da73192b150339ceba3142a2d0073fa298dad9a497cc8c6037c597c3a982ed4c88dc50afa7b70d0757df1b47af7ae407cfe8acd31d333d524b84a7a4b + languageName: node + linkType: hard + +"@rspack/lite-tapable@npm:~1.1.0": + version: 1.1.5 + resolution: "@rspack/lite-tapable@npm:1.1.5" + checksum: 10c0/b3ddc59c824dff06981d3fd3ced577f7031fd88aa2749e8fba0d6b6566d40e38ccabe0f5c48cc8df1836cb1a1ba1afe936b7659528c03ab153f8351dbeea746b + languageName: node + linkType: hard + +"@rspack/plugin-react-refresh@npm:^1.6.1": + version: 1.6.2 + resolution: "@rspack/plugin-react-refresh@npm:1.6.2" + dependencies: + error-stack-parser: "npm:^2.1.4" + peerDependencies: + react-refresh: ">=0.10.0 <1.0.0" + webpack-hot-middleware: 2.x + peerDependenciesMeta: + webpack-hot-middleware: + optional: true + checksum: 10c0/a1e2eb42dc870ec8438c5a80fddf48c60b21084b694264ae8f94d15ed1d4ad8fff64f1e97c9f2f41303c9cb32bffab788c3f509aa8ee19d9f8834a04a95eb09b + languageName: node + linkType: hard + +"@swc/core-darwin-arm64@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-darwin-arm64@npm:1.15.47" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-darwin-x64@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-darwin-x64@npm:1.15.47" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@swc/core-linux-arm-gnueabihf@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.15.47" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@swc/core-linux-arm64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-arm64-gnu@npm:1.15.47" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-arm64-musl@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-arm64-musl@npm:1.15.47" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-linux-ppc64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-ppc64-gnu@npm:1.15.47" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-s390x-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-s390x-gnu@npm:1.15.47" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-gnu@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-x64-gnu@npm:1.15.47" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@swc/core-linux-x64-musl@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-linux-x64-musl@npm:1.15.47" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@swc/core-win32-arm64-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-win32-arm64-msvc@npm:1.15.47" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@swc/core-win32-ia32-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-win32-ia32-msvc@npm:1.15.47" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@swc/core-win32-x64-msvc@npm:1.15.47": + version: 1.15.47 + resolution: "@swc/core-win32-x64-msvc@npm:1.15.47" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@swc/core@npm:^1.15.3": + version: 1.15.47 + resolution: "@swc/core@npm:1.15.47" + dependencies: + "@swc/core-darwin-arm64": "npm:1.15.47" + "@swc/core-darwin-x64": "npm:1.15.47" + "@swc/core-linux-arm-gnueabihf": "npm:1.15.47" + "@swc/core-linux-arm64-gnu": "npm:1.15.47" + "@swc/core-linux-arm64-musl": "npm:1.15.47" + "@swc/core-linux-ppc64-gnu": "npm:1.15.47" + "@swc/core-linux-s390x-gnu": "npm:1.15.47" + "@swc/core-linux-x64-gnu": "npm:1.15.47" + "@swc/core-linux-x64-musl": "npm:1.15.47" + "@swc/core-win32-arm64-msvc": "npm:1.15.47" + "@swc/core-win32-ia32-msvc": "npm:1.15.47" + "@swc/core-win32-x64-msvc": "npm:1.15.47" + "@swc/counter": "npm:^0.1.3" + "@swc/types": "npm:^0.1.27" + peerDependencies: + "@swc/helpers": ">=0.5.17" + dependenciesMeta: + "@swc/core-darwin-arm64": + optional: true + "@swc/core-darwin-x64": + optional: true + "@swc/core-linux-arm-gnueabihf": + optional: true + "@swc/core-linux-arm64-gnu": + optional: true + "@swc/core-linux-arm64-musl": + optional: true + "@swc/core-linux-ppc64-gnu": + optional: true + "@swc/core-linux-s390x-gnu": + optional: true + "@swc/core-linux-x64-gnu": + optional: true + "@swc/core-linux-x64-musl": + optional: true + "@swc/core-win32-arm64-msvc": + optional: true + "@swc/core-win32-ia32-msvc": + optional: true + "@swc/core-win32-x64-msvc": + optional: true + peerDependenciesMeta: + "@swc/helpers": + optional: true + checksum: 10c0/34ccbb3ae5db0af520934abfdf2505b8490128b48863d9a2e6db2d8787e2d7415318000c92fd32ebe351b24d93f36f52c58f35b9a98e60a4010b34a1af2c3d5e + languageName: node + linkType: hard + +"@swc/counter@npm:^0.1.3": + version: 0.1.3 + resolution: "@swc/counter@npm:0.1.3" + checksum: 10c0/8424f60f6bf8694cfd2a9bca45845bce29f26105cda8cf19cdb9fd3e78dc6338699e4db77a89ae449260bafa1cc6bec307e81e7fb96dbf7dcfce0eea55151356 + languageName: node + linkType: hard + +"@swc/helpers@npm:^0.5.0, @swc/helpers@npm:^0.5.20": + version: 0.5.23 + resolution: "@swc/helpers@npm:0.5.23" + dependencies: + tslib: "npm:^2.8.0" + checksum: 10c0/02da7b4df465693933ecd4851cc193ec729c309939c8a84eccae5ec0010aafc3894e713b8ef8d13a6ba401759f0e900c88e2dcfef5872c27bb91e70f73275cce + languageName: node + linkType: hard + +"@swc/types@npm:^0.1.27": + version: 0.1.28 + resolution: "@swc/types@npm:0.1.28" + dependencies: + "@swc/counter": "npm:^0.1.3" + checksum: 10c0/7f2e959a7ee000ec4216acc6b7634e2d2fbe404b6ad3adf72bb91970a67359d7d429f60556342784dbe66912c7c987426683159e749332581a87e04de0524357 + languageName: node + linkType: hard + +"@tybys/wasm-util@npm:^0.10.1": + version: 0.10.3 + resolution: "@tybys/wasm-util@npm:0.10.3" + dependencies: + tslib: "npm:^2.4.0" + checksum: 10c0/fd2bd2a79c6cd8c79ed1cf7a0fa375c64589264c88a27acaf9756d556b453ea222b62a4f68dd2fbb8b3a78b6bab3b1f4fb2431b6afc6aeda8344b53a521a1cd3 + languageName: node + linkType: hard + +"@types/react@npm:^19.2.14": + version: 19.2.18 + resolution: "@types/react@npm:19.2.18" + dependencies: + csstype: "npm:^3.2.2" + checksum: 10c0/d04216172b4b4362b310017c210dfbe019fb4f4e7dffd0313e70b3acb3051d5c3e76e7e84e3cf4c6a3c824993ffadfe3949e589a6398a09d4200e7670e2962de + languageName: node + linkType: hard + +"acorn@npm:^8.14.0": + version: 8.18.0 + resolution: "acorn@npm:8.18.0" + bin: + acorn: bin/acorn + checksum: 10c0/be771be2135cc07910cf76f444ad514d7dcfd6d4a8026e597e93155275abc8ef61eee12211d52146e9d962874269b634f397464942087be013c89d0c54c5f8e5 + languageName: node + linkType: hard + +"aria-hidden@npm:^1.2.3": + version: 1.2.6 + resolution: "aria-hidden@npm:1.2.6" + dependencies: + tslib: "npm:^2.0.0" + checksum: 10c0/7720cb539497a9f760f68f98a4b30f22c6767aa0e72fa7d58279f7c164e258fc38b2699828f8de881aab0fc8e9c56d1313a3f1a965046fc0381a554dbc72b54a + languageName: node + linkType: hard + +"client-only@npm:^0.0.1": + version: 0.0.1 + resolution: "client-only@npm:0.0.1" + checksum: 10c0/9d6cfd0c19e1c96a434605added99dff48482152af791ec4172fb912a71cff9027ff174efd8cdb2160cc7f377543e0537ffc462d4f279bc4701de3f2a3c4b358 + languageName: node + linkType: hard + +"clsx@npm:^2.0.0": + version: 2.1.1 + resolution: "clsx@npm:2.1.1" + checksum: 10c0/c4c8eb865f8c82baab07e71bfa8897c73454881c4f99d6bc81585aecd7c441746c1399d08363dc096c550cceaf97bd4ce1e8854e1771e9998d9f94c4fe075839 + languageName: node + linkType: hard + +"core-js@npm:~3.47.0": + version: 3.47.0 + resolution: "core-js@npm:3.47.0" + checksum: 10c0/9b1a7088b7c660c7b8f1d4c90bb1816a8d5352ebdcb7bc742e3a0e4eb803316b5aa17bacb8769522342196351a5430178f46914644f2bfdb94ce0ced3c7fd523 + languageName: node + linkType: hard + +"csstype@npm:^3.2.2": + version: 3.2.3 + resolution: "csstype@npm:3.2.3" + checksum: 10c0/cd29c51e70fa822f1cecd8641a1445bed7063697469d35633b516e60fe8c1bde04b08f6c5b6022136bb669b64c63d4173af54864510fbb4ee23281801841a3ce + languageName: node + linkType: hard + +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: 10c0/4da0deae9f69e13bc37a0902d78bf7169480004b1fed3c19722d56cff578d16f0e11633b7fbf5fb6249181236c72e90024cbd68f0b9558ae06e281f47326d50d + languageName: node + linkType: hard + +"error-stack-parser@npm:^2.1.4": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: "npm:^1.3.4" + checksum: 10c0/7679b780043c98b01fc546725484e0cfd3071bf5c906bbe358722972f04abf4fc3f0a77988017665bab367f6ef3fc2d0185f7528f45966b83e7c99c02d5509b9 + languageName: node + linkType: hard + +"jiti@npm:^2.6.1": + version: 2.7.0 + resolution: "jiti@npm:2.7.0" + bin: + jiti: lib/jiti-cli.mjs + checksum: 10c0/1b1e2310a490dce1aeea3da5f5dfe18273516c20ce48be2e98eb8ea452d5f3dcc8fd0cfd6d28b4052a24c5dbab6e3089b2d7e79f0bce7915b10d750929563c42 + languageName: node + linkType: hard + +"napi-wasm@npm:^1.0.1": + version: 1.1.3 + resolution: "napi-wasm@npm:1.1.3" + checksum: 10c0/7c365ab9dc59e6f20d7b7886279ecc03ffc7c3d502ed66d32652e3681c3a56c372f00f29b110aefd9b074a6bab6a997e9b602968c18622e2586818f417e41a5d + languageName: node + linkType: hard + +"react-aria-components@npm:1.20.0": + version: 1.20.0 + resolution: "react-aria-components@npm:1.20.0" + dependencies: + "@internationalized/date": "npm:^3.12.3" + "@internationalized/string": "npm:^3.2.10" + "@react-types/shared": "npm:^3.36.1" + "@swc/helpers": "npm:^0.5.0" + client-only: "npm:^0.0.1" + react-aria: "npm:3.51.0" + react-stately: "npm:3.49.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/3ffc9428985b165a82b1cc02c883e6b31f3271be0f227e41b6d2de1ac2b2f111b359b8c410dae264d89d18bbe3b807e3c376ab28810dc8e00420d65e9cf32120 + languageName: node + linkType: hard + +"react-aria@npm:3.51.0": + version: 3.51.0 + resolution: "react-aria@npm:3.51.0" + dependencies: + "@internationalized/date": "npm:^3.12.3" + "@internationalized/number": "npm:^3.6.7" + "@internationalized/string": "npm:^3.2.10" + "@react-types/shared": "npm:^3.36.1" + "@swc/helpers": "npm:^0.5.0" + aria-hidden: "npm:^1.2.3" + clsx: "npm:^2.0.0" + react-stately: "npm:3.49.0" + use-sync-external-store: "npm:^1.6.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/047296e063c8efbc79cc3905ad0e338c7b5918b81e44fadd0ac3f1a2d6728cfc71104ff378e86ef3dc8419e1b3f7174ff9cc1c1b0dd085e9fdfbc95f418196af + languageName: node + linkType: hard + +"react-dom@npm:^19.2.0": + version: 19.2.8 + resolution: "react-dom@npm:19.2.8" + dependencies: + scheduler: "npm:^0.27.0" + peerDependencies: + react: ^19.2.8 + checksum: 10c0/41ba2247b76f687fcfe5bbc99f514d6b851d8c8041c2f5ded36ed05bd7fdc5208cacbac9de51e3e6633e77f96f44cec9f0d4a5a55184dba4e00738f224439134 + languageName: node + linkType: hard + +"react-refresh@npm:^0.18.0": + version: 0.18.0 + resolution: "react-refresh@npm:0.18.0" + checksum: 10c0/34a262f7fd803433a534f50deb27a148112a81adcae440c7d1cbae7ef14d21ea8f2b3d783e858cb7698968183b77755a38b4d4b5b1d79b4f4689c2f6d358fff2 + languageName: node + linkType: hard + +"react-stately@npm:3.49.0": + version: 3.49.0 + resolution: "react-stately@npm:3.49.0" + dependencies: + "@internationalized/date": "npm:^3.12.3" + "@internationalized/number": "npm:^3.6.7" + "@internationalized/string": "npm:^3.2.10" + "@react-types/shared": "npm:^3.36.1" + "@swc/helpers": "npm:^0.5.0" + use-sync-external-store: "npm:^1.6.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1 + checksum: 10c0/6f569dffc1c0bd2900d028c705b35283031abe1f1029e519a342c4f7854b29725aecb758ad2148902101177c202e5c8e386a34f09cda2045cb330a6c3212cb20 + languageName: node + linkType: hard + +"react@npm:^19.2.4": + version: 19.2.8 + resolution: "react@npm:19.2.8" + checksum: 10c0/5f86bdb56426652fd6d989d30a6f2e603c057272c47c9ca3a3fbe190a3a39ee9ccce937d63cfc039717abed1b8891d6a499134bc35311acc07eafdacd86537cd + languageName: node + linkType: hard + +"rsbuild-plugin-dts@npm:0.19.6": + version: 0.19.6 + resolution: "rsbuild-plugin-dts@npm:0.19.6" + dependencies: + "@ast-grep/napi": "npm:0.37.0" + peerDependencies: + "@microsoft/api-extractor": ^7 + "@rsbuild/core": 1.x + "@typescript/native-preview": 7.x + typescript: ^5 + peerDependenciesMeta: + "@microsoft/api-extractor": + optional: true + "@typescript/native-preview": + optional: true + typescript: + optional: true + checksum: 10c0/fcf5eb3a1ce57aa042ea3411b2aa1d00c708abb619548041de945227afc8655e460dd32509c3e604d82a32704d61d1c1e81d54a22625c88e50fc152653980c48 + languageName: node + linkType: hard + +"s2-rslib@workspace:.": + version: 0.0.0-use.local + resolution: "s2-rslib@workspace:." + dependencies: + "@react-spectrum/s2": "npm:latest" + "@rsbuild/plugin-react": "npm:^1.4.5" + "@rslib/core": "npm:^0.19.6" + "@types/react": "npm:^19.2.14" + react: "npm:^19.2.4" + react-dom: "npm:^19.2.0" + typescript: "npm:^5.9.3" + unplugin-parcel-macros: "npm:^0.2.0" + languageName: unknown + linkType: soft + +"scheduler@npm:^0.27.0": + version: 0.27.0 + resolution: "scheduler@npm:0.27.0" + checksum: 10c0/4f03048cb05a3c8fddc45813052251eca00688f413a3cee236d984a161da28db28ba71bd11e7a3dd02f7af84ab28d39fb311431d3b3772fed557945beb00c452 + languageName: node + linkType: hard + +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: 10c0/18410f7a1e0c5d211a4effa83bdbf24adbe8faa8c34db52e1cd3e89837518c592be60b60d8b7270ac53eeeb8b807cd11b399a41667f6c9abb41059c3ccc8a989 + languageName: node + linkType: hard + +"tslib@npm:^2.0.0, tslib@npm:^2.4.0, tslib@npm:^2.8.0": + version: 2.8.1 + resolution: "tslib@npm:2.8.1" + checksum: 10c0/9c4759110a19c53f992d9aae23aac5ced636e99887b51b9e61def52611732872ff7668757d4e4c61f19691e36f4da981cd9485e869b4a7408d689f6bf1f14e62 + languageName: node + linkType: hard + +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + +"unplugin-parcel-macros-darwin-arm64@npm:0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros-darwin-arm64@npm:0.2.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"unplugin-parcel-macros-darwin-x64@npm:0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros-darwin-x64@npm:0.2.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"unplugin-parcel-macros-linux-arm64-gnu@npm:0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros-linux-arm64-gnu@npm:0.2.0" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"unplugin-parcel-macros-linux-arm64-musl@npm:0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros-linux-arm64-musl@npm:0.2.0" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"unplugin-parcel-macros-linux-x64-gnu@npm:0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros-linux-x64-gnu@npm:0.2.0" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"unplugin-parcel-macros-linux-x64-musl@npm:0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros-linux-x64-musl@npm:0.2.0" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"unplugin-parcel-macros-win32-x64-msvc@npm:0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros-win32-x64-msvc@npm:0.2.0" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"unplugin-parcel-macros@npm:^0.2.0": + version: 0.2.0 + resolution: "unplugin-parcel-macros@npm:0.2.0" + dependencies: + "@parcel/source-map": "npm:^2.1.1" + "@swc/core": "npm:^1.15.3" + napi-wasm: "npm:^1.0.1" + unplugin: "npm:^1.9.0" + unplugin-parcel-macros-darwin-arm64: "npm:0.2.0" + unplugin-parcel-macros-darwin-x64: "npm:0.2.0" + unplugin-parcel-macros-linux-arm64-gnu: "npm:0.2.0" + unplugin-parcel-macros-linux-arm64-musl: "npm:0.2.0" + unplugin-parcel-macros-linux-x64-gnu: "npm:0.2.0" + unplugin-parcel-macros-linux-x64-musl: "npm:0.2.0" + unplugin-parcel-macros-win32-x64-msvc: "npm:0.2.0" + dependenciesMeta: + unplugin-parcel-macros-darwin-arm64: + optional: true + unplugin-parcel-macros-darwin-x64: + optional: true + unplugin-parcel-macros-linux-arm64-gnu: + optional: true + unplugin-parcel-macros-linux-arm64-musl: + optional: true + unplugin-parcel-macros-linux-x64-gnu: + optional: true + unplugin-parcel-macros-linux-x64-musl: + optional: true + unplugin-parcel-macros-win32-x64-msvc: + optional: true + checksum: 10c0/4a9f99d9a48dcbedd2a4ae774376ad8130d1fb2c6dfe348871d41a4d4d0c22f0e13f8478363413bb28382b7712093a2eed388d88f6caecce87f601ae62f54fab + languageName: node + linkType: hard + +"unplugin@npm:1.16.1": + version: 1.16.1 + resolution: "unplugin@npm:1.16.1" + dependencies: + acorn: "npm:^8.14.0" + webpack-virtual-modules: "npm:^0.6.2" + checksum: 10c0/dd5f8c5727d0135847da73cf03fb199107f1acf458167034886fda3405737dab871ad3926431b4f70e1e82cdac482ac1383cea4019d782a68515c8e3e611b6cc + languageName: node + linkType: hard + +"unplugin@patch:unplugin@npm%3A1.16.1#~/.yarn/patches/unplugin-npm-1.16.1-77bc28083a.patch": + version: 1.16.1 + resolution: "unplugin@patch:unplugin@npm%3A1.16.1#~/.yarn/patches/unplugin-npm-1.16.1-77bc28083a.patch::version=1.16.1&hash=2c7984" + dependencies: + acorn: "npm:^8.14.0" + webpack-virtual-modules: "npm:^0.6.2" + checksum: 10c0/bd9c6c60ce55b00fdbbda1618c1162ad3fde0a2af6955c1bd7c4beb94375aabfcd47dbfab5bff19b23e64344a861be0cdd19437fbbcb4737d44dd53fdfa408e8 + languageName: node + linkType: hard + +"use-sync-external-store@npm:^1.6.0": + version: 1.6.0 + resolution: "use-sync-external-store@npm:1.6.0" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + checksum: 10c0/35e1179f872a53227bdf8a827f7911da4c37c0f4091c29b76b1e32473d1670ebe7bcd880b808b7549ba9a5605c233350f800ffab963ee4a4ee346ee983b6019b + languageName: node + linkType: hard + +"webpack-virtual-modules@npm:^0.6.2": + version: 0.6.2 + resolution: "webpack-virtual-modules@npm:0.6.2" + checksum: 10c0/5ffbddf0e84bf1562ff86cf6fcf039c74edf09d78358a6904a09bbd4484e8bb6812dc385fe14330b715031892dcd8423f7a88278b57c9f5002c84c2860179add + languageName: node + linkType: hard