@surdeddd/wmkit 0.3.0 → 0.4.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.
Files changed (60) hide show
  1. package/README.md +29 -15
  2. package/README.ru.md +19 -8
  3. package/dist/angular.cjs +4 -3
  4. package/dist/angular.cjs.map +1 -1
  5. package/dist/angular.d.cts +2 -2
  6. package/dist/angular.d.ts +2 -2
  7. package/dist/angular.js +2 -1
  8. package/dist/angular.js.map +1 -1
  9. package/dist/{binder-0Oku22Nc.d.ts → binder-B2A2IZGh.d.ts} +7 -2
  10. package/dist/{binder-Dq_AZRbo.d.cts → binder-Dl07SXIM.d.cts} +7 -2
  11. package/dist/{chunk-B35DANTX.cjs → chunk-3KZZOLHW.cjs} +401 -134
  12. package/dist/chunk-3KZZOLHW.cjs.map +1 -0
  13. package/dist/{chunk-YCHJXSTC.js → chunk-FPZDAKNP.js} +400 -135
  14. package/dist/chunk-FPZDAKNP.js.map +1 -0
  15. package/dist/index.cjs +24 -16
  16. package/dist/index.d.cts +6 -5
  17. package/dist/index.d.ts +6 -5
  18. package/dist/index.js +1 -1
  19. package/dist/persist.cjs +22 -3
  20. package/dist/persist.cjs.map +1 -1
  21. package/dist/persist.d.cts +3 -1
  22. package/dist/persist.d.ts +3 -1
  23. package/dist/persist.js +22 -3
  24. package/dist/persist.js.map +1 -1
  25. package/dist/popout.cjs +3 -4
  26. package/dist/popout.cjs.map +1 -1
  27. package/dist/popout.d.cts +1 -1
  28. package/dist/popout.d.ts +1 -1
  29. package/dist/popout.js +3 -4
  30. package/dist/popout.js.map +1 -1
  31. package/dist/react.cjs +4 -3
  32. package/dist/react.cjs.map +1 -1
  33. package/dist/react.d.cts +2 -2
  34. package/dist/react.d.ts +2 -2
  35. package/dist/react.js +2 -1
  36. package/dist/react.js.map +1 -1
  37. package/dist/solid.cjs +4 -3
  38. package/dist/solid.cjs.map +1 -1
  39. package/dist/solid.d.cts +2 -2
  40. package/dist/solid.d.ts +2 -2
  41. package/dist/solid.js +2 -1
  42. package/dist/solid.js.map +1 -1
  43. package/dist/svelte.cjs +8 -5
  44. package/dist/svelte.cjs.map +1 -1
  45. package/dist/svelte.d.cts +2 -2
  46. package/dist/svelte.d.ts +2 -2
  47. package/dist/svelte.js +6 -3
  48. package/dist/svelte.js.map +1 -1
  49. package/dist/themes/retro.css +2 -0
  50. package/dist/{types-DdCtDHgt.d.cts → types-t6pyVYKN.d.cts} +21 -7
  51. package/dist/{types-DdCtDHgt.d.ts → types-t6pyVYKN.d.ts} +21 -7
  52. package/dist/vue.cjs +4 -3
  53. package/dist/vue.cjs.map +1 -1
  54. package/dist/vue.d.cts +2 -2
  55. package/dist/vue.d.ts +2 -2
  56. package/dist/vue.js +2 -1
  57. package/dist/vue.js.map +1 -1
  58. package/package.json +7 -7
  59. package/dist/chunk-B35DANTX.cjs.map +0 -1
  60. package/dist/chunk-YCHJXSTC.js.map +0 -1
