@oscarpalmer/oui 0.26.1 → 0.28.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/dist/css/floatable.css +9 -2
- package/dist/css/message.css +1 -0
- package/dist/css/reset.css +1 -0
- package/dist/js/dialog.d.mts +4 -0
- package/dist/js/dialog.mjs +33 -1
- package/dist/js/draggable-zszaW1qS.d.mts +155 -0
- package/dist/js/floatable/floatable.embedded.d.mts +2 -0
- package/dist/js/floatable/{embedded.mjs → floatable.embedded.mjs} +16 -11
- package/dist/js/floatable/floatable.standalone.d.mts +2 -0
- package/dist/js/floatable/floatable.standalone.mjs +2 -0
- package/dist/js/{embedded-CSOh5njI.d.mts → floatable.embedded-YxGwzgbE.d.mts} +5 -2
- package/dist/js/focus-trap/focus-trap.embedded.d.mts +2 -0
- package/dist/js/focus-trap/{embedded.mjs → focus-trap.embedded.mjs} +17 -15
- package/dist/js/focus-trap/focus-trap.standalone.d.mts +2 -0
- package/dist/js/focus-trap/focus-trap.standalone.mjs +2 -0
- package/dist/js/{embedded-CHK82Uh5.d.mts → focus-trap.embedded-DR8NpZfr.d.mts} +18 -18
- package/dist/js/index.d.mts +5 -3
- package/dist/js/index.mjs +11 -7
- package/dist/js/internal/draggable.d.mts +2 -2
- package/dist/js/internal/draggable.mjs +147 -95
- package/dist/js/movable/movable.embedded.d.mts +2 -0
- package/dist/js/movable/movable.embedded.mjs +184 -0
- package/dist/js/movable/movable.standalone.d.mts +2 -0
- package/dist/js/movable/movable.standalone.mjs +2 -0
- package/dist/js/popover.d.mts +2 -2
- package/dist/js/popover.mjs +4 -3
- package/dist/js/resizable/resizable.embedded.d.mts +2 -0
- package/dist/js/resizable/resizable.embedded.mjs +186 -0
- package/dist/js/resizable/resizable.standalone.d.mts +2 -0
- package/dist/js/resizable/resizable.standalone.mjs +2 -0
- package/dist/js/resizable.embedded-CXrUVPzR.d.mts +35 -0
- package/dist/js/sortable/sortable.embedded.d.mts +2 -0
- package/dist/js/{sortable.mjs → sortable/sortable.embedded.mjs} +88 -63
- package/dist/js/sortable/sortable.standalone.d.mts +2 -0
- package/dist/js/sortable/sortable.standalone.mjs +2 -0
- package/dist/js/splitter.mjs +6 -6
- package/dist/js/toolbar.mjs +6 -6
- package/dist/js/tooltip.d.mts +2 -2
- package/dist/js/tooltip.mjs +36 -33
- package/package.json +15 -11
- package/src/css/floatable.scss +9 -2
- package/src/css/form.scss +6 -6
- package/src/css/message.scss +1 -0
- package/src/css/reset.scss +1 -0
- package/src/js/dialog.ts +61 -1
- package/src/js/floatable/{embedded.ts → floatable.embedded.ts} +18 -10
- package/src/js/floatable/floatable.standalone.ts +6 -0
- package/src/js/focus-trap/{embedded.ts → focus-trap.embedded.ts} +20 -17
- package/src/js/focus-trap/focus-trap.standalone.ts +1 -0
- package/src/js/index.ts +5 -4
- package/src/js/internal/draggable.ts +310 -169
- package/src/js/movable/movable.embedded.ts +328 -0
- package/src/js/movable/movable.standalone.ts +2 -0
- package/src/js/popover.ts +3 -2
- package/src/js/resizable/resizable.embedded.ts +383 -0
- package/src/js/resizable/resizable.standalone.ts +5 -0
- package/src/js/{sortable.ts → sortable/sortable.embedded.ts} +170 -103
- package/src/js/sortable/sortable.standalone.ts +2 -0
- package/src/js/splitter.ts +1 -1
- package/src/js/tooltip.ts +49 -43
- package/dist/js/floatable/embedded.d.mts +0 -2
- package/dist/js/floatable/standalone.d.mts +0 -2
- package/dist/js/floatable/standalone.mjs +0 -2
- package/dist/js/focus-trap/embedded.d.mts +0 -2
- package/dist/js/focus-trap/standalone.d.mts +0 -2
- package/dist/js/focus-trap/standalone.mjs +0 -6
- package/dist/js/movable-dNqBctx3.d.mts +0 -101
- package/dist/js/movable.d.mts +0 -2
- package/dist/js/movable.mjs +0 -152
- package/dist/js/sortable.d.mts +0 -2
- package/src/js/floatable/standalone.ts +0 -1
- package/src/js/focus-trap/standalone.ts +0 -6
- package/src/js/movable.ts +0 -260
package/src/js/movable.ts
DELETED
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
import type {EventPosition, PlainObject} from '@oscarpalmer/atoms/models';
|
|
2
|
-
import {getPosition, on} from '@oscarpalmer/toretto/event';
|
|
3
|
-
import {attributable} from './internal/attributable';
|
|
4
|
-
import {
|
|
5
|
-
addDraggable,
|
|
6
|
-
OuiDraggable,
|
|
7
|
-
removeDraggable,
|
|
8
|
-
type DraggableBound,
|
|
9
|
-
type DraggableState,
|
|
10
|
-
type DragMovePosition,
|
|
11
|
-
} from './internal/draggable';
|
|
12
|
-
|
|
13
|
-
// #region Types
|
|
14
|
-
|
|
15
|
-
export class OuiMovable extends OuiDraggable {
|
|
16
|
-
inset: string;
|
|
17
|
-
|
|
18
|
-
moved = false;
|
|
19
|
-
|
|
20
|
-
offset: Partial<EventPosition> | undefined;
|
|
21
|
-
|
|
22
|
-
position: string;
|
|
23
|
-
|
|
24
|
-
get dragged(): HTMLElement {
|
|
25
|
-
return this.element;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
get origin(): HTMLElement | undefined {
|
|
29
|
-
return this.element;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
constructor(element: HTMLElement) {
|
|
33
|
-
super('move', element, {
|
|
34
|
-
container: {
|
|
35
|
-
attribute: ATTRIBUTE_CONTAINER,
|
|
36
|
-
map: CONTAINERS,
|
|
37
|
-
onDestroy: destroyContainer,
|
|
38
|
-
onInitialize: initializeContainer,
|
|
39
|
-
},
|
|
40
|
-
direction: {
|
|
41
|
-
attribute: ATTRIBUTE_DIRECTION,
|
|
42
|
-
onAfter: afterDirection,
|
|
43
|
-
},
|
|
44
|
-
drag: {
|
|
45
|
-
onBegin,
|
|
46
|
-
onCancel,
|
|
47
|
-
onEnd,
|
|
48
|
-
onMove,
|
|
49
|
-
},
|
|
50
|
-
position: {
|
|
51
|
-
getOffset: getOffsetPosition,
|
|
52
|
-
getOriginal: getOriginalPosition,
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
this.hasHandles = element.querySelector(SELECTOR_HANDLE) != null;
|
|
57
|
-
|
|
58
|
-
this.inset = element.style.inset;
|
|
59
|
-
this.position = element.style.position;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
override destroy(): void {
|
|
63
|
-
super.destroy();
|
|
64
|
-
|
|
65
|
-
MOVED.delete(this);
|
|
66
|
-
|
|
67
|
-
this.element.style.inset = this.inset;
|
|
68
|
-
this.element.style.position = this.position;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
// #endregion
|
|
73
|
-
|
|
74
|
-
// #region Functions
|
|
75
|
-
|
|
76
|
-
function afterDirection(draggable: OuiDraggable): void {
|
|
77
|
-
const container = draggable.container?.getBoundingClientRect();
|
|
78
|
-
|
|
79
|
-
if (container != null) {
|
|
80
|
-
setOffset(draggable as OuiMovable, container);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
function destroyContainer(_: OuiDraggable, container: HTMLElement, empty: boolean): void {
|
|
85
|
-
if (empty) {
|
|
86
|
-
resizer.unobserve(container);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
function getOffsetPosition(
|
|
91
|
-
state: DraggableState,
|
|
92
|
-
_: OuiDraggable,
|
|
93
|
-
__: HTMLElement,
|
|
94
|
-
position: EventPosition,
|
|
95
|
-
): EventPosition {
|
|
96
|
-
return {
|
|
97
|
-
x: position.x - (state.element?.rectangle.left ?? 0),
|
|
98
|
-
y: position.y - (state.element?.rectangle.top ?? 0),
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function getOriginalPosition(state: DraggableState): EventPosition {
|
|
103
|
-
return {
|
|
104
|
-
x: state.element?.rectangle.left ?? 0,
|
|
105
|
-
y: state.element?.rectangle.top ?? 0,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function initializeContainer(draggable: OuiDraggable): void {
|
|
110
|
-
resizer.observe(draggable.container!);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function onBegin(): void {}
|
|
114
|
-
|
|
115
|
-
function onCancel(state: DraggableState, draggable: OuiDraggable): void {
|
|
116
|
-
const movable = draggable as OuiMovable;
|
|
117
|
-
|
|
118
|
-
const {element, inset, moved, position} = movable;
|
|
119
|
-
const {x, y} = state.original ?? {x: 0, y: 0};
|
|
120
|
-
|
|
121
|
-
if (moved) {
|
|
122
|
-
element.style.inset = `${y}px auto auto ${x}px`;
|
|
123
|
-
} else {
|
|
124
|
-
element.style.position = position;
|
|
125
|
-
element.style.inset = inset;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
function onEnd(
|
|
130
|
-
event: MouseEvent | TouchEvent,
|
|
131
|
-
state: DraggableState,
|
|
132
|
-
draggable: OuiDraggable,
|
|
133
|
-
reset: () => void,
|
|
134
|
-
): void {
|
|
135
|
-
const movable = draggable as OuiMovable;
|
|
136
|
-
|
|
137
|
-
if (!movable.moved) {
|
|
138
|
-
movable.moved = true;
|
|
139
|
-
|
|
140
|
-
if (movable.container != null) {
|
|
141
|
-
MOVED.add(movable);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
const container = movable.container?.getBoundingClientRect();
|
|
146
|
-
|
|
147
|
-
if (container != null) {
|
|
148
|
-
setOffset(movable, container);
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
const end = new CustomEvent(EVENT_END, {
|
|
152
|
-
detail: {
|
|
153
|
-
from: {...state.original},
|
|
154
|
-
to: getPosition(event),
|
|
155
|
-
},
|
|
156
|
-
cancelable: true,
|
|
157
|
-
});
|
|
158
|
-
|
|
159
|
-
movable.element.dispatchEvent(end);
|
|
160
|
-
|
|
161
|
-
setTimeout(() => {
|
|
162
|
-
if (end.defaultPrevented) {
|
|
163
|
-
onCancel(state, draggable);
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
reset();
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
function onMove(
|
|
171
|
-
_: MouseEvent | TouchEvent,
|
|
172
|
-
state: DraggableState,
|
|
173
|
-
__: OuiDraggable,
|
|
174
|
-
position: DragMovePosition,
|
|
175
|
-
): PlainObject | undefined {
|
|
176
|
-
return {
|
|
177
|
-
from: {...state.original},
|
|
178
|
-
to: {...position.calculated},
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
function onResize(entries: ResizeObserverEntry[]): void {
|
|
183
|
-
const {length} = entries;
|
|
184
|
-
|
|
185
|
-
for (let index = 0; index < length; index += 1) {
|
|
186
|
-
const entry = entries[index];
|
|
187
|
-
const set = CONTAINERS.get(entry.target as HTMLElement);
|
|
188
|
-
|
|
189
|
-
if (set == null) {
|
|
190
|
-
continue;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
for (const movable of set) {
|
|
194
|
-
reposition(movable);
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
function onScroll(): void {
|
|
200
|
-
for (const moved of MOVED) {
|
|
201
|
-
reposition(moved);
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
function reposition(movable: OuiMovable): void {
|
|
206
|
-
if (!movable.moved || movable.container == null) {
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const container = movable.container.getBoundingClientRect();
|
|
211
|
-
|
|
212
|
-
const x = container.left + (movable.offset?.x ?? 0);
|
|
213
|
-
const y = container.top + (movable.offset?.y ?? 0);
|
|
214
|
-
|
|
215
|
-
movable.element.style.inset = `${y}px auto auto ${x}px`;
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
function setOffset(movable: OuiMovable, container: DOMRect): void {
|
|
219
|
-
movable.offset = {};
|
|
220
|
-
|
|
221
|
-
const element = movable.element.getBoundingClientRect();
|
|
222
|
-
|
|
223
|
-
movable.offset.y = element.top - container.top;
|
|
224
|
-
movable.offset.x = element.left - container.left;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
// #endregion
|
|
228
|
-
|
|
229
|
-
// #region Variables
|
|
230
|
-
|
|
231
|
-
const ATTRIBUTE = 'oui-movable';
|
|
232
|
-
|
|
233
|
-
const ATTRIBUTE_CONTAINER = `${ATTRIBUTE}-container`;
|
|
234
|
-
|
|
235
|
-
const ATTRIBUTE_DIRECTION = `${ATTRIBUTE}-direction`;
|
|
236
|
-
|
|
237
|
-
const CONTAINERS = new Map<HTMLElement, Set<OuiMovable>>();
|
|
238
|
-
|
|
239
|
-
const EVENT_END = 'move:end';
|
|
240
|
-
|
|
241
|
-
const MOVED = new Set<OuiMovable>();
|
|
242
|
-
|
|
243
|
-
const SELECTOR_HANDLE = `[${ATTRIBUTE}-handle]`;
|
|
244
|
-
|
|
245
|
-
const bound: DraggableBound = {
|
|
246
|
-
constructor: OuiMovable,
|
|
247
|
-
property: 'movable',
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
const resizer = new ResizeObserver(onResize);
|
|
251
|
-
|
|
252
|
-
// #endregion
|
|
253
|
-
|
|
254
|
-
// #region Initialization
|
|
255
|
-
|
|
256
|
-
attributable(ATTRIBUTE, addDraggable.bind(bound), removeDraggable.bind(bound));
|
|
257
|
-
|
|
258
|
-
on(document, 'scroll', onScroll);
|
|
259
|
-
|
|
260
|
-
// #endregion
|