@witchcraft/layout 0.5.6 → 0.5.7
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/module.json +1 -1
- package/dist/module.mjs +1 -0
- package/dist/runtime/components/LayoutWindow.d.vue.ts +1 -1
- package/dist/runtime/components/LayoutWindow.vue.d.ts +1 -1
- package/dist/runtime/composables/useFrames.d.ts +1 -1
- package/dist/runtime/composables/useFrames.js +7 -5
- package/dist/runtime/demo/tailwind.css +1 -1
- package/dist/runtime/move/ActionHandler.d.ts +1 -1
- package/dist/runtime/move/CloseAction.js +2 -2
- package/dist/runtime/move/FrameDragAction.js +1 -1
- package/dist/runtime/move/SplitAction.js +3 -3
- package/dist/runtime/types/index.d.ts +2 -2
- package/package.json +1 -1
- package/src/module.ts +1 -0
- package/src/runtime/composables/useFrames.ts +8 -6
- package/src/runtime/demo/tailwind.css +4 -0
- package/src/runtime/move/ActionHandler.ts +1 -1
- package/src/runtime/move/CloseAction.ts +2 -2
- package/src/runtime/move/FrameDragAction.ts +1 -1
- package/src/runtime/move/SplitAction.ts +3 -3
- package/src/runtime/types/index.ts +2 -2
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -17,6 +17,7 @@ const module$1 = defineNuxtModule({
|
|
|
17
17
|
addTemplate({
|
|
18
18
|
filename: "witchcraft-layout.css",
|
|
19
19
|
write: true,
|
|
20
|
+
// keep in sync with demo tailwind.css's relevant section
|
|
20
21
|
getContents: () => [
|
|
21
22
|
`@source "${resolve("runtime/components")}";`,
|
|
22
23
|
// the drag actions handlers and utils they use add some styles
|
|
@@ -353,7 +353,7 @@ declare const __VLS_component: import("vue").DefineComponent<__VLS_PublicProps,
|
|
|
353
353
|
moveType: infer M;
|
|
354
354
|
} ? M : never, TContextContext extends TContext extends {
|
|
355
355
|
context: infer C;
|
|
356
|
-
} ? C : never>(e: PointerEvent, type: TContextMoveType extends never ? T : TContextMoveType, data: T extends "edge" ? import("../types/index.js").EdgeMoveStartData : T extends "frame" ? import("../types/index.js").FrameMoveStartData : undefined, { moveEvent, endEvent, context }?: {
|
|
356
|
+
} ? C : never>(e: PointerEvent | undefined, type: TContextMoveType extends never ? T : TContextMoveType, data: T extends "edge" ? import("../types/index.js").EdgeMoveStartData : T extends "frame" ? import("../types/index.js").FrameMoveStartData : undefined, { moveEvent, endEvent, context }?: {
|
|
357
357
|
moveEvent?: string;
|
|
358
358
|
endEvent?: string;
|
|
359
359
|
context?: {
|
|
@@ -353,7 +353,7 @@ declare const __VLS_component: import("vue").DefineComponent<__VLS_PublicProps,
|
|
|
353
353
|
moveType: infer M;
|
|
354
354
|
} ? M : never, TContextContext extends TContext extends {
|
|
355
355
|
context: infer C;
|
|
356
|
-
} ? C : never>(e: PointerEvent, type: TContextMoveType extends never ? T : TContextMoveType, data: T extends "edge" ? import("../types/index.js").EdgeMoveStartData : T extends "frame" ? import("../types/index.js").FrameMoveStartData : undefined, { moveEvent, endEvent, context }?: {
|
|
356
|
+
} ? C : never>(e: PointerEvent | undefined, type: TContextMoveType extends never ? T : TContextMoveType, data: T extends "edge" ? import("../types/index.js").EdgeMoveStartData : T extends "frame" ? import("../types/index.js").FrameMoveStartData : undefined, { moveEvent, endEvent, context }?: {
|
|
357
357
|
moveEvent?: string;
|
|
358
358
|
endEvent?: string;
|
|
359
359
|
context?: {
|
|
@@ -7,7 +7,7 @@ export declare function useFrames(win: Ref<LayoutWindow>, handler: IActionHandle
|
|
|
7
7
|
moveType: infer M;
|
|
8
8
|
} ? M : never, TContextContext extends TContext extends {
|
|
9
9
|
context: infer C;
|
|
10
|
-
} ? C : never>(e: PointerEvent, type: TContextMoveType extends never ? T : TContextMoveType, data: T extends "edge" ? EdgeMoveStartData : T extends "frame" ? FrameMoveStartData : undefined, { moveEvent, endEvent, context }?: {
|
|
10
|
+
} ? C : never>(e: PointerEvent | undefined, type: TContextMoveType extends never ? T : TContextMoveType, data: T extends "edge" ? EdgeMoveStartData : T extends "frame" ? FrameMoveStartData : undefined, { moveEvent, endEvent, context }?: {
|
|
11
11
|
moveEvent?: string;
|
|
12
12
|
endEvent?: string;
|
|
13
13
|
context?: {
|
|
@@ -117,13 +117,15 @@ export function useFrames(win, handler) {
|
|
|
117
117
|
});
|
|
118
118
|
controller = new AbortController();
|
|
119
119
|
controller.signal.addEventListener("abort", () => resetState());
|
|
120
|
-
e
|
|
120
|
+
e?.preventDefault();
|
|
121
121
|
window.addEventListener(moveEvent, onMove, { signal: controller.signal });
|
|
122
122
|
window.addEventListener(endEvent, moveEnd, { signal: controller.signal });
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
123
|
+
if (e) {
|
|
124
|
+
const point = toWindowCoord(win.value, e);
|
|
125
|
+
movePoint.value = point;
|
|
126
|
+
moveStartPoint = { ...point };
|
|
127
|
+
moveDirStore.update(point);
|
|
128
|
+
}
|
|
127
129
|
eventContext.value = context;
|
|
128
130
|
isMoving.value = type;
|
|
129
131
|
showMoving.value = true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
@import "tailwindcss";@import "../../../playground/.nuxt/witchcraft-ui.css";@import "../../../playground/.nuxt/witchcraft-layout.css";@source "../../../src/runtime/demo";button{cursor:pointer}
|
|
1
|
+
@import "tailwindcss";@import "../../../playground/.nuxt/witchcraft-ui.css";@import "../../../playground/.nuxt/witchcraft-layout.css";@source "../../../src/runtime/demo";@source "../../../src/runtime/move";@source "../../../src/runtime/components";@source "../../../src/runtime/utils/createSplitDecoShapes";button{cursor:pointer}
|
|
@@ -44,7 +44,7 @@ export declare class ActionHandler<TRawActions extends IAction[], TActions exten
|
|
|
44
44
|
*/
|
|
45
45
|
defaultOnMoveChange?: IAction["onMoveChange"]);
|
|
46
46
|
eventHandler(e: KeyboardEvent | PointerEvent, state: MoveState, forceRecalculateEdges: () => void): undefined;
|
|
47
|
-
onMoveChange<T extends "start" | "move" | "end">(type: T, e: T extends "end" ? PointerEvent | undefined : PointerEvent, state: MoveState, forceRecalculateEdges: () => void, cancel: (e: PointerEvent | KeyboardEvent | undefined, state: MoveState) => void, resolve: T extends "end" ? undefined : ((opts: ActionResolve) => void)): MoveChangeResult;
|
|
47
|
+
onMoveChange<T extends "start" | "move" | "end">(type: T, e: T extends "end" | "start" ? PointerEvent | undefined : PointerEvent, state: MoveState, forceRecalculateEdges: () => void, cancel: (e: PointerEvent | KeyboardEvent | undefined, state: MoveState) => void, resolve: T extends "end" ? undefined : ((opts: ActionResolve) => void)): MoveChangeResult;
|
|
48
48
|
onMoveApply(state: MoveState, forceRecalculateEdges: () => void): ActionHandlerApplyResult;
|
|
49
49
|
onMoveEnded(): void;
|
|
50
50
|
cancel(e: PointerEvent | KeyboardEvent | undefined, state: MoveState): void;
|
|
@@ -99,7 +99,7 @@ export class CloseAction {
|
|
|
99
99
|
return false;
|
|
100
100
|
}
|
|
101
101
|
onMoveChange(type, _e, state) {
|
|
102
|
-
if (state.moveDistance <= this.minDragDistance) {
|
|
102
|
+
if (type === "end" || state.moveDistance <= this.minDragDistance) {
|
|
103
103
|
return { updateEdges: false, shapes: [] };
|
|
104
104
|
}
|
|
105
105
|
const {
|
|
@@ -150,7 +150,7 @@ export class CloseAction {
|
|
|
150
150
|
const decos = this._getDecos(state);
|
|
151
151
|
this.state.lastReturn = {
|
|
152
152
|
updateEdges: !isMovingFromWindowEdge,
|
|
153
|
-
shapes:
|
|
153
|
+
shapes: decos.flatMap((_) => _.shapes)
|
|
154
154
|
};
|
|
155
155
|
return this.state.lastReturn;
|
|
156
156
|
}
|
|
@@ -94,7 +94,7 @@ export class FrameDragAction {
|
|
|
94
94
|
return false;
|
|
95
95
|
}
|
|
96
96
|
onMoveChange(type, _e, state) {
|
|
97
|
-
if (state.moveDistance <= this.minDragDistance) {
|
|
97
|
+
if (type === "start" || state.moveDistance <= this.minDragDistance) {
|
|
98
98
|
return { updateEdges: false, shapes: [], showMoving: false };
|
|
99
99
|
}
|
|
100
100
|
const { win, movingFrameId, moveHoveredFrame } = state;
|
|
@@ -120,7 +120,7 @@ export class SplitAction {
|
|
|
120
120
|
}
|
|
121
121
|
onMoveChange(type, _e, state) {
|
|
122
122
|
const { moveHoveredFrame, moveDistance } = state;
|
|
123
|
-
if (moveDistance <= this.minDragDistance) {
|
|
123
|
+
if (type === "end" || moveDistance <= this.minDragDistance) {
|
|
124
124
|
return { updateEdges: false, shapes: [], showMoving: false };
|
|
125
125
|
}
|
|
126
126
|
let ok = false;
|
|
@@ -145,7 +145,7 @@ export class SplitAction {
|
|
|
145
145
|
};
|
|
146
146
|
this.state.lastReturn = {
|
|
147
147
|
updateEdges: true,
|
|
148
|
-
shapes:
|
|
148
|
+
shapes: [errorDeco],
|
|
149
149
|
showMoving: false
|
|
150
150
|
};
|
|
151
151
|
return this.state.lastReturn;
|
|
@@ -153,7 +153,7 @@ export class SplitAction {
|
|
|
153
153
|
}
|
|
154
154
|
this.state.lastReturn = {
|
|
155
155
|
updateEdges: false,
|
|
156
|
-
shapes:
|
|
156
|
+
shapes: decos.flatMap((_) => _.shapes),
|
|
157
157
|
showMoving: false
|
|
158
158
|
};
|
|
159
159
|
return this.state.lastReturn;
|
|
@@ -1937,7 +1937,7 @@ export interface IAction {
|
|
|
1937
1937
|
*
|
|
1938
1938
|
* See also {@link ActionHandler.onMoveChange} to understand it's lifecycle as it is the extended version of.
|
|
1939
1939
|
*/
|
|
1940
|
-
onMoveChange: <T extends "start" | "move" | "end">(type: T, e: T extends "end" ? PointerEvent | undefined : PointerEvent, state: MoveState, forceRecalculateEdges: () => void,
|
|
1940
|
+
onMoveChange: <T extends "start" | "move" | "end">(type: T, e: T extends "end" | "start" ? PointerEvent | undefined : PointerEvent, state: MoveState, forceRecalculateEdges: () => void,
|
|
1941
1941
|
/** Calls moveEnd with updateEdges: false. This can technically be called from "end", it should still work. */
|
|
1942
1942
|
cancel: (e: PointerEvent | KeyboardEvent | undefined, state: MoveState) => void,
|
|
1943
1943
|
/** Saves result to resolve moveStart promise, updates edges if you passed updateEdges then aborts the handler (only onMoveEnded will fire after) . Not available during "end" event. It's designed for resolving from other external evente (e.g. key events). */
|
|
@@ -2039,7 +2039,7 @@ export interface IActionHandler {
|
|
|
2039
2039
|
* - onMoveApply(...) (IF moveEnd was called with apply: true, otherwise this is skipped)
|
|
2040
2040
|
* - onMoveEnded() // do cleanup here, always called at the very end
|
|
2041
2041
|
*/
|
|
2042
|
-
onMoveChange<T extends "start" | "move" | "end">(type: T, e: T extends "end" ? PointerEvent | undefined : PointerEvent, state: MoveState, forceRecalculateEdges: () => void,
|
|
2042
|
+
onMoveChange<T extends "start" | "move" | "end">(type: T, e: T extends "end" | "start" ? PointerEvent | undefined : PointerEvent, state: MoveState, forceRecalculateEdges: () => void,
|
|
2043
2043
|
/** Calls moveEnd with apply: false. This can technically be called from "end", it should still work. */
|
|
2044
2044
|
cancel: (e: PointerEvent | KeyboardEvent | undefined, state: MoveState) => void,
|
|
2045
2045
|
/** Saves result to resolve moveStart promise, updates edges if you passed updateEdges then aborts the handler (only onMoveEnded will fire after) . Not available during "end" event. It's designed for resolving from other external evente (e.g. key events). */
|
package/package.json
CHANGED
package/src/module.ts
CHANGED
|
@@ -35,6 +35,7 @@ export default defineNuxtModule<ModuleOptions>({
|
|
|
35
35
|
addTemplate({
|
|
36
36
|
filename: "witchcraft-layout.css",
|
|
37
37
|
write: true,
|
|
38
|
+
// keep in sync with demo tailwind.css's relevant section
|
|
38
39
|
getContents: () => [
|
|
39
40
|
`@source "${resolve("runtime/components")}";`,
|
|
40
41
|
// the drag actions handlers and utils they use add some styles
|
|
@@ -161,7 +161,7 @@ export function useFrames(
|
|
|
161
161
|
TContextMoveType extends TContext extends { moveType: infer M } ? M : never,
|
|
162
162
|
TContextContext extends TContext extends { context: infer C } ? C : never
|
|
163
163
|
>(
|
|
164
|
-
e: PointerEvent,
|
|
164
|
+
e: PointerEvent | undefined,
|
|
165
165
|
type: TContextMoveType extends never ? T : TContextMoveType,
|
|
166
166
|
// someday this will work
|
|
167
167
|
data: T extends "edge" ? EdgeMoveStartData : T extends "frame" ? FrameMoveStartData : undefined,
|
|
@@ -189,14 +189,16 @@ export function useFrames(
|
|
|
189
189
|
controller = new AbortController()
|
|
190
190
|
controller.signal.addEventListener("abort", () => resetState())
|
|
191
191
|
|
|
192
|
-
e
|
|
192
|
+
e?.preventDefault()
|
|
193
193
|
window.addEventListener(moveEvent, onMove as EventListener, { signal: controller.signal })
|
|
194
194
|
window.addEventListener(endEvent, moveEnd as EventListener, { signal: controller.signal })
|
|
195
195
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
196
|
+
if (e) {
|
|
197
|
+
const point = toWindowCoord(win.value, e)
|
|
198
|
+
movePoint.value = point
|
|
199
|
+
moveStartPoint = { ...point }
|
|
200
|
+
moveDirStore.update(point)
|
|
201
|
+
}
|
|
200
202
|
eventContext.value = context
|
|
201
203
|
|
|
202
204
|
isMoving.value = type as any
|
|
@@ -5,6 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
/* Only needed for the dev playground: the demo App.vue lives outside the Vite project root, so Tailwind's auto-scan doesn't find the [&.deco-...] classes it defines. */
|
|
7
7
|
@source "../../../src/runtime/demo";
|
|
8
|
+
/* Only needed for the non-nuxt demo, makes sure classes are added even if .nuxt/witchcraft-layout.css is not generated or is outdated. Keep in sync with nuxt module list. */
|
|
9
|
+
@source "../../../src/runtime/move";
|
|
10
|
+
@source "../../../src/runtime/components";
|
|
11
|
+
@source "../../../src/runtime/utils/createSplitDecoShapes";
|
|
8
12
|
|
|
9
13
|
button {
|
|
10
14
|
cursor: pointer;
|
|
@@ -123,7 +123,7 @@ export class ActionHandler<
|
|
|
123
123
|
|
|
124
124
|
onMoveChange<T extends "start" | "move" | "end">(
|
|
125
125
|
type: T,
|
|
126
|
-
e: T extends "end" ? PointerEvent | undefined : PointerEvent,
|
|
126
|
+
e: T extends "end" | "start" ? PointerEvent | undefined : PointerEvent,
|
|
127
127
|
state: MoveState,
|
|
128
128
|
forceRecalculateEdges: () => void,
|
|
129
129
|
cancel: (e: PointerEvent | KeyboardEvent | undefined, state: MoveState) => void,
|
|
@@ -155,7 +155,7 @@ export class CloseAction implements IAction {
|
|
|
155
155
|
_e: PointerEvent | undefined,
|
|
156
156
|
state: MoveState
|
|
157
157
|
): ActionChangeResult {
|
|
158
|
-
if (state.moveDistance <= this.minDragDistance) {
|
|
158
|
+
if (type === "end" || state.moveDistance <= this.minDragDistance) {
|
|
159
159
|
return { updateEdges: false, shapes: [] }
|
|
160
160
|
}
|
|
161
161
|
const {
|
|
@@ -207,7 +207,7 @@ export class CloseAction implements IAction {
|
|
|
207
207
|
const decos = this._getDecos(state)
|
|
208
208
|
this.state.lastReturn = {
|
|
209
209
|
updateEdges: !isMovingFromWindowEdge,
|
|
210
|
-
shapes:
|
|
210
|
+
shapes: decos.flatMap(_ => _.shapes)
|
|
211
211
|
}
|
|
212
212
|
return this.state.lastReturn
|
|
213
213
|
}
|
|
@@ -155,7 +155,7 @@ export class FrameDragAction implements IAction {
|
|
|
155
155
|
_e: PointerEvent | undefined,
|
|
156
156
|
state: MoveState
|
|
157
157
|
): ActionChangeResult {
|
|
158
|
-
if (state.moveDistance <= this.minDragDistance) {
|
|
158
|
+
if (type === "start" || state.moveDistance <= this.minDragDistance) {
|
|
159
159
|
return { updateEdges: false, shapes: [], showMoving: false }
|
|
160
160
|
}
|
|
161
161
|
const { win, movingFrameId, moveHoveredFrame } = state
|
|
@@ -179,7 +179,7 @@ export class SplitAction implements IAction {
|
|
|
179
179
|
state: MoveState
|
|
180
180
|
): ActionChangeResult {
|
|
181
181
|
const { moveHoveredFrame, moveDistance } = state
|
|
182
|
-
if (moveDistance <= this.minDragDistance) {
|
|
182
|
+
if (type === "end" || moveDistance <= this.minDragDistance) {
|
|
183
183
|
return { updateEdges: false, shapes: [], showMoving: false }
|
|
184
184
|
}
|
|
185
185
|
let ok = false
|
|
@@ -205,7 +205,7 @@ export class SplitAction implements IAction {
|
|
|
205
205
|
}
|
|
206
206
|
this.state.lastReturn = {
|
|
207
207
|
updateEdges: true,
|
|
208
|
-
shapes:
|
|
208
|
+
shapes: [errorDeco],
|
|
209
209
|
showMoving: false
|
|
210
210
|
}
|
|
211
211
|
return this.state.lastReturn
|
|
@@ -213,7 +213,7 @@ export class SplitAction implements IAction {
|
|
|
213
213
|
}
|
|
214
214
|
this.state.lastReturn = {
|
|
215
215
|
updateEdges: false,
|
|
216
|
-
shapes:
|
|
216
|
+
shapes: decos.flatMap(_ => _.shapes),
|
|
217
217
|
showMoving: false
|
|
218
218
|
}
|
|
219
219
|
return this.state.lastReturn
|
|
@@ -552,7 +552,7 @@ export interface IAction {
|
|
|
552
552
|
*/
|
|
553
553
|
onMoveChange: <T extends "start" | "move" | "end">(
|
|
554
554
|
type: T,
|
|
555
|
-
e: T extends "end" ? PointerEvent | undefined : PointerEvent,
|
|
555
|
+
e: T extends "end" | "start" ? PointerEvent | undefined : PointerEvent,
|
|
556
556
|
state: MoveState,
|
|
557
557
|
forceRecalculateEdges: () => void,
|
|
558
558
|
/** Calls moveEnd with updateEdges: false. This can technically be called from "end", it should still work. */
|
|
@@ -665,7 +665,7 @@ export interface IActionHandler {
|
|
|
665
665
|
*/
|
|
666
666
|
onMoveChange<T extends "start" | "move" | "end">(
|
|
667
667
|
type: T,
|
|
668
|
-
e: T extends "end" ? PointerEvent | undefined : PointerEvent,
|
|
668
|
+
e: T extends "end" | "start" ? PointerEvent | undefined : PointerEvent,
|
|
669
669
|
state: MoveState,
|
|
670
670
|
forceRecalculateEdges: () => void,
|
|
671
671
|
/** Calls moveEnd with apply: false. This can technically be called from "end", it should still work. */
|