@surdeddd/wmkit 0.2.0 → 0.3.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 (45) hide show
  1. package/README.md +55 -5
  2. package/README.ru.md +18 -5
  3. package/dist/angular.cjs +52 -0
  4. package/dist/angular.cjs.map +1 -0
  5. package/dist/angular.d.cts +15 -0
  6. package/dist/angular.d.ts +15 -0
  7. package/dist/angular.js +47 -0
  8. package/dist/angular.js.map +1 -0
  9. package/dist/{binder-BY-saDUB.d.cts → binder-0Oku22Nc.d.ts} +14 -2
  10. package/dist/{binder-D9UEE1SM.d.ts → binder-Dq_AZRbo.d.cts} +14 -2
  11. package/dist/{chunk-KQCVZ2W7.cjs → chunk-B35DANTX.cjs} +303 -35
  12. package/dist/chunk-B35DANTX.cjs.map +1 -0
  13. package/dist/{chunk-2TVOEDRG.js → chunk-YCHJXSTC.js} +303 -36
  14. package/dist/chunk-YCHJXSTC.js.map +1 -0
  15. package/dist/index.cjs +19 -15
  16. package/dist/index.d.cts +4 -4
  17. package/dist/index.d.ts +4 -4
  18. package/dist/index.js +1 -1
  19. package/dist/persist.d.cts +1 -1
  20. package/dist/persist.d.ts +1 -1
  21. package/dist/popout.d.cts +1 -1
  22. package/dist/popout.d.ts +1 -1
  23. package/dist/react.cjs +3 -3
  24. package/dist/react.d.cts +2 -2
  25. package/dist/react.d.ts +2 -2
  26. package/dist/react.js +1 -1
  27. package/dist/solid.cjs +3 -3
  28. package/dist/solid.d.cts +2 -2
  29. package/dist/solid.d.ts +2 -2
  30. package/dist/solid.js +1 -1
  31. package/dist/svelte.cjs +3 -3
  32. package/dist/svelte.d.cts +2 -2
  33. package/dist/svelte.d.ts +2 -2
  34. package/dist/svelte.js +1 -1
  35. package/dist/themes/light.css +202 -0
  36. package/dist/themes/retro.css +152 -0
  37. package/dist/{types-Bkrq2djr.d.cts → types-DdCtDHgt.d.cts} +23 -1
  38. package/dist/{types-Bkrq2djr.d.ts → types-DdCtDHgt.d.ts} +23 -1
  39. package/dist/vue.cjs +3 -3
  40. package/dist/vue.d.cts +2 -2
  41. package/dist/vue.d.ts +2 -2
  42. package/dist/vue.js +1 -1
  43. package/package.json +34 -7
  44. package/dist/chunk-2TVOEDRG.js.map +0 -1
  45. package/dist/chunk-KQCVZ2W7.cjs.map +0 -1
package/dist/svelte.cjs CHANGED
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunkKQCVZ2W7_cjs = require('./chunk-KQCVZ2W7.cjs');
3
+ var chunkB35DANTX_cjs = require('./chunk-B35DANTX.cjs');
4
4
 
5
5
  // src/adapters/svelte.ts
6
6
  function createManager(options) {
7
- return chunkKQCVZ2W7_cjs.createWindowManager(options);
7
+ return chunkB35DANTX_cjs.createWindowManager(options);
8
8
  }
