From 857197ba93eabda4b85cd8fa52205d2779425276 Mon Sep 17 00:00:00 2001 From: Austin1serb Date: Fri, 1 Aug 2025 17:37:04 -0700 Subject: [PATCH 1/5] added support to toggle css variables without re-renders --- examples/demo/.zero-ui/index.ts | 1 + examples/demo/.zero-ui/init-zero-ui.ts | 38 +++++++------------ .../demo/src/app/zero-ui-ssr/Dashboard.tsx | 5 ++- package.json | 2 +- packages/core/__tests__/e2e/next.spec.js | 10 +++++ .../fixtures/next/.zero-ui/attributes.d.ts | 3 ++ .../fixtures/next/.zero-ui/attributes.js | 1 + .../fixtures/next/app/CssVarDemo.tsx | 34 +++++++++++++++++ .../core/__tests__/fixtures/next/app/page.tsx | 29 +++++++++++++- packages/core/src/experimental/index.ts | 0 packages/core/src/index.ts | 13 ++++--- packages/core/src/internal.ts | 35 +++++++---------- .../src/rules/require-data-attr.ts | 2 +- 13 files changed, 116 insertions(+), 57 deletions(-) create mode 100644 examples/demo/.zero-ui/index.ts create mode 100644 packages/core/__tests__/fixtures/next/app/CssVarDemo.tsx create mode 100644 packages/core/src/experimental/index.ts diff --git a/examples/demo/.zero-ui/index.ts b/examples/demo/.zero-ui/index.ts new file mode 100644 index 0000000..105dace --- /dev/null +++ b/examples/demo/.zero-ui/index.ts @@ -0,0 +1 @@ +export const zeroSSR = { onClick: (key: string, vals: [...V]) => ({ 'data-ui': `cycle:${key}(${vals.join(',')})` }) as const }; diff --git a/examples/demo/.zero-ui/init-zero-ui.ts b/examples/demo/.zero-ui/init-zero-ui.ts index 9708199..5bf0023 100644 --- a/examples/demo/.zero-ui/init-zero-ui.ts +++ b/examples/demo/.zero-ui/init-zero-ui.ts @@ -1,38 +1,26 @@ import { bodyAttributes } from './attributes'; if (typeof window !== 'undefined') { - const toDatasetKey = (dataKey: string) => dataKey.slice(5).replace(/-([a-z])/g, (_, c) => c.toUpperCase()); + const toCamel = (key: string) => key.slice(5).replace(/-([a-z])/g, (_, c) => c.toUpperCase()); - const act = { - // toggle:theme-test(dark,light) - toggle: (k: string, [on = 'on']: string[]) => { - document.body.dataset[k] = document.body.dataset[k] ? '' : on; - }, - // cycle:theme-test(dark,light) - cycle: (k: string, vals: string[]) => { - const cur = document.body.dataset[k] ?? vals[0]; - const next = vals[(vals.indexOf(cur) + 1) % vals.length]; - document.body.dataset[k] = next; - }, - // set:theme-test(dark) - set: (k: string, [v = '']: string[]) => { - document.body.dataset[k] = v; - }, - // attr:theme-test(data-theme) - attr: (k: string, [attr]: string[], el: HTMLElement) => { - document.body.dataset[k] = el.getAttribute(attr) ?? ''; - }, + const cycle = (target: HTMLElement, k: string, vals: string[]) => { + const cur = target.dataset[k] ?? vals[0]; // default = first value + const next = vals[(vals.indexOf(cur) + 1) % vals.length]; + target.dataset[k] = next; }; document.addEventListener('click', (e) => { const el = (e.target as HTMLElement).closest('[data-ui]'); if (!el) return; - const [, cmd, key, raw] = el.dataset.ui!.match(/^(\w+):([\w-]+)(?:\((.*?)\))?$/) || []; - if (!cmd || !(`data-${key}` in bodyAttributes)) return; + const [, key, rawVals = ''] = el.dataset.ui!.match(/^cycle:([\w-]+)(?:\((.*?)\))?$/) || []; - const dsKey = toDatasetKey(`data-${key}`); - console.log('dsKey: ', dsKey); - act[cmd as keyof typeof act]?.(dsKey, raw ? raw.split(',') : [], el); + if (!(`data-${key}` in bodyAttributes)) return; // unknown variant → bail + + const vals = rawVals.split(','); // '' → [''] OK for toggle + const dsKey = toCamel(`data-${key}`); + const target = (el.closest(`[data-${key}]`) as HTMLElement) ?? document.body; + + cycle(target, dsKey, vals); }); } diff --git a/examples/demo/src/app/zero-ui-ssr/Dashboard.tsx b/examples/demo/src/app/zero-ui-ssr/Dashboard.tsx index fd474cf..c36816c 100644 --- a/examples/demo/src/app/zero-ui-ssr/Dashboard.tsx +++ b/examples/demo/src/app/zero-ui-ssr/Dashboard.tsx @@ -1,13 +1,16 @@ +import { zeroSSR } from '../../../.zero-ui'; import { InnerDot } from './InnerDot'; import Link from 'next/link'; export const Dashboard: React.FC = () => { + const theme = 'theme-test'; + const themeValues = ['dark', 'light']; return (
+ + {/* expose current value for assertions */} +

{blur}

+
+ ); +} diff --git a/packages/core/__tests__/fixtures/next/app/page.tsx b/packages/core/__tests__/fixtures/next/app/page.tsx index d19bd6b..2ed0c5d 100644 --- a/packages/core/__tests__/fixtures/next/app/page.tsx +++ b/packages/core/__tests__/fixtures/next/app/page.tsx @@ -1,9 +1,10 @@ 'use client'; -import { useScopedUI, useUI } from '@react-zero-ui/core'; +import { cssVar, useScopedUI, useUI } from '@react-zero-ui/core'; import UseEffectComponent from './UseEffectComponent'; import FAQ from './FAQ'; import { ChildComponent } from './ChildComponent'; import { ChildWithoutSetter } from './ChildWithoutSetter'; +import CssVarDemo from './CssVarDemo'; export default function Page() { const [scope, setScope] = useScopedUI<'off' | 'on'>('scope', 'off'); @@ -19,13 +20,15 @@ export default function Page() { const [, setToggleFunction] = useUI<'white' | 'black'>('toggle-function', 'white'); + const [global, setGlobal] = useUI<'0px' | '4px'>('blur-global', '0px', cssVar); + const toggleFunction = () => { setToggleFunction((prev) => (prev === 'white' ? 'black' : 'white')); }; return (

Global State


@@ -223,6 +226,28 @@ export default function Page() { question="Question 3" answer="Answer 3" /> + + {Array.from({ length: 2 }).map((_, index) => ( + + ))} +
+ +
+
); } diff --git a/packages/core/src/experimental/index.ts b/packages/core/src/experimental/index.ts new file mode 100644 index 0000000..e69de29 diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 5bb2049..1edc334 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1,26 +1,27 @@ 'use client'; import { useRef, type RefObject } from 'react'; -import { makeSetter } from './internal.js'; +import { cssVar, makeSetter } from './internal.js'; type UIAction = T | ((prev: T) => T); interface ScopedSetterFn { (action: UIAction): void; // ← SINGLE source of truth ref?: RefObject | ((node: HTMLElement | null) => void); + cssVar?: typeof cssVar; } type GlobalSetterFn = (action: UIAction) => void; -function useUI(key: string, initial: T): [T, GlobalSetterFn] { - return [initial, useRef(makeSetter(key, initial, () => document.body)).current as GlobalSetterFn]; +function useUI(key: string, initial: T, flag?: typeof cssVar): [T, GlobalSetterFn] { + return [initial, useRef(makeSetter(key, initial, () => document.body, flag)).current as GlobalSetterFn]; } -function useScopedUI(key: string, initialValue: T): [T, ScopedSetterFn] { +function useScopedUI(key: string, initialValue: T, flag?: typeof cssVar): [T, ScopedSetterFn] { // Create a ref to hold the DOM element that will receive the data-* attributes // This allows scoping UI state to specific elements instead of always using document.body const scopeRef = useRef(null); - const setterFn = useRef(makeSetter(key, initialValue, () => scopeRef.current!)).current as ScopedSetterFn; + const setterFn = useRef(makeSetter(key, initialValue, () => scopeRef.current!, flag)).current as ScopedSetterFn; if (process.env.NODE_ENV !== 'production') { // -- DEV-ONLY MULTIPLE REF GUARD (removed in production by modern bundlers) -- @@ -53,5 +54,5 @@ function useScopedUI(key: string, initialValue: T): [ return [initialValue, setterFn]; } -export { useUI, useScopedUI }; +export { useUI, useScopedUI, cssVar }; export type { UIAction, ScopedSetterFn, GlobalSetterFn }; diff --git a/packages/core/src/internal.ts b/packages/core/src/internal.ts index 2547f1e..93c36b1 100644 --- a/packages/core/src/internal.ts +++ b/packages/core/src/internal.ts @@ -1,8 +1,11 @@ -// internal.ts +// src/internal.ts +import { UIAction } from './index.js'; -export function makeSetter(key: string, initialValue: T, getTarget: () => HTMLElement) { - const camelKey = key.replace(/-([a-z])/g, (_, l) => l.toUpperCase()); +export const cssVar: unique symbol = Symbol('cssVar'); +export function makeSetter(key: string, initialValue: T, getTarget: () => HTMLElement, flag?: typeof cssVar) { + const camelKey = key.replace(/-([a-z])/g, (_, l) => l.toUpperCase()); + const isCss = flag === cssVar; if (process.env.NODE_ENV !== 'production') { if (key.includes(' ') || initialValue.includes(' ')) { throw new Error(`[Zero-UI] useUI(key, initialValue); key and initialValue must not contain spaces, got "${key}" and "${initialValue}"`); @@ -43,29 +46,19 @@ export function makeSetter(key: string, initialValue: T, getTa registry.set(key, initialValue); } } - return (valueOrFn: T | ((prev: T) => T)) => { + return (valueOrFn: UIAction) => { // SSR safety: bail out if running on server where window is undefined if (typeof window === 'undefined') return; const target = getTarget(); - if (process.env.NODE_ENV !== 'production') { - if (target === null) { - throw new Error( - `[Zero-UI] useScopedUI(key, initialValue); targetRef is null. \n` + - `This is likely due to a missing ref attachment. \n` + - `Solution: Attach a ref to the component.\n` + - `Example:
` - ); - } - } - // Write the new value to the data-* attribute - target.dataset[camelKey] = - // Check if caller passed an updater function (like React's setState(prev => prev === 'true' ? 'false' : 'true') pattern) + const prev = isCss ? ((target.style.getPropertyValue(`--${key}`) || initialValue) as T) : ((target.dataset[camelKey] || initialValue) as T); + + const next = typeof valueOrFn === 'function' - ? // Call the updater function with the parsed current value - fallback to initial value if not set - valueOrFn((target.dataset[camelKey] as T) ?? initialValue) - : // Direct value assignment (no updater function) - valueOrFn; + ? (valueOrFn as (p: T) => T)(prev) // ← CALL the updater + : valueOrFn; + + isCss ? target.style.setProperty(`--${key}`, next) : (target.dataset[camelKey] = next); }; } diff --git a/packages/eslint-plugin-react-zero-ui/src/rules/require-data-attr.ts b/packages/eslint-plugin-react-zero-ui/src/rules/require-data-attr.ts index 6b9464e..30bfe99 100644 --- a/packages/eslint-plugin-react-zero-ui/src/rules/require-data-attr.ts +++ b/packages/eslint-plugin-react-zero-ui/src/rules/require-data-attr.ts @@ -12,7 +12,7 @@ export default createRule({ docs: { description: 'Enforce data-* attribute on element using setter.ref' }, schema: [], messages: { - missingAttr: 'Element using "{{setter}}.ref" must include {{attr}} to avoid FOUC.', + missingAttr: 'Element using "{{setter}}.ref" should include {{attr}}=initialState to avoid FOUC.', missingRef: 'Setter "{{setter}}" from useScopedUI("{{key}}") was never attached via .ref.', }, }, From 96f8a35f4b423d3a93559e936001b1a0cb80276d Mon Sep 17 00:00:00 2001 From: Austin1serb Date: Fri, 1 Aug 2025 21:27:15 -0700 Subject: [PATCH 2/5] added new experimental SSR safe onClick handler --- packages/core/__tests__/e2e/next.spec.js | 10 + .../fixtures/next/.zero-ui/attributes.d.ts | 5 + .../fixtures/next/.zero-ui/attributes.js | 18 + .../fixtures/next/app/CssVarDemo.tsx | 3 +- .../core/__tests__/fixtures/next/app/page.tsx | 27 +- .../fixtures/next/app/zero-runtime.tsx | 13 + .../fixtures/vite/.zero-ui/attributes.d.ts | 4 + .../fixtures/vite/.zero-ui/attributes.js | 13 + packages/core/package.json | 28 +- packages/core/src/config.ts | 5 +- packages/core/src/experimental/InitZeroUI.ts | 6 + packages/core/src/experimental/index.ts | 3 + packages/core/src/experimental/runtime.ts | 27 + .../core/src/postcss/ast-generating.test.ts | 2 +- packages/core/src/postcss/ast-parsing.test.ts | 2 +- packages/core/src/postcss/ast-parsing.ts | 66 +- packages/core/src/postcss/helpers.test.ts | 2 +- packages/core/src/postcss/helpers.ts | 85 +- packages/core/src/postcss/index.cts | 108 +- packages/core/src/postcss/resolvers.test.ts | 2 +- packages/core/src/postcss/resolvers.ts | 1 - packages/core/src/postcss/test-utilities.ts | 31 + packages/core/src/postcss/utilities.ts | 50 +- packages/core/tsconfig.build.json | 11 +- packages/core/tsconfig.json | 11 +- pnpm-lock.yaml | 1159 +++++++---------- 26 files changed, 872 insertions(+), 820 deletions(-) create mode 100644 packages/core/__tests__/fixtures/next/app/zero-runtime.tsx create mode 100644 packages/core/src/experimental/InitZeroUI.ts create mode 100644 packages/core/src/experimental/runtime.ts create mode 100644 packages/core/src/postcss/test-utilities.ts diff --git a/packages/core/__tests__/e2e/next.spec.js b/packages/core/__tests__/e2e/next.spec.js index eed1aab..3c23bfa 100644 --- a/packages/core/__tests__/e2e/next.spec.js +++ b/packages/core/__tests__/e2e/next.spec.js @@ -84,6 +84,16 @@ const scenarios = [ initialText: 'Closed', toggledText: 'Open', }, + { + name: 'SSR Theme Toggle', + toggle: 'theme-ssr-toggle', + container: 'theme-ssr-container', + attr: 'data-theme-ssr', + initialValue: 'light', + toggledValue: 'dark', + initialText: 'Light', + toggledText: 'Dark', + }, ]; test.describe.configure({ mode: 'serial' }); diff --git a/packages/core/__tests__/fixtures/next/.zero-ui/attributes.d.ts b/packages/core/__tests__/fixtures/next/.zero-ui/attributes.d.ts index e81ac9c..be5c3b0 100644 --- a/packages/core/__tests__/fixtures/next/.zero-ui/attributes.d.ts +++ b/packages/core/__tests__/fixtures/next/.zero-ui/attributes.d.ts @@ -10,8 +10,13 @@ export declare const bodyAttributes: { "data-scope": "off" | "on"; "data-theme": "dark" | "light"; "data-theme-2": "dark" | "light"; + "data-theme-ssr": "dark" | "light"; "data-theme-three": "dark" | "light"; "data-toggle-boolean": "false" | "true"; "data-toggle-function": "black" | "blue" | "green" | "red" | "white"; "data-use-effect-theme": "dark" | "light"; }; + +export declare const variantKeyMap: { + [key: string]: true; +}; diff --git a/packages/core/__tests__/fixtures/next/.zero-ui/attributes.js b/packages/core/__tests__/fixtures/next/.zero-ui/attributes.js index 009c73f..4d92ac5 100644 --- a/packages/core/__tests__/fixtures/next/.zero-ui/attributes.js +++ b/packages/core/__tests__/fixtures/next/.zero-ui/attributes.js @@ -5,8 +5,26 @@ export const bodyAttributes = { "data-number": "1", "data-theme": "light", "data-theme-2": "light", + "data-theme-ssr": "light", "data-theme-three": "light", "data-toggle-boolean": "true", "data-toggle-function": "white", "data-use-effect-theme": "light" }; +export const variantKeyMap = { + "data-blur": true, + "data-blur-global": true, + "data-child": true, + "data-dialog": true, + "data-faq": true, + "data-mobile": true, + "data-number": true, + "data-scope": true, + "data-theme": true, + "data-theme-2": true, + "data-theme-ssr": true, + "data-theme-three": true, + "data-toggle-boolean": true, + "data-toggle-function": true, + "data-use-effect-theme": true +}; diff --git a/packages/core/__tests__/fixtures/next/app/CssVarDemo.tsx b/packages/core/__tests__/fixtures/next/app/CssVarDemo.tsx index f7f79c3..8455790 100644 --- a/packages/core/__tests__/fixtures/next/app/CssVarDemo.tsx +++ b/packages/core/__tests__/fixtures/next/app/CssVarDemo.tsx @@ -13,6 +13,7 @@ export default function CssVarDemo({ index = 0 }) { // 👇 pass `cssVar` flag to switch makeSetter into CSS-var mode const [blur, setBlur] = useScopedUI<'0px' | '4px'>('blur', '0px', cssVar); // global test + //@ts-ignore return (
setBlur((prev) => (prev === '0px' ? '4px' : '0px'))} - className="px-3 py-1 rounded bg-black text-white"> + className="px-3 py-1 rounded bg-black text-white "> toggle blur diff --git a/packages/core/__tests__/fixtures/next/app/page.tsx b/packages/core/__tests__/fixtures/next/app/page.tsx index 2ed0c5d..fa019a5 100644 --- a/packages/core/__tests__/fixtures/next/app/page.tsx +++ b/packages/core/__tests__/fixtures/next/app/page.tsx @@ -5,6 +5,8 @@ import FAQ from './FAQ'; import { ChildComponent } from './ChildComponent'; import { ChildWithoutSetter } from './ChildWithoutSetter'; import CssVarDemo from './CssVarDemo'; +import { zeroSSR } from '@react-zero-ui/core/experimental'; +import ZeroUiRuntime from './zero-runtime'; export default function Page() { const [scope, setScope] = useScopedUI<'off' | 'on'>('scope', 'off'); @@ -20,7 +22,7 @@ export default function Page() { const [, setToggleFunction] = useUI<'white' | 'black'>('toggle-function', 'white'); - const [global, setGlobal] = useUI<'0px' | '4px'>('blur-global', '0px', cssVar); + const [, setGlobal] = useUI<'0px' | '4px'>('blur-global', '0px', cssVar); const toggleFunction = () => { setToggleFunction((prev) => (prev === 'white' ? 'black' : 'white')); @@ -30,6 +32,7 @@ export default function Page() {
+

Global State


@@ -38,6 +41,28 @@ export default function Page() {
+
+ + + Dark + + + Light + +
+
+
diff --git a/packages/core/__tests__/fixtures/next/app/zero-runtime.tsx b/packages/core/__tests__/fixtures/next/app/zero-runtime.tsx new file mode 100644 index 0000000..707a0aa --- /dev/null +++ b/packages/core/__tests__/fixtures/next/app/zero-runtime.tsx @@ -0,0 +1,13 @@ +'use client'; + +/* ① import the generated defaults */ +import { bodyAttributes } from '../.zero-ui/attributes'; + +/* ② activate the runtime shipped in the package */ +import { activateZeroUiRuntime } from '@react-zero-ui/core/experimental/runtime'; + +activateZeroUiRuntime(bodyAttributes); + +export default function ZeroUiRuntime() { + return null; // this component just runs the side effect +} diff --git a/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.d.ts b/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.d.ts index 7fc6fba..6da0d21 100644 --- a/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.d.ts +++ b/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.d.ts @@ -12,3 +12,7 @@ export declare const bodyAttributes: { "data-toggle-function": "black" | "blue" | "green" | "red" | "white"; "data-use-effect-theme": "dark" | "light"; }; + +export declare const variantKeyMap: { + [key: string]: true; +}; diff --git a/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.js b/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.js index 3db700f..39b4b9c 100644 --- a/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.js +++ b/packages/core/__tests__/fixtures/vite/.zero-ui/attributes.js @@ -9,3 +9,16 @@ export const bodyAttributes = { "data-toggle-function": "white", "data-use-effect-theme": "light" }; +export const variantKeyMap = { + "data-child": true, + "data-faq": true, + "data-mobile": true, + "data-number": true, + "data-scope": true, + "data-theme": true, + "data-theme-2": true, + "data-theme-three": true, + "data-toggle-boolean": true, + "data-toggle-function": true, + "data-use-effect-theme": true +}; diff --git a/packages/core/package.json b/packages/core/package.json index cb740ac..8abed9e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -7,7 +7,9 @@ "main": "./dist/index.js", "module": "./dist/index.js", "types": "./dist/index.d.ts", - "sideEffects": false, + "sideEffects": [ + "./dist/experimental/runtime.js" + ], "files": [ "dist/**/*", "README.md", @@ -30,6 +32,30 @@ "types": "./dist/cli/init.d.ts", "require": "./dist/cli/init.js", "import": "./dist/cli/init.js" + }, + "./experimental": { + "types": "./dist/experimental/index.d.ts", + "import": "./dist/experimental/index.js" + }, + "./experimental/runtime": { + "import": "./dist/experimental/runtime.js" + }, + "./experimental/init": { + "types": "./dist/experimental/InitZeroUI.d.ts", + "import": "./dist/experimental/InitZeroUI.js" + } + }, + "typesVersions": { + "*": { + "experimental/init": [ + "dist/experimental/InitZeroUI.d.ts" + ], + "experimental/runtime": [ + "dist/experimental/runtime.d.ts" + ], + "experimental": [ + "dist/experimental/index.d.ts" + ] } }, "scripts": { diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index fe59abf..7419354 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -2,7 +2,10 @@ export const CONFIG = { SUPPORTED_EXTENSIONS: { TYPESCRIPT: ['.ts', '.tsx'], JAVASCRIPT: ['.js', '.jsx'] }, HOOK_NAME: 'useUI', LOCAL_HOOK_NAME: 'useScopedUI', + SSR_HOOK_NAME: 'zeroSSR', + SSR_HOOK_NAME_SCOPED: 'scopedZeroSSR', IMPORT_NAME: '@react-zero-ui/core', + PLUGIN_NAME: 'postcss-react-zero-ui', MIN_HOOK_ARGUMENTS: 2, MAX_HOOK_ARGUMENTS: 2, HEADER: '/* AUTO-GENERATED - DO NOT EDIT */', @@ -10,7 +13,7 @@ export const CONFIG = { CONTENT: ['src/**/*.{ts,tsx,js,jsx}', 'app/**/*.{ts,tsx,js,jsx}', 'pages/**/*.{ts,tsx,js,jsx}'], POSTCSS_PLUGIN: '@react-zero-ui/core/postcss', VITE_PLUGIN: '@react-zero-ui/core/vite', -}; +} as const; export const IGNORE_DIRS = [ '**/node_modules/**', diff --git a/packages/core/src/experimental/InitZeroUI.ts b/packages/core/src/experimental/InitZeroUI.ts new file mode 100644 index 0000000..9a7cc7f --- /dev/null +++ b/packages/core/src/experimental/InitZeroUI.ts @@ -0,0 +1,6 @@ +'use client'; +import './runtime.js'; + +export default function InitZeroUI() { + return null; +} diff --git a/packages/core/src/experimental/index.ts b/packages/core/src/experimental/index.ts index e69de29..1d092be 100644 --- a/packages/core/src/experimental/index.ts +++ b/packages/core/src/experimental/index.ts @@ -0,0 +1,3 @@ +export const zeroSSR = { onClick: (key: string, vals: [...V]) => ({ 'data-ui': `cycle:${key}(${vals.join(',')})` }) as const }; + +export const scopedZeroSSR = { onClick: (key: string, vals: [...V]) => ({ 'data-ui': `cycle:${key}(${vals.join(',')})` }) as const }; diff --git a/packages/core/src/experimental/runtime.ts b/packages/core/src/experimental/runtime.ts new file mode 100644 index 0000000..aa27288 --- /dev/null +++ b/packages/core/src/experimental/runtime.ts @@ -0,0 +1,27 @@ +const toCamel = (k: string) => k.slice(5).replace(/-([a-z])/g, (_, c) => c.toUpperCase()); + +const cycle = (el: HTMLElement, ds: string, vals: string[]) => { + const cur = el.dataset[ds] ?? vals[0]; + const next = vals[(vals.indexOf(cur) + 1) % vals.length]; + el.dataset[ds] = next; +}; + +export function activateZeroUiRuntime(bodyAttributes: Record) { + if (typeof window === 'undefined' || (window as any).__zeroUIRuntime) return; + (window as any).__zeroUIRuntime = true; + + document.addEventListener('click', (e) => { + const host = (e.target as HTMLElement).closest('[data-ui]'); + if (!host) return; + + const [, key, raw = ''] = host.dataset.ui!.match(/^cycle:([\w-]+)(?:\((.*?)\))?$/) || []; + + if (!(/* validation */ (`data-${key}` in bodyAttributes))) return; + + const vals = raw.split(','); + const dsKey = toCamel(`data-${key}`); + const target = (host.closest(`[data-${key}]`) as HTMLElement) ?? document.body; + + cycle(target, dsKey, vals); + }); +} diff --git a/packages/core/src/postcss/ast-generating.test.ts b/packages/core/src/postcss/ast-generating.test.ts index cbf0ed5..c123afd 100644 --- a/packages/core/src/postcss/ast-generating.test.ts +++ b/packages/core/src/postcss/ast-generating.test.ts @@ -1,6 +1,6 @@ import { test } from 'node:test'; import assert from 'node:assert'; -import { readFile, runTest } from './utilities.js'; +import { readFile, runTest } from './test-utilities.js'; import { parseAndUpdatePostcssConfig, parseAndUpdateViteConfig, parseJsonWithBabel, patchNextBodyTag } from './ast-generating.js'; const zeroUiPlugin = '@react-zero-ui/core/postcss'; diff --git a/packages/core/src/postcss/ast-parsing.test.ts b/packages/core/src/postcss/ast-parsing.test.ts index 213a84f..ce8eeb7 100644 --- a/packages/core/src/postcss/ast-parsing.test.ts +++ b/packages/core/src/postcss/ast-parsing.test.ts @@ -2,7 +2,7 @@ import { test } from 'node:test'; import assert from 'node:assert'; import { collectUseUIHooks, processVariants } from './ast-parsing.js'; import { parse } from '@babel/parser'; -import { readFile, runTest } from './utilities.js'; +import { readFile, runTest } from './test-utilities.js'; test('collectUseUIHooks should collect setters from a component', async () => { await runTest( diff --git a/packages/core/src/postcss/ast-parsing.ts b/packages/core/src/postcss/ast-parsing.ts index f7d5beb..4af4809 100644 --- a/packages/core/src/postcss/ast-parsing.ts +++ b/packages/core/src/postcss/ast-parsing.ts @@ -42,10 +42,13 @@ export interface HookMeta { */ const ALL_HOOK_NAMES = new Set([CONFIG.HOOK_NAME, CONFIG.LOCAL_HOOK_NAME]); +const OBJ_NAMES = new Set([CONFIG.SSR_HOOK_NAME, CONFIG.SSR_HOOK_NAME_SCOPED]); + export function collectUseUIHooks(ast: t.File, sourceCode: string): HookMeta[] { const hooks: HookMeta[] = []; /* ---------- cache resolved literals per AST node ---------- */ const memo = new WeakMap(); + const optsBase = { throwOnFail: true, source: sourceCode } as ResolveOpts; function lit(node: t.Expression, p: NodePath, hook: ResolveOpts['hook']): string | null { @@ -54,6 +57,10 @@ export function collectUseUIHooks(ast: t.File, sourceCode: string): HookMeta[] { // clone instead of mutate const localOpts: ResolveOpts = { ...optsBase, hook }; + /** + * @param node - The node to convert + * @param path - The path to the node + * @returns The string literal or null if the node is not a string literal or template literal with no expressions or identifier bound to local const */ const value = literalFromNode(node, p, localOpts); memo.set(node, value); @@ -68,7 +75,7 @@ export function collectUseUIHooks(ast: t.File, sourceCode: string): HookMeta[] { if (!t.isArrayPattern(id) || !t.isCallExpression(init)) return; // b) callee must be one of our hook names - if (!(t.isIdentifier(init.callee) && ALL_HOOK_NAMES.has(init.callee.name))) return; + if (!(t.isIdentifier(init.callee) && ALL_HOOK_NAMES.has(init.callee.name as any))) return; if (id.elements.length !== 2) { throwCodeFrame(path, path.opts?.filename, sourceCode, `[Zero-UI] useUI() must destructure two values: [value, setterFn].`); @@ -118,8 +125,60 @@ export function collectUseUIHooks(ast: t.File, sourceCode: string): HookMeta[] { hooks.push({ setterFnName: setterEl.name, stateKey, initialValue, scope }); }, - }); + /* ──────────────────────────────────────────────────────────────── + 2. NEW: zeroSSR.onClick('key', ['v1','v2']) + ───────────────────────────────────────────────────────────────── */ + + CallExpression(path) { + const callee = path.node.callee; + if ( + !t.isMemberExpression(callee) || + !t.isIdentifier(callee.object) || + !OBJ_NAMES.has(callee.object.name as any) || + !t.isIdentifier(callee.property, { name: 'onClick' }) + ) + return; + + const isScoped = callee.object.name === CONFIG.SSR_HOOK_NAME_SCOPED; + + const [keyArg, arrArg] = path.node.arguments; + + /* --- resolve key ------------------------------------------------ */ + const stateKey = lit(keyArg as t.Expression, path, 'stateKey'); + if (stateKey === null) { + throwCodeFrame(keyArg, path.opts?.filename, sourceCode, `[Zero-UI] zeroSSR.onClick("key"): key must be a fully-static string.`); + } + + /* --- resolve array of values ----------------------------------- */ + if (!t.isArrayExpression(arrArg)) { + throwCodeFrame( + arrArg, + path.opts?.filename, + sourceCode, + `[Zero-UI] zeroSSR.onClick("${stateKey}",[string]): second argument must be a literal string array.` + ); + } + const values: string[] = []; + for (const el of arrArg.elements) { + const v = lit(el as t.Expression, path, 'initialValue'); + if (v === null) { + throwCodeFrame(el!, path.opts?.filename, sourceCode, `[Zero-UI] zeroSSR.onClick("${stateKey}",[string]): array values must be static strings.`); + } + values.push(v); + } + if (values.length === 0) { + throwCodeFrame(arrArg, path.opts?.filename, sourceCode, `[Zero-UI] zeroSSR.onClick("${stateKey}",[" "]): array cannot be empty.`); + } + /* --- push synthetic HookMeta ----------------------------------- */ + hooks.push({ + setterFnName: '_', // placeholder + stateKey, + initialValue: values[0], // first element becomes default + scope: isScoped ? 'scoped' : 'global', + }); + }, + }); return hooks; } @@ -151,8 +210,11 @@ export function clearCache(): void { /* ── Main compiler ──────────────────────────────────────────────────── */ export interface ProcessVariantsResult { + /** Array of deduplicated and sorted variant data */ finalVariants: VariantData[]; + /** Object mapping data attributes to their initial values for body tag */ initialGlobalValues: Record; + /** Array of source file paths that were processed */ sourceFiles: string[]; } diff --git a/packages/core/src/postcss/helpers.test.ts b/packages/core/src/postcss/helpers.test.ts index f571f0d..3272aca 100644 --- a/packages/core/src/postcss/helpers.test.ts +++ b/packages/core/src/postcss/helpers.test.ts @@ -10,7 +10,7 @@ import { patchViteConfig, toKebabCase, } from './helpers.js'; -import { readFile, runTest } from './utilities.js'; +import { readFile, runTest } from './test-utilities.js'; import { CONFIG } from '../config.js'; import path from 'node:path'; import { processVariants, VariantData } from './ast-parsing.js'; diff --git a/packages/core/src/postcss/helpers.ts b/packages/core/src/postcss/helpers.ts index 227e074..c4da87e 100644 --- a/packages/core/src/postcss/helpers.ts +++ b/packages/core/src/postcss/helpers.ts @@ -6,22 +6,6 @@ import { CONFIG, IGNORE_DIRS } from '../config.js'; import { parseJsonWithBabel, parseAndUpdatePostcssConfig, parseAndUpdateViteConfig } from './ast-generating.js'; import { VariantData } from './ast-parsing.js'; -export interface ProcessVariantsResult { - /** Array of deduplicated and sorted variant data */ - finalVariants: VariantData[]; - /** Object mapping data attributes to their initial values for body tag */ - initialValues: Record; - /** Array of source file paths that were processed */ - sourceFiles: string[]; -} - -export interface GenerateAttributesResult { - /** Whether the JavaScript attributes file was changed */ - jsChanged: boolean; - /** Whether the TypeScript definition file was changed */ - tsChanged: boolean; -} - export function toKebabCase(str: string): string { if (typeof str !== 'string') { throw new Error(`Expected string but got: ${typeof str}`); @@ -36,7 +20,7 @@ export function toKebabCase(str: string): string { } /** Return *absolute* paths of every JS/TS file we care about (à la Tailwind). */ -export function findAllSourceFiles(patterns: string[] = CONFIG.CONTENT, cwd: string = process.cwd()): string[] { +export function findAllSourceFiles(patterns: string[] = [...CONFIG.CONTENT], cwd: string = process.cwd()): string[] { return fg .sync(patterns, { cwd, @@ -80,49 +64,50 @@ export function buildCss(variants: VariantData[]): string { return CONFIG.HEADER + '\n' + lines.join('\n') + '\n'; } -export async function generateAttributesFile(finalVariants: VariantData[], initialValues: Record): Promise { - const cwd = process.cwd(); - const ATTR_DIR = path.join(cwd, CONFIG.ZERO_UI_DIR); - const ATTR_FILE = path.join(ATTR_DIR, 'attributes.js'); - const ATTR_TYPE_FILE = path.join(ATTR_DIR, 'attributes.d.ts'); +export async function generateAttributesFile(finalVariants: VariantData[], initialGlobals: Record) { + const dir = path.join(process.cwd(), CONFIG.ZERO_UI_DIR); + const js = path.join(dir, 'attributes.js'); + const dts = path.join(dir, 'attributes.d.ts'); - // Generate JavaScript export - const attrExport = `${CONFIG.HEADER}\nexport const bodyAttributes = ${JSON.stringify(initialValues, null, 2)};\n`; + /* Data objects */ + const variantKeyMap = Object.fromEntries(finalVariants.map((v) => [`data-${toKebabCase(v.key)}`, true as const])); - // Generate TypeScript definitions - const toLiteral = (v: string) => (typeof v === 'string' ? `"${v.replace(/"/g, '\\"')}"` : v); - const variantLines = finalVariants.map(({ key, values }) => { - const slug = `data-${toKebabCase(key)}`; - const union = values.length ? values.map(toLiteral).join(' | ') : 'string'; // ← fallback + /* JS file */ + const jsContent = `${CONFIG.HEADER} +export const bodyAttributes = ${JSON.stringify(initialGlobals, null, 2)}; +export const variantKeyMap = ${JSON.stringify(variantKeyMap, null, 2)}; +`; + + /* DTS file (types) */ + const toLiteral = (s: string) => `"${s.replace(/"/g, '\\"')}"`; + const variantDecl = finalVariants.map((v) => { + const slug = `data-${toKebabCase(v.key)}`; + const union = v.values.length ? v.values.map(toLiteral).join(' | ') : 'string'; return ` "${slug}": ${union};`; }); - // Always include an index signature so TS doesn't optimize - // the declaration away when no variants exist. - if (variantLines.length === 0) { - variantLines.push(' [key: string]: string;'); - } - - const typeLines = [CONFIG.HEADER, 'export declare const bodyAttributes: {', ...variantLines, '};', '']; - const attrTypeExport = typeLines.join('\n'); + const dtsContent = `${CONFIG.HEADER} +export declare const bodyAttributes: { +${variantDecl.join('\n')} +}; - // Create directory if it doesn't exist - fs.mkdirSync(ATTR_DIR, { recursive: true }); +export declare const variantKeyMap: { + [key: string]: true; +}; +`; - // Only write if content has changed - const writeIfChanged = (file: string, content: string): boolean => { - const existing = fs.existsSync(file) ? fs.readFileSync(file, 'utf-8') : ''; - if (existing !== content) { - fs.writeFileSync(file, content); - return true; - } - return false; + /* Write helper */ + const writeIfChanged = (file: string, content: string) => { + if (fs.existsSync(file) && fs.readFileSync(file, 'utf-8') === content) return false; + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(file, content); + return true; }; - const jsChanged = writeIfChanged(ATTR_FILE, attrExport); - const tsChanged = writeIfChanged(ATTR_TYPE_FILE, attrTypeExport); + const jsChanged = writeIfChanged(js, jsContent); + const dtsChanged = writeIfChanged(dts, dtsContent); - return { jsChanged, tsChanged }; + return { jsChanged, tsChanged: dtsChanged }; } export function isZeroUiInitialized(): boolean { diff --git a/packages/core/src/postcss/index.cts b/packages/core/src/postcss/index.cts index e383a86..24cdfb9 100644 --- a/packages/core/src/postcss/index.cts +++ b/packages/core/src/postcss/index.cts @@ -1,81 +1,49 @@ // src/postcss/index.cts -/** - * @type {import('postcss').PluginCreator} - */ -import { buildCss, generateAttributesFile, isZeroUiInitialized } from './helpers'; +import { buildCss, generateAttributesFile, isZeroUiInitialized } from './helpers.js'; import { runZeroUiInit } from '../cli/postInstall.js'; -import type { PluginCreator, Root } from 'postcss'; -import { processVariants } from './ast-parsing'; - -const plugin: PluginCreator = () => { - const DEV = process.env.NODE_ENV !== 'production'; - const zeroUIPlugin = 'postcss-react-zero-ui'; - - return { - postcssPlugin: zeroUIPlugin, - - async Once(root: Root, { result }) { - try { - /* ── generate + inject variants ─────────────────────────── */ - /* - finalVariants: VariantData[] // = { key: string; values: string[]; initialValue: string | null;} - initialValues: Record; // key: initialValue - sourceFiles: string[]; // file paths (absolute) - */ - const { finalVariants, initialGlobalValues, sourceFiles } = await processVariants(); - - const cssBlock = buildCss(finalVariants); - if (cssBlock.trim()) root.prepend(cssBlock + '\n'); - - /* ── register file-dependencies for HMR ─────────────────── */ - sourceFiles.forEach((file) => result.messages.push({ type: 'dependency', plugin: zeroUIPlugin, file, parent: result.opts.from })); - - /* ── first-run bootstrap ────────────────────────────────── */ - if (!isZeroUiInitialized()) { - console.log('[Zero-UI] Auto-initializing (first-time setup)…'); - await runZeroUiInit(); - } - await generateAttributesFile(finalVariants, initialGlobalValues); - } catch (err: unknown) { - /* ───────────────── error handling ─────────────────────── */ - const error = err instanceof Error ? err : new Error(String(err)); - const eWithLoc = error as Error & { loc?: { file?: string; line?: number; column?: number } }; - - /* ❶ Special-case throwCodeFrame errors (they always contain "^") */ - const isCodeFrame = /[\n\r]\s*\^/.test(error.message); - - /* ❷ Broader categories for non-frame errors (kept from your code) */ - const isSyntaxError = - !isCodeFrame && - (error.message.includes('State key cannot be resolved') || - error.message.includes('initial value cannot be resolved') || - error.message.includes('SyntaxError')); - const isFileError = !isCodeFrame && (error.message.includes('ENOENT') || error.message.includes('Cannot find module')); +import { processVariants } from './ast-parsing.js'; +import { CONFIG } from '../config.js'; +import { formatError, registerDeps } from './utilities.js'; +import type { Root, Result } from 'postcss'; + +const PLUGIN = CONFIG.PLUGIN_NAME; +const DEV = process.env.NODE_ENV !== 'production'; + +const plugin = () => ({ + postcssPlugin: PLUGIN, + + async Once(root: Root, { result }: { result: Result }) { + try { + /* ① cold-start bootstrap --------------------------------------- */ + if (!isZeroUiInitialized()) { + console.log('[Zero-UI] Auto-initializing (first-time setup)…'); + await runZeroUiInit(); + } - let friendly = error.message; - if (isCodeFrame) - friendly = error.message; // already perfect - else if (isSyntaxError) friendly = `Syntax error in Zero-UI usage: ${error.message}`; - else if (isFileError) friendly = `File system error: ${error.message}`; + /* ② variants → CSS + attributes ------------------------------- */ + const { finalVariants, initialGlobalValues, sourceFiles } = await processVariants(); - /* ❸ Dev = warn + keep server alive | Prod = fail build */ - if (DEV) { - if (eWithLoc.loc?.file) { - result.messages.push({ type: 'dependency', plugin: zeroUIPlugin, file: eWithLoc.loc.file, parent: result.opts.from }); - } + const cssBlock = buildCss(finalVariants); + if (cssBlock.trim()) root.prepend(cssBlock + '\n'); - result.warn(friendly, { plugin: zeroUIPlugin, ...(eWithLoc.loc && { line: eWithLoc.loc.line, column: eWithLoc.loc.column }) }); + /* ③ HMR dependencies ------------------------------------------ */ + registerDeps(result, PLUGIN, sourceFiles, result.opts.from); - console.error('[Zero-UI] Full error (dev-only):\n', error); - return; // ← do **not** abort dev-server - } + /* ④ write .zero-ui files -------------------------------------- */ + await generateAttributesFile(finalVariants, initialGlobalValues); + } catch (err) { + const { friendly, loc } = formatError(err); - // production / CI - throw new Error(`[Zero-UI] PostCSS plugin error: ${friendly}`); + if (DEV) { + if (loc?.file) registerDeps(result, PLUGIN, [loc.file], result.opts.from); + result.warn(friendly, { plugin: PLUGIN, ...loc }); + console.error('[Zero-UI] Full error (dev-only)\n', err); + return; } - }, - }; -}; + throw new Error(`[Zero-UI] PostCSS plugin error: ${friendly}`); + } + }, +}); plugin.postcss = true; export = plugin; diff --git a/packages/core/src/postcss/resolvers.test.ts b/packages/core/src/postcss/resolvers.test.ts index f24706e..2019c37 100644 --- a/packages/core/src/postcss/resolvers.test.ts +++ b/packages/core/src/postcss/resolvers.test.ts @@ -4,7 +4,7 @@ import { parse } from '@babel/parser'; import * as t from '@babel/types'; import { NodePath } from '@babel/traverse'; import { literalFromNode, resolveLocalConstIdentifier, resolveTemplateLiteral, resolveMemberExpression, ResolveOpts } from './resolvers.js'; -import { runTest } from './utilities.js'; +import { runTest } from './test-utilities.js'; import traverse from './traverse.cjs'; /* diff --git a/packages/core/src/postcss/resolvers.ts b/packages/core/src/postcss/resolvers.ts index 242e6d5..0c61854 100644 --- a/packages/core/src/postcss/resolvers.ts +++ b/packages/core/src/postcss/resolvers.ts @@ -11,7 +11,6 @@ export interface ResolveOpts { /** * This function will decide which function to call based on the node type - * * 1. String literal * 2. Template literal with no expressions * 3. Binary expression (a + b) diff --git a/packages/core/src/postcss/test-utilities.ts b/packages/core/src/postcss/test-utilities.ts new file mode 100644 index 0000000..dfb4c68 --- /dev/null +++ b/packages/core/src/postcss/test-utilities.ts @@ -0,0 +1,31 @@ +import path from 'path'; +import fs from 'fs'; +import os from 'os'; + +// Helper to create temp directory and run test +export async function runTest(files: Record, callback: () => Promise) { + const testDir = fs.mkdtempSync(path.join(os.tmpdir(), 'zero-ui-test-ast')); + const originalCwd = process.cwd(); + try { + process.chdir(testDir); + // Create test files + for (const [filePath, content] of Object.entries(files)) { + const dir = path.dirname(filePath); + if (dir !== '.') { + fs.mkdirSync(dir, { recursive: true }); + } + fs.writeFileSync(filePath, content); + } + + // Run assertions + await callback(); + } finally { + process.chdir(originalCwd); + // Clean up any generated files in the package directory + fs.rmSync(testDir, { recursive: true, force: true }); + } +} + +export function readFile(path: string) { + return fs.readFileSync(path, 'utf-8'); +} diff --git a/packages/core/src/postcss/utilities.ts b/packages/core/src/postcss/utilities.ts index dfb4c68..028fef5 100644 --- a/packages/core/src/postcss/utilities.ts +++ b/packages/core/src/postcss/utilities.ts @@ -1,31 +1,29 @@ -import path from 'path'; -import fs from 'fs'; -import os from 'os'; +import { Result } from 'postcss'; -// Helper to create temp directory and run test -export async function runTest(files: Record, callback: () => Promise) { - const testDir = fs.mkdtempSync(path.join(os.tmpdir(), 'zero-ui-test-ast')); - const originalCwd = process.cwd(); - try { - process.chdir(testDir); - // Create test files - for (const [filePath, content] of Object.entries(files)) { - const dir = path.dirname(filePath); - if (dir !== '.') { - fs.mkdirSync(dir, { recursive: true }); - } - fs.writeFileSync(filePath, content); - } +export function formatError(err: unknown) { + const error = err instanceof Error ? err : new Error(String(err)); + const eWithLoc = error as Error & { loc?: { file?: string; line?: number; column?: number } }; - // Run assertions - await callback(); - } finally { - process.chdir(originalCwd); - // Clean up any generated files in the package directory - fs.rmSync(testDir, { recursive: true, force: true }); - } + /* ❶ Special-case throwCodeFrame errors (they always contain "^") */ + const isCodeFrame = /[\n\r]\s*\^/.test(error.message); + + /* ❷ Broader categories for non-frame errors (kept from your code) */ + const isSyntaxError = + !isCodeFrame && + (error.message.includes('State key cannot be resolved') || + error.message.includes('initial value cannot be resolved') || + error.message.includes('SyntaxError')); + const isFileError = !isCodeFrame && (error.message.includes('ENOENT') || error.message.includes('Cannot find module')); + + let friendly = error.message; + if (isCodeFrame) + friendly = error.message; // already perfect + else if (isSyntaxError) friendly = `Syntax error in Zero-UI usage: ${error.message}`; + else if (isFileError) friendly = `File system error: ${error.message}`; + + return { friendly, loc: eWithLoc.loc }; } -export function readFile(path: string) { - return fs.readFileSync(path, 'utf-8'); +export function registerDeps(result: Result, plugin: string, files: string[], parent: string | undefined) { + result.messages.push({ type: 'dependency', plugin, file: files, parent }); } diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json index 2ada250..36373b4 100644 --- a/packages/core/tsconfig.build.json +++ b/packages/core/tsconfig.build.json @@ -2,8 +2,13 @@ { "extends": "../../tsconfig.base.json", /* — compile exactly one file — */ - "include": ["src/**/*"], - "exclude": ["src/**/*.test.ts", "./utilities.ts"], + "include": [ + "src/**/*" + ], + "exclude": [ + "src/**/*.test.ts", + "./src/postcss/utilities.ts" + ], /* — compiler output — */ "compilerOptions": { "esModuleInterop": true, @@ -12,4 +17,4 @@ "noEmit": false, "removeComments": true } -} +} \ No newline at end of file diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 8ed1347..ca12e1a 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,12 +1,17 @@ { "extends": "../../tsconfig.base.json", /* — compile exactly one file — */ - "include": ["src/**/*"], - "exclude": ["node_modules"], + "include": [ + "src/**/*" + ], + "exclude": [ + "node_modules" + ], /* — compiler output — */ "compilerOptions": { + "moduleResolution": "nodenext", "esModuleInterop": true, "rootDir": "./src", // keeps relative paths clean "outDir": "./dist" // compiled JS → dist/ } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9309839..6c1b1a7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,13 +19,13 @@ importers: version: 0.25.8 eslint: specifier: ^9.32.0 - version: 9.32.0(jiti@2.4.2) + version: 9.32.0(jiti@2.5.1) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(eslint@9.32.0(jiti@2.4.2)) + version: 2.32.0(eslint@9.32.0(jiti@2.5.1)) eslint-plugin-node: specifier: ^11.1.0 - version: 11.1.0(eslint@9.32.0(jiti@2.4.2)) + version: 11.1.0(eslint@9.32.0(jiti@2.5.1)) eslint-plugin-react-zero-ui: specifier: workspace:* version: link:packages/eslint-plugin-react-zero-ui @@ -46,65 +46,65 @@ importers: dependencies: '@react-zero-ui/core': specifier: 0.1.0 - version: 0.1.0(@tailwindcss/postcss@4.1.10)(postcss@8.5.6)(react@19.1.0)(tailwindcss@4.1.10) + version: 0.1.0(@tailwindcss/postcss@4.1.11)(postcss@8.5.6)(react@19.1.1)(tailwindcss@4.1.11) '@vercel/analytics': specifier: ^1.5.0 - version: 1.5.0(next@15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0) + version: 1.5.0(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1) clsx: specifier: ^2.1.1 version: 2.1.1 motion: specifier: 12.18.1 - version: 12.18.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 12.18.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) next: specifier: ^15.3.5 - version: 15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + version: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) react: specifier: ^19.0.0 - version: 19.1.0 + version: 19.1.1 react-dom: specifier: ^19.0.0 - version: 19.1.0(react@19.1.0) + version: 19.1.1(react@19.1.1) react-scan: specifier: ^0.4.3 - version: 0.4.3(@types/react@19.1.8)(next@15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.45.1) + version: 0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2) devDependencies: '@tailwindcss/postcss': specifier: ^4.1.10 - version: 4.1.10 + version: 4.1.11 '@types/node': specifier: ^20 - version: 20.19.2 + version: 20.19.9 '@types/react': specifier: ^19 - version: 19.1.8 + version: 19.1.9 '@types/react-dom': specifier: ^19 - version: 19.1.6(@types/react@19.1.8) + version: 19.1.7(@types/react@19.1.9) postcss: specifier: ^8.5.5 version: 8.5.6 tailwindcss: specifier: ^4.1.10 - version: 4.1.10 + version: 4.1.11 typescript: specifier: ^5 - version: 5.8.3 + version: 5.9.2 packages/cli: dependencies: '@react-zero-ui/core': specifier: ^0.2.2 - version: 0.2.2(@tailwindcss/postcss@4.1.10)(postcss@8.5.6)(react@19.1.0)(tailwindcss@4.1.10) + version: 0.2.7(@tailwindcss/postcss@4.1.11)(postcss@8.5.6)(react@19.1.1)(tailwindcss@4.1.11) '@tailwindcss/postcss': specifier: ^4.1.8 - version: 4.1.10 + version: 4.1.11 postcss: specifier: ^8.4.27 version: 8.5.6 tailwindcss: specifier: ^4.0.0 - version: 4.1.10 + version: 4.1.11 packages/core: dependencies: @@ -122,10 +122,10 @@ importers: version: 7.28.0 '@babel/types': specifier: ^7.28.0 - version: 7.28.0 + version: 7.28.2 '@tailwindcss/postcss': specifier: ^4.1.10 - version: 4.1.10 + version: 4.1.11 fast-glob: specifier: ^3.3.3 version: 3.3.3 @@ -137,14 +137,14 @@ importers: version: 8.5.6 react: specifier: '>=16.8.0' - version: 19.1.0 + version: 19.1.1 tailwindcss: specifier: ^4.1.10 - version: 4.1.10 + version: 4.1.11 devDependencies: '@playwright/test': specifier: ^1.54.0 - version: 1.54.0 + version: 1.54.2 '@types/babel__code-frame': specifier: ^7.0.6 version: 7.0.6 @@ -153,10 +153,10 @@ importers: version: 7.27.0 '@types/babel__traverse': specifier: ^7.20.7 - version: 7.20.7 + version: 7.28.0 '@types/react': specifier: ^19.1.8 - version: 19.1.8 + version: 19.1.9 tsx: specifier: ^4.20.3 version: 4.20.3 @@ -165,17 +165,17 @@ importers: dependencies: '@typescript-eslint/parser': specifier: ^8 || ^7 - version: 8.38.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: specifier: ^9 || ^8 - version: 9.30.1(jiti@2.4.2) + version: 9.32.0(jiti@2.5.1) devDependencies: '@typescript-eslint/utils': specifier: ^8.0.0 - version: 8.38.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3) + version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) typescript: specifier: ^5.8.3 - version: 5.8.3 + version: 5.9.2 packages: @@ -199,10 +199,6 @@ packages: resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.5': - resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==} - engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} engines: {node: '>=6.9.0'} @@ -237,15 +233,10 @@ packages: resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.27.6': - resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} + '@babel/helpers@7.28.2': + resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.5': - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.28.0': resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} @@ -259,12 +250,8 @@ packages: resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.6': - resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} - engines: {node: '>=6.9.0'} - - '@babel/types@7.28.0': - resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==} + '@babel/types@7.28.2': + resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} '@clack/core@0.3.5': @@ -276,8 +263,8 @@ packages: '@conventional-commits/parser@0.4.1': resolution: {integrity: sha512-H2ZmUVt6q+KBccXfMBhbBF14NlANeqHTXL4qCL6QGbMzrc4HDXyzWuxPxPNbz71f/5UkR5DrycP5VO9u7crahg==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} '@esbuild/aix-ppc64@0.25.8': resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} @@ -453,10 +440,6 @@ packages: resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -465,10 +448,6 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.30.1': - resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.32.0': resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -477,10 +456,6 @@ packages: resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.3': - resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.4': resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -512,118 +487,124 @@ packages: '@iarna/toml@3.0.0': resolution: {integrity: sha512-td6ZUkz2oS3VeleBcN+m//Q6HlCFCPrnI0FZhrt/h4XqLEdOyYp2u21nd8MdsR+WJy5r9PTDaHTDDfhf4H4l6Q==} - '@img/sharp-darwin-arm64@0.34.2': - resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==} + '@img/sharp-darwin-arm64@0.34.3': + resolution: {integrity: sha512-ryFMfvxxpQRsgZJqBd4wsttYQbCxsJksrv9Lw/v798JcQ8+w84mBWuXwl+TT0WJ/WrYOLaYpwQXi3sA9nTIaIg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [darwin] - '@img/sharp-darwin-x64@0.34.2': - resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==} + '@img/sharp-darwin-x64@0.34.3': + resolution: {integrity: sha512-yHpJYynROAj12TA6qil58hmPmAwxKKC7reUqtGLzsOHfP7/rniNGTL8tjWX6L3CTV4+5P4ypcS7Pp+7OB+8ihA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [darwin] - '@img/sharp-libvips-darwin-arm64@1.1.0': - resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==} + '@img/sharp-libvips-darwin-arm64@1.2.0': + resolution: {integrity: sha512-sBZmpwmxqwlqG9ueWFXtockhsxefaV6O84BMOrhtg/YqbTaRdqDE7hxraVE3y6gVM4eExmfzW4a8el9ArLeEiQ==} cpu: [arm64] os: [darwin] - '@img/sharp-libvips-darwin-x64@1.1.0': - resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==} + '@img/sharp-libvips-darwin-x64@1.2.0': + resolution: {integrity: sha512-M64XVuL94OgiNHa5/m2YvEQI5q2cl9d/wk0qFTDVXcYzi43lxuiFTftMR1tOnFQovVXNZJ5TURSDK2pNe9Yzqg==} cpu: [x64] os: [darwin] - '@img/sharp-libvips-linux-arm64@1.1.0': - resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==} + '@img/sharp-libvips-linux-arm64@1.2.0': + resolution: {integrity: sha512-RXwd0CgG+uPRX5YYrkzKyalt2OJYRiJQ8ED/fi1tq9WQW2jsQIn0tqrlR5l5dr/rjqq6AHAxURhj2DVjyQWSOA==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linux-arm@1.1.0': - resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==} + '@img/sharp-libvips-linux-arm@1.2.0': + resolution: {integrity: sha512-mWd2uWvDtL/nvIzThLq3fr2nnGfyr/XMXlq8ZJ9WMR6PXijHlC3ksp0IpuhK6bougvQrchUAfzRLnbsen0Cqvw==} cpu: [arm] os: [linux] - '@img/sharp-libvips-linux-ppc64@1.1.0': - resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==} + '@img/sharp-libvips-linux-ppc64@1.2.0': + resolution: {integrity: sha512-Xod/7KaDDHkYu2phxxfeEPXfVXFKx70EAFZ0qyUdOjCcxbjqyJOEUpDe6RIyaunGxT34Anf9ue/wuWOqBW2WcQ==} cpu: [ppc64] os: [linux] - '@img/sharp-libvips-linux-s390x@1.1.0': - resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==} + '@img/sharp-libvips-linux-s390x@1.2.0': + resolution: {integrity: sha512-eMKfzDxLGT8mnmPJTNMcjfO33fLiTDsrMlUVcp6b96ETbnJmd4uvZxVJSKPQfS+odwfVaGifhsB07J1LynFehw==} cpu: [s390x] os: [linux] - '@img/sharp-libvips-linux-x64@1.1.0': - resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==} + '@img/sharp-libvips-linux-x64@1.2.0': + resolution: {integrity: sha512-ZW3FPWIc7K1sH9E3nxIGB3y3dZkpJlMnkk7z5tu1nSkBoCgw2nSRTFHI5pB/3CQaJM0pdzMF3paf9ckKMSE9Tg==} cpu: [x64] os: [linux] - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': - resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==} + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': + resolution: {integrity: sha512-UG+LqQJbf5VJ8NWJ5Z3tdIe/HXjuIdo4JeVNADXBFuG7z9zjoegpzzGIyV5zQKi4zaJjnAd2+g2nna8TZvuW9Q==} cpu: [arm64] os: [linux] - '@img/sharp-libvips-linuxmusl-x64@1.1.0': - resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==} + '@img/sharp-libvips-linuxmusl-x64@1.2.0': + resolution: {integrity: sha512-SRYOLR7CXPgNze8akZwjoGBoN1ThNZoqpOgfnOxmWsklTGVfJiGJoC/Lod7aNMGA1jSsKWM1+HRX43OP6p9+6Q==} cpu: [x64] os: [linux] - '@img/sharp-linux-arm64@0.34.2': - resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==} + '@img/sharp-linux-arm64@0.34.3': + resolution: {integrity: sha512-QdrKe3EvQrqwkDrtuTIjI0bu6YEJHTgEeqdzI3uWJOH6G1O8Nl1iEeVYRGdj1h5I21CqxSvQp1Yv7xeU3ZewbA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linux-arm@0.34.2': - resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==} + '@img/sharp-linux-arm@0.34.3': + resolution: {integrity: sha512-oBK9l+h6KBN0i3dC8rYntLiVfW8D8wH+NPNT3O/WBHeW0OQWCjfWksLUaPidsrDKpJgXp3G3/hkmhptAW0I3+A==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] - '@img/sharp-linux-s390x@0.34.2': - resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==} + '@img/sharp-linux-ppc64@0.34.3': + resolution: {integrity: sha512-GLtbLQMCNC5nxuImPR2+RgrviwKwVql28FWZIW1zWruy6zLgA5/x2ZXk3mxj58X/tszVF69KK0Is83V8YgWhLA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ppc64] + os: [linux] + + '@img/sharp-linux-s390x@0.34.3': + resolution: {integrity: sha512-3gahT+A6c4cdc2edhsLHmIOXMb17ltffJlxR0aC2VPZfwKoTGZec6u5GrFgdR7ciJSsHT27BD3TIuGcuRT0KmQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] - '@img/sharp-linux-x64@0.34.2': - resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==} + '@img/sharp-linux-x64@0.34.3': + resolution: {integrity: sha512-8kYso8d806ypnSq3/Ly0QEw90V5ZoHh10yH0HnrzOCr6DKAPI6QVHvwleqMkVQ0m+fc7EH8ah0BB0QPuWY6zJQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-linuxmusl-arm64@0.34.2': - resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==} + '@img/sharp-linuxmusl-arm64@0.34.3': + resolution: {integrity: sha512-vAjbHDlr4izEiXM1OTggpCcPg9tn4YriK5vAjowJsHwdBIdx0fYRsURkxLG2RLm9gyBq66gwtWI8Gx0/ov+JKQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] - '@img/sharp-linuxmusl-x64@0.34.2': - resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==} + '@img/sharp-linuxmusl-x64@0.34.3': + resolution: {integrity: sha512-gCWUn9547K5bwvOn9l5XGAEjVTTRji4aPTqLzGXHvIr6bIDZKNTA34seMPgM0WmSf+RYBH411VavCejp3PkOeQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] - '@img/sharp-wasm32@0.34.2': - resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==} + '@img/sharp-wasm32@0.34.3': + resolution: {integrity: sha512-+CyRcpagHMGteySaWos8IbnXcHgfDn7pO2fiC2slJxvNq9gDipYBN42/RagzctVRKgxATmfqOSulgZv5e1RdMg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [wasm32] - '@img/sharp-win32-arm64@0.34.2': - resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==} + '@img/sharp-win32-arm64@0.34.3': + resolution: {integrity: sha512-MjnHPnbqMXNC2UgeLJtX4XqoVHHlZNd+nPt1kRPmj63wURegwBhZlApELdtxM2OIZDRv/DFtLcNhVbd1z8GYXQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [win32] - '@img/sharp-win32-ia32@0.34.2': - resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==} + '@img/sharp-win32-ia32@0.34.3': + resolution: {integrity: sha512-xuCdhH44WxuXgOM714hn4amodJMZl3OEvf0GVTm0BEyMeA2to+8HEdRPShH0SLYptJY1uBw+SCFP9WVQi1Q/cw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ia32] os: [win32] - '@img/sharp-win32-x64@0.34.2': - resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==} + '@img/sharp-win32-x64@0.34.3': + resolution: {integrity: sha512-OWwz05d++TxzLEv4VnsTz5CmZ6mI6S05sfQGEMrNrQcOEERbX46332IvE7pO/EUiw7jUrrS40z/M7kPyjfl04g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [win32] @@ -635,23 +616,12 @@ packages: '@jridgewell/gen-mapping@0.3.12': resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} '@jridgewell/trace-mapping@0.3.29': resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} @@ -668,53 +638,53 @@ packages: peerDependencies: jsep: ^0.4.0||^1.0.0 - '@next/env@15.3.5': - resolution: {integrity: sha512-7g06v8BUVtN2njAX/r8gheoVffhiKFVt4nx74Tt6G4Hqw9HCLYQVx/GkH2qHvPtAHZaUNZ0VXAa0pQP6v1wk7g==} + '@next/env@15.4.5': + resolution: {integrity: sha512-ruM+q2SCOVCepUiERoxOmZY9ZVoecR3gcXNwCYZRvQQWRjhOiPJGmQ2fAiLR6YKWXcSAh7G79KEFxN3rwhs4LQ==} - '@next/swc-darwin-arm64@15.3.5': - resolution: {integrity: sha512-lM/8tilIsqBq+2nq9kbTW19vfwFve0NR7MxfkuSUbRSgXlMQoJYg+31+++XwKVSXk4uT23G2eF/7BRIKdn8t8w==} + '@next/swc-darwin-arm64@15.4.5': + resolution: {integrity: sha512-84dAN4fkfdC7nX6udDLz9GzQlMUwEMKD7zsseXrl7FTeIItF8vpk1lhLEnsotiiDt+QFu3O1FVWnqwcRD2U3KA==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.3.5': - resolution: {integrity: sha512-WhwegPQJ5IfoUNZUVsI9TRAlKpjGVK0tpJTL6KeiC4cux9774NYE9Wu/iCfIkL/5J8rPAkqZpG7n+EfiAfidXA==} + '@next/swc-darwin-x64@15.4.5': + resolution: {integrity: sha512-CL6mfGsKuFSyQjx36p2ftwMNSb8PQog8y0HO/ONLdQqDql7x3aJb/wB+LA651r4we2pp/Ck+qoRVUeZZEvSurA==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.3.5': - resolution: {integrity: sha512-LVD6uMOZ7XePg3KWYdGuzuvVboxujGjbcuP2jsPAN3MnLdLoZUXKRc6ixxfs03RH7qBdEHCZjyLP/jBdCJVRJQ==} + '@next/swc-linux-arm64-gnu@15.4.5': + resolution: {integrity: sha512-1hTVd9n6jpM/thnDc5kYHD1OjjWYpUJrJxY4DlEacT7L5SEOXIifIdTye6SQNNn8JDZrcN+n8AWOmeJ8u3KlvQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.3.5': - resolution: {integrity: sha512-k8aVScYZ++BnS2P69ClK7v4nOu702jcF9AIHKu6llhHEtBSmM2zkPGl9yoqbSU/657IIIb0QHpdxEr0iW9z53A==} + '@next/swc-linux-arm64-musl@15.4.5': + resolution: {integrity: sha512-4W+D/nw3RpIwGrqpFi7greZ0hjrCaioGErI7XHgkcTeWdZd146NNu1s4HnaHonLeNTguKnL2Urqvj28UJj6Gqw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.3.5': - resolution: {integrity: sha512-2xYU0DI9DGN/bAHzVwADid22ba5d/xrbrQlr2U+/Q5WkFUzeL0TDR963BdrtLS/4bMmKZGptLeg6282H/S2i8A==} + '@next/swc-linux-x64-gnu@15.4.5': + resolution: {integrity: sha512-N6Mgdxe/Cn2K1yMHge6pclffkxzbSGOydXVKYOjYqQXZYjLCfN/CuFkaYDeDHY2VBwSHyM2fUjYBiQCIlxIKDA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.3.5': - resolution: {integrity: sha512-TRYIqAGf1KCbuAB0gjhdn5Ytd8fV+wJSM2Nh2is/xEqR8PZHxfQuaiNhoF50XfY90sNpaRMaGhF6E+qjV1b9Tg==} + '@next/swc-linux-x64-musl@15.4.5': + resolution: {integrity: sha512-YZ3bNDrS8v5KiqgWE0xZQgtXgCTUacgFtnEgI4ccotAASwSvcMPDLua7BWLuTfucoRv6mPidXkITJLd8IdJplQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.3.5': - resolution: {integrity: sha512-h04/7iMEUSMY6fDGCvdanKqlO1qYvzNxntZlCzfE8i5P0uqzVQWQquU1TIhlz0VqGQGXLrFDuTJVONpqGqjGKQ==} + '@next/swc-win32-arm64-msvc@15.4.5': + resolution: {integrity: sha512-9Wr4t9GkZmMNcTVvSloFtjzbH4vtT4a8+UHqDoVnxA5QyfWe6c5flTH1BIWPGNWSUlofc8dVJAE7j84FQgskvQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.3.5': - resolution: {integrity: sha512-5fhH6fccXxnX2KhllnGhkYMndhOiLOLEiVGYjP2nizqeGWkN10sA9taATlXwake2E2XMvYZjjz0Uj7T0y+z1yw==} + '@next/swc-win32-x64-msvc@15.4.5': + resolution: {integrity: sha512-voWk7XtGvlsP+w8VBz7lqp8Y+dYw/MTI4KeS0gTVtfdhdJ5QwhXLmNrndFOin/MDoCvUaLWMkYKATaCoUkt2/A==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -789,8 +759,8 @@ packages: react: '>=18' react-dom: '>=18' - '@playwright/test@1.54.0': - resolution: {integrity: sha512-6Mnd5daQmLivaLu5kxUg6FxPtXY4sXsS5SUwKjWNy4ISe4pKraNHoFxcsaTFiNUULbjy0Vlb5HT86QuM0Jy1pQ==} + '@playwright/test@1.54.2': + resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} engines: {node: '>=18'} hasBin: true @@ -811,8 +781,8 @@ packages: react: '>=16.8.0' tailwindcss: ^4.1.10 - '@react-zero-ui/core@0.2.2': - resolution: {integrity: sha512-3jCC9ivgpItAZl2WV9OUN8cltX2mt4vuk9sC9Mjf+l7/jUqin8fHTal2cgDOUbYxLC6eK6IOoby5OsKem+hLzg==} + '@react-zero-ui/core@0.2.7': + resolution: {integrity: sha512-LMu+Zm4VHiJOiLNbs5fhLUK0+RxpnlurjgA7D24LuXBDLuYd22cQKiYBUOidi92nmo9uq4s8hMz7TGiAqhcc3w==} engines: {node: '>=18.0.0'} peerDependencies: '@tailwindcss/postcss': ^4.1.10 @@ -829,174 +799,171 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.45.1': - resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.45.1': - resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.45.1': - resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.45.1': - resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.45.1': - resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.45.1': - resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': - resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.45.1': - resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.45.1': - resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.45.1': - resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': - resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': - resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.45.1': - resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.45.1': - resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.45.1': - resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.45.1': - resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.45.1': - resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.45.1': - resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.45.1': - resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.45.1': - resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} cpu: [x64] os: [win32] '@rtsao/scc@1.1.0': resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} - '@tailwindcss/node@4.1.10': - resolution: {integrity: sha512-2ACf1znY5fpRBwRhMgj9ZXvb2XZW8qs+oTfotJ2C5xR0/WNL7UHZ7zXl6s+rUqedL1mNi+0O+WQr5awGowS3PQ==} + '@tailwindcss/node@4.1.11': + resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} - '@tailwindcss/oxide-android-arm64@4.1.10': - resolution: {integrity: sha512-VGLazCoRQ7rtsCzThaI1UyDu/XRYVyH4/EWiaSX6tFglE+xZB5cvtC5Omt0OQ+FfiIVP98su16jDVHDEIuH4iQ==} + '@tailwindcss/oxide-android-arm64@4.1.11': + resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.1.10': - resolution: {integrity: sha512-ZIFqvR1irX2yNjWJzKCqTCcHZbgkSkSkZKbRM3BPzhDL/18idA8uWCoopYA2CSDdSGFlDAxYdU2yBHwAwx8euQ==} + '@tailwindcss/oxide-darwin-arm64@4.1.11': + resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.1.10': - resolution: {integrity: sha512-eCA4zbIhWUFDXoamNztmS0MjXHSEJYlvATzWnRiTqJkcUteSjO94PoRHJy1Xbwp9bptjeIxxBHh+zBWFhttbrQ==} + '@tailwindcss/oxide-darwin-x64@4.1.11': + resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.1.10': - resolution: {integrity: sha512-8/392Xu12R0cc93DpiJvNpJ4wYVSiciUlkiOHOSOQNH3adq9Gi/dtySK7dVQjXIOzlpSHjeCL89RUUI8/GTI6g==} + '@tailwindcss/oxide-freebsd-x64@4.1.11': + resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.10': - resolution: {integrity: sha512-t9rhmLT6EqeuPT+MXhWhlRYIMSfh5LZ6kBrC4FS6/+M1yXwfCtp24UumgCWOAJVyjQwG+lYva6wWZxrfvB+NhQ==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.1.10': - resolution: {integrity: sha512-3oWrlNlxLRxXejQ8zImzrVLuZ/9Z2SeKoLhtCu0hpo38hTO2iL86eFOu4sVR8cZc6n3z7eRXXqtHJECa6mFOvA==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.1.10': - resolution: {integrity: sha512-saScU0cmWvg/Ez4gUmQWr9pvY9Kssxt+Xenfx1LG7LmqjcrvBnw4r9VjkFcqmbBb7GCBwYNcZi9X3/oMda9sqQ==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.1.10': - resolution: {integrity: sha512-/G3ao/ybV9YEEgAXeEg28dyH6gs1QG8tvdN9c2MNZdUXYBaIY/Gx0N6RlJzfLy/7Nkdok4kaxKPHKJUlAaoTdA==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.1.10': - resolution: {integrity: sha512-LNr7X8fTiKGRtQGOerSayc2pWJp/9ptRYAa4G+U+cjw9kJZvkopav1AQc5HHD+U364f71tZv6XamaHKgrIoVzA==} + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-wasm32-wasi@4.1.10': - resolution: {integrity: sha512-d6ekQpopFQJAcIK2i7ZzWOYGZ+A6NzzvQ3ozBvWFdeyqfOZdYHU66g5yr+/HC4ipP1ZgWsqa80+ISNILk+ae/Q==} + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} engines: {node: '>=14.0.0'} cpu: [wasm32] bundledDependencies: @@ -1007,24 +974,24 @@ packages: - '@emnapi/wasi-threads' - tslib - '@tailwindcss/oxide-win32-arm64-msvc@4.1.10': - resolution: {integrity: sha512-i1Iwg9gRbwNVOCYmnigWCCgow8nDWSFmeTUU5nbNx3rqbe4p0kRbEqLwLJbYZKmSSp23g4N6rCDmm7OuPBXhDA==} + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.1.10': - resolution: {integrity: sha512-sGiJTjcBSfGq2DVRtaSljq5ZgZS2SDHSIfhOylkBvHVjwOsodBhnb3HdmiKkVuUGKD0I7G63abMOVaskj1KpOA==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.1.10': - resolution: {integrity: sha512-v0C43s7Pjw+B9w21htrQwuFObSkio2aV/qPx/mhrRldbqxbWJK6KizM+q7BF1/1CmuLqZqX3CeYF7s7P9fbA8Q==} + '@tailwindcss/oxide@4.1.11': + resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.1.10': - resolution: {integrity: sha512-B+7r7ABZbkXJwpvt2VMnS6ujcDoR2OOcFaqrLIo1xbcdxje4Vf+VgJdBzNNbrAjBj/rLZ66/tlQ1knIGNLKOBQ==} + '@tailwindcss/postcss@4.1.11': + resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} '@types/babel__code-frame@7.0.6': resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} @@ -1032,8 +999,8 @@ packages: '@types/babel__generator@7.27.0': resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} @@ -1047,8 +1014,8 @@ packages: '@types/minimist@1.2.5': resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/node@20.19.2': - resolution: {integrity: sha512-9pLGGwdzOUBDYi0GNjM97FIA+f92fqSke6joWeBjWXllfNxZBs7qeMF7tvtOIsbY45xkWkxrdwUfUf3MnQa9gA==} + '@types/node@20.19.9': + resolution: {integrity: sha512-cuVNgarYWZqxRJDQHEB58GEONhOK79QVR/qYx4S7kcUObQvUwvFnYxJuuHUKm2aieN9X3yZB4LZsuYNU1Qphsw==} '@types/node@24.1.0': resolution: {integrity: sha512-ut5FthK5moxFKH2T1CUOC6ctR67rQRvvHdFLCD2Ql6KXmMuCrjsSsRI9UsLCm9M18BMwClv4pn327UvB7eeO1w==} @@ -1059,8 +1026,8 @@ packages: '@types/npm-package-arg@6.1.4': resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} - '@types/react-dom@19.1.6': - resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} + '@types/react-dom@19.1.7': + resolution: {integrity: sha512-i5ZzwYpqjmrKenzkoLM2Ibzt6mAsM7pxB6BCIouEVVmgiqaMj1TjaK7hnA36hbW5aZv20kx7Lw6hWzPWg0Rurw==} peerDependencies: '@types/react': ^19.0.0 @@ -1069,8 +1036,8 @@ packages: peerDependencies: '@types/react': '*' - '@types/react@19.1.8': - resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} + '@types/react@19.1.9': + resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1254,10 +1221,6 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -1282,8 +1245,8 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - caniuse-lite@1.0.30001726: - resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==} + caniuse-lite@1.0.30001731: + resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1457,8 +1420,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.188: - resolution: {integrity: sha512-pfEx5CBFAocOKNrc+i5fSvhDaI1Vr9R9aT5uX1IzM3hhdL6k649wfuUcdUd9EZnmbE1xdfA51CwqQ61CO3Xl3g==} + electron-to-chromium@1.5.194: + resolution: {integrity: sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1585,16 +1548,6 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.30.1: - resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - eslint@9.32.0: resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1678,8 +1631,8 @@ packages: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} - framer-motion@12.19.2: - resolution: {integrity: sha512-0cWMLkYr+i0emeXC4hkLF+5aYpzo32nRdQ0D/5DI460B3O7biQ3l2BpDzIGsAHYuZ0fpBP0DC8XBkVf6RPAlZw==} + framer-motion@12.23.12: + resolution: {integrity: sha512-6e78rdVtnBvlEVgu6eFEAgG9v3wLnYEboM8I5O5EXvfKC8gxGQB8wXJdhkMy10iVcn05jl6CNw7/HTsTCfwcWg==} peerDependencies: '@emotion/is-prop-valid': '*' react: ^18.0.0 || ^19.0.0 @@ -1971,8 +1924,8 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.5.1: + resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} hasBin: true js-tokens@4.0.0: @@ -2116,9 +2069,6 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} engines: {node: 20 || >=22} @@ -2196,11 +2146,11 @@ packages: resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==} engines: {node: '>=0.10.0'} - motion-dom@12.19.0: - resolution: {integrity: sha512-m96uqq8VbwxFLU0mtmlsIVe8NGGSdpBvBSHbnnOJQxniPaabvVdGgxSamhuDwBsRhwX7xPxdICgVJlOpzn/5bw==} + motion-dom@12.23.12: + resolution: {integrity: sha512-RcR4fvMCTESQBD/uKQe49D5RUeDOokkGRmz4ceaJKDBgHYtZtntC/s2vLvY38gqGaytinij/yi3hMcWVcEF5Kw==} - motion-utils@12.19.0: - resolution: {integrity: sha512-BuFTHINYmV07pdWs6lj6aI63vr2N4dg0vR+td0rtrdpWOhBzIkEklZyLcvKBoEtwSqx8Jg06vUB5RS0xDiUybw==} + motion-utils@12.23.6: + resolution: {integrity: sha512-eAWoPgr4eFEOFfg2WjIsMoqJTW6Z8MTUCgn/GZ3VRpClWBdnbjryiA3ZSNLyxCTmCQx4RmYX6jX1iWHbenUPNQ==} motion@12.18.1: resolution: {integrity: sha512-w1ns2hWQ4COhOvnZf4rg4mW0Pl36mzcShpgt0fSfI6qJxKUbi3kHho/HSKeJFRoY0TO1m5/7C8lG1+Li0uC9Fw==} @@ -2234,13 +2184,13 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - next@15.3.5: - resolution: {integrity: sha512-RkazLBMMDJSJ4XZQ81kolSpwiCt907l0xcgcpF4xC2Vml6QVcPNXW0NQRwQ80FFtSn7UM52XN0anaw8TEJXaiw==} + next@15.4.5: + resolution: {integrity: sha512-nJ4v+IO9CPmbmcvsPebIoX3Q+S7f6Fu08/dEWu0Ttfa+wVwQRh9epcmsyCPjmL2b8MxC+CkBR97jgDhUUztI3g==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 + '@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 @@ -2366,13 +2316,13 @@ packages: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - playwright-core@1.54.0: - resolution: {integrity: sha512-uiWpWaJh3R3etpJ0QrpligEMl62Dk1iSAB6NUXylvmQz+e3eipXHDHvOvydDAssb5Oqo0E818qdn0L9GcJSTyA==} + playwright-core@1.54.2: + resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} engines: {node: '>=18'} hasBin: true - playwright@1.54.0: - resolution: {integrity: sha512-y9yzHmXRwEUOpghM7XGcA38GjWuTOUMaTIcm/5rHcYVjh5MSp9qQMRRMc/+p1cx+csoPnX4wkxAF61v5VKirxg==} + playwright@1.54.2: + resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} engines: {node: '>=18'} hasBin: true @@ -2388,8 +2338,8 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - preact@10.26.9: - resolution: {integrity: sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==} + preact@10.27.0: + resolution: {integrity: sha512-/DTYoB6mwwgPytiqQTh/7SFRL98ZdiD8Sk8zIUVOxtwq4oWcwrcd1uno9fE/zZmUaUrFNYzbH14CPebOz9tZQw==} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -2411,10 +2361,10 @@ packages: resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} engines: {node: '>=8'} - react-dom@19.1.0: - resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} + react-dom@19.1.1: + resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: - react: ^19.1.0 + react: ^19.1.1 react-scan@0.4.3: resolution: {integrity: sha512-jhAQuQ1nja6HUYrSpbmNFHqZPsRCXk8Yqu0lHoRIw9eb8N96uTfXCpVyQhTTnJ/nWqnwuvxbpKVG/oWZT8+iTQ==} @@ -2436,8 +2386,8 @@ packages: react-router-dom: optional: true - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} read-pkg-up@7.0.1: @@ -2493,8 +2443,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.45.1: - resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2541,8 +2491,8 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} - sharp@0.34.2: - resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==} + sharp@0.34.3: + resolution: {integrity: sha512-eX2IQ6nFohW4DbvHIOLRB3MHFpYqaqvXd3Tp5e/T/dSH83fxaNJQRvDMhASmkNTsNTVF2/OOopzRCt7xokgPfg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} shebang-command@2.0.0: @@ -2602,10 +2552,6 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2659,8 +2605,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@4.1.10: - resolution: {integrity: sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==} + tailwindcss@4.1.11: + resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} tapable@2.2.2: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} @@ -2739,11 +2685,6 @@ packages: engines: {node: '>=4.2.0'} hasBin: true - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.9.2: resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} @@ -2897,11 +2838,11 @@ snapshots: '@babel/generator': 7.28.0 '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) - '@babel/helpers': 7.27.6 + '@babel/helpers': 7.28.2 '@babel/parser': 7.28.0 '@babel/template': 7.27.2 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 convert-source-map: 2.0.0 debug: 4.4.1 gensync: 1.0.0-beta.2 @@ -2910,18 +2851,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.27.5': - dependencies: - '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 3.1.0 - '@babel/generator@7.28.0': dependencies: '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 jsesc: 3.1.0 @@ -2939,7 +2872,7 @@ snapshots: '@babel/helper-module-imports@7.27.1': dependencies: '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 transitivePeerDependencies: - supports-color @@ -2958,24 +2891,20 @@ snapshots: '@babel/helper-validator-option@7.27.1': {} - '@babel/helpers@7.27.6': + '@babel/helpers@7.28.2': dependencies: '@babel/template': 7.27.2 - '@babel/types': 7.28.0 - - '@babel/parser@7.27.5': - dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 '@babel/parser@7.28.0': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 '@babel/parser': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 '@babel/traverse@7.28.0': dependencies: @@ -2984,17 +2913,12 @@ snapshots: '@babel/helper-globals': 7.28.0 '@babel/parser': 7.28.0 '@babel/template': 7.27.2 - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 debug: 4.4.1 transitivePeerDependencies: - supports-color - '@babel/types@7.27.6': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 - - '@babel/types@7.28.0': + '@babel/types@7.28.2': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 @@ -3015,7 +2939,7 @@ snapshots: unist-util-visit: 2.0.3 unist-util-visit-parents: 3.1.1 - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 optional: true @@ -3098,14 +3022,9 @@ snapshots: '@esbuild/win32-x64@0.25.8': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))': - dependencies: - eslint: 9.30.1(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 - - '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.5.1))': dependencies: - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -3120,10 +3039,6 @@ snapshots: '@eslint/config-helpers@0.3.0': {} - '@eslint/core@0.14.0': - dependencies: - '@types/json-schema': 7.0.15 - '@eslint/core@0.15.1': dependencies: '@types/json-schema': 7.0.15 @@ -3142,17 +3057,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.30.1': {} - '@eslint/js@9.32.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.3': - dependencies: - '@eslint/core': 0.15.1 - levn: 0.4.1 - '@eslint/plugin-kit@0.3.4': dependencies: '@eslint/core': 0.15.1 @@ -3179,85 +3087,90 @@ snapshots: '@iarna/toml@3.0.0': {} - '@img/sharp-darwin-arm64@0.34.2': + '@img/sharp-darwin-arm64@0.34.3': optionalDependencies: - '@img/sharp-libvips-darwin-arm64': 1.1.0 + '@img/sharp-libvips-darwin-arm64': 1.2.0 optional: true - '@img/sharp-darwin-x64@0.34.2': + '@img/sharp-darwin-x64@0.34.3': optionalDependencies: - '@img/sharp-libvips-darwin-x64': 1.1.0 + '@img/sharp-libvips-darwin-x64': 1.2.0 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.2.0': optional: true - '@img/sharp-libvips-darwin-arm64@1.1.0': + '@img/sharp-libvips-darwin-x64@1.2.0': optional: true - '@img/sharp-libvips-darwin-x64@1.1.0': + '@img/sharp-libvips-linux-arm64@1.2.0': optional: true - '@img/sharp-libvips-linux-arm64@1.1.0': + '@img/sharp-libvips-linux-arm@1.2.0': optional: true - '@img/sharp-libvips-linux-arm@1.1.0': + '@img/sharp-libvips-linux-ppc64@1.2.0': optional: true - '@img/sharp-libvips-linux-ppc64@1.1.0': + '@img/sharp-libvips-linux-s390x@1.2.0': optional: true - '@img/sharp-libvips-linux-s390x@1.1.0': + '@img/sharp-libvips-linux-x64@1.2.0': optional: true - '@img/sharp-libvips-linux-x64@1.1.0': + '@img/sharp-libvips-linuxmusl-arm64@1.2.0': optional: true - '@img/sharp-libvips-linuxmusl-arm64@1.1.0': + '@img/sharp-libvips-linuxmusl-x64@1.2.0': optional: true - '@img/sharp-libvips-linuxmusl-x64@1.1.0': + '@img/sharp-linux-arm64@0.34.3': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.2.0 optional: true - '@img/sharp-linux-arm64@0.34.2': + '@img/sharp-linux-arm@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-arm64': 1.1.0 + '@img/sharp-libvips-linux-arm': 1.2.0 optional: true - '@img/sharp-linux-arm@0.34.2': + '@img/sharp-linux-ppc64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-arm': 1.1.0 + '@img/sharp-libvips-linux-ppc64': 1.2.0 optional: true - '@img/sharp-linux-s390x@0.34.2': + '@img/sharp-linux-s390x@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-s390x': 1.1.0 + '@img/sharp-libvips-linux-s390x': 1.2.0 optional: true - '@img/sharp-linux-x64@0.34.2': + '@img/sharp-linux-x64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linux-x64': 1.1.0 + '@img/sharp-libvips-linux-x64': 1.2.0 optional: true - '@img/sharp-linuxmusl-arm64@0.34.2': + '@img/sharp-linuxmusl-arm64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 optional: true - '@img/sharp-linuxmusl-x64@0.34.2': + '@img/sharp-linuxmusl-x64@0.34.3': optionalDependencies: - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 optional: true - '@img/sharp-wasm32@0.34.2': + '@img/sharp-wasm32@0.34.3': dependencies: - '@emnapi/runtime': 1.4.3 + '@emnapi/runtime': 1.4.5 optional: true - '@img/sharp-win32-arm64@0.34.2': + '@img/sharp-win32-arm64@0.34.3': optional: true - '@img/sharp-win32-ia32@0.34.2': + '@img/sharp-win32-ia32@0.34.3': optional: true - '@img/sharp-win32-x64@0.34.2': + '@img/sharp-win32-x64@0.34.3': optional: true '@isaacs/fs-minipass@4.0.1': @@ -3266,30 +3179,17 @@ snapshots: '@jridgewell/gen-mapping@0.3.12': dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/gen-mapping@0.3.8': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec@1.5.4': {} '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': dependencies: @@ -3299,30 +3199,30 @@ snapshots: dependencies: jsep: 1.4.0 - '@next/env@15.3.5': {} + '@next/env@15.4.5': {} - '@next/swc-darwin-arm64@15.3.5': + '@next/swc-darwin-arm64@15.4.5': optional: true - '@next/swc-darwin-x64@15.3.5': + '@next/swc-darwin-x64@15.4.5': optional: true - '@next/swc-linux-arm64-gnu@15.3.5': + '@next/swc-linux-arm64-gnu@15.4.5': optional: true - '@next/swc-linux-arm64-musl@15.3.5': + '@next/swc-linux-arm64-musl@15.4.5': optional: true - '@next/swc-linux-x64-gnu@15.3.5': + '@next/swc-linux-x64-gnu@15.4.5': optional: true - '@next/swc-linux-x64-musl@15.3.5': + '@next/swc-linux-x64-musl@15.4.5': optional: true - '@next/swc-win32-arm64-msvc@15.3.5': + '@next/swc-win32-arm64-msvc@15.4.5': optional: true - '@next/swc-win32-x64-msvc@15.3.5': + '@next/swc-win32-x64-msvc@15.4.5': optional: true '@nodelib/fs.scandir@2.1.5': @@ -3400,208 +3300,206 @@ snapshots: dependencies: '@octokit/openapi-types': 24.2.0 - '@pivanov/utils@0.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0)': + '@pivanov/utils@0.0.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) - '@playwright/test@1.54.0': + '@playwright/test@1.54.2': dependencies: - playwright: 1.54.0 + playwright: 1.54.2 '@preact/signals-core@1.11.0': {} - '@preact/signals@1.3.2(preact@10.26.9)': + '@preact/signals@1.3.2(preact@10.27.0)': dependencies: '@preact/signals-core': 1.11.0 - preact: 10.26.9 + preact: 10.27.0 - '@react-zero-ui/core@0.1.0(@tailwindcss/postcss@4.1.10)(postcss@8.5.6)(react@19.1.0)(tailwindcss@4.1.10)': + '@react-zero-ui/core@0.1.0(@tailwindcss/postcss@4.1.11)(postcss@8.5.6)(react@19.1.1)(tailwindcss@4.1.11)': dependencies: '@babel/generator': 7.28.0 '@babel/parser': 7.28.0 '@babel/traverse': 7.28.0 - '@babel/types': 7.28.0 - '@tailwindcss/postcss': 4.1.10 + '@babel/types': 7.28.2 + '@tailwindcss/postcss': 4.1.11 postcss: 8.5.6 - react: 19.1.0 - tailwindcss: 4.1.10 + react: 19.1.1 + tailwindcss: 4.1.11 transitivePeerDependencies: - supports-color - '@react-zero-ui/core@0.2.2(@tailwindcss/postcss@4.1.10)(postcss@8.5.6)(react@19.1.0)(tailwindcss@4.1.10)': + '@react-zero-ui/core@0.2.7(@tailwindcss/postcss@4.1.11)(postcss@8.5.6)(react@19.1.1)(tailwindcss@4.1.11)': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.27.5 - '@babel/parser': 7.27.5 + '@babel/generator': 7.28.0 + '@babel/parser': 7.28.0 '@babel/traverse': 7.28.0 - '@babel/types': 7.27.6 - '@tailwindcss/postcss': 4.1.10 + '@babel/types': 7.28.2 + '@tailwindcss/postcss': 4.1.11 fast-glob: 3.3.3 - lru-cache: 10.4.3 + lru-cache: 11.1.0 postcss: 8.5.6 - react: 19.1.0 - tailwindcss: 4.1.10 + react: 19.1.1 + tailwindcss: 4.1.11 transitivePeerDependencies: - supports-color - '@rollup/pluginutils@5.2.0(rollup@4.45.1)': + '@rollup/pluginutils@5.2.0(rollup@4.46.2)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.45.1 + rollup: 4.46.2 - '@rollup/rollup-android-arm-eabi@4.45.1': + '@rollup/rollup-android-arm-eabi@4.46.2': optional: true - '@rollup/rollup-android-arm64@4.45.1': + '@rollup/rollup-android-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-arm64@4.45.1': + '@rollup/rollup-darwin-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-x64@4.45.1': + '@rollup/rollup-darwin-x64@4.46.2': optional: true - '@rollup/rollup-freebsd-arm64@4.45.1': + '@rollup/rollup-freebsd-arm64@4.46.2': optional: true - '@rollup/rollup-freebsd-x64@4.45.1': + '@rollup/rollup-freebsd-x64@4.46.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.45.1': + '@rollup/rollup-linux-arm-musleabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.45.1': + '@rollup/rollup-linux-arm64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.45.1': + '@rollup/rollup-linux-arm64-musl@4.46.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + '@rollup/rollup-linux-ppc64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.45.1': + '@rollup/rollup-linux-riscv64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.45.1': + '@rollup/rollup-linux-riscv64-musl@4.46.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.45.1': + '@rollup/rollup-linux-s390x-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.45.1': + '@rollup/rollup-linux-x64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-musl@4.45.1': + '@rollup/rollup-linux-x64-musl@4.46.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.45.1': + '@rollup/rollup-win32-arm64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.45.1': + '@rollup/rollup-win32-ia32-msvc@4.46.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.45.1': + '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true '@rtsao/scc@1.1.0': {} - '@swc/counter@0.1.3': {} - '@swc/helpers@0.5.15': dependencies: tslib: 2.8.1 - '@tailwindcss/node@4.1.10': + '@tailwindcss/node@4.1.11': dependencies: '@ampproject/remapping': 2.3.0 enhanced-resolve: 5.18.2 - jiti: 2.4.2 + jiti: 2.5.1 lightningcss: 1.30.1 magic-string: 0.30.17 source-map-js: 1.2.1 - tailwindcss: 4.1.10 + tailwindcss: 4.1.11 - '@tailwindcss/oxide-android-arm64@4.1.10': + '@tailwindcss/oxide-android-arm64@4.1.11': optional: true - '@tailwindcss/oxide-darwin-arm64@4.1.10': + '@tailwindcss/oxide-darwin-arm64@4.1.11': optional: true - '@tailwindcss/oxide-darwin-x64@4.1.10': + '@tailwindcss/oxide-darwin-x64@4.1.11': optional: true - '@tailwindcss/oxide-freebsd-x64@4.1.10': + '@tailwindcss/oxide-freebsd-x64@4.1.11': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.10': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.1.10': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.1.10': + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.1.10': + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.1.10': + '@tailwindcss/oxide-linux-x64-musl@4.1.11': optional: true - '@tailwindcss/oxide-wasm32-wasi@4.1.10': + '@tailwindcss/oxide-wasm32-wasi@4.1.11': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.1.10': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.1.10': + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': optional: true - '@tailwindcss/oxide@4.1.10': + '@tailwindcss/oxide@4.1.11': dependencies: detect-libc: 2.0.4 tar: 7.4.3 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.1.10 - '@tailwindcss/oxide-darwin-arm64': 4.1.10 - '@tailwindcss/oxide-darwin-x64': 4.1.10 - '@tailwindcss/oxide-freebsd-x64': 4.1.10 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.10 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.10 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.10 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.10 - '@tailwindcss/oxide-linux-x64-musl': 4.1.10 - '@tailwindcss/oxide-wasm32-wasi': 4.1.10 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.10 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.10 - - '@tailwindcss/postcss@4.1.10': + '@tailwindcss/oxide-android-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-x64': 4.1.11 + '@tailwindcss/oxide-freebsd-x64': 4.1.11 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-x64-musl': 4.1.11 + '@tailwindcss/oxide-wasm32-wasi': 4.1.11 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 + + '@tailwindcss/postcss@4.1.11': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.1.10 - '@tailwindcss/oxide': 4.1.10 + '@tailwindcss/node': 4.1.11 + '@tailwindcss/oxide': 4.1.11 postcss: 8.5.6 - tailwindcss: 4.1.10 + tailwindcss: 4.1.11 '@types/babel__code-frame@7.0.6': {} '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 - '@types/babel__traverse@7.20.7': + '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 '@types/estree@1.0.8': {} @@ -3611,7 +3509,7 @@ snapshots: '@types/minimist@1.2.5': {} - '@types/node@20.19.2': + '@types/node@20.19.9': dependencies: undici-types: 6.21.0 @@ -3623,15 +3521,15 @@ snapshots: '@types/npm-package-arg@6.1.4': {} - '@types/react-dom@19.1.6(@types/react@19.1.8)': + '@types/react-dom@19.1.7(@types/react@19.1.9)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@types/react-reconciler@0.28.9(@types/react@19.1.8)': + '@types/react-reconciler@0.28.9(@types/react@19.1.9)': dependencies: - '@types/react': 19.1.8 + '@types/react': 19.1.9 - '@types/react@19.1.8': + '@types/react@19.1.9': dependencies: csstype: 3.1.3 @@ -3643,24 +3541,24 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/parser@8.38.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 - eslint: 9.30.1(jiti@2.4.2) - typescript: 5.8.3 + eslint: 9.32.0(jiti@2.5.1) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 debug: 4.4.1 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -3669,16 +3567,16 @@ snapshots: '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 '@typescript-eslint/types@8.38.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) + '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) '@typescript-eslint/types': 8.38.0 '@typescript-eslint/visitor-keys': 8.38.0 debug: 4.4.1 @@ -3686,19 +3584,19 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - eslint: 9.30.1(jiti@2.4.2) - typescript: 5.8.3 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + eslint: 9.32.0(jiti@2.5.1) + typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -3707,10 +3605,10 @@ snapshots: '@typescript-eslint/types': 8.38.0 eslint-visitor-keys: 4.2.1 - '@vercel/analytics@1.5.0(next@15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react@19.1.0)': + '@vercel/analytics@1.5.0(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react@19.1.1)': optionalDependencies: - next: 15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - react: 19.1.0 + next: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 '@xmldom/xmldom@0.8.10': {} @@ -3805,10 +3703,10 @@ snapshots: before-after-hook@2.2.3: {} - bippy@0.3.17(@types/react@19.1.8)(react@19.1.0): + bippy@0.3.17(@types/react@19.1.9)(react@19.1.1): dependencies: - '@types/react-reconciler': 0.28.9(@types/react@19.1.8) - react: 19.1.0 + '@types/react-reconciler': 0.28.9(@types/react@19.1.9) + react: 19.1.1 transitivePeerDependencies: - '@types/react' @@ -3829,15 +3727,11 @@ snapshots: browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001726 - electron-to-chromium: 1.5.188 + caniuse-lite: 1.0.30001731 + electron-to-chromium: 1.5.194 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -3865,7 +3759,7 @@ snapshots: camelcase@5.3.1: {} - caniuse-lite@1.0.30001726: {} + caniuse-lite@1.0.30001731: {} chalk@4.1.2: dependencies: @@ -4055,7 +3949,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.188: {} + electron-to-chromium@1.5.194: {} emoji-regex@8.0.0: {} @@ -4195,22 +4089,22 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.4.2)): + eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-es@3.0.1(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-es@3.0.1(eslint@9.32.0(jiti@2.5.1)): dependencies: - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) eslint-utils: 2.1.0 regexpp: 3.2.0 - eslint-plugin-import@2.32.0(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-import@2.32.0(eslint@9.32.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -4219,9 +4113,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.32.0(jiti@2.4.2) + eslint: 9.32.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.4.2)) + eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -4237,10 +4131,10 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-node@11.1.0(eslint@9.32.0(jiti@2.4.2)): + eslint-plugin-node@11.1.0(eslint@9.32.0(jiti@2.5.1)): dependencies: - eslint: 9.32.0(jiti@2.4.2) - eslint-plugin-es: 3.0.1(eslint@9.32.0(jiti@2.4.2)) + eslint: 9.32.0(jiti@2.5.1) + eslint-plugin-es: 3.0.1(eslint@9.32.0(jiti@2.5.1)) eslint-utils: 2.1.0 ignore: 5.3.2 minimatch: 3.1.2 @@ -4262,51 +4156,9 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.30.1(jiti@2.4.2): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.14.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.30.1 - '@eslint/plugin-kit': 0.3.3 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.8 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1 - escape-string-regexp: 4.0.0 - eslint-scope: 8.4.0 - eslint-visitor-keys: 4.2.1 - espree: 10.4.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - supports-color - - eslint@9.32.0(jiti@2.4.2): + eslint@9.32.0(jiti@2.5.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.4.2)) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 '@eslint/config-helpers': 0.3.0 @@ -4342,7 +4194,7 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.5.1 transitivePeerDependencies: - supports-color @@ -4421,14 +4273,14 @@ snapshots: dependencies: is-callable: 1.2.7 - framer-motion@12.19.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + framer-motion@12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - motion-dom: 12.19.0 - motion-utils: 12.19.0 + motion-dom: 12.23.12 + motion-utils: 12.23.6 tslib: 2.8.1 optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) fs.realpath@1.0.0: {} @@ -4712,7 +4564,7 @@ snapshots: isexe@2.0.0: {} - jiti@2.4.2: {} + jiti@2.5.1: {} js-tokens@4.0.0: {} @@ -4818,8 +4670,6 @@ snapshots: lodash.merge@4.6.2: {} - lru-cache@10.4.3: {} - lru-cache@11.1.0: {} lru-cache@5.1.1: @@ -4832,7 +4682,7 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 map-obj@1.0.1: {} @@ -4893,19 +4743,19 @@ snapshots: modify-values@1.0.1: {} - motion-dom@12.19.0: + motion-dom@12.23.12: dependencies: - motion-utils: 12.19.0 + motion-utils: 12.23.6 - motion-utils@12.19.0: {} + motion-utils@12.23.6: {} - motion@12.18.1(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + motion@12.18.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - framer-motion: 12.19.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + framer-motion: 12.23.12(react-dom@19.1.1(react@19.1.1))(react@19.1.1) tslib: 2.8.1 optionalDependencies: - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) mri@1.2.0: {} @@ -4917,28 +4767,26 @@ snapshots: neo-async@2.6.2: {} - next@15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0): + next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1): dependencies: - '@next/env': 15.3.5 - '@swc/counter': 0.1.3 + '@next/env': 15.4.5 '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001726 + caniuse-lite: 1.0.30001731 postcss: 8.4.31 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) - styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.0) + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) + styled-jsx: 5.1.6(@babel/core@7.28.0)(react@19.1.1) optionalDependencies: - '@next/swc-darwin-arm64': 15.3.5 - '@next/swc-darwin-x64': 15.3.5 - '@next/swc-linux-arm64-gnu': 15.3.5 - '@next/swc-linux-arm64-musl': 15.3.5 - '@next/swc-linux-x64-gnu': 15.3.5 - '@next/swc-linux-x64-musl': 15.3.5 - '@next/swc-win32-arm64-msvc': 15.3.5 - '@next/swc-win32-x64-msvc': 15.3.5 - '@playwright/test': 1.54.0 - sharp: 0.34.2 + '@next/swc-darwin-arm64': 15.4.5 + '@next/swc-darwin-x64': 15.4.5 + '@next/swc-linux-arm64-gnu': 15.4.5 + '@next/swc-linux-arm64-musl': 15.4.5 + '@next/swc-linux-x64-gnu': 15.4.5 + '@next/swc-linux-x64-musl': 15.4.5 + '@next/swc-win32-arm64-msvc': 15.4.5 + '@next/swc-win32-x64-msvc': 15.4.5 + '@playwright/test': 1.54.2 + sharp: 0.34.3 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -5067,11 +4915,11 @@ snapshots: picomatch@4.0.3: {} - playwright-core@1.54.0: {} + playwright-core@1.54.2: {} - playwright@1.54.0: + playwright@1.54.2: dependencies: - playwright-core: 1.54.0 + playwright-core: 1.54.2 optionalDependencies: fsevents: 2.3.2 @@ -5089,7 +4937,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - preact@10.26.9: {} + preact@10.27.0: {} prelude-ls@1.2.1: {} @@ -5101,41 +4949,41 @@ snapshots: quick-lru@4.0.1: {} - react-dom@19.1.0(react@19.1.0): + react-dom@19.1.1(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 scheduler: 0.26.0 - react-scan@0.4.3(@types/react@19.1.8)(next@15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0))(react-dom@19.1.0(react@19.1.0))(react@19.1.0)(rollup@4.45.1): + react-scan@0.4.3(@types/react@19.1.9)(next@15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1))(react-dom@19.1.1(react@19.1.1))(react@19.1.1)(rollup@4.46.2): dependencies: '@babel/core': 7.28.0 '@babel/generator': 7.28.0 - '@babel/types': 7.28.0 + '@babel/types': 7.28.2 '@clack/core': 0.3.5 '@clack/prompts': 0.8.2 - '@pivanov/utils': 0.0.2(react-dom@19.1.0(react@19.1.0))(react@19.1.0) - '@preact/signals': 1.3.2(preact@10.26.9) - '@rollup/pluginutils': 5.2.0(rollup@4.45.1) - '@types/node': 20.19.2 - bippy: 0.3.17(@types/react@19.1.8)(react@19.1.0) + '@pivanov/utils': 0.0.2(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + '@preact/signals': 1.3.2(preact@10.27.0) + '@rollup/pluginutils': 5.2.0(rollup@4.46.2) + '@types/node': 20.19.9 + bippy: 0.3.17(@types/react@19.1.9)(react@19.1.1) esbuild: 0.25.8 estree-walker: 3.0.3 kleur: 4.1.5 mri: 1.2.0 - playwright: 1.54.0 - preact: 10.26.9 - react: 19.1.0 - react-dom: 19.1.0(react@19.1.0) + playwright: 1.54.2 + preact: 10.27.0 + react: 19.1.1 + react-dom: 19.1.1(react@19.1.1) tsx: 4.20.3 optionalDependencies: - next: 15.3.5(@babel/core@7.28.0)(@playwright/test@1.54.0)(react-dom@19.1.0(react@19.1.0))(react@19.1.0) + next: 15.4.5(@babel/core@7.28.0)(@playwright/test@1.54.2)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) unplugin: 2.1.0 transitivePeerDependencies: - '@types/react' - rollup - supports-color - react@19.1.0: {} + react@19.1.1: {} read-pkg-up@7.0.1: dependencies: @@ -5229,30 +5077,30 @@ snapshots: reusify@1.1.0: {} - rollup@4.45.1: + rollup@4.46.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.45.1 - '@rollup/rollup-android-arm64': 4.45.1 - '@rollup/rollup-darwin-arm64': 4.45.1 - '@rollup/rollup-darwin-x64': 4.45.1 - '@rollup/rollup-freebsd-arm64': 4.45.1 - '@rollup/rollup-freebsd-x64': 4.45.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 - '@rollup/rollup-linux-arm-musleabihf': 4.45.1 - '@rollup/rollup-linux-arm64-gnu': 4.45.1 - '@rollup/rollup-linux-arm64-musl': 4.45.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-gnu': 4.45.1 - '@rollup/rollup-linux-riscv64-musl': 4.45.1 - '@rollup/rollup-linux-s390x-gnu': 4.45.1 - '@rollup/rollup-linux-x64-gnu': 4.45.1 - '@rollup/rollup-linux-x64-musl': 4.45.1 - '@rollup/rollup-win32-arm64-msvc': 4.45.1 - '@rollup/rollup-win32-ia32-msvc': 4.45.1 - '@rollup/rollup-win32-x64-msvc': 4.45.1 + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 optional: true @@ -5309,33 +5157,34 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.1.1 - sharp@0.34.2: + sharp@0.34.3: dependencies: color: 4.2.3 detect-libc: 2.0.4 semver: 7.7.2 optionalDependencies: - '@img/sharp-darwin-arm64': 0.34.2 - '@img/sharp-darwin-x64': 0.34.2 - '@img/sharp-libvips-darwin-arm64': 1.1.0 - '@img/sharp-libvips-darwin-x64': 1.1.0 - '@img/sharp-libvips-linux-arm': 1.1.0 - '@img/sharp-libvips-linux-arm64': 1.1.0 - '@img/sharp-libvips-linux-ppc64': 1.1.0 - '@img/sharp-libvips-linux-s390x': 1.1.0 - '@img/sharp-libvips-linux-x64': 1.1.0 - '@img/sharp-libvips-linuxmusl-arm64': 1.1.0 - '@img/sharp-libvips-linuxmusl-x64': 1.1.0 - '@img/sharp-linux-arm': 0.34.2 - '@img/sharp-linux-arm64': 0.34.2 - '@img/sharp-linux-s390x': 0.34.2 - '@img/sharp-linux-x64': 0.34.2 - '@img/sharp-linuxmusl-arm64': 0.34.2 - '@img/sharp-linuxmusl-x64': 0.34.2 - '@img/sharp-wasm32': 0.34.2 - '@img/sharp-win32-arm64': 0.34.2 - '@img/sharp-win32-ia32': 0.34.2 - '@img/sharp-win32-x64': 0.34.2 + '@img/sharp-darwin-arm64': 0.34.3 + '@img/sharp-darwin-x64': 0.34.3 + '@img/sharp-libvips-darwin-arm64': 1.2.0 + '@img/sharp-libvips-darwin-x64': 1.2.0 + '@img/sharp-libvips-linux-arm': 1.2.0 + '@img/sharp-libvips-linux-arm64': 1.2.0 + '@img/sharp-libvips-linux-ppc64': 1.2.0 + '@img/sharp-libvips-linux-s390x': 1.2.0 + '@img/sharp-libvips-linux-x64': 1.2.0 + '@img/sharp-libvips-linuxmusl-arm64': 1.2.0 + '@img/sharp-libvips-linuxmusl-x64': 1.2.0 + '@img/sharp-linux-arm': 0.34.3 + '@img/sharp-linux-arm64': 0.34.3 + '@img/sharp-linux-ppc64': 0.34.3 + '@img/sharp-linux-s390x': 0.34.3 + '@img/sharp-linux-x64': 0.34.3 + '@img/sharp-linuxmusl-arm64': 0.34.3 + '@img/sharp-linuxmusl-x64': 0.34.3 + '@img/sharp-wasm32': 0.34.3 + '@img/sharp-win32-arm64': 0.34.3 + '@img/sharp-win32-ia32': 0.34.3 + '@img/sharp-win32-x64': 0.34.3 optional: true shebang-command@2.0.0: @@ -5406,8 +5255,6 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - streamsearch@1.1.0: {} - string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -5449,10 +5296,10 @@ snapshots: strip-json-comments@3.1.1: {} - styled-jsx@5.1.6(@babel/core@7.28.0)(react@19.1.0): + styled-jsx@5.1.6(@babel/core@7.28.0)(react@19.1.1): dependencies: client-only: 0.0.1 - react: 19.1.0 + react: 19.1.1 optionalDependencies: '@babel/core': 7.28.0 @@ -5462,7 +5309,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@4.1.10: {} + tailwindcss@4.1.11: {} tapable@2.2.2: {} @@ -5483,9 +5330,9 @@ snapshots: trim-newlines@3.0.1: {} - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 tsconfig-paths@3.15.0: dependencies: @@ -5550,8 +5397,6 @@ snapshots: typescript@4.9.5: {} - typescript@5.8.3: {} - typescript@5.9.2: {} uglify-js@3.19.3: From 92b6b9c8ed6cb63befa9e710a6fd92df254ce71a Mon Sep 17 00:00:00 2001 From: Austin1serb Date: Fri, 1 Aug 2025 22:05:37 -0700 Subject: [PATCH 3/5] update deps --- .../fixtures/next/app/ChildComponent.tsx | 4 +- .../eslint-plugin-react-zero-ui/package.json | 8 +- pnpm-lock.yaml | 526 +++++++++++++++++- 3 files changed, 511 insertions(+), 27 deletions(-) diff --git a/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/app/ChildComponent.tsx b/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/app/ChildComponent.tsx index c3f08a8..6808d9c 100644 --- a/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/app/ChildComponent.tsx +++ b/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/app/ChildComponent.tsx @@ -1,6 +1,6 @@ -import { type UISetterFn } from '@react-zero-ui/core'; +import { type ScopedSetterFn } from '@react-zero-ui/core'; -export function ChildComponent({ setIsOpen }: { setIsOpen: UISetterFn }) { +export function ChildComponent({ setIsOpen }: { setIsOpen: ScopedSetterFn }) { return (
=6.0.0'} + '@babel/code-frame@7.12.11': + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} + '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} @@ -237,6 +240,10 @@ packages: resolution: {integrity: sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==} engines: {node: '>=6.9.0'} + '@babel/highlight@7.25.9': + resolution: {integrity: sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==} + engines: {node: '>=6.9.0'} + '@babel/parser@7.28.0': resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} engines: {node: '>=6.0.0'} @@ -444,6 +451,10 @@ packages: resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@0.4.3': + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} + engines: {node: ^10.12.0 || >=12.0.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -472,10 +483,19 @@ packages: resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} + '@humanwhocodes/config-array@0.5.0': + resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} + '@humanwhocodes/object-schema@1.2.1': + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.1': resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} @@ -1048,12 +1068,15 @@ packages: '@types/yargs@16.0.9': resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true '@typescript-eslint/project-service@8.38.0': resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} @@ -1061,6 +1084,10 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@8.38.0': resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1071,10 +1098,23 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/types@8.38.0': resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + '@typescript-eslint/typescript-estree@8.38.0': resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1088,6 +1128,10 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@8.38.0': resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1127,6 +1171,11 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1139,14 +1188,28 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1161,6 +1224,10 @@ packages: resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} engines: {node: '>= 0.4'} + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + array.prototype.findlastindex@1.2.6: resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} @@ -1181,6 +1248,10 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + async-function@1.0.0: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} @@ -1248,6 +1319,10 @@ packages: caniuse-lite@1.0.30001731: resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -1275,10 +1350,16 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1395,10 +1476,18 @@ packages: resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} engines: {node: '>=0.3.1'} + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -1430,6 +1519,10 @@ packages: resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1528,6 +1621,10 @@ packages: peerDependencies: eslint: '>=5.16.0' + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + eslint-scope@8.4.0: resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1540,6 +1637,10 @@ packages: resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} engines: {node: '>=4'} + eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1548,6 +1649,12 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint@7.32.0: + resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} + engines: {node: ^10.12.0 || >=12.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + eslint@9.32.0: resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1562,6 +1669,15 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@7.3.1: + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + esquery@1.6.0: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} @@ -1570,6 +1686,10 @@ packages: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -1597,6 +1717,9 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -1604,6 +1727,10 @@ packages: resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} engines: {node: '>=8'} + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1620,6 +1747,10 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -1665,6 +1796,9 @@ packages: resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} engines: {node: '>= 0.4'} + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -1703,6 +1837,10 @@ packages: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -1711,6 +1849,10 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -1731,6 +1873,10 @@ packages: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} engines: {node: '>= 0.4'} + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -1773,6 +1919,10 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1931,6 +2081,10 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -1953,6 +2107,9 @@ packages: json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} @@ -2069,6 +2226,9 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + lru-cache@11.1.0: resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} engines: {node: 20 || >=22} @@ -2118,6 +2278,10 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -2305,6 +2469,10 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2350,6 +2518,10 @@ packages: engines: {node: '>=14'} hasBin: true + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -2423,6 +2595,10 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -2443,6 +2619,11 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + rollup@4.46.2: resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -2525,6 +2706,14 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -2548,6 +2737,9 @@ packages: split@1.0.1: resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} @@ -2597,6 +2789,10 @@ packages: babel-plugin-macros: optional: true + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -2605,6 +2801,10 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + tailwindcss@4.1.11: resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} @@ -2616,6 +2816,9 @@ packages: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -2627,6 +2830,12 @@ packages: resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} engines: {node: '>=8'} + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + ts-api-utils@2.1.0: resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} @@ -2652,6 +2861,10 @@ packages: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + type-fest@0.6.0: resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} engines: {node: '>=8'} @@ -2730,6 +2943,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} @@ -2823,6 +3039,10 @@ snapshots: '@jridgewell/gen-mapping': 0.3.12 '@jridgewell/trace-mapping': 0.3.29 + '@babel/code-frame@7.12.11': + dependencies: + '@babel/highlight': 7.25.9 + '@babel/code-frame@7.27.1': dependencies: '@babel/helper-validator-identifier': 7.27.1 @@ -2896,6 +3116,13 @@ snapshots: '@babel/template': 7.27.2 '@babel/types': 7.28.2 + '@babel/highlight@7.25.9': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/parser@7.28.0': dependencies: '@babel/types': 7.28.2 @@ -3022,6 +3249,11 @@ snapshots: '@esbuild/win32-x64@0.25.8': optional: true + '@eslint-community/eslint-utils@4.7.0(eslint@7.32.0)': + dependencies: + eslint: 7.32.0 + eslint-visitor-keys: 3.4.3 + '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0(jiti@2.5.1))': dependencies: eslint: 9.32.0(jiti@2.5.1) @@ -3043,6 +3275,20 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/eslintrc@0.4.3': + dependencies: + ajv: 6.12.6 + debug: 4.4.1 + espree: 7.3.1 + globals: 13.24.0 + ignore: 4.0.6 + import-fresh: 3.3.1 + js-yaml: 3.14.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 @@ -3079,8 +3325,18 @@ snapshots: '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/config-array@0.5.0': + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.4.1 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/module-importer@1.0.1': {} + '@humanwhocodes/object-schema@1.2.1': {} + '@humanwhocodes/retry@0.3.1': {} '@humanwhocodes/retry@0.4.3': {} @@ -3541,14 +3797,15 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/parser@6.21.0(eslint@7.32.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.4.1 - eslint: 9.32.0(jiti@2.5.1) + eslint: 7.32.0 + optionalDependencies: typescript: 5.9.2 transitivePeerDependencies: - supports-color @@ -3562,6 +3819,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/scope-manager@8.38.0': dependencies: '@typescript-eslint/types': 8.38.0 @@ -3571,8 +3833,25 @@ snapshots: dependencies: typescript: 5.9.2 + '@typescript-eslint/types@6.21.0': {} + '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.1 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.7.2 + ts-api-utils: 1.4.3(typescript@5.9.2) + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/typescript-estree@8.38.0(typescript@5.9.2)': dependencies: '@typescript-eslint/project-service': 8.38.0(typescript@5.9.2) @@ -3589,17 +3868,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + '@typescript-eslint/utils@8.38.0(eslint@7.32.0)(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) + '@eslint-community/eslint-utils': 4.7.0(eslint@7.32.0) '@typescript-eslint/scope-manager': 8.38.0 '@typescript-eslint/types': 8.38.0 '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) - eslint: 9.32.0(jiti@2.5.1) + eslint: 7.32.0 typescript: 5.9.2 transitivePeerDependencies: - supports-color + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + '@typescript-eslint/visitor-keys@8.38.0': dependencies: '@typescript-eslint/types': 8.38.0 @@ -3612,10 +3896,16 @@ snapshots: '@xmldom/xmldom@0.8.10': {} + acorn-jsx@5.3.2(acorn@7.4.1): + dependencies: + acorn: 7.4.1 + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 + acorn@7.4.1: {} + acorn@8.15.0: {} agent-base@7.1.4: {} @@ -3627,12 +3917,29 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-colors@4.1.3: {} + ansi-regex@5.0.1: {} + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + argparse@2.0.1: {} array-buffer-byte-length@1.0.2: @@ -3653,6 +3960,8 @@ snapshots: is-string: 1.1.1 math-intrinsics: 1.1.0 + array-union@2.1.0: {} + array.prototype.findlastindex@1.2.6: dependencies: call-bind: 1.0.8 @@ -3689,6 +3998,8 @@ snapshots: arrify@1.0.1: {} + astral-regex@2.0.0: {} + async-function@1.0.0: {} async-retry@1.3.3: @@ -3761,6 +4072,12 @@ snapshots: caniuse-lite@1.0.30001731: {} + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -3794,10 +4111,16 @@ snapshots: parse-diff: 0.11.1 yargs: 16.2.0 + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + color-convert@2.0.1: dependencies: color-name: 1.1.4 + color-name@1.1.3: {} + color-name@1.1.4: {} color-string@1.9.1: @@ -3917,10 +4240,18 @@ snapshots: diff@7.0.0: {} + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + doctrine@2.1.0: dependencies: esutils: 2.0.3 + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -3958,6 +4289,11 @@ snapshots: graceful-fs: 4.2.11 tapable: 2.2.2 + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + entities@4.5.0: {} error-ex@1.3.2: @@ -4141,6 +4477,11 @@ snapshots: resolve: 1.22.10 semver: 6.3.1 + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 @@ -4152,10 +4493,57 @@ snapshots: eslint-visitor-keys@1.3.0: {} + eslint-visitor-keys@2.1.0: {} + eslint-visitor-keys@3.4.3: {} eslint-visitor-keys@4.2.1: {} + eslint@7.32.0: + dependencies: + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.3 + '@humanwhocodes/config-array': 0.5.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1 + doctrine: 3.0.0 + enquirer: 2.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + espree: 7.3.1 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 13.24.0 + ignore: 4.0.6 + import-fresh: 3.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.7.2 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + table: 6.9.0 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + eslint@9.32.0(jiti@2.5.1): dependencies: '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) @@ -4204,6 +4592,14 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.15.0) eslint-visitor-keys: 4.2.1 + espree@7.3.1: + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + eslint-visitor-keys: 1.3.0 + + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4212,6 +4608,8 @@ snapshots: dependencies: estraverse: 5.3.0 + estraverse@4.3.0: {} + estraverse@5.3.0: {} estree-walker@2.0.2: {} @@ -4236,6 +4634,8 @@ snapshots: fast-levenshtein@2.0.6: {} + fast-uri@3.0.6: {} + fastq@1.19.1: dependencies: reusify: 1.1.0 @@ -4244,6 +4644,10 @@ snapshots: dependencies: escape-string-regexp: 1.0.5 + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -4262,6 +4666,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + flat-cache@3.2.0: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + rimraf: 3.0.2 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -4301,6 +4711,8 @@ snapshots: hasown: 2.0.2 is-callable: 1.2.7 + functional-red-black-tree@1.0.1: {} + functions-have-names@1.2.3: {} gensync@1.0.0-beta.2: {} @@ -4352,6 +4764,10 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + globals@14.0.0: {} globalthis@1.0.4: @@ -4359,6 +4775,15 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + gopd@1.2.0: {} graceful-fs@4.2.11: {} @@ -4376,6 +4801,8 @@ snapshots: has-bigints@1.1.0: {} + has-flag@3.0.0: {} + has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -4418,6 +4845,8 @@ snapshots: transitivePeerDependencies: - supports-color + ignore@4.0.6: {} + ignore@5.3.2: {} import-fresh@3.3.1: @@ -4568,6 +4997,11 @@ snapshots: js-tokens@4.0.0: {} + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + js-yaml@4.1.0: dependencies: argparse: 2.0.1 @@ -4582,6 +5016,8 @@ snapshots: json-schema-traverse@0.4.1: {} + json-schema-traverse@1.0.0: {} + json-stable-stringify-without-jsonify@1.0.1: {} json-stringify-safe@5.0.1: {} @@ -4670,6 +5106,8 @@ snapshots: lodash.merge@4.6.2: {} + lodash.truncate@4.4.2: {} + lru-cache@11.1.0: {} lru-cache@5.1.1: @@ -4721,6 +5159,10 @@ snapshots: dependencies: brace-expansion: 2.0.2 + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.2 + minimatch@9.0.5: dependencies: brace-expansion: 2.0.2 @@ -4909,6 +5351,8 @@ snapshots: path-parse@1.0.7: {} + path-type@4.0.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -4943,6 +5387,8 @@ snapshots: prettier@3.6.2: {} + progress@2.0.3: {} + punycode@2.3.1: {} queue-microtask@1.2.3: {} @@ -5063,6 +5509,8 @@ snapshots: require-directory@2.1.1: {} + require-from-string@2.0.2: {} + resolve-from@4.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -5077,6 +5525,10 @@ snapshots: reusify@1.1.0: {} + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + rollup@4.46.2: dependencies: '@types/estree': 1.0.8 @@ -5228,6 +5680,14 @@ snapshots: sisteransi@1.0.5: {} + slash@3.0.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + source-map-js@1.2.1: {} source-map@0.6.1: {} @@ -5250,6 +5710,8 @@ snapshots: dependencies: through: 2.3.8 + sprintf-js@1.0.3: {} + stop-iteration-iterator@1.1.0: dependencies: es-errors: 1.3.0 @@ -5303,12 +5765,24 @@ snapshots: optionalDependencies: '@babel/core': 7.28.0 + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + supports-color@7.2.0: dependencies: has-flag: 4.0.0 supports-preserve-symlinks-flag@1.0.0: {} + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + tailwindcss@4.1.11: {} tapable@2.2.2: {} @@ -5322,6 +5796,8 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 + text-table@0.2.0: {} + through@2.3.8: {} to-regex-range@5.0.1: @@ -5330,6 +5806,10 @@ snapshots: trim-newlines@3.0.1: {} + ts-api-utils@1.4.3(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: typescript: 5.9.2 @@ -5356,6 +5836,8 @@ snapshots: type-fest@0.18.1: {} + type-fest@0.20.2: {} + type-fest@0.6.0: {} type-fest@0.8.1: {} @@ -5444,6 +5926,8 @@ snapshots: dependencies: punycode: 2.3.1 + v8-compile-cache@2.4.0: {} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 From 115d755b47c690ddf5fa4b710e2abfd1881ae2fd Mon Sep 17 00:00:00 2001 From: Austin1serb Date: Fri, 1 Aug 2025 23:12:38 -0700 Subject: [PATCH 4/5] updated packages, linter, and ran tests --- eslint.config.js | 29 ++- examples/demo/src/utils/env.ts | 54 +----- package.json | 5 +- .../__tests__/fixtures/vite/src/index.css | 1 + packages/core/package.json | 4 +- packages/core/src/internal.ts | 1 - packages/core/src/postcss/helpers.test.ts | 14 +- packages/core/src/postcss/index.cts | 81 ++++---- packages/core/src/postcss/utilities.ts | 6 +- packages/core/src/postcss/vite.ts | 9 +- pnpm-lock.yaml | 183 +++++++++++++++--- tsconfig.base.json | 16 +- 12 files changed, 251 insertions(+), 152 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 5fd72ce..608712a 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,7 +1,8 @@ // eslint.config.js - ESLint 9 flat-config, JS + CJS import js from '@eslint/js'; -import nodePlugin from 'eslint-plugin-node'; +import nodePlugin from 'eslint-plugin-n'; import importPlugin from 'eslint-plugin-import'; +import tsParser from '@typescript-eslint/parser'; const nodeGlobals = { require: 'readonly', @@ -29,6 +30,8 @@ const browserGlobals = { clearTimeout: 'readonly', clearInterval: 'readonly', console: 'readonly', + HTMLElement: 'readonly', + Element: 'readonly', }; export default [ @@ -41,10 +44,10 @@ export default [ /* 3 - CommonJS (*.cjs) */ { files: ['**/*.cjs'], - plugins: { node: nodePlugin, import: importPlugin }, + plugins: { n: nodePlugin, import: importPlugin }, languageOptions: { ecmaVersion: 'latest', sourceType: 'script', globals: nodeGlobals }, rules: { - 'node/no-unsupported-features/es-syntax': 'off', + 'n/no-unsupported-features/es-syntax': 'off', 'import/no-unresolved': 'error', // Catch unresolved imports 'import/named': 'error', // Catch missing named exports 'import/default': 'error', // Catch missing default exports @@ -55,10 +58,10 @@ export default [ /* 4 - ES-module / browser (*.js) */ { files: ['**/*.js'], - plugins: { node: nodePlugin, import: importPlugin }, + plugins: { n: nodePlugin, import: importPlugin }, languageOptions: { ecmaVersion: 'latest', sourceType: 'module', globals: { ...nodeGlobals, ...browserGlobals } }, rules: { - 'node/no-unsupported-features/es-syntax': 'off', + 'n/no-unsupported-features/es-syntax': 'off', 'import/no-unresolved': 'error', 'import/named': 'error', 'import/default': 'error', @@ -66,5 +69,19 @@ export default [ }, }, - /* 5 - JSX files */ + /* 5 - TypeScript files (*.ts, *.tsx) */ + { + files: ['**/*.ts', '**/*.tsx'], + plugins: { n: nodePlugin, import: importPlugin }, + languageOptions: { parser: tsParser, ecmaVersion: 'latest', sourceType: 'module', globals: { ...nodeGlobals, ...browserGlobals } }, + rules: { + 'n/no-unsupported-features/es-syntax': 'off', + 'import/no-unresolved': 'off', // TypeScript handles this + 'import/named': 'off', // TypeScript handles this + 'import/default': 'off', // TypeScript handles this + 'import/no-absolute-path': 'error', + 'no-unused-vars': 'off', // TypeScript handles this better + 'no-undef': 'off', // TypeScript handles this + }, + }, ]; diff --git a/examples/demo/src/utils/env.ts b/examples/demo/src/utils/env.ts index 2ea8674..725a94f 100644 --- a/examples/demo/src/utils/env.ts +++ b/examples/demo/src/utils/env.ts @@ -1,53 +1 @@ -type RenderEnv = 'client' | 'server'; -type HandoffState = 'pending' | 'complete'; - -class Env { - current: RenderEnv = this.detect(); - handoffState: HandoffState = 'pending'; - currentId = 0; - - set(env: RenderEnv): void { - if (this.current === env) return; - - this.handoffState = 'pending'; - this.currentId = 0; - this.current = env; - } - - reset(): void { - this.set(this.detect()); - } - - nextId() { - return ++this.currentId; - } - - get isServer(): boolean { - return this.current === 'server'; - } - - get isClient(): boolean { - return this.current === 'client'; - } - - private detect(): RenderEnv { - if (typeof window === 'undefined' || typeof document === 'undefined') { - return 'server'; - } - - return 'client'; - } - - handoff(): void { - if (this.handoffState === 'pending') { - this.handoffState = 'complete'; - } - } - - get isHandoffComplete(): boolean { - return this.handoffState === 'complete'; - } -} - -// eslint-disable-next-line prefer-const -export let env = new Env(); +export const env = { isClient: typeof window !== 'undefined', isServer: typeof window === 'undefined' }; diff --git a/package.json b/package.json index c3fa156..6e42e54 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,12 @@ "devDependencies": { "@eslint/js": "^9.32.0", "@types/node": "^24.1.0", + "@typescript-eslint/eslint-plugin": "^8.38.0", + "@typescript-eslint/parser": "^8.38.0", "esbuild": "^0.25.8", "eslint": "^9.32.0", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-react-zero-ui": "workspace:*", + "eslint-plugin-n": "^17.21.3", "prettier": "^3.6.2", "release-please": "^17.1.1", "tsx": "^4.20.3", diff --git a/packages/core/__tests__/fixtures/vite/src/index.css b/packages/core/__tests__/fixtures/vite/src/index.css index e69de29..8b13789 100644 --- a/packages/core/__tests__/fixtures/vite/src/index.css +++ b/packages/core/__tests__/fixtures/vite/src/index.css @@ -0,0 +1 @@ + diff --git a/packages/core/package.json b/packages/core/package.json index 8abed9e..21767bb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -100,9 +100,9 @@ }, "peerDependencies": { "@tailwindcss/postcss": "^4.1.10", - "postcss": "^8.5.5", "react": ">=16.8.0", - "tailwindcss": "^4.1.10" + "tailwindcss": "^4.1.10", + "postcss": "^8.5.5" }, "dependencies": { "@babel/code-frame": "^7.27.1", diff --git a/packages/core/src/internal.ts b/packages/core/src/internal.ts index 93c36b1..1528ace 100644 --- a/packages/core/src/internal.ts +++ b/packages/core/src/internal.ts @@ -31,7 +31,6 @@ export function makeSetter(key: string, initialValue: T, getTa throw new Error(`useUI(key, initialValue); initialValue cannot be empty string, null, or undefined, got "${initialValue}"`); } // One shared registry per window / Node context - // eslint-disable-next-line @typescript-eslint/no-explicit-any const registry = typeof globalThis !== 'undefined' ? ((globalThis as any).__useUIRegistry ||= new Map()) : new Map(); const prev = registry.get(key); diff --git a/packages/core/src/postcss/helpers.test.ts b/packages/core/src/postcss/helpers.test.ts index 3272aca..d78be79 100644 --- a/packages/core/src/postcss/helpers.test.ts +++ b/packages/core/src/postcss/helpers.test.ts @@ -1,18 +1,8 @@ import { test } from 'node:test'; import assert from 'node:assert'; -import { - buildCss, - findAllSourceFiles, - generateAttributesFile, - isZeroUiInitialized, - patchPostcssConfig, - patchTsConfig, - patchViteConfig, - toKebabCase, -} from './helpers.js'; +import { buildCss, findAllSourceFiles, isZeroUiInitialized, patchPostcssConfig, patchTsConfig, patchViteConfig, toKebabCase } from './helpers.js'; import { readFile, runTest } from './test-utilities.js'; import { CONFIG } from '../config.js'; -import path from 'node:path'; import { processVariants, VariantData } from './ast-parsing.js'; test('toKebabCase should convert a string to kebab case', () => { @@ -60,7 +50,7 @@ test('processVariants should process variants', async () => { }); }); -// tiny helper - avoids CRLF ↔ LF failures on Windows runners +// tiny helper - avoids CRLF - LF failures on Windows runners const norm = (s: string) => s.replace(/\r\n/g, '\n'); test('buildCss emits @custom-variant blocks in stable order', () => { diff --git a/packages/core/src/postcss/index.cts b/packages/core/src/postcss/index.cts index 24cdfb9..72ccd88 100644 --- a/packages/core/src/postcss/index.cts +++ b/packages/core/src/postcss/index.cts @@ -1,49 +1,48 @@ // src/postcss/index.cts -import { buildCss, generateAttributesFile, isZeroUiInitialized } from './helpers.js'; +/** + * @type {import('postcss').PluginCreator} + */ +import { buildCss, generateAttributesFile, isZeroUiInitialized } from './helpers'; import { runZeroUiInit } from '../cli/postInstall.js'; -import { processVariants } from './ast-parsing.js'; -import { CONFIG } from '../config.js'; +import type { PluginCreator, Root, Result } from 'postcss'; +import { processVariants } from './ast-parsing'; +import { CONFIG } from '../config'; import { formatError, registerDeps } from './utilities.js'; -import type { Root, Result } from 'postcss'; -const PLUGIN = CONFIG.PLUGIN_NAME; -const DEV = process.env.NODE_ENV !== 'production'; - -const plugin = () => ({ - postcssPlugin: PLUGIN, - - async Once(root: Root, { result }: { result: Result }) { - try { - /* ① cold-start bootstrap --------------------------------------- */ - if (!isZeroUiInitialized()) { - console.log('[Zero-UI] Auto-initializing (first-time setup)…'); - await runZeroUiInit(); - } - - /* ② variants → CSS + attributes ------------------------------- */ - const { finalVariants, initialGlobalValues, sourceFiles } = await processVariants(); - - const cssBlock = buildCss(finalVariants); - if (cssBlock.trim()) root.prepend(cssBlock + '\n'); - - /* ③ HMR dependencies ------------------------------------------ */ - registerDeps(result, PLUGIN, sourceFiles, result.opts.from); - - /* ④ write .zero-ui files -------------------------------------- */ - await generateAttributesFile(finalVariants, initialGlobalValues); - } catch (err) { - const { friendly, loc } = formatError(err); - - if (DEV) { - if (loc?.file) registerDeps(result, PLUGIN, [loc.file], result.opts.from); - result.warn(friendly, { plugin: PLUGIN, ...loc }); - console.error('[Zero-UI] Full error (dev-only)\n', err); - return; +const zeroUIPlugin = CONFIG.PLUGIN_NAME; + +const plugin: PluginCreator = () => { + return { + postcssPlugin: zeroUIPlugin, + async Once(root: Root, { result }: { result: Result }) { + try { + const { finalVariants, initialGlobalValues, sourceFiles } = await processVariants(); + + const cssBlock = buildCss(finalVariants); + if (cssBlock?.trim()) root.prepend(cssBlock + '\n'); + + /* ── register file-dependencies for HMR ─────────────────── */ + registerDeps(result, zeroUIPlugin, sourceFiles, result.opts.from ?? ''); + + /* ── first-run bootstrap ────────────────────────────────── */ + if (!isZeroUiInitialized()) { + console.log('[Zero-UI] Auto-initializing (first-time setup)…'); + await runZeroUiInit(); + } + await generateAttributesFile(finalVariants, initialGlobalValues); + } catch (err: unknown) { + const { friendly, loc } = formatError(err); + if (process.env.NODE_ENV !== 'production') { + if (loc?.file) registerDeps(result, zeroUIPlugin, [loc.file], result.opts.from ?? ''); + result.warn(friendly, { plugin: zeroUIPlugin, ...loc }); + console.error('[Zero-UI] Full error (dev-only)\n', err); + return; // keep dev-server alive + } + throw new Error(`[Zero-UI] PostCSS plugin error: ${friendly}`); } - throw new Error(`[Zero-UI] PostCSS plugin error: ${friendly}`); - } - }, -}); + }, + }; +}; plugin.postcss = true; export = plugin; diff --git a/packages/core/src/postcss/utilities.ts b/packages/core/src/postcss/utilities.ts index 028fef5..cd9248b 100644 --- a/packages/core/src/postcss/utilities.ts +++ b/packages/core/src/postcss/utilities.ts @@ -24,6 +24,8 @@ export function formatError(err: unknown) { return { friendly, loc: eWithLoc.loc }; } -export function registerDeps(result: Result, plugin: string, files: string[], parent: string | undefined) { - result.messages.push({ type: 'dependency', plugin, file: files, parent }); +export function registerDeps(result: Result, plugin: string, files: string[], parent: string) { + files.forEach((file) => { + result.messages.push({ type: 'dependency', plugin, file, parent }); + }); } diff --git a/packages/core/src/postcss/vite.ts b/packages/core/src/postcss/vite.ts index 5d4562a..26280f0 100644 --- a/packages/core/src/postcss/vite.ts +++ b/packages/core/src/postcss/vite.ts @@ -4,10 +4,13 @@ import tailwindcss from '@tailwindcss/postcss'; import zeroUiPostcss from './index.cjs'; import path from 'path'; -export default function zeroUI() { +// @ts-ignore +import type { Plugin } from 'vite'; + +export default function zeroUI(): Plugin { return { - name: 'vite-zero-ui', - enforce: 'pre', // run before other Vite plugins + name: 'vite-react-zero-ui', + enforce: 'pre' as const, // run before other Vite plugins async config() { return { css: { postcss: { plugins: [zeroUiPostcss, tailwindcss()] } } }; }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f8543b..10c2fa5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,6 +14,12 @@ importers: '@types/node': specifier: ^24.1.0 version: 24.1.0 + '@typescript-eslint/eslint-plugin': + specifier: ^8.38.0 + version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/parser': + specifier: ^8.38.0 + version: 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) esbuild: specifier: ^0.25.8 version: 0.25.8 @@ -22,13 +28,10 @@ importers: version: 9.32.0(jiti@2.5.1) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(eslint@9.32.0(jiti@2.5.1)) - eslint-plugin-node: - specifier: ^11.1.0 - version: 11.1.0(eslint@9.32.0(jiti@2.5.1)) - eslint-plugin-react-zero-ui: - specifier: workspace:* - version: link:packages/eslint-plugin-react-zero-ui + version: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1)) + eslint-plugin-n: + specifier: ^17.21.3 + version: 17.21.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) prettier: specifier: ^3.6.2 version: 3.6.2 @@ -1068,6 +1071,14 @@ packages: '@types/yargs@16.0.9': resolution: {integrity: sha512-tHhzvkFXZQeTECenFoRljLBYPZJ7jAVxqqtEI0qTLOmuultnFp4I9yKE17vTuhf7BkhCu7I4XuemPgikDVuYqA==} + '@typescript-eslint/eslint-plugin@8.38.0': + resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.38.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/parser@6.21.0': resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1078,6 +1089,13 @@ packages: typescript: optional: true + '@typescript-eslint/parser@8.38.0': + resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/project-service@8.38.0': resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1098,6 +1116,13 @@ packages: peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/type-utils@8.38.0': + resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/types@6.21.0': resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1575,6 +1600,12 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} @@ -1599,11 +1630,11 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - eslint: '>=4.19.1' + eslint: '>=8' eslint-plugin-import@2.32.0: resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} @@ -1615,11 +1646,11 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} + eslint-plugin-n@17.21.3: + resolution: {integrity: sha512-MtxYjDZhMQgsWRm/4xYLL0i2EhusWT7itDxlJ80l1NND2AL2Vi5Mvneqv/ikG9+zpran0VsVRXTEHrpLmUZRNw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=5.16.0' + eslint: '>=8.23.0' eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -1845,6 +1876,10 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -1853,6 +1888,9 @@ packages: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -1860,6 +1898,9 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + handlebars@4.7.8: resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} engines: {node: '>=0.4.7'} @@ -1927,6 +1968,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} @@ -2842,6 +2887,11 @@ packages: peerDependencies: typescript: '>=4.8.4' + ts-declaration-location@1.0.7: + resolution: {integrity: sha512-EDyGAwH1gO0Ausm9gV6T2nUvBgXT5kGoCMJPllOaooZ+4VvJiKBdZE7wK18N1deEowhcUptS+5GXZK8U/fvpwA==} + peerDependencies: + typescript: '>=4.0.0' + tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} @@ -3797,6 +3847,23 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 + '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.38.0 + eslint: 9.32.0(jiti@2.5.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@6.21.0(eslint@7.32.0)(typescript@5.9.2)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 @@ -3810,6 +3877,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.38.0 + debug: 4.4.1 + eslint: 9.32.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.38.0(typescript@5.9.2)': dependencies: '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.9.2) @@ -3833,6 +3912,18 @@ snapshots: dependencies: typescript: 5.9.2 + '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) + debug: 4.4.1 + eslint: 9.32.0(jiti@2.5.1) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@6.21.0': {} '@typescript-eslint/types@8.38.0': {} @@ -3879,6 +3970,17 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) + '@typescript-eslint/scope-manager': 8.38.0 + '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.9.2) + eslint: 9.32.0(jiti@2.5.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 @@ -4417,6 +4519,11 @@ snapshots: escape-string-regexp@4.0.0: {} + eslint-compat-utils@0.5.1(eslint@9.32.0(jiti@2.5.1)): + dependencies: + eslint: 9.32.0(jiti@2.5.1) + semver: 7.7.2 + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 @@ -4425,22 +4532,24 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)): dependencies: debug: 3.2.7 optionalDependencies: + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) eslint: 9.32.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-es@3.0.1(eslint@9.32.0(jiti@2.5.1)): + eslint-plugin-es-x@7.8.0(eslint@9.32.0(jiti@2.5.1)): dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) + '@eslint-community/regexpp': 4.12.1 eslint: 9.32.0(jiti@2.5.1) - eslint-utils: 2.1.0 - regexpp: 3.2.0 + eslint-compat-utils: 0.5.1(eslint@9.32.0(jiti@2.5.1)) - eslint-plugin-import@2.32.0(eslint@9.32.0(jiti@2.5.1)): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.32.0(jiti@2.5.1)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -4451,7 +4560,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.32.0(jiti@2.5.1) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.32.0(jiti@2.5.1)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -4462,20 +4571,27 @@ snapshots: semver: 6.3.1 string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.38.0(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-node@11.1.0(eslint@9.32.0(jiti@2.5.1)): + eslint-plugin-n@17.21.3(eslint@9.32.0(jiti@2.5.1))(typescript@5.9.2): dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0(jiti@2.5.1)) + enhanced-resolve: 5.18.2 eslint: 9.32.0(jiti@2.5.1) - eslint-plugin-es: 3.0.1(eslint@9.32.0(jiti@2.5.1)) - eslint-utils: 2.1.0 + eslint-plugin-es-x: 7.8.0(eslint@9.32.0(jiti@2.5.1)) + get-tsconfig: 4.10.1 + globals: 15.15.0 + globrex: 0.1.2 ignore: 5.3.2 - minimatch: 3.1.2 - resolve: 1.22.10 - semver: 6.3.1 + semver: 7.7.2 + ts-declaration-location: 1.0.7(typescript@5.9.2) + transitivePeerDependencies: + - typescript eslint-scope@5.1.1: dependencies: @@ -4770,6 +4886,8 @@ snapshots: globals@14.0.0: {} + globals@15.15.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -4784,10 +4902,14 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 + globrex@0.1.2: {} + gopd@1.2.0: {} graceful-fs@4.2.11: {} + graphemer@1.4.0: {} + handlebars@4.7.8: dependencies: minimist: 1.2.8 @@ -4849,6 +4971,8 @@ snapshots: ignore@5.3.2: {} + ignore@7.0.5: {} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 @@ -5814,6 +5938,11 @@ snapshots: dependencies: typescript: 5.9.2 + ts-declaration-location@1.0.7(typescript@5.9.2): + dependencies: + picomatch: 4.0.3 + typescript: 5.9.2 + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 diff --git a/tsconfig.base.json b/tsconfig.base.json index f6cd38c..ab44789 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -6,7 +6,7 @@ "module": "NodeNext", "moduleResolution": "NodeNext", "allowJs": true, // <- JS still builds - "checkJs": true, + "checkJs": false, "strict": true, // <- tighten as we go "declaration": true, // <- emit declaration files "outDir": "dist", // <- output directory @@ -15,5 +15,15 @@ "rootDir": "./", "forceConsistentCasingInFileNames": true }, - "exclude": ["dist", "**/*.tsx", "**/*.jsx", "**/*.test.ts", "pnpm-lock.yaml", "pnpm-workspace.yaml", "examples/**", "**/fixtures/**", "**/coming-soon/**"] -} + "exclude": [ + "dist", + "**/*.tsx", + "**/*.jsx", + "**/*.test.ts", + "pnpm-lock.yaml", + "pnpm-workspace.yaml", + "examples/**", + "**/fixtures/**", + "**/coming-soon/**" + ] +} \ No newline at end of file From 1f4c0a4e9099bb6251c57398663fa578d129f557 Mon Sep 17 00:00:00 2001 From: Austin1serb Date: Sat, 2 Aug 2025 11:41:41 -0700 Subject: [PATCH 5/5] finish runtime compression --- .prettierrc.json | 2 +- package.json | 2 +- .../core/__tests__/fixtures/next/app/page.tsx | 26 ++++--- .../fixtures/next/app/zero-runtime.tsx | 4 +- .../__tests__/fixtures/vite/src/index.css | 1 - packages/core/package.json | 2 +- packages/core/src/experimental/index.ts | 29 +++++++- packages/core/src/experimental/runtime.ts | 71 ++++++++++++++----- packages/core/src/postcss/ast-parsing.ts | 2 +- packages/core/tsconfig.build.json | 13 ++-- packages/core/tsconfig.json | 10 +-- .../__tests__/fixtures/next/eslint.config.mjs | 6 +- .../__tests__/fixtures/next/package.json | 2 +- .../eslint-plugin-react-zero-ui/package.json | 2 +- .../eslint-plugin-react-zero-ui/tsconfig.json | 12 +--- tsconfig.base.json | 14 +--- 16 files changed, 115 insertions(+), 83 deletions(-) diff --git a/.prettierrc.json b/.prettierrc.json index 295e1be..aa184a9 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -12,4 +12,4 @@ "bracketSameLine": true, "embeddedLanguageFormatting": "auto", "singleAttributePerLine": true -} +} \ No newline at end of file diff --git a/package.json b/package.json index 6e42e54..534c6c0 100644 --- a/package.json +++ b/package.json @@ -54,4 +54,4 @@ "tsx": "^4.20.3", "typescript": "^5.9.2" } -} \ No newline at end of file +} diff --git a/packages/core/__tests__/fixtures/next/app/page.tsx b/packages/core/__tests__/fixtures/next/app/page.tsx index fa019a5..bf1a1e0 100644 --- a/packages/core/__tests__/fixtures/next/app/page.tsx +++ b/packages/core/__tests__/fixtures/next/app/page.tsx @@ -42,24 +42,28 @@ export default function Page() {
- - Dark - - - Light - +
+ Theme: + + Dark + + + Light + +

diff --git a/packages/core/__tests__/fixtures/next/app/zero-runtime.tsx b/packages/core/__tests__/fixtures/next/app/zero-runtime.tsx index 707a0aa..31cbb83 100644 --- a/packages/core/__tests__/fixtures/next/app/zero-runtime.tsx +++ b/packages/core/__tests__/fixtures/next/app/zero-runtime.tsx @@ -1,12 +1,12 @@ 'use client'; /* ① import the generated defaults */ -import { bodyAttributes } from '../.zero-ui/attributes'; +import { variantKeyMap } from '../.zero-ui/attributes'; /* ② activate the runtime shipped in the package */ import { activateZeroUiRuntime } from '@react-zero-ui/core/experimental/runtime'; -activateZeroUiRuntime(bodyAttributes); +activateZeroUiRuntime(variantKeyMap); export default function ZeroUiRuntime() { return null; // this component just runs the side effect diff --git a/packages/core/__tests__/fixtures/vite/src/index.css b/packages/core/__tests__/fixtures/vite/src/index.css index 8b13789..e69de29 100644 --- a/packages/core/__tests__/fixtures/vite/src/index.css +++ b/packages/core/__tests__/fixtures/vite/src/index.css @@ -1 +0,0 @@ - diff --git a/packages/core/package.json b/packages/core/package.json index 21767bb..fcf537c 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -121,4 +121,4 @@ "@types/react": "^19.1.8", "tsx": "^4.20.3" } -} \ No newline at end of file +} diff --git a/packages/core/src/experimental/index.ts b/packages/core/src/experimental/index.ts index 1d092be..433aad5 100644 --- a/packages/core/src/experimental/index.ts +++ b/packages/core/src/experimental/index.ts @@ -1,3 +1,28 @@ -export const zeroSSR = { onClick: (key: string, vals: [...V]) => ({ 'data-ui': `cycle:${key}(${vals.join(',')})` }) as const }; +// src/experimental/index.ts -export const scopedZeroSSR = { onClick: (key: string, vals: [...V]) => ({ 'data-ui': `cycle:${key}(${vals.join(',')})` }) as const }; +type Attrs = { readonly 'data-ui': `global:${string}(${string})` } | { readonly 'data-ui': `scoped:${string}(${string})` }; + +const makeOnClick = + (scoped: boolean) => + (key: T, vals: [...V]): Attrs => { + if (process.env.NODE_ENV !== 'production') { + assertKey(key); + assertVals(vals); + } + return { 'data-ui': `${scoped ? 'scoped' : 'global'}:${key}(${vals.join(',')})` } as const; + }; + +export const zeroSSR = { onClick: makeOnClick(false) }; // global intent +export const scopedZeroSSR = { onClick: makeOnClick(true) }; // scoped intent + +function assertKey(key: string) { + if (!/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(key)) { + throw new Error(`[Zero-UI] key "${key}" must be kebab-case (e.g. theme-mobile)`); + } +} + +function assertVals(vals: string[]) { + if (vals.length === 0) { + throw new Error('[Zero-UI] onClick(): value array cannot be empty.'); + } +} diff --git a/packages/core/src/experimental/runtime.ts b/packages/core/src/experimental/runtime.ts index aa27288..a156ad1 100644 --- a/packages/core/src/experimental/runtime.ts +++ b/packages/core/src/experimental/runtime.ts @@ -1,27 +1,64 @@ -const toCamel = (k: string) => k.slice(5).replace(/-([a-z])/g, (_, c) => c.toUpperCase()); +/* ------------------------------------------------------------------ * + * Zero-UI click-handler runtime * + * * + * Listens for clicks on any element that carries a `data-ui` * + * attribute of the form: * + * * + * data-ui="global:(v1,v2,…)" > flips * + * data-ui="scoped:(v1,v2,…)" > flips nearest ancestor with matching * + * data-key="…" (or the host itself)* + * * + * A single `activateZeroUiRuntime()` call wires everything up. * + * We guard against duplicate activation in case the component * + * appears twice. * + * ------------------------------------------------------------------ */ -const cycle = (el: HTMLElement, ds: string, vals: string[]) => { - const cur = el.dataset[ds] ?? vals[0]; - const next = vals[(vals.indexOf(cur) + 1) % vals.length]; - el.dataset[ds] = next; -}; +/** Map emitted by the compiler: every legal data-* key → true */ +export type VariantKeyMap = Record; -export function activateZeroUiRuntime(bodyAttributes: Record) { - if (typeof window === 'undefined' || (window as any).__zeroUIRuntime) return; - (window as any).__zeroUIRuntime = true; +/* kebab → camel ("data-theme-dark" → "themeDark") */ +const kebabToCamel = (attr: string) => attr.slice(5).replace(/-([a-z])/g, (_, c) => c.toUpperCase()); - document.addEventListener('click', (e) => { - const host = (e.target as HTMLElement).closest('[data-ui]'); +/* One shared RegExp - avoids per-click re-parsing */ +const DATA_UI_RE = /^(global|scoped):([\w-]+)(?:\((.*?)\))?$/; + +/* Flip to next value in list */ +function cycleDatasetValue(el: HTMLElement, camelKey: string, values: readonly string[]) { + const next = el.dataset; + const current = next[camelKey] ?? values[0]; + next[camelKey] = values[(values.indexOf(current) + 1) % values.length]; +} + +/* ------------------------------------------------------------------ * + * Public entry * + * ------------------------------------------------------------------ */ +export function activateZeroUiRuntime(map: VariantKeyMap) { + if (typeof window === 'undefined' || (window as any).__zero) return; + (window as any).__zero = true; // idempotent flag + + if (process.env.NODE_ENV !== 'production') { + console.log('🧩 Zero-UI runtime attached'); + } + + document.addEventListener('click', (ev) => { + /* 1. nearest ancestor with data-ui */ + const host = (ev.target as HTMLElement).closest('[data-ui]'); if (!host) return; - const [, key, raw = ''] = host.dataset.ui!.match(/^cycle:([\w-]+)(?:\((.*?)\))?$/) || []; + /* 2. parse directive */ + const match = DATA_UI_RE.exec(host.dataset.ui!); + if (!match) return; + + const [, scope, key, raw = ''] = match; + if (!map[`data-${key}`]) return; - if (!(/* validation */ (`data-${key}` in bodyAttributes))) return; + const values = raw ? raw.split(',') : ['']; // '' > toggle + const camelKey = kebabToCamel(`data-${key}`); - const vals = raw.split(','); - const dsKey = toCamel(`data-${key}`); - const target = (host.closest(`[data-${key}]`) as HTMLElement) ?? document.body; + /* 3. decide target element */ + const target = scope === 'global' ? document.body : ((host.closest(`[data-${key}]`) as HTMLElement) ?? host); - cycle(target, dsKey, vals); + /* 4. mutate data-attribute */ + cycleDatasetValue(target, camelKey, values); }); } diff --git a/packages/core/src/postcss/ast-parsing.ts b/packages/core/src/postcss/ast-parsing.ts index 4af4809..cce68e4 100644 --- a/packages/core/src/postcss/ast-parsing.ts +++ b/packages/core/src/postcss/ast-parsing.ts @@ -121,7 +121,7 @@ export function collectUseUIHooks(ast: t.File, sourceCode: string): HookMeta[] { // throwCodeFrame(path, path.opts?.filename, sourceCode, `[Zero-UI] Could not resolve binding for setter "${setterEl.name}".`); // } - const scope: 'global' | 'scoped' = init.callee.name === CONFIG.HOOK_NAME ? 'global' : 'scoped'; + const scope = init.callee.name === CONFIG.HOOK_NAME ? 'global' : 'scoped'; hooks.push({ setterFnName: setterEl.name, stateKey, initialValue, scope }); }, diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json index 36373b4..ba95b3e 100644 --- a/packages/core/tsconfig.build.json +++ b/packages/core/tsconfig.build.json @@ -2,19 +2,14 @@ { "extends": "../../tsconfig.base.json", /* — compile exactly one file — */ - "include": [ - "src/**/*" - ], - "exclude": [ - "src/**/*.test.ts", - "./src/postcss/utilities.ts" - ], + "include": ["src/**/*"], + "exclude": ["src/**/*.test.ts", "./src/postcss/utilities.ts"], /* — compiler output — */ "compilerOptions": { "esModuleInterop": true, "rootDir": "./src", // keeps relative paths clean "outDir": "./dist", // compiled JS → dist/ "noEmit": false, - "removeComments": true + "removeComments": false } -} \ No newline at end of file +} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index ca12e1a..ece91b4 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,12 +1,8 @@ { "extends": "../../tsconfig.base.json", /* — compile exactly one file — */ - "include": [ - "src/**/*" - ], - "exclude": [ - "node_modules" - ], + "include": ["src/**/*"], + "exclude": ["node_modules"], /* — compiler output — */ "compilerOptions": { "moduleResolution": "nodenext", @@ -14,4 +10,4 @@ "rootDir": "./src", // keeps relative paths clean "outDir": "./dist" // compiled JS → dist/ } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/eslint.config.mjs b/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/eslint.config.mjs index b1e49d0..44277cc 100644 --- a/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/eslint.config.mjs +++ b/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/eslint.config.mjs @@ -24,10 +24,6 @@ export default [ plugins: { 'react-zero-ui': zeroUiPlugin, // load from workspace }, - rules: { - 'react-zero-ui/require-data-attr': 'error', - '@typescript-eslint/no-unused-vars': ['warn'], - 'no-console': ['warn', { allow: ['warn', 'error'] }], - }, + rules: { 'react-zero-ui/require-data-attr': 'error', '@typescript-eslint/no-unused-vars': ['warn'], 'no-console': ['warn', { allow: ['warn', 'error'] }] }, }, ]; diff --git a/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/package.json b/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/package.json index 43e6192..092b106 100644 --- a/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/package.json +++ b/packages/eslint-plugin-react-zero-ui/__tests__/fixtures/next/package.json @@ -25,4 +25,4 @@ "tailwindcss": "^4.1.10", "typescript": "5.8.3" } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-react-zero-ui/package.json b/packages/eslint-plugin-react-zero-ui/package.json index 5f84459..e972381 100644 --- a/packages/eslint-plugin-react-zero-ui/package.json +++ b/packages/eslint-plugin-react-zero-ui/package.json @@ -29,4 +29,4 @@ "@typescript-eslint/utils": "^8.38.0", "typescript": "^5.4.3" } -} \ No newline at end of file +} diff --git a/packages/eslint-plugin-react-zero-ui/tsconfig.json b/packages/eslint-plugin-react-zero-ui/tsconfig.json index ea268c9..473bc78 100644 --- a/packages/eslint-plugin-react-zero-ui/tsconfig.json +++ b/packages/eslint-plugin-react-zero-ui/tsconfig.json @@ -1,11 +1 @@ -{ - "extends": "../../tsconfig.base.json", - "compilerOptions": { - "rootDir": "src", - "declaration": true, - "outDir": "dist" - }, - "include": [ - "src" - ] -} \ No newline at end of file +{ "extends": "../../tsconfig.base.json", "compilerOptions": { "rootDir": "src", "declaration": true, "outDir": "dist" }, "include": ["src"] } diff --git a/tsconfig.base.json b/tsconfig.base.json index ab44789..f94f890 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -15,15 +15,5 @@ "rootDir": "./", "forceConsistentCasingInFileNames": true }, - "exclude": [ - "dist", - "**/*.tsx", - "**/*.jsx", - "**/*.test.ts", - "pnpm-lock.yaml", - "pnpm-workspace.yaml", - "examples/**", - "**/fixtures/**", - "**/coming-soon/**" - ] -} \ No newline at end of file + "exclude": ["dist", "**/*.tsx", "**/*.jsx", "**/*.test.ts", "pnpm-lock.yaml", "pnpm-workspace.yaml", "examples/**", "**/fixtures/**", "**/coming-soon/**"] +}