@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 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 (uncontrolled mode only). A bare string is a localStorage key. |
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
- It applies to uncontrolled mode only; in controlled mode, save the model yourself
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 DashfooLayoutProps = {
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-root.d.ts
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-adapter.d.ts
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
- global: GlobalAttributes;
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: ({ children, onCommit, splitDock }: DragProviderProps) => import("react").ReactNode;
149
- readonly FloatLayer: ({ children, floats, global }: FloatLayerProps) => import("react").ReactNode;
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-tab-controls.d.ts
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/hooks/persistence.ts","../src/components/dashfoo-layout.tsx","../src/components/drag-root.tsx","../src/hooks/drag-hooks.tsx","../src/components/drag-adapter.tsx","../src/components/float-layer.tsx","../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-tab-controls.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.tsx","../src/components/tabset/tabset-store.ts","../src/hooks/layout-store.ts","../src/hooks/responsive.ts","../src/hooks/store.ts"],"mappings":"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"}
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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"}