9
9
  function wmStore(wm) {
10
10
  return {
@@ -30,7 +30,7 @@ function wmWindowStore(wm, id) {
30
30
  };
31
31
  }
32
32
  function createDesktop(wm, options) {
33
- const binder = chunkKQCVZ2W7_cjs.createDesktopBinder(wm, options);
33
+ const binder = chunkB35DANTX_cjs.createDesktopBinder(wm, options);
34
34
  return {
35
35
  binder,
36
36
  desktop(node) {
package/dist/svelte.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-Bkrq2djr.cjs';
2
- import { W as WindowAttachOptions, D as DesktopBinder, b as DesktopOptions } from './binder-BY-saDUB.cjs';
1
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.cjs';
2
+ import { W as WindowAttachOptions, D as DesktopBinder, a as DesktopOptions } from './binder-Dq_AZRbo.cjs';
3
3
 
4
4
  interface ReadableStore<T> {
5
5
  subscribe(run: (value: T) => void): () => void;
package/dist/svelte.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-Bkrq2djr.js';
2
- import { W as WindowAttachOptions, D as DesktopBinder, b as DesktopOptions } from './binder-D9UEE1SM.js';
1
+ import { W as WindowManager, M as ManagerOptions, a as ManagerState, b as WindowState } from './types-DdCtDHgt.js';
2
+ import { W as WindowAttachOptions, D as DesktopBinder, a as DesktopOptions } from './binder-0Oku22Nc.js';
3
3
 
4
4
  interface ReadableStore<T> {
5
5
  subscribe(run: (value: T) => void): () => void;
package/dist/svelte.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createWindowManager, createDesktopBinder } from './chunk-2TVOEDRG.js';
1
+ import { createWindowManager, createDesktopBinder } from './chunk-YCHJXSTC.js';
2
2
 
3
3
  // src/adapters/svelte.ts
4
4
  function createManager(options) {
@@ -0,0 +1,202 @@
1
+ [data-wm-desktop] {
2
+ --wm-radius: 12px;
3
+ --wm-bg: rgba(255, 255, 255, 0.78);
4
+ --wm-bg-focused: rgba(255, 255, 255, 0.94);
5
+ --wm-border: rgba(15, 23, 42, 0.1);
6
+ --wm-border-focused: rgba(15, 23, 42, 0.22);
7
+ --wm-shadow: 0 6px 22px rgba(15, 23, 42, 0.12);
8
+ --wm-shadow-focused: 0 16px 44px rgba(15, 23, 42, 0.2);
9
+ --wm-titlebar-bg: rgba(15, 23, 42, 0.03);
10
+ --wm-text: rgba(15, 23, 42, 0.92);
11
+ --wm-text-dim: rgba(15, 23, 42, 0.55);
12
+ --wm-accent: #4f46e5;
13
+ --wm-blur: 18px;
14
+ --wm-transition: 240ms cubic-bezier(0.32, 0.72, 0, 1);
15
+ position: relative;
16
+ overflow: hidden;
17
+ }
18
+
19
+ [data-wm-window] {
20
+ display: flex;
21
+ flex-direction: column;
22
+ box-sizing: border-box;
23
+ color: var(--wm-text);
24
+ background: var(--wm-bg);
25
+ -webkit-backdrop-filter: blur(var(--wm-blur)) saturate(1.2);
26
+ backdrop-filter: blur(var(--wm-blur)) saturate(1.2);
27
+ border: 1px solid var(--wm-border);
28
+ border-radius: var(--wm-radius);
29
+ box-shadow: var(--wm-shadow);
30
+ outline: none;
31
+ contain: layout style;
32
+ transition:
33
+ transform var(--wm-transition),
34
+ width var(--wm-transition),
35
+ height var(--wm-transition),
36
+ box-shadow 180ms ease,
37
+ border-color 180ms ease,
38
+ opacity 180ms ease;
39
+ animation: wm-window-in 220ms cubic-bezier(0.32, 0.72, 0, 1);
40
+ }
41
+
42
+ [data-wm-window][hidden] {
43
+ display: none;
44
+ }
45
+
46
+ [data-wm-window][data-wm-focused] {
47
+ background: var(--wm-bg-focused);
48
+ border-color: var(--wm-border-focused);
49
+ box-shadow: var(--wm-shadow-focused);
50
+ }
51
+
52
+ [data-wm-window][data-wm-dragging],
53
+ [data-wm-window][data-wm-resizing] {
54
+ transition:
55
+ box-shadow 180ms ease,
56
+ border-color 180ms ease;
57
+ user-select: none;
58
+ -webkit-user-select: none;
59
+ }
60
+
61
+ [data-wm-window][data-wm-stage="maximized"],
62
+ [data-wm-window][data-wm-stage="snapped"] {
63
+ border-radius: 0;
64
+ }
65
+
66
+ [data-wm-window][data-wm-flash] {
67
+ animation: wm-flash 320ms ease;
68
+ }
69
+
70
+ [data-wm-window] [data-wm-drag] {
71
+ display: flex;
72
+ align-items: center;
73
+ gap: 8px;
74
+ padding: 10px 14px;
75
+ background: var(--wm-titlebar-bg);
76
+ border-bottom: 1px solid var(--wm-border);
77
+ border-radius: var(--wm-radius) var(--wm-radius) 0 0;
78
+ cursor: default;
79
+ user-select: none;
80
+ -webkit-user-select: none;
81
+ flex-shrink: 0;
82
+ }
83
+
84
+ [data-wm-window][data-wm-stage="maximized"] [data-wm-drag],
85
+ [data-wm-window][data-wm-stage="snapped"] [data-wm-drag] {
86
+ border-radius: 0;
87
+ }
88
+
89
+ [data-wm-window] [data-wm-title] {
90
+ flex: 1;
91
+ font-size: 13px;
92
+ font-weight: 600;
93
+ letter-spacing: 0.01em;
94
+ color: var(--wm-text);
95
+ white-space: nowrap;
96
+ overflow: hidden;
97
+ text-overflow: ellipsis;
98
+ }
99
+
100
+ [data-wm-window] [data-wm-controls] {
101
+ display: flex;
102
+ gap: 8px;
103
+ align-items: center;
104
+ }
105
+
106
+ [data-wm-window] [data-wm-close],
107
+ [data-wm-window] [data-wm-minimize],
108
+ [data-wm-window] [data-wm-maximize] {
109
+ width: 13px;
110
+ height: 13px;
111
+ border-radius: 50%;
112
+ border: none;
113
+ padding: 0;
114
+ cursor: pointer;
115
+ transition:
116
+ filter 120ms ease,
117
+ transform 120ms ease;
118
+ }
119
+
120
+ [data-wm-window] [data-wm-close]:hover,
121
+ [data-wm-window] [data-wm-minimize]:hover,
122
+ [data-wm-window] [data-wm-maximize]:hover {
123
+ filter: brightness(1.1);
124
+ transform: scale(1.12);
125
+ }
126
+
127
+ [data-wm-window] [data-wm-close]:focus-visible,
128
+ [data-wm-window] [data-wm-minimize]:focus-visible,
129
+ [data-wm-window] [data-wm-maximize]:focus-visible {
130
+ outline: 2px solid var(--wm-accent);
131
+ outline-offset: 2px;
132
+ }
133
+
134
+ [data-wm-window] [data-wm-close] {
135
+ background: #ff5f57;
136
+ }
137
+
138
+ [data-wm-window] [data-wm-minimize] {
139
+ background: #febc2e;
140
+ }
141
+
142
+ [data-wm-window] [data-wm-maximize] {
143
+ background: #28c840;
144
+ }
145
+
146
+ [data-wm-window] [data-wm-content] {
147
+ flex: 1;
148
+ overflow: auto;
149
+ padding: 14px;
150
+ font-size: 14px;
151
+ line-height: 1.55;
152
+ }
153
+
154
+ [data-wm-snap-preview] {
155
+ background: color-mix(in srgb, var(--wm-accent) 12%, transparent);
156
+ border: 1.5px solid color-mix(in srgb, var(--wm-accent) 45%, transparent);
157
+ border-radius: var(--wm-radius);
158
+ -webkit-backdrop-filter: blur(4px);
159
+ backdrop-filter: blur(4px);
160
+ transition:
161
+ transform 140ms cubic-bezier(0.32, 0.72, 0, 1),
162
+ width 140ms ease,
163
+ height 140ms ease;
164
+ }
165
+
166
+ @keyframes wm-window-in {
167
+ from {
168
+ opacity: 0;
169
+ scale: 0.96;
170
+ }
171
+ to {
172
+ opacity: 1;
173
+ scale: 1;
174
+ }
175
+ }
176
+
177
+ @keyframes wm-flash {
178
+ 0%,
179
+ 100% {
180
+ translate: 0 0;
181
+ }
182
+ 20% {
183
+ translate: -6px 0;
184
+ }
185
+ 45% {
186
+ translate: 5px 0;
187
+ }
188
+ 70% {
189
+ translate: -3px 0;
190
+ }
191
+ 90% {
192
+ translate: 2px 0;
193
+ }
194
+ }
195
+
196
+ @media (prefers-reduced-motion: reduce) {
197
+ [data-wm-window],
198
+ [data-wm-snap-preview] {
199
+ transition: none;
200
+ animation: none;
201
+ }
202
+ }
@@ -0,0 +1,152 @@
1
+ [data-wm-desktop] {
2
+ --wm-face: #c0c0c0;
3
+ --wm-face-light: #ffffff;
4
+ --wm-face-dark: #808080;
5
+ --wm-face-darker: #404040;
6
+ --wm-title-active-a: #000080;
7
+ --wm-title-active-b: #1084d0;
8
+ --wm-title-inactive: #808080;
9
+ --wm-text: #000000;
10
+ --wm-title-text: #ffffff;
11
+ position: relative;
12
+ overflow: hidden;
13
+ background: #008080;
14
+ }
15
+
16
+ [data-wm-window] {
17
+ display: flex;
18
+ flex-direction: column;
19
+ box-sizing: border-box;
20
+ color: var(--wm-text);
21
+ background: var(--wm-face);
22
+ border: 2px solid;
23
+ border-color: var(--wm-face-light) var(--wm-face-darker) var(--wm-face-darker)
24
+ var(--wm-face-light);
25
+ box-shadow: 1px 1px 0 var(--wm-face-dark);
26
+ outline: none;
27
+ contain: layout style;
28
+ font-family: "Pixelated MS Sans Serif", "MS Sans Serif", Tahoma, sans-serif;
29
+ }
30
+
31
+ [data-wm-window][hidden] {
32
+ display: none;
33
+ }
34
+
35
+ [data-wm-window][data-wm-flash] {
36
+ animation: wm-flash 320ms ease;
37
+ }
38
+
39
+ [data-wm-window] [data-wm-drag] {
40
+ display: flex;
41
+ align-items: center;
42
+ gap: 6px;
43
+ padding: 3px 4px;
44
+ margin: 2px;
45
+ background: linear-gradient(90deg, var(--wm-title-inactive), #b5b5b5);
46
+ cursor: default;
47
+ user-select: none;
48
+ -webkit-user-select: none;
49
+ flex-shrink: 0;
50
+ }
51
+
52
+ [data-wm-window][data-wm-focused] [data-wm-drag] {
53
+ background: linear-gradient(90deg, var(--wm-title-active-a), var(--wm-title-active-b));
54
+ }
55
+
56
+ [data-wm-window] [data-wm-title] {
57
+ flex: 1;
58
+ font-size: 12px;
59
+ font-weight: 700;
60
+ color: var(--wm-title-text);
61
+ white-space: nowrap;
62
+ overflow: hidden;
63
+ text-overflow: ellipsis;
64
+ letter-spacing: 0;
65
+ }
66
+
67
+ [data-wm-window] [data-wm-controls] {
68
+ display: flex;
69
+ gap: 2px;
70
+ align-items: center;
71
+ }
72
+
73
+ [data-wm-window] [data-wm-close],
74
+ [data-wm-window] [data-wm-minimize],
75
+ [data-wm-window] [data-wm-maximize] {
76
+ width: 16px;
77
+ height: 14px;
78
+ border: 1px solid;
79
+ border-color: var(--wm-face-light) var(--wm-face-darker) var(--wm-face-darker)
80
+ var(--wm-face-light);
81
+ background: var(--wm-face);
82
+ padding: 0;
83
+ cursor: pointer;
84
+ font-size: 9px;
85
+ line-height: 1;
86
+ color: var(--wm-text);
87
+ }
88
+
89
+ [data-wm-window] [data-wm-close]:active,
90
+ [data-wm-window] [data-wm-minimize]:active,
91
+ [data-wm-window] [data-wm-maximize]:active {
92
+ border-color: var(--wm-face-darker) var(--wm-face-light) var(--wm-face-light)
93
+ var(--wm-face-darker);
94
+ }
95
+
96
+ [data-wm-window] [data-wm-close]:focus-visible,
97
+ [data-wm-window] [data-wm-minimize]:focus-visible,
98
+ [data-wm-window] [data-wm-maximize]:focus-visible {
99
+ outline: 1px dotted var(--wm-text);
100
+ outline-offset: -3px;
101
+ }
102
+
103
+ [data-wm-window] [data-wm-minimize]::after {
104
+ content: "_";
105
+ font-weight: 700;
106
+ }
107
+
108
+ [data-wm-window] [data-wm-maximize]::after {
109
+ content: "□";
110
+ font-weight: 700;
111
+ }
112
+
113
+ [data-wm-window] [data-wm-close]::after {
114
+ content: "✕";
115
+ font-weight: 700;
116
+ }
117
+
118
+ [data-wm-window] [data-wm-content] {
119
+ flex: 1;
120
+ overflow: auto;
121
+ padding: 8px;
122
+ margin: 0 2px 2px;
123
+ font-size: 12px;
124
+ line-height: 1.4;
125
+ background: var(--wm-face);
126
+ border: 1px solid;
127
+ border-color: var(--wm-face-dark) var(--wm-face-light) var(--wm-face-light) var(--wm-face-dark);
128
+ }
129
+
130
+ [data-wm-snap-preview] {
131
+ background: transparent;
132
+ border: 2px dashed var(--wm-face-darker);
133
+ }
134
+
135
+ @keyframes wm-flash {
136
+ 0%,
137
+ 100% {
138
+ translate: 0 0;
139
+ }
140
+ 20% {
141
+ translate: -6px 0;
142
+ }
143
+ 45% {
144
+ translate: 5px 0;
145
+ }
146
+ 70% {
147
+ translate: -3px 0;
148
+ }
149
+ 90% {
150
+ translate: 2px 0;
151
+ }
152
+ }
@@ -10,6 +10,7 @@ interface Bounds {
10
10
  }
11
11
  type WindowStage = 'normal' | 'minimized' | 'maximized' | 'snapped';
12
12
  type WindowLayer = 'normal' | 'floating' | 'modal';
13
+ type ArrangeMode = 'cascade' | 'tile';
13
14
  type SnapZone = 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
14
15
  interface WindowFlags {
15
16
  draggable: boolean;
@@ -48,6 +49,11 @@ interface WindowInit extends Partial<WindowFlags> {
48
49
  layer?: WindowLayer;
49
50
  meta?: Record<string, unknown>;
50
51
  }
52
+ interface HistoryEntry {
53
+ windows: Readonly<Record<string, WindowState>>;
54
+ order: readonly string[];
55
+ focusedId: string | null;
56
+ }
51
57
  interface ManagerState {
52
58
  windows: Readonly<Record<string, WindowState>>;
53
59
  order: readonly string[];
@@ -112,6 +118,7 @@ interface ManagerOptions {
112
118
  y: number;
113
119
  };
114
120
  idPrefix?: string;
121
+ historyLimit?: number;
115
122
  }
116
123
  interface WindowUpdate {
117
124
  title?: string;
@@ -150,9 +157,24 @@ interface WindowManager {
150
157
  batch(run: () => void): void;
151
158
  serialize(): SerializedState;
152
159
  hydrate(data: SerializedState): boolean;
160
+ undo(): boolean;
161
+ redo(): boolean;
162
+ canUndo(): boolean;
163
+ canRedo(): boolean;
164
+ beginInteraction(): void;
165
+ endInteraction(): void;
166
+ saveLayout(name: string): SerializedState;
167
+ loadLayout(name: string): boolean;
168
+ getLayout(name: string): SerializedState | undefined;
169
+ setLayout(name: string, data: SerializedState): boolean;
170
+ deleteLayout(name: string): boolean;
171
+ layoutNames(): string[];
172
+ arrange(mode: ArrangeMode): void;
173
+ minimizeAll(): void;
174
+ restoreAll(): void;
153
175
  subscribe(listener: (state: ManagerState) => void): () => void;
154
176
  on<K extends keyof ManagerEvents>(event: K, listener: (payload: ManagerEvents[K]) => void): () => void;
155
177
  destroy(): void;
156
178
  }
157
179
 
158
- export type { 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 };
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 };
@@ -10,6 +10,7 @@ interface Bounds {
10
10
  }
11
11
  type WindowStage = 'normal' | 'minimized' | 'maximized' | 'snapped';
12
12
  type WindowLayer = 'normal' | 'floating' | 'modal';
13
+ type ArrangeMode = 'cascade' | 'tile';
13
14
  type SnapZone = 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
14
15
  interface WindowFlags {
15
16
  draggable: boolean;
@@ -48,6 +49,11 @@ interface WindowInit extends Partial<WindowFlags> {
48
49
  layer?: WindowLayer;
49
50
  meta?: Record<string, unknown>;
50
51
  }
52
+ interface HistoryEntry {
53
+ windows: Readonly<Record<string, WindowState>>;
54
+ order: readonly string[];
55
+ focusedId: string | null;
56
+ }
51
57
  interface ManagerState {
52
58
  windows: Readonly<Record<string, WindowState>>;
53
59
  order: readonly string[];
@@ -112,6 +118,7 @@ interface ManagerOptions {
112
118
  y: number;
113
119
  };
114
120
  idPrefix?: string;
121
+ historyLimit?: number;
115
122
  }
116
123
  interface WindowUpdate {
117
124
  title?: string;
@@ -150,9 +157,24 @@ interface WindowManager {
150
157
  batch(run: () => void): void;
151
158
  serialize(): SerializedState;
152
159
  hydrate(data: SerializedState): boolean;
160
+ undo(): boolean;
161
+ redo(): boolean;
162
+ canUndo(): boolean;
163
+ canRedo(): boolean;
164
+ beginInteraction(): void;
165
+ endInteraction(): void;
166
+ saveLayout(name: string): SerializedState;
167
+ loadLayout(name: string): boolean;
168
+ getLayout(name: string): SerializedState | undefined;
169
+ setLayout(name: string, data: SerializedState): boolean;
170
+ deleteLayout(name: string): boolean;
171
+ layoutNames(): string[];
172
+ arrange(mode: ArrangeMode): void;
173
+ minimizeAll(): void;
174
+ restoreAll(): void;
153
175
  subscribe(listener: (state: ManagerState) => void): () => void;
154
176
  on<K extends keyof ManagerEvents>(event: K, listener: (payload: ManagerEvents[K]) => void): () => void;
155
177
  destroy(): void;
156
178
  }
157
179
 
158
- export type { 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 };
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 };
package/dist/vue.cjs CHANGED
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunkKQCVZ2W7_cjs = require('./chunk-KQCVZ2W7.cjs');
3
+ var chunkB35DANTX_cjs = require('./chunk-B35DANTX.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 = chunkKQCVZ2W7_cjs.createWindowManager(options);
10
+ const wm = chunkB35DANTX_cjs.createWindowManager(options);
11
11
  disposeWithScope(() => wm.destroy());
12
12
  return wm;
13
13
  }
@@ -25,7 +25,7 @@ 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 = chunkKQCVZ2W7_cjs.createDesktopBinder(wm, options);
28
+ const binder = chunkB35DANTX_cjs.createDesktopBinder(wm, options);
29
29
  vue.watch(
30
30
  target,
31
31
  (element, _previous, onCleanup) => {
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-Bkrq2djr.cjs';
3
- import { b as DesktopOptions, D as DesktopBinder, W as WindowAttachOptions } from './binder-BY-saDUB.cjs';
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';
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-Bkrq2djr.js';
3
- import { b as DesktopOptions, D as DesktopBinder, W as WindowAttachOptions } from './binder-D9UEE1SM.js';
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';
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-2TVOEDRG.js';
1
+ import { createWindowManager, createDesktopBinder } from './chunk-YCHJXSTC.js';
2
2
  import { shallowRef, computed, toValue, watch, getCurrentScope, onScopeDispose } from 'vue';
3
3
 
4
4
  function disposeWithScope(dispose) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surdeddd/wmkit",
3
- "version": "0.2.0",
3
+ "version": "0.3.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",
@@ -94,6 +94,16 @@
94
94
  "default": "./dist/solid.cjs"
95
95
  }
96
96
  },
97
+ "./angular": {
98
+ "import": {
99
+ "types": "./dist/angular.d.ts",
100
+ "default": "./dist/angular.js"
101
+ },
102
+ "require": {
103
+ "types": "./dist/angular.d.cts",
104
+ "default": "./dist/angular.cjs"
105
+ }
106
+ },
97
107
  "./persist": {
98
108
  "import": {
99
109
  "types": "./dist/persist.d.ts",
@@ -134,9 +144,11 @@
134
144
  "publint": "publint",
135
145
  "prepublishOnly": "pnpm build",
136
146
  "verify": "pnpm lint && pnpm typecheck && pnpm test:coverage && pnpm build && pnpm size && pnpm publint && pnpm attw && pnpm test:e2e",
137
- "release": "semantic-release"
147
+ "release": "semantic-release",
148
+ "bench": "vitest bench --run"
138
149
  },
139
150
  "peerDependencies": {
151
+ "@angular/core": ">=16",
140
152
  "react": ">=18",
141
153
  "solid-js": ">=1.8",
142
154
  "svelte": ">=4",
@@ -154,9 +166,13 @@
154
166
  },
155
167
  "vue": {
156
168
  "optional": true
169
+ },
170
+ "@angular/core": {
171
+ "optional": true
157
172
  }
158
173
  },
159
174
  "devDependencies": {
175
+ "@angular/core": "^20.3.26",
160
176
  "@arethetypeswrong/cli": "^0.18.2",
161
177
  "@axe-core/playwright": "^4.10.2",
162
178
  "@biomejs/biome": "^2.0.0",
@@ -187,12 +203,12 @@
187
203
  {
188
204
  "name": "core",
189
205
  "path": "dist/index.js",
190
- "limit": "8.5 kB"
206
+ "limit": "10 kB"
191
207
  },
192
208
  {
193
209
  "name": "react adapter",
194
210
  "path": "dist/react.js",
195
- "limit": "8.5 kB",
211
+ "limit": "10 kB",
196
212
  "ignore": [
197
213
  "react"
198
214
  ]
@@ -200,7 +216,7 @@
200
216
  {
201
217
  "name": "vue adapter",
202
218
  "path": "dist/vue.js",
203
- "limit": "8.5 kB",
219
+ "limit": "10 kB",
204
220
  "ignore": [
205
221
  "vue"
206
222
  ]
@@ -208,7 +224,7 @@
208
224
  {
209
225
  "name": "svelte adapter",
210
226
  "path": "dist/svelte.js",
211
- "limit": "8.5 kB",
227
+ "limit": "10 kB",
212
228
  "ignore": [
213
229
  "svelte"
214
230
  ]
@@ -216,11 +232,19 @@
216
232
  {
217
233
  "name": "solid adapter",
218
234
  "path": "dist/solid.js",
219
- "limit": "8.5 kB",
235
+ "limit": "10 kB",
220
236
  "ignore": [
221
237
  "solid-js"
222
238
  ]
223
239
  },
240
+ {
241
+ "name": "angular adapter",
242
+ "path": "dist/angular.js",
243
+ "limit": "10 kB",
244
+ "ignore": [
245
+ "@angular/core"
246
+ ]
247
+ },
224
248
  {
225
249
  "name": "persist plugin",
226
250
  "path": "dist/persist.js",
@@ -251,6 +275,9 @@
251
275
  ],
252
276
  "popout": [
253
277
  "./dist/popout.d.ts"
278
+ ],
279
+ "angular": [
280
+ "./dist/angular.d.ts"
254
281
  ]
255
282
  }
256
283
  }