dynim-core 1.0.4 → 1.0.6
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 +9 -282
- package/dist/builder/builder-client.d.ts +1 -5
- package/dist/builder/builder-client.d.ts.map +1 -1
- package/dist/builder/builder-client.js +2 -22
- package/dist/builder/builder.d.ts +0 -4
- package/dist/builder/builder.d.ts.map +1 -1
- package/dist/builder/builder.js +64 -207
- package/dist/builder/editor-overlays.d.ts +1 -10
- package/dist/builder/editor-overlays.d.ts.map +1 -1
- package/dist/builder/editor-overlays.js +1 -103
- package/dist/builder/editor-state.d.ts +2 -21
- package/dist/builder/editor-state.d.ts.map +1 -1
- package/dist/builder/editor-state.js +2 -34
- package/dist/builder/element-utils.d.ts +0 -11
- package/dist/builder/element-utils.d.ts.map +1 -1
- package/dist/builder/element-utils.js +0 -58
- package/dist/builder/freeze-overlay.d.ts +1 -1
- package/dist/builder/freeze-overlay.d.ts.map +1 -1
- package/dist/builder/freeze-overlay.js +1 -2
- package/dist/builder/index.d.ts +5 -9
- package/dist/builder/index.d.ts.map +1 -1
- package/dist/builder/index.js +3 -7
- package/dist/builder/{drag-engine.d.ts → interaction-engine.d.ts} +6 -20
- package/dist/builder/interaction-engine.d.ts.map +1 -0
- package/dist/builder/interaction-engine.js +101 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/README.md +10 -0
- package/src/styles/builder.css +1 -189
- package/src/styles/editor.css +2 -61
- package/dist/builder/diff-state.d.ts +0 -24
- package/dist/builder/diff-state.d.ts.map +0 -1
- package/dist/builder/diff-state.js +0 -134
- package/dist/builder/drag-engine.d.ts.map +0 -1
- package/dist/builder/drag-engine.js +0 -686
- package/dist/builder/history-state.d.ts +0 -41
- package/dist/builder/history-state.d.ts.map +0 -1
- package/dist/builder/history-state.js +0 -76
package/src/styles/builder.css
CHANGED
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
transform: scale(0.96);
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
.builder-bar__btn--saved {
|
|
112
|
+
.builder-bar__btn--save.builder-bar__btn--saved {
|
|
113
113
|
background: #22c55e !important;
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -141,30 +141,6 @@
|
|
|
141
141
|
transform: scale(0.96);
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
/* Undo button - contextual appearance */
|
|
145
|
-
.builder-bar__btn--undo {
|
|
146
|
-
padding: 6px 10px;
|
|
147
|
-
background: rgba(255, 255, 255, 0.08);
|
|
148
|
-
color: #94a3b8;
|
|
149
|
-
animation: undoSlideIn 0.2s ease-out;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.builder-bar__btn--undo:hover {
|
|
153
|
-
background: rgba(255, 255, 255, 0.12);
|
|
154
|
-
color: #ffffff;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
@keyframes undoSlideIn {
|
|
158
|
-
from {
|
|
159
|
-
opacity: 0;
|
|
160
|
-
transform: translateX(-8px);
|
|
161
|
-
}
|
|
162
|
-
to {
|
|
163
|
-
opacity: 1;
|
|
164
|
-
transform: translateX(0);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
144
|
/* Disabled state for all buttons */
|
|
169
145
|
.builder-bar__btn:disabled {
|
|
170
146
|
opacity: 0.35;
|
|
@@ -178,115 +154,6 @@
|
|
|
178
154
|
opacity: 1 !important;
|
|
179
155
|
}
|
|
180
156
|
|
|
181
|
-
/* ===========================================
|
|
182
|
-
UNSAVED CHANGES MODAL
|
|
183
|
-
=========================================== */
|
|
184
|
-
|
|
185
|
-
.builder-modal {
|
|
186
|
-
position: fixed;
|
|
187
|
-
top: 0;
|
|
188
|
-
left: 0;
|
|
189
|
-
right: 0;
|
|
190
|
-
bottom: 0;
|
|
191
|
-
width: 100vw;
|
|
192
|
-
height: 100vh;
|
|
193
|
-
z-index: 10010 !important;
|
|
194
|
-
display: flex;
|
|
195
|
-
align-items: center;
|
|
196
|
-
justify-content: center;
|
|
197
|
-
pointer-events: auto;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
.builder-modal__backdrop {
|
|
201
|
-
position: fixed;
|
|
202
|
-
top: 0;
|
|
203
|
-
left: 0;
|
|
204
|
-
right: 0;
|
|
205
|
-
bottom: 0;
|
|
206
|
-
background: rgba(0, 0, 0, 0.5);
|
|
207
|
-
backdrop-filter: blur(4px);
|
|
208
|
-
-webkit-backdrop-filter: blur(4px);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.builder-modal__dialog {
|
|
212
|
-
position: fixed;
|
|
213
|
-
top: 50%;
|
|
214
|
-
left: 50%;
|
|
215
|
-
transform: translate(-50%, -50%);
|
|
216
|
-
background: #1e293b;
|
|
217
|
-
border-radius: 16px;
|
|
218
|
-
padding: 24px;
|
|
219
|
-
min-width: 320px;
|
|
220
|
-
max-width: 400px;
|
|
221
|
-
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
|
|
222
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
223
|
-
z-index: 10011;
|
|
224
|
-
pointer-events: auto;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
.builder-modal__title {
|
|
228
|
-
font-size: 18px;
|
|
229
|
-
font-weight: 600;
|
|
230
|
-
color: #ffffff;
|
|
231
|
-
margin-bottom: 8px;
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
.builder-modal__message {
|
|
235
|
-
font-size: 14px;
|
|
236
|
-
color: #94a3b8;
|
|
237
|
-
margin-bottom: 24px;
|
|
238
|
-
line-height: 1.5;
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
.builder-modal__actions {
|
|
242
|
-
display: flex;
|
|
243
|
-
gap: 8px;
|
|
244
|
-
justify-content: flex-end;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
.builder-modal__btn {
|
|
248
|
-
padding: 8px 16px;
|
|
249
|
-
border: none;
|
|
250
|
-
border-radius: 8px;
|
|
251
|
-
font-family: inherit;
|
|
252
|
-
font-size: 13px;
|
|
253
|
-
font-weight: 500;
|
|
254
|
-
cursor: pointer;
|
|
255
|
-
transition: all 0.15s ease;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
.builder-modal__btn--cancel {
|
|
259
|
-
background: rgba(255, 255, 255, 0.08);
|
|
260
|
-
color: #94a3b8;
|
|
261
|
-
}
|
|
262
|
-
|
|
263
|
-
.builder-modal__btn--cancel:hover {
|
|
264
|
-
background: rgba(255, 255, 255, 0.12);
|
|
265
|
-
color: #ffffff;
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
.builder-modal__btn--discard {
|
|
269
|
-
background: rgba(239, 68, 68, 0.15);
|
|
270
|
-
color: #ef4444;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
.builder-modal__btn--discard:hover {
|
|
274
|
-
background: rgba(239, 68, 68, 0.25);
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
.builder-modal__btn--save {
|
|
278
|
-
background: #3b82f6;
|
|
279
|
-
color: #ffffff;
|
|
280
|
-
}
|
|
281
|
-
|
|
282
|
-
.builder-modal__btn--save:hover {
|
|
283
|
-
background: #2563eb;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/* ===========================================
|
|
287
|
-
RESPONSIVE
|
|
288
|
-
=========================================== */
|
|
289
|
-
|
|
290
157
|
/* ===========================================
|
|
291
158
|
EDITOR OVERLAYS - Dark Reader Protection
|
|
292
159
|
Uses !important to prevent browser extensions
|
|
@@ -320,38 +187,6 @@
|
|
|
320
187
|
box-sizing: border-box !important;
|
|
321
188
|
}
|
|
322
189
|
|
|
323
|
-
/* Drag ghost - purple dashed */
|
|
324
|
-
.editor-drag-ghost.active {
|
|
325
|
-
position: fixed !important;
|
|
326
|
-
border: 2px dashed #8b5cf6 !important;
|
|
327
|
-
background: rgba(139, 92, 246, 0.1) !important;
|
|
328
|
-
border-radius: 4px !important;
|
|
329
|
-
pointer-events: none !important;
|
|
330
|
-
z-index: 10004 !important;
|
|
331
|
-
box-sizing: border-box !important;
|
|
332
|
-
opacity: 0.8 !important;
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
/* Drop target highlight - subtle green fill */
|
|
336
|
-
.editor-drop-target.active {
|
|
337
|
-
position: fixed !important;
|
|
338
|
-
background: rgba(34, 197, 94, 0.1) !important;
|
|
339
|
-
border-radius: 3px !important;
|
|
340
|
-
pointer-events: none !important;
|
|
341
|
-
z-index: 10001 !important;
|
|
342
|
-
box-sizing: border-box !important;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
/* Drop line - green indicator */
|
|
346
|
-
.editor-drop-line.active {
|
|
347
|
-
position: fixed !important;
|
|
348
|
-
background: #22c55e !important;
|
|
349
|
-
border-radius: 2px !important;
|
|
350
|
-
pointer-events: none !important;
|
|
351
|
-
z-index: 10002 !important;
|
|
352
|
-
box-shadow: 0 0 8px rgba(34, 197, 94, 0.5) !important;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
190
|
/* Tooltip */
|
|
356
191
|
.editor-tooltip.active {
|
|
357
192
|
position: fixed !important;
|
|
@@ -370,14 +205,6 @@
|
|
|
370
205
|
box-shadow: 0 2px 8px rgba(0,0,0,0.3) !important;
|
|
371
206
|
}
|
|
372
207
|
|
|
373
|
-
/* Parent highlight */
|
|
374
|
-
.editor-parent-highlight.active {
|
|
375
|
-
position: fixed !important;
|
|
376
|
-
pointer-events: none !important;
|
|
377
|
-
z-index: 10000 !important;
|
|
378
|
-
box-sizing: border-box !important;
|
|
379
|
-
}
|
|
380
|
-
|
|
381
208
|
/* ===========================================
|
|
382
209
|
RESPONSIVE
|
|
383
210
|
=========================================== */
|
|
@@ -404,19 +231,4 @@
|
|
|
404
231
|
width: 14px;
|
|
405
232
|
height: 14px;
|
|
406
233
|
}
|
|
407
|
-
|
|
408
|
-
.builder-modal__dialog {
|
|
409
|
-
min-width: auto;
|
|
410
|
-
margin: 16px;
|
|
411
|
-
padding: 20px;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
.builder-modal__actions {
|
|
415
|
-
flex-direction: column;
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
.builder-modal__btn {
|
|
419
|
-
width: 100%;
|
|
420
|
-
padding: 12px 16px;
|
|
421
|
-
}
|
|
422
234
|
}
|
package/src/styles/editor.css
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Editor styles - Visual overlays for the
|
|
3
|
-
*
|
|
2
|
+
* Editor styles - Visual overlays for the editor
|
|
3
|
+
* Hover highlight, selection box, and tooltip
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
:root {
|
|
7
7
|
--editor-accent-blue: #0ea5e9;
|
|
8
8
|
--editor-accent-purple: #8b5cf6;
|
|
9
|
-
--editor-accent-green: #22c55e;
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
/* Freeze overlay - captures events but allows scroll */
|
|
@@ -47,54 +46,6 @@
|
|
|
47
46
|
box-sizing: border-box;
|
|
48
47
|
}
|
|
49
48
|
|
|
50
|
-
/* Drag ghost - purple dashed */
|
|
51
|
-
.editor-drag-ghost {
|
|
52
|
-
position: fixed;
|
|
53
|
-
border: 2px dashed var(--editor-accent-purple);
|
|
54
|
-
background: rgba(139, 92, 246, 0.1);
|
|
55
|
-
border-radius: 4px;
|
|
56
|
-
pointer-events: none;
|
|
57
|
-
z-index: 10004;
|
|
58
|
-
box-sizing: border-box;
|
|
59
|
-
opacity: 0.8;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/* Drop target highlight - green tint */
|
|
63
|
-
.editor-drop-target {
|
|
64
|
-
position: fixed;
|
|
65
|
-
background: rgba(34, 197, 94, 0.1);
|
|
66
|
-
border-radius: 3px;
|
|
67
|
-
pointer-events: none;
|
|
68
|
-
z-index: 10001;
|
|
69
|
-
box-sizing: border-box;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/* Parent highlight - disabled, not used in original */
|
|
73
|
-
.editor-parent-highlight {
|
|
74
|
-
display: none !important;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/* Drop indicator line - green */
|
|
78
|
-
.editor-drop-line {
|
|
79
|
-
position: fixed;
|
|
80
|
-
background: var(--editor-accent-green);
|
|
81
|
-
border-radius: 2px;
|
|
82
|
-
pointer-events: none;
|
|
83
|
-
z-index: 10002;
|
|
84
|
-
box-shadow: 0 0 8px rgba(34, 197, 94, 0.5);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/* No-drop indicator - red dashed border for invalid drop zones */
|
|
88
|
-
.editor-no-drop-indicator {
|
|
89
|
-
position: fixed;
|
|
90
|
-
border: 2px dashed #ef4444;
|
|
91
|
-
background: rgba(239, 68, 68, 0.1);
|
|
92
|
-
border-radius: 4px;
|
|
93
|
-
pointer-events: none;
|
|
94
|
-
z-index: 10003;
|
|
95
|
-
box-sizing: border-box;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
49
|
/* Tooltip - selector info */
|
|
99
50
|
.editor-tooltip {
|
|
100
51
|
position: fixed;
|
|
@@ -113,16 +64,6 @@
|
|
|
113
64
|
box-shadow: 0 2px 8px rgba(0,0,0,0.3);
|
|
114
65
|
}
|
|
115
66
|
|
|
116
|
-
/* Cursor states */
|
|
117
|
-
.editor-freeze-overlay[data-dragging="true"] {
|
|
118
|
-
cursor: grabbing !important;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/* Wrappers created by drag-and-drop (minimal styling) */
|
|
122
|
-
[data-dnd-wrapper] {
|
|
123
|
-
/* No visual styling - just structural */
|
|
124
|
-
}
|
|
125
|
-
|
|
126
67
|
/* Builder mode active state */
|
|
127
68
|
body.builder-mode-active {
|
|
128
69
|
/* Prevent selection during builder mode */
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Diff State - Tracks original element positions for computing serializable diffs
|
|
3
|
-
*
|
|
4
|
-
* This module records the FIRST position of each moved element.
|
|
5
|
-
* When getDiff() is called, it compares original vs current DOM state
|
|
6
|
-
* to produce serializable diff objects (not DOM references).
|
|
7
|
-
*/
|
|
8
|
-
import { type ElementIdentifier, type PlacementTarget } from './element-utils';
|
|
9
|
-
export interface DiffEntry {
|
|
10
|
-
element: ElementIdentifier;
|
|
11
|
-
type: 'moved' | 'removed';
|
|
12
|
-
from: PlacementTarget;
|
|
13
|
-
to: PlacementTarget;
|
|
14
|
-
}
|
|
15
|
-
export interface DiffState {
|
|
16
|
-
snapshotInitialState: (rootElement: HTMLElement) => void;
|
|
17
|
-
trackElement: (domElement: HTMLElement, fallbackPlacement?: PlacementTarget) => void;
|
|
18
|
-
getDiff: () => DiffEntry[];
|
|
19
|
-
hasChanges: () => boolean;
|
|
20
|
-
clearAll: () => void;
|
|
21
|
-
getTrackedCount: () => number;
|
|
22
|
-
}
|
|
23
|
-
export declare function createDiffState(): DiffState;
|
|
24
|
-
//# sourceMappingURL=diff-state.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"diff-state.d.ts","sourceRoot":"","sources":["../../src/builder/diff-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAKL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,EAAE,EAAE,eAAe,CAAC;CACrB;AA6CD,MAAM,WAAW,SAAS;IACxB,oBAAoB,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IACzD,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,iBAAiB,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC;IACrF,OAAO,EAAE,MAAM,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,eAAe,EAAE,MAAM,MAAM,CAAC;CAC/B;AAED,wBAAgB,eAAe,IAAI,SAAS,CAyG3C"}
|
|
@@ -1,134 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Diff State - Tracks original element positions for computing serializable diffs
|
|
3
|
-
*
|
|
4
|
-
* This module records the FIRST position of each moved element.
|
|
5
|
-
* When getDiff() is called, it compares original vs current DOM state
|
|
6
|
-
* to produce serializable diff objects (not DOM references).
|
|
7
|
-
*/
|
|
8
|
-
import { getStableId, findByStableId, buildElementIdentifier, buildPlacementTarget } from './element-utils';
|
|
9
|
-
function serializeIdentifier(el) {
|
|
10
|
-
if (!el)
|
|
11
|
-
return '';
|
|
12
|
-
if (el.id)
|
|
13
|
-
return `#${el.id}`;
|
|
14
|
-
const parts = [
|
|
15
|
-
el.tagName,
|
|
16
|
-
el.classes.sort().join('.'),
|
|
17
|
-
`nth:${el.nthOfType}`,
|
|
18
|
-
el.textContentPreview?.slice(0, 20) || '',
|
|
19
|
-
];
|
|
20
|
-
if (el.parentIdentifier) {
|
|
21
|
-
parts.push('>' + serializeIdentifier(el.parentIdentifier));
|
|
22
|
-
}
|
|
23
|
-
return parts.join('|');
|
|
24
|
-
}
|
|
25
|
-
function placementsEqual(a, b) {
|
|
26
|
-
if (!a || !b)
|
|
27
|
-
return a === b;
|
|
28
|
-
if (a.position !== b.position)
|
|
29
|
-
return false;
|
|
30
|
-
if (a.parentStableId && b.parentStableId) {
|
|
31
|
-
if (a.parentStableId !== b.parentStableId)
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
if (serializeIdentifier(a.parent) !== serializeIdentifier(b.parent))
|
|
36
|
-
return false;
|
|
37
|
-
}
|
|
38
|
-
if (a.referenceStableId && b.referenceStableId) {
|
|
39
|
-
return a.referenceStableId === b.referenceStableId;
|
|
40
|
-
}
|
|
41
|
-
if (a.referenceElement && b.referenceElement) {
|
|
42
|
-
return serializeIdentifier(a.referenceElement) === serializeIdentifier(b.referenceElement);
|
|
43
|
-
}
|
|
44
|
-
return a.referenceElement === b.referenceElement;
|
|
45
|
-
}
|
|
46
|
-
export function createDiffState() {
|
|
47
|
-
const initialSnapshot = new Map();
|
|
48
|
-
const movedElements = new Map();
|
|
49
|
-
function snapshotInitialState(rootElement) {
|
|
50
|
-
if (!rootElement)
|
|
51
|
-
return;
|
|
52
|
-
function walkAndSnapshot(element) {
|
|
53
|
-
if (element.nodeType !== Node.ELEMENT_NODE)
|
|
54
|
-
return;
|
|
55
|
-
const htmlElement = element;
|
|
56
|
-
const stableId = getStableId(htmlElement);
|
|
57
|
-
const placement = buildPlacementTarget(htmlElement);
|
|
58
|
-
if (placement) {
|
|
59
|
-
initialSnapshot.set(stableId, placement);
|
|
60
|
-
}
|
|
61
|
-
for (const child of Array.from(element.children)) {
|
|
62
|
-
walkAndSnapshot(child);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
for (const child of Array.from(rootElement.children)) {
|
|
66
|
-
walkAndSnapshot(child);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
function trackElement(domElement, _fallbackPlacement) {
|
|
70
|
-
if (!domElement)
|
|
71
|
-
return;
|
|
72
|
-
const stableId = getStableId(domElement);
|
|
73
|
-
if (movedElements.has(stableId)) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
const elementIdentifier = buildElementIdentifier(domElement);
|
|
77
|
-
movedElements.set(stableId, {
|
|
78
|
-
stableId,
|
|
79
|
-
element: elementIdentifier,
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
function getDiff() {
|
|
83
|
-
const diffs = [];
|
|
84
|
-
for (const [stableId, tracked] of movedElements) {
|
|
85
|
-
const element = findByStableId(stableId);
|
|
86
|
-
const originalPlacement = initialSnapshot.get(stableId);
|
|
87
|
-
if (!element) {
|
|
88
|
-
if (originalPlacement) {
|
|
89
|
-
diffs.push({
|
|
90
|
-
element: tracked.element,
|
|
91
|
-
type: 'removed',
|
|
92
|
-
from: originalPlacement,
|
|
93
|
-
to: originalPlacement,
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
continue;
|
|
97
|
-
}
|
|
98
|
-
if (!originalPlacement)
|
|
99
|
-
continue;
|
|
100
|
-
const currentPlacement = buildPlacementTarget(element);
|
|
101
|
-
if (!currentPlacement)
|
|
102
|
-
continue;
|
|
103
|
-
if (!placementsEqual(originalPlacement, currentPlacement)) {
|
|
104
|
-
diffs.push({
|
|
105
|
-
element: tracked.element,
|
|
106
|
-
type: 'moved',
|
|
107
|
-
from: originalPlacement,
|
|
108
|
-
to: currentPlacement,
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
return diffs;
|
|
113
|
-
}
|
|
114
|
-
function hasChanges() {
|
|
115
|
-
return movedElements.size > 0;
|
|
116
|
-
}
|
|
117
|
-
function clearAll() {
|
|
118
|
-
movedElements.clear();
|
|
119
|
-
}
|
|
120
|
-
function getTrackedCount() {
|
|
121
|
-
return movedElements.size;
|
|
122
|
-
}
|
|
123
|
-
if (typeof window !== 'undefined') {
|
|
124
|
-
window.__diffState = { getDiff, hasChanges, getTrackedCount, movedElements, initialSnapshot };
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
snapshotInitialState,
|
|
128
|
-
trackElement,
|
|
129
|
-
getDiff,
|
|
130
|
-
hasChanges,
|
|
131
|
-
clearAll,
|
|
132
|
-
getTrackedCount,
|
|
133
|
-
};
|
|
134
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drag-engine.d.ts","sourceRoot":"","sources":["../../src/builder/drag-engine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,gBAAgB,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAA6B,MAAM,iBAAiB,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAMtD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,gBAAgB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IACnD,eAAe,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,eAAe,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACtE,aAAa,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACpE,gBAAgB,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAClE,iBAAiB,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACxE,WAAW,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,cAAc,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,WAAW,KAAK,UAAU,GAAG,IAAI,CAAC;CAC1F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAixBrE"}
|