react-panel-layout 0.4.1 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +291 -0
  2. package/dist/FloatingPanelFrame-DDT6aING.js +66 -0
  3. package/dist/FloatingPanelFrame-DDT6aING.js.map +1 -0
  4. package/dist/FloatingPanelFrame-DrYwgI9f.cjs +2 -0
  5. package/dist/FloatingPanelFrame-DrYwgI9f.cjs.map +1 -0
  6. package/dist/GridLayout-DC7fCmcI.cjs +2 -0
  7. package/dist/GridLayout-DC7fCmcI.cjs.map +1 -0
  8. package/dist/GridLayout-tpSM0iM-.js +1460 -0
  9. package/dist/GridLayout-tpSM0iM-.js.map +1 -0
  10. package/dist/components/grid/GridLayout.d.ts +5 -0
  11. package/dist/components/pivot/PivotLayer.d.ts +14 -0
  12. package/dist/components/window/FloatingWindow.d.ts +15 -0
  13. package/dist/config/PanelContentDeclaration.d.ts +20 -0
  14. package/dist/config/panelRouter.d.ts +4 -2
  15. package/dist/config.cjs +1 -1
  16. package/dist/config.cjs.map +1 -1
  17. package/dist/config.js +125 -76
  18. package/dist/config.js.map +1 -1
  19. package/dist/constants/styles.d.ts +8 -0
  20. package/dist/floating.cjs +1 -1
  21. package/dist/floating.js +1 -1
  22. package/dist/index.cjs +2 -2
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.ts +4 -1
  25. package/dist/index.js +996 -853
  26. package/dist/index.js.map +1 -1
  27. package/dist/modules/grid/GridLayoutContext.d.ts +5 -0
  28. package/dist/modules/grid/resizeHandles.d.ts +14 -0
  29. package/dist/modules/grid/trackUtils.d.ts +29 -0
  30. package/dist/modules/grid/useGridTracks.d.ts +6 -15
  31. package/dist/modules/grid/useLayerInteractions.d.ts +2 -1
  32. package/dist/modules/panels/rendering/ContentRegistry.d.ts +50 -0
  33. package/dist/modules/panels/rendering/RenderContext.d.ts +1 -0
  34. package/dist/modules/panels/state/types.d.ts +2 -2
  35. package/dist/modules/pivot/PivotContent.d.ts +29 -0
  36. package/dist/modules/pivot/index.d.ts +5 -0
  37. package/dist/modules/pivot/types.d.ts +62 -0
  38. package/dist/modules/pivot/usePivot.d.ts +28 -0
  39. package/dist/modules/window/useFloatingState.d.ts +9 -0
  40. package/dist/pivot/index.d.ts +8 -0
  41. package/dist/pivot.cjs +2 -0
  42. package/dist/pivot.cjs.map +1 -0
  43. package/dist/pivot.js +5 -0
  44. package/dist/pivot.js.map +1 -0
  45. package/dist/styles-DcG3aIFx.cjs +2 -0
  46. package/dist/styles-DcG3aIFx.cjs.map +1 -0
  47. package/dist/styles-w0ZixggV.js +51 -0
  48. package/dist/styles-w0ZixggV.js.map +1 -0
  49. package/dist/types.d.ts +106 -4
  50. package/dist/usePivot-C8q0pMgW.cjs +2 -0
  51. package/dist/usePivot-C8q0pMgW.cjs.map +1 -0
  52. package/dist/usePivot-z9gumDf-.js +97 -0
  53. package/dist/usePivot-z9gumDf-.js.map +1 -0
  54. package/dist/utils/css.d.ts +19 -0
  55. package/package.json +6 -1
  56. package/dist/FloatingPanelFrame-BeP9z8EI.js +0 -98
  57. package/dist/FloatingPanelFrame-BeP9z8EI.js.map +0 -1
  58. package/dist/FloatingPanelFrame-Cu50Y9xg.cjs +0 -2
  59. package/dist/FloatingPanelFrame-Cu50Y9xg.cjs.map +0 -1
  60. package/dist/GridLayout-CwuQEP7k.cjs +0 -2
  61. package/dist/GridLayout-CwuQEP7k.cjs.map +0 -1
  62. package/dist/GridLayout-DZCV1X-3.js +0 -1338
  63. package/dist/GridLayout-DZCV1X-3.js.map +0 -1
@@ -27,6 +27,11 @@ export type GridLayoutContextValue = {
27
27
  handleLayerPointerDown: (event: React.PointerEvent<HTMLDivElement>) => void;
28
28
  getLayerRenderState: (layer: LayerDefinition) => GridLayerRenderState;
29
29
  getLayerHandleProps: (layerId: string) => GridLayerHandleProps;
30
+ /**
31
+ * Whether the GridLayout is mounted at root level.
32
+ * When true, scrollable layers should delegate to browser's native scroll.
33
+ */
34
+ isRootLevel: boolean;
30
35
  };
