diff --git a/.changeset/odd-zebras-enjoy.md b/.changeset/odd-zebras-enjoy.md new file mode 100644 index 00000000..0dd41f13 --- /dev/null +++ b/.changeset/odd-zebras-enjoy.md @@ -0,0 +1,5 @@ +--- +"@devup-ui/webpack-plugin": patch +--- + +Fix hot reload issue diff --git a/.changeset/tricky-roses-ring.md b/.changeset/tricky-roses-ring.md new file mode 100644 index 00000000..88b19b1c --- /dev/null +++ b/.changeset/tricky-roses-ring.md @@ -0,0 +1,6 @@ +--- +"@devup-ui/wasm": patch +"@devup-ui/react": patch +--- + +Add Image component diff --git a/.github/workflows/check-pr.yml b/.github/workflows/check-pr.yml deleted file mode 100644 index b3217e3b..00000000 --- a/.github/workflows/check-pr.yml +++ /dev/null @@ -1,36 +0,0 @@ -name: Check Pull Request -on: - pull_request: - branches: - - main -jobs: - check: - concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - uses: actions-rust-lang/setup-rust-toolchain@v1 - - name: Cargo tarpaulin - run: cargo install cargo-tarpaulin - - uses: jetli/wasm-pack-action@v0.4.0 - with: - version: 'latest' - - name: Install Node.js - uses: actions/setup-node@v4 - with: - node-version: 22 - cache: 'pnpm' - registry-url: 'https://registry.npmjs.org' - - - uses: pnpm/action-setup@v4 - name: Install pnpm - with: - run_install: false - - run: pnpm i - - run: | - pnpm build - pnpm lint - pnpm test diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index f0bc1a2d..65a1e470 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -43,6 +43,7 @@ jobs: - name: Upload to codecov.io uses: codecov/codecov-action@v5 with: + token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: true - name: Create Release Pull Request or Publish to npm id: changesets diff --git a/apps/next/package.json b/apps/next/package.json index e4693d5d..d69fd7a4 100644 --- a/apps/next/package.json +++ b/apps/next/package.json @@ -12,7 +12,7 @@ "dependencies": { "react": "^19.0.0", "react-dom": "^19.0.0", - "next": "15.1.3", + "next": "^15.1.4", "@devup-ui/react": "workspace:*" }, "devDependencies": { diff --git a/bindings/devup-ui-wasm/package.json b/bindings/devup-ui-wasm/package.json index 31a886ec..3062e684 100644 --- a/bindings/devup-ui-wasm/package.json +++ b/bindings/devup-ui-wasm/package.json @@ -25,6 +25,6 @@ "types": "./pkg/index.d.ts", "scripts": { "build": "wasm-pack build --target nodejs --out-dir ./pkg --out-name index", - "test": "cargo test" + "test": "wasm-pack test --node" } } diff --git a/bindings/devup-ui-wasm/src/lib.rs b/bindings/devup-ui-wasm/src/lib.rs index 0170e39a..0bde53c0 100644 --- a/bindings/devup-ui-wasm/src/lib.rs +++ b/bindings/devup-ui-wasm/src/lib.rs @@ -106,7 +106,7 @@ pub fn code_extract( Err(error) => Err(JsValue::from_str(error.to_string().as_str())), } } -fn object_to_typography(obj: Object, level: u8) -> Result { +pub fn object_to_typography(obj: Object, level: u8) -> Result { Ok(Typography::new( Reflect::get(&obj, &JsValue::from_str("fontFamily"))? .as_string() diff --git a/bindings/devup-ui-wasm/tests/wasm.rs b/bindings/devup-ui-wasm/tests/wasm.rs new file mode 100644 index 00000000..4a060331 --- /dev/null +++ b/bindings/devup-ui-wasm/tests/wasm.rs @@ -0,0 +1,47 @@ +use devup_ui_wasm::object_to_typography; +use js_sys::{Object, Reflect}; +use wasm_bindgen::JsValue; +use wasm_bindgen_test::*; + +#[allow(dead_code)] +#[wasm_bindgen_test] +fn test_object_to_typography() { + let obj = Object::new(); + Reflect::set( + &obj, + &JsValue::from_str("fontFamily"), + &JsValue::from_str("Arial"), + ) + .unwrap(); + Reflect::set( + &obj, + &JsValue::from_str("fontSize"), + &JsValue::from_str("12px"), + ) + .unwrap(); + Reflect::set( + &obj, + &JsValue::from_str("fontWeight"), + &JsValue::from_str("bold"), + ) + .unwrap(); + Reflect::set( + &obj, + &JsValue::from_str("lineHeight"), + &JsValue::from_str("1.5"), + ) + .unwrap(); + Reflect::set( + &obj, + &JsValue::from_str("letterSpacing"), + &JsValue::from_str("1px"), + ) + .unwrap(); + let typography = object_to_typography(obj, 0).unwrap(); + assert_eq!(typography.font_family, "Arial"); + assert_eq!(typography.font_size, "12px"); + assert_eq!(typography.font_weight, "bold"); + assert_eq!(typography.line_height, "1.5"); + assert_eq!(typography.letter_spacing, "1px"); + assert_eq!(typography.level, 0); +} diff --git a/bindings/devup-ui-wasm/tests/web.rs b/bindings/devup-ui-wasm/tests/web.rs deleted file mode 100644 index de5c1daf..00000000 --- a/bindings/devup-ui-wasm/tests/web.rs +++ /dev/null @@ -1,13 +0,0 @@ -//! Test suite for the Web and headless browsers. - -#![cfg(target_arch = "wasm32")] - -extern crate wasm_bindgen_test; -use wasm_bindgen_test::*; - -wasm_bindgen_test_configure!(run_in_browser); - -#[wasm_bindgen_test] -fn pass() { - assert_eq!(1 + 1, 2); -} diff --git a/libs/extractor/src/component.rs b/libs/extractor/src/component.rs index 9144a246..b705349a 100644 --- a/libs/extractor/src/component.rs +++ b/libs/extractor/src/component.rs @@ -11,6 +11,7 @@ pub enum ExportVariableKind { Flex, VStack, Center, + Image, Css, } @@ -23,6 +24,7 @@ impl ExportVariableKind { | ExportVariableKind::Flex | ExportVariableKind::Box => Ok("div"), ExportVariableKind::Text => Ok("span"), + ExportVariableKind::Image => Ok("img"), ExportVariableKind::Button => Ok("button"), ExportVariableKind::Input => Ok("input"), ExportVariableKind::Css => Err("Css does not have a tag"), @@ -37,6 +39,7 @@ impl ExportVariableKind { | ExportVariableKind::Button | ExportVariableKind::Css | ExportVariableKind::Text + | ExportVariableKind::Image | ExportVariableKind::Box => vec![], ExportVariableKind::Flex => vec![Static(ExtractStaticStyle { value: "flex".to_string(), @@ -93,6 +96,7 @@ impl TryFrom for ExportVariableKind { match value.as_str() { "Box" => Ok(ExportVariableKind::Box), "Text" => Ok(ExportVariableKind::Text), + "Image" => Ok(ExportVariableKind::Image), "Button" => Ok(ExportVariableKind::Button), "Input" => Ok(ExportVariableKind::Input), "Flex" => Ok(ExportVariableKind::Flex), @@ -118,6 +122,10 @@ mod tests { ExportVariableKind::try_from("Text".to_string()), Ok(ExportVariableKind::Text) ); + assert_eq!( + ExportVariableKind::try_from("Image".to_string()), + Ok(ExportVariableKind::Image) + ); assert_eq!( ExportVariableKind::try_from("Button".to_string()), Ok(ExportVariableKind::Button) @@ -149,6 +157,7 @@ mod tests { fn test_to_tag() { assert_eq!(ExportVariableKind::Box.to_tag(), Ok("div")); assert_eq!(ExportVariableKind::Text.to_tag(), Ok("span")); + assert_eq!(ExportVariableKind::Image.to_tag(), Ok("img")); assert_eq!(ExportVariableKind::Button.to_tag(), Ok("button")); assert_eq!(ExportVariableKind::Input.to_tag(), Ok("input")); assert_eq!(ExportVariableKind::Flex.to_tag(), Ok("div")); @@ -161,6 +170,7 @@ mod tests { fn test_extract_style_from_kind() { assert_eq!(ExportVariableKind::Box.extract(), vec![]); assert_eq!(ExportVariableKind::Text.extract(), vec![]); + assert_eq!(ExportVariableKind::Image.extract(), vec![]); assert_eq!(ExportVariableKind::Button.extract(), vec![]); assert_eq!(ExportVariableKind::Input.extract(), vec![]); assert_eq!( diff --git a/libs/extractor/src/visit.rs b/libs/extractor/src/visit.rs index 1ba479dc..e8a3d4c6 100644 --- a/libs/extractor/src/visit.rs +++ b/libs/extractor/src/visit.rs @@ -120,6 +120,8 @@ impl<'a> VisitMut<'a> for DevupVisitor<'a> { || name == "role" || name == "ref" || name == "key" + || name == "alt" + || name == "src" || name == "children" { continue; diff --git a/package.json b/package.json index 960b0afa..408a1a1d 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "type": "module", "scripts": { "lint": "pnpm -r lint", - "test": "cargo tarpaulin && vitest test --coverage --run", + "test": "cargo tarpaulin && vitest test --coverage --run && pnpm -r test", "build": "pnpm -r build", "dev": "pnpm -r dev" }, diff --git a/packages/next-plugin/package.json b/packages/next-plugin/package.json index acd06bbf..9c6528f1 100644 --- a/packages/next-plugin/package.json +++ b/packages/next-plugin/package.json @@ -7,8 +7,6 @@ "next": "^15.1" }, "scripts": { - "test": "vitest run --coverage", - "test:s": "vitest run -u", "lint": "eslint", "build": "tsc && vite build" }, diff --git a/packages/react/package.json b/packages/react/package.json index 4a890c26..73d49767 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -7,8 +7,6 @@ "csstype": "^3.1" }, "scripts": { - "test": "vitest run --coverage", - "test:s": "vitest run -u", "lint": "eslint", "build": "vite build" }, diff --git a/packages/react/src/__tests__/index.test.ts b/packages/react/src/__tests__/index.test.ts index fc6ed49e..242ac4db 100644 --- a/packages/react/src/__tests__/index.test.ts +++ b/packages/react/src/__tests__/index.test.ts @@ -9,6 +9,7 @@ describe('export', () => { Input: expect.any(Function), Text: expect.any(Function), VStack: expect.any(Function), + Image: expect.any(Function), css: expect.any(Function), }) diff --git a/packages/react/src/components/Box.tsx b/packages/react/src/components/Box.tsx index f8daceb4..93d15838 100644 --- a/packages/react/src/components/Box.tsx +++ b/packages/react/src/components/Box.tsx @@ -1,9 +1,9 @@ import type { DevupProps } from '../types/props' import type { Merge } from '../types/utils' -export function Box( +export function Box( // eslint-disable-next-line @typescript-eslint/no-unused-vars - props: Merge, DevupProps>, + props: Merge, DevupProps>, ): React.ReactElement { throw new Error('Cannot run on the runtime') } diff --git a/packages/react/src/components/Button.tsx b/packages/react/src/components/Button.tsx index bd053adf..70ecb629 100644 --- a/packages/react/src/components/Button.tsx +++ b/packages/react/src/components/Button.tsx @@ -1,9 +1,9 @@ import type { DevupProps } from '../types/props' import type { Merge } from '../types/utils' -export function Button( +export function Button( // eslint-disable-next-line @typescript-eslint/no-unused-vars - props: Merge, DevupProps>, + props: Merge, DevupProps>, ): React.ReactElement { throw new Error('Cannot run on the runtime') } diff --git a/packages/react/src/components/Center.tsx b/packages/react/src/components/Center.tsx index e4641fc0..a42dfc98 100644 --- a/packages/react/src/components/Center.tsx +++ b/packages/react/src/components/Center.tsx @@ -1,9 +1,9 @@ import type { DevupProps } from '../types/props' import type { Merge } from '../types/utils' -export function Center( +export function Center( // eslint-disable-next-line @typescript-eslint/no-unused-vars - props: Merge, DevupProps>, + props: Merge, DevupProps>, ): React.ReactElement { throw new Error('Cannot run on the runtime') } diff --git a/packages/react/src/components/Flex.tsx b/packages/react/src/components/Flex.tsx index 990a04a7..b31fca0e 100644 --- a/packages/react/src/components/Flex.tsx +++ b/packages/react/src/components/Flex.tsx @@ -1,9 +1,9 @@ import type { DevupProps } from '../types/props' import type { Merge } from '../types/utils' -export function Flex( +export function Flex( // eslint-disable-next-line @typescript-eslint/no-unused-vars - props: Merge, DevupProps>, + props: Merge, DevupProps>, ): React.ReactElement { throw new Error('Cannot run on the runtime') } diff --git a/packages/react/src/components/Image.tsx b/packages/react/src/components/Image.tsx new file mode 100644 index 00000000..f567f568 --- /dev/null +++ b/packages/react/src/components/Image.tsx @@ -0,0 +1,9 @@ +import type { DevupProps } from '../types/props' +import type { Merge } from '../types/utils' + +export function Image( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + props: Merge, DevupProps>, +): React.ReactElement { + throw new Error('Cannot run on the runtime') +} diff --git a/packages/react/src/components/Input.tsx b/packages/react/src/components/Input.tsx index 7170003b..1a63e3d3 100644 --- a/packages/react/src/components/Input.tsx +++ b/packages/react/src/components/Input.tsx @@ -1,9 +1,9 @@ import type { DevupProps } from '../types/props' import type { Merge } from '../types/utils' -export function Input( +export function Input( // eslint-disable-next-line @typescript-eslint/no-unused-vars - props: Merge, DevupProps>, + props: Merge, DevupProps>, ): React.ReactElement { throw new Error('Cannot run on the runtime') } diff --git a/packages/react/src/components/Text.tsx b/packages/react/src/components/Text.tsx index 5b83587b..733a9877 100644 --- a/packages/react/src/components/Text.tsx +++ b/packages/react/src/components/Text.tsx @@ -1,9 +1,9 @@ import type { DevupTypographyProps } from '../types/props' import type { Merge } from '../types/utils' -export function Text( +export function Text( // eslint-disable-next-line @typescript-eslint/no-unused-vars - props: Merge, DevupTypographyProps>, + props: Merge, DevupTypographyProps>, ): React.ReactElement { throw new Error('Cannot run on the runtime') } diff --git a/packages/react/src/components/VStack.tsx b/packages/react/src/components/VStack.tsx index 6c039182..596ff847 100644 --- a/packages/react/src/components/VStack.tsx +++ b/packages/react/src/components/VStack.tsx @@ -1,9 +1,9 @@ import type { DevupProps } from '../types/props' import type { Merge } from '../types/utils' -export function VStack( +export function VStack( // eslint-disable-next-line @typescript-eslint/no-unused-vars - props: Merge, DevupProps>, + props: Merge, DevupProps>, ): React.ReactElement { throw new Error('Cannot run on the runtime') } diff --git a/packages/react/src/components/__tests__/index.test.ts b/packages/react/src/components/__tests__/index.test.ts index 53e01982..5df15e6c 100644 --- a/packages/react/src/components/__tests__/index.test.ts +++ b/packages/react/src/components/__tests__/index.test.ts @@ -2,6 +2,7 @@ import { Box } from '../Box' import { Button } from '../Button' import { Center } from '../Center' import { Flex } from '../Flex' +import { Image } from '../Image' import { Input } from '../Input' import { Text } from '../Text' import { VStack } from '../VStack' @@ -15,5 +16,6 @@ describe('Component', () => { expect(() => Input({})).toThrowError('Cannot run on the runtime') expect(() => Text({})).toThrowError('Cannot run on the runtime') expect(() => VStack({})).toThrowError('Cannot run on the runtime') + expect(() => Image({})).toThrowError('Cannot run on the runtime') }) }) diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 04466bd8..1eb16b07 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -2,6 +2,7 @@ export { Box } from './components/Box' export { Button } from './components/Button' export { Center } from './components/Center' export { Flex } from './components/Flex' +export { Image } from './components/Image' export { Input } from './components/Input' export { Text } from './components/Text' export { VStack } from './components/VStack' diff --git a/packages/webpack-plugin/package.json b/packages/webpack-plugin/package.json index 8acba500..4ce41c76 100644 --- a/packages/webpack-plugin/package.json +++ b/packages/webpack-plugin/package.json @@ -21,8 +21,6 @@ ], "types": "./dist/index.d.ts", "scripts": { - "test": "vitest run --coverage", - "test:s": "vitest run -u", "lint": "eslint", "build": "tsc && vite build" }, diff --git a/packages/webpack-plugin/src/__tests__/loader.test.ts b/packages/webpack-plugin/src/__tests__/loader.test.ts index fae061d1..5d4f7670 100644 --- a/packages/webpack-plugin/src/__tests__/loader.test.ts +++ b/packages/webpack-plugin/src/__tests__/loader.test.ts @@ -15,8 +15,12 @@ describe('devupUILoader', () => { it('should ignore lib files', () => { const t = { getOptions: () => ({ - package: 'package', - cssFile: 'cssFile', + plugin: { + options: { + package: 'package', + cssFile: 'cssFile', + }, + }, }), async: vi.fn().mockReturnValue(vi.fn()), resourcePath: 'node_modules/package/index.ts', @@ -33,8 +37,12 @@ describe('devupUILoader', () => { it('should ignore wrong files', () => { const t = { getOptions: () => ({ - package: 'package', - cssFile: 'cssFile', + plugin: { + options: { + package: 'package', + cssFile: 'cssFile', + }, + }, }), async: vi.fn().mockReturnValue(vi.fn()), resourcePath: 'node_modules/package/index.css', @@ -51,8 +59,12 @@ describe('devupUILoader', () => { it('should extract code with css', () => { const t = { getOptions: () => ({ - package: 'package', - cssFile: 'cssFile', + plugin: { + options: { + package: 'package', + cssFile: 'cssFile', + }, + }, }), async: vi.fn().mockReturnValue(vi.fn()), resourcePath: 'index.tsx', @@ -80,8 +92,12 @@ describe('devupUILoader', () => { it('should extract code without css', () => { const t = { getOptions: () => ({ - package: 'package', - cssFile: 'cssFile', + plugin: { + options: { + package: 'package', + cssFile: 'cssFile', + }, + }, }), async: vi.fn().mockReturnValue(vi.fn()), resourcePath: 'index.tsx', @@ -109,8 +125,12 @@ describe('devupUILoader', () => { it('should handle error', () => { const t = { getOptions: () => ({ - package: 'package', - cssFile: 'cssFile', + plugin: { + options: { + package: 'package', + cssFile: 'cssFile', + }, + }, }), async: vi.fn().mockReturnValue(vi.fn()), resourcePath: 'index.tsx', @@ -123,4 +143,34 @@ describe('devupUILoader', () => { expect(t.async).toHaveBeenCalled() expect(t.async()).toHaveBeenCalledWith(new Error('error')) }) + + it('should load with date now on watch', () => { + const t = { + getOptions: () => ({ + plugin: { + options: { + package: 'package', + cssFile: 'cssFile', + }, + watch: true, + }, + }), + async: vi.fn().mockReturnValue(vi.fn()), + resourcePath: 'index.tsx', + } + vi.mocked(codeExtract).mockReturnValue({ + code: 'code', + css: 'css', + free: vi.fn(), + }) + devupUILoader.bind(t as any)(Buffer.from('code'), 'index.tsx') + + expect(t.async).toHaveBeenCalled() + expect(codeExtract).toHaveBeenCalledWith( + 'index.tsx', + 'code', + 'package', + 'cssFile?' + Date.now(), + ) + }) }) diff --git a/packages/webpack-plugin/src/loader.ts b/packages/webpack-plugin/src/loader.ts index b0f6fe38..b694d04c 100644 --- a/packages/webpack-plugin/src/loader.ts +++ b/packages/webpack-plugin/src/loader.ts @@ -3,14 +3,16 @@ import { writeFileSync } from 'node:fs' import { codeExtract } from '@devup-ui/wasm' import type { RawLoaderDefinitionFunction } from 'webpack' +import { type DevupUIWebpackPlugin } from './plugin' + export interface DevupUILoaderOptions { - package: string - cssFile: string + plugin: DevupUIWebpackPlugin } const devupUILoader: RawLoaderDefinitionFunction = function (source) { - const { package: libPackage, cssFile } = this.getOptions() + const { plugin } = this.getOptions() + const { package: libPackage, cssFile } = plugin.options const callback = this.async() const id = this.resourcePath if ( @@ -26,7 +28,7 @@ const devupUILoader: RawLoaderDefinitionFunction = this.resourcePath, source.toString(), libPackage, - cssFile, + cssFile + (plugin.watch ? '?' + Date.now() : ''), ) if (css) { // should be reset css diff --git a/packages/webpack-plugin/src/plugin.ts b/packages/webpack-plugin/src/plugin.ts index abe3ede9..9db9adf3 100644 --- a/packages/webpack-plugin/src/plugin.ts +++ b/packages/webpack-plugin/src/plugin.ts @@ -24,6 +24,7 @@ export interface DevupUIWebpackPluginOptions { export class DevupUIWebpackPlugin { options: DevupUIWebpackPluginOptions + watch = false constructor({ package: libPackage = '@devup-ui/react', @@ -77,6 +78,7 @@ export class DevupUIWebpackPlugin { compiler.hooks.afterCompile.tap('DevupUIWebpackPlugin', (compilation) => { compilation.fileDependencies.add(this.options.devupPath) + this.watch = true }) compiler.hooks.watchRun.tapAsync( 'DevupUIWebpackPlugin', @@ -111,8 +113,7 @@ export class DevupUIWebpackPlugin { '@devup-ui/webpack-plugin/loader', ), options: { - package: this.options.package, - cssFile: this.options.cssFile, + plugin: this, }, }, ], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2a3e8f8a..491efcc3 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: workspace:* version: link:../../packages/react next: - specifier: 15.1.3 - version: 15.1.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + specifier: ^15.1.4 + version: 15.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react: specifier: ^19.0.0 version: 19.0.0 @@ -715,54 +715,105 @@ packages: '@next/env@15.1.3': resolution: {integrity: sha512-Q1tXwQCGWyA3ehMph3VO+E6xFPHDKdHFYosadt0F78EObYxPio0S09H9UGYznDe6Wc8eLKLG89GqcFJJDiK5xw==} + '@next/env@15.1.4': + resolution: {integrity: sha512-2fZ5YZjedi5AGaeoaC0B20zGntEHRhi2SdWcu61i48BllODcAmmtj8n7YarSPt4DaTsJaBFdxQAVEVzgmx2Zpw==} + '@next/swc-darwin-arm64@15.1.3': resolution: {integrity: sha512-aZtmIh8jU89DZahXQt1La0f2EMPt/i7W+rG1sLtYJERsP7GRnNFghsciFpQcKHcGh4dUiyTB5C1X3Dde/Gw8gg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + '@next/swc-darwin-arm64@15.1.4': + resolution: {integrity: sha512-wBEMBs+np+R5ozN1F8Y8d/Dycns2COhRnkxRc+rvnbXke5uZBHkUGFgWxfTXn5rx7OLijuUhyfB+gC/ap58dDw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + '@next/swc-darwin-x64@15.1.3': resolution: {integrity: sha512-aw8901rjkVBK5mbq5oV32IqkJg+CQa6aULNlN8zyCWSsePzEG3kpDkAFkkTOh3eJ0p95KbkLyWBzslQKamXsLA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + '@next/swc-darwin-x64@15.1.4': + resolution: {integrity: sha512-7sgf5rM7Z81V9w48F02Zz6DgEJulavC0jadab4ZsJ+K2sxMNK0/BtF8J8J3CxnsJN3DGcIdC260wEKssKTukUw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + '@next/swc-linux-arm64-gnu@15.1.3': resolution: {integrity: sha512-YbdaYjyHa4fPK4GR4k2XgXV0p8vbU1SZh7vv6El4bl9N+ZSiMfbmqCuCuNU1Z4ebJMumafaz6UCC2zaJCsdzjw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-gnu@15.1.4': + resolution: {integrity: sha512-JaZlIMNaJenfd55kjaLWMfok+vWBlcRxqnRoZrhFQrhM1uAehP3R0+Aoe+bZOogqlZvAz53nY/k3ZyuKDtT2zQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-arm64-musl@15.1.3': resolution: {integrity: sha512-qgH/aRj2xcr4BouwKG3XdqNu33SDadqbkqB6KaZZkozar857upxKakbRllpqZgWl/NDeSCBYPmUAZPBHZpbA0w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + '@next/swc-linux-arm64-musl@15.1.4': + resolution: {integrity: sha512-7EBBjNoyTO2ipMDgCiORpwwOf5tIueFntKjcN3NK+GAQD7OzFJe84p7a2eQUeWdpzZvhVXuAtIen8QcH71ZCOQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + '@next/swc-linux-x64-gnu@15.1.3': resolution: {integrity: sha512-uzafnTFwZCPN499fNVnS2xFME8WLC9y7PLRs/yqz5lz1X/ySoxfaK2Hbz74zYUdEg+iDZPd8KlsWaw9HKkLEVw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-gnu@15.1.4': + resolution: {integrity: sha512-9TGEgOycqZFuADyFqwmK/9g6S0FYZ3tphR4ebcmCwhL8Y12FW8pIBKJvSwV+UBjMkokstGNH+9F8F031JZKpHw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-linux-x64-musl@15.1.3': resolution: {integrity: sha512-el6GUFi4SiDYnMTTlJJFMU+GHvw0UIFnffP1qhurrN1qJV3BqaSRUjkDUgVV44T6zpw1Lc6u+yn0puDKHs+Sbw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + '@next/swc-linux-x64-musl@15.1.4': + resolution: {integrity: sha512-0578bLRVDJOh+LdIoKvgNDz77+Bd85c5JrFgnlbI1SM3WmEQvsjxTA8ATu9Z9FCiIS/AliVAW2DV/BDwpXbtiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + '@next/swc-win32-arm64-msvc@15.1.3': resolution: {integrity: sha512-6RxKjvnvVMM89giYGI1qye9ODsBQpHSHVo8vqA8xGhmRPZHDQUE4jcDbhBwK0GnFMqBnu+XMg3nYukNkmLOLWw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + '@next/swc-win32-arm64-msvc@15.1.4': + resolution: {integrity: sha512-JgFCiV4libQavwII+kncMCl30st0JVxpPOtzWcAI2jtum4HjYaclobKhj+JsRu5tFqMtA5CJIa0MvYyuu9xjjQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + '@next/swc-win32-x64-msvc@15.1.3': resolution: {integrity: sha512-VId/f5blObG7IodwC5Grf+aYP0O8Saz1/aeU3YcWqNdIUAmFQY3VEPKPaIzfv32F/clvanOb2K2BR5DtDs6XyQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + '@next/swc-win32-x64-msvc@15.1.4': + resolution: {integrity: sha512-xxsJy9wzq7FR5SqPCUqdgSXiNXrMuidgckBa8nH9HtjjxsilgcN6VgXF6tZ3uEWuVEadotQJI8/9EQ6guTC4Yw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -2124,6 +2175,27 @@ packages: sass: optional: true + next@15.1.4: + resolution: {integrity: sha512-mTaq9dwaSuwwOrcu3ebjDYObekkxRnXpuVL21zotM8qE2W0HBOdVIdg2Li9QjMEZrj73LN96LcWcz62V19FjAg==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + 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 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} @@ -3407,30 +3479,56 @@ snapshots: '@next/env@15.1.3': {} + '@next/env@15.1.4': {} + '@next/swc-darwin-arm64@15.1.3': optional: true + '@next/swc-darwin-arm64@15.1.4': + optional: true + '@next/swc-darwin-x64@15.1.3': optional: true + '@next/swc-darwin-x64@15.1.4': + optional: true + '@next/swc-linux-arm64-gnu@15.1.3': optional: true + '@next/swc-linux-arm64-gnu@15.1.4': + optional: true + '@next/swc-linux-arm64-musl@15.1.3': optional: true + '@next/swc-linux-arm64-musl@15.1.4': + optional: true + '@next/swc-linux-x64-gnu@15.1.3': optional: true + '@next/swc-linux-x64-gnu@15.1.4': + optional: true + '@next/swc-linux-x64-musl@15.1.3': optional: true + '@next/swc-linux-x64-musl@15.1.4': + optional: true + '@next/swc-win32-arm64-msvc@15.1.3': optional: true + '@next/swc-win32-arm64-msvc@15.1.4': + optional: true + '@next/swc-win32-x64-msvc@15.1.3': optional: true + '@next/swc-win32-x64-msvc@15.1.4': + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5042,6 +5140,31 @@ snapshots: - '@babel/core' - babel-plugin-macros + next@15.1.4(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + dependencies: + '@next/env': 15.1.4 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001690 + postcss: 8.4.31 + react: 19.0.0 + react-dom: 19.0.0(react@19.0.0) + styled-jsx: 5.1.6(react@19.0.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.1.4 + '@next/swc-darwin-x64': 15.1.4 + '@next/swc-linux-arm64-gnu': 15.1.4 + '@next/swc-linux-arm64-musl': 15.1.4 + '@next/swc-linux-x64-gnu': 15.1.4 + '@next/swc-linux-x64-musl': 15.1.4 + '@next/swc-win32-arm64-msvc': 15.1.4 + '@next/swc-win32-x64-msvc': 15.1.4 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + node-releases@2.0.19: {} object-assign@4.1.1: {}