@labpane/os 1.0.0 → 1.2.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.
@@ -0,0 +1,6 @@
1
+ import type { TabHistory, TabHistoryStore } from "./tab-history.js";
2
+ export declare function createBrowserHistory(front: () => TabHistory | undefined): {
3
+ sync: () => void;
4
+ pop: (event: PopStateEvent) => void;
5
+ };
6
+ export declare function useBrowserHistory(front?: TabHistoryStore): void;
@@ -59,6 +59,12 @@ export declare function useWorkspaceIds(): {
59
59
  tab: (key: string) => string;
60
60
  panel: (key: string) => string;
61
61
  };
62
+ export declare const TabLinks: import("react").Context<Map<string, HTMLElement>>;
63
+ export declare function useTabLinks(): {
64
+ register: (key: string) => (element: HTMLElement | null) => void;
65
+ get: (key: string) => HTMLElement | undefined;
66
+ focus: (key: string) => number;
67
+ };
62
68
  export type WorkspaceAction = {
63
69
  label: string;
64
70
  onSelect: () => void;
@@ -2,5 +2,9 @@ export { Workspace, type WorkspaceTab, type WorkspaceProps, type WorkspacePane,
2
2
  export { WorkspaceFrame } from "./workspace-frame.js";
3
3
  export { densityPresets, densitySize, type Density as WorkspaceDensity, type WorkspaceAction, type WorkspaceMenu, } from "./context.js";
4
4
  export { useUnsavedChanges } from "./unsaved-changes.js";
5
+ export { useTabActive, useTabVisible, useTabVisibleRef, useShownOnce, type TabState, } from "./tab-state.js";
6
+ export { useLeaveTab } from "./leave-tab.js";
7
+ export { useTabHistory, type TabHistory } from "./tab-history.js";
8
+ export { hasOpenOverlay } from "./overlay.js";
5
9
  export { restoreLayout, reconcileLayout, dockTab, panes, type Layout, type Pane, type Split, } from "./layout.js";
6
- export { WindowControls, useFullscreen, useWindowFrame, type WindowEdge, type WindowHost, } from "./window.js";
10
+ export { TrafficLights, WindowControls, desktopSlots, useFullscreen, useWindowFrame, type WindowEdge, type WindowHost, } from "./window.js";
@@ -0,0 +1,4 @@
1
+ import type { WorkspaceTab } from "./workspace.js";
2
+ export declare function useOpeners(tabs: readonly WorkspaceTab[], front?: string): Map<string, string>;
3
+ export declare const LeaveTab: import("react").Context<() => void>;
4
+ export declare function useLeaveTab(): () => void;
@@ -0,0 +1 @@
1
+ export declare function hasOpenOverlay(): boolean;
@@ -0,0 +1,17 @@
1
+ import type { WorkspaceTab } from "./workspace.js";
2
+ export type TabHistory = {
3
+ path: string;
4
+ canGoBack: boolean;
5
+ canGoForward: boolean;
6
+ navigate: (path: string) => void;
7
+ back: () => void;
8
+ forward: () => void;
9
+ };
10
+ export type TabHistoryStore = {
11
+ subscribe: (listener: () => void) => () => void;
12
+ get: () => TabHistory;
13
+ };
14
+ export declare function createTabHistory(initial: string): TabHistoryStore;
15
+ export declare const TabHistoryContext: import("react").Context<TabHistoryStore>;
16
+ export declare function useTabHistory(): TabHistory;
17
+ export declare function useTabHistories(tabs: readonly WorkspaceTab[]): (tab: WorkspaceTab) => TabHistoryStore;
@@ -0,0 +1,2 @@
1
+ import type { WorkspaceTab } from "./workspace.js";
2
+ export declare function useTabMap<V>(tabs: readonly WorkspaceTab[]): Map<string, V>;
@@ -0,0 +1,10 @@
1
+ import * as React from "react";
2
+ export type TabState = {
3
+ active: boolean;
4
+ visible: boolean;
5
+ };
6
+ export declare const TabStateContext: React.Context<TabState>;
7
+ export declare function useTabActive(): boolean;
8
+ export declare function useTabVisible(): boolean;
9
+ export declare function useTabVisibleRef(): React.RefObject<boolean>;
10
+ export declare function useShownOnce(visible: boolean): boolean;
@@ -1,3 +1,4 @@
1
+ import { type ReactNode } from "react";
1
2
  export type WindowEdge = "n" | "s" | "e" | "w" | "ne" | "nw" | "se" | "sw";
2
3
  export type WindowHost = {
3
4
  platform: "windows" | "macos" | "linux";
@@ -7,9 +8,23 @@ export type WindowHost = {
7
8
  drag?: () => void;
8
9
  resize?: (edge: WindowEdge) => void;
9
10
  fullscreen?: (on: boolean) => void;
11
+ trafficLights?: (center: number) => void;
10
12
  };
11
13
  export declare function useFullscreen(host?: WindowHost): readonly [boolean, (on: boolean) => void];
12
14
  export declare function useWindowFrame(host?: WindowHost): void;
15
+ export declare function TrafficLights({ host }: {
16
+ host: WindowHost;
17
+ }): import("react").JSX.Element | null;
18
+ export declare function desktopSlots(host: WindowHost | undefined, menu: ReactNode | ((align: "start" | "end") => ReactNode)): {
19
+ leading: ReactNode;
20
+ trailing: undefined;
21
+ } | {
22
+ leading: import("react").JSX.Element;
23
+ trailing: ReactNode;
24
+ } | {
25
+ leading: ReactNode;
26
+ trailing: import("react").JSX.Element;
27
+ };
13
28
  export declare function WindowControls({ host }: {
14
29
  host: WindowHost;
15
30
  }): import("react").JSX.Element | null;
@@ -20,11 +20,13 @@ export type WorkspaceProps<T extends WorkspaceTab> = {
20
20
  onDuplicate?: (key: string) => string;
21
21
  leading?: ReactNode;
22
22
  trailing?: ReactNode;
23
+ titleBar?: boolean;
23
24
  toolbar?: (pane: WorkspacePane) => ReactNode;
24
25
  menu?: WorkspaceMenu;
25
26
  confirmClose?: (tab: T) => boolean | Promise<boolean>;
26
27
  layout: Layout;
27
28
  onLayoutChange: (layout: Layout) => void;
29
+ history?: boolean;
28
30
  className?: string;
29
31
  children: (tab: T, pane: WorkspacePane) => ReactNode;
30
32
  empty: (pane: WorkspacePane) => ReactNode;
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- :where([class^=lab-],[class*=" lab-"]){box-sizing:border-box;margin:0;padding:0;border:0 solid}:where(button,a):is([class^=lab-],[class*=" lab-"]){font:inherit;color:inherit;background:transparent;text-decoration:none}:where(svg[class^=lab-],svg[class*=" lab-"]){display:block;vertical-align:middle}.lab-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.lab-workspace{position:relative;display:flex;flex-direction:column;height:100%;min-height:0;min-width:0;overflow:hidden;background-color:var(--lab-background);font-family:var(--lab-font-sans);font-size:.875rem;font-weight:400;line-height:1.5;color:var(--lab-foreground)}.lab-surface{min-height:0;flex:1;overflow:auto}.lab-board{position:relative;isolation:isolate;height:100%;width:100%;overflow:clip}.lab-pane-header,.lab-panel{position:absolute;transition-property:left,top,width,height;transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.18s}.lab-pane-header{z-index:30}.lab-panel{min-height:0;min-width:0;overflow:auto;overscroll-behavior:contain;border:1px solid var(--lab-border);border-radius:1rem;background-color:var(--lab-card);padding:.75rem;outline-style:none}.lab-panel:focus-visible:not([data-pointer]){box-shadow:inset 0 0 0 2px var(--lab-ring)}@media(min-width:40rem){.lab-panel{padding:1.25rem}}.lab-divider,.lab-frame-handle{position:absolute;touch-action:none;user-select:none;border-radius:.25rem;outline-style:none}.lab-divider{z-index:20;cursor:row-resize}.lab-divider[aria-orientation=vertical]{cursor:col-resize}.lab-divider:focus-visible{box-shadow:0 0 0 2px var(--lab-ring)}.lab-frame{height:100%;min-width:0}.lab-frame-content{position:relative;margin-inline:auto;height:100%}.lab-frame-handle{top:2.75rem;bottom:.75rem;z-index:40;width:1.5rem;cursor:col-resize}.lab-frame-handle:focus-visible{box-shadow:inset 0 0 0 2px var(--lab-ring)}.lab-toolbar{position:relative;z-index:30;display:flex;flex-shrink:0;align-items:center;gap:.25rem;padding-left:1rem;user-select:none}.lab-toolbar[data-leading]{padding-left:1px}@media(min-width:40rem){.lab-toolbar[data-leading]{padding-left:9px}}.lab-toolbar-tabs{min-width:0}.lab-toolbar-end{display:flex;flex-shrink:0;align-items:center;gap:.25rem}.lab-toolbar-trailing{flex-shrink:0;margin-inline-start:auto}.lab-trailing{position:absolute;top:0;right:0;z-index:1;display:flex;align-items:center}.lab-window-controls{align-self:stretch;width:138px}.lab-window-buttons{position:fixed;top:0;right:0;z-index:40;display:flex;height:calc(var(--lab-window-top) + var(--lab-tab-height) - 1px)}.lab-window-button{display:flex;align-items:center;justify-content:center;width:46px;height:100%;color:var(--lab-foreground);outline-style:none;transition-property:color,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.1s}.lab-window-button:hover{background-color:#0000000d}.lab-window-button:active,.lab-window-button:focus-visible{background-color:#0000001a}:where(.dark) .lab-window-button:hover{background-color:#ffffff1a}:where(.dark) .lab-window-button:active{background-color:#ffffff0d}:where(.dark) .lab-window-button:focus-visible{background-color:#ffffff26}.lab-window-close:hover{background-color:#c42b1c;color:#fff}.lab-window-close:active{background-color:#c84031;color:#fff}.lab-tabs{position:relative;isolation:isolate;display:flex;align-items:center;min-width:0;max-width:100%}.lab-tablist{position:relative;display:flex;align-items:center;min-width:0;max-width:100%;overflow-x:auto;padding-inline:.5rem;scrollbar-width:none;user-select:none}.lab-scroll{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:.625rem;font-size:.875rem;font-weight:500;line-height:calc(1.25 / .875);outline-style:none;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.lab-scroll:focus-visible{box-shadow:0 0 0 2px var(--lab-ring)}.lab-scroll:disabled{opacity:.3}.lab-icon{width:1rem;height:1rem}.lab-tab{position:relative;flex-shrink:0;transition:margin-right .16s cubic-bezier(0,0,.2,1)}.lab-tab[data-dragging]{opacity:0}.lab-tab-link,.lab-ghost-content{position:relative;display:flex;align-items:center;padding-right:2.5rem;padding-left:1.25rem;font-size:.875rem;line-height:calc(1.25 / .875)}.lab-tab-link{isolation:isolate;border-top-left-radius:.75rem;border-top-right-radius:.75rem;outline-style:none;touch-action:none;color:var(--lab-muted-foreground)}.lab-tab[data-dragging] .lab-tab-link{cursor:grabbing;touch-action:auto}.lab-tab-link[aria-selected=true],.lab-ghost-content{font-weight:500}.lab-tab-link[aria-selected=true],.lab-tab-link:focus-visible{color:var(--lab-foreground)}.lab-tab-icon{margin-right:.5rem;flex-shrink:0}.lab-tab-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lab-tab-placeholder{flex-shrink:0}.lab-tab-close{position:absolute;right:.75rem;display:grid;width:1.5rem;height:1.5rem;place-items:center;translate:0 -50%;border-radius:9999px;color:var(--lab-muted-foreground);transition-property:color,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lab-tab-close:focus-visible{background-color:color-mix(in oklab,var(--lab-foreground) 10%,transparent);outline:2px solid var(--lab-ring)}.lab-tab-close-icon{width:.875rem;height:.875rem}@media(hover:hover){.lab-scroll:hover{background-color:var(--lab-accent)}.lab-tab-link:hover{color:var(--lab-foreground)}.lab-tab-close:hover{background-color:color-mix(in oklab,var(--lab-foreground) 10%,transparent);color:var(--lab-foreground)}.lab-tab:hover .lab-tab-fill:not([data-selected]){fill:color-mix(in srgb,var(--lab-card) 65%,var(--lab-background))}}.lab-tab-surface{pointer-events:none;position:absolute;top:0;left:-.5rem;height:100%;width:calc(100% + 16px);overflow:visible}.lab-tab-fill{fill:color-mix(in srgb,var(--lab-card) 45%,var(--lab-background));transition:fill .15s cubic-bezier(.4,0,.2,1)}.lab-tab-fill[data-selected]{fill:var(--lab-card);transition:none}.lab-outline{fill:none;stroke:var(--lab-border)}.lab-tab-focus{display:none;fill:none;stroke:var(--lab-ring);stroke-width:3px}.lab-tab:has(a:focus-visible) .lab-tab-focus{display:block}.lab-pane-frame{pointer-events:none;position:absolute;z-index:42;overflow:visible}.lab-ghost{position:fixed;z-index:40;pointer-events:none;user-select:none;font-family:var(--lab-font-sans);line-height:1.5;color:var(--lab-foreground)}body:has([data-dragged-tab]) *{cursor:grabbing!important;user-select:none!important}[data-drag-content]{position:fixed!important;left:0!important;top:0!important;width:var(--lab-drag-width)!important;height:var(--lab-drag-height)!important;transform:translate(var(--lab-drag-x),var(--lab-drag-y));clip-path:inset(0 round 16px);border-color:transparent!important;pointer-events:none!important;transition:none!important;z-index:40}:where([data-pane-sheet],[data-pane-sheet] *){scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--lab-foreground) 35%,transparent) transparent}@supports selector(::-webkit-scrollbar){:where([data-pane-sheet],[data-pane-sheet] *){scrollbar-width:auto;scrollbar-color:auto}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar{width:12px;height:12px}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:999px;background:color-mix(in srgb,var(--lab-foreground) 35%,transparent);background-clip:padding-box}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb:hover{background-color:color-mix(in srgb,var(--lab-foreground) 55%,transparent)}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-track{margin:12px}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-corner{background:transparent}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-button{display:none}}@media(prefers-reduced-motion:reduce){.lab-pane-header,.lab-panel,.lab-tab{transition-property:none}:where([class^=lab-],[class*=" lab-"]){animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media(forced-colors:active){.lab-tab-link[aria-selected=true]{text-decoration:underline;text-underline-offset:.3em}.lab-window-button:hover,.lab-window-button:focus-visible{outline:2px solid;outline-offset:-2px}:where([data-pane-sheet],[data-pane-sheet] *){scrollbar-color:auto;scrollbar-width:auto}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb,:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb:hover{background-color:CanvasText}}:where(:root){--lab-font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--lab-background: #eeeeee;--lab-foreground: #242424;--lab-card: #ffffff;--lab-muted-foreground: #626262;--lab-accent: #e6e6e6;--lab-border: #d6d6d6;--lab-ring: #1d9db4}:where(.dark){--lab-background: #1c1c1c;--lab-foreground: #e8e8e8;--lab-card: #242424;--lab-muted-foreground: #a3a3a3;--lab-accent: #363636;--lab-border: #363636;--lab-ring: #68bccf}@media(forced-colors:active){:root,.dark{--lab-background: Canvas !important;--lab-card: Canvas !important;--lab-border: CanvasText !important;--lab-foreground: CanvasText !important}}
1
+ :where([class^=lab-],[class*=" lab-"]){box-sizing:border-box;margin:0;padding:0;border:0 solid}:where(button,a):is([class^=lab-],[class*=" lab-"]){font:inherit;color:inherit;background:transparent;text-decoration:none}:where(svg[class^=lab-],svg[class*=" lab-"]){display:block;vertical-align:middle}.lab-sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border-width:0}.lab-workspace{position:relative;display:flex;flex-direction:column;height:100%;min-height:0;min-width:0;overflow:hidden;background-color:var(--lab-background);font-family:var(--lab-font-sans);font-size:.875rem;font-weight:400;line-height:1.5;color:var(--lab-foreground)}.lab-surface{min-height:0;flex:1;overflow:auto}.lab-board{position:relative;isolation:isolate;height:100%;width:100%;overflow:clip}.lab-pane-header,.lab-panel{position:absolute;transition-property:left,top,width,height;transition-timing-function:cubic-bezier(0,0,.2,1);transition-duration:.18s}.lab-pane-header{z-index:30}.lab-panel{min-height:0;min-width:0;overflow:auto;overscroll-behavior:contain;border:1px solid var(--lab-border);border-radius:1rem;background-color:var(--lab-card);padding:.75rem;outline-style:none}.lab-panel:focus-visible:not([data-pointer]){box-shadow:inset 0 0 0 2px var(--lab-ring)}@media(min-width:40rem){.lab-panel{padding:1.25rem}}.lab-divider,.lab-frame-handle{position:absolute;touch-action:none;user-select:none;border-radius:.25rem;outline-style:none}.lab-divider{z-index:20;cursor:row-resize}.lab-divider[aria-orientation=vertical]{cursor:col-resize}.lab-divider:focus-visible{box-shadow:0 0 0 2px var(--lab-ring)}.lab-frame{height:100%;min-width:0}.lab-frame-content{position:relative;margin-inline:auto;height:100%}.lab-frame-handle{top:2.75rem;bottom:.75rem;z-index:40;width:1.5rem;cursor:col-resize}.lab-frame-handle:focus-visible{box-shadow:inset 0 0 0 2px var(--lab-ring)}.lab-toolbar{position:relative;z-index:30;display:flex;flex-shrink:0;align-items:center;gap:.25rem;padding-left:1rem;user-select:none}.lab-toolbar[data-leading]{padding-left:1px}@media(min-width:40rem){.lab-toolbar[data-leading]{padding-left:9px}}.lab-toolbar-tabs{min-width:0}.lab-toolbar-end{display:flex;flex-shrink:0;align-self:flex-end;align-items:center;height:var(--lab-tab-content-height);gap:.25rem}.lab-toolbar-trailing{flex-shrink:0;margin-inline-start:auto}.lab-trailing{position:absolute;top:0;right:0;z-index:1;display:flex;align-items:center}.lab-workspace[data-title-bar] .lab-pane-header[data-top] .lab-toolbar>:not(.lab-toolbar-tabs,.lab-toolbar-end),.lab-workspace[data-title-bar] .lab-trailing>:not(.lab-window-controls){translate:0 calc(var(--lab-title-inset) / -2)}.lab-toolbar[data-leading]:has(>.lab-traffic-lights){padding-left:0}.lab-traffic-lights{flex-shrink:0;align-self:stretch;width:72px}.lab-window-controls{align-self:stretch;width:138px}.lab-window-buttons{position:fixed;top:0;right:0;z-index:40;display:flex;height:calc(var(--lab-window-top) + var(--lab-tab-height) - 1px)}.lab-window-button{display:flex;align-items:center;justify-content:center;width:46px;height:100%;color:var(--lab-foreground);outline-style:none;transition-property:color,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.1s}.lab-window-button:hover{background-color:#0000000d}.lab-window-button:active,.lab-window-button:focus-visible{background-color:#0000001a}:where(.dark) .lab-window-button:hover{background-color:#ffffff1a}:where(.dark) .lab-window-button:active{background-color:#ffffff0d}:where(.dark) .lab-window-button:focus-visible{background-color:#ffffff26}.lab-window-close:hover{background-color:#c42b1c;color:#fff}.lab-window-close:active{background-color:#c84031;color:#fff}.lab-tabs{position:relative;isolation:isolate;display:flex;align-items:center;min-width:0;max-width:100%}.lab-tablist{position:relative;display:flex;align-items:center;min-width:0;max-width:100%;overflow-x:auto;padding-inline:.5rem;scrollbar-width:none;user-select:none}.lab-scroll{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;border-radius:.625rem;font-size:.875rem;font-weight:500;line-height:calc(1.25 / .875);outline-style:none;transition:background-color .15s cubic-bezier(.4,0,.2,1)}.lab-scroll:focus-visible{box-shadow:0 0 0 2px var(--lab-ring)}.lab-scroll:disabled{opacity:.3}.lab-icon{width:1rem;height:1rem}.lab-tab{position:relative;flex-shrink:0;transition:margin-right .16s cubic-bezier(0,0,.2,1)}.lab-tab[data-dragging]{opacity:0}.lab-tab-link,.lab-ghost-content{position:relative;display:flex;align-items:center;padding-right:2.5rem;padding-left:1.25rem;font-size:.875rem;line-height:calc(1.25 / .875)}.lab-tab-link{isolation:isolate;border-top-left-radius:.75rem;border-top-right-radius:.75rem;outline-style:none;touch-action:none;color:var(--lab-muted-foreground)}.lab-tab[data-dragging] .lab-tab-link{cursor:grabbing;touch-action:auto}.lab-tab-link[aria-selected=true],.lab-ghost-content{font-weight:500}.lab-tab-link[aria-selected=true],.lab-tab-link:focus-visible{color:var(--lab-foreground)}.lab-tab-icon{margin-right:.5rem;flex-shrink:0}.lab-tab-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lab-tab-placeholder{flex-shrink:0}.lab-tab-close{position:absolute;right:.75rem;display:grid;width:1.5rem;height:1.5rem;place-items:center;translate:0 -50%;border-radius:9999px;color:var(--lab-muted-foreground);transition-property:color,background-color;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.lab-tab-close:focus-visible{background-color:color-mix(in oklab,var(--lab-foreground) 10%,transparent);outline:2px solid var(--lab-ring)}.lab-tab-close-icon{width:.875rem;height:.875rem}@media(hover:hover){.lab-scroll:hover{background-color:var(--lab-accent)}.lab-tab-link:hover{color:var(--lab-foreground)}.lab-tab-close:hover{background-color:color-mix(in oklab,var(--lab-foreground) 10%,transparent);color:var(--lab-foreground)}.lab-tab:hover .lab-tab-fill:not([data-selected]){fill:color-mix(in srgb,var(--lab-card) 65%,var(--lab-background))}}.lab-tab-surface{pointer-events:none;position:absolute;top:0;left:-.5rem;height:100%;width:calc(100% + 16px);overflow:visible}.lab-tab-fill{fill:color-mix(in srgb,var(--lab-card) 45%,var(--lab-background));transition:fill .15s cubic-bezier(.4,0,.2,1)}.lab-tab-fill[data-selected]{fill:var(--lab-card);transition:none}.lab-outline{fill:none;stroke:var(--lab-border)}.lab-tab-focus{display:none;fill:none;stroke:var(--lab-ring);stroke-width:3px}.lab-tab:has(a:focus-visible) .lab-tab-focus{display:block}.lab-pane-frame{pointer-events:none;position:absolute;z-index:42;overflow:visible}.lab-ghost{position:fixed;z-index:40;pointer-events:none;user-select:none;font-family:var(--lab-font-sans);line-height:1.5;color:var(--lab-foreground)}body:has([data-dragged-tab]) *{cursor:grabbing!important;user-select:none!important}[data-drag-content]{position:fixed!important;left:0!important;top:0!important;width:var(--lab-drag-width)!important;height:var(--lab-drag-height)!important;transform:translate(var(--lab-drag-x),var(--lab-drag-y));clip-path:inset(0 round 16px);border-color:transparent!important;pointer-events:none!important;transition:none!important;z-index:40}:where([data-pane-sheet],[data-pane-sheet] *){scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--lab-foreground) 35%,transparent) transparent}@supports selector(::-webkit-scrollbar){:where([data-pane-sheet],[data-pane-sheet] *){scrollbar-width:auto;scrollbar-color:auto}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar{width:12px;height:12px}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb{border:3px solid transparent;border-radius:999px;background:color-mix(in srgb,var(--lab-foreground) 35%,transparent);background-clip:padding-box}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb:hover{background-color:color-mix(in srgb,var(--lab-foreground) 55%,transparent)}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-track{margin:12px}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-corner{background:transparent}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-button{display:none}}@media(prefers-reduced-motion:reduce){.lab-pane-header,.lab-panel,.lab-tab{transition-property:none}:where([class^=lab-],[class*=" lab-"]){animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media(forced-colors:active){.lab-tab-link[aria-selected=true]{text-decoration:underline;text-underline-offset:.3em}.lab-window-button:hover,.lab-window-button:focus-visible{outline:2px solid;outline-offset:-2px}:where([data-pane-sheet],[data-pane-sheet] *){scrollbar-color:auto;scrollbar-width:auto}:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb,:where([data-pane-sheet],[data-pane-sheet] *)::-webkit-scrollbar-thumb:hover{background-color:CanvasText}}:where(:root){--lab-font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Text", "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--lab-background: #eeeeee;--lab-foreground: #242424;--lab-card: #ffffff;--lab-muted-foreground: #626262;--lab-accent: #e6e6e6;--lab-border: #d6d6d6;--lab-ring: #1d9db4}:where(.dark){--lab-background: #1c1c1c;--lab-foreground: #e8e8e8;--lab-card: #242424;--lab-muted-foreground: #a3a3a3;--lab-accent: #363636;--lab-border: #363636;--lab-ring: #68bccf}@media(forced-colors:active){:root,.dark{--lab-background: Canvas !important;--lab-card: Canvas !important;--lab-border: CanvasText !important;--lab-foreground: CanvasText !important}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@labpane/os",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "description": "Tabs and resizable split panes for React",
5
5
  "license": "MIT",
6
6
  "homepage": "https://labpane.com",