@dashfoo/react 0.6.4 → 0.8.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.
- package/README.md +2 -2
- package/dist/index.d.ts +57 -39
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1099 -976
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -66,7 +66,7 @@ a sized parent and add your CSS (see the [attribute reference](#data-dashfoo-att
|
|
|
66
66
|
| `onModelChange` | `(model: Dashfoo, action?: Action) => void` | (none) | Called after every change with the next model and the action that caused it. |
|
|
67
67
|
| `components` | `Record<string, ComponentType<{ node: TabNode }>>` | (none) | Registry mapping `tab.component` keys to components. |
|
|
68
68
|
| `factory` | `(tab: TabNode) => ReactNode` | (none) | Render override. When provided, it resolves every tab and `components` is ignored. |
|
|
69
|
-
| `persist` | `string \| { key; storage?; debounceMs? }` | (none) | Auto-save the model
|
|
69
|
+
| `persist` | `string \| { key; storage?; debounceMs? }` | (none) | Auto-save the model. The props type only accepts it alongside `defaultModel`. A bare string is a localStorage key. |
|
|
70
70
|
| `onAction` | `(action: Action) => Action \| null` | (none) | Intercept each action before it commits: return it, a replacement, or `null` to veto. |
|
|
71
71
|
| `onActiveTabsetChange` | `(id: string \| undefined) => void` | (none) | Fires when the active tabset changes. |
|
|
72
72
|
| `onMaximizedTabsetChange` | `(id: string \| undefined) => void` | (none) | Fires when a tabset is maximized or restored. |
|
|
@@ -356,7 +356,7 @@ const Layout = () => {
|
|
|
356
356
|
a custom store (sessionStorage, in-memory, your own). A pending save flushes on
|
|
357
357
|
unmount and on page hide (reload, tab close, navigation, the page going to the
|
|
358
358
|
background), so the last change is never lost, even inside the debounce window.
|
|
359
|
-
|
|
359
|
+
The props type only accepts `persist` alongside `defaultModel`; in controlled mode, save the model yourself
|
|
360
360
|
in `onModelChange`.
|
|
361
361
|
|
|
362
362
|
The lower-level `usePersistence` load/save primitive (that `persist` is built on)
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { Action, Dashfoo, DockLocation, DragSubject, DropIntent, FloatNode, GlobalAttributes, Orientation, RowNode, SnapConfig, TabNode, TabsetNode } from "@dashfoo/core";
|
|
1
|
+
import { Action, Dashfoo, DockLocation, DragSubject, DropIntent, FloatNode, GlobalAttributes, Orientation, RowNode, SnapConfig, TabNode, TabsetNode, dragDockMachine } from "@dashfoo/core";
|
|
2
2
|
import { ComponentProps, ComponentType, ReactNode, Ref } from "react";
|
|
3
3
|
import { DragDropManager } from "@dnd-kit/dom";
|
|
4
4
|
import "zustand";
|
|
5
|
+
import "xstate";
|
|
5
6
|
//#region src/hooks/persistence.d.ts
|
|
6
7
|
type StorageAdapter = {
|
|
7
8
|
getItem: (key: string) => string | null;
|
|
@@ -51,10 +52,9 @@ type DashfooHandle = {
|
|
|
51
52
|
selectTab: (tabsetId: string, index: number) => void;
|
|
52
53
|
undo: () => void;
|
|
53
54
|
};
|
|
54
|
-
type
|
|
55
|
+
type DashfooLayoutCommonProps = {
|
|
55
56
|
closableTabs?: boolean;
|
|
56
57
|
components?: Record<string, TabComponent>;
|
|
57
|
-
defaultModel?: Dashfoo;
|
|
58
58
|
draggableTabs?: boolean;
|
|
59
59
|
draggableTabsets?: boolean;
|
|
60
60
|
editable?: boolean;
|
|
@@ -62,12 +62,10 @@ type DashfooLayoutProps = {
|
|
|
62
62
|
floatable?: boolean;
|
|
63
63
|
keepMounted?: boolean;
|
|
64
64
|
maximizable?: boolean;
|
|
65
|
-
model?: Dashfoo;
|
|
66
65
|
onAction?: (action: Action) => Action | null;
|
|
67
66
|
onActiveTabsetChange?: (tabsetId: string | undefined) => void;
|
|
68
67
|
onMaximizedTabsetChange?: (tabsetId: string | undefined) => void;
|
|
69
68
|
onModelChange?: (model: Dashfoo, action?: Action) => void;
|
|
70
|
-
persist?: PersistInput;
|
|
71
69
|
renamableTabs?: boolean;
|
|
72
70
|
renderTabLabel?: (tab: TabNode) => ReactNode;
|
|
73
71
|
renderTabsetToolbar?: (tabset: TabsetNode) => ReactNode;
|
|
@@ -78,9 +76,18 @@ type DashfooLayoutProps = {
|
|
|
78
76
|
};
|
|
79
77
|
snap?: SnapConfig;
|
|
80
78
|
};
|
|
79
|
+
type DashfooLayoutProps = DashfooLayoutCommonProps & ({
|
|
80
|
+
defaultModel: Dashfoo;
|
|
81
|
+
model?: never;
|
|
82
|
+
persist?: PersistInput;
|
|
83
|
+
} | {
|
|
84
|
+
defaultModel?: never;
|
|
85
|
+
model: Dashfoo;
|
|
86
|
+
persist?: never;
|
|
87
|
+
});
|
|
81
88
|
declare const DashfooLayout: import("react").ForwardRefExoticComponent<DashfooLayoutProps & import("react").RefAttributes<DashfooHandle>>;
|
|
82
89
|
//#endregion
|
|
83
|
-
//#region src/components/drag-
|
|
90
|
+
//#region src/components/dashfoo-drag-provider.d.ts
|
|
84
91
|
declare const DashfooDragProvider: ({ children }: {
|
|
85
92
|
children: ReactNode;
|
|
86
93
|
}) => ReactNode;
|
|
@@ -94,10 +101,15 @@ type ExternalTabSourceOptions = {
|
|
|
94
101
|
declare const useExternalTabSource: ({ createTab, disabled, label }: ExternalTabSourceOptions) => {
|
|
95
102
|
ref: (element: Element | null) => void;
|
|
96
103
|
};
|
|
104
|
+
/**
|
|
105
|
+
* Reads the root's actor, so it works from an overlay mounted beside the layout
|
|
106
|
+
* rather than inside a drag layer. Outside a provider it reports the empty state
|
|
107
|
+
* instead of throwing.
|
|
108
|
+
*/
|
|
97
109
|
declare const useDragSubject: () => DragSubject | null;
|
|
98
110
|
declare const useDropIntent: () => DropIntent | null;
|
|
99
111
|
//#endregion
|
|
100
|
-
//#region src/components/drag-
|
|
112
|
+
//#region src/components/drag-provider.d.ts
|
|
101
113
|
type DragProviderProps = {
|
|
102
114
|
children: ReactNode;
|
|
103
115
|
onCommit?: (action: Action) => void;
|
|
@@ -108,9 +120,34 @@ type DragProviderProps = {
|
|
|
108
120
|
type FloatLayerProps = {
|
|
109
121
|
children: ReactNode;
|
|
110
122
|
floats: Array<FloatNode>;
|
|
111
|
-
|
|
123
|
+
/** Unread: floats inherit every global-derived capability from the layout store above them. */
|
|
124
|
+
global?: GlobalAttributes;
|
|
112
125
|
};
|
|
113
126
|
//#endregion
|
|
127
|
+
//#region src/hooks/layout-store.d.ts
|
|
128
|
+
type LayoutState = {
|
|
129
|
+
closableTabs: boolean;
|
|
130
|
+
dispatch: (action: Action) => void;
|
|
131
|
+
draggableTabs: boolean;
|
|
132
|
+
draggableTabsets: boolean;
|
|
133
|
+
editable: boolean;
|
|
134
|
+
floatable: boolean;
|
|
135
|
+
keepMounted: boolean;
|
|
136
|
+
maximizable: boolean;
|
|
137
|
+
maximizedTabsetId: string | undefined;
|
|
138
|
+
renamableTabs: boolean;
|
|
139
|
+
renderTab: (tab: TabNode) => ReactNode;
|
|
140
|
+
renderTabLabel: ((tab: TabNode) => ReactNode) | undefined;
|
|
141
|
+
renderTabsetToolbar: ((tabset: TabsetNode) => ReactNode) | undefined;
|
|
142
|
+
resizableSplits: boolean;
|
|
143
|
+
snap: SnapConfig | null;
|
|
144
|
+
splitDock: boolean;
|
|
145
|
+
tabLocation: "bottom" | "top";
|
|
146
|
+
tabsetMinSize: number;
|
|
147
|
+
tabStripEnabled: boolean;
|
|
148
|
+
};
|
|
149
|
+
declare const useLayout: <T>(selector: (state: LayoutState) => T) => T;
|
|
150
|
+
//#endregion
|
|
114
151
|
//#region src/components/layout-root.d.ts
|
|
115
152
|
type LayoutRootProps = Omit<ComponentProps<"div">, "children"> & {
|
|
116
153
|
children: ReactNode;
|
|
@@ -128,6 +165,8 @@ type LayoutRootProps = Omit<ComponentProps<"div">, "children"> & {
|
|
|
128
165
|
renderTabLabel?: (tab: TabNode) => ReactNode;
|
|
129
166
|
renderTabsetToolbar?: (tabset: TabsetNode) => ReactNode;
|
|
130
167
|
resizableSplits?: boolean;
|
|
168
|
+
/** When false, the tree itself is frozen: no dragging, splitting or floating. Tabs stay closable and renamable. */
|
|
169
|
+
restructurable?: boolean;
|
|
131
170
|
rootRef?: Ref<HTMLDivElement>;
|
|
132
171
|
snap?: SnapConfig;
|
|
133
172
|
};
|
|
@@ -145,9 +184,9 @@ type TabsetViewProps = {
|
|
|
145
184
|
//#endregion
|
|
146
185
|
//#region src/components/layout.d.ts
|
|
147
186
|
declare const Layout: {
|
|
148
|
-
readonly DragLayer: (
|
|
149
|
-
readonly FloatLayer: ({ children, floats
|
|
150
|
-
readonly Root: ({ children, closableTabs, dispatch, draggableTabs, draggableTabsets, editable, floatable, keepMounted, maximizable, model, renamableTabs, renderTab, renderTabLabel, renderTabsetToolbar, resizableSplits, rootRef, snap, style, ...props }: LayoutRootProps) => import("react").ReactNode;
|
|
187
|
+
readonly DragLayer: (props: DragProviderProps) => import("react").ReactNode;
|
|
188
|
+
readonly FloatLayer: ({ children, floats }: FloatLayerProps) => import("react").ReactNode;
|
|
189
|
+
readonly Root: ({ children, closableTabs, dispatch, draggableTabs, draggableTabsets, editable, floatable, keepMounted, maximizable, model, renamableTabs, renderTab, renderTabLabel, renderTabsetToolbar, resizableSplits, restructurable, rootRef, snap, style, ...props }: LayoutRootProps) => import("react").ReactNode;
|
|
151
190
|
readonly Rows: ({ node, renderTabset }: RowViewProps) => import("react").ReactNode;
|
|
152
191
|
readonly Tabset: ({ node }: TabsetViewProps) => import("react").ReactNode;
|
|
153
192
|
};
|
|
@@ -168,7 +207,7 @@ declare const Panel: {
|
|
|
168
207
|
readonly Title: (props: PanelTitleProps) => ReactNode;
|
|
169
208
|
};
|
|
170
209
|
//#endregion
|
|
171
|
-
//#region src/components/tabset/tabset-
|
|
210
|
+
//#region src/components/tabset/tabset-rename-input.d.ts
|
|
172
211
|
type TabsetRenameInputProps = ComponentProps<"input">;
|
|
173
212
|
type TabsetCloseButtonProps = ComponentProps<"button">;
|
|
174
213
|
//#endregion
|
|
@@ -215,7 +254,7 @@ declare const Tabset: {
|
|
|
215
254
|
readonly Trigger: ({ children, onClick, onDoubleClick, ref: userRef, ...props }: TabsetTriggerProps) => import("react").ReactNode;
|
|
216
255
|
};
|
|
217
256
|
//#endregion
|
|
218
|
-
//#region src/components/tab-overflow.d.ts
|
|
257
|
+
//#region src/components/tab-overflow-menu.d.ts
|
|
219
258
|
type OverflowItem = {
|
|
220
259
|
id: string;
|
|
221
260
|
name: string;
|
|
@@ -232,11 +271,12 @@ type TabsetState = {
|
|
|
232
271
|
isMaximized: boolean;
|
|
233
272
|
node: TabsetNode;
|
|
234
273
|
overflowItems: Array<OverflowItem>;
|
|
274
|
+
/** The tab a `closeTab` is waiting on, so a vetoed close cannot restore focus. */
|
|
275
|
+
pendingCloseTabId: string | null;
|
|
235
276
|
registerRenameInput: () => () => void;
|
|
236
277
|
registerTablist: (element: HTMLDivElement | null) => void;
|
|
237
278
|
renameInputCount: number;
|
|
238
279
|
renameTab: (tabId: string, name: string) => void;
|
|
239
|
-
restoreFocus: boolean;
|
|
240
280
|
selectOverflowTab: (tabId: string) => void;
|
|
241
281
|
selectTab: (index: number, options?: {
|
|
242
282
|
focus?: boolean;
|
|
@@ -256,30 +296,6 @@ type TabContextValue = {
|
|
|
256
296
|
};
|
|
257
297
|
declare const useTab: () => TabContextValue;
|
|
258
298
|
//#endregion
|
|
259
|
-
//#region src/hooks/layout-store.d.ts
|
|
260
|
-
type LayoutState = {
|
|
261
|
-
closableTabs: boolean;
|
|
262
|
-
dispatch: (action: Action) => void;
|
|
263
|
-
draggableTabs: boolean;
|
|
264
|
-
draggableTabsets: boolean;
|
|
265
|
-
editable: boolean;
|
|
266
|
-
floatable: boolean;
|
|
267
|
-
keepMounted: boolean;
|
|
268
|
-
maximizable: boolean;
|
|
269
|
-
maximizedTabsetId: string | undefined;
|
|
270
|
-
renamableTabs: boolean;
|
|
271
|
-
renderTab: (tab: TabNode) => ReactNode;
|
|
272
|
-
renderTabLabel: ((tab: TabNode) => ReactNode) | undefined;
|
|
273
|
-
renderTabsetToolbar: ((tabset: TabsetNode) => ReactNode) | undefined;
|
|
274
|
-
resizableSplits: boolean;
|
|
275
|
-
snap: SnapConfig | null;
|
|
276
|
-
splitDock: boolean;
|
|
277
|
-
tabLocation: "bottom" | "top";
|
|
278
|
-
tabsetMinSize: number;
|
|
279
|
-
tabStripEnabled: boolean;
|
|
280
|
-
};
|
|
281
|
-
declare const useLayout: <T>(selector: (state: LayoutState) => T) => T;
|
|
282
|
-
//#endregion
|
|
283
299
|
//#region src/hooks/responsive.d.ts
|
|
284
300
|
type Breakpoint = {
|
|
285
301
|
compact?: boolean;
|
|
@@ -326,7 +342,9 @@ type UseDashfooStoreOptions = {
|
|
|
326
342
|
onMaximizedTabsetChange?: (tabsetId: string | undefined) => void;
|
|
327
343
|
onModelChange?: (model: Dashfoo, action?: Action) => void;
|
|
328
344
|
};
|
|
345
|
+
/** The mode is latched on the first render; running both sources leaves the
|
|
346
|
+
* unread one describing a document nobody rendered. */
|
|
329
347
|
declare const useDashfooStore: (options: UseDashfooStoreOptions) => DashfooStore;
|
|
330
348
|
//#endregion
|
|
331
|
-
export { type Breakpoint, DashfooDragProvider, type DashfooHandle, DashfooLayout, type DashfooLayoutProps, type DashfooStore, type ExternalTabSourceOptions, Layout, type DragProviderProps as LayoutDragLayerProps, type FloatLayerProps as LayoutFloatLayerProps, type LayoutRootProps, type RowViewProps as LayoutRowsProps, type LayoutState, type TabsetViewProps as LayoutTabsetProps, Panel, type PanelBadgeProps, type PanelBodyProps, type PanelHeaderProps, type PanelIconProps, type PanelRootProps, type PanelTitleProps, type PersistConfig, type Persistence, type ResponsiveModel, type StorageAdapter, type TabComponent, type TabContextValue, Tabset, type TabsetCloseButtonProps, type TabsetContentProps, type TabsetFloatButtonProps, type TabsetGripProps, type TabsetMaximizeButtonProps, type TabsetRenameInputProps, type TabsetRootProps, type TabsetState, type TabsetTabProps, type TabsetTabStripProps, type TabsetTablistProps, type TabsetToolbarProps, type TabsetTriggerProps, type UseDashfooStoreOptions, type UseResponsiveModelOptions, activeBreakpoint, localStorageAdapter, matchBreakpoint, memoryStorageAdapter, useContainerWidth, useDashfooStore, useDragSubject, useDropIntent, useExternalTabSource, useLayout, usePersistence, useResponsiveModel, useTab, useTabset };
|
|
349
|
+
export { type Breakpoint, DashfooDragProvider, type DashfooHandle, DashfooLayout, type DashfooLayoutCommonProps, type DashfooLayoutProps, type DashfooStore, type ExternalTabSourceOptions, Layout, type DragProviderProps as LayoutDragLayerProps, type FloatLayerProps as LayoutFloatLayerProps, type LayoutRootProps, type RowViewProps as LayoutRowsProps, type LayoutState, type TabsetViewProps as LayoutTabsetProps, Panel, type PanelBadgeProps, type PanelBodyProps, type PanelHeaderProps, type PanelIconProps, type PanelRootProps, type PanelTitleProps, type PersistConfig, type Persistence, type ResponsiveModel, type StorageAdapter, type TabComponent, type TabContextValue, Tabset, type TabsetCloseButtonProps, type TabsetContentProps, type TabsetFloatButtonProps, type TabsetGripProps, type TabsetMaximizeButtonProps, type TabsetRenameInputProps, type TabsetRootProps, type TabsetState, type TabsetTabProps, type TabsetTabStripProps, type TabsetTablistProps, type TabsetToolbarProps, type TabsetTriggerProps, type UseDashfooStoreOptions, type UseResponsiveModelOptions, activeBreakpoint, localStorageAdapter, matchBreakpoint, memoryStorageAdapter, useContainerWidth, useDashfooStore, useDragSubject, useDropIntent, useExternalTabSource, useLayout, usePersistence, useResponsiveModel, useTab, useTabset };
|
|
332
350
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/hooks/persistence.ts","../src/components/dashfoo-layout.tsx","../src/components/drag-
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/hooks/persistence.ts","../src/components/dashfoo-layout.tsx","../src/components/dashfoo-drag-provider.tsx","../src/hooks/drag-hooks.tsx","../src/components/drag-provider.tsx","../src/components/float-layer.tsx","../src/hooks/layout-store.ts","../src/components/layout-root.tsx","../src/components/row-view.tsx","../src/components/tabset/tabset-view.tsx","../src/components/layout.tsx","../src/components/panel.tsx","../src/components/tabset/tabset-rename-input.tsx","../src/components/tabset/tabset-content.tsx","../src/components/tabset/tabset-toolbar.tsx","../src/components/tabset/tabset-root.tsx","../src/components/tabset/tabset-tab.tsx","../src/components/tabset/tabset-tablist.tsx","../src/components/tabset/tabset.ts","../src/components/tab-overflow-menu.tsx","../src/components/tabset/tabset-store.ts","../src/hooks/responsive.ts","../src/hooks/store.ts"],"mappings":"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"}
|