diff --git a/.config/oxlint/react-compiler.json b/.config/oxlint/react-compiler.json new file mode 100644 index 00000000000..f30710d5d77 --- /dev/null +++ b/.config/oxlint/react-compiler.json @@ -0,0 +1,31 @@ +{ + "$schema": "../../node_modules/oxlint/configuration_schema.json", + "jsPlugins": [ + { + "name": "react-hooks-js", + "specifier": "eslint-plugin-react-hooks" + } + ], + "rules": { + "react/rules-of-hooks": "error", + "react/exhaustive-deps": "error", + "react-hooks-js/rules-of-hooks": "off", + "react-hooks-js/exhaustive-deps": "off", + "react-hooks-js/static-components": "warn", + "react-hooks-js/use-memo": "warn", + "react-hooks-js/void-use-memo": "warn", + "react-hooks-js/component-hook-factories": "warn", + "react-hooks-js/preserve-manual-memoization": "warn", + "react-hooks-js/incompatible-library": "warn", + "react-hooks-js/immutability": "warn", + "react-hooks-js/globals": "warn", + "react-hooks-js/refs": "warn", + "react-hooks-js/set-state-in-effect": "warn", + "react-hooks-js/error-boundaries": "warn", + "react-hooks-js/purity": "warn", + "react-hooks-js/set-state-in-render": "warn", + "react-hooks-js/unsupported-syntax": "warn", + "react-hooks-js/config": "warn", + "react-hooks-js/gating": "warn" + } +} diff --git a/apps/petrinaut-website/.oxlintrc.json b/apps/petrinaut-website/.oxlintrc.json index 33073c8c929..56e080ee777 100644 --- a/apps/petrinaut-website/.oxlintrc.json +++ b/apps/petrinaut-website/.oxlintrc.json @@ -1,5 +1,6 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", + "extends": ["../../.config/oxlint/react-compiler.json"], "plugins": ["import", "react", "jsx-a11y", "unicorn", "typescript"], "categories": { "correctness": "error" @@ -82,9 +83,6 @@ { "button": true, "submit": true, "reset": false } ], - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "off", - "jsx-a11y/prefer-tag-over-role": "off", "jsx-a11y/aria-role": ["error", { "ignoreNonDOM": false }], "jsx-a11y/no-noninteractive-tabindex": [ diff --git a/apps/petrinaut-website/package.json b/apps/petrinaut-website/package.json index 1fb5ab8dedb..ed7c36e5eca 100644 --- a/apps/petrinaut-website/package.json +++ b/apps/petrinaut-website/package.json @@ -23,11 +23,11 @@ "@rolldown/plugin-babel": "0.2.1", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", - "@typescript/native-preview": "7.0.0-dev.20260315.1", + "@typescript/native-preview": "7.0.0-dev.20260511.1", "@vitejs/plugin-react": "6.0.1", "babel-plugin-react-compiler": "1.0.0", - "oxlint": "1.55.0", - "oxlint-tsgolint": "0.17.0", - "vite": "8.0.10" + "oxlint": "1.63.0", + "oxlint-tsgolint": "0.22.1", + "vite": "8.0.12" } } diff --git a/apps/petrinaut-website/src/main/app.tsx b/apps/petrinaut-website/src/main/app.tsx index c94d86ee40f..253d8d84dd7 100644 --- a/apps/petrinaut-website/src/main/app.tsx +++ b/apps/petrinaut-website/src/main/app.tsx @@ -6,7 +6,7 @@ import type { import { createJsonDocHandle } from "@hashintel/petrinaut/core"; import { Petrinaut } from "@hashintel/petrinaut/ui"; import { produce } from "immer"; -import { useEffect, useRef, useState } from "react"; +import { useEffect, useState } from "react"; import { useSentryFeedbackAction } from "./app/sentry-feedback-button"; import { @@ -21,51 +21,117 @@ const isEmptySDCPN = (sdcpn: SDCPN) => sdcpn.parameters.length === 0 && sdcpn.differentialEquations.length === 0; -export const DevApp = () => { - "use no memo"; // getOrCreateHandle lazy-initialises a ref-held Map during render, and we mirror setStoredSDCPNs into a ref synchronously — both intentional ref-during-render writes the React Compiler treats as critical errors. +const emptySDCPN: SDCPN = { + places: [], + transitions: [], + types: [], + parameters: [], + differentialEquations: [], +}; + +const createDefaultStoredSDCPN = (): SDCPNInLocalStorage => ({ + id: "net-1", + title: "New Process", + sdcpn: emptySDCPN, + lastUpdated: new Date(0).toISOString(), +}); + +/** + * Creates the localStorage record for a newly created net, keeping the generated + * id and last-updated timestamp in sync. + */ +const createLocalStorageNetRecord = (params: { + petriNetDefinition: SDCPN; + title: string; +}): SDCPNInLocalStorage => { + const now = new Date(); + + return { + id: `net-${now.getTime()}`, + title: params.title, + sdcpn: params.petriNetDefinition, + lastUpdated: now.toISOString(), + }; +}; + +const createHandle = (net: SDCPNInLocalStorage): PetrinautDocHandle => + createJsonDocHandle({ id: net.id, initial: net.sdcpn }); + +const getStoredSDCPNsForDisplay = ( + storedSDCPNs: Record, +): Record => { + if (Object.values(storedSDCPNs).length > 0) { + return storedSDCPNs; + } + + const defaultStoredSDCPN = createDefaultStoredSDCPN(); + return { [defaultStoredSDCPN.id]: defaultStoredSDCPN }; +}; +type ActiveHandle = { + handle: PetrinautDocHandle; + netId: string; + fallbackNet: SDCPNInLocalStorage; +}; + +const createActiveHandle = (net: SDCPNInLocalStorage): ActiveHandle => ({ + handle: createHandle(net), + netId: net.id, + fallbackNet: net, +}); + +/** + * Demo-site shell for Petrinaut. + * + * Local storage is the persistence layer for saved nets, while the active + * Petrinaut document handle owns the currently open net's live editable state. + * Switching files replaces the active handle instead of keeping handles alive + * for background nets. + */ +export const DevApp = () => { const sentryFeedbackAction = useSentryFeedbackAction(); const { storedSDCPNs, setStoredSDCPNs } = useLocalStorageSDCPNs(); + const storedSDCPNsForDisplay = getStoredSDCPNsForDisplay(storedSDCPNs); + const firstNet = Object.values(storedSDCPNsForDisplay)[0] ?? null; - const [currentNetId, setCurrentNetId] = useState(null); + // The net currently selected in the UI. + const [currentNetId, setCurrentNetId] = useState( + () => firstNet?.id ?? null, + ); - const currentNet = currentNetId ? (storedSDCPNs[currentNetId] ?? null) : null; + // Metadata and persisted SDCPN snapshot for the selected net. + const currentNet = currentNetId + ? (storedSDCPNsForDisplay[currentNetId] ?? null) + : null; - /** - * Per-net handles. Each handle owns the live SDCPN and its undo/redo - * history. localStorage is the persistence layer; we mirror handle - * changes into it via subscribe. - */ - const handlesRef = useRef>(new Map()); - const setStoredSDCPNsRef = useRef(setStoredSDCPNs); - setStoredSDCPNsRef.current = setStoredSDCPNs; + // Live editable document handle for the selected net only. + const [activeHandle, setActiveHandle] = useState(() => + firstNet ? createActiveHandle(firstNet) : null, + ); - const getOrCreateHandle = (net: SDCPNInLocalStorage): PetrinautDocHandle => { - const existing = handlesRef.current.get(net.id); - if (existing) { - return existing; + useEffect(() => { + if (!activeHandle) { + return; } - const handle = createJsonDocHandle({ id: net.id, initial: net.sdcpn }); - handlesRef.current.set(net.id, handle); - - handle.subscribe((event) => { - setStoredSDCPNsRef.current((prev) => { - const stored = prev[net.id]; - if (!stored) { - return prev; - } + + const { fallbackNet, handle, netId } = activeHandle; + + return handle.subscribe((event) => { + const lastUpdated = new Date().toISOString(); + + setStoredSDCPNs((prev) => { + const stored = prev[netId] ?? fallbackNet; + return produce(prev, (draft) => { - draft[net.id] = { + draft[netId] = { ...stored, sdcpn: event.next, - lastUpdated: new Date().toISOString(), + lastUpdated, }; }); }); }); - - return handle; - }; + }, [activeHandle, setStoredSDCPNs]); const existingNets: MinimalNetMetadata[] = Object.values(storedSDCPNs) .map((net) => ({ @@ -82,91 +148,87 @@ export const DevApp = () => { petriNetDefinition: SDCPN; title: string; }) => { - const newNet: SDCPNInLocalStorage = { - id: `net-${Date.now()}`, - title: params.title, - sdcpn: params.petriNetDefinition, - lastUpdated: new Date().toISOString(), - }; + const newNet = createLocalStorageNetRecord(params); + const previousNet = + currentNetId && currentNetId !== newNet.id ? currentNet : null; + const previousNetIdToRemove = previousNet !== null ? currentNetId : null; setStoredSDCPNs((prev) => { const next = { ...prev, [newNet.id]: newNet }; // Remove the previous net if it was empty and unmodified - if (currentNetId && currentNetId !== newNet.id) { - const prevNet = prev[currentNetId]; - if (prevNet && isEmptySDCPN(prevNet.sdcpn)) { - delete next[currentNetId]; - handlesRef.current.delete(currentNetId); - } + if ( + previousNetIdToRemove && + previousNet && + isEmptySDCPN(prev[previousNetIdToRemove]?.sdcpn ?? previousNet.sdcpn) + ) { + delete next[previousNetIdToRemove]; } return next; }); + setActiveHandle(createActiveHandle(newNet)); setCurrentNetId(newNet.id); }; const loadPetriNet = (petriNetId: string) => { + const netToLoad = storedSDCPNsForDisplay[petriNetId]; + if (!netToLoad) { + return; + } + // Remove the current net if it was empty and unmodified if (currentNetId && currentNetId !== petriNetId) { + const previousNetIdToRemove = + currentNet && isEmptySDCPN(currentNet.sdcpn) ? currentNetId : null; + setStoredSDCPNs((prev) => { - const prevNet = prev[currentNetId]; - if (prevNet && isEmptySDCPN(prevNet.sdcpn)) { + const prevNet = previousNetIdToRemove + ? prev[previousNetIdToRemove] + : null; + + if (previousNetIdToRemove && prevNet && isEmptySDCPN(prevNet.sdcpn)) { const next = { ...prev }; - delete next[currentNetId]; - handlesRef.current.delete(currentNetId); + delete next[previousNetIdToRemove]; return next; } return prev; }); } + setActiveHandle(createActiveHandle(netToLoad)); setCurrentNetId(petriNetId); }; const setTitle = (title: string) => { - if (!currentNetId) { + if (!currentNetId || !currentNet) { return; } + const lastUpdated = new Date().toISOString(); + setStoredSDCPNs((prev) => produce(prev, (draft) => { - if (draft[currentNetId]) { - draft[currentNetId].title = title; - } + draft[currentNetId] = { + ...(draft[currentNetId] ?? currentNet), + title, + lastUpdated, + }; }), ); }; - // Initialize with a default net if none exists - useEffect(() => { - const sdcpnsInStorage = Object.values(storedSDCPNs); - - if (!sdcpnsInStorage[0]) { - createNewNet({ - petriNetDefinition: { - places: [], - transitions: [], - types: [], - parameters: [], - differentialEquations: [], - }, - title: "New Process", - }); - } else if (!currentNetId) { - setCurrentNetId(sdcpnsInStorage[0].id); - } - }, [currentNetId, createNewNet, setStoredSDCPNs, storedSDCPNs]); - if (!currentNet) { return null; } - const handle = getOrCreateHandle(currentNet); + if (!activeHandle || activeHandle.netId !== currentNet.id) { + return null; + } return (
= ({ const [canScrollUp, setCanScrollUp] = useState(false); const [canScrollDown, setCanScrollDown] = useState(false); - const updateShadows = () => { - const el = scrollRef.current; + const setShadowState = (el: HTMLDivElement | null) => { if (!el) { return; } + setCanScrollUp(el.scrollTop > 0); setCanScrollDown(el.scrollTop + el.clientHeight < el.scrollHeight - 1); }; @@ -299,16 +299,20 @@ const ScrollableContent: React.FC<{ children: React.ReactNode }> = ({ return; } - updateShadows(); + const updateObservedShadows = () => { + setShadowState(el); + }; + + updateObservedShadows(); - const observer = new ResizeObserver(updateShadows); + const observer = new ResizeObserver(updateObservedShadows); observer.observe(el); for (const child of el.children) { observer.observe(child); } return () => observer.disconnect(); - }, [updateShadows]); + }); return (
@@ -321,7 +325,9 @@ const ScrollableContent: React.FC<{ children: React.ReactNode }> = ({
{ + setShadowState(scrollRef.current); + }} > {children}
diff --git a/libs/@hashintel/petrinaut/src/ui/views/Editor/components/BottomBar/use-keyboard-shortcuts.ts b/libs/@hashintel/petrinaut/src/ui/views/Editor/components/BottomBar/use-keyboard-shortcuts.ts index 876735743d2..188e39744ad 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/Editor/components/BottomBar/use-keyboard-shortcuts.ts +++ b/libs/@hashintel/petrinaut/src/ui/views/Editor/components/BottomBar/use-keyboard-shortcuts.ts @@ -198,5 +198,5 @@ export function useKeyboardShortcuts( return () => { window.removeEventListener("keydown", handleKeyDown); }; - }, [handleKeyDown]); + }, []); } diff --git a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/BottomPanel/subviews/simulation-timeline.tsx b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/BottomPanel/subviews/simulation-timeline.tsx index 8fbcdd92837..54da3d730c2 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/BottomPanel/subviews/simulation-timeline.tsx +++ b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/BottomPanel/subviews/simulation-timeline.tsx @@ -335,7 +335,6 @@ const UNTYPED_COLOR = "#94a3b8"; // slate-400 */ function useStreamingData(): { store: StreamingStore; - revision: number; metricError: string | null; } { "use no memo"; // imperative streaming with refs @@ -602,7 +601,7 @@ function useStreamingData(): { createEmptyStore(seriesConfig.series), ); const processedRef = useRef(0); - const [revision, setRevision] = useState(0); + const [, setRevision] = useState(0); // Reset store when the series structure changes (view switch or net edits). useEffect(() => { @@ -673,7 +672,6 @@ function useStreamingData(): { return { store: storeRef.current, - revision, metricError: compiledMetric.error, }; } @@ -683,12 +681,13 @@ function useStreamingData(): { function buildRunData( store: StreamingStore, hiddenPlaces: Set, + length = store.length, ): uPlot.AlignedData { const result: (number | null | undefined)[][] = [store.columns[0]!]; for (let i = 0; i < store.places.length; i++) { if (hiddenPlaces.has(store.places[i]!.placeId)) { // Hidden series: array of nulls (uPlot skips nulls) - result.push(new Array(store.length).fill(null)); + result.push(new Array(length).fill(null)); } else { // Visible series: direct reference to the column array (no copy!) result.push(store.columns[i + 1]!); @@ -700,18 +699,19 @@ function buildRunData( function buildStackedData( store: StreamingStore, hiddenPlaces: Set, + length = store.length, ): uPlot.AlignedData { const visible = store.places .map((p, i) => ({ ...p, colIdx: i + 1 })) .filter((p) => !hiddenPlaces.has(p.placeId)); - const cumulative = new Float64Array(store.length); + const cumulative = new Float64Array(length); const series: number[][] = []; for (const p of visible) { const col = store.columns[p.colIdx]!; - const stacked = new Array(store.length); - for (let i = 0; i < store.length; i++) { + const stacked = new Array(length); + for (let i = 0; i < length; i++) { cumulative[i]! += col[i] ?? 0; stacked[i] = cumulative[i]!; } @@ -1180,7 +1180,6 @@ const UPlotChart: React.FC<{ store: StreamingStore; chartType: TimelineChartType; hiddenPlaces: Set; - revision: number; totalFrames: number; currentFrameIndex: number; className?: string; @@ -1188,7 +1187,6 @@ const UPlotChart: React.FC<{ store, chartType, hiddenPlaces, - revision, totalFrames, currentFrameIndex, className, @@ -1207,6 +1205,7 @@ const UPlotChart: React.FC<{ // Boolean flag for the creation effect — triggers when size first becomes // available (null → non-null) without re-firing on every resize. const hasSize = size != null; + const dataLength = store.length; // Stable identity: always calls the latest closure but never changes reference, // so it doesn't trigger chart recreation when totalFrames changes. @@ -1218,13 +1217,13 @@ const UPlotChart: React.FC<{ // React Compiler ("use no memo"), and buildStackedData allocates O(places × // frames) per call. Without memoization it would recompute on every render // (e.g. every playback frame), and the result would be silently discarded - // since Effect 3 only consumes it when `revision` changes. + // since Effect 3 only consumes it when the store length or series changes. const data = useMemo( () => chartType === "stacked" - ? buildStackedData(store, hiddenPlaces) - : buildRunData(store, hiddenPlaces), - [revision, chartType, hiddenPlaces], + ? buildStackedData(store, hiddenPlaces, dataLength) + : buildRunData(store, hiddenPlaces, dataLength), + [store, dataLength, chartType, hiddenPlaces], ); // -- Effect 1: create/destroy uPlot on structural changes ------------------- @@ -1233,10 +1232,20 @@ const UPlotChart: React.FC<{ // Note: parent (SimulationTimelineContent) gates on store.length === 0, // so this component only mounts once data is available. const wrapper = wrapperRef.current; - if (!wrapper || !size) { + if (!wrapper || !hasSize) { return; } + const initialSize = { + width: wrapper.clientWidth, + height: wrapper.clientHeight, + }; + + const initialData = + chartType === "stacked" + ? buildStackedData(store, hiddenPlaces) + : buildRunData(store, hiddenPlaces); + const tooltip = createTooltip(); const opts = buildUPlotOptions({ @@ -1244,7 +1253,7 @@ const UPlotChart: React.FC<{ storeRef, chartType, hiddenPlaces, - size, + size: initialSize, onScrub, getPlayheadFrame: () => playheadFrameRef.current, tooltip, @@ -1253,7 +1262,7 @@ const UPlotChart: React.FC<{ chartRef.current?.destroy(); // eslint-disable-next-line new-cap -- uPlot's constructor is lowercase by convention - const u = new uPlot(opts, data, wrapper); + const u = new uPlot(opts, initialData, wrapper); chartRef.current = u; // Mount tooltip inside u.over (the cursor overlay div). It positions @@ -1268,10 +1277,18 @@ const UPlotChart: React.FC<{ u.destroy(); chartRef.current = null; }; - // Recreate only when chart type, visible series, or size availability changes. + // Recreate only when chart type, store, visible series, or size availability changes. // onScrub is stable (useStableCallback). Subsequent size changes trigger // setSize (Effect 2), not recreation. - }, [chartType, hiddenPlaces, store.places.length, hasSize]); + }, [ + chartType, + hiddenPlaces, + store, + store.places.length, + storeRef, + hasSize, + onScrub, + ]); // -- Effect 2: sync container size to existing chart ------------------------ @@ -1285,7 +1302,7 @@ const UPlotChart: React.FC<{ useEffect(() => { chartRef.current?.setData(data); - }, [revision]); + }, [data]); // -- Effect 4: playhead redraw --------------------------------------------- @@ -1346,7 +1363,7 @@ const SimulationTimelineContent: React.FC = () => { const { timelineChartType: chartType } = use(EditorContext); const { totalFrames } = use(SimulationContext); const { currentFrameIndex } = use(PlaybackContext); - const { store, revision, metricError } = useStreamingData(); + const { store, metricError } = useStreamingData(); const [hiddenPlaces, setHiddenPlaces] = useState>(new Set()); @@ -1387,7 +1404,6 @@ const SimulationTimelineContent: React.FC = () => { store={store} chartType={chartType} hiddenPlaces={hiddenPlaces} - revision={revision} totalFrames={totalFrames} currentFrameIndex={currentFrameIndex} /> diff --git a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/LeftSideBar/subviews/filterable-list-sub-view.tsx b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/LeftSideBar/subviews/filterable-list-sub-view.tsx index 8f0fdbb74a2..ccde5e0dd9d 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/LeftSideBar/subviews/filterable-list-sub-view.tsx +++ b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/LeftSideBar/subviews/filterable-list-sub-view.tsx @@ -551,6 +551,7 @@ const FilterableListContent = ({ } }} role="option" + tabIndex={-1} aria-selected={selected} className={listItemRowStyle({ selectable: true, diff --git a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/PropertiesPanel/place-properties/subviews/place-initial-state/initial-state-editor.tsx b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/PropertiesPanel/place-properties/subviews/place-initial-state/initial-state-editor.tsx index 1b6eb4ca735..d75d8061733 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/PropertiesPanel/place-properties/subviews/place-initial-state/initial-state-editor.tsx +++ b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/PropertiesPanel/place-properties/subviews/place-initial-state/initial-state-editor.tsx @@ -92,7 +92,7 @@ export const InitialStateEditor: React.FC = ({ setInitialMarking(placeId, { values, count }); }; - }, [hasSimulation, columns.length, setInitialMarking, placeId]); + }, [hasSimulation, readOnly, columns.length, setInitialMarking, placeId]); return ; }; diff --git a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/metric-form.tsx b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/metric-form.tsx index c183773a0df..56b2aacf366 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/metric-form.tsx +++ b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/metric-form.tsx @@ -154,16 +154,16 @@ export function useMetricLspSession(code: string): string { const [sessionId] = useState(() => crypto.randomUUID()); const initializedRef = useRef(false); - const sessionData = { sessionId, code }; - useEffect(() => { + const sessionData = { sessionId, code }; + if (!initializedRef.current) { initializeMetricSession(sessionData); initializedRef.current = true; } else { updateMetricSession(sessionData); } - }, [sessionData, initializeMetricSession, updateMetricSession]); + }, [code, initializeMetricSession, sessionId, updateMetricSession]); useEffect(() => { return () => { diff --git a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/scenario-form.tsx b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/scenario-form.tsx index db917281edb..63588390658 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/scenario-form.tsx +++ b/libs/@hashintel/petrinaut/src/ui/views/Editor/panels/SimulateView/scenario-form.tsx @@ -460,39 +460,50 @@ function useScenarioLspSession({ const [sessionId] = useState(() => crypto.randomUUID()); const initializedRef = useRef(false); - // Build session data for all parameters and places that use code editors. - // Computed during render — React Compiler handles memoization. - const allOverrides: Record = {}; - for (const param of parameters) { - allOverrides[param.id] = parameterOverrides[param.id] ?? ""; - } + useEffect(() => { + const allOverrides: Record = {}; + for (const param of parameters) { + allOverrides[param.id] = parameterOverrides[param.id] ?? ""; + } - // Include entries for places that use code editors (not spreadsheets) - const allInitialState: Record = {}; - for (const place of places) { - const placeType = place.colorId ? typesById.get(place.colorId) : undefined; - if (!placeType || placeType.elements.length === 0) { - allInitialState[place.id] = initialTokenCounts[place.id] ?? ""; + const allInitialState: Record = {}; + for (const place of places) { + const placeType = place.colorId + ? typesById.get(place.colorId) + : undefined; + if (!placeType || placeType.elements.length === 0) { + allInitialState[place.id] = initialTokenCounts[place.id] ?? ""; + } } - } - const sessionData = { - sessionId, - scenarioParameters: scenarioParams.map(({ _key: _, ...rest }) => rest), - parameterOverrides: allOverrides, - initialState: allInitialState, - initialStateCode, - initialStateAsCode, - }; + const sessionData = { + sessionId, + scenarioParameters: scenarioParams.map(({ _key: _, ...rest }) => rest), + parameterOverrides: allOverrides, + initialState: allInitialState, + initialStateCode, + initialStateAsCode, + }; - useEffect(() => { if (!initializedRef.current) { initializeScenarioSession(sessionData); initializedRef.current = true; } else { updateScenarioSession(sessionData); } - }, [sessionData, initializeScenarioSession, updateScenarioSession]); + }, [ + initialStateAsCode, + initialStateCode, + initialTokenCounts, + initializeScenarioSession, + parameterOverrides, + parameters, + places, + scenarioParams, + sessionId, + typesById, + updateScenarioSession, + ]); useEffect(() => { return () => { diff --git a/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/use-recenter-on-panel-open.ts b/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/use-recenter-on-panel-open.ts index ad49b7fd179..e5d6d6435bb 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/use-recenter-on-panel-open.ts +++ b/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/use-recenter-on-panel-open.ts @@ -97,6 +97,7 @@ export function useRecenterOnPanelOpen( .catch(() => {}); } }, [ + canvasRef, isBottomPanelOpen, bottomPanelHeight, leftSidebarWidth, diff --git a/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/util/use-debounce-callback.tsx b/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/util/use-debounce-callback.tsx index 17a15ef2920..6ddd01a7961 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/util/use-debounce-callback.tsx +++ b/libs/@hashintel/petrinaut/src/ui/views/SDCPN/hooks/util/use-debounce-callback.tsx @@ -14,7 +14,7 @@ export function useDebounceCallback< return () => { debounced.flush(); }; - }, [func, delay]); + }, [debounced]); return debounced; } diff --git a/libs/@hashintel/petrinaut/src/ui/views/SDCPN/sdcpn-view.tsx b/libs/@hashintel/petrinaut/src/ui/views/SDCPN/sdcpn-view.tsx index 7efd1a5da56..032de322226 100644 --- a/libs/@hashintel/petrinaut/src/ui/views/SDCPN/sdcpn-view.tsx +++ b/libs/@hashintel/petrinaut/src/ui/views/SDCPN/sdcpn-view.tsx @@ -5,7 +5,14 @@ import { useResizeObserver } from "./hooks/util/use-resize-observer"; import { useDebounceCallback } from "./hooks/util/use-debounce-callback"; import type { Connection } from "@xyflow/react"; import { Background, ReactFlow, SelectionMode } from "@xyflow/react"; -import { use, useEffect, useMemo, useRef, useState } from "react"; +import { + use, + useEffect, + useEffectEvent, + useMemo, + useRef, + useState, +} from "react"; import { v4 as generateUuid } from "uuid"; import { SNAP_GRID_SIZE } from "../../constants/ui"; @@ -110,12 +117,19 @@ export const SDCPNView: React.FC<{ useRecenterOnPanelOpen(canvasContainer, reactFlowInstance, nodes); // Center viewport on SDCPN load + const fitLoadedNetIntoView = useEffectEvent( + (instance: PetrinautReactFlowInstance) => { + void instance.fitView({ + padding: ZOOM_PADDING, + minZoom, + maxZoom: 1.1, + }); + }, + ); + useEffect(() => { - void reactFlowInstance?.fitView({ - padding: ZOOM_PADDING, - minZoom: minZoom, - maxZoom: 1.1, - }); + if (!reactFlowInstance) return; + fitLoadedNetIntoView(reactFlowInstance); }, [reactFlowInstance, petriNetId]); // This sets the min zoom (ie the max you can zoom out to) to be slightly larger than the total size of the current net. diff --git a/libs/@hashintel/refractive/.oxlintrc.json b/libs/@hashintel/refractive/.oxlintrc.json index 1f31575fedf..8e1c768b058 100644 --- a/libs/@hashintel/refractive/.oxlintrc.json +++ b/libs/@hashintel/refractive/.oxlintrc.json @@ -1,5 +1,6 @@ { "$schema": "./node_modules/oxlint/configuration_schema.json", + "extends": ["../../../.config/oxlint/react-compiler.json"], "plugins": ["import", "react", "jsx-a11y", "unicorn", "typescript"], "categories": { "correctness": "error" @@ -94,9 +95,6 @@ { "button": true, "submit": true, "reset": false } ], - "react-hooks/rules-of-hooks": "error", - "react-hooks/exhaustive-deps": "off", - "jsx-a11y/prefer-tag-over-role": "off", "jsx-a11y/aria-role": ["error", { "ignoreNonDOM": false }], "jsx-a11y/no-noninteractive-tabindex": [ diff --git a/libs/@hashintel/refractive/package.json b/libs/@hashintel/refractive/package.json index d05e1dbfa60..cdfc715858d 100644 --- a/libs/@hashintel/refractive/package.json +++ b/libs/@hashintel/refractive/package.json @@ -35,14 +35,14 @@ "@storybook/react-vite": "10.2.19", "@types/react": "19.2.7", "@types/react-dom": "19.2.3", - "@typescript/native-preview": "7.0.0-dev.20260315.1", + "@typescript/native-preview": "7.0.0-dev.20260511.1", "@vitejs/plugin-react": "6.0.1", "babel-plugin-react-compiler": "1.0.0", - "oxlint": "1.55.0", - "oxlint-tsgolint": "0.17.0", - "rolldown-plugin-dts": "0.22.5", + "oxlint": "1.63.0", + "oxlint-tsgolint": "0.22.1", + "rolldown-plugin-dts": "0.25.0", "storybook": "10.2.19", - "vite": "8.0.10" + "vite": "8.0.12" }, "peerDependencies": { "react": "^19.0.0", diff --git a/yarn.lock b/yarn.lock index cbc49dcc9ad..40b2b771b63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -787,16 +787,16 @@ __metadata: "@sentry/react": "npm:10.22.0" "@types/react": "npm:19.2.7" "@types/react-dom": "npm:19.2.3" - "@typescript/native-preview": "npm:7.0.0-dev.20260315.1" + "@typescript/native-preview": "npm:7.0.0-dev.20260511.1" "@vitejs/plugin-react": "npm:6.0.1" babel-plugin-react-compiler: "npm:1.0.0" immer: "npm:10.1.3" - oxlint: "npm:1.55.0" - oxlint-tsgolint: "npm:0.17.0" + oxlint: "npm:1.63.0" + oxlint-tsgolint: "npm:0.22.1" react: "npm:19.2.3" react-dom: "npm:19.2.3" react-icons: "npm:5.5.0" - vite: "npm:8.0.10" + vite: "npm:8.0.12" languageName: unknown linkType: soft @@ -3353,17 +3353,17 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:8.0.0-rc.2": - version: 8.0.0-rc.2 - resolution: "@babel/generator@npm:8.0.0-rc.2" +"@babel/generator@npm:8.0.0-rc.4": + version: 8.0.0-rc.4 + resolution: "@babel/generator@npm:8.0.0-rc.4" dependencies: - "@babel/parser": "npm:^8.0.0-rc.2" - "@babel/types": "npm:^8.0.0-rc.2" + "@babel/parser": "npm:^8.0.0-rc.4" + "@babel/types": "npm:^8.0.0-rc.4" "@jridgewell/gen-mapping": "npm:^0.3.12" "@jridgewell/trace-mapping": "npm:^0.3.28" "@types/jsesc": "npm:^2.5.0" jsesc: "npm:^3.0.2" - checksum: 10c0/ffaf6d16c0b60968f25823d006177e5b0021a2fb2d463f9b8ae70b34a48fe530f1395dce6301989424024fffcdd2251f7357cf95dfebd96d3c637daddc5eb1aa + checksum: 10c0/5315aa22671658646bf1b5e2ac827b65a83964f19f5d8ddb851f5daac86c9dee7b8b8119ca7fd6bc682bfbae07dfb37ca95f521193431ed2702ab3665d319a2e languageName: node linkType: hard @@ -3546,17 +3546,17 @@ __metadata: languageName: node linkType: hard -"@babel/helper-string-parser@npm:^8.0.0-rc.2": - version: 8.0.0-rc.2 - resolution: "@babel/helper-string-parser@npm:8.0.0-rc.2" - checksum: 10c0/74b5107ed84c99948651a52ebd880d91f0c307fcf0273b75c79552b2c5469c27573640a5187c87df636e96c247a43c57be70bdac1ce06c29a30aefd499952121 +"@babel/helper-string-parser@npm:^8.0.0-rc.4": + version: 8.0.0-rc.4 + resolution: "@babel/helper-string-parser@npm:8.0.0-rc.4" + checksum: 10c0/8e9950d36b8cd5fb5d03c56cd2cce91cf98efa093110d519e160a948a9e77eade71f292204d7395212c5e763af23b2b6687550fbcaa281a1efd3494a46bd99ca languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:8.0.0-rc.2, @babel/helper-validator-identifier@npm:^8.0.0-rc.2": - version: 8.0.0-rc.2 - resolution: "@babel/helper-validator-identifier@npm:8.0.0-rc.2" - checksum: 10c0/9a1687e18bfb50728ae38b1dac889c1a3bc2c53bdf4c1632533b1b0672cc272c087507a2a7c60c3af20d58bd645e169dd685f892d2a62d580e759e26d67e8788 +"@babel/helper-validator-identifier@npm:8.0.0-rc.4, @babel/helper-validator-identifier@npm:^8.0.0-rc.4": + version: 8.0.0-rc.4 + resolution: "@babel/helper-validator-identifier@npm:8.0.0-rc.4" + checksum: 10c0/dc523bdc206cff0b2a4db97459e7cf31d315d60fa7dff1fdcc8101568dc9e6a929c2126eb96a078b1e8eb26b6b4978526bbf8b5f50d91d809c77956a3b84064f languageName: node linkType: hard @@ -3595,14 +3595,14 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:8.0.0-rc.2, @babel/parser@npm:^8.0.0-beta.4, @babel/parser@npm:^8.0.0-rc.2": - version: 8.0.0-rc.2 - resolution: "@babel/parser@npm:8.0.0-rc.2" +"@babel/parser@npm:8.0.0-rc.4, @babel/parser@npm:^8.0.0-beta.4, @babel/parser@npm:^8.0.0-rc.4": + version: 8.0.0-rc.4 + resolution: "@babel/parser@npm:8.0.0-rc.4" dependencies: - "@babel/types": "npm:^8.0.0-rc.2" + "@babel/types": "npm:^8.0.0-rc.4" bin: parser: ./bin/babel-parser.js - checksum: 10c0/704ddbc1fce338e5b8df6327c1a7eeb1a554d136f89738135a8be5f5e2e854bd3f05eb3946b9d7b6814491bcd677175496076657696674eaecbed0e582749b2e + checksum: 10c0/3f3c6c7b62e2c8256237f39d78b7449c316797390a3ac8af1698995f1c3a7375082033d50cbfc18109b07cb8ef9c4e11e8bba394ec13165ba92a22622244bb1f languageName: node linkType: hard @@ -4819,16 +4819,6 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:8.0.0-rc.2, @babel/types@npm:^8.0.0-rc.2": - version: 8.0.0-rc.2 - resolution: "@babel/types@npm:8.0.0-rc.2" - dependencies: - "@babel/helper-string-parser": "npm:^8.0.0-rc.2" - "@babel/helper-validator-identifier": "npm:^8.0.0-rc.2" - checksum: 10c0/8b372115aa4ee3f55541e19887683655e32b78b64579d2402119920af3512594a2be820e05db4a3100cb38db3da3a7bdcc1beb7d031a4ab0129f28d858f129bd - languageName: node - linkType: hard - "@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.13, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.3, @babel/types@npm:^7.22.5, @babel/types@npm:^7.25.4, @babel/types@npm:^7.25.6, @babel/types@npm:^7.26.0, @babel/types@npm:^7.26.10, @babel/types@npm:^7.26.3, @babel/types@npm:^7.27.1, @babel/types@npm:^7.27.3, @babel/types@npm:^7.28.2, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5, @babel/types@npm:^7.28.6, @babel/types@npm:^7.29.0, @babel/types@npm:^7.4.4": version: 7.29.0 resolution: "@babel/types@npm:7.29.0" @@ -4839,6 +4829,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^8.0.0-rc.4": + version: 8.0.0-rc.4 + resolution: "@babel/types@npm:8.0.0-rc.4" + dependencies: + "@babel/helper-string-parser": "npm:^8.0.0-rc.4" + "@babel/helper-validator-identifier": "npm:^8.0.0-rc.4" + checksum: 10c0/fd6ba6dcebe79c3f79273da371ec7a5f479a310342f046126f54839b951b00816e1cad8ccefd326ef7cbd62b96ca49f7805c4351904b83e7388f122ff0bb7512 + languageName: node + linkType: hard + "@bcherny/json-schema-ref-parser@npm:10.0.5-fork": version: 10.0.5-fork resolution: "@bcherny/json-schema-ref-parser@npm:10.0.5-fork" @@ -7703,7 +7703,7 @@ __metadata: "@types/lodash-es": "npm:4.17.12" "@types/react": "npm:19.2.7" "@types/react-dom": "npm:19.2.3" - "@typescript/native-preview": "npm:7.0.0-dev.20260315.1" + "@typescript/native-preview": "npm:7.0.0-dev.20260511.1" "@vitejs/plugin-react": "npm:6.0.1" "@xyflow/react": "npm:12.10.1" babel-plugin-react-compiler: "npm:1.0.0" @@ -7713,19 +7713,19 @@ __metadata: jsdom: "npm:24.1.3" lodash-es: "npm:4.18.1" monaco-editor: "npm:0.55.1" - oxlint: "npm:1.55.0" - oxlint-tsgolint: "npm:0.17.0" + oxlint: "npm:1.63.0" + oxlint-tsgolint: "npm:0.22.1" react: "npm:19.2.3" react-dom: "npm:19.2.3" react-icons: "npm:5.5.0" react-resizable-panels: "npm:4.6.5" - rolldown: "npm:1.0.0-rc.9" - rolldown-plugin-dts: "npm:0.22.5" - storybook: "npm:10.2.19" + rolldown: "npm:1.0.0" + rolldown-plugin-dts: "npm:0.25.0" + storybook: "npm:10.3.6" typescript: "npm:5.9.3" uplot: "npm:1.6.32" uuid: "npm:14.0.0" - vite: "npm:8.0.10" + vite: "npm:8.0.12" vitest: "npm:4.1.5" vscode-languageserver-types: "npm:3.17.5" web-worker: "npm:1.4.1" @@ -7775,14 +7775,14 @@ __metadata: "@storybook/react-vite": "npm:10.2.19" "@types/react": "npm:19.2.7" "@types/react-dom": "npm:19.2.3" - "@typescript/native-preview": "npm:7.0.0-dev.20260315.1" + "@typescript/native-preview": "npm:7.0.0-dev.20260511.1" "@vitejs/plugin-react": "npm:6.0.1" babel-plugin-react-compiler: "npm:1.0.0" - oxlint: "npm:1.55.0" - oxlint-tsgolint: "npm:0.17.0" - rolldown-plugin-dts: "npm:0.22.5" + oxlint: "npm:1.63.0" + oxlint-tsgolint: "npm:0.22.1" + rolldown-plugin-dts: "npm:0.25.0" storybook: "npm:10.2.19" - vite: "npm:8.0.10" + vite: "npm:8.0.12" peerDependencies: react: ^19.0.0 react-dom: ^19.0.0 @@ -10029,7 +10029,7 @@ __metadata: languageName: node linkType: hard -"@napi-rs/wasm-runtime@npm:^1.1.1, @napi-rs/wasm-runtime@npm:^1.1.4": +"@napi-rs/wasm-runtime@npm:^1.1.4": version: 1.1.4 resolution: "@napi-rs/wasm-runtime@npm:1.1.4" dependencies: @@ -12156,191 +12156,184 @@ __metadata: languageName: node linkType: hard -"@oxc-project/types@npm:=0.115.0": - version: 0.115.0 - resolution: "@oxc-project/types@npm:0.115.0" - checksum: 10c0/47fc31eb3fb3fcf4119955339f92ba2003f9b445834c1a28ed945cd6b9cd833c7ba66fca88aa5277336c2c55df300a593bc67970e544691eceaa486ebe12cb58 - languageName: node - linkType: hard - -"@oxc-project/types@npm:=0.127.0": - version: 0.127.0 - resolution: "@oxc-project/types@npm:0.127.0" - checksum: 10c0/52c0947ac64a9ca119fe971f947e784a35ecd14a072fa3f542a58a5f6c42010b53f2bf92731e39b9899b83c990a9517bbd29d1e5a5b7b489e52616685c6a9278 +"@oxc-project/types@npm:=0.129.0": + version: 0.129.0 + resolution: "@oxc-project/types@npm:0.129.0" + checksum: 10c0/3714ba117af387992c2e5e779eedc1ccaf5a92c4d5c9b014dcc65d5a53012f8daae7aeb28930fef9eae7516bcdc500a0e689480eb1cb44a2e02830201fce7f1a languageName: node linkType: hard -"@oxlint-tsgolint/darwin-arm64@npm:0.17.0": - version: 0.17.0 - resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.17.0" +"@oxlint-tsgolint/darwin-arm64@npm:0.22.1": + version: 0.22.1 + resolution: "@oxlint-tsgolint/darwin-arm64@npm:0.22.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxlint-tsgolint/darwin-x64@npm:0.17.0": - version: 0.17.0 - resolution: "@oxlint-tsgolint/darwin-x64@npm:0.17.0" +"@oxlint-tsgolint/darwin-x64@npm:0.22.1": + version: 0.22.1 + resolution: "@oxlint-tsgolint/darwin-x64@npm:0.22.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxlint-tsgolint/linux-arm64@npm:0.17.0": - version: 0.17.0 - resolution: "@oxlint-tsgolint/linux-arm64@npm:0.17.0" +"@oxlint-tsgolint/linux-arm64@npm:0.22.1": + version: 0.22.1 + resolution: "@oxlint-tsgolint/linux-arm64@npm:0.22.1" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@oxlint-tsgolint/linux-x64@npm:0.17.0": - version: 0.17.0 - resolution: "@oxlint-tsgolint/linux-x64@npm:0.17.0" +"@oxlint-tsgolint/linux-x64@npm:0.22.1": + version: 0.22.1 + resolution: "@oxlint-tsgolint/linux-x64@npm:0.22.1" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@oxlint-tsgolint/win32-arm64@npm:0.17.0": - version: 0.17.0 - resolution: "@oxlint-tsgolint/win32-arm64@npm:0.17.0" +"@oxlint-tsgolint/win32-arm64@npm:0.22.1": + version: 0.22.1 + resolution: "@oxlint-tsgolint/win32-arm64@npm:0.22.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxlint-tsgolint/win32-x64@npm:0.17.0": - version: 0.17.0 - resolution: "@oxlint-tsgolint/win32-x64@npm:0.17.0" +"@oxlint-tsgolint/win32-x64@npm:0.22.1": + version: 0.22.1 + resolution: "@oxlint-tsgolint/win32-x64@npm:0.22.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@oxlint/binding-android-arm-eabi@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-android-arm-eabi@npm:1.55.0" +"@oxlint/binding-android-arm-eabi@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-android-arm-eabi@npm:1.63.0" conditions: os=android & cpu=arm languageName: node linkType: hard -"@oxlint/binding-android-arm64@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-android-arm64@npm:1.55.0" +"@oxlint/binding-android-arm64@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-android-arm64@npm:1.63.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-darwin-arm64@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-darwin-arm64@npm:1.55.0" +"@oxlint/binding-darwin-arm64@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-darwin-arm64@npm:1.63.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-darwin-x64@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-darwin-x64@npm:1.55.0" +"@oxlint/binding-darwin-x64@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-darwin-x64@npm:1.63.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@oxlint/binding-freebsd-x64@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-freebsd-x64@npm:1.55.0" +"@oxlint/binding-freebsd-x64@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-freebsd-x64@npm:1.63.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@oxlint/binding-linux-arm-gnueabihf@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.55.0" +"@oxlint/binding-linux-arm-gnueabihf@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-arm-gnueabihf@npm:1.63.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxlint/binding-linux-arm-musleabihf@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.55.0" +"@oxlint/binding-linux-arm-musleabihf@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-arm-musleabihf@npm:1.63.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@oxlint/binding-linux-arm64-gnu@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.55.0" +"@oxlint/binding-linux-arm64-gnu@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-arm64-gnu@npm:1.63.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-arm64-musl@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-arm64-musl@npm:1.55.0" +"@oxlint/binding-linux-arm64-musl@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-arm64-musl@npm:1.63.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@oxlint/binding-linux-ppc64-gnu@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.55.0" +"@oxlint/binding-linux-ppc64-gnu@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-ppc64-gnu@npm:1.63.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-riscv64-gnu@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.55.0" +"@oxlint/binding-linux-riscv64-gnu@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-riscv64-gnu@npm:1.63.0" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-riscv64-musl@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.55.0" +"@oxlint/binding-linux-riscv64-musl@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-riscv64-musl@npm:1.63.0" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@oxlint/binding-linux-s390x-gnu@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.55.0" +"@oxlint/binding-linux-s390x-gnu@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-s390x-gnu@npm:1.63.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-x64-gnu@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-x64-gnu@npm:1.55.0" +"@oxlint/binding-linux-x64-gnu@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-x64-gnu@npm:1.63.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@oxlint/binding-linux-x64-musl@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-linux-x64-musl@npm:1.55.0" +"@oxlint/binding-linux-x64-musl@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-linux-x64-musl@npm:1.63.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@oxlint/binding-openharmony-arm64@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-openharmony-arm64@npm:1.55.0" +"@oxlint/binding-openharmony-arm64@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-openharmony-arm64@npm:1.63.0" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-win32-arm64-msvc@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.55.0" +"@oxlint/binding-win32-arm64-msvc@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-win32-arm64-msvc@npm:1.63.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@oxlint/binding-win32-ia32-msvc@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.55.0" +"@oxlint/binding-win32-ia32-msvc@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-win32-ia32-msvc@npm:1.63.0" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@oxlint/binding-win32-x64-msvc@npm:1.55.0": - version: 1.55.0 - resolution: "@oxlint/binding-win32-x64-msvc@npm:1.55.0" +"@oxlint/binding-win32-x64-msvc@npm:1.63.0": + version: 1.63.0 + resolution: "@oxlint/binding-win32-x64-msvc@npm:1.63.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -14410,177 +14403,93 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-android-arm64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.17" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-android-arm64@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-android-arm64@npm:1.0.0-rc.9" +"@rolldown/binding-android-arm64@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-android-arm64@npm:1.0.0" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.17" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-darwin-arm64@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0-rc.9" +"@rolldown/binding-darwin-arm64@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-darwin-arm64@npm:1.0.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-darwin-x64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.17" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rolldown/binding-darwin-x64@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-darwin-x64@npm:1.0.0-rc.9" +"@rolldown/binding-darwin-x64@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-darwin-x64@npm:1.0.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.17" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rolldown/binding-freebsd-x64@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0-rc.9" +"@rolldown/binding-freebsd-x64@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-freebsd-x64@npm:1.0.0" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.17" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0-rc.9" +"@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-linux-arm-gnueabihf@npm:1.0.0" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.17" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0-rc.9" +"@rolldown/binding-linux-arm64-gnu@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-linux-arm64-gnu@npm:1.0.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.17" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0-rc.9" +"@rolldown/binding-linux-arm64-musl@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-linux-arm64-musl@npm:1.0.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.17" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0-rc.9" +"@rolldown/binding-linux-ppc64-gnu@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-linux-ppc64-gnu@npm:1.0.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.17" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0-rc.9" +"@rolldown/binding-linux-s390x-gnu@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-linux-s390x-gnu@npm:1.0.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.17" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0-rc.9" +"@rolldown/binding-linux-x64-gnu@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-linux-x64-gnu@npm:1.0.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.17" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0-rc.9" +"@rolldown/binding-linux-x64-musl@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-linux-x64-musl@npm:1.0.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.17" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0-rc.9" +"@rolldown/binding-openharmony-arm64@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-openharmony-arm64@npm:1.0.0" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.17" +"@rolldown/binding-wasm32-wasi@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0" dependencies: "@emnapi/core": "npm:1.10.0" "@emnapi/runtime": "npm:1.10.0" @@ -14589,39 +14498,16 @@ __metadata: languageName: node linkType: hard -"@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-wasm32-wasi@npm:1.0.0-rc.9" - dependencies: - "@napi-rs/wasm-runtime": "npm:^1.1.1" - conditions: cpu=wasm32 - languageName: node - linkType: hard - -"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.17" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0-rc.9" +"@rolldown/binding-win32-arm64-msvc@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-win32-arm64-msvc@npm:1.0.0" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.17" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0-rc.9" +"@rolldown/binding-win32-x64-msvc@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/binding-win32-x64-msvc@npm:1.0.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -14648,6 +14534,13 @@ __metadata: languageName: node linkType: hard +"@rolldown/pluginutils@npm:1.0.0": + version: 1.0.0 + resolution: "@rolldown/pluginutils@npm:1.0.0" + checksum: 10c0/44aba363862f6f4defb60a6045fe236769a2307fbe8233b21ef91b728c31033e1167b5209ba7ac7c2f3b7d7738776bfd71913b42876afafab9ac406d03c6c178 + languageName: node + linkType: hard + "@rolldown/pluginutils@npm:1.0.0-beta.27": version: 1.0.0-beta.27 resolution: "@rolldown/pluginutils@npm:1.0.0-beta.27" @@ -14662,13 +14555,6 @@ __metadata: languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "@rolldown/pluginutils@npm:1.0.0-rc.17" - checksum: 10c0/5e840b20cc531910c093c1ca36e550952cf4936465a50d89f0a98fc9d0dfd7d319d06a10a5f4376209d89e9bf4d60af6cc8363ebf0dcc5e60842f7fef438b2f0 - languageName: node - linkType: hard - "@rolldown/pluginutils@npm:1.0.0-rc.7": version: 1.0.0-rc.7 resolution: "@rolldown/pluginutils@npm:1.0.0-rc.7" @@ -14676,13 +14562,6 @@ __metadata: languageName: node linkType: hard -"@rolldown/pluginutils@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "@rolldown/pluginutils@npm:1.0.0-rc.9" - checksum: 10c0/fca488fb96b134ccf95b42632b6112b4abb8b3a9688f166fbd627410def2538ee201953717d234ddecbff62dfe4edc4e72c657b01a9d0750134608d767eea5fd - languageName: node - linkType: hard - "@rollup/plugin-commonjs@npm:28.0.1": version: 28.0.1 resolution: "@rollup/plugin-commonjs@npm:28.0.1" @@ -18084,9 +17963,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:^6.6.3": - version: 6.8.0 - resolution: "@testing-library/jest-dom@npm:6.8.0" +"@testing-library/jest-dom@npm:^6.6.3, @testing-library/jest-dom@npm:^6.9.1": + version: 6.9.1 + resolution: "@testing-library/jest-dom@npm:6.9.1" dependencies: "@adobe/css-tools": "npm:^4.4.0" aria-query: "npm:^5.0.0" @@ -18094,7 +17973,7 @@ __metadata: dom-accessibility-api: "npm:^0.6.3" picocolors: "npm:^1.1.1" redent: "npm:^3.0.0" - checksum: 10c0/4c5b8b433e0339e0399b940ae901a99ae00f1d5ffb7cbb295460b2c44aaad0bc7befcca7b06ceed7aa68a524970077468046c9fe52836ee26f45b807c80a7ff1 + checksum: 10c0/4291ebd2f0f38d14cefac142c56c337941775a5807e2a3d6f1a14c2fbd6be76a18e498ed189e95bedc97d9e8cf1738049bc76c85b5bc5e23fae7c9e10f7b3a12 languageName: node linkType: hard @@ -20278,66 +20157,66 @@ __metadata: languageName: node linkType: hard -"@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview-darwin-arm64@npm:7.0.0-dev.20260511.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview-darwin-x64@npm:7.0.0-dev.20260511.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview-linux-arm64@npm:7.0.0-dev.20260511.1" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview-linux-arm@npm:7.0.0-dev.20260511.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview-linux-x64@npm:7.0.0-dev.20260511.1" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview-win32-arm64@npm:7.0.0-dev.20260511.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview-win32-x64@npm:7.0.0-dev.20260511.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@typescript/native-preview@npm:7.0.0-dev.20260315.1": - version: 7.0.0-dev.20260315.1 - resolution: "@typescript/native-preview@npm:7.0.0-dev.20260315.1" +"@typescript/native-preview@npm:7.0.0-dev.20260511.1": + version: 7.0.0-dev.20260511.1 + resolution: "@typescript/native-preview@npm:7.0.0-dev.20260511.1" dependencies: - "@typescript/native-preview-darwin-arm64": "npm:7.0.0-dev.20260315.1" - "@typescript/native-preview-darwin-x64": "npm:7.0.0-dev.20260315.1" - "@typescript/native-preview-linux-arm": "npm:7.0.0-dev.20260315.1" - "@typescript/native-preview-linux-arm64": "npm:7.0.0-dev.20260315.1" - "@typescript/native-preview-linux-x64": "npm:7.0.0-dev.20260315.1" - "@typescript/native-preview-win32-arm64": "npm:7.0.0-dev.20260315.1" - "@typescript/native-preview-win32-x64": "npm:7.0.0-dev.20260315.1" + "@typescript/native-preview-darwin-arm64": "npm:7.0.0-dev.20260511.1" + "@typescript/native-preview-darwin-x64": "npm:7.0.0-dev.20260511.1" + "@typescript/native-preview-linux-arm": "npm:7.0.0-dev.20260511.1" + "@typescript/native-preview-linux-arm64": "npm:7.0.0-dev.20260511.1" + "@typescript/native-preview-linux-x64": "npm:7.0.0-dev.20260511.1" + "@typescript/native-preview-win32-arm64": "npm:7.0.0-dev.20260511.1" + "@typescript/native-preview-win32-x64": "npm:7.0.0-dev.20260511.1" dependenciesMeta: "@typescript/native-preview-darwin-arm64": optional: true @@ -20355,7 +20234,7 @@ __metadata: optional: true bin: tsgo: bin/tsgo.js - checksum: 10c0/d017002bd72e0993d007f661fee11ccdf56a2067edd5f9f81ed4497e652d4e6aada5e6d9cbb480bd3277226fd385355f0269f2c03093cd11e956768a59cd5318 + checksum: 10c0/b7a770653b042a1b18930d3d7e2a920ad88f9139ad1273666bc8139e39686d0e2f84700ce9be4577dc32d840892eec74e5b13b49265ddc9761542ccaaef181ae languageName: node linkType: hard @@ -21165,6 +21044,13 @@ __metadata: languageName: node linkType: hard +"@webcontainer/env@npm:^1.1.1": + version: 1.1.1 + resolution: "@webcontainer/env@npm:1.1.1" + checksum: 10c0/bc64114ffa7ee92f4985cc2bdd5e27f6f31d892b9aa5cde68eaf93df02d13ee6edf13faeebdd701464183b6f8f9c47c14975958cdd6fc20e7356ad32f6ee39e7 + languageName: node + linkType: hard + "@webpack-cli/configtest@npm:^3.0.1": version: 3.0.1 resolution: "@webpack-cli/configtest@npm:3.0.1" @@ -26693,15 +26579,15 @@ __metadata: languageName: node linkType: hard -"dts-resolver@npm:^2.1.3": - version: 2.1.3 - resolution: "dts-resolver@npm:2.1.3" +"dts-resolver@npm:^3.0.0": + version: 3.0.0 + resolution: "dts-resolver@npm:3.0.0" peerDependencies: oxc-resolver: ">=11.0.0" peerDependenciesMeta: oxc-resolver: optional: true - checksum: 10c0/bf589ba9bfacdb23ff9c075948175f5a21ae0bccb2ca36f8315bff2729358902256ee7aca972f5b259641f08a4b5973034e082a730113d5af76e64062e45fe3a + checksum: 10c0/ae52c4e09b43def702b02d7edbfa04798522907f22879809f8890e5c61fc762403f46a1c415c2d1a6440b01960bbaf98c72def1771b0962d3b15fec40983a4ab languageName: node linkType: hard @@ -30024,7 +29910,16 @@ __metadata: languageName: node linkType: hard -"get-tsconfig@npm:^4.10.0, get-tsconfig@npm:^4.10.1, get-tsconfig@npm:^4.13.6, get-tsconfig@npm:^4.7.5": +"get-tsconfig@npm:5.0.0-beta.5": + version: 5.0.0-beta.5 + resolution: "get-tsconfig@npm:5.0.0-beta.5" + dependencies: + resolve-pkg-maps: "npm:^1.0.0" + checksum: 10c0/fd96e2a7d872703d8c5d7ed5d5d884a4e33f6cd9f012aa68a3c7aae700b84b502e41c06641a3d0667b1e8c8f7d497857dd6d3bba3987d2e5f59d95e49fb6e3b9 + languageName: node + linkType: hard + +"get-tsconfig@npm:^4.10.0, get-tsconfig@npm:^4.10.1, get-tsconfig@npm:^4.7.5": version: 4.13.6 resolution: "get-tsconfig@npm:4.13.6" dependencies: @@ -37663,16 +37558,16 @@ __metadata: languageName: node linkType: hard -"oxlint-tsgolint@npm:0.17.0": - version: 0.17.0 - resolution: "oxlint-tsgolint@npm:0.17.0" - dependencies: - "@oxlint-tsgolint/darwin-arm64": "npm:0.17.0" - "@oxlint-tsgolint/darwin-x64": "npm:0.17.0" - "@oxlint-tsgolint/linux-arm64": "npm:0.17.0" - "@oxlint-tsgolint/linux-x64": "npm:0.17.0" - "@oxlint-tsgolint/win32-arm64": "npm:0.17.0" - "@oxlint-tsgolint/win32-x64": "npm:0.17.0" +"oxlint-tsgolint@npm:0.22.1": + version: 0.22.1 + resolution: "oxlint-tsgolint@npm:0.22.1" + dependencies: + "@oxlint-tsgolint/darwin-arm64": "npm:0.22.1" + "@oxlint-tsgolint/darwin-x64": "npm:0.22.1" + "@oxlint-tsgolint/linux-arm64": "npm:0.22.1" + "@oxlint-tsgolint/linux-x64": "npm:0.22.1" + "@oxlint-tsgolint/win32-arm64": "npm:0.22.1" + "@oxlint-tsgolint/win32-x64": "npm:0.22.1" dependenciesMeta: "@oxlint-tsgolint/darwin-arm64": optional: true @@ -37688,35 +37583,35 @@ __metadata: optional: true bin: tsgolint: bin/tsgolint.js - checksum: 10c0/8a01a5bfad70a66fea3ca94d38aad8af1fdcc8ed7a2ca7b24d1a975de906c3d2bc7b4616c83411141429da4b13d72b26b02a3526d8d34933a0b2839d8aa7b66a - languageName: node - linkType: hard - -"oxlint@npm:1.55.0": - version: 1.55.0 - resolution: "oxlint@npm:1.55.0" - dependencies: - "@oxlint/binding-android-arm-eabi": "npm:1.55.0" - "@oxlint/binding-android-arm64": "npm:1.55.0" - "@oxlint/binding-darwin-arm64": "npm:1.55.0" - "@oxlint/binding-darwin-x64": "npm:1.55.0" - "@oxlint/binding-freebsd-x64": "npm:1.55.0" - "@oxlint/binding-linux-arm-gnueabihf": "npm:1.55.0" - "@oxlint/binding-linux-arm-musleabihf": "npm:1.55.0" - "@oxlint/binding-linux-arm64-gnu": "npm:1.55.0" - "@oxlint/binding-linux-arm64-musl": "npm:1.55.0" - "@oxlint/binding-linux-ppc64-gnu": "npm:1.55.0" - "@oxlint/binding-linux-riscv64-gnu": "npm:1.55.0" - "@oxlint/binding-linux-riscv64-musl": "npm:1.55.0" - "@oxlint/binding-linux-s390x-gnu": "npm:1.55.0" - "@oxlint/binding-linux-x64-gnu": "npm:1.55.0" - "@oxlint/binding-linux-x64-musl": "npm:1.55.0" - "@oxlint/binding-openharmony-arm64": "npm:1.55.0" - "@oxlint/binding-win32-arm64-msvc": "npm:1.55.0" - "@oxlint/binding-win32-ia32-msvc": "npm:1.55.0" - "@oxlint/binding-win32-x64-msvc": "npm:1.55.0" - peerDependencies: - oxlint-tsgolint: ">=0.15.0" + checksum: 10c0/1f2e3840993e85ebe73f394e7e7441c1482aa4c7da38408c5887e2635be64a577edc887688c8a5232e9f3c8b963fbcecec93036e5fbf2fb863784175e1336aa4 + languageName: node + linkType: hard + +"oxlint@npm:1.63.0": + version: 1.63.0 + resolution: "oxlint@npm:1.63.0" + dependencies: + "@oxlint/binding-android-arm-eabi": "npm:1.63.0" + "@oxlint/binding-android-arm64": "npm:1.63.0" + "@oxlint/binding-darwin-arm64": "npm:1.63.0" + "@oxlint/binding-darwin-x64": "npm:1.63.0" + "@oxlint/binding-freebsd-x64": "npm:1.63.0" + "@oxlint/binding-linux-arm-gnueabihf": "npm:1.63.0" + "@oxlint/binding-linux-arm-musleabihf": "npm:1.63.0" + "@oxlint/binding-linux-arm64-gnu": "npm:1.63.0" + "@oxlint/binding-linux-arm64-musl": "npm:1.63.0" + "@oxlint/binding-linux-ppc64-gnu": "npm:1.63.0" + "@oxlint/binding-linux-riscv64-gnu": "npm:1.63.0" + "@oxlint/binding-linux-riscv64-musl": "npm:1.63.0" + "@oxlint/binding-linux-s390x-gnu": "npm:1.63.0" + "@oxlint/binding-linux-x64-gnu": "npm:1.63.0" + "@oxlint/binding-linux-x64-musl": "npm:1.63.0" + "@oxlint/binding-openharmony-arm64": "npm:1.63.0" + "@oxlint/binding-win32-arm64-msvc": "npm:1.63.0" + "@oxlint/binding-win32-ia32-msvc": "npm:1.63.0" + "@oxlint/binding-win32-x64-msvc": "npm:1.63.0" + peerDependencies: + oxlint-tsgolint: ">=0.22.1" dependenciesMeta: "@oxlint/binding-android-arm-eabi": optional: true @@ -37761,7 +37656,7 @@ __metadata: optional: true bin: oxlint: bin/oxlint - checksum: 10c0/ea0a16c2c70c2756ff30ade960e98892b6687c13defdfb4b7a92f8e5396d636ce35815c71f878eb28822cf26f0be9b5600e80313a0d03a37822c21a533b10571 + checksum: 10c0/ca3e0c36eb02be68494b900cf34242a4d5917a2f63e0bf7833aa017223f9768fa053228483dcb0b86eb077641e60b7c2e5960a3f5d0fa03145b4ee29748b44c6 languageName: node linkType: hard @@ -39016,14 +38911,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.33, postcss@npm:^8.5.1, postcss@npm:^8.5.10, postcss@npm:^8.5.3, postcss@npm:^8.5.6": - version: 8.5.10 - resolution: "postcss@npm:8.5.10" +"postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.33, postcss@npm:^8.5.1, postcss@npm:^8.5.14, postcss@npm:^8.5.3, postcss@npm:^8.5.6": + version: 8.5.14 + resolution: "postcss@npm:8.5.14" dependencies: nanoid: "npm:^3.3.11" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/c592dffa0c4873b401f01955b265538d9942f425040df5e2b8f0ad34c83773a792ea0fa5859ccc99cfb5b955b4ebff118ab7056315388dc83b107b0fa8313576 + checksum: 10c0/48138207cf5ef5581be1bfe2cb65ccfe0ac75e43888ba045afc8ed6043d7b56aeb3b9a9fe5b353ff554be943cd0cc15d826ccb991525159175971e5ee8ab0237 languageName: node linkType: hard @@ -41247,24 +41142,23 @@ __metadata: languageName: node linkType: hard -"rolldown-plugin-dts@npm:0.22.5": - version: 0.22.5 - resolution: "rolldown-plugin-dts@npm:0.22.5" +"rolldown-plugin-dts@npm:0.25.0": + version: 0.25.0 + resolution: "rolldown-plugin-dts@npm:0.25.0" dependencies: - "@babel/generator": "npm:8.0.0-rc.2" - "@babel/helper-validator-identifier": "npm:8.0.0-rc.2" - "@babel/parser": "npm:8.0.0-rc.2" - "@babel/types": "npm:8.0.0-rc.2" + "@babel/generator": "npm:8.0.0-rc.4" + "@babel/helper-validator-identifier": "npm:8.0.0-rc.4" + "@babel/parser": "npm:8.0.0-rc.4" ast-kit: "npm:^3.0.0-beta.1" birpc: "npm:^4.0.0" - dts-resolver: "npm:^2.1.3" - get-tsconfig: "npm:^4.13.6" + dts-resolver: "npm:^3.0.0" + get-tsconfig: "npm:5.0.0-beta.5" obug: "npm:^2.1.1" peerDependencies: "@ts-macro/tsc": ^0.3.6 - "@typescript/native-preview": ">=7.0.0-dev.20250601.1" - rolldown: ^1.0.0-rc.3 - typescript: ^5.0.0 || ^6.0.0-beta + "@typescript/native-preview": ">=7.0.0-dev.20260325.1" + rolldown: ^1.0.0 + typescript: ^6.0.0 vue-tsc: ~3.2.0 peerDependenciesMeta: "@ts-macro/tsc": @@ -41275,89 +41169,31 @@ __metadata: optional: true vue-tsc: optional: true - checksum: 10c0/43940457abc0576833a50da2fe90d4993f5b4171910875da1d540954ba14aac9b41e72920caa11c1ffee0e439c0bd5b950706036f56c7220c5ad7cf178559236 - languageName: node - linkType: hard - -"rolldown@npm:1.0.0-rc.17": - version: 1.0.0-rc.17 - resolution: "rolldown@npm:1.0.0-rc.17" - dependencies: - "@oxc-project/types": "npm:=0.127.0" - "@rolldown/binding-android-arm64": "npm:1.0.0-rc.17" - "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.17" - "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.17" - "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.17" - "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.17" - "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.17" - "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.17" - "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.17" - "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.17" - "@rolldown/pluginutils": "npm:1.0.0-rc.17" - dependenciesMeta: - "@rolldown/binding-android-arm64": - optional: true - "@rolldown/binding-darwin-arm64": - optional: true - "@rolldown/binding-darwin-x64": - optional: true - "@rolldown/binding-freebsd-x64": - optional: true - "@rolldown/binding-linux-arm-gnueabihf": - optional: true - "@rolldown/binding-linux-arm64-gnu": - optional: true - "@rolldown/binding-linux-arm64-musl": - optional: true - "@rolldown/binding-linux-ppc64-gnu": - optional: true - "@rolldown/binding-linux-s390x-gnu": - optional: true - "@rolldown/binding-linux-x64-gnu": - optional: true - "@rolldown/binding-linux-x64-musl": - optional: true - "@rolldown/binding-openharmony-arm64": - optional: true - "@rolldown/binding-wasm32-wasi": - optional: true - "@rolldown/binding-win32-arm64-msvc": - optional: true - "@rolldown/binding-win32-x64-msvc": - optional: true - bin: - rolldown: bin/cli.mjs - checksum: 10c0/bb99abc62ece4e34edd06d2b8eb9ffb7194dc2f0465a4329bb106cbde3006a10f1575e3580b198b793341109a2109581aed623c537c12b0c3a4ba0d72169b2fb - languageName: node - linkType: hard - -"rolldown@npm:1.0.0-rc.9": - version: 1.0.0-rc.9 - resolution: "rolldown@npm:1.0.0-rc.9" - dependencies: - "@oxc-project/types": "npm:=0.115.0" - "@rolldown/binding-android-arm64": "npm:1.0.0-rc.9" - "@rolldown/binding-darwin-arm64": "npm:1.0.0-rc.9" - "@rolldown/binding-darwin-x64": "npm:1.0.0-rc.9" - "@rolldown/binding-freebsd-x64": "npm:1.0.0-rc.9" - "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0-rc.9" - "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0-rc.9" - "@rolldown/binding-linux-arm64-musl": "npm:1.0.0-rc.9" - "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0-rc.9" - "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0-rc.9" - "@rolldown/binding-linux-x64-gnu": "npm:1.0.0-rc.9" - "@rolldown/binding-linux-x64-musl": "npm:1.0.0-rc.9" - "@rolldown/binding-openharmony-arm64": "npm:1.0.0-rc.9" - "@rolldown/binding-wasm32-wasi": "npm:1.0.0-rc.9" - "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0-rc.9" - "@rolldown/binding-win32-x64-msvc": "npm:1.0.0-rc.9" - "@rolldown/pluginutils": "npm:1.0.0-rc.9" + checksum: 10c0/0277e644fe28b0d98a53ecf9949caf0e88a745d6281d72e2af1369aeb65d9a54e921cd14376c65fe951fd36356436f83b29e9583e3b299289af2a3ed07a0b57f + languageName: node + linkType: hard + +"rolldown@npm:1.0.0": + version: 1.0.0 + resolution: "rolldown@npm:1.0.0" + dependencies: + "@oxc-project/types": "npm:=0.129.0" + "@rolldown/binding-android-arm64": "npm:1.0.0" + "@rolldown/binding-darwin-arm64": "npm:1.0.0" + "@rolldown/binding-darwin-x64": "npm:1.0.0" + "@rolldown/binding-freebsd-x64": "npm:1.0.0" + "@rolldown/binding-linux-arm-gnueabihf": "npm:1.0.0" + "@rolldown/binding-linux-arm64-gnu": "npm:1.0.0" + "@rolldown/binding-linux-arm64-musl": "npm:1.0.0" + "@rolldown/binding-linux-ppc64-gnu": "npm:1.0.0" + "@rolldown/binding-linux-s390x-gnu": "npm:1.0.0" + "@rolldown/binding-linux-x64-gnu": "npm:1.0.0" + "@rolldown/binding-linux-x64-musl": "npm:1.0.0" + "@rolldown/binding-openharmony-arm64": "npm:1.0.0" + "@rolldown/binding-wasm32-wasi": "npm:1.0.0" + "@rolldown/binding-win32-arm64-msvc": "npm:1.0.0" + "@rolldown/binding-win32-x64-msvc": "npm:1.0.0" + "@rolldown/pluginutils": "npm:1.0.0" dependenciesMeta: "@rolldown/binding-android-arm64": optional: true @@ -41391,7 +41227,7 @@ __metadata: optional: true bin: rolldown: bin/cli.mjs - checksum: 10c0/d19af14dccf569dc25c0c3c2f1142b7a6f7cec291d55bba80cea71099f89c6d634145bb1b6487626ddd41d578f183f7065ed68067e49d2b964ad6242693b0f79 + checksum: 10c0/8e8c4ebcd80cd6fc051e1e58ad2ffb6578431f6828522788d6e5da6ba6d6e3e92f20e47df5e30034aba5a5af296f497a2b2ff26a21d5ade3c125b620ea958256 languageName: node linkType: hard @@ -42982,6 +42818,37 @@ __metadata: languageName: node linkType: hard +"storybook@npm:10.3.6": + version: 10.3.6 + resolution: "storybook@npm:10.3.6" + dependencies: + "@storybook/global": "npm:^5.0.0" + "@storybook/icons": "npm:^2.0.1" + "@testing-library/jest-dom": "npm:^6.9.1" + "@testing-library/user-event": "npm:^14.6.1" + "@vitest/expect": "npm:3.2.4" + "@vitest/spy": "npm:3.2.4" + "@webcontainer/env": "npm:^1.1.1" + esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0 || ^0.26.0 || ^0.27.0" + open: "npm:^10.2.0" + recast: "npm:^0.23.5" + semver: "npm:^7.7.3" + use-sync-external-store: "npm:^1.5.0" + ws: "npm:^8.18.0" + peerDependencies: + prettier: ^2 || ^3 + vite-plus: ^0.1.15 + peerDependenciesMeta: + prettier: + optional: true + vite-plus: + optional: true + bin: + storybook: ./dist/bin/dispatcher.js + checksum: 10c0/ee6702667459ba2d49269ddd63a7281f17816fcdd4bacd338ed47a4a8e7ad65760c90d99f6b2dfdfd0a564bcfcab3c1ea05b50bf3aafc6b5b19a039a5da77870 + languageName: node + linkType: hard + "storybook@npm:9.1.19": version: 9.1.19 resolution: "storybook@npm:9.1.19" @@ -45836,19 +45703,19 @@ __metadata: languageName: node linkType: hard -"vite@npm:8.0.10, vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0": - version: 8.0.10 - resolution: "vite@npm:8.0.10" +"vite@npm:8.0.12, vite@npm:^6.0.0 || ^7.0.0 || ^8.0.0": + version: 8.0.12 + resolution: "vite@npm:8.0.12" dependencies: fsevents: "npm:~2.3.3" lightningcss: "npm:^1.32.0" picomatch: "npm:^4.0.4" - postcss: "npm:^8.5.10" - rolldown: "npm:1.0.0-rc.17" + postcss: "npm:^8.5.14" + rolldown: "npm:1.0.0" tinyglobby: "npm:^0.2.16" peerDependencies: "@types/node": ^20.19.0 || >=22.12.0 - "@vitejs/devtools": ^0.1.0 + "@vitejs/devtools": ^0.1.18 esbuild: ^0.27.0 || ^0.28.0 jiti: ">=1.21.0" less: ^4.0.0 @@ -45889,7 +45756,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/92188b82654f856dbe562a1b679de695bb6ca18c0f43c4c276f84a869fb78e22dedb7c2df83b5617d6afdca979c059d654b5f61a0936a45f49917f352b9325ca + checksum: 10c0/4711efaa2a7a07755a8bed38cc8753fe3bd51d9cbe8e684a47a1a60dc752eddd2eefa5b88f7b6d7edfab9c0ed9d558ca4d1ae162e60fb64e21a9924c7771047b languageName: node linkType: hard