@surdeddd/wmkit 0.1.1 → 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.
- package/README.md +58 -12
- package/README.ru.md +21 -12
- package/dist/angular.cjs +52 -0
- package/dist/angular.cjs.map +1 -0
- package/dist/angular.d.cts +15 -0
- package/dist/angular.d.ts +15 -0
- package/dist/angular.js +47 -0
- package/dist/angular.js.map +1 -0
- package/dist/{controller-1uedRvQw.d.ts → binder-0Oku22Nc.d.ts} +21 -3
- package/dist/{controller-BfUF1k04.d.cts → binder-Dq_AZRbo.d.cts} +21 -3
- package/dist/{chunk-TXINVEK3.cjs → chunk-B35DANTX.cjs} +596 -241
- package/dist/chunk-B35DANTX.cjs.map +1 -0
- package/dist/{chunk-N5KNWRKU.js → chunk-YCHJXSTC.js} +596 -242
- package/dist/chunk-YCHJXSTC.js.map +1 -0
- package/dist/index.cjs +19 -15
- package/dist/index.d.cts +7 -4
- package/dist/index.d.ts +7 -4
- package/dist/index.js +1 -1
- package/dist/persist.cjs +1 -1
- package/dist/persist.cjs.map +1 -1
- package/dist/persist.d.cts +1 -1
- package/dist/persist.d.ts +1 -1
- package/dist/persist.js +1 -1
- package/dist/persist.js.map +1 -1
- package/dist/popout.cjs +1 -1
- package/dist/popout.cjs.map +1 -1
- package/dist/popout.d.cts +1 -1
- package/dist/popout.d.ts +1 -1
- package/dist/popout.js +1 -1
- package/dist/popout.js.map +1 -1
- package/dist/react.cjs +3 -3
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +2 -2
- package/dist/react.d.ts +2 -2
- package/dist/react.js +1 -1
- package/dist/react.js.map +1 -1
- package/dist/solid.cjs +3 -3
- package/dist/solid.cjs.map +1 -1
- package/dist/solid.d.cts +2 -2
- package/dist/solid.d.ts +2 -2
- package/dist/solid.js +1 -1
- package/dist/solid.js.map +1 -1
- package/dist/svelte.cjs +4 -4
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.d.cts +2 -2
- package/dist/svelte.d.ts +2 -2
- package/dist/svelte.js +2 -2
- package/dist/svelte.js.map +1 -1
- package/dist/themes/glass.css +0 -1
- package/dist/themes/light.css +202 -0
- package/dist/themes/retro.css +152 -0
- package/dist/{types-BYx7gCuT.d.cts → types-DdCtDHgt.d.cts} +23 -1
- package/dist/{types-BYx7gCuT.d.ts → types-DdCtDHgt.d.ts} +23 -1
- package/dist/vue.cjs +3 -3
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.d.cts +2 -2
- package/dist/vue.d.ts +2 -2
- package/dist/vue.js +1 -1
- package/dist/vue.js.map +1 -1
- package/package.json +34 -7
- package/dist/chunk-N5KNWRKU.js.map +0 -1
- package/dist/chunk-TXINVEK3.cjs.map +0 -1
|
@@ -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,
|
|
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,
|
|
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
|
|
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 =
|
|
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 =
|
|
28
|
+
const binder = chunkB35DANTX_cjs.createDesktopBinder(wm, options);
|
|
29
29
|
vue.watch(
|
|
30
30
|
target,
|
|
31
31
|
(element, _previous, onCleanup) => {
|
package/dist/vue.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vue.ts"],"names":["getCurrentScope","onScopeDispose","createWindowManager","shallowRef","computed","toValue","createDesktopBinder","watch"],"mappings":";;;;;
|
|
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"]}
|
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,
|
|
3
|
-
import {
|
|
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,
|
|
3
|
-
import {
|
|
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-
|
|
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/dist/vue.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/vue.ts"],"names":[],"mappings":";;;
|
|
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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@surdeddd/wmkit",
|
|
3
|
-
"version": "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": "
|
|
206
|
+
"limit": "10 kB"
|
|
191
207
|
},
|
|
192
208
|
{
|
|
193
209
|
"name": "react adapter",
|
|
194
210
|
"path": "dist/react.js",
|
|
195
|
-
"limit": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
}
|