@dashfoo/react 0.3.0 → 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.
- package/README.md +138 -46
- package/dist/index.d.ts +44 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ paint.
|
|
|
15
15
|
It builds on three engines:
|
|
16
16
|
|
|
17
17
|
- **[react-resizable-panels](https://github.com/bvaughn/react-resizable-panels)** for splitter resize (the resize adapter is the only file that imports it).
|
|
18
|
-
- **[@dnd-kit/dom](https://github.com/clauderic/dnd-kit) 0.
|
|
18
|
+
- **[@dnd-kit/dom](https://github.com/clauderic/dnd-kit) 0.5** — the framework-agnostic core (no React bindings) — for drag (the drag adapter is the only file that touches it; pointer-only).
|
|
19
19
|
- **[@dashfoo/core](https://www.npmjs.com/package/@dashfoo/core)** for the document: a zod schema, a pure reducer, and the XState machines that drive state and the drag lifecycle.
|
|
20
20
|
|
|
21
21
|
## Install
|
|
@@ -59,34 +59,38 @@ a sized parent and add your CSS (see the [attribute reference](#data-dashfoo-att
|
|
|
59
59
|
|
|
60
60
|
## `DashfooLayout` props
|
|
61
61
|
|
|
62
|
-
| Prop | Type
|
|
63
|
-
| ------------------------- |
|
|
64
|
-
| `model` | `Dashfoo`
|
|
65
|
-
| `defaultModel` | `Dashfoo`
|
|
66
|
-
| `onModelChange` | `(model: Dashfoo, action?: Action) => void`
|
|
67
|
-
| `components` | `Record<string, ComponentType<{ node: TabNode }>>`
|
|
68
|
-
| `factory` | `(tab: TabNode) => ReactNode`
|
|
69
|
-
| `persist` | `string \| { key; storage?; debounceMs? }`
|
|
70
|
-
| `onAction` | `(action: Action) => Action \| null`
|
|
71
|
-
| `onActiveTabsetChange` | `(id: string \| undefined) => void`
|
|
72
|
-
| `onMaximizedTabsetChange` | `(id: string \| undefined) => void`
|
|
73
|
-
| `renderTabLabel` | `(tab: TabNode) => ReactNode`
|
|
74
|
-
| `renderTabsetToolbar` | `(tabset: TabsetNode) => ReactNode`
|
|
75
|
-
| `editable` | `boolean`
|
|
76
|
-
| `closableTabs` | `boolean`
|
|
77
|
-
| `renamableTabs` | `boolean`
|
|
78
|
-
| `maximizable` | `boolean`
|
|
79
|
-
| `
|
|
80
|
-
| `
|
|
81
|
-
| `
|
|
82
|
-
| `
|
|
62
|
+
| Prop | Type | Default | Description |
|
|
63
|
+
| ------------------------- | ----------------------------------------------------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
64
|
+
| `model` | `Dashfoo` | — | Controlled document. When set, the prop is the source of truth. |
|
|
65
|
+
| `defaultModel` | `Dashfoo` | — | Uncontrolled initial document. The component owns it from there. |
|
|
66
|
+
| `onModelChange` | `(model: Dashfoo, action?: Action) => void` | — | Called after every change with the next model and the action that caused it. |
|
|
67
|
+
| `components` | `Record<string, ComponentType<{ node: TabNode }>>` | — | Registry mapping `tab.component` keys to components. |
|
|
68
|
+
| `factory` | `(tab: TabNode) => ReactNode` | — | Render override. When provided, it resolves every tab and `components` is ignored. |
|
|
69
|
+
| `persist` | `string \| { key; storage?; debounceMs? }` | — | Auto-save the model (uncontrolled mode only). A bare string is a localStorage key. |
|
|
70
|
+
| `onAction` | `(action: Action) => Action \| null` | — | Intercept each action before it commits — return it, a replacement, or `null` to veto. |
|
|
71
|
+
| `onActiveTabsetChange` | `(id: string \| undefined) => void` | — | Fires when the active tabset changes. |
|
|
72
|
+
| `onMaximizedTabsetChange` | `(id: string \| undefined) => void` | — | Fires when a tabset is maximized or restored. |
|
|
73
|
+
| `renderTabLabel` | `(tab: TabNode) => ReactNode` | — | Override the tab label (the accessible name stays `tab.name`). |
|
|
74
|
+
| `renderTabsetToolbar` | `(tabset: TabsetNode) => ReactNode` | — | Inject custom controls into a tabset's toolbar. |
|
|
75
|
+
| `editable` | `boolean` | `true` | `false` renders a static layout: no drag, close, rename, or splitter resize. Tab selection, maximize, and the ref API keep working. |
|
|
76
|
+
| `closableTabs` | `boolean` | `true` | Show the per-tab close control. |
|
|
77
|
+
| `renamableTabs` | `boolean` | `true` | Allow double-click inline rename. |
|
|
78
|
+
| `maximizable` | `boolean` | `true` | Show the tabset maximize/restore control. |
|
|
79
|
+
| `floatable` | `boolean` | `false` | Show a per-tabset control that floats the panel into a movable, resizable overlay, and render any floating panels. See below. |
|
|
80
|
+
| `draggableTabs` | `boolean` | `true` | Allow individual tabs to be dragged between tabsets. |
|
|
81
|
+
| `draggableTabsets` | `boolean` | `true` | Show the grip that drags a whole tabset. |
|
|
82
|
+
| `resizableSplits` | `boolean` | `true` | Allow dragging the splitters; `false` disables them in place (gutters keep their size). |
|
|
83
|
+
| `keepMounted` | `boolean` | `false` | Keep inactive tab panels mounted (hidden) so their state survives a tab switch. |
|
|
84
|
+
| `responsive` | `{ maxWidth: number; orientation? }` | — | At/below `maxWidth` (the layout's own container width) render a stacked column and lock drag + resize. View-only projection — no remount, state preserved. See below. |
|
|
85
|
+
| `snap` | `{ step?: number; divisions?: number \| "panels"; threshold?: number }` | — | Magnetic splitter snapping onto a grid — the union of `step` (multiples of a fixed percent) and `divisions` (even splits: `100/d`, or `"panels"` to divide by the row's panel count, so a 3-panel row snaps to thirds). Within `threshold` percent (default `4`) it snaps and commits on release as one undo step. Off when omitted; replaces `global.snap`; a row overrides via its own `snap` (`{}` disables). Locked off in compact mode. |
|
|
83
86
|
|
|
84
87
|
You must pass either `model` or `defaultModel`. Passing neither throws.
|
|
85
88
|
|
|
86
89
|
A `ref` exposes a `DashfooHandle` for imperative control:
|
|
87
|
-
`addTab`, `closeTab`, `selectTab`, `renameTab`, `maximizeTabset`, `
|
|
88
|
-
`getModel`, `undo` / `redo` / `canUndo` / `canRedo`,
|
|
89
|
-
the original `defaultModel`, clearing undo history and
|
|
90
|
+
`addTab`, `closeTab`, `selectTab`, `renameTab`, `maximizeTabset`, `floatTab`,
|
|
91
|
+
`dockFloat`, `dispatch`, `getModel`, `undo` / `redo` / `canUndo` / `canRedo`,
|
|
92
|
+
and `resetLayout()` (reset to the original `defaultModel`, clearing undo history and
|
|
93
|
+
any persisted copy).
|
|
90
94
|
|
|
91
95
|
```tsx
|
|
92
96
|
const ref = useRef<DashfooHandle>(null);
|
|
@@ -173,6 +177,7 @@ with the right role and ARIA wiring, ready for you to style.
|
|
|
173
177
|
- **Close** — a `[data-dashfoo="tab-close"]` button next to each tab label, shown when closing is enabled. Dispatches `deleteTab`.
|
|
174
178
|
- **Rename** — double-click a tab to swap its label for a `[data-dashfoo="tab-rename"]` input. Enter commits, Escape cancels, blur commits. A trimmed, changed value dispatches `renameTab`; focus returns to the tab afterward.
|
|
175
179
|
- **Maximize** — a `[data-dashfoo="tabset-maximize"]` toggle in the tabset toolbar. Dispatches `setMaximizedTabset`; one maximized tabset fills the frame and `aria-pressed` reflects state.
|
|
180
|
+
- **Float** — a `[data-dashfoo="tabset-float"]` button in the tabset toolbar, shown when `floatable`. Floats the tabset into a movable, resizable overlay (`floatTabset`); the float's `[data-dashfoo="float-dock"]` control docks it back (`dockFloat`). See "Floating panels" below.
|
|
176
181
|
- **Tabs** — roving-tabindex keyboard model (WAI-ARIA APG): Arrow keys move and select, Home/End jump to the ends, focus follows selection.
|
|
177
182
|
- **Drag-to-dock** — drag a tab to restack it or split a tabset (when split-dock is on). A `[data-dashfoo="dock-indicator"]` previews where it lands.
|
|
178
183
|
|
|
@@ -250,6 +255,77 @@ keyboard access.
|
|
|
250
255
|
| `label` | `string` | `""` | The drag preview chip text. |
|
|
251
256
|
| `disabled` | `boolean` | `false` | Unregisters the source while true. |
|
|
252
257
|
|
|
258
|
+
## Responsive layouts
|
|
259
|
+
|
|
260
|
+
Panels are weight-based, so the tree already scales with its container. To
|
|
261
|
+
_restructure_ on small screens, give `DashfooLayout` a `responsive` prop:
|
|
262
|
+
|
|
263
|
+
```tsx
|
|
264
|
+
<DashfooLayout defaultModel={model} factory={renderPanel} responsive={{ maxWidth: 720 }} />
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
At or below `maxWidth` — measured on the layout's own container, not the viewport
|
|
268
|
+
— the layout renders as a single stacked column and **locks every structural
|
|
269
|
+
interaction** (tab/tabset drag, split resize), leaving tap-to-switch and
|
|
270
|
+
maximize. This mirrors VS Code: docking is a desktop interaction, so narrow
|
|
271
|
+
screens get a read-only, navigable view instead of unusable hit targets.
|
|
272
|
+
|
|
273
|
+
The stacked view is a **derived projection** — the model in the store is never
|
|
274
|
+
mutated, so the layout is never remounted and widening past `maxWidth` restores
|
|
275
|
+
the desktop arrangement exactly. Undo history, persistence, selection, and
|
|
276
|
+
mounted panels all survive the breakpoint cross. The theme grows tab hit targets
|
|
277
|
+
to 44px under `@media (pointer: coarse)` so tap-to-switch stays usable.
|
|
278
|
+
|
|
279
|
+
Hand-built layouts (the `Layout.*` primitives) get the same behavior with
|
|
280
|
+
`useContainerWidth` + `stackModel`; for _distinct_ per-breakpoint models, use
|
|
281
|
+
`useResponsiveModel`. Both feed reactive props with no `key`/remount.
|
|
282
|
+
|
|
283
|
+
## Floating panels
|
|
284
|
+
|
|
285
|
+
Pass `floatable` to let a panel float out into a movable, resizable overlay,
|
|
286
|
+
FlexLayout style:
|
|
287
|
+
|
|
288
|
+
```tsx
|
|
289
|
+
<DashfooLayout defaultModel={model} factory={renderPanel} floatable />
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Each tabset toolbar gains a `[data-dashfoo="tabset-float"]` control that floats the
|
|
293
|
+
whole tabset into an overlay (dispatching `floatTabset`). Drag its
|
|
294
|
+
`[data-dashfoo="float-titlebar"]` to move it anywhere on the page, the edge/corner
|
|
295
|
+
handles to resize, the `[data-dashfoo="float-minimize"]` control to collapse it to a
|
|
296
|
+
chip, and the `[data-dashfoo="float-dock"]` "Dock back" control to return it
|
|
297
|
+
(`dockFloat`). Floating panels are first-class model nodes (`Dashfoo.floats` in
|
|
298
|
+
`@dashfoo/core`), so they serialize and round-trip like docked panels.
|
|
299
|
+
|
|
300
|
+
How it works:
|
|
301
|
+
|
|
302
|
+
- **Same React tree, full drag-dock.** A float renders through the normal
|
|
303
|
+
`Layout.Rows` in the same tree, sharing one drag manager with the docked layout —
|
|
304
|
+
so app context (a theme provider, a query client), event handling, your
|
|
305
|
+
stylesheet, and **dragging tabs into and out of a float** all just work. The
|
|
306
|
+
overlay is `pointer-events: none`, so empty space stays click-through to the
|
|
307
|
+
docked layout underneath.
|
|
308
|
+
- **Drag anywhere + resize commit one step.** The overlay is viewport-fixed, so a
|
|
309
|
+
float drags across the whole page. Drag and resize update the DOM imperatively and
|
|
310
|
+
dispatch a single `moveFloat` on release, so a drag is one undo step.
|
|
311
|
+
- **Named, renamable title.** Each float carries its own name ("Panel", "Panel 1",
|
|
312
|
+
…), shown as the window title — never the active tab's. Double-click the title to
|
|
313
|
+
rename it (`renameFloat`).
|
|
314
|
+
- **Minimize.** The minimize control collapses a float to a chip
|
|
315
|
+
(`setFloatMinimized`); tapping the chip restores it to its saved rect.
|
|
316
|
+
- **Dock back as a panel.** "Dock back" returns the float as its own panel — all its
|
|
317
|
+
tabs, grouped — instead of flattening them into another tabset.
|
|
318
|
+
- **Bring to front.** Clicking anywhere in a float — body, a tab, or chrome —
|
|
319
|
+
raises it above the others.
|
|
320
|
+
- **Honors `editable`.** Under `editable={false}` a float is static: its content
|
|
321
|
+
stays selectable and it still raises to the front, but move, resize, rename,
|
|
322
|
+
minimize, and dock-back are switched off (no `moveFloat` / `renameFloat` /
|
|
323
|
+
`setFloatMinimized` / `dockFloat`).
|
|
324
|
+
|
|
325
|
+
Hand-built layouts opt in by wrapping the tree's content with `Layout.FloatLayer`
|
|
326
|
+
(passing `floats` + `global`) and adding `Tabset.FloatButton`. `Tabset.FloatButton`
|
|
327
|
+
hides itself (and warns) if no `Layout.FloatLayer` is present.
|
|
328
|
+
|
|
253
329
|
## Persistence
|
|
254
330
|
|
|
255
331
|
The `persist` prop saves an uncontrolled layout and restores it on load. It loads
|
|
@@ -285,7 +361,7 @@ in `onModelChange`.
|
|
|
285
361
|
|
|
286
362
|
The lower-level `usePersistence` load/save primitive (that `persist` is built on)
|
|
287
363
|
is also exported, for hosts that drive the store directly. See the
|
|
288
|
-
[persistence guide](https://docs.dashfoo.
|
|
364
|
+
[persistence guide](https://docs.dashfoo.com/persistence) for the storage seam,
|
|
289
365
|
validation pipeline, and SSR notes.
|
|
290
366
|
|
|
291
367
|
### Options
|
|
@@ -343,14 +419,27 @@ you.
|
|
|
343
419
|
| `tab` | `button` | `role="tab"`. Carries `aria-selected` and `data-tab-id`. |
|
|
344
420
|
| `tab-close` | `button` | Per-tab close. `aria-label="Close <name>"`. |
|
|
345
421
|
| `tab-rename` | `input` | Inline rename editor, shown during a rename. |
|
|
346
|
-
| `tabset-toolbar` | `div` | Trailing controls in the strip: overflow menu, grip, custom toolbar slot, maximize.
|
|
422
|
+
| `tabset-toolbar` | `div` | Trailing controls in the strip: overflow menu, grip, custom toolbar slot, pop-out, maximize. |
|
|
347
423
|
| `tab-overflow-root` | `div` | Wraps the overflow trigger and its menu; rendered when tabs don't fit the strip. |
|
|
348
424
|
| `tab-overflow` | `button` | Overflow menu trigger. `aria-label="More tabs"`. |
|
|
349
425
|
| `tab-overflow-menu` | `div` | `role="menu"`, lists the hidden tabs while open. |
|
|
350
426
|
| `tab-overflow-item` | `button` | `role="menuitem"`, one hidden tab; selecting it activates the tab. |
|
|
351
427
|
| `tabset-grip` | `button` | Drags the whole tabset. `aria-label="Move tabset"`; shown when `draggableTabsets` is on and the tabset is not maximized. |
|
|
428
|
+
| `tabset-float` | `button` | Floats the tabset into a movable overlay. `aria-label="Float panel"`; shown when `floatable` is on and not maximized. |
|
|
352
429
|
| `tabset-maximize` | `button` | Maximize/restore toggle. `aria-pressed` reflects state. |
|
|
353
430
|
| `tabcontent` | `div` | `role="tabpanel"`, the active tab's content (or empty when none). |
|
|
431
|
+
| `float-overlay` | `div` | The `pointer-events: none` overlay covering the layout; holds the floats. |
|
|
432
|
+
| `float` | `div` | A floating panel's elevated frame. `display: flex; flex-direction: column`, positioned absolutely. |
|
|
433
|
+
| `float-titlebar` | `div` | The float's drag handle / title bar (grip + title + dock control). |
|
|
434
|
+
| `float-grip` | `span` | Drag-affordance dots in the title bar (decorative, `aria-hidden`). |
|
|
435
|
+
| `float-title` | `span` | The float's window title (its own name); double-click to rename. `aria-hidden` grip precedes it. |
|
|
436
|
+
| `float-rename` | `input` | The inline title editor, shown while renaming. `aria-label="Rename <name>"`. |
|
|
437
|
+
| `float-minimize` | `button` | Collapses the float to a chip. `aria-label="Minimize panel"`. |
|
|
438
|
+
| `float-dock` | `button` | Docks the panel back into the main layout. `aria-label="Dock panel back into the main layout"`. |
|
|
439
|
+
| `float-body` | `div` | The float's content area; holds the panel's layout. |
|
|
440
|
+
| `float-resize` | `div` | An edge/corner resize handle (eight in total); `data-edge` is the direction. |
|
|
441
|
+
| `float-chip` | `button` | A minimized float: a rounded chip you click (or drag) to restore. |
|
|
442
|
+
| `float-chip-label` | `span` | The chip's panel title. |
|
|
354
443
|
| `dock-indicator` | `div` | The drag preview overlay (insertion line or zone pane). `pointer-events: none`. |
|
|
355
444
|
| `drag-preview` | `div` | The chip that follows the pointer during a drag, showing the dragged label. |
|
|
356
445
|
| `separator` | rrp `Separator` | rrp emits `data-separator` with `aria-orientation`; style splitters here. |
|
|
@@ -427,24 +516,26 @@ and overlays outside the layout observe the same drag).
|
|
|
427
516
|
same parts yourself when you need custom chrome. Two compound namespaces, same
|
|
428
517
|
pattern as `Panel`:
|
|
429
518
|
|
|
430
|
-
| Part | Element | Role
|
|
431
|
-
| ----------------------- | ---------------------------------------- |
|
|
432
|
-
| `Layout.Root` | `div[data-dashfoo="layout"]` | Creates the layout store. Takes `model`, `dispatch`, `renderTab`, and the chrome flags `DashfooLayout` accepts.
|
|
433
|
-
| `Layout.DragLayer` | none (overlays) | Opts the tree into drag-dock. Omit it and everything else still works, just without dragging.
|
|
434
|
-
| `Layout.Rows` | rrp split tree | Renders a `RowNode` recursively. `renderTabset` swaps in a custom tabset composition at every leaf.
|
|
435
|
-
| `Layout.Tabset` | — | The stock tabset composition, for leaves that don't need custom chrome.
|
|
436
|
-
| `
|
|
437
|
-
| `Tabset.
|
|
438
|
-
| `Tabset.
|
|
439
|
-
| `Tabset.
|
|
440
|
-
| `Tabset.
|
|
441
|
-
| `Tabset.
|
|
442
|
-
| `Tabset.
|
|
443
|
-
| `Tabset.
|
|
444
|
-
| `Tabset.
|
|
445
|
-
| `Tabset.
|
|
446
|
-
| `Tabset.
|
|
447
|
-
| `Tabset.
|
|
519
|
+
| Part | Element | Role |
|
|
520
|
+
| ----------------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
|
521
|
+
| `Layout.Root` | `div[data-dashfoo="layout"]` | Creates the layout store. Takes `model`, `dispatch`, `renderTab`, and the chrome flags `DashfooLayout` accepts. |
|
|
522
|
+
| `Layout.DragLayer` | none (overlays) | Opts the tree into drag-dock. Omit it and everything else still works, just without dragging. |
|
|
523
|
+
| `Layout.Rows` | rrp split tree | Renders a `RowNode` recursively. `renderTabset` swaps in a custom tabset composition at every leaf. |
|
|
524
|
+
| `Layout.Tabset` | — | The stock tabset composition, for leaves that don't need custom chrome. |
|
|
525
|
+
| `Layout.FloatLayer` | overlay | Wrap the tree's content to enable floating panels; renders `model.floats` as draggable overlays. Takes `floats` + `global`. |
|
|
526
|
+
| `Tabset.Root` | `div[data-dashfoo="tabset"]` | Creates the per-tabset store; owns drop registration, overflow measurement, and focus restore after close. |
|
|
527
|
+
| `Tabset.TabStrip` | `div[data-dashfoo="tabstrip"]` | The strip row (drag hit-testing targets this attribute). |
|
|
528
|
+
| `Tabset.Tablist` | `div[data-dashfoo="tablist"]` | `role="tablist"` + roving-tabindex arrow/Home/End navigation. |
|
|
529
|
+
| `Tabset.Tab` | `span[data-dashfoo="tab-item"]` | Per-tab wrapper; provides identity to the parts inside. |
|
|
530
|
+
| `Tabset.Trigger` | `button[data-dashfoo="tab"]` | The tab button: select on click, rename on double-click, draggable. Children override the label. |
|
|
531
|
+
| `Tabset.RenameInput` | `input[data-dashfoo="tab-rename"]` | Inline rename editor; renders only while its tab is being renamed. |
|
|
532
|
+
| `Tabset.CloseButton` | `button[data-dashfoo="tab-close"]` | Closes the tab with focus restore; hides when the tab isn't closable. |
|
|
533
|
+
| `Tabset.Content` | `div[data-dashfoo="tabcontent"]` | The `role="tabpanel"` pane(s); honors `keepMounted`. Children render-prop overrides `renderTab`. |
|
|
534
|
+
| `Tabset.Toolbar` | `div[data-dashfoo="tabset-toolbar"]` | Trailing toolbar container. |
|
|
535
|
+
| `Tabset.OverflowMenu` | menu button | Lists clipped tabs; hides when nothing overflows. |
|
|
536
|
+
| `Tabset.Grip` | `button[data-dashfoo="tabset-grip"]` | Drag handle for the whole tabset; hides when tabset dragging is off. |
|
|
537
|
+
| `Tabset.MaximizeButton` | `button[data-dashfoo="tabset-maximize"]` | Maximize/restore toggle; hides when maximize is off. |
|
|
538
|
+
| `Tabset.FloatButton` | `button[data-dashfoo="tabset-float"]` | Floats the tabset into a movable overlay; hides when `floatable` is off or the tabset is maximized. |
|
|
448
539
|
|
|
449
540
|
All parts spread native props (`className`, `style`, handlers) like `Panel`;
|
|
450
541
|
the structural attributes (`role`, ids, `data-dashfoo`) are applied after the
|
|
@@ -557,7 +648,8 @@ type Persistence;
|
|
|
557
648
|
type PersistConfig;
|
|
558
649
|
|
|
559
650
|
// Responsive
|
|
560
|
-
|
|
651
|
+
useContainerWidth; // [ref, width] via ResizeObserver — the hand-built building block
|
|
652
|
+
useResponsiveModel; // per-breakpoint model + lock flags (no remount)
|
|
561
653
|
matchBreakpoint; // does a breakpoint apply at a given width
|
|
562
654
|
activeBreakpoint; // first matching breakpoint, else the last (the catch-all)
|
|
563
655
|
type Breakpoint;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { Action, Dashfoo, DockLocation, DragSubject, DropIntent, RowNode, TabNode, TabsetNode } from "@dashfoo/core";
|
|
2
|
-
import { ComponentProps, ComponentType, ReactNode } from "react";
|
|
1
|
+
import { Action, Dashfoo, DockLocation, DragSubject, DropIntent, FloatNode, GlobalAttributes, Orientation, RowNode, SnapConfig, TabNode, TabsetNode } from "@dashfoo/core";
|
|
2
|
+
import { ComponentProps, ComponentType, ReactNode, Ref } from "react";
|
|
3
3
|
import { DragDropManager } from "@dnd-kit/dom";
|
|
4
4
|
//#region src/hooks/persistence.d.ts
|
|
5
5
|
type StorageAdapter = {
|
|
@@ -40,6 +40,8 @@ type DashfooHandle = {
|
|
|
40
40
|
canUndo: () => boolean;
|
|
41
41
|
closeTab: (tabId: string) => void;
|
|
42
42
|
dispatch: (action: Action) => void;
|
|
43
|
+
dockFloat: (floatId: string) => void;
|
|
44
|
+
floatTab: (tabId: string) => void;
|
|
43
45
|
getModel: () => Dashfoo;
|
|
44
46
|
maximizeTabset: (tabsetId: string | null) => void;
|
|
45
47
|
redo: () => void;
|
|
@@ -56,6 +58,7 @@ type DashfooLayoutProps = {
|
|
|
56
58
|
draggableTabsets?: boolean;
|
|
57
59
|
editable?: boolean;
|
|
58
60
|
factory?: (tab: TabNode) => ReactNode;
|
|
61
|
+
floatable?: boolean;
|
|
59
62
|
keepMounted?: boolean;
|
|
60
63
|
maximizable?: boolean;
|
|
61
64
|
model?: Dashfoo;
|
|
@@ -68,6 +71,11 @@ type DashfooLayoutProps = {
|
|
|
68
71
|
renderTabLabel?: (tab: TabNode) => ReactNode;
|
|
69
72
|
renderTabsetToolbar?: (tabset: TabsetNode) => ReactNode;
|
|
70
73
|
resizableSplits?: boolean;
|
|
74
|
+
responsive?: {
|
|
75
|
+
maxWidth: number;
|
|
76
|
+
orientation?: Orientation;
|
|
77
|
+
};
|
|
78
|
+
snap?: SnapConfig;
|
|
71
79
|
};
|
|
72
80
|
declare const DashfooLayout: import("react").ForwardRefExoticComponent<DashfooLayoutProps & import("react").RefAttributes<DashfooHandle>>;
|
|
73
81
|
//#endregion
|
|
@@ -101,6 +109,13 @@ type DragProviderProps = {
|
|
|
101
109
|
splitDock?: boolean;
|
|
102
110
|
};
|
|
103
111
|
//#endregion
|
|
112
|
+
//#region src/components/float-layer.d.ts
|
|
113
|
+
type FloatLayerProps = {
|
|
114
|
+
children: ReactNode;
|
|
115
|
+
floats: Array<FloatNode>;
|
|
116
|
+
global: GlobalAttributes;
|
|
117
|
+
};
|
|
118
|
+
//#endregion
|
|
104
119
|
//#region src/components/layout-root.d.ts
|
|
105
120
|
type LayoutRootProps = Omit<ComponentProps<"div">, "children"> & {
|
|
106
121
|
children: ReactNode;
|
|
@@ -109,6 +124,7 @@ type LayoutRootProps = Omit<ComponentProps<"div">, "children"> & {
|
|
|
109
124
|
draggableTabs?: boolean;
|
|
110
125
|
draggableTabsets?: boolean;
|
|
111
126
|
editable?: boolean;
|
|
127
|
+
floatable?: boolean;
|
|
112
128
|
keepMounted?: boolean;
|
|
113
129
|
maximizable?: boolean;
|
|
114
130
|
model: Dashfoo;
|
|
@@ -117,6 +133,8 @@ type LayoutRootProps = Omit<ComponentProps<"div">, "children"> & {
|
|
|
117
133
|
renderTabLabel?: (tab: TabNode) => ReactNode;
|
|
118
134
|
renderTabsetToolbar?: (tabset: TabsetNode) => ReactNode;
|
|
119
135
|
resizableSplits?: boolean;
|
|
136
|
+
rootRef?: Ref<HTMLDivElement>;
|
|
137
|
+
snap?: SnapConfig;
|
|
120
138
|
};
|
|
121
139
|
//#endregion
|
|
122
140
|
//#region src/components/row-view.d.ts
|
|
@@ -137,6 +155,11 @@ declare const Layout: {
|
|
|
137
155
|
onCommit,
|
|
138
156
|
splitDock
|
|
139
157
|
}: DragProviderProps) => import("react").ReactNode;
|
|
158
|
+
readonly FloatLayer: ({
|
|
159
|
+
children,
|
|
160
|
+
floats,
|
|
161
|
+
global
|
|
162
|
+
}: FloatLayerProps) => import("react").ReactNode;
|
|
140
163
|
readonly Root: ({
|
|
141
164
|
children,
|
|
142
165
|
closableTabs,
|
|
@@ -144,6 +167,7 @@ declare const Layout: {
|
|
|
144
167
|
draggableTabs,
|
|
145
168
|
draggableTabsets,
|
|
146
169
|
editable,
|
|
170
|
+
floatable,
|
|
147
171
|
keepMounted,
|
|
148
172
|
maximizable,
|
|
149
173
|
model,
|
|
@@ -152,6 +176,8 @@ declare const Layout: {
|
|
|
152
176
|
renderTabLabel,
|
|
153
177
|
renderTabsetToolbar,
|
|
154
178
|
resizableSplits,
|
|
179
|
+
rootRef,
|
|
180
|
+
snap,
|
|
155
181
|
style,
|
|
156
182
|
...props
|
|
157
183
|
}: LayoutRootProps) => import("react").ReactNode;
|
|
@@ -193,6 +219,7 @@ type TabsetContentProps = Omit<ComponentProps<"div">, "children"> & {
|
|
|
193
219
|
type TabsetToolbarProps = ComponentProps<"div">;
|
|
194
220
|
type TabsetGripProps = ComponentProps<"button">;
|
|
195
221
|
type TabsetMaximizeButtonProps = ComponentProps<"button">;
|
|
222
|
+
type TabsetFloatButtonProps = ComponentProps<"button">;
|
|
196
223
|
//#endregion
|
|
197
224
|
//#region src/components/tabset/tabset-root.d.ts
|
|
198
225
|
type TabsetRootProps = ComponentProps<"div"> & {
|
|
@@ -221,6 +248,11 @@ declare const Tabset: {
|
|
|
221
248
|
style,
|
|
222
249
|
...props
|
|
223
250
|
}: TabsetContentProps) => import("react").ReactNode;
|
|
251
|
+
readonly FloatButton: ({
|
|
252
|
+
children,
|
|
253
|
+
onClick,
|
|
254
|
+
...props
|
|
255
|
+
}: TabsetFloatButtonProps) => import("react").ReactNode;
|
|
224
256
|
readonly Grip: ({
|
|
225
257
|
children,
|
|
226
258
|
ref: userRef,
|
|
@@ -317,6 +349,7 @@ type LayoutState = {
|
|
|
317
349
|
draggableTabs: boolean;
|
|
318
350
|
draggableTabsets: boolean;
|
|
319
351
|
editable: boolean;
|
|
352
|
+
floatable: boolean;
|
|
320
353
|
keepMounted: boolean;
|
|
321
354
|
maximizable: boolean;
|
|
322
355
|
maximizedTabsetId: string | undefined;
|
|
@@ -325,6 +358,7 @@ type LayoutState = {
|
|
|
325
358
|
renderTabLabel: ((tab: TabNode) => ReactNode) | undefined;
|
|
326
359
|
renderTabsetToolbar: ((tabset: TabsetNode) => ReactNode) | undefined;
|
|
327
360
|
resizableSplits: boolean;
|
|
361
|
+
snap: SnapConfig | null;
|
|
328
362
|
splitDock: boolean;
|
|
329
363
|
tabLocation: "bottom" | "top";
|
|
330
364
|
tabsetMinSize: number;
|
|
@@ -334,6 +368,7 @@ declare const useLayout: <T>(selector: (state: LayoutState) => T) => T;
|
|
|
334
368
|
//#endregion
|
|
335
369
|
//#region src/hooks/responsive.d.ts
|
|
336
370
|
type Breakpoint = {
|
|
371
|
+
compact?: boolean;
|
|
337
372
|
id: string;
|
|
338
373
|
model: Dashfoo;
|
|
339
374
|
query?: {
|
|
@@ -348,11 +383,15 @@ type UseResponsiveModelOptions = {
|
|
|
348
383
|
type ResponsiveModel = {
|
|
349
384
|
breakpoint: string;
|
|
350
385
|
containerRef: (element: HTMLElement | null) => void;
|
|
351
|
-
|
|
352
|
-
|
|
386
|
+
draggableTabs: boolean;
|
|
387
|
+
draggableTabsets: boolean;
|
|
388
|
+
isCompact: boolean;
|
|
389
|
+
model: Dashfoo;
|
|
390
|
+
resizableSplits: boolean;
|
|
353
391
|
};
|
|
354
392
|
declare const matchBreakpoint: (breakpoint: Breakpoint, width: number) => boolean;
|
|
355
393
|
declare const activeBreakpoint: (breakpoints: Array<Breakpoint>, width: number) => Breakpoint;
|
|
394
|
+
declare const useContainerWidth: () => [(element: HTMLElement | null) => void, number];
|
|
356
395
|
declare const useResponsiveModel: ({
|
|
357
396
|
breakpoints
|
|
358
397
|
}: UseResponsiveModelOptions) => ResponsiveModel;
|
|
@@ -377,5 +416,5 @@ type UseDashfooStoreOptions = {
|
|
|
377
416
|
};
|
|
378
417
|
declare const useDashfooStore: (options: UseDashfooStoreOptions) => DashfooStore;
|
|
379
418
|
//#endregion
|
|
380
|
-
export { type Breakpoint, DashfooDragProvider, type DashfooHandle, DashfooLayout, type DashfooLayoutProps, type DashfooStore, type ExternalTabSourceOptions, Layout, type DragProviderProps as LayoutDragLayerProps, 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 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, useDashfooStore, useDragSubject, useDropIntent, useExternalTabSource, useLayout, usePersistence, useResponsiveModel, useTab, useTabset };
|
|
419
|
+
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 };
|
|
381
420
|
//# 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-root.tsx","../src/hooks/drag-hooks.tsx","../src/components/drag-adapter.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":";;;;KAQK,cAAA;EACH,OAAA,GAAU,GAAA;EACV,UAAA,GAAa,GAAA;EACb,OAAA,GAAU,GAAA,UAAa,KAAA;AAAA;AAAA,cAGnB,oBAAA,QAA2B,cAWhC;AAAA,cAIK,mBAAA,EAAqB,cAiC1B;AAAA,KAII,aAAA;EACH,UAAA;EACA,GAAA;EACA,OAAA,EAAS,cAAc;AAAA;AAAA,KAGpB,WAAA;EACH,KAAA;EAEA,YAAA,EAAc,OAAA;EACd,IAAA,GAAO,KAAA,EAAO,OAAO;AAAA;AAAA,cASjB,cAAA,GACJ,MAAA,EAAQ,aAAA,SACR,YAAA,EAAc,OAAA,iBACb,WAAA;;;
|
|
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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"}
|