diff --git a/packages/apollo-wind/package.json b/packages/apollo-wind/package.json index a59d508a8..d515d60a6 100644 --- a/packages/apollo-wind/package.json +++ b/packages/apollo-wind/package.json @@ -88,7 +88,7 @@ "next-themes": "^0.4.6", "react-day-picker": "^9.13.0", "react-hook-form": "^7.66.1", - "react-resizable-panels": "^3.0.6", + "react-resizable-panels": "^4.6.0", "sonner": "^2.0.7", "tailwind-merge": "^3.4.0", "tailwindcss": "^4.1.17", diff --git a/packages/apollo-wind/src/components/ui/resizable.stories.tsx b/packages/apollo-wind/src/components/ui/resizable.stories.tsx index 87a0007c5..a286dc034 100644 --- a/packages/apollo-wind/src/components/ui/resizable.stories.tsx +++ b/packages/apollo-wind/src/components/ui/resizable.stories.tsx @@ -17,14 +17,14 @@ export const Horizontal = { args: {}, render: () => (
- - + + Left Panel - + Right Panel @@ -38,14 +38,14 @@ export const Vertical = { args: {}, render: () => (
- - + + Top Panel - + Bottom Panel @@ -59,20 +59,20 @@ export const ThreePanels = { args: {}, render: () => (
- - + + Sidebar - + Main Content - + Right Sidebar @@ -86,22 +86,22 @@ export const Nested = { args: {}, render: () => (
- - + + Left Sidebar - - - + + + Top Content - + Bottom Content @@ -117,14 +117,14 @@ export const WithHandleVariant = { args: {}, render: () => (
- - + + Left Panel - + Right Panel diff --git a/packages/apollo-wind/src/components/ui/resizable.test.tsx b/packages/apollo-wind/src/components/ui/resizable.test.tsx index 93922ffc2..fa1ff0803 100644 --- a/packages/apollo-wind/src/components/ui/resizable.test.tsx +++ b/packages/apollo-wind/src/components/ui/resizable.test.tsx @@ -5,12 +5,12 @@ import { describe, expect, it } from 'vitest'; import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from './resizable'; const BasicResizable = ({ withHandle = false }: { withHandle?: boolean }) => ( - - + +
Panel 1
- +
Panel 2
@@ -26,7 +26,7 @@ describe('Resizable', () => { it('renders handle without grip icon by default', () => { const { container } = render(); - expect(container.querySelector('[data-panel-resize-handle-id]')).toBeInTheDocument(); + expect(container.querySelector('[data-separator]')).toBeInTheDocument(); expect(container.querySelector('svg')).not.toBeInTheDocument(); }); @@ -37,37 +37,31 @@ describe('Resizable', () => { it('renders vertical panel group', () => { const { container } = render( - - + +
Top
- +
Bottom
); - expect( - container.querySelector("[data-panel-group-direction='vertical']") - ).toBeInTheDocument(); + expect(container.querySelector('[data-group]')).toBeInTheDocument(); }); }); describe('Accessibility', () => { - // Note: react-resizable-panels has a known a11y issue - missing aria-valuenow on slider role - // This should be fixed upstream in the library - it('has accessibility violation for missing aria-valuenow (known library issue)', async () => { + it('has no accessibility violations', async () => { const { container } = render(); const results = await axe(container); - // The library doesn't provide aria-valuenow which is required for slider role - expect(results.violations.length).toBeGreaterThan(0); - expect(results.violations[0].id).toBe('aria-required-attr'); + expect(results.violations).toHaveLength(0); }); it('handle is keyboard focusable', () => { const { container } = render(); - const handle = container.querySelector('[data-panel-resize-handle-id]'); + const handle = container.querySelector('[data-separator]'); expect(handle).toHaveAttribute('tabindex', '0'); }); }); @@ -75,8 +69,8 @@ describe('Resizable', () => { describe('Props', () => { it('applies custom className to panel group', () => { const { container } = render( - - + +
Content
@@ -87,28 +81,28 @@ describe('Resizable', () => { it('applies custom className to handle', () => { const { container } = render( - - + +
Panel 1
- +
Panel 2
); - expect(container.querySelector('[data-panel-resize-handle-id]')).toHaveClass('custom-handle'); + expect(container.querySelector('[data-separator]')).toHaveClass('custom-handle'); }); it('renders panel with minSize', () => { render( - - + +
Panel 1
- +
Panel 2
@@ -119,12 +113,12 @@ describe('Resizable', () => { it('renders panel with maxSize', () => { render( - - + +
Panel 1
- +
Panel 2
@@ -135,12 +129,12 @@ describe('Resizable', () => { it('renders collapsible panel', () => { render( - - + +
Collapsible
- +
Panel 2
@@ -153,16 +147,16 @@ describe('Resizable', () => { describe('Multiple Panels', () => { it('renders three panels with two handles', () => { const { container } = render( - - + +
Panel 1
- +
Panel 2
- +
Panel 3
@@ -171,7 +165,7 @@ describe('Resizable', () => { expect(screen.getByText('Panel 1')).toBeInTheDocument(); expect(screen.getByText('Panel 2')).toBeInTheDocument(); expect(screen.getByText('Panel 3')).toBeInTheDocument(); - expect(container.querySelectorAll('[data-panel-resize-handle-id]')).toHaveLength(2); + expect(container.querySelectorAll('[data-separator]')).toHaveLength(2); }); }); }); diff --git a/packages/apollo-wind/src/components/ui/resizable.tsx b/packages/apollo-wind/src/components/ui/resizable.tsx index 71e6e579f..53d213496 100644 --- a/packages/apollo-wind/src/components/ui/resizable.tsx +++ b/packages/apollo-wind/src/components/ui/resizable.tsx @@ -1,40 +1,36 @@ import { GripVertical } from 'lucide-react'; -import * as ResizablePrimitive from 'react-resizable-panels'; +import { Group, Panel, Separator } from 'react-resizable-panels'; +import type { PanelImperativeHandle } from 'react-resizable-panels'; import { cn } from '@/lib/index'; -const ResizablePanelGroup = ({ - className, - ...props -}: React.ComponentProps) => ( - +const ResizablePanelGroup = ({ className, ...props }: React.ComponentProps) => ( + ); -const ResizablePanel = ResizablePrimitive.Panel; +const ResizablePanel = Panel; const ResizableHandle = ({ withHandle, className, ...props -}: React.ComponentProps & { +}: React.ComponentProps & { withHandle?: boolean; }) => ( - div]:rotate-90', + 'group relative flex w-px items-center justify-center bg-border transition-colors data-[separator=hover]:bg-primary data-[separator=active]:bg-primary after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring focus-visible:ring-offset-1 aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:-translate-y-1/2 aria-[orientation=horizontal]:after:translate-x-0 [&[aria-orientation=horizontal]>div]:rotate-90', className )} {...props} > {withHandle && ( -
+
)} - + ); export { ResizablePanelGroup, ResizablePanel, ResizableHandle }; +export type { PanelImperativeHandle }; diff --git a/packages/apollo-wind/src/examples/flow-editor-layout-example.tsx b/packages/apollo-wind/src/examples/flow-editor-layout-example.tsx index a9a0843c5..c97bf27f6 100644 --- a/packages/apollo-wind/src/examples/flow-editor-layout-example.tsx +++ b/packages/apollo-wind/src/examples/flow-editor-layout-example.tsx @@ -1,14 +1,18 @@ import { Copy, MoreVertical, Play, Plus } from 'lucide-react'; import * as React from 'react'; import { Button } from '@/components/ui/button'; -import { ResizablePanelGroup, ResizablePanel, ResizableHandle } from '@/components/ui/resizable'; +import { + ResizablePanelGroup, + ResizablePanel, + ResizableHandle, + type PanelImperativeHandle, +} from '@/components/ui/resizable'; import { Separator } from '@/components/ui/separator'; import { Switch } from '@/components/ui/switch'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { Row, Column } from '@/components/ui/layout'; import { cn } from '@/lib'; import { useCallback, useRef, useEffect } from 'react'; -import { ImperativePanelHandle } from 'react-resizable-panels'; import { Label } from '@radix-ui/react-label'; import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'; import { @@ -93,7 +97,7 @@ export function FlowEditorLayout({ bottomOpen = false, }: FlowEditorLayoutProps) { const containerRef = useRef(null); - const bottomPanelRef = useRef(null); + const bottomPanelRef = useRef(null); const switcherRef = useRef(null); const rafRef = useRef(0); @@ -105,10 +109,10 @@ export function FlowEditorLayout({ return; } - const size = bottomPanelRef.current?.getSize(); - if (size !== undefined) { + const panelSize = bottomPanelRef.current?.getSize(); + if (panelSize !== undefined) { const containerHeight = containerRef.current.offsetHeight; - const bottomHeight = (size / 100) * containerHeight; + const bottomHeight = (panelSize.asPercentage / 100) * containerHeight; switcherRef.current.style.bottom = `${bottomHeight + 24}px`; } }, [bottomOpen]); @@ -183,9 +187,9 @@ export function FlowEditorLayout({ )} - + {/* Center */} - + {mainContent} @@ -194,10 +198,10 @@ export function FlowEditorLayout({ <> {bottomContent} diff --git a/packages/apollo-wind/src/examples/form-builder-example.tsx b/packages/apollo-wind/src/examples/form-builder-example.tsx index 2a2f4a4b6..0612414a2 100644 --- a/packages/apollo-wind/src/examples/form-builder-example.tsx +++ b/packages/apollo-wind/src/examples/form-builder-example.tsx @@ -89,8 +89,8 @@ export function FormBuilderExample() { return ( - - + +
@@ -374,7 +374,7 @@ export function FormBuilderExample() { - +
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2bf46aaee..d8424e469 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -339,7 +339,7 @@ importers: version: 1.4.0 shadcn: specifier: latest - version: 3.8.2(@types/node@24.10.1)(babel-plugin-macros@3.1.0)(hono@4.11.7)(typescript@5.9.3) + version: 3.8.3(@types/node@24.10.1)(babel-plugin-macros@3.1.0)(hono@4.11.7)(typescript@5.9.3) tw-animate-css: specifier: ^1.4.0 version: 1.4.0 @@ -464,7 +464,7 @@ importers: version: 10.2.4(esbuild@0.27.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(rollup@4.55.3)(storybook@10.2.4(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3)(vite@6.4.1(@types/node@24.10.1)(jiti@2.6.1)(less@4.4.2)(lightningcss@1.30.2)(sass@1.94.2)(terser@5.43.1)(tsx@4.20.6)(yaml@2.8.1))(webpack@5.101.2(esbuild@0.27.2)) react-scan: specifier: ^0.4.3 - version: 0.4.3(@types/react@19.2.8)(next@16.1.6(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.94.2))(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(rollup@4.55.3) + version: 0.4.3(@types/react@19.2.8)(next@16.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.94.2))(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(rollup@4.55.3) storybook: specifier: ^10.2.0 version: 10.2.4(@testing-library/dom@10.4.1)(prettier@3.6.2)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -966,8 +966,8 @@ importers: specifier: ^7.66.1 version: 7.66.1(react@19.2.3) react-resizable-panels: - specifier: ^3.0.6 - version: 3.0.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^4.6.0 + version: 4.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -1064,7 +1064,7 @@ importers: version: 19.2.3(react@19.2.3) react-scan: specifier: ^0.4.3 - version: 0.4.3(@types/react@19.2.8)(next@16.1.6(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.94.2))(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(rollup@4.55.3) + version: 0.4.3(@types/react@19.2.8)(next@16.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.94.2))(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(rollup@4.55.3) semantic-release: specifier: ^25.0.2 version: 25.0.2(typescript@5.9.3) @@ -8877,11 +8877,13 @@ packages: glob@10.5.0: resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true glob@13.0.0: @@ -8890,7 +8892,7 @@ packages: glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} @@ -11786,6 +11788,12 @@ packages: react: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^16.14.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + react-resizable-panels@4.6.0: + resolution: {integrity: sha512-I0GUBybvHQ9xde06MH1pmhnnoZfj3lytVhA8r9Pu6r6zunoUfVRy3tU1XT9lE83yUfjlCIMaXKxPrQMmjANIkA==} + peerDependencies: + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + react-router-dom@7.12.0: resolution: {integrity: sha512-pfO9fiBcpEfX4Tx+iTYKDtPbrSLLCbwJ5EqP+SPYQu1VYCXdy79GSj0wttR0U4cikVdlImZuEZ/9ZNCgoaxwBA==} engines: {node: '>=20.0.0'} @@ -12362,8 +12370,8 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shadcn@3.8.2: - resolution: {integrity: sha512-4iqRkfmDmChg4lC7qBImi0KWrCKJbb0rNSs8QuocHmKAlX9U3s0ZcYUbth+2sv1ueferzfjD2hswCOm9Ng4ceA==} + shadcn@3.8.3: + resolution: {integrity: sha512-4cq123nBeWJWWhMT2wG7ddoix5jIfPBvybjbS+xwc9gtQbhmi5X6RY8FjR1OhUSN4TYqV2O5dmJ9cl0/eBHIfg==} hasBin: true shallow-clone@3.0.1: @@ -14087,7 +14095,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@angular-devkit/architect': 0.2003.11(chokidar@4.0.3) - '@angular-devkit/build-webpack': 0.2003.11(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2) + '@angular-devkit/build-webpack': 0.2003.11(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2(esbuild@0.25.9)) '@angular-devkit/core': 20.3.11(chokidar@4.0.3) '@angular/build': 20.3.11(732225b7b0a56a2e89a0e1bef947800e) '@angular/compiler-cli': 20.3.16(@angular/compiler@20.3.16)(typescript@5.9.3) @@ -14101,13 +14109,13 @@ snapshots: '@babel/preset-env': 7.28.3(@babel/core@7.28.3) '@babel/runtime': 7.28.3 '@discoveryjs/json-ext': 0.6.3 - '@ngtools/webpack': 20.3.11(@angular/compiler-cli@20.3.16(@angular/compiler@20.3.16)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2) + '@ngtools/webpack': 20.3.11(@angular/compiler-cli@20.3.16(@angular/compiler@20.3.16)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9)) ansi-colors: 4.1.3 autoprefixer: 10.4.21(postcss@8.5.6) - babel-loader: 10.0.0(@babel/core@7.28.3)(webpack@5.101.2) + babel-loader: 10.0.0(@babel/core@7.28.3)(webpack@5.101.2(esbuild@0.25.9)) browserslist: 4.28.0 - copy-webpack-plugin: 13.0.1(webpack@5.101.2) - css-loader: 7.1.2(@rspack/core@1.6.4(@swc/helpers@0.5.17))(webpack@5.101.2) + copy-webpack-plugin: 13.0.1(webpack@5.101.2(esbuild@0.25.9)) + css-loader: 7.1.2(@rspack/core@1.6.4(@swc/helpers@0.5.17))(webpack@5.101.2(esbuild@0.25.9)) esbuild-wasm: 0.25.9 fast-glob: 3.3.3 http-proxy-middleware: 3.0.5 @@ -14115,22 +14123,22 @@ snapshots: jsonc-parser: 3.3.1 karma-source-map-support: 1.4.0 less: 4.4.0 - less-loader: 12.3.0(@rspack/core@1.6.4(@swc/helpers@0.5.17))(less@4.4.0)(webpack@5.101.2) - license-webpack-plugin: 4.0.2(webpack@5.101.2) + less-loader: 12.3.0(@rspack/core@1.6.4(@swc/helpers@0.5.17))(less@4.4.0)(webpack@5.101.2(esbuild@0.25.9)) + license-webpack-plugin: 4.0.2(webpack@5.101.2(esbuild@0.25.9)) loader-utils: 3.3.1 - mini-css-extract-plugin: 2.9.4(webpack@5.101.2) + mini-css-extract-plugin: 2.9.4(webpack@5.101.2(esbuild@0.25.9)) open: 10.2.0 ora: 8.2.0 picomatch: 4.0.3 piscina: 5.1.3 postcss: 8.5.6 - postcss-loader: 8.1.1(@rspack/core@1.6.4(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.9.3)(webpack@5.101.2) + postcss-loader: 8.1.1(@rspack/core@1.6.4(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9)) resolve-url-loader: 5.0.0 rxjs: 7.8.2 sass: 1.90.0 - sass-loader: 16.0.5(@rspack/core@1.6.4(@swc/helpers@0.5.17))(sass@1.90.0)(webpack@5.101.2) + sass-loader: 16.0.5(@rspack/core@1.6.4(@swc/helpers@0.5.17))(sass@1.90.0)(webpack@5.101.2(esbuild@0.25.9)) semver: 7.7.2 - source-map-loader: 5.0.0(webpack@5.101.2) + source-map-loader: 5.0.0(webpack@5.101.2(esbuild@0.25.9)) source-map-support: 0.5.21 terser: 5.43.1 tree-kill: 1.2.2 @@ -14140,7 +14148,7 @@ snapshots: webpack-dev-middleware: 7.4.2(webpack@5.101.2) webpack-dev-server: 5.2.2(webpack@5.101.2) webpack-merge: 6.0.1 - webpack-subresource-integrity: 5.1.0(webpack@5.101.2) + webpack-subresource-integrity: 5.1.0(webpack@5.101.2(esbuild@0.25.9)) optionalDependencies: '@angular/core': 20.3.16(@angular/compiler@20.3.16)(rxjs@7.8.2)(zone.js@0.15.1) '@angular/platform-browser': 20.3.16(@angular/animations@20.3.16(@angular/core@20.3.16(@angular/compiler@20.3.16)(rxjs@7.8.2)(zone.js@0.15.1)))(@angular/common@20.3.16(@angular/core@20.3.16(@angular/compiler@20.3.16)(rxjs@7.8.2)(zone.js@0.15.1))(rxjs@7.8.2))(@angular/core@20.3.16(@angular/compiler@20.3.16)(rxjs@7.8.2)(zone.js@0.15.1)) @@ -14170,7 +14178,7 @@ snapshots: - webpack-cli - yaml - '@angular-devkit/build-webpack@0.2003.11(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2)': + '@angular-devkit/build-webpack@0.2003.11(chokidar@4.0.3)(webpack-dev-server@5.2.2(webpack@5.101.2))(webpack@5.101.2(esbuild@0.25.9))': dependencies: '@angular-devkit/architect': 0.2003.11(chokidar@4.0.3) rxjs: 7.8.2 @@ -17701,7 +17709,7 @@ snapshots: '@next/swc-win32-x64-msvc@16.1.6': optional: true - '@ngtools/webpack@20.3.11(@angular/compiler-cli@20.3.16(@angular/compiler@20.3.16)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2)': + '@ngtools/webpack@20.3.11(@angular/compiler-cli@20.3.16(@angular/compiler@20.3.16)(typescript@5.9.3))(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9))': dependencies: '@angular/compiler-cli': 20.3.16(@angular/compiler@20.3.16)(typescript@5.9.3) typescript: 5.9.3 @@ -20794,7 +20802,7 @@ snapshots: axe-core@4.11.0: {} - babel-loader@10.0.0(@babel/core@7.28.3)(webpack@5.101.2): + babel-loader@10.0.0(@babel/core@7.28.3)(webpack@5.101.2(esbuild@0.25.9)): dependencies: '@babel/core': 7.28.3 find-up: 5.0.0 @@ -21384,7 +21392,7 @@ snapshots: dependencies: is-what: 3.14.1 - copy-webpack-plugin@13.0.1(webpack@5.101.2): + copy-webpack-plugin@13.0.1(webpack@5.101.2(esbuild@0.25.9)): dependencies: glob-parent: 6.0.2 normalize-path: 3.0.0 @@ -21477,7 +21485,7 @@ snapshots: css-functions-list@3.2.3: {} - css-loader@7.1.2(@rspack/core@1.6.4(@swc/helpers@0.5.17))(webpack@5.101.2): + css-loader@7.1.2(@rspack/core@1.6.4(@swc/helpers@0.5.17))(webpack@5.101.2(esbuild@0.25.9)): dependencies: icss-utils: 5.1.0(postcss@8.5.6) postcss: 8.5.6 @@ -23747,7 +23755,7 @@ snapshots: layout-base@2.0.1: {} - less-loader@12.3.0(@rspack/core@1.6.4(@swc/helpers@0.5.17))(less@4.4.0)(webpack@5.101.2): + less-loader@12.3.0(@rspack/core@1.6.4(@swc/helpers@0.5.17))(less@4.4.0)(webpack@5.101.2(esbuild@0.25.9)): dependencies: less: 4.4.0 optionalDependencies: @@ -23784,7 +23792,7 @@ snapshots: leven@3.1.0: {} - license-webpack-plugin@4.0.2(webpack@5.101.2): + license-webpack-plugin@4.0.2(webpack@5.101.2(esbuild@0.25.9)): dependencies: webpack-sources: 3.3.3 optionalDependencies: @@ -24672,7 +24680,7 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.9.4(webpack@5.101.2): + mini-css-extract-plugin@2.9.4(webpack@5.101.2(esbuild@0.25.9)): dependencies: schema-utils: 4.3.3 tapable: 2.3.0 @@ -25617,7 +25625,7 @@ snapshots: optionalDependencies: postcss: 8.5.6 - postcss-loader@8.1.1(@rspack/core@1.6.4(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.9.3)(webpack@5.101.2): + postcss-loader@8.1.1(@rspack/core@1.6.4(@swc/helpers@0.5.17))(postcss@8.5.6)(typescript@5.9.3)(webpack@5.101.2(esbuild@0.25.9)): dependencies: cosmiconfig: 9.0.0(typescript@5.9.3) jiti: 1.21.7 @@ -26158,6 +26166,11 @@ snapshots: react: 19.2.3 react-dom: 19.2.3(react@19.2.3) + react-resizable-panels@4.6.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + dependencies: + react: 19.2.3 + react-dom: 19.2.3(react@19.2.3) + react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: react: 19.2.3 @@ -26172,7 +26185,7 @@ snapshots: optionalDependencies: react-dom: 19.2.3(react@19.2.3) - react-scan@0.4.3(@types/react@19.2.8)(next@16.1.6(@babel/core@7.28.5)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.94.2))(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(rollup@4.55.3): + react-scan@0.4.3(@types/react@19.2.8)(next@16.1.6(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(sass@1.94.2))(react-dom@19.2.3(react@19.2.3))(react-router-dom@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-router@7.12.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(rollup@4.55.3): dependencies: '@babel/core': 7.28.5 '@babel/generator': 7.28.5 @@ -26798,7 +26811,7 @@ snapshots: parse-srcset: 1.0.2 postcss: 8.5.6 - sass-loader@16.0.5(@rspack/core@1.6.4(@swc/helpers@0.5.17))(sass@1.90.0)(webpack@5.101.2): + sass-loader@16.0.5(@rspack/core@1.6.4(@swc/helpers@0.5.17))(sass@1.90.0)(webpack@5.101.2(esbuild@0.25.9)): dependencies: neo-async: 2.6.2 optionalDependencies: @@ -27007,7 +27020,7 @@ snapshots: setprototypeof@1.2.0: {} - shadcn@3.8.2(@types/node@24.10.1)(babel-plugin-macros@3.1.0)(hono@4.11.7)(typescript@5.9.3): + shadcn@3.8.3(@types/node@24.10.1)(babel-plugin-macros@3.1.0)(hono@4.11.7)(typescript@5.9.3): dependencies: '@antfu/ni': 25.0.0 '@babel/core': 7.28.5 @@ -27038,6 +27051,7 @@ snapshots: prompts: 2.4.2 recast: 0.23.11 stringify-object: 5.0.0 + tailwind-merge: 3.4.0 ts-morph: 26.0.0 tsconfig-paths: 4.2.0 validate-npm-package-name: 7.0.2 @@ -27251,7 +27265,7 @@ snapshots: source-map-js@1.2.1: {} - source-map-loader@5.0.0(webpack@5.101.2): + source-map-loader@5.0.0(webpack@5.101.2(esbuild@0.25.9)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 @@ -28439,7 +28453,7 @@ snapshots: webpack-sources@3.3.3: {} - webpack-subresource-integrity@5.1.0(webpack@5.101.2): + webpack-subresource-integrity@5.1.0(webpack@5.101.2(esbuild@0.25.9)): dependencies: typed-assert: 1.0.9 webpack: 5.101.2(esbuild@0.25.9)