@@ -11,7 +11,7 @@ interface Bounds {
11
11
  type WindowStage = 'normal' | 'minimized' | 'maximized' | 'snapped';
12
12
  type WindowLayer = 'normal' | 'floating' | 'modal';
13
13
  type ArrangeMode = 'cascade' | 'tile';
14
- type SnapZone = 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
14
+ type SnapZone = 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left-third' | 'center-third' | 'right-third';
15
15
  interface WindowFlags {
16
16
  draggable: boolean;
17
17
  resizable: boolean;
@@ -29,8 +29,10 @@ interface WindowState extends WindowFlags {
29
29
  stage: WindowStage;
30
30
  snapZone: SnapZone | null;
31
31
  layer: WindowLayer;
32
+ workspace: number;
32
33
  minSize: Size;
33
34
  maxSize: Size | null;
35
+ aspectRatio: number | null;
34
36
  openedSeq: number;
35
37
  meta: Record<string, unknown>;
36
38
  }
@@ -45,20 +47,18 @@ interface WindowInit extends Partial<WindowFlags> {
45
47
  minHeight?: number;
46
48
  maxWidth?: number;
47
49
  maxHeight?: number;
50
+ aspectRatio?: number;
48
51
  stage?: WindowStage;
49
52
  layer?: WindowLayer;
53
+ workspace?: number;
50
54
  meta?: Record<string, unknown>;
51
55
  }
52
- interface HistoryEntry {
53
- windows: Readonly<Record<string, WindowState>>;
54
- order: readonly string[];
55
- focusedId: string | null;
56
- }
57
56
  interface ManagerState {
58
57
  windows: Readonly<Record<string, WindowState>>;
59
58
  order: readonly string[];
60
59
  focusedId: string | null;
61
60
  viewport: Size;
61
+ workspace: number;
62
62
  }
63
63
  interface SerializedMaxSize {
64
64
  width: number | null;
@@ -72,6 +72,7 @@ interface SerializedState {
72
72
  windows: SerializedWindowState[];
73
73
  order: string[];
74
74
  focusedId: string | null;
75
+ workspace: number;
75
76
  }
76
77
  interface ManagerEvents {
77
78
  open: {
@@ -100,6 +101,10 @@ interface ManagerEvents {
100
101
  order: {
101
102
  order: readonly string[];
102
103
  };
104
+ workspace: {
105
+ workspace: number;
106
+ previous: number;
107
+ };
103
108
  modalblocked: {
104
109
  window: WindowState;
105
110
  };
@@ -119,12 +124,14 @@ interface ManagerOptions {
119
124
  };
120
125
  idPrefix?: string;
121
126
  historyLimit?: number;
127
+ workspace?: number;
122
128
  }
123
129
  interface WindowUpdate {
124
130
  title?: string;
125
131
  layer?: WindowLayer;
126
132
  minSize?: Size;
127
133
  maxSize?: Size | null;
134
+ aspectRatio?: number | null;
128
135
  meta?: Record<string, unknown>;
129
136
  draggable?: boolean;
130
137
  resizable?: boolean;
@@ -148,12 +155,17 @@ interface WindowManager {
148
155
  snap(id: string, zone: SnapZone): boolean;
149
156
  move(id: string, x: number, y: number): boolean;
150
157
  moveBy(id: string, dx: number, dy: number): boolean;
158
+ center(id: string): boolean;
159
+ sendToBack(id: string): boolean;
151
160
  resize(id: string, patch: Partial<Bounds>): boolean;
152
161
  update(id: string, patch: WindowUpdate): boolean;
153
162
  get(id: string): WindowState | undefined;
154
163
  getState(): ManagerState;
155
164
  minimized(): readonly WindowState[];
156
165
  setViewport(viewport: Size): void;
166
+ workspace(): number;
167
+ setWorkspace(workspace: number): boolean;
168
+ moveToWorkspace(id: string, workspace: number): boolean;
157
169
  batch(run: () => void): void;
158
170
  serialize(): SerializedState;
159
171
  hydrate(data: SerializedState): boolean;
@@ -163,6 +175,8 @@ interface WindowManager {
163
175
  canRedo(): boolean;
164
176
  beginInteraction(): void;
165
177
  endInteraction(): void;
178
+ abortInteraction(): void;
179
+ clearHistory(): void;
166
180
  saveLayout(name: string): SerializedState;
167
181
  loadLayout(name: string): boolean;
168
182
  getLayout(name: string): SerializedState | undefined;
@@ -177,4 +191,4 @@ interface WindowManager {
177
191
  destroy(): void;
178
192
  }
179
193
 
180
- export type { ArrangeMode as A, Bounds as B, HistoryEntry as H, ManagerOptions as M, SerializedMaxSize as S, WindowManager as W, ManagerState as a, WindowState as b, ManagerEvents as c, SerializedState as d, SerializedWindowState as e, Size as f, SnapZone as g, WindowFlags as h, WindowInit as i, WindowLayer as j, WindowStage as k, WindowUpdate as l };
194
+ export type { ArrangeMode as A, Bounds as B, ManagerOptions as M, SerializedMaxSize as S, WindowManager as W, ManagerState as a, WindowState as b, ManagerEvents as c, SerializedState as d, SerializedWindowState as e, Size as f, SnapZone as g, WindowFlags as h, WindowInit as i, WindowLayer as j, WindowStage as k, WindowUpdate as l };
@@ -11,7 +11,7 @@ interface Bounds {
11
11
  type WindowStage = 'normal' | 'minimized' | 'maximized' | 'snapped';
12
12
  type WindowLayer = 'normal' | 'floating' | 'modal';
13
13
  type ArrangeMode = 'cascade' | 'tile';
14
- type SnapZone = 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
14
+ type SnapZone = 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'left-third' | 'center-third' | 'right-third';
15
15
  interface WindowFlags {
16
16
  draggable: boolean;
17
17
  resizable: boolean;
@@ -29,8 +29,10 @@ interface WindowState extends WindowFlags {
29
29
  stage: WindowStage;
30
30
  snapZone: SnapZone | null;
31
31
  layer: WindowLayer;
32
+ workspace: number;
32
33
  minSize: Size;
33
34
  maxSize: Size | null;
35
+ aspectRatio: number | null;
34
36
  openedSeq: number;
35
37
  meta: Record<string, unknown>;
36
38
  }
@@ -45,20 +47,18 @@ interface WindowInit extends Partial<WindowFlags> {
45
47
  minHeight?: number;
46
48
  maxWidth?: number;
47
49
  maxHeight?: number;
50
+ aspectRatio?: number;
48
51
  stage?: WindowStage;
49
52
  layer?: WindowLayer;
53
+ workspace?: number;
50
54
  meta?: Record<string, unknown>;
51
55
  }
52
- interface HistoryEntry {
53
- windows: Readonly<Record<string, WindowState>>;
54
- order: readonly string[];
55
- focusedId: string | null;
56
- }
57
56
  interface ManagerState {
58
57
  windows: Readonly<Record<string, WindowState>>;
59
58
  order: readonly string[];
60
59
  focusedId: string | null;
61
60
  viewport: Size;
61
+ workspace: number;
62
62
  }
63
63
  interface SerializedMaxSize {
64
64
  width: number | null;
@@ -72,6 +72,7 @@ interface SerializedState {
72
72
  windows: SerializedWindowState[];
73
73
  order: string[];
74
74
  focusedId: string | null;
75
+ workspace: number;
75
76
  }
76
77
  interface ManagerEvents {
77
78
  open: {
@@ -100,6 +101,10 @@ interface ManagerEvents {
100
101
  order: {
101
102
  order: readonly string[];
102
103
  };
104
+ workspace: {
105
+ workspace: number;
106
+ previous: number;
107
+ };
103
108
  modalblocked: {
104
109
  window: WindowState;
105
110
  };
@@ -119,12 +124,14 @@ interface ManagerOptions {
119
124
  };
120
125
  idPrefix?: string;
121
126
  historyLimit?: number;
127
+ workspace?: number;
122
128
  }
123
129
  interface WindowUpdate {
124
130
  title?: string;
125
131
  layer?: WindowLayer;
126
132
  minSize?: Size;
127
133
  maxSize?: Size | null;
134
+ aspectRatio?: number | null;
128
135
  meta?: Record<string, unknown>;
129
136
  draggable?: boolean;
130
137
  resizable?: boolean;
@@ -148,12 +155,17 @@ interface WindowManager {
148
155
  snap(id: string, zone: SnapZone): boolean;
149
156
  move(id: string, x: number, y: number): boolean;
150
157
  moveBy(id: string, dx: number, dy: number): boolean;
158
+ center(id: string): boolean;
159
+ sendToBack(id: string): boolean;
151
160
  resize(id: string, patch: Partial<Bounds>): boolean;
152
161
  update(id: string, patch: WindowUpdate): boolean;
153
162
  get(id: string): WindowState | undefined;
154
163
  getState(): ManagerState;
155
164
  minimized(): readonly WindowState[];
156
165
  setViewport(viewport: Size): void;
166
+ workspace(): number;
167
+ setWorkspace(workspace: number): boolean;
168
+ moveToWorkspace(id: string, workspace: number): boolean;
157
169
  batch(run: () => void): void;
158
170
  serialize(): SerializedState;
159
171
  hydrate(data: SerializedState): boolean;
@@ -163,6 +175,8 @@ interface WindowManager {
163
175
  canRedo(): boolean;
164
176
  beginInteraction(): void;
165
177
  endInteraction(): void;
178
+ abortInteraction(): void;
179
+ clearHistory(): void;
166
180
  saveLayout(name: string): SerializedState;
167
181
  loadLayout(name: string): boolean;
168
182
  getLayout(name: string): SerializedState | undefined;
@@ -177,4 +191,4 @@ interface WindowManager {
177
191
  destroy(): void;
178
192
  }
179
193
 
180
- export type { ArrangeMode as A, Bounds as B, HistoryEntry as H, ManagerOptions as M, SerializedMaxSize as S, WindowManager as W, ManagerState as a, WindowState as b, ManagerEvents as c, SerializedState as d, SerializedWindowState as e, Size as f, SnapZone as g, WindowFlags as h, WindowInit as i, WindowLayer as j, WindowStage as k, WindowUpdate as l };
194
+ export type { ArrangeMode as A, Bounds as B, ManagerOptions as M, SerializedMaxSize as S, WindowManager as W, ManagerState as a, WindowState as b, ManagerEvents as c, SerializedState as d, SerializedWindowState as e, Size as f, SnapZone as g, WindowFlags as h, WindowInit as i, WindowLayer as j, WindowStage as k, WindowUpdate as l };
package/dist/vue.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkB35DANTX_cjs = require('./chunk-B35DANTX.cjs');
3
+ var chunk3KZZOLHW_cjs = require('./chunk-3KZZOLHW.cjs');
4
4
  var vue = require('vue');
5
5
 
6
6
  function disposeWithScope(dispose) {
7
7
  if (vue.getCurrentScope()) vue.onScopeDispose(dispose);
8
8
  }
9
9
  function useWindowManager(options) {
10
- const wm = chunkB35DANTX_cjs.createWindowManager(options);
10
+ const wm = chunk3KZZOLHW_cjs.createWindowManager(options);
11
11
  disposeWithScope(() => wm.destroy());
12
12
  return wm;
13
13
  }
@@ -25,7 +25,8 @@ function useWmWindow(wm, id) {
25
25
  return vue.computed(() => state.value.windows[vue.toValue(id)]);
26
26
  }
27
27
  function useDesktop(wm, target, options) {
28
- const binder = chunkB35DANTX_cjs.createDesktopBinder(wm, options);
28
+ const binder = chunk3KZZOLHW_cjs.createDesktopBinder(wm, options);
29
+ disposeWithScope(() => binder.destroy());
29
30
  vue.watch(
30
31
  target,
31
32
  (element, _previous, onCleanup) => {
package/dist/vue.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters/vue.ts"],"names":["getCurrentScope","onScopeDispose","createWindowManager","shallowRef","computed","toValue","createDesktopBinder","watch"],"mappings":";;;;;AAiBA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAIA,mBAAA,EAAgB,EAAGC,kBAAA,CAAe,OAAO,CAAA;AAC/C;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAKC,sCAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA6C;AACtE,EAAA,MAAM,KAAA,GAAQC,cAAA,CAAW,EAAA,CAAG,QAAA,EAAU,CAAA;AACtC,EAAA,gBAAA;AAAA,IACE,EAAA,CAAG,SAAA,CAAU,CAAC,IAAA,KAAS;AACrB,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,IAChB,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACsC;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAOC,YAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,QAAQC,WAAA,CAAQ,EAAE,CAAC,CAAC,CAAA;AACxD;AAEO,SAAS,UAAA,CACd,EAAA,EACA,MAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,MAAA,GAASC,qCAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAAC,SAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,EAAS,SAAA,EAAW,SAAA,KAAc;AACjC,MAAA,IAAI,OAAA,EAAS,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAA,CACd,MAAA,EACA,EAAA,EACA,MAAA,EACA,OAAA,EACM;AACN,EAAAA,SAAA;AAAA,IACE,CAAC,MAAA,EAAQ,MAAMF,WAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC1B,CAAC,CAAC,OAAA,EAAS,QAAQ,CAAA,EAAG,WAAW,SAAA,KAAc;AAC7C,MAAA,IAAI,OAAA,IAAW,UAAU,SAAA,CAAU,MAAA,CAAO,WAAW,QAAA,EAAU,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAClF,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACF","file":"vue.cjs","sourcesContent":["import {\n type ComputedRef,\n computed,\n getCurrentScope,\n type MaybeRefOrGetter,\n onScopeDispose,\n type Ref,\n type ShallowRef,\n shallowRef,\n toValue,\n watch,\n} from 'vue'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nfunction disposeWithScope(dispose: () => void): void {\n if (getCurrentScope()) onScopeDispose(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithScope(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ShallowRef<ManagerState> {\n const state = shallowRef(wm.getState())\n disposeWithScope(\n wm.subscribe((next) => {\n state.value = next\n }),\n )\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: MaybeRefOrGetter<string>,\n): ComputedRef<WindowState | undefined> {\n const state = useWmState(wm)\n return computed(() => state.value.windows[toValue(id)])\n}\n\nexport function useDesktop(\n wm: WindowManager,\n target: Ref<HTMLElement | null | undefined>,\n options?: DesktopOptions,\n): DesktopBinder {\n const binder = createDesktopBinder(wm, options)\n watch(\n target,\n (element, _previous, onCleanup) => {\n if (element) onCleanup(binder.bindDesktop(element))\n },\n { immediate: true, flush: 'post' },\n )\n return binder\n}\n\nexport function useWmWindowEl(\n binder: DesktopBinder,\n id: MaybeRefOrGetter<string>,\n target: Ref<HTMLElement | null | undefined>,\n options?: WindowAttachOptions,\n): void {\n watch(\n [target, () => toValue(id)],\n ([element, windowId], _previous, onCleanup) => {\n if (element && windowId) onCleanup(binder.bindWindow(windowId, element, options))\n },\n { immediate: true, flush: 'post' },\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/vue.ts"],"names":["getCurrentScope","onScopeDispose","createWindowManager","shallowRef","computed","toValue","createDesktopBinder","watch"],"mappings":";;;;;AAiBA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAIA,mBAAA,EAAgB,EAAGC,kBAAA,CAAe,OAAO,CAAA;AAC/C;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAKC,sCAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA6C;AACtE,EAAA,MAAM,KAAA,GAAQC,cAAA,CAAW,EAAA,CAAG,QAAA,EAAU,CAAA;AACtC,EAAA,gBAAA;AAAA,IACE,EAAA,CAAG,SAAA,CAAU,CAAC,IAAA,KAAS;AACrB,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,IAChB,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACsC;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAOC,YAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,QAAQC,WAAA,CAAQ,EAAE,CAAC,CAAC,CAAA;AACxD;AAEO,SAAS,UAAA,CACd,EAAA,EACA,MAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,MAAA,GAASC,qCAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,gBAAA,CAAiB,MAAM,MAAA,CAAO,OAAA,EAAS,CAAA;AACvC,EAAAC,SAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,EAAS,SAAA,EAAW,SAAA,KAAc;AACjC,MAAA,IAAI,OAAA,EAAS,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAA,CACd,MAAA,EACA,EAAA,EACA,MAAA,EACA,OAAA,EACM;AACN,EAAAA,SAAA;AAAA,IACE,CAAC,MAAA,EAAQ,MAAMF,WAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC1B,CAAC,CAAC,OAAA,EAAS,QAAQ,CAAA,EAAG,WAAW,SAAA,KAAc;AAC7C,MAAA,IAAI,OAAA,IAAW,UAAU,SAAA,CAAU,MAAA,CAAO,WAAW,QAAA,EAAU,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAClF,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACF","file":"vue.cjs","sourcesContent":["import {\n type ComputedRef,\n computed,\n getCurrentScope,\n type MaybeRefOrGetter,\n onScopeDispose,\n type Ref,\n type ShallowRef,\n shallowRef,\n toValue,\n watch,\n} from 'vue'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nfunction disposeWithScope(dispose: () => void): void {\n if (getCurrentScope()) onScopeDispose(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithScope(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ShallowRef<ManagerState> {\n const state = shallowRef(wm.getState())\n disposeWithScope(\n wm.subscribe((next) => {\n state.value = next\n }),\n )\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: MaybeRefOrGetter<string>,\n): ComputedRef<WindowState | undefined> {\n const state = useWmState(wm)\n return computed(() => state.value.windows[toValue(id)])\n}\n\nexport function useDesktop(\n wm: WindowManager,\n target: Ref<HTMLElement | null | undefined>,\n options?: DesktopOptions,\n): DesktopBinder {\n const binder = createDesktopBinder(wm, options)\n disposeWithScope(() => binder.destroy())\n watch(\n target,\n (element, _previous, onCleanup) => {\n if (element) onCleanup(binder.bindDesktop(element))\n },\n { immediate: true, flush: 'post' },\n )\n return binder\n}\n\nexport function useWmWindowEl(\n binder: DesktopBinder,\n id: MaybeRefOrGetter<string>,\n target: Ref<HTMLElement | null | undefined>,\n options?: WindowAttachOptions,\n): void {\n watch(\n [target, () => toValue(id)],\n ([element, windowId], _previous, onCleanup) => {\n if (element && windowId) onCleanup(binder.bindWindow(windowId, element, options))\n },\n { immediate: true, flush: 'post' },\n )\n}\n"]}
package/dist/vue.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Ref, ShallowRef, MaybeRefOrGetter, ComputedRef } from 'vue';
2
- import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.cjs';
3
- import { a as DesktopOptions, D as DesktopBinder, W as WindowAttachOptions } from './binder-Dq_AZRbo.cjs';
2
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-t6pyVYKN.cjs';
3
+ import { a as DesktopOptions, D as DesktopBinder, W as WindowAttachOptions } from './binder-Dl07SXIM.cjs';
4
4
 
5
5
  declare function useWindowManager(options?: ManagerOptions): WindowManager;
6
6
  declare function useWmState(wm: WindowManager): ShallowRef<ManagerState>;
package/dist/vue.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { Ref, ShallowRef, MaybeRefOrGetter, ComputedRef } from 'vue';
2
- import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.js';
3
- import { a as DesktopOptions, D as DesktopBinder, W as WindowAttachOptions } from './binder-0Oku22Nc.js';
2
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-t6pyVYKN.js';
3
+ import { a as DesktopOptions, D as DesktopBinder, W as WindowAttachOptions } from './binder-B2A2IZGh.js';
4
4
 
5
5
  declare function useWindowManager(options?: ManagerOptions): WindowManager;
6
6
  declare function useWmState(wm: WindowManager): ShallowRef<ManagerState>;
package/dist/vue.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createWindowManager, createDesktopBinder } from './chunk-YCHJXSTC.js';
1
+ import { createWindowManager, createDesktopBinder } from './chunk-FPZDAKNP.js';
2
2
  import { shallowRef, computed, toValue, watch, getCurrentScope, onScopeDispose } from 'vue';
3
3
 
4
4
  function disposeWithScope(dispose) {
@@ -24,6 +24,7 @@ function useWmWindow(wm, id) {
24
24
  }
25
25
  function useDesktop(wm, target, options) {
26
26
  const binder = createDesktopBinder(wm, options);
27
+ disposeWithScope(() => binder.destroy());
27
28
  watch(
28
29
  target,
29
30
  (element, _previous, onCleanup) => {
package/dist/vue.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/adapters/vue.ts"],"names":[],"mappings":";;;AAiBA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAI,eAAA,EAAgB,EAAG,cAAA,CAAe,OAAO,CAAA;AAC/C;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAK,oBAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA6C;AACtE,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,EAAA,CAAG,QAAA,EAAU,CAAA;AACtC,EAAA,gBAAA;AAAA,IACE,EAAA,CAAG,SAAA,CAAU,CAAC,IAAA,KAAS;AACrB,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,IAChB,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACsC;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAO,QAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,QAAQ,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA;AACxD;AAEO,SAAS,UAAA,CACd,EAAA,EACA,MAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,KAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,EAAS,SAAA,EAAW,SAAA,KAAc;AACjC,MAAA,IAAI,OAAA,EAAS,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAA,CACd,MAAA,EACA,EAAA,EACA,MAAA,EACA,OAAA,EACM;AACN,EAAA,KAAA;AAAA,IACE,CAAC,MAAA,EAAQ,MAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC1B,CAAC,CAAC,OAAA,EAAS,QAAQ,CAAA,EAAG,WAAW,SAAA,KAAc;AAC7C,MAAA,IAAI,OAAA,IAAW,UAAU,SAAA,CAAU,MAAA,CAAO,WAAW,QAAA,EAAU,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAClF,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACF","file":"vue.js","sourcesContent":["import {\n type ComputedRef,\n computed,\n getCurrentScope,\n type MaybeRefOrGetter,\n onScopeDispose,\n type Ref,\n type ShallowRef,\n shallowRef,\n toValue,\n watch,\n} from 'vue'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nfunction disposeWithScope(dispose: () => void): void {\n if (getCurrentScope()) onScopeDispose(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithScope(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ShallowRef<ManagerState> {\n const state = shallowRef(wm.getState())\n disposeWithScope(\n wm.subscribe((next) => {\n state.value = next\n }),\n )\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: MaybeRefOrGetter<string>,\n): ComputedRef<WindowState | undefined> {\n const state = useWmState(wm)\n return computed(() => state.value.windows[toValue(id)])\n}\n\nexport function useDesktop(\n wm: WindowManager,\n target: Ref<HTMLElement | null | undefined>,\n options?: DesktopOptions,\n): DesktopBinder {\n const binder = createDesktopBinder(wm, options)\n watch(\n target,\n (element, _previous, onCleanup) => {\n if (element) onCleanup(binder.bindDesktop(element))\n },\n { immediate: true, flush: 'post' },\n )\n return binder\n}\n\nexport function useWmWindowEl(\n binder: DesktopBinder,\n id: MaybeRefOrGetter<string>,\n target: Ref<HTMLElement | null | undefined>,\n options?: WindowAttachOptions,\n): void {\n watch(\n [target, () => toValue(id)],\n ([element, windowId], _previous, onCleanup) => {\n if (element && windowId) onCleanup(binder.bindWindow(windowId, element, options))\n },\n { immediate: true, flush: 'post' },\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/adapters/vue.ts"],"names":[],"mappings":";;;AAiBA,SAAS,iBAAiB,OAAA,EAA2B;AACnD,EAAA,IAAI,eAAA,EAAgB,EAAG,cAAA,CAAe,OAAO,CAAA;AAC/C;AAEO,SAAS,iBAAiB,OAAA,EAAyC;AACxE,EAAA,MAAM,EAAA,GAAK,oBAAoB,OAAO,CAAA;AACtC,EAAA,gBAAA,CAAiB,MAAM,EAAA,CAAG,OAAA,EAAS,CAAA;AACnC,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,WAAW,EAAA,EAA6C;AACtE,EAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,EAAA,CAAG,QAAA,EAAU,CAAA;AACtC,EAAA,gBAAA;AAAA,IACE,EAAA,CAAG,SAAA,CAAU,CAAC,IAAA,KAAS;AACrB,MAAA,KAAA,CAAM,KAAA,GAAQ,IAAA;AAAA,IAChB,CAAC;AAAA,GACH;AACA,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAA,CACd,IACA,EAAA,EACsC;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAW,EAAE,CAAA;AAC3B,EAAA,OAAO,QAAA,CAAS,MAAM,KAAA,CAAM,KAAA,CAAM,QAAQ,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA;AACxD;AAEO,SAAS,UAAA,CACd,EAAA,EACA,MAAA,EACA,OAAA,EACe;AACf,EAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,EAAA,EAAI,OAAO,CAAA;AAC9C,EAAA,gBAAA,CAAiB,MAAM,MAAA,CAAO,OAAA,EAAS,CAAA;AACvC,EAAA,KAAA;AAAA,IACE,MAAA;AAAA,IACA,CAAC,OAAA,EAAS,SAAA,EAAW,SAAA,KAAc;AACjC,MAAA,IAAI,OAAA,EAAS,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAA,CACd,MAAA,EACA,EAAA,EACA,MAAA,EACA,OAAA,EACM;AACN,EAAA,KAAA;AAAA,IACE,CAAC,MAAA,EAAQ,MAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC1B,CAAC,CAAC,OAAA,EAAS,QAAQ,CAAA,EAAG,WAAW,SAAA,KAAc;AAC7C,MAAA,IAAI,OAAA,IAAW,UAAU,SAAA,CAAU,MAAA,CAAO,WAAW,QAAA,EAAU,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAClF,CAAA;AAAA,IACA,EAAE,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAA;AAAO,GACnC;AACF","file":"vue.js","sourcesContent":["import {\n type ComputedRef,\n computed,\n getCurrentScope,\n type MaybeRefOrGetter,\n onScopeDispose,\n type Ref,\n type ShallowRef,\n shallowRef,\n toValue,\n watch,\n} from 'vue'\nimport { createWindowManager } from '../core/manager'\nimport type { ManagerOptions, ManagerState, WindowManager, WindowState } from '../core/types'\nimport { createDesktopBinder, type DesktopBinder } from '../dom/binder'\nimport type { DesktopOptions, WindowAttachOptions } from '../dom/shared'\n\nfunction disposeWithScope(dispose: () => void): void {\n if (getCurrentScope()) onScopeDispose(dispose)\n}\n\nexport function useWindowManager(options?: ManagerOptions): WindowManager {\n const wm = createWindowManager(options)\n disposeWithScope(() => wm.destroy())\n return wm\n}\n\nexport function useWmState(wm: WindowManager): ShallowRef<ManagerState> {\n const state = shallowRef(wm.getState())\n disposeWithScope(\n wm.subscribe((next) => {\n state.value = next\n }),\n )\n return state\n}\n\nexport function useWmWindow(\n wm: WindowManager,\n id: MaybeRefOrGetter<string>,\n): ComputedRef<WindowState | undefined> {\n const state = useWmState(wm)\n return computed(() => state.value.windows[toValue(id)])\n}\n\nexport function useDesktop(\n wm: WindowManager,\n target: Ref<HTMLElement | null | undefined>,\n options?: DesktopOptions,\n): DesktopBinder {\n const binder = createDesktopBinder(wm, options)\n disposeWithScope(() => binder.destroy())\n watch(\n target,\n (element, _previous, onCleanup) => {\n if (element) onCleanup(binder.bindDesktop(element))\n },\n { immediate: true, flush: 'post' },\n )\n return binder\n}\n\nexport function useWmWindowEl(\n binder: DesktopBinder,\n id: MaybeRefOrGetter<string>,\n target: Ref<HTMLElement | null | undefined>,\n options?: WindowAttachOptions,\n): void {\n watch(\n [target, () => toValue(id)],\n ([element, windowId], _previous, onCleanup) => {\n if (element && windowId) onCleanup(binder.bindWindow(windowId, element, options))\n },\n { immediate: true, flush: 'post' },\n )\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surdeddd/wmkit",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Headless, framework-agnostic window manager for the web — draggable, resizable, snappable windows with first-class accessibility and 60fps performance",
5
5
  "keywords": [
6
6
  "window-manager",
@@ -203,12 +203,12 @@
203
203
  {
204
204
  "name": "core",
205
205
  "path": "dist/index.js",
206
- "limit": "10 kB"
206
+ "limit": "12 kB"
207
207
  },
208
208
  {
209
209
  "name": "react adapter",
210
210
  "path": "dist/react.js",
211
- "limit": "10 kB",
211
+ "limit": "12 kB",
212
212
  "ignore": [
213
213
  "react"
214
214
  ]
@@ -216,7 +216,7 @@
216
216
  {
217
217
  "name": "vue adapter",
218
218
  "path": "dist/vue.js",
219
- "limit": "10 kB",
219
+ "limit": "12 kB",
220
220
  "ignore": [
221
221
  "vue"
222
222
  ]
@@ -224,7 +224,7 @@
224
224
  {
225
225
  "name": "svelte adapter",
226
226
  "path": "dist/svelte.js",
227
- "limit": "10 kB",
227
+ "limit": "12 kB",
228
228
  "ignore": [
229
229
  "svelte"
230
230
  ]
@@ -232,7 +232,7 @@
232
232
  {
233
233
  "name": "solid adapter",
234
234
  "path": "dist/solid.js",
235
- "limit": "10 kB",
235
+ "limit": "12 kB",
236
236
  "ignore": [
237
237
  "solid-js"
238
238
  ]
@@ -240,7 +240,7 @@
240
240
  {
241
241
  "name": "angular adapter",
242
242
  "path": "dist/angular.js",
243
- "limit": "10 kB",
243
+ "limit": "12 kB",
244
244
  "ignore": [
245
245
  "@angular/core"
246
246
  ]