31
36
  export declare const GridLayoutProvider: React.FC<React.PropsWithChildren<{
32
37
  value: GridLayoutContextValue;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @file Resize handle configuration computation for grid tracks.
3
+ */
4
+ import type { GridTrack } from "../../types";
5
+ export type TrackHandleConfig = {
6
+ trackIndex: number;
7
+ align: "start" | "end";
8
+ span: {
9
+ start: number;
10
+ end: number;
11
+ };
12
+ };
13
+ export declare const computeColumnResizeHandles: (tracks: GridTrack[], areas: string[][]) => TrackHandleConfig[];
14
+ export declare const computeRowResizeHandles: (tracks: GridTrack[], areas: string[][]) => TrackHandleConfig[];
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @file Grid track sizing utilities.
3
+ */
4
+ import type * as React from "react";
5
+ import type { GridTrack } from "../../types";
6
+ import { type GridDirection, type ParsedGap } from "../../utils/css";
7
+ export type TrackDirection = GridDirection;
8
+ export declare const createTrackKey: (direction: TrackDirection, index: number) => string;
9
+ export declare const getTrackSize: (track: GridTrack, trackSizes: Record<string, number>, direction: TrackDirection, index: number) => string;
10
+ export declare const buildTrackTemplateString: (tracks: GridTrack[], trackSizes: Record<string, number>, direction: TrackDirection) => string;
11
+ export declare const extractInitialTrackSizes: (tracks: GridTrack[], direction: TrackDirection) => Record<string, number>;
12
+ export type ResolveTrackSizeParams = {
13
+ trackSizes: Record<string, number>;
14
+ track: GridTrack;
15
+ direction: TrackDirection;
16
+ trackIndex: number;
17
+ containerRef: React.RefObject<HTMLElement | null> | undefined;
18
+ };
19
+ export declare const resolveCurrentTrackSize: ({ trackSizes, track, direction, trackIndex, containerRef, }: ResolveTrackSizeParams) => number;
20
+ export type EffectiveMaxSizeParams = {
21
+ track: GridTrack;
22
+ tracks: GridTrack[];
23
+ trackIndex: number;
24
+ direction: TrackDirection;
25
+ containerRef: React.RefObject<HTMLElement | null> | undefined;
26
+ gapSizes: ParsedGap;
27
+ };
28
+ export declare const calculateEffectiveMaxSize: ({ track, tracks, trackIndex, direction, containerRef, gapSizes, }: EffectiveMaxSizeParams) => number | undefined;
29
+ export declare const applyTrackConstraints: (size: number, minSize?: number, maxSize?: number) => number;
@@ -3,24 +3,15 @@
3
3
  */
4
4
  import * as React from "react";
5
5
  import type { PanelLayoutConfig } from "../../types";
6
- export type TrackHandleConfig = {
7
- trackIndex: number;
8
- align: "start" | "end";
9
- span: {
10
- start: number;
11
- end: number;
12
- };
13
- };
14
- type ParsedGap = {
15
- rowGap: number;
16
- columnGap: number;
17
- };
18
- type TrackDirection = "row" | "col";
19
- export declare const useGridTracks: (config: PanelLayoutConfig, styleProp?: React.CSSProperties) => {
6
+ import { type ParsedGap } from "../../utils/css";
7
+ import { type TrackDirection } from "./trackUtils";
8
+ import { type TrackHandleConfig } from "./resizeHandles";
9
+ export type { TrackHandleConfig } from "./resizeHandles";
10
+ export type { TrackDirection } from "./trackUtils";
11
+ export declare const useGridTracks: (config: PanelLayoutConfig, styleProp?: React.CSSProperties, containerRef?: React.RefObject<HTMLElement | null>) => {
20
12
  columnHandles: TrackHandleConfig[];
21
13
  rowHandles: TrackHandleConfig[];
22
14
  gapSizes: ParsedGap;
23
15
  gridStyle: React.CSSProperties;
24
16
  handleResize: (direction: TrackDirection, trackIndex: number, delta: number) => void;
25
17
  };
26
- export {};
@@ -3,8 +3,9 @@ import type { GridLayoutContextValue } from "./GridLayoutContext";
3
3
  type UseLayerInteractionsArgs = {
4
4
  layers: LayerDefinition[];
5
5
  layerById: Map<string, LayerDefinition>;
6
+ isRootLevel: boolean;
6
7
  };
7
- export declare const useLayerInteractions: ({ layers, layerById, }: UseLayerInteractionsArgs) => {
8
+ export declare const useLayerInteractions: ({ layers, layerById, isRootLevel, }: UseLayerInteractionsArgs) => {
8
9
  providerValue: GridLayoutContextValue;
9
10
  draggingLayerId: string | null;
10
11
  resizingLayerId: string | null;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @file Registry for panel content instances.
3
+ * Manages component lifecycle to preserve state across tab switches and panel moves.
4
+ *
5
+ * ## Architecture
6
+ *
7
+ * This module solves the problem of preserving React component state when panels
8
+ * move between different container elements (groups).
9
+ *
10
+ * ### The Problem
11
+ * React portals remount their content when the container element changes.
12
+ * This is React's intentional behavior, but it causes state loss when panels move.
13
+ *
14
+ * ### The Solution
15
+ * 1. Create a stable wrapper element per panel (outside React's tree management)
16
+ * 2. Use createPortal to render React content INTO the wrapper
17
+ * 3. Move the wrapper between containers using appendChild
18
+ *
19
+ * This works because:
20
+ * - React only manages content INSIDE the wrapper (via portal)
21
+ * - React doesn't track the wrapper's position in DOM
22
+ * - Moving the wrapper doesn't trigger React reconciliation
23
+ *
24
+ * ### DOM API Usage
25
+ * - document.createElement: Creates wrapper element (once per panel)
26
+ * - appendChild: Moves wrapper to target container
27
+ * - removeChild: Cleans up wrapper on unmount
28
+ *
29
+ * These are the minimum DOM APIs required. React features handle everything else.
30
+ */
31
+ import * as React from "react";
32
+ import type { PanelId, GroupId, TabDefinition } from "../state/types";
33
+ type PanelPlacement = {
34
+ groupId: GroupId;
35
+ isActive: boolean;
36
+ };
37
+ type ContentRegistryContextValue = {
38
+ registerContentContainer: (groupId: GroupId, element: HTMLElement | null) => void;
39
+ };
40
+ export declare const useContentRegistry: () => ContentRegistryContextValue;
41
+ type ContentRegistryProviderProps = React.PropsWithChildren<{
42
+ panels: Record<PanelId, TabDefinition>;
43
+ placements: Record<PanelId, PanelPlacement>;
44
+ }>;
45
+ /**
46
+ * Provider that manages panel content lifecycle.
47
+ * Caches rendered content per panel to preserve React element identity.
48
+ */
49
+ export declare const ContentRegistryProvider: React.FC<ContentRegistryProviderProps>;
50
+ export {};
@@ -12,6 +12,7 @@ export type PanelRenderContextValue = {
12
12
  onStartTabDrag: (tabId: PanelId, groupId: GroupId, e: React.PointerEvent) => void;
13
13
  onStartContentDrag: (groupId: GroupId, e: React.PointerEvent<HTMLDivElement>) => void;
14
14
  doubleClickToAdd?: boolean;
15
+ registerContentContainer: (groupId: GroupId, element: HTMLElement | null) => void;
15
16
  };
16
17
  export declare const usePanelRenderContext: () => PanelRenderContextValue;
17
18
  export declare const PanelRenderProvider: React.FC<React.PropsWithChildren<{
@@ -35,8 +35,8 @@ export type PanelSplitLimits = number | RowsColsSplitLimits | LegacySplitLimits;
35
35
  export type TabDefinition = {
36
36
  id: PanelId;
37
37
  title: string;
38
- /** Render function to avoid remount on move */
39
- render: () => React.ReactNode;
38
+ /** Render function receives panel id to enable proper keying */
39
+ render: (id: PanelId) => React.ReactNode;
40
40
  };
41
41
  export type GroupModel = {
42
42
  id: GroupId;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @file PivotContent component for rendering pivot items with CSS animations.
3
+ *
4
+ * Override via CSS custom properties:
5
+ * - --rpl-pivot-animation-enter: Animation when becoming active
6
+ * - --rpl-pivot-animation-leave: Animation when becoming inactive
7
+ *
8
+ * User defines @keyframes in their CSS and references via these tokens.
9
+ * Example:
10
+ * @keyframes pivotEnter {
11
+ * from { opacity: 0; }
12
+ * to { opacity: 1; }
13
+ * }
14
+ * :root { --rpl-pivot-animation-enter: pivotEnter 150ms ease-out forwards; }
15
+ */
16
+ import * as React from "react";
17
+ export type PivotContentProps = {
18
+ id: string;
19
+ isActive: boolean;
20
+ transitionMode: "css" | "none";
21
+ children: React.ReactNode;
22
+ };
23
+ /**
24
+ * Renders pivot content with CSS animation support.
25
+ *
26
+ * When transitionMode="css": Applies enter/leave animations.
27
+ * When transitionMode="none": Uses React.Activity for memory optimization.
28
+ */
29
+ export declare const PivotContent: React.FC<PivotContentProps>;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @file Pivot - Headless content switching system
3
+ */
4
+ export { usePivot } from "./usePivot";
5
+ export type { PivotItem, UsePivotOptions, UsePivotResult, PivotItemProps } from "./types";
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @file Type definitions for the Pivot headless component system.
3
+ * Pivot manages content switching within a scope without providing UI.
4
+ */
5
+ import type * as React from "react";
6
+ /**
7
+ * A single content item that can be displayed in a Pivot.
8
+ */
9
+ export type PivotItem<TId extends string = string> = {
10
+ /** Unique identifier for this content item */
11
+ id: TId;
12
+ /** Human-readable label (optional - for tab titles, menu items, etc.) */
13
+ label?: string;
14
+ /** The actual content to render when this item is active */
15
+ content: React.ReactNode;
16
+ /** Whether this item can be selected (defaults to true) */
17
+ disabled?: boolean;
18
+ };
19
+ /**
20
+ * Props for the usePivot hook.
21
+ */
22
+ export type UsePivotOptions<TId extends string = string> = {
23
+ /** Array of content items to manage */
24
+ items: ReadonlyArray<PivotItem<TId>>;
25
+ /** Currently active item ID (controlled mode) */
26
+ activeId?: TId;
27
+ /** Default active item ID (uncontrolled mode) */
28
+ defaultActiveId?: TId;
29
+ /** Callback when active item changes */
30
+ onActiveChange?: (id: TId) => void;
31
+ /**
32
+ * Transition mode for content switching.
33
+ * - "css" (default) uses CSS transitions with design tokens.
34
+ * - "none" disables transitions (uses React.Activity for memory optimization).
35
+ */
36
+ transitionMode?: "css" | "none";
37
+ };
38
+ /**
39
+ * Props object returned by getItemProps for navigation elements.
40
+ */
41
+ export type PivotItemProps = {
42
+ "data-pivot-item": string;
43
+ "data-active": "true" | "false";
44
+ "aria-selected": boolean;
45
+ tabIndex: number;
46
+ onClick: () => void;
47
+ };
48
+ /**
49
+ * Result from usePivot hook.
50
+ */
51
+ export type UsePivotResult<TId extends string = string> = {
52
+ /** Current active item ID */
53
+ activeId: TId;
54
+ /** Function to change the active item */
55
+ setActiveId: (id: TId) => void;
56
+ /** Helper to check if an item is active */
57
+ isActive: (id: TId) => boolean;
58
+ /** Function to get props for navigation items (buttons, links, etc.) */
59
+ getItemProps: (id: TId) => PivotItemProps;
60
+ /** Outlet component that renders the active content (react-router style) */
61
+ Outlet: React.FC;
62
+ };
@@ -0,0 +1,28 @@
1
+ import type { UsePivotOptions, UsePivotResult } from "./types";
2
+ /**
3
+ * Headless hook for managing content switching within a scope.
4
+ * Provides behavior only - UI is fully customizable.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * const { activeId, getItemProps, Outlet } = usePivot({
9
+ * items: [
10
+ * { id: 'home', label: 'Home', content: <HomePage /> },
11
+ * { id: 'settings', label: 'Settings', content: <SettingsPage /> }
12
+ * ],
13
+ * defaultActiveId: 'home'
14
+ * });
15
+ *
16
+ * return (
17
+ * <div>
18
+ * <nav>
19
+ * {items.map((item) => (
20
+ * <button key={item.id} {...getItemProps(item.id)}>{item.label}</button>
21
+ * ))}
22
+ * </nav>
23
+ * <Outlet />
24
+ * </div>
25
+ * );
26
+ * ```
27
+ */
28
+ export declare function usePivot<TId extends string = string>(options: UsePivotOptions<TId>): UsePivotResult<TId>;
@@ -0,0 +1,9 @@
1
+ import type { LayerDefinition, WindowPosition, WindowSize } from "../../types";
2
+ export declare const useFloatingState: (layers: LayerDefinition[]) => {
3
+ getPosition: (layerId: string) => WindowPosition;
4
+ getSize: (layerId: string) => WindowSize;
5
+ getZIndex: (layerId: string) => number | undefined;
6
+ updatePosition: (layerId: string, position: WindowPosition) => void;
7
+ updateSize: (layerId: string, size: WindowSize) => void;
8
+ close: (layerId: string) => void;
9
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @file Pivot entry point - Headless content switching
3
+ *
4
+ * Import via: import { usePivot } from "react-panel-layout/pivot";
5
+ */
6
+ export { usePivot } from "../modules/pivot";
7
+ export type { PivotItem, UsePivotOptions, UsePivotResult, PivotItemProps } from "../modules/pivot";
8
+ export type { PivotBehavior, PivotBehaviorItem } from "../types";
package/dist/pivot.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./usePivot-C8q0pMgW.cjs");exports.usePivot=e.usePivot;
2
+ //# sourceMappingURL=pivot.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivot.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/pivot.js ADDED
@@ -0,0 +1,5 @@
1
+ import { u as r } from "./usePivot-z9gumDf-.js";
2
+ export {
3
+ r as usePivot
4
+ };
5
+ //# sourceMappingURL=pivot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pivot.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,2 @@
1
+ "use strict";const _="var(--rpl-color-resize-handle-idle, rgba(255, 255, 255, 0.12))",E="var(--rpl-color-resize-handle-hover, rgba(33, 150, 243, 0.35))",R="var(--rpl-color-resize-handle-active, rgba(33, 150, 243, 0.55))",A="var(--rpl-color-drop-suggest-border, rgba(90, 150, 255, 0.9))",D="var(--rpl-color-drop-suggest-bg, rgba(90, 150, 255, 0.15))",O="var(--rpl-color-insert-guide, rgba(120, 160, 255, 0.95))",r="var(--rpl-color-insert-guide-shadow, 0 0 0 2px rgba(120, 160, 255, 0.2))",I="var(--rpl-color-surface, #fff)",N="var(--rpl-color-surface-2, #fafafa)",T="var(--rpl-color-border, #e5e7eb)",a="var(--rpl-color-muted-fg, #6b7280)",S="var(--rpl-shadow-card, 0 2px 10px rgba(0, 0, 0, 0.08))",o="var(--rpl-color-drawer-backdrop, rgba(0, 0, 0, 0.5))",s="var(--rpl-drawer-transition-duration, 220ms)",n="var(--rpl-drawer-transition-easing, cubic-bezier(0.22, 1, 0.36, 1))",G="var(--rpl-pivot-animation-enter, none)",L="var(--rpl-pivot-animation-leave, none)",t="var(--rpl-radius-suggest, 6px)",e="var(--rpl-size-suggest-border, 2px)";const p="var(--rpl-size-resize-handle-thickness, 4px)",c="var(--rpl-size-split-handle-thickness, 6px)",l="var(--rpl-z-overlay, 9998)",P="var(--rpl-z-tabdrag-overlay, 9999)",i=p,C="var(--rpl-z-resize-handle, 1000)",d=4,H="var(--rpl-size-grid-layer-corner-hit, 14px)",v="var(--rpl-size-grid-layer-edge-hit-thickness, 12px)",g=l,F=e,U=t,B=A,W=D,Z=6,x=P,b="var(--rpl-space-tab-drag-preview-offset-x, 12px)",V="var(--rpl-space-tab-drag-preview-offset-y, 12px)",f="var(--rpl-size-tab-drag-insert-guide-width, 2px)",h="var(--rpl-radius-tab-drag-insert-guide, 1px)",z=O,u=r,X="var(--rpl-radius-floating-panel, 8px)",w="var(--rpl-space-floating-panel-gap, 8px)",K="var(--rpl-space-floating-panel-header-padding-y, 8px)",Y="var(--rpl-space-floating-panel-header-padding-x, 12px)",M="var(--rpl-space-floating-panel-content-padding, 12px)",y="var(--rpl-size-floating-panel-meta-font, 12px)",m="var(--rpl-space-floating-panel-controls-gap, 6px)",k=I,j=N,q=T,J=a,Q=S,$="var(--rpl-space-drawer-header-padding-y, 10px)",__="var(--rpl-space-drawer-header-padding-x, 12px)",E_="var(--rpl-space-drawer-header-gap, 8px)",R_="var(--rpl-space-drawer-content-padding, 12px)",A_="var(--rpl-size-drawer-close-button-font, 18px)",D_=c,O_="var(--rpl-size-horizontal-divider-width, 4px)";exports.COLOR_DRAWER_BACKDROP=o;exports.COLOR_RESIZE_HANDLE_ACTIVE=R;exports.COLOR_RESIZE_HANDLE_HOVER=E;exports.COLOR_RESIZE_HANDLE_IDLE=_;exports.CSS_VAR_PREFIX="rpl";exports.DRAWER_CLOSE_BUTTON_FONT_SIZE=A_;exports.DRAWER_CONTENT_PADDING=R_;exports.DRAWER_HEADER_GAP=E_;exports.DRAWER_HEADER_PADDING_X=__;exports.DRAWER_HEADER_PADDING_Y=$;exports.DRAWER_TRANSITION_DURATION=s;exports.DRAWER_TRANSITION_EASING=n;exports.DROP_SUGGEST_BG_COLOR=W;exports.DROP_SUGGEST_BORDER_COLOR=B;exports.DROP_SUGGEST_BORDER_RADIUS=U;exports.DROP_SUGGEST_BORDER_WIDTH=F;exports.DROP_SUGGEST_PADDING_PX=Z;exports.DROP_SUGGEST_Z_INDEX=g;exports.FLOATING_PANEL_BORDER_COLOR=q;exports.FLOATING_PANEL_BORDER_RADIUS=X;exports.FLOATING_PANEL_CONTENT_PADDING=M;exports.FLOATING_PANEL_CONTROLS_GAP=m;exports.FLOATING_PANEL_GAP=w;exports.FLOATING_PANEL_HEADER_PADDING_X=Y;exports.FLOATING_PANEL_HEADER_PADDING_Y=K;exports.FLOATING_PANEL_META_FONT_SIZE=y;exports.FLOATING_PANEL_MUTED_FG_COLOR=J;exports.FLOATING_PANEL_SHADOW=Q;exports.FLOATING_PANEL_SURFACE_2_COLOR=j;exports.FLOATING_PANEL_SURFACE_COLOR=k;exports.GRID_HANDLE_THICKNESS=d;exports.GRID_LAYER_CORNER_HIT_SIZE=H;exports.GRID_LAYER_EDGE_HIT_THICKNESS=v;exports.HORIZONTAL_DIVIDER_WIDTH=O_;exports.PIVOT_ANIMATION_ENTER=G;exports.PIVOT_ANIMATION_LEAVE=L;exports.RESIZE_HANDLE_THICKNESS=i;exports.RESIZE_HANDLE_Z_INDEX=C;exports.SPLIT_HANDLE_THICKNESS=D_;exports.TAB_DRAG_INSERT_GUIDE_BORDER_RADIUS=h;exports.TAB_DRAG_INSERT_GUIDE_COLOR=z;exports.TAB_DRAG_INSERT_GUIDE_SHADOW=u;exports.TAB_DRAG_INSERT_GUIDE_WIDTH=f;exports.TAB_DRAG_OVERLAY_Z_INDEX=x;exports.TAB_DRAG_PREVIEW_OFFSET_X=b;exports.TAB_DRAG_PREVIEW_OFFSET_Y=V;
2
+ //# sourceMappingURL=styles-DcG3aIFx.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles-DcG3aIFx.cjs","sources":["../src/constants/styles.ts"],"sourcesContent":["/**\n * @file Style constants for library components\n *\n * These constants reference CSS variables defined in variables.css.\n * This allows users to override theme values via CSS while maintaining\n * type-safe constants in TypeScript.\n *\n * All CSS variables use the unified prefix: --rpl- (react-panel-layout)\n * Users can override these via CSS variables (--rpl-*)\n *\n * @example\n * // In your CSS:\n * :root {\n * --rpl-color-primary: #ff0000;\n * }\n */\n\n// ========================================\n// CSS VARIABLE PREFIX\n// ========================================\n\n/**\n * Unified CSS variable prefix for all react-panel-layout variables\n * All theme variables use this prefix: --rpl-*\n */\nexport const CSS_VAR_PREFIX = 'rpl';\n\n// ========================================\n// COLORS\n// ========================================\n\n/**\n * Tab colors - used in TabBar component\n */\nexport const COLOR_TAB_FG = \"var(--rpl-color-tab-fg, #d5d7de)\";\nexport const COLOR_TAB_ACTIVE_BG = \"var(--rpl-color-tab-active-bg, #2b2d35)\";\nexport const COLOR_TABBAR_BG = \"var(--rpl-color-tabbar-bg, #1e1f24)\";\n\n/**\n * Panel colors - used in panel layouts\n */\nexport const COLOR_PANEL_BORDER = \"var(--rpl-color-panel-border, rgba(0, 0, 0, 0.3))\";\nexport const COLOR_PANEL_BG = \"var(--rpl-color-panel-bg, #0b0b0c)\";\n\n/**\n * Primary color - used for resize handles, highlights\n */\nexport const COLOR_PRIMARY = \"var(--rpl-color-primary, #2196f3)\";\nexport const COLOR_RESIZE_HANDLE_IDLE = \"var(--rpl-color-resize-handle-idle, rgba(255, 255, 255, 0.12))\";\nexport const COLOR_RESIZE_HANDLE_HOVER = \"var(--rpl-color-resize-handle-hover, rgba(33, 150, 243, 0.35))\";\nexport const COLOR_RESIZE_HANDLE_ACTIVE = \"var(--rpl-color-resize-handle-active, rgba(33, 150, 243, 0.55))\";\n\n/**\n * Drop suggestion overlay colors\n */\nexport const COLOR_DROP_SUGGEST_BORDER = \"var(--rpl-color-drop-suggest-border, rgba(90, 150, 255, 0.9))\";\nexport const COLOR_DROP_SUGGEST_BG = \"var(--rpl-color-drop-suggest-bg, rgba(90, 150, 255, 0.15))\";\n\n/**\n * Tab drag overlay colors\n */\nexport const COLOR_TABDRAG_BG = \"var(--rpl-color-tabdrag-bg, rgba(34, 36, 42, 0.95))\";\nexport const COLOR_TABDRAG_FG = \"var(--rpl-color-tabdrag-fg, #e9ebf0)\";\nexport const COLOR_TABDRAG_BORDER = \"var(--rpl-color-tabdrag-border, rgba(120, 160, 255, 0.6))\";\nexport const COLOR_TABDRAG_SHADOW = \"var(--rpl-color-tabdrag-shadow, 0 6px 20px rgba(0, 0, 0, 0.35))\";\n\n/**\n * Insert guide colors\n */\nexport const COLOR_INSERT_GUIDE = \"var(--rpl-color-insert-guide, rgba(120, 160, 255, 0.95))\";\nexport const COLOR_INSERT_GUIDE_SHADOW = \"var(--rpl-color-insert-guide-shadow, 0 0 0 2px rgba(120, 160, 255, 0.2))\";\n\n/**\n * Node editor / floating panel colors\n * These are used by Drawer and FloatingPanelFrame components\n */\nexport const COLOR_NODE_EDITOR_SURFACE = \"var(--rpl-color-surface, #fff)\";\nexport const COLOR_NODE_EDITOR_SURFACE_2 = \"var(--rpl-color-surface-2, #fafafa)\";\nexport const COLOR_NODE_EDITOR_BORDER = \"var(--rpl-color-border, #e5e7eb)\";\nexport const COLOR_NODE_EDITOR_MUTED_FG = \"var(--rpl-color-muted-fg, #6b7280)\";\nexport const COLOR_NODE_EDITOR_CARD_SHADOW = \"var(--rpl-shadow-card, 0 2px 10px rgba(0, 0, 0, 0.08))\";\nexport const COLOR_DRAWER_BACKDROP = \"var(--rpl-color-drawer-backdrop, rgba(0, 0, 0, 0.5))\";\n\n/**\n * Drawer transitions\n */\nexport const DRAWER_TRANSITION_DURATION = \"var(--rpl-drawer-transition-duration, 220ms)\";\nexport const DRAWER_TRANSITION_EASING = \"var(--rpl-drawer-transition-easing, cubic-bezier(0.22, 1, 0.36, 1))\";\n\n/**\n * Pivot animations\n * User defines @keyframes in their CSS and references via these tokens.\n * - Enter: Applied when content becomes active\n * - Leave: Applied when content becomes inactive\n */\nexport const PIVOT_ANIMATION_ENTER = \"var(--rpl-pivot-animation-enter, none)\";\nexport const PIVOT_ANIMATION_LEAVE = \"var(--rpl-pivot-animation-leave, none)\";\n\n// ========================================\n// SIZING & SPACING\n// ========================================\n\n/**\n * Tab sizing\n */\nexport const SIZE_TAB_FONT = \"var(--rpl-size-tab-font, 12px)\";\nexport const SPACE_TAB_PADDING_Y = \"var(--rpl-space-tab-padding-y, 4px)\";\nexport const SPACE_TAB_PADDING_X = \"var(--rpl-space-tab-padding-x, 8px)\";\n\n/**\n * Tabbar spacing\n */\nexport const SPACE_TABBAR_GAP = \"var(--rpl-space-tabbar-gap, 6px)\";\nexport const SPACE_TABBAR_PADDING_Y = \"var(--rpl-space-tabbar-padding-y, 4px)\";\nexport const SPACE_TABBAR_PADDING_X = \"var(--rpl-space-tabbar-padding-x, 6px)\";\n\n/**\n * Border radius (decorative, using CSS variables)\n */\nexport const RADIUS_TAB = \"var(--rpl-radius-tab, 4px)\";\nexport const RADIUS_SUGGEST = \"var(--rpl-radius-suggest, 6px)\";\n\n/**\n * Border widths\n */\nexport const SIZE_SUGGEST_BORDER = \"var(--rpl-size-suggest-border, 2px)\";\n\n/**\n * Handle thicknesses\n * Note: SIZE_GRID_HANDLE_THICKNESS is kept as number for JavaScript calculations\n */\nexport const SIZE_GRID_HANDLE_THICKNESS = 4; // Used in GridTrackResizeHandle.tsx for offset calculation\nexport const SIZE_RESIZE_HANDLE_THICKNESS = \"var(--rpl-size-resize-handle-thickness, 4px)\";\nexport const SIZE_SPLIT_HANDLE_THICKNESS = \"var(--rpl-size-split-handle-thickness, 6px)\";\n\n/**\n * Drop suggest padding\n */\nexport const SPACE_DROP_SUGGEST_PADDING = \"var(--rpl-space-drop-suggest-padding, 6px)\";\n\n// ========================================\n// Z-INDEXES\n// ========================================\n\nexport const Z_OVERLAY = \"var(--rpl-z-overlay, 9998)\";\nexport const Z_TABDRAG_OVERLAY = \"var(--rpl-z-tabdrag-overlay, 9999)\";\nexport const Z_DIALOG_OVERLAY = \"var(--rpl-z-dialog-overlay, 10000)\";\n\n// ========================================\n// COMPONENT-SPECIFIC CONSTANTS\n// ========================================\n\n/**\n * Resize Handle\n */\nexport const RESIZE_HANDLE_THICKNESS = SIZE_RESIZE_HANDLE_THICKNESS;\nexport const RESIZE_HANDLE_Z_INDEX = \"var(--rpl-z-resize-handle, 1000)\";\n\n/**\n * Grid Track Resize Handle\n */\nexport const GRID_HANDLE_THICKNESS = SIZE_GRID_HANDLE_THICKNESS;\n\n/**\n * Grid Layer Resize Handles\n */\nexport const GRID_LAYER_CORNER_HIT_SIZE = \"var(--rpl-size-grid-layer-corner-hit, 14px)\";\nexport const GRID_LAYER_EDGE_HIT_THICKNESS = \"var(--rpl-size-grid-layer-edge-hit-thickness, 12px)\";\n\n/**\n * Drop Suggest Overlay\n */\nexport const DROP_SUGGEST_Z_INDEX = Z_OVERLAY;\nexport const DROP_SUGGEST_BORDER_WIDTH = SIZE_SUGGEST_BORDER;\nexport const DROP_SUGGEST_BORDER_RADIUS = RADIUS_SUGGEST;\nexport const DROP_SUGGEST_BORDER_COLOR = COLOR_DROP_SUGGEST_BORDER;\nexport const DROP_SUGGEST_BG_COLOR = COLOR_DROP_SUGGEST_BG;\nexport const DROP_SUGGEST_PADDING = SPACE_DROP_SUGGEST_PADDING;\nexport const DROP_SUGGEST_PADDING_PX = 6;\n\n/**\n * Tab Drag Overlay\n */\nexport const TAB_DRAG_OVERLAY_Z_INDEX = Z_TABDRAG_OVERLAY;\nexport const TAB_DRAG_PREVIEW_OFFSET_X = \"var(--rpl-space-tab-drag-preview-offset-x, 12px)\";\nexport const TAB_DRAG_PREVIEW_OFFSET_Y = \"var(--rpl-space-tab-drag-preview-offset-y, 12px)\";\nexport const TAB_DRAG_PREVIEW_BORDER_RADIUS = \"var(--rpl-radius-tab-drag-preview, 6px)\";\nexport const TAB_DRAG_PREVIEW_PADDING_Y = \"var(--rpl-space-tab-drag-preview-padding-y, 4px)\";\nexport const TAB_DRAG_PREVIEW_PADDING_X = \"var(--rpl-space-tab-drag-preview-padding-x, 8px)\";\nexport const TAB_DRAG_PREVIEW_FONT_SIZE = \"var(--rpl-size-tab-drag-preview-font, 12px)\";\nexport const TAB_DRAG_INSERT_GUIDE_WIDTH = \"var(--rpl-size-tab-drag-insert-guide-width, 2px)\";\nexport const TAB_DRAG_INSERT_GUIDE_BORDER_RADIUS = \"var(--rpl-radius-tab-drag-insert-guide, 1px)\";\nexport const TAB_DRAG_PREVIEW_BG_COLOR = COLOR_TABDRAG_BG;\nexport const TAB_DRAG_PREVIEW_FG_COLOR = COLOR_TABDRAG_FG;\nexport const TAB_DRAG_PREVIEW_BORDER_COLOR = COLOR_TABDRAG_BORDER;\nexport const TAB_DRAG_PREVIEW_SHADOW = COLOR_TABDRAG_SHADOW;\nexport const TAB_DRAG_INSERT_GUIDE_COLOR = COLOR_INSERT_GUIDE;\nexport const TAB_DRAG_INSERT_GUIDE_SHADOW = COLOR_INSERT_GUIDE_SHADOW;\n\n/**\n * Dialog Overlay\n */\nexport const DIALOG_OVERLAY_Z_INDEX = Z_DIALOG_OVERLAY;\n\n/**\n * Floating Panel Frame\n */\nexport const FLOATING_PANEL_BORDER_RADIUS = \"var(--rpl-radius-floating-panel, 8px)\";\nexport const FLOATING_PANEL_GAP = \"var(--rpl-space-floating-panel-gap, 8px)\";\nexport const FLOATING_PANEL_HEADER_PADDING_Y = \"var(--rpl-space-floating-panel-header-padding-y, 8px)\";\nexport const FLOATING_PANEL_HEADER_PADDING_X = \"var(--rpl-space-floating-panel-header-padding-x, 12px)\";\nexport const FLOATING_PANEL_CONTENT_PADDING = \"var(--rpl-space-floating-panel-content-padding, 12px)\";\nexport const FLOATING_PANEL_META_FONT_SIZE = \"var(--rpl-size-floating-panel-meta-font, 12px)\";\nexport const FLOATING_PANEL_CONTROLS_GAP = \"var(--rpl-space-floating-panel-controls-gap, 6px)\";\nexport const FLOATING_PANEL_SURFACE_COLOR = COLOR_NODE_EDITOR_SURFACE;\nexport const FLOATING_PANEL_SURFACE_2_COLOR = COLOR_NODE_EDITOR_SURFACE_2;\nexport const FLOATING_PANEL_BORDER_COLOR = COLOR_NODE_EDITOR_BORDER;\nexport const FLOATING_PANEL_MUTED_FG_COLOR = COLOR_NODE_EDITOR_MUTED_FG;\nexport const FLOATING_PANEL_SHADOW = COLOR_NODE_EDITOR_CARD_SHADOW;\n\n/**\n * Drawer\n */\nexport const DRAWER_HEADER_PADDING_Y = \"var(--rpl-space-drawer-header-padding-y, 10px)\";\nexport const DRAWER_HEADER_PADDING_X = \"var(--rpl-space-drawer-header-padding-x, 12px)\";\nexport const DRAWER_HEADER_GAP = \"var(--rpl-space-drawer-header-gap, 8px)\";\nexport const DRAWER_CONTENT_PADDING = \"var(--rpl-space-drawer-content-padding, 12px)\";\nexport const DRAWER_CLOSE_BUTTON_FONT_SIZE = \"var(--rpl-size-drawer-close-button-font, 18px)\";\nexport const DRAWER_SURFACE_COLOR = COLOR_NODE_EDITOR_SURFACE;\nexport const DRAWER_BORDER_COLOR = COLOR_NODE_EDITOR_BORDER;\nexport const DRAWER_SHADOW = COLOR_NODE_EDITOR_CARD_SHADOW;\n\n/**\n * Split Handles\n */\nexport const SPLIT_HANDLE_THICKNESS = SIZE_SPLIT_HANDLE_THICKNESS;\n\n/**\n * HorizontalDivider\n */\nexport const HORIZONTAL_DIVIDER_WIDTH = \"var(--rpl-size-horizontal-divider-width, 4px)\";\nexport const HORIZONTAL_DIVIDER_HIT_AREA_OFFSET = \"var(--rpl-space-horizontal-divider-hit-area-offset, 4px)\";\n"],"names":["COLOR_RESIZE_HANDLE_IDLE","COLOR_RESIZE_HANDLE_HOVER","COLOR_RESIZE_HANDLE_ACTIVE","COLOR_DROP_SUGGEST_BORDER","COLOR_DROP_SUGGEST_BG","COLOR_INSERT_GUIDE","COLOR_INSERT_GUIDE_SHADOW","COLOR_NODE_EDITOR_SURFACE","COLOR_NODE_EDITOR_SURFACE_2","COLOR_NODE_EDITOR_BORDER","COLOR_NODE_EDITOR_MUTED_FG","COLOR_NODE_EDITOR_CARD_SHADOW","COLOR_DRAWER_BACKDROP","DRAWER_TRANSITION_DURATION","DRAWER_TRANSITION_EASING","PIVOT_ANIMATION_ENTER","PIVOT_ANIMATION_LEAVE","RADIUS_SUGGEST","SIZE_SUGGEST_BORDER","SIZE_RESIZE_HANDLE_THICKNESS","SIZE_SPLIT_HANDLE_THICKNESS","Z_OVERLAY","Z_TABDRAG_OVERLAY","RESIZE_HANDLE_THICKNESS","RESIZE_HANDLE_Z_INDEX","GRID_HANDLE_THICKNESS","GRID_LAYER_CORNER_HIT_SIZE","GRID_LAYER_EDGE_HIT_THICKNESS","DROP_SUGGEST_Z_INDEX","DROP_SUGGEST_BORDER_WIDTH","DROP_SUGGEST_BORDER_RADIUS","DROP_SUGGEST_BORDER_COLOR","DROP_SUGGEST_BG_COLOR","DROP_SUGGEST_PADDING_PX","TAB_DRAG_OVERLAY_Z_INDEX","TAB_DRAG_PREVIEW_OFFSET_X","TAB_DRAG_PREVIEW_OFFSET_Y","TAB_DRAG_INSERT_GUIDE_WIDTH","TAB_DRAG_INSERT_GUIDE_BORDER_RADIUS","TAB_DRAG_INSERT_GUIDE_COLOR","TAB_DRAG_INSERT_GUIDE_SHADOW","FLOATING_PANEL_BORDER_RADIUS","FLOATING_PANEL_GAP","FLOATING_PANEL_HEADER_PADDING_Y","FLOATING_PANEL_HEADER_PADDING_X","FLOATING_PANEL_CONTENT_PADDING","FLOATING_PANEL_META_FONT_SIZE","FLOATING_PANEL_CONTROLS_GAP","FLOATING_PANEL_SURFACE_COLOR","FLOATING_PANEL_SURFACE_2_COLOR","FLOATING_PANEL_BORDER_COLOR","FLOATING_PANEL_MUTED_FG_COLOR","FLOATING_PANEL_SHADOW","DRAWER_HEADER_PADDING_Y","DRAWER_HEADER_PADDING_X","DRAWER_HEADER_GAP","DRAWER_CONTENT_PADDING","DRAWER_CLOSE_BUTTON_FONT_SIZE","SPLIT_HANDLE_THICKNESS","HORIZONTAL_DIVIDER_WIDTH"],"mappings":"aAgDO,MAAMA,EAA2B,iEAC3BC,EAA4B,iEAC5BC,EAA6B,kEAK7BC,EAA4B,gEAC5BC,EAAwB,6DAaxBC,EAAqB,2DACrBC,EAA4B,2EAM5BC,EAA4B,iCAC5BC,EAA8B,sCAC9BC,EAA2B,mCAC3BC,EAA6B,qCAC7BC,EAAgC,yDAChCC,EAAwB,uDAKxBC,EAA6B,+CAC7BC,EAA2B,sEAQ3BC,EAAwB,yCACxBC,EAAwB,yCAwBxBC,EAAiB,iCAKjBC,EAAsB,sCAO5B,MAAMC,EAA+B,+CAC/BC,EAA8B,8CAW9BC,EAAY,6BACZC,EAAoB,qCAUpBC,EAA0BJ,EAC1BK,EAAwB,mCAKxBC,EAAwB,EAKxBC,EAA6B,8CAC7BC,EAAgC,sDAKhCC,EAAuBP,EACvBQ,EAA4BX,EAC5BY,EAA6Bb,EAC7Bc,EAA4B5B,EAC5B6B,EAAwB5B,EAExB6B,EAA0B,EAK1BC,EAA2BZ,EAC3Ba,EAA4B,mDAC5BC,EAA4B,mDAK5BC,EAA8B,mDAC9BC,EAAsC,+CAKtCC,EAA8BlC,EAC9BmC,EAA+BlC,EAU/BmC,EAA+B,wCAC/BC,EAAqB,2CACrBC,EAAkC,wDAClCC,EAAkC,yDAClCC,EAAiC,wDACjCC,EAAgC,iDAChCC,EAA8B,oDAC9BC,EAA+BzC,EAC/B0C,EAAiCzC,EACjC0C,EAA8BzC,EAC9B0C,EAAgCzC,EAChC0C,EAAwBzC,EAKxB0C,EAA0B,iDAC1BC,GAA0B,iDAC1BC,GAAoB,0CACpBC,GAAyB,gDACzBC,GAAgC,iDAQhCC,GAAyBtC,EAKzBuC,GAA2B"}
@@ -0,0 +1,51 @@
1
+ const I = "rpl", l = "var(--rpl-color-resize-handle-idle, rgba(255, 255, 255, 0.12))", N = "var(--rpl-color-resize-handle-hover, rgba(33, 150, 243, 0.35))", T = "var(--rpl-color-resize-handle-active, rgba(33, 150, 243, 0.55))", a = "var(--rpl-color-drop-suggest-border, rgba(90, 150, 255, 0.9))", _ = "var(--rpl-color-drop-suggest-bg, rgba(90, 150, 255, 0.15))", r = "var(--rpl-color-insert-guide, rgba(120, 160, 255, 0.95))", s = "var(--rpl-color-insert-guide-shadow, 0 0 0 2px rgba(120, 160, 255, 0.2))", E = "var(--rpl-color-surface, #fff)", o = "var(--rpl-color-surface-2, #fafafa)", R = "var(--rpl-color-border, #e5e7eb)", n = "var(--rpl-color-muted-fg, #6b7280)", e = "var(--rpl-shadow-card, 0 2px 10px rgba(0, 0, 0, 0.08))", S = "var(--rpl-color-drawer-backdrop, rgba(0, 0, 0, 0.5))", i = "var(--rpl-drawer-transition-duration, 220ms)", G = "var(--rpl-drawer-transition-easing, cubic-bezier(0.22, 1, 0.36, 1))", L = "var(--rpl-pivot-animation-enter, none)", d = "var(--rpl-pivot-animation-leave, none)", t = "var(--rpl-radius-suggest, 6px)", O = "var(--rpl-size-suggest-border, 2px)";
2
+ const D = "var(--rpl-size-resize-handle-thickness, 4px)", p = "var(--rpl-size-split-handle-thickness, 6px)", A = "var(--rpl-z-overlay, 9998)", c = "var(--rpl-z-tabdrag-overlay, 9999)", v = D, g = "var(--rpl-z-resize-handle, 1000)", C = 4, P = "var(--rpl-size-grid-layer-corner-hit, 14px)", H = "var(--rpl-size-grid-layer-edge-hit-thickness, 12px)", x = A, U = O, F = t, b = a, f = _, h = 6, B = c, z = "var(--rpl-space-tab-drag-preview-offset-x, 12px)", Z = "var(--rpl-space-tab-drag-preview-offset-y, 12px)", u = "var(--rpl-size-tab-drag-insert-guide-width, 2px)", W = "var(--rpl-radius-tab-drag-insert-guide, 1px)", w = r, V = s, K = "var(--rpl-radius-floating-panel, 8px)", y = "var(--rpl-space-floating-panel-gap, 8px)", X = "var(--rpl-space-floating-panel-header-padding-y, 8px)", Y = "var(--rpl-space-floating-panel-header-padding-x, 12px)", m = "var(--rpl-space-floating-panel-content-padding, 12px)", M = "var(--rpl-size-floating-panel-meta-font, 12px)", k = "var(--rpl-space-floating-panel-controls-gap, 6px)", j = E, q = o, J = R, Q = n, $ = e, aa = "var(--rpl-space-drawer-header-padding-y, 10px)", _a = "var(--rpl-space-drawer-header-padding-x, 12px)", ra = "var(--rpl-space-drawer-header-gap, 8px)", sa = "var(--rpl-space-drawer-content-padding, 12px)", Ea = "var(--rpl-size-drawer-close-button-font, 18px)", oa = p, Ra = "var(--rpl-size-horizontal-divider-width, 4px)";
3
+ export {
4
+ f as A,
5
+ U as B,
6
+ S as C,
7
+ i as D,
8
+ b as E,
9
+ $ as F,
10
+ H as G,
11
+ Ra as H,
12
+ h as I,
13
+ Z as J,
14
+ V as K,
15
+ w as L,
16
+ W as M,
17
+ u as N,
18
+ B as O,
19
+ L as P,
20
+ I as Q,
21
+ v as R,
22
+ oa as S,
23
+ z as T,
24
+ j as a,
25
+ J as b,
26
+ K as c,
27
+ q as d,
28
+ X as e,
29
+ Y as f,
30
+ y as g,
31
+ M as h,
32
+ Q as i,
33
+ k as j,
34
+ m as k,
35
+ d as l,
36
+ G as m,
37
+ sa as n,
38
+ ra as o,
39
+ aa as p,
40
+ _a as q,
41
+ Ea as r,
42
+ P as s,
43
+ T as t,
44
+ N as u,
45
+ l as v,
46
+ g as w,
47
+ C as x,
48
+ x as y,
49
+ F as z
50
+ };
51
+ //# sourceMappingURL=styles-w0ZixggV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles-w0ZixggV.js","sources":["../src/constants/styles.ts"],"sourcesContent":["/**\n * @file Style constants for library components\n *\n * These constants reference CSS variables defined in variables.css.\n * This allows users to override theme values via CSS while maintaining\n * type-safe constants in TypeScript.\n *\n * All CSS variables use the unified prefix: --rpl- (react-panel-layout)\n * Users can override these via CSS variables (--rpl-*)\n *\n * @example\n * // In your CSS:\n * :root {\n * --rpl-color-primary: #ff0000;\n * }\n */\n\n// ========================================\n// CSS VARIABLE PREFIX\n// ========================================\n\n/**\n * Unified CSS variable prefix for all react-panel-layout variables\n * All theme variables use this prefix: --rpl-*\n */\nexport const CSS_VAR_PREFIX = 'rpl';\n\n// ========================================\n// COLORS\n// ========================================\n\n/**\n * Tab colors - used in TabBar component\n */\nexport const COLOR_TAB_FG = \"var(--rpl-color-tab-fg, #d5d7de)\";\nexport const COLOR_TAB_ACTIVE_BG = \"var(--rpl-color-tab-active-bg, #2b2d35)\";\nexport const COLOR_TABBAR_BG = \"var(--rpl-color-tabbar-bg, #1e1f24)\";\n\n/**\n * Panel colors - used in panel layouts\n */\nexport const COLOR_PANEL_BORDER = \"var(--rpl-color-panel-border, rgba(0, 0, 0, 0.3))\";\nexport const COLOR_PANEL_BG = \"var(--rpl-color-panel-bg, #0b0b0c)\";\n\n/**\n * Primary color - used for resize handles, highlights\n */\nexport const COLOR_PRIMARY = \"var(--rpl-color-primary, #2196f3)\";\nexport const COLOR_RESIZE_HANDLE_IDLE = \"var(--rpl-color-resize-handle-idle, rgba(255, 255, 255, 0.12))\";\nexport const COLOR_RESIZE_HANDLE_HOVER = \"var(--rpl-color-resize-handle-hover, rgba(33, 150, 243, 0.35))\";\nexport const COLOR_RESIZE_HANDLE_ACTIVE = \"var(--rpl-color-resize-handle-active, rgba(33, 150, 243, 0.55))\";\n\n/**\n * Drop suggestion overlay colors\n */\nexport const COLOR_DROP_SUGGEST_BORDER = \"var(--rpl-color-drop-suggest-border, rgba(90, 150, 255, 0.9))\";\nexport const COLOR_DROP_SUGGEST_BG = \"var(--rpl-color-drop-suggest-bg, rgba(90, 150, 255, 0.15))\";\n\n/**\n * Tab drag overlay colors\n */\nexport const COLOR_TABDRAG_BG = \"var(--rpl-color-tabdrag-bg, rgba(34, 36, 42, 0.95))\";\nexport const COLOR_TABDRAG_FG = \"var(--rpl-color-tabdrag-fg, #e9ebf0)\";\nexport const COLOR_TABDRAG_BORDER = \"var(--rpl-color-tabdrag-border, rgba(120, 160, 255, 0.6))\";\nexport const COLOR_TABDRAG_SHADOW = \"var(--rpl-color-tabdrag-shadow, 0 6px 20px rgba(0, 0, 0, 0.35))\";\n\n/**\n * Insert guide colors\n */\nexport const COLOR_INSERT_GUIDE = \"var(--rpl-color-insert-guide, rgba(120, 160, 255, 0.95))\";\nexport const COLOR_INSERT_GUIDE_SHADOW = \"var(--rpl-color-insert-guide-shadow, 0 0 0 2px rgba(120, 160, 255, 0.2))\";\n\n/**\n * Node editor / floating panel colors\n * These are used by Drawer and FloatingPanelFrame components\n */\nexport const COLOR_NODE_EDITOR_SURFACE = \"var(--rpl-color-surface, #fff)\";\nexport const COLOR_NODE_EDITOR_SURFACE_2 = \"var(--rpl-color-surface-2, #fafafa)\";\nexport const COLOR_NODE_EDITOR_BORDER = \"var(--rpl-color-border, #e5e7eb)\";\nexport const COLOR_NODE_EDITOR_MUTED_FG = \"var(--rpl-color-muted-fg, #6b7280)\";\nexport const COLOR_NODE_EDITOR_CARD_SHADOW = \"var(--rpl-shadow-card, 0 2px 10px rgba(0, 0, 0, 0.08))\";\nexport const COLOR_DRAWER_BACKDROP = \"var(--rpl-color-drawer-backdrop, rgba(0, 0, 0, 0.5))\";\n\n/**\n * Drawer transitions\n */\nexport const DRAWER_TRANSITION_DURATION = \"var(--rpl-drawer-transition-duration, 220ms)\";\nexport const DRAWER_TRANSITION_EASING = \"var(--rpl-drawer-transition-easing, cubic-bezier(0.22, 1, 0.36, 1))\";\n\n/**\n * Pivot animations\n * User defines @keyframes in their CSS and references via these tokens.\n * - Enter: Applied when content becomes active\n * - Leave: Applied when content becomes inactive\n */\nexport const PIVOT_ANIMATION_ENTER = \"var(--rpl-pivot-animation-enter, none)\";\nexport const PIVOT_ANIMATION_LEAVE = \"var(--rpl-pivot-animation-leave, none)\";\n\n// ========================================\n// SIZING & SPACING\n// ========================================\n\n/**\n * Tab sizing\n */\nexport const SIZE_TAB_FONT = \"var(--rpl-size-tab-font, 12px)\";\nexport const SPACE_TAB_PADDING_Y = \"var(--rpl-space-tab-padding-y, 4px)\";\nexport const SPACE_TAB_PADDING_X = \"var(--rpl-space-tab-padding-x, 8px)\";\n\n/**\n * Tabbar spacing\n */\nexport const SPACE_TABBAR_GAP = \"var(--rpl-space-tabbar-gap, 6px)\";\nexport const SPACE_TABBAR_PADDING_Y = \"var(--rpl-space-tabbar-padding-y, 4px)\";\nexport const SPACE_TABBAR_PADDING_X = \"var(--rpl-space-tabbar-padding-x, 6px)\";\n\n/**\n * Border radius (decorative, using CSS variables)\n */\nexport const RADIUS_TAB = \"var(--rpl-radius-tab, 4px)\";\nexport const RADIUS_SUGGEST = \"var(--rpl-radius-suggest, 6px)\";\n\n/**\n * Border widths\n */\nexport const SIZE_SUGGEST_BORDER = \"var(--rpl-size-suggest-border, 2px)\";\n\n/**\n * Handle thicknesses\n * Note: SIZE_GRID_HANDLE_THICKNESS is kept as number for JavaScript calculations\n */\nexport const SIZE_GRID_HANDLE_THICKNESS = 4; // Used in GridTrackResizeHandle.tsx for offset calculation\nexport const SIZE_RESIZE_HANDLE_THICKNESS = \"var(--rpl-size-resize-handle-thickness, 4px)\";\nexport const SIZE_SPLIT_HANDLE_THICKNESS = \"var(--rpl-size-split-handle-thickness, 6px)\";\n\n/**\n * Drop suggest padding\n */\nexport const SPACE_DROP_SUGGEST_PADDING = \"var(--rpl-space-drop-suggest-padding, 6px)\";\n\n// ========================================\n// Z-INDEXES\n// ========================================\n\nexport const Z_OVERLAY = \"var(--rpl-z-overlay, 9998)\";\nexport const Z_TABDRAG_OVERLAY = \"var(--rpl-z-tabdrag-overlay, 9999)\";\nexport const Z_DIALOG_OVERLAY = \"var(--rpl-z-dialog-overlay, 10000)\";\n\n// ========================================\n// COMPONENT-SPECIFIC CONSTANTS\n// ========================================\n\n/**\n * Resize Handle\n */\nexport const RESIZE_HANDLE_THICKNESS = SIZE_RESIZE_HANDLE_THICKNESS;\nexport const RESIZE_HANDLE_Z_INDEX = \"var(--rpl-z-resize-handle, 1000)\";\n\n/**\n * Grid Track Resize Handle\n */\nexport const GRID_HANDLE_THICKNESS = SIZE_GRID_HANDLE_THICKNESS;\n\n/**\n * Grid Layer Resize Handles\n */\nexport const GRID_LAYER_CORNER_HIT_SIZE = \"var(--rpl-size-grid-layer-corner-hit, 14px)\";\nexport const GRID_LAYER_EDGE_HIT_THICKNESS = \"var(--rpl-size-grid-layer-edge-hit-thickness, 12px)\";\n\n/**\n * Drop Suggest Overlay\n */\nexport const DROP_SUGGEST_Z_INDEX = Z_OVERLAY;\nexport const DROP_SUGGEST_BORDER_WIDTH = SIZE_SUGGEST_BORDER;\nexport const DROP_SUGGEST_BORDER_RADIUS = RADIUS_SUGGEST;\nexport const DROP_SUGGEST_BORDER_COLOR = COLOR_DROP_SUGGEST_BORDER;\nexport const DROP_SUGGEST_BG_COLOR = COLOR_DROP_SUGGEST_BG;\nexport const DROP_SUGGEST_PADDING = SPACE_DROP_SUGGEST_PADDING;\nexport const DROP_SUGGEST_PADDING_PX = 6;\n\n/**\n * Tab Drag Overlay\n */\nexport const TAB_DRAG_OVERLAY_Z_INDEX = Z_TABDRAG_OVERLAY;\nexport const TAB_DRAG_PREVIEW_OFFSET_X = \"var(--rpl-space-tab-drag-preview-offset-x, 12px)\";\nexport const TAB_DRAG_PREVIEW_OFFSET_Y = \"var(--rpl-space-tab-drag-preview-offset-y, 12px)\";\nexport const TAB_DRAG_PREVIEW_BORDER_RADIUS = \"var(--rpl-radius-tab-drag-preview, 6px)\";\nexport const TAB_DRAG_PREVIEW_PADDING_Y = \"var(--rpl-space-tab-drag-preview-padding-y, 4px)\";\nexport const TAB_DRAG_PREVIEW_PADDING_X = \"var(--rpl-space-tab-drag-preview-padding-x, 8px)\";\nexport const TAB_DRAG_PREVIEW_FONT_SIZE = \"var(--rpl-size-tab-drag-preview-font, 12px)\";\nexport const TAB_DRAG_INSERT_GUIDE_WIDTH = \"var(--rpl-size-tab-drag-insert-guide-width, 2px)\";\nexport const TAB_DRAG_INSERT_GUIDE_BORDER_RADIUS = \"var(--rpl-radius-tab-drag-insert-guide, 1px)\";\nexport const TAB_DRAG_PREVIEW_BG_COLOR = COLOR_TABDRAG_BG;\nexport const TAB_DRAG_PREVIEW_FG_COLOR = COLOR_TABDRAG_FG;\nexport const TAB_DRAG_PREVIEW_BORDER_COLOR = COLOR_TABDRAG_BORDER;\nexport const TAB_DRAG_PREVIEW_SHADOW = COLOR_TABDRAG_SHADOW;\nexport const TAB_DRAG_INSERT_GUIDE_COLOR = COLOR_INSERT_GUIDE;\nexport const TAB_DRAG_INSERT_GUIDE_SHADOW = COLOR_INSERT_GUIDE_SHADOW;\n\n/**\n * Dialog Overlay\n */\nexport const DIALOG_OVERLAY_Z_INDEX = Z_DIALOG_OVERLAY;\n\n/**\n * Floating Panel Frame\n */\nexport const FLOATING_PANEL_BORDER_RADIUS = \"var(--rpl-radius-floating-panel, 8px)\";\nexport const FLOATING_PANEL_GAP = \"var(--rpl-space-floating-panel-gap, 8px)\";\nexport const FLOATING_PANEL_HEADER_PADDING_Y = \"var(--rpl-space-floating-panel-header-padding-y, 8px)\";\nexport const FLOATING_PANEL_HEADER_PADDING_X = \"var(--rpl-space-floating-panel-header-padding-x, 12px)\";\nexport const FLOATING_PANEL_CONTENT_PADDING = \"var(--rpl-space-floating-panel-content-padding, 12px)\";\nexport const FLOATING_PANEL_META_FONT_SIZE = \"var(--rpl-size-floating-panel-meta-font, 12px)\";\nexport const FLOATING_PANEL_CONTROLS_GAP = \"var(--rpl-space-floating-panel-controls-gap, 6px)\";\nexport const FLOATING_PANEL_SURFACE_COLOR = COLOR_NODE_EDITOR_SURFACE;\nexport const FLOATING_PANEL_SURFACE_2_COLOR = COLOR_NODE_EDITOR_SURFACE_2;\nexport const FLOATING_PANEL_BORDER_COLOR = COLOR_NODE_EDITOR_BORDER;\nexport const FLOATING_PANEL_MUTED_FG_COLOR = COLOR_NODE_EDITOR_MUTED_FG;\nexport const FLOATING_PANEL_SHADOW = COLOR_NODE_EDITOR_CARD_SHADOW;\n\n/**\n * Drawer\n */\nexport const DRAWER_HEADER_PADDING_Y = \"var(--rpl-space-drawer-header-padding-y, 10px)\";\nexport const DRAWER_HEADER_PADDING_X = \"var(--rpl-space-drawer-header-padding-x, 12px)\";\nexport const DRAWER_HEADER_GAP = \"var(--rpl-space-drawer-header-gap, 8px)\";\nexport const DRAWER_CONTENT_PADDING = \"var(--rpl-space-drawer-content-padding, 12px)\";\nexport const DRAWER_CLOSE_BUTTON_FONT_SIZE = \"var(--rpl-size-drawer-close-button-font, 18px)\";\nexport const DRAWER_SURFACE_COLOR = COLOR_NODE_EDITOR_SURFACE;\nexport const DRAWER_BORDER_COLOR = COLOR_NODE_EDITOR_BORDER;\nexport const DRAWER_SHADOW = COLOR_NODE_EDITOR_CARD_SHADOW;\n\n/**\n * Split Handles\n */\nexport const SPLIT_HANDLE_THICKNESS = SIZE_SPLIT_HANDLE_THICKNESS;\n\n/**\n * HorizontalDivider\n */\nexport const HORIZONTAL_DIVIDER_WIDTH = \"var(--rpl-size-horizontal-divider-width, 4px)\";\nexport const HORIZONTAL_DIVIDER_HIT_AREA_OFFSET = \"var(--rpl-space-horizontal-divider-hit-area-offset, 4px)\";\n"],"names":["CSS_VAR_PREFIX","COLOR_RESIZE_HANDLE_IDLE","COLOR_RESIZE_HANDLE_HOVER","COLOR_RESIZE_HANDLE_ACTIVE","COLOR_DROP_SUGGEST_BORDER","COLOR_DROP_SUGGEST_BG","COLOR_INSERT_GUIDE","COLOR_INSERT_GUIDE_SHADOW","COLOR_NODE_EDITOR_SURFACE","COLOR_NODE_EDITOR_SURFACE_2","COLOR_NODE_EDITOR_BORDER","COLOR_NODE_EDITOR_MUTED_FG","COLOR_NODE_EDITOR_CARD_SHADOW","COLOR_DRAWER_BACKDROP","DRAWER_TRANSITION_DURATION","DRAWER_TRANSITION_EASING","PIVOT_ANIMATION_ENTER","PIVOT_ANIMATION_LEAVE","RADIUS_SUGGEST","SIZE_SUGGEST_BORDER","SIZE_RESIZE_HANDLE_THICKNESS","SIZE_SPLIT_HANDLE_THICKNESS","Z_OVERLAY","Z_TABDRAG_OVERLAY","RESIZE_HANDLE_THICKNESS","RESIZE_HANDLE_Z_INDEX","GRID_HANDLE_THICKNESS","GRID_LAYER_CORNER_HIT_SIZE","GRID_LAYER_EDGE_HIT_THICKNESS","DROP_SUGGEST_Z_INDEX","DROP_SUGGEST_BORDER_WIDTH","DROP_SUGGEST_BORDER_RADIUS","DROP_SUGGEST_BORDER_COLOR","DROP_SUGGEST_BG_COLOR","DROP_SUGGEST_PADDING_PX","TAB_DRAG_OVERLAY_Z_INDEX","TAB_DRAG_PREVIEW_OFFSET_X","TAB_DRAG_PREVIEW_OFFSET_Y","TAB_DRAG_INSERT_GUIDE_WIDTH","TAB_DRAG_INSERT_GUIDE_BORDER_RADIUS","TAB_DRAG_INSERT_GUIDE_COLOR","TAB_DRAG_INSERT_GUIDE_SHADOW","FLOATING_PANEL_BORDER_RADIUS","FLOATING_PANEL_GAP","FLOATING_PANEL_HEADER_PADDING_Y","FLOATING_PANEL_HEADER_PADDING_X","FLOATING_PANEL_CONTENT_PADDING","FLOATING_PANEL_META_FONT_SIZE","FLOATING_PANEL_CONTROLS_GAP","FLOATING_PANEL_SURFACE_COLOR","FLOATING_PANEL_SURFACE_2_COLOR","FLOATING_PANEL_BORDER_COLOR","FLOATING_PANEL_MUTED_FG_COLOR","FLOATING_PANEL_SHADOW","DRAWER_HEADER_PADDING_Y","DRAWER_HEADER_PADDING_X","DRAWER_HEADER_GAP","DRAWER_CONTENT_PADDING","DRAWER_CLOSE_BUTTON_FONT_SIZE","SPLIT_HANDLE_THICKNESS","HORIZONTAL_DIVIDER_WIDTH"],"mappings":"AAyBO,MAAMA,IAAiB,OAuBjBC,IAA2B,kEAC3BC,IAA4B,kEAC5BC,IAA6B,mEAK7BC,IAA4B,iEAC5BC,IAAwB,8DAaxBC,IAAqB,4DACrBC,IAA4B,4EAM5BC,IAA4B,kCAC5BC,IAA8B,uCAC9BC,IAA2B,oCAC3BC,IAA6B,sCAC7BC,IAAgC,0DAChCC,IAAwB,wDAKxBC,IAA6B,gDAC7BC,IAA2B,uEAQ3BC,IAAwB,0CACxBC,IAAwB,0CAwBxBC,IAAiB,kCAKjBC,IAAsB;AAO5B,MAAMC,IAA+B,gDAC/BC,IAA8B,+CAW9BC,IAAY,8BACZC,IAAoB,sCAUpBC,IAA0BJ,GAC1BK,IAAwB,oCAKxBC,IAAwB,GAKxBC,IAA6B,+CAC7BC,IAAgC,uDAKhCC,IAAuBP,GACvBQ,IAA4BX,GAC5BY,IAA6Bb,GAC7Bc,IAA4B5B,GAC5B6B,IAAwB5B,GAExB6B,IAA0B,GAK1BC,IAA2BZ,GAC3Ba,IAA4B,oDAC5BC,IAA4B,oDAK5BC,IAA8B,oDAC9BC,IAAsC,gDAKtCC,IAA8BlC,GAC9BmC,IAA+BlC,GAU/BmC,IAA+B,yCAC/BC,IAAqB,4CACrBC,IAAkC,yDAClCC,IAAkC,0DAClCC,IAAiC,yDACjCC,IAAgC,kDAChCC,IAA8B,qDAC9BC,IAA+BzC,GAC/B0C,IAAiCzC,GACjC0C,IAA8BzC,GAC9B0C,IAAgCzC,GAChC0C,IAAwBzC,GAKxB0C,KAA0B,kDAC1BC,KAA0B,kDAC1BC,KAAoB,2CACpBC,KAAyB,iDACzBC,KAAgC,kDAQhCC,KAAyBtC,GAKzBuC,KAA2B;"}
package/dist/types.d.ts CHANGED
@@ -49,21 +49,101 @@ export type PopupWindowFactoryConfig = {
49
49
  bounds: WindowBounds;
50
50
  };
51
51
  export type FloatingWindowMode = "embedded" | "popup";
52
- export type FloatingWindowConfig = {
53
- mode?: FloatingWindowMode;
52
+ export type FloatingHeaderConfig = {
53
+ /** Header title text */
54
+ title?: string;
55
+ /** Show close button (requires onClose callback) */
56
+ showCloseButton?: boolean;
57
+ };
58
+ export type FloatingBehavior = {
59
+ /** Controlled position - when defined, component uses this value directly */
60
+ position?: WindowPosition;
61
+ /** Initial position for uncontrolled mode */
62
+ defaultPosition?: WindowPosition;
63
+ /** Controlled size - when defined, component uses this value directly */
64
+ size?: WindowSize;
65
+ /** Initial size for uncontrolled mode */
66
+ defaultSize?: WindowSize;
67
+ /** Z-index for stacking order */
68
+ zIndex?: number;
69
+ /** Enable drag-to-move functionality */
54
70
  draggable?: boolean;
71
+ /** Enable resize handles */
55
72
  resizable?: boolean;
73
+ /** Size constraints for resizing */
56
74
  constraints?: WindowConstraints;
75
+ /** Called when position changes (drag/move) */
57
76
  onMove?: (position: WindowPosition) => void;
77
+ /** Called when size changes (resize) */
58
78
  onResize?: (size: WindowSize) => void;
79
+ /** Called when close button is clicked */
80
+ onClose?: () => void;
81
+ /**
82
+ * Use built-in chrome (FloatingPanelFrame with border, shadow, background).
83
+ * When true and header is provided, header auto-enables drag handle.
84
+ * Defaults to false.
85
+ */
86
+ chrome?: boolean;
87
+ /**
88
+ * Header configuration (renders header when provided).
89
+ * When chrome is true and header is provided, header becomes the drag handle.
90
+ */
91
+ header?: FloatingHeaderConfig;
92
+ /** Accessible label when header.title is not provided */
93
+ ariaLabel?: string;
94
+ /**
95
+ * Transition mode for position/size changes.
96
+ * - "css" uses CSS transitions.
97
+ * - "none" disables transitions.
98
+ */
99
+ transitionMode?: "css" | "none";
100
+ /** Override transition duration (e.g., "200ms") */
101
+ transitionDuration?: string;
102
+ /** Override transition easing (e.g., "ease-out") */
103
+ transitionEasing?: string;
104
+ /** Display mode: "embedded" (default) or "popup" (browser window) */
105
+ mode?: FloatingWindowMode;
106
+ /** Popup-specific options when mode is "popup" */
59
107
  popup?: PopupWindowOptions;
60
108
  };
109
+ export type PivotBehaviorItem = {
110
+ /** Unique identifier for this content item */
111
+ id: string;
112
+ /** Human-readable label (optional) */
113
+ label?: string;
114
+ /** The actual content to render when this item is active */
115
+ content: React.ReactNode;
116
+ /** Whether this item can be selected */
117
+ disabled?: boolean;
118
+ };
119
+ export type PivotBehavior = {
120
+ /** Array of content items to switch between */
121
+ items: PivotBehaviorItem[];
122
+ /** Currently active item ID (controlled mode) */
123
+ activeId?: string;
124
+ /** Default active item ID (uncontrolled mode) */
125
+ defaultActiveId?: string;
126
+ /** Callback when active item changes */
127
+ onActiveChange?: (id: string) => void;
128
+ /**
129
+ * Transition mode for content switching.
130
+ * - "css" (default) uses CSS transitions via design tokens.
131
+ * - "none" disables transitions (uses React.Activity for memory optimization).
132
+ */
133
+ transitionMode?: "css" | "none";
134
+ };
61
135
  export type DrawerBehavior = {
62
136
  /** Optional controlled state */
63
137
  defaultOpen?: boolean;
64
138
  open?: boolean;
65
139
  /** Whether clicking backdrop dismisses the drawer */
66
140
  dismissible?: boolean;
141
+ /**
142
+ * Anchor edge for the drawer.
143
+ * - "left", "right", "top", "bottom"
144
+ * - When not specified, inferred from position prop
145
+ */
146
+ anchor?: "left" | "right" | "top" | "bottom";
67
147
  /**
68
148
  * Transition mode for drawer visibility.
69
149
  * - "css" (default) uses CSS transform transitions.
@@ -117,17 +197,39 @@ export type LayerDefinition = {
117
197
  * If `floating` is present, behaves as absolute (embedded) or relative (popup).
118
198
  */
119
199
  positionMode?: LayerPositionMode;
120
- /** Absolute/fixed offsets when positionMode !== 'grid'. */
200
+ /**
201
+ * Position offsets for non-floating layers (drawer, absolute positioned).
202
+ * For floating layers, use `floating.position` or `floating.defaultPosition` instead.
203
+ */
121
204
  position?: WindowPosition;
205
+ /**
206
+ * Stacking order for non-floating layers.
207
+ * For floating layers, use `floating.zIndex` instead.
208
+ */
122
209
  zIndex?: number;
210
+ /**
211
+ * Width for non-floating layers.
212
+ * For floating layers, use `floating.size` or `floating.defaultSize` instead.
213
+ */
123
214
  width?: string | number;
215
+ /**
216
+ * Height for non-floating layers.
217
+ * For floating layers, use `floating.size` or `floating.defaultSize` instead.
218
+ */
124
219
  height?: string | number;
125
220
  pointerEvents?: boolean | "auto" | "none";
126
221
  /** Optional backdrop style (used by DrawerBehaviour) */
127
222
  backdropStyle?: React.CSSProperties;
128
223
  drawer?: DrawerBehavior;
129
- floating?: FloatingWindowConfig;
224
+ /** Floating window behavior configuration */
225
+ floating?: FloatingBehavior;
226
+ pivot?: PivotBehavior;
130
227
  style?: React.CSSProperties;
228
+ /**
229
+ * When true, enables scrolling within this panel (overflow: auto).
230
+ * When false or omitted, content overflow is hidden (default behavior).
231
+ */
232
+ scrollable?: boolean;
131
233
  };
132
234
  export type PanelLayoutProps = {
133
235
  config: PanelLayoutConfig;
@@ -0,0 +1,2 @@
1
+ "use strict";const d=require("react/jsx-runtime"),j=require("react"),y=require("./styles-DcG3aIFx.cjs");function R(s){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const o in s)if(o!=="default"){const u=Object.getOwnPropertyDescriptor(s,o);Object.defineProperty(e,o,u.get?u:{enumerable:!0,get:()=>s[o]})}}return e.default=s,Object.freeze(e)}const n=R(j),C=typeof window<"u"&&typeof window.document<"u",w=C?n.useLayoutEffect:n.useEffect,N={position:"absolute",inset:0,width:"100%",height:"100%"},S=n.memo(({id:s,isActive:e,transitionMode:o,children:u})=>{const i=n.useRef(null),r=n.useRef(e);w(()=>{if(o!=="css"||!i.current)return;const a=i.current,c=r.current;r.current=e,c!==e&&(a.style.animation="none",a.offsetHeight,a.style.animation="")},[e,o]);const l=n.useMemo(()=>{const a={...N,pointerEvents:e?"auto":"none",opacity:e?1:0};return o==="css"&&(a.animation=e?y.PIVOT_ANIMATION_ENTER:y.PIVOT_ANIMATION_LEAVE),a},[e,o]),f=d.jsx("div",{ref:i,"data-pivot-content":s,"data-active":e?"true":"false",style:l,children:u});return o==="none"?d.jsx(n.Activity,{mode:e?"visible":"hidden",children:f}):f}),E=n.createContext(null),A=n.memo(()=>{const s=n.useContext(E);if(!s)throw new Error("PivotOutlet must be used within usePivot");const[,e]=n.useReducer(r=>r+1,0);n.useEffect(()=>s.subscribe(e),[s]);const{items:o,activeId:u,transitionMode:i}=s.getState();return d.jsx(d.Fragment,{children:o.map(r=>d.jsx(S,{id:r.id,isActive:r.id===u,transitionMode:i,children:r.content},r.id))})});function _(s){const{items:e,activeId:o,defaultActiveId:u,onActiveChange:i,transitionMode:r="css"}=s,l=o!==void 0,[f,a]=n.useState(()=>{if(u!==void 0)return u;const t=e.find(v=>v.disabled!==!0);if(!t)throw new Error("usePivot: No enabled items provided");return t.id}),c=l?o:f,m=n.useCallback(t=>{const v=e.find(x=>x.id===t);v&&(v.disabled||(l||a(t),i?.(t)))},[e,l,i]),O=n.useCallback(t=>t===c,[c]),P=n.useCallback(t=>({"data-pivot-item":t,"data-active":t===c?"true":"false","aria-selected":t===c,tabIndex:t===c?0:-1,onClick:()=>{m(t)}}),[c,m]),b=n.useMemo(()=>({position:"relative",width:"100%",height:"100%"}),[]),h=n.useRef({items:e,activeId:c,transitionMode:r});h.current={items:e,activeId:c,transitionMode:r};const p=n.useRef(new Set);n.useEffect(()=>{p.current.forEach(t=>t())},[c,r]);const I=n.useMemo(()=>({getState:()=>h.current,subscribe:t=>(p.current.add(t),()=>p.current.delete(t))}),[]),g=n.useMemo(()=>{const t=()=>d.jsx(E.Provider,{value:I,children:d.jsx("div",{style:b,"data-pivot-container":!0,children:d.jsx(A,{})})});return t.displayName="PivotOutlet",t},[I,b]);return{activeId:c,setActiveId:m,isActive:O,getItemProps:P,Outlet:g}}exports.useIsomorphicLayoutEffect=w;exports.usePivot=_;
2
+ //# sourceMappingURL=usePivot-C8q0pMgW.cjs.map