@oscarpalmer/oui 0.26.1 → 0.27.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 (64) hide show
  1. package/dist/css/floatable.css +0 -2
  2. package/dist/css/message.css +1 -0
  3. package/dist/css/reset.css +1 -0
  4. package/dist/js/dialog.d.mts +2 -0
  5. package/dist/js/dialog.mjs +16 -1
  6. package/dist/js/draggable-zszaW1qS.d.mts +155 -0
  7. package/dist/js/floatable/floatable.embedded.d.mts +2 -0
  8. package/dist/js/floatable/{embedded.mjs → floatable.embedded.mjs} +16 -11
  9. package/dist/js/floatable/floatable.standalone.d.mts +2 -0
  10. package/dist/js/floatable/floatable.standalone.mjs +2 -0
  11. package/dist/js/{embedded-CSOh5njI.d.mts → floatable.embedded-YxGwzgbE.d.mts} +5 -2
  12. package/dist/js/focus-trap/focus-trap.embedded.d.mts +2 -0
  13. package/dist/js/focus-trap/{embedded.mjs → focus-trap.embedded.mjs} +17 -15
  14. package/dist/js/focus-trap/focus-trap.standalone.d.mts +2 -0
  15. package/dist/js/focus-trap/focus-trap.standalone.mjs +2 -0
  16. package/dist/js/{embedded-CHK82Uh5.d.mts → focus-trap.embedded-DR8NpZfr.d.mts} +18 -18
  17. package/dist/js/index.d.mts +4 -3
  18. package/dist/js/index.mjs +8 -7
  19. package/dist/js/internal/draggable.d.mts +2 -2
  20. package/dist/js/internal/draggable.mjs +146 -94
  21. package/dist/js/movable/movable.embedded.d.mts +2 -0
  22. package/dist/js/movable/movable.embedded.mjs +184 -0
  23. package/dist/js/movable/movable.standalone.d.mts +2 -0
  24. package/dist/js/movable/movable.standalone.mjs +2 -0
  25. package/dist/js/popover.d.mts +2 -2
  26. package/dist/js/popover.mjs +4 -3
  27. package/dist/js/sortable/sortable.embedded.d.mts +2 -0
  28. package/dist/js/{sortable.mjs → sortable/sortable.embedded.mjs} +88 -63
  29. package/dist/js/sortable/sortable.standalone.d.mts +2 -0
  30. package/dist/js/sortable/sortable.standalone.mjs +2 -0
  31. package/dist/js/splitter.mjs +5 -5
  32. package/dist/js/toolbar.mjs +6 -6
  33. package/dist/js/tooltip.d.mts +2 -2
  34. package/dist/js/tooltip.mjs +36 -33
  35. package/package.json +11 -11
  36. package/src/css/floatable.scss +0 -2
  37. package/src/css/message.scss +1 -0
  38. package/src/css/reset.scss +1 -0
  39. package/src/js/dialog.ts +31 -1
  40. package/src/js/floatable/{embedded.ts → floatable.embedded.ts} +18 -10
  41. package/src/js/floatable/floatable.standalone.ts +6 -0
  42. package/src/js/focus-trap/{embedded.ts → focus-trap.embedded.ts} +20 -17
  43. package/src/js/focus-trap/focus-trap.standalone.ts +1 -0
  44. package/src/js/index.ts +4 -4
  45. package/src/js/internal/draggable.ts +309 -168
  46. package/src/js/movable/movable.embedded.ts +328 -0
  47. package/src/js/movable/movable.standalone.ts +2 -0
  48. package/src/js/popover.ts +3 -2
  49. package/src/js/{sortable.ts → sortable/sortable.embedded.ts} +170 -103
  50. package/src/js/sortable/sortable.standalone.ts +2 -0
  51. package/src/js/tooltip.ts +49 -43
  52. package/dist/js/floatable/embedded.d.mts +0 -2
  53. package/dist/js/floatable/standalone.d.mts +0 -2
  54. package/dist/js/floatable/standalone.mjs +0 -2
  55. package/dist/js/focus-trap/embedded.d.mts +0 -2
  56. package/dist/js/focus-trap/standalone.d.mts +0 -2
  57. package/dist/js/focus-trap/standalone.mjs +0 -6
  58. package/dist/js/movable-dNqBctx3.d.mts +0 -101
  59. package/dist/js/movable.d.mts +0 -2
  60. package/dist/js/movable.mjs +0 -152
  61. package/dist/js/sortable.d.mts +0 -2
  62. package/src/js/floatable/standalone.ts +0 -1
  63. package/src/js/focus-trap/standalone.ts +0 -6
  64. 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