@ai-matrx/canvas 0.6.0 → 0.7.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/dist/styles.css CHANGED
@@ -194,6 +194,8 @@
194
194
 
195
195
  .mxc-pane-header {
196
196
  flex: none;
197
+ /* Narrow-header rules below read the header's own width. */
198
+ container: mxc-pane-header / inline-size;
197
199
  display: flex;
198
200
  align-items: center;
199
201
  gap: 0.25rem;
@@ -224,9 +226,10 @@
224
226
  cursor: grab;
225
227
  }
226
228
 
227
- /* One tab as a title, with its own close (a lone tab is never a trap). */
229
+ /* One tab as a title, with its own close (a lone tab is never a trap). Keeps icon + ~7 letters + "…". */
228
230
  .mxc-single-title {
229
231
  position: relative;
232
+ min-width: min(6.25rem, 100%);
230
233
  padding-right: 0.25rem;
231
234
  }
232
235
 
@@ -258,12 +261,14 @@
258
261
  gap: 0.125rem;
259
262
  }
260
263
 
264
+ /* Nothing leading: no box and no gap of its own — the tabs keep that room; the actions still sit at the end. */
261
265
  .mxc-pane-leading:empty {
262
- min-width: 0.25rem;
266
+ display: none;
263
267
  }
264
268
 
265
269
  .mxc-pane-actions {
266
270
  flex: none;
271
+ margin-left: auto;
267
272
  display: flex;
268
273
  align-items: center;
269
274
  gap: 0.125rem;
@@ -277,6 +282,17 @@
277
282
  min-width: 0;
278
283
  }
279
284
 
285
+ /* A narrow header: controls close up and the title may shrink to its icon — nothing ever overlaps. */
286
+ @container mxc-pane-header (max-width: 22rem) {
287
+ .mxc-pane-actions {
288
+ gap: 0;
289
+ }
290
+
291
+ .mxc-single-title {
292
+ min-width: 0;
293
+ }
294
+ }
295
+
280
296
  .mxc-pane-body {
281
297
  position: relative;
282
298
  flex: 1 1 auto;
@@ -404,73 +420,83 @@
404
420
  /* ── tabs ───────────────────────────────────────────────────────────────── */
405
421
 
406
422
  /*
407
- * THE STRIP takes what the header has: it is as wide as its tabs need (the
408
- * leading slot after it has no basis), so "+" sits right after the last tab
409
- * and only shrinks when the header runs out of room. Past the tabs' minimum
410
- * the strip scrolls, and says so: the clipped edge fades and chevrons appear.
423
+ * THE STRIP takes the header's free width (flex-basis 0: what it shows never
424
+ * changes how wide it is, so the fit is stable). Tabs are as wide as their
425
+ * names; short of room they shrink — the active tab least — to a floor
426
+ * (--mxc-tab-min: icon + ~6 letters + "…"; the active tab keeps more), and
427
+ * the tabs that do not fit at their floor are reached from "All tabs" (the
428
+ * strip never scrolls and never overlaps a control). At the narrowest it is
429
+ * the active tab's title and that menu.
411
430
  */
412
431
  .mxc-tabstrip {
413
- flex: 0 1 auto;
432
+ flex: 1 1 0;
414
433
  min-width: 0;
415
434
  display: flex;
416
435
  align-items: center;
417
436
  gap: 0.125rem;
437
+ overflow: hidden;
418
438
  }
419
439
 
420
440
  .mxc-tabs {
421
- /* The tabs' offset parent, so "keep the active tab in view" measures in strip coordinates. */
422
441
  position: relative;
423
442
  flex: 0 1 auto;
424
443
  min-width: 0;
425
444
  display: flex;
426
445
  align-items: center;
427
446
  gap: 0.125rem;
428
- overflow-x: auto;
429
- scrollbar-width: none;
430
- --mxc-fade-start: 0px;
431
- --mxc-fade-end: 0px;
447
+ overflow: hidden;
432
448
  }
433
449
 
434
- .mxc-tabs::-webkit-scrollbar {
435
- display: none;
450
+ /* "All tabs": a chevron and how many tabs are out of sight. */
451
+ .mxc-tab-list {
452
+ flex: none;
453
+ width: auto;
454
+ min-width: 1.5rem;
455
+ gap: 0.0625rem;
456
+ padding: 0 0.25rem;
436
457
  }
437
458
 
438
- /* Overflow cue: the clipped edge(s) fade out. */
439
- .mxc-tabstrip[data-overflow-start] > .mxc-tabs {
440
- --mxc-fade-start: 1.5rem;
459
+ .mxc-tab-list-count {
460
+ font-size: 0.6875rem;
461
+ line-height: 1;
462
+ font-variant-numeric: tabular-nums;
441
463
  }
442
464
 
443
- .mxc-tabstrip[data-overflow-end] > .mxc-tabs {
444
- --mxc-fade-end: 1.5rem;
465
+ .mxc-tab-list-menu {
466
+ max-height: min(24rem, 70vh);
467
+ overflow-y: auto;
445
468
  }
446
469
 
447
- .mxc-tabstrip[data-overflow] > .mxc-tabs {
448
- -webkit-mask-image: linear-gradient(to right, transparent 0, #000 var(--mxc-fade-start), #000 calc(100% - var(--mxc-fade-end)), transparent 100%);
449
- mask-image: linear-gradient(to right, transparent 0, #000 var(--mxc-fade-start), #000 calc(100% - var(--mxc-fade-end)), transparent 100%);
470
+ .mxc-tab-list-item {
471
+ max-width: 18rem;
450
472
  }
451
473
 
452
- .mxc-tabs-scroll {
453
- flex: none;
474
+ .mxc-tab-list-item[data-active] {
475
+ font-weight: 600;
476
+ }
477
+
478
+ .mxc-tab-list-title {
479
+ min-width: 0;
480
+ overflow: hidden;
481
+ text-overflow: ellipsis;
482
+ white-space: nowrap;
454
483
  }
455
484
 
456
485
  /*
457
486
  * TAB DENSITY (Claude Code / Codex): 12.5px text, a 14px icon, 6px side
458
- * padding. A tab is as wide as its name (up to 12rem); tabs shrink evenly
459
- * only when the header is out of room, to a 4.5rem floor (a tab is never
460
- * squeezed to three letters), then the strip scrolls. The active tab keeps
461
- * icon + ~10 letters. Every tab reserves the room of its close, so a name is
462
- * never under the button; the close shows on hover, the active tab and focus.
487
+ * padding, up to 12rem wide. The active tab reserves the room of its (always
488
+ * shown) close; a background tab's close is overlaid on hover.
463
489
  */
464
490
  .mxc-tab {
465
491
  position: relative;
466
492
  flex: 0 1 auto;
467
- min-width: 4.5rem;
493
+ min-width: var(--mxc-tab-min, 78px);
468
494
  max-width: 12rem;
469
495
  display: flex;
470
496
  align-items: center;
471
- gap: 0.3125rem;
497
+ gap: 0.25rem;
472
498
  height: 1.625rem;
473
- padding: 0 1.375rem 0 0.375rem;
499
+ padding: 0 0.375rem;
474
500
  border-radius: 0.375rem;
475
501
  font-size: 0.78125rem;
476
502
  line-height: 1rem;
@@ -481,18 +507,26 @@
481
507
  box-sizing: border-box;
482
508
  }
483
509
 
484
- /* A tab without a close (BrowserTabs with no onClose) keeps even padding. */
485
- .mxc-tab:not(:has(> .mxc-tab-close)) {
486
- padding-right: 0.375rem;
510
+ /* The active tab always shows its close: its room is reserved. */
511
+ .mxc-tab[data-active]:has(> .mxc-tab-close) {
512
+ padding-right: 1.25rem;
487
513
  }
488
514
 
515
+ /* The active tab gets priority width: it shrinks last and keeps a higher floor. */
489
516
  .mxc-tab[data-active] {
490
- min-width: min(7.5rem, 100%);
517
+ flex-shrink: 0.2;
518
+ min-width: var(--mxc-tab-active-min, 100px);
491
519
  background: var(--mxc-tab-active-bg);
492
520
  color: var(--mxc-fg);
493
521
  box-shadow: var(--mxc-tab-active-shadow);
494
522
  }
495
523
 
524
+ /* The narrowest strip: the active tab is the title, as narrow as it must be (icon + "…"). */
525
+ .mxc-tabstrip[data-compact] .mxc-tab {
526
+ flex: 0 1 auto;
527
+ min-width: 0;
528
+ }
529
+
496
530
  .mxc-tab:hover {
497
531
  background: var(--mxc-hover);
498
532
  }
@@ -531,10 +565,27 @@
531
565
  flex: 0 1 auto;
532
566
  min-width: 0;
533
567
  overflow: hidden;
534
- text-overflow: ellipsis;
568
+ text-overflow: clip;
535
569
  white-space: nowrap;
536
570
  }
537
571
 
572
+ /*
573
+ * A name that is really cut (data-truncated: measured more than 1px short)
574
+ * ends in "…". Only then — system fonts measure a fraction wider than their
575
+ * intrinsic size, which would put "…" on a name that fits.
576
+ */
577
+ .mxc-tab[data-truncated] .mxc-tab-title,
578
+ .mxc-single-title[data-truncated] > .mxc-tab-title {
579
+ text-overflow: ellipsis;
580
+ }
581
+
582
+ /* A background tab's close is overlaid while shown: the name's end fades under it. */
583
+ .mxc-tab:not([data-active]):hover:has(> .mxc-tab-close) .mxc-tab-title,
584
+ .mxc-tab:not([data-active]):focus-within:has(> .mxc-tab-close) .mxc-tab-title {
585
+ -webkit-mask-image: linear-gradient(to left, transparent 1.125rem, #000 1.875rem);
586
+ mask-image: linear-gradient(to left, transparent 1.125rem, #000 1.875rem);
587
+ }
588
+
538
589
  .mxc-tab-note {
539
590
  flex: none;
540
591
  font-size: 0.6875rem;
@@ -84,6 +84,11 @@ interface CanvasItem {
84
84
  * Chat finds the draft.
85
85
  */
86
86
  readonly kept?: readonly CanvasHistoryEntry[] | undefined;
87
+ /**
88
+ * Where Forward goes (newest-to-visit LAST): every step Back left, in order.
89
+ * A navigate to anything else clears it, as in a browser. Absent = no Forward.
90
+ */
91
+ readonly forward?: readonly CanvasHistoryEntry[] | undefined;
87
92
  /**
88
93
  * The mounted body's identity. Minted when the item is created and kept by
89
94
  * `rekey`, so a draft that receives its durable id keeps its live body.
@@ -248,6 +253,12 @@ type CanvasAction = {
248
253
  itemId: CanvasItemId;
249
254
  now: number;
250
255
  };
256
+ } | {
257
+ type: `${typeof P}forward`;
258
+ payload: {
259
+ itemId: CanvasItemId;
260
+ now: number;
261
+ };
251
262
  } | {
252
263
  type: `${typeof P}closeItem`;
253
264
  payload: {
@@ -356,6 +367,8 @@ declare const canvasActions: {
356
367
  readonly navigate: (itemId: CanvasItemId, to: CanvasNavigateInput) => CanvasAction;
357
368
  /** Returns a tab to what it showed before its last navigate. */
358
369
  readonly back: (itemId: CanvasItemId) => CanvasAction;
370
+ /** Re-does the last Back (the step Back left), with that step's live body. */
371
+ readonly forward: (itemId: CanvasItemId) => CanvasAction;
359
372
  readonly closeItem: (itemId: CanvasItemId) => CanvasAction;
360
373
  readonly closeOthers: (itemId: CanvasItemId) => CanvasAction;
361
374
  readonly activate: (itemId: CanvasItemId) => CanvasAction;
@@ -476,6 +489,8 @@ declare function toPersistableSnapshot(state: CanvasState, isRestorable: (kind:
476
489
  * the centre squeeze. Side-by-side panes narrower than `paneMinWidth` stack
477
490
  * instead of squeezing.
478
491
  */
492
+ /** The web's narrowest side-by-side pane (px): below it, a side-by-side split renders stacked. */
493
+ declare const CANVAS_PANE_MIN_WIDTH = 280;
479
494
  interface CanvasLayoutRules {
480
495
  /** Width before the person drags the edge: CSS px, or a fraction of the region the canvas shares. */
481
496
  readonly defaultWidth: number | {
@@ -619,6 +634,8 @@ interface CanvasController {
619
634
  navigate(itemId: CanvasItemId, to: CanvasNavigateInput): CanvasItemId | null;
620
635
  /** Returns a tab to what it showed before (see navigate). Null when it has no history. */
621
636
  back(itemId: CanvasItemId): CanvasItemId | null;
637
+ /** Re-does the last Back with the same live body. Null when there is nothing forward. */
638
+ forward(itemId: CanvasItemId): CanvasItemId | null;
622
639
  /** Opens the launcher as a new tab in a pane (default: this window's focused pane), or focuses the one already there. */
623
640
  newTab(paneId?: CanvasPaneId): CanvasItemId;
624
641
  close(itemId: CanvasItemId): void;
@@ -709,7 +726,9 @@ declare function preferredFlowDirection(presentation: CanvasPresentation | null
709
726
  *
710
727
  * absent → open it (and reveal the canvas)
711
728
  * background → bring it forward: activate its tab, focus its pane, reveal
712
- * visible → close it (default) or put the canvas away (`whenVisible: "hide"`)
729
+ * visible → close it (default) or put the canvas away (`whenVisible: "hide"`);
730
+ * closing the canvas's LAST tab puts the canvas away too — a toggle
731
+ * never leaves an empty "New tab" launcher behind
713
732
  *
714
733
  * "Visible" means: on the canvas, the active tab of its pane, and its window's
715
734
  * canvas is open. The same item in a popped-out window counts in that window.
@@ -732,4 +751,4 @@ interface ToggleKindInput {
732
751
  /** Returns what the item is after the click. */
733
752
  declare function toggleKind(controller: CanvasController, input: ToggleKindInput): CanvasKindVisibility;
734
753
 
735
- export { canvasActions as $, type CanvasControllerOptions as A, type CanvasErrorReport as B, type CanvasItemId as C, type CanvasErrorSink as D, type CanvasKeyValueStore as E, type CanvasKindVisibility as F, type CanvasLayoutRules as G, type CanvasNavigateInput as H, type CanvasOpenInput as I, type CanvasOpenTarget as J, type CanvasOrientation as K, type CanvasPersistencePort as L, type CanvasPreferredTarget as M, type CanvasPresentation as N, type CanvasPresentationOrientation as O, type CanvasRect as P, type CanvasSessionAttachReason as Q, type CanvasSessionDetachReason as R, type CanvasSessionEvent as S, type CanvasSessionHooks as T, type CanvasSplitId as U, type CanvasWindowCloseMode as V, type CanvasWindowFrame as W, type CanvasWindowPorts as X, type ReduxStoreLike as Y, type ToggleKindInput as Z, bindCanvasToReduxStore as _, type CanvasWindowId as a, canvasOrientation as a0, canvasPresentation as a1, canvasReducer as a2, canvasWindowFrame as a3, canvasWindowOfPane as a4, clampDraggedCanvasWidth as a5, consoleCanvasErrorSink as a6, createCanvasController as a7, createCanvasStore as a8, createInitialCanvasState as a9, createKeyValueCanvasPersistence as aa, createLocalStorageCanvasPersistence as ab, defaultCanvasWidth as ac, fitCanvasWidth as ad, foldCanvasWindows as ae, isCanvasAction as af, listCanvasWindowIds as ag, preferredFlowDirection as ah, resolveCanvasLayoutRules as ai, sanitizeCanvasSnapshot as aj, selectCanvasKindVisibility as ak, shouldStackSplit as al, toPersistableSnapshot as am, toggleKind as an, type CanvasJson as b, type CanvasLayoutNode as c, type CanvasPaneId as d, type CanvasStoreBinding as e, type CanvasState as f, type CanvasAction as g, type CanvasController as h, type CanvasItem as i, type CanvasExtraWindow as j, type CanvasHistoryEntry as k, type CanvasPane as l, canvasWindowOfItem as m, CANVAS_DEFAULT_KEY as n, CANVAS_DEFAULT_WIDTH as o, CANVAS_DESKTOP_LAYOUT_RULES as p, CANVAS_HISTORY_LIMIT as q, CANVAS_KEEP_ALIVE_DEPTH as r, CANVAS_LAUNCHER_KIND as s, CANVAS_MAIN_WINDOW as t, CANVAS_MIN_SPLIT_FRACTION as u, CANVAS_MIN_WIDTH as v, CANVAS_NARROW_WIDTH as w, CANVAS_PHONE_MAX_WIDTH as x, CANVAS_STORAGE_KEY as y, CANVAS_WEB_LAYOUT_RULES as z };
754
+ export { bindCanvasToReduxStore as $, CANVAS_WEB_LAYOUT_RULES as A, type CanvasControllerOptions as B, type CanvasItemId as C, type CanvasErrorReport as D, type CanvasErrorSink as E, type CanvasKeyValueStore as F, type CanvasKindVisibility as G, type CanvasLayoutRules as H, type CanvasNavigateInput as I, type CanvasOpenInput as J, type CanvasOpenTarget as K, type CanvasOrientation as L, type CanvasPersistencePort as M, type CanvasPreferredTarget as N, type CanvasPresentation as O, type CanvasPresentationOrientation as P, type CanvasRect as Q, type CanvasSessionAttachReason as R, type CanvasSessionDetachReason as S, type CanvasSessionEvent as T, type CanvasSessionHooks as U, type CanvasSplitId as V, type CanvasWindowCloseMode as W, type CanvasWindowFrame as X, type CanvasWindowPorts as Y, type ReduxStoreLike as Z, type ToggleKindInput as _, type CanvasWindowId as a, canvasActions as a0, canvasOrientation as a1, canvasPresentation as a2, canvasReducer as a3, canvasWindowFrame as a4, canvasWindowOfPane as a5, clampDraggedCanvasWidth as a6, consoleCanvasErrorSink as a7, createCanvasController as a8, createCanvasStore as a9, createInitialCanvasState as aa, createKeyValueCanvasPersistence as ab, createLocalStorageCanvasPersistence as ac, defaultCanvasWidth as ad, fitCanvasWidth as ae, foldCanvasWindows as af, isCanvasAction as ag, listCanvasWindowIds as ah, preferredFlowDirection as ai, resolveCanvasLayoutRules as aj, sanitizeCanvasSnapshot as ak, selectCanvasKindVisibility as al, shouldStackSplit as am, toPersistableSnapshot as an, toggleKind as ao, type CanvasJson as b, type CanvasLayoutNode as c, type CanvasPaneId as d, type CanvasStoreBinding as e, type CanvasState as f, type CanvasAction as g, type CanvasController as h, type CanvasItem as i, type CanvasExtraWindow as j, type CanvasHistoryEntry as k, type CanvasPane as l, canvasWindowOfItem as m, CANVAS_DEFAULT_KEY as n, CANVAS_DEFAULT_WIDTH as o, CANVAS_DESKTOP_LAYOUT_RULES as p, CANVAS_HISTORY_LIMIT as q, CANVAS_KEEP_ALIVE_DEPTH as r, CANVAS_LAUNCHER_KIND as s, CANVAS_MAIN_WINDOW as t, CANVAS_MIN_SPLIT_FRACTION as u, CANVAS_MIN_WIDTH as v, CANVAS_NARROW_WIDTH as w, CANVAS_PANE_MIN_WIDTH as x, CANVAS_PHONE_MAX_WIDTH as y, CANVAS_STORAGE_KEY as z };
@@ -84,6 +84,11 @@ interface CanvasItem {
84
84
  * Chat finds the draft.
85
85
  */
86
86
  readonly kept?: readonly CanvasHistoryEntry[] | undefined;
87
+ /**
88
+ * Where Forward goes (newest-to-visit LAST): every step Back left, in order.
89
+ * A navigate to anything else clears it, as in a browser. Absent = no Forward.
90
+ */
91
+ readonly forward?: readonly CanvasHistoryEntry[] | undefined;
87
92
  /**
88
93
  * The mounted body's identity. Minted when the item is created and kept by
89
94
  * `rekey`, so a draft that receives its durable id keeps its live body.
@@ -248,6 +253,12 @@ type CanvasAction = {
248
253
  itemId: CanvasItemId;
249
254
  now: number;
250
255
  };
256
+ } | {
257
+ type: `${typeof P}forward`;
258
+ payload: {
259
+ itemId: CanvasItemId;
260
+ now: number;
261
+ };
251
262
  } | {
252
263
  type: `${typeof P}closeItem`;
253
264
  payload: {
@@ -356,6 +367,8 @@ declare const canvasActions: {
356
367
  readonly navigate: (itemId: CanvasItemId, to: CanvasNavigateInput) => CanvasAction;
357
368
  /** Returns a tab to what it showed before its last navigate. */
358
369
  readonly back: (itemId: CanvasItemId) => CanvasAction;
370
+ /** Re-does the last Back (the step Back left), with that step's live body. */
371
+ readonly forward: (itemId: CanvasItemId) => CanvasAction;
359
372
  readonly closeItem: (itemId: CanvasItemId) => CanvasAction;
360
373
  readonly closeOthers: (itemId: CanvasItemId) => CanvasAction;
361
374
  readonly activate: (itemId: CanvasItemId) => CanvasAction;
@@ -476,6 +489,8 @@ declare function toPersistableSnapshot(state: CanvasState, isRestorable: (kind:
476
489
  * the centre squeeze. Side-by-side panes narrower than `paneMinWidth` stack
477
490
  * instead of squeezing.
478
491
  */
492
+ /** The web's narrowest side-by-side pane (px): below it, a side-by-side split renders stacked. */
493
+ declare const CANVAS_PANE_MIN_WIDTH = 280;
479
494
  interface CanvasLayoutRules {
480
495
  /** Width before the person drags the edge: CSS px, or a fraction of the region the canvas shares. */
481
496
  readonly defaultWidth: number | {
@@ -619,6 +634,8 @@ interface CanvasController {
619
634
  navigate(itemId: CanvasItemId, to: CanvasNavigateInput): CanvasItemId | null;
620
635
  /** Returns a tab to what it showed before (see navigate). Null when it has no history. */
621
636
  back(itemId: CanvasItemId): CanvasItemId | null;
637
+ /** Re-does the last Back with the same live body. Null when there is nothing forward. */
638
+ forward(itemId: CanvasItemId): CanvasItemId | null;
622
639
  /** Opens the launcher as a new tab in a pane (default: this window's focused pane), or focuses the one already there. */
623
640
  newTab(paneId?: CanvasPaneId): CanvasItemId;
624
641
  close(itemId: CanvasItemId): void;
@@ -709,7 +726,9 @@ declare function preferredFlowDirection(presentation: CanvasPresentation | null
709
726
  *
710
727
  * absent → open it (and reveal the canvas)
711
728
  * background → bring it forward: activate its tab, focus its pane, reveal
712
- * visible → close it (default) or put the canvas away (`whenVisible: "hide"`)
729
+ * visible → close it (default) or put the canvas away (`whenVisible: "hide"`);
730
+ * closing the canvas's LAST tab puts the canvas away too — a toggle
731
+ * never leaves an empty "New tab" launcher behind
713
732
  *
714
733
  * "Visible" means: on the canvas, the active tab of its pane, and its window's
715
734
  * canvas is open. The same item in a popped-out window counts in that window.
@@ -732,4 +751,4 @@ interface ToggleKindInput {
732
751
  /** Returns what the item is after the click. */
733
752
  declare function toggleKind(controller: CanvasController, input: ToggleKindInput): CanvasKindVisibility;
734
753
 
735
- export { canvasActions as $, type CanvasControllerOptions as A, type CanvasErrorReport as B, type CanvasItemId as C, type CanvasErrorSink as D, type CanvasKeyValueStore as E, type CanvasKindVisibility as F, type CanvasLayoutRules as G, type CanvasNavigateInput as H, type CanvasOpenInput as I, type CanvasOpenTarget as J, type CanvasOrientation as K, type CanvasPersistencePort as L, type CanvasPreferredTarget as M, type CanvasPresentation as N, type CanvasPresentationOrientation as O, type CanvasRect as P, type CanvasSessionAttachReason as Q, type CanvasSessionDetachReason as R, type CanvasSessionEvent as S, type CanvasSessionHooks as T, type CanvasSplitId as U, type CanvasWindowCloseMode as V, type CanvasWindowFrame as W, type CanvasWindowPorts as X, type ReduxStoreLike as Y, type ToggleKindInput as Z, bindCanvasToReduxStore as _, type CanvasWindowId as a, canvasOrientation as a0, canvasPresentation as a1, canvasReducer as a2, canvasWindowFrame as a3, canvasWindowOfPane as a4, clampDraggedCanvasWidth as a5, consoleCanvasErrorSink as a6, createCanvasController as a7, createCanvasStore as a8, createInitialCanvasState as a9, createKeyValueCanvasPersistence as aa, createLocalStorageCanvasPersistence as ab, defaultCanvasWidth as ac, fitCanvasWidth as ad, foldCanvasWindows as ae, isCanvasAction as af, listCanvasWindowIds as ag, preferredFlowDirection as ah, resolveCanvasLayoutRules as ai, sanitizeCanvasSnapshot as aj, selectCanvasKindVisibility as ak, shouldStackSplit as al, toPersistableSnapshot as am, toggleKind as an, type CanvasJson as b, type CanvasLayoutNode as c, type CanvasPaneId as d, type CanvasStoreBinding as e, type CanvasState as f, type CanvasAction as g, type CanvasController as h, type CanvasItem as i, type CanvasExtraWindow as j, type CanvasHistoryEntry as k, type CanvasPane as l, canvasWindowOfItem as m, CANVAS_DEFAULT_KEY as n, CANVAS_DEFAULT_WIDTH as o, CANVAS_DESKTOP_LAYOUT_RULES as p, CANVAS_HISTORY_LIMIT as q, CANVAS_KEEP_ALIVE_DEPTH as r, CANVAS_LAUNCHER_KIND as s, CANVAS_MAIN_WINDOW as t, CANVAS_MIN_SPLIT_FRACTION as u, CANVAS_MIN_WIDTH as v, CANVAS_NARROW_WIDTH as w, CANVAS_PHONE_MAX_WIDTH as x, CANVAS_STORAGE_KEY as y, CANVAS_WEB_LAYOUT_RULES as z };
754
+ export { bindCanvasToReduxStore as $, CANVAS_WEB_LAYOUT_RULES as A, type CanvasControllerOptions as B, type CanvasItemId as C, type CanvasErrorReport as D, type CanvasErrorSink as E, type CanvasKeyValueStore as F, type CanvasKindVisibility as G, type CanvasLayoutRules as H, type CanvasNavigateInput as I, type CanvasOpenInput as J, type CanvasOpenTarget as K, type CanvasOrientation as L, type CanvasPersistencePort as M, type CanvasPreferredTarget as N, type CanvasPresentation as O, type CanvasPresentationOrientation as P, type CanvasRect as Q, type CanvasSessionAttachReason as R, type CanvasSessionDetachReason as S, type CanvasSessionEvent as T, type CanvasSessionHooks as U, type CanvasSplitId as V, type CanvasWindowCloseMode as W, type CanvasWindowFrame as X, type CanvasWindowPorts as Y, type ReduxStoreLike as Z, type ToggleKindInput as _, type CanvasWindowId as a, canvasActions as a0, canvasOrientation as a1, canvasPresentation as a2, canvasReducer as a3, canvasWindowFrame as a4, canvasWindowOfPane as a5, clampDraggedCanvasWidth as a6, consoleCanvasErrorSink as a7, createCanvasController as a8, createCanvasStore as a9, createInitialCanvasState as aa, createKeyValueCanvasPersistence as ab, createLocalStorageCanvasPersistence as ac, defaultCanvasWidth as ad, fitCanvasWidth as ae, foldCanvasWindows as af, isCanvasAction as ag, listCanvasWindowIds as ah, preferredFlowDirection as ai, resolveCanvasLayoutRules as aj, sanitizeCanvasSnapshot as ak, selectCanvasKindVisibility as al, shouldStackSplit as am, toPersistableSnapshot as an, toggleKind as ao, type CanvasJson as b, type CanvasLayoutNode as c, type CanvasPaneId as d, type CanvasStoreBinding as e, type CanvasState as f, type CanvasAction as g, type CanvasController as h, type CanvasItem as i, type CanvasExtraWindow as j, type CanvasHistoryEntry as k, type CanvasPane as l, canvasWindowOfItem as m, CANVAS_DEFAULT_KEY as n, CANVAS_DEFAULT_WIDTH as o, CANVAS_DESKTOP_LAYOUT_RULES as p, CANVAS_HISTORY_LIMIT as q, CANVAS_KEEP_ALIVE_DEPTH as r, CANVAS_LAUNCHER_KIND as s, CANVAS_MAIN_WINDOW as t, CANVAS_MIN_SPLIT_FRACTION as u, CANVAS_MIN_WIDTH as v, CANVAS_NARROW_WIDTH as w, CANVAS_PANE_MIN_WIDTH as x, CANVAS_PHONE_MAX_WIDTH as y, CANVAS_STORAGE_KEY as z };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-matrx/canvas",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
4
  "description": "The AI Matrx canvas: a docked right-hand column with split panes, tabs, full screen, a kind registry, Redux-compatible state and persistence.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",