@oscarpalmer/oui 0.38.0 → 0.40.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 +1 -1
- package/dist/css/badge.css +11 -8
- package/dist/css/button.css +106 -14
- package/dist/css/color-picker.css +555 -73
- package/dist/css/color.css +86 -86
- package/dist/css/combobox.css +98 -4
- package/dist/css/content.css +7 -6
- package/dist/css/floatable.css +1 -3
- package/dist/css/form.css +99 -6
- package/dist/css/icon.css +99 -0
- package/dist/css/listbox.css +3 -0
- package/dist/css/message.css +4 -3
- package/dist/css/mixins/button.mixins.css +1 -0
- package/dist/css/reset.css +1 -1
- package/dist/css/tabs.css +95 -3
- package/dist/css/typography.css +90 -0
- package/dist/js/color-picker/color-picker.constants.d.mts +2 -0
- package/dist/js/color-picker/color-picker.constants.mjs +60 -0
- package/dist/js/color-picker/color-picker.dom.d.mts +8 -0
- package/dist/js/color-picker/color-picker.dom.mjs +191 -0
- package/dist/js/color-picker/color-picker.event.d.mts +9 -0
- package/dist/js/color-picker/color-picker.event.mjs +2 -0
- package/dist/js/color-picker/color-picker.form.d.mts +5 -0
- package/dist/js/color-picker/color-picker.form.mjs +27 -0
- package/dist/js/color-picker/color-picker.misc.d.mts +2 -0
- package/dist/js/color-picker/color-picker.misc.mjs +2 -0
- package/dist/js/color-picker/color-picker.model.d.mts +2 -0
- package/dist/js/color-picker/color-picker.model.mjs +24 -0
- package/dist/js/color-picker/color-picker.output.d.mts +8 -0
- package/dist/js/color-picker/color-picker.output.mjs +235 -0
- package/dist/js/color-picker/color-picker.state.d.mts +8 -0
- package/dist/js/color-picker/color-picker.state.mjs +2 -0
- package/dist/js/{color-picker.d.mts → color-picker/index.d.mts} +10 -43
- package/dist/js/color-picker/index.mjs +305 -0
- package/dist/js/color-picker.constants-D1mxw_Le.d.mts +179 -0
- package/dist/js/color-picker.event-Cksj5TvS.mjs +500 -0
- package/dist/js/color-picker.misc-CtsXGrOe.d.mts +27 -0
- package/dist/js/combobox/combobox.constants.d.mts +2 -0
- package/dist/js/combobox/{constants.combobox.mjs → combobox.constants.mjs} +21 -21
- package/dist/js/combobox/combobox.dom.d.mts +26 -0
- package/dist/js/combobox/{dom.combobox.mjs → combobox.dom.mjs} +44 -37
- package/dist/js/combobox/combobox.event.d.mts +22 -0
- package/dist/js/combobox/{event.combobox.mjs → combobox.event.mjs} +1 -1
- package/dist/js/combobox/combobox.misc.d.mts +2 -0
- package/dist/js/combobox/{misc.combobox.mjs → combobox.misc.mjs} +1 -1
- package/dist/js/combobox/combobox.model.d.mts +2 -0
- package/dist/js/combobox/combobox.state.d.mts +10 -0
- package/dist/js/combobox/combobox.state.mjs +2 -0
- package/dist/js/combobox/index.d.mts +163 -2
- package/dist/js/combobox/index.mjs +53 -52
- package/dist/js/combobox.constants-DZVkMP5g.d.mts +19 -0
- package/dist/js/combobox.misc-C1tPZZDi.d.mts +22 -0
- package/dist/js/{combobox/models.combobox.d.mts → combobox.model-oDV06XCN.d.mts} +6 -6
- package/dist/js/{state.combobox-Qm3FWzYW.mjs → combobox.state-BfJ3Hxg8.mjs} +96 -82
- package/dist/js/constants.listbox-C5Ap6Ag_.d.mts +9 -0
- package/dist/js/dialog/dialog.model.d.mts +2 -0
- package/dist/js/dialog/dialog.model.mjs +11 -0
- package/dist/js/dialog/index.d.mts +12 -0
- package/dist/js/dialog/index.mjs +123 -0
- package/dist/js/dialog.model-DX2mndMh.d.mts +45 -0
- package/dist/js/floatable/floatable.embedded.d.mts +2 -2
- package/dist/js/floatable/floatable.embedded.mjs +64 -92
- package/dist/js/floatable/floatable.model.d.mts +2 -0
- package/dist/js/floatable/floatable.model.mjs +23 -0
- package/dist/js/floatable/floatable.standalone.d.mts +2 -1
- package/dist/js/floatable.embedded-MeTyXjFn.d.mts +17 -0
- package/dist/js/floatable.model-DXsQgoU7.d.mts +62 -0
- package/dist/js/focus-trap/focus-trap.embedded.d.mts +2 -2
- package/dist/js/focus-trap/focus-trap.embedded.mjs +112 -134
- package/dist/js/focus-trap/focus-trap.model.d.mts +2 -0
- package/dist/js/focus-trap/focus-trap.model.mjs +15 -0
- package/dist/js/focus-trap/focus-trap.standalone.d.mts +2 -1
- package/dist/js/focus-trap.embedded-DIU05m1z.d.mts +13 -0
- package/dist/js/{focus-trap.embedded-DR8NpZfr.d.mts → focus-trap.model-BeX6UYlw.d.mts} +16 -18
- package/dist/js/index.d.mts +26 -14
- package/dist/js/index.mjs +18 -15
- package/dist/js/internal/attributable.d.mts +2 -3
- package/dist/js/internal/attributable.mjs +3 -2
- package/dist/js/internal/draggable/draggable.model.d.mts +2 -0
- package/dist/js/internal/draggable/draggable.model.mjs +37 -0
- package/dist/js/internal/draggable/index.d.mts +13 -0
- package/dist/js/internal/{draggable.mjs → draggable/index.mjs} +83 -114
- package/dist/js/internal/listbox/listbox.constants.d.mts +7 -10
- package/dist/js/internal/listbox/listbox.constants.mjs +15 -16
- package/dist/js/internal/listbox/listbox.data.d.mts +9 -10
- package/dist/js/internal/listbox/listbox.data.mjs +1 -1
- package/dist/js/internal/listbox/listbox.dom.d.mts +19 -20
- package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
- package/dist/js/internal/listbox/listbox.event.d.mts +3 -4
- package/dist/js/internal/listbox/listbox.event.mjs +23 -20
- package/dist/js/internal/listbox/listbox.form.d.mts +4 -5
- package/dist/js/internal/listbox/listbox.form.mjs +15 -12
- package/dist/js/internal/listbox/listbox.misc.d.mts +10 -11
- package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
- package/dist/js/internal/listbox/listbox.model.d.mts +2 -2
- package/dist/js/internal/listbox/listbox.state.d.mts +5 -6
- package/dist/js/internal/listbox/listbox.state.mjs +19 -20
- package/dist/js/internal/misc.d.mts +5 -4
- package/dist/js/internal/misc.mjs +7 -1
- package/dist/js/internal/navigable/index.d.mts +6 -0
- package/dist/js/internal/navigable/index.mjs +125 -0
- package/dist/js/internal/navigable/navigable.model.d.mts +2 -0
- package/dist/js/internal/navigable/navigable.model.mjs +18 -0
- package/dist/js/l10n/index.d.mts +9 -0
- package/dist/js/{l10n.mjs → l10n/index.mjs} +50 -23
- package/dist/js/l10n/l10n.model.d.mts +2 -0
- package/dist/js/l10n/l10n.model.mjs +9 -0
- package/dist/js/l10n.model-D6a9frgl.d.mts +26 -0
- package/dist/js/listbox/constants.listbox.d.mts +2 -2
- package/dist/js/listbox/constants.listbox.mjs +10 -14
- package/dist/js/listbox/event.listbox.d.mts +6 -7
- package/dist/js/listbox/event.listbox.mjs +47 -1
- package/dist/js/listbox/index.d.mts +8 -6
- package/dist/js/listbox/index.mjs +47 -49
- package/dist/js/listbox/misc.listbox.d.mts +1 -1
- package/dist/js/listbox/misc.listbox.mjs +1 -1
- package/dist/js/listbox/state.listbox.d.mts +8 -10
- package/dist/js/listbox/state.listbox.mjs +2 -2
- package/dist/js/{listbox.data-C7CRa5Ya.mjs → listbox.data-BQyZGKgr.mjs} +83 -66
- package/dist/js/{listbox.model-CRReGOmu.d.mts → listbox.model-CuBOj4qe.d.mts} +15 -11
- package/dist/js/menu/index.mjs +167 -0
- package/dist/js/menu/menu.model.d.mts +33 -0
- package/dist/js/menu/menu.model.mjs +15 -0
- package/dist/js/{misc.listbox-Cyz2CRDy.mjs → misc.listbox-CjfBUbHD.mjs} +27 -69
- package/dist/js/{misc.listbox-gnoJhrTr.d.mts → misc.listbox-CtoGvXQo.d.mts} +2 -2
- package/dist/js/movable/movable.embedded.d.mts +2 -2
- package/dist/js/movable/movable.embedded.mjs +60 -72
- package/dist/js/movable/movable.model.d.mts +2 -0
- package/dist/js/movable/movable.model.mjs +12 -0
- package/dist/js/movable/movable.standalone.d.mts +2 -1
- package/dist/js/movable.embedded-DoyXLegc.d.mts +11 -0
- package/dist/js/movable.model-BHaK_mKw.d.mts +186 -0
- package/dist/js/navigable.model-BPOM8DZk.d.mts +44 -0
- package/dist/js/popover/index.d.mts +12 -0
- package/dist/js/{popover.mjs → popover/index.mjs} +40 -50
- package/dist/js/popover/popover.model.d.mts +2 -0
- package/dist/js/popover/popover.model.mjs +12 -0
- package/dist/js/popover.model-ubKNG612.d.mts +38 -0
- package/dist/js/resizable/resizable.embedded.d.mts +2 -2
- package/dist/js/resizable/resizable.embedded.mjs +44 -59
- package/dist/js/resizable/resizable.model.d.mts +2 -0
- package/dist/js/resizable/resizable.model.mjs +21 -0
- package/dist/js/resizable/resizable.standalone.d.mts +2 -1
- package/dist/js/resizable.embedded-Bf1qBUdt.d.mts +11 -0
- package/dist/js/resizable.model-BwzJcTVJ.d.mts +46 -0
- package/dist/js/sortable/sortable.embedded.d.mts +2 -2
- package/dist/js/sortable/sortable.embedded.mjs +69 -82
- package/dist/js/sortable/sortable.model.d.mts +2 -0
- package/dist/js/sortable/sortable.model.mjs +24 -0
- package/dist/js/sortable/sortable.standalone.d.mts +2 -1
- package/dist/js/sortable.embedded-DzBKAwSG.d.mts +11 -0
- package/dist/js/{splitter.d.mts → splitter/index.d.mts} +8 -7
- package/dist/js/splitter/index.mjs +284 -0
- package/dist/js/splitter/splitter.model.d.mts +2 -0
- package/dist/js/splitter/splitter.model.mjs +37 -0
- package/dist/js/splitter.model-DOLNjLVS.d.mts +57 -0
- package/dist/js/{tabs.d.mts → tabs/index.d.mts} +7 -8
- package/dist/js/{tabs.mjs → tabs/index.mjs} +58 -58
- package/dist/js/tabs/tabs.model.d.mts +2 -0
- package/dist/js/tabs/tabs.model.mjs +18 -0
- package/dist/js/tabs.model-DRBX_JtI.d.mts +40 -0
- package/dist/js/toolbar/index.mjs +27 -0
- package/dist/js/toolbar/toolbar.model.d.mts +11 -0
- package/dist/js/toolbar/toolbar.model.mjs +7 -0
- package/dist/js/tooltip/index.d.mts +19 -0
- package/dist/js/{tooltip.mjs → tooltip/index.mjs} +60 -85
- package/dist/js/tooltip/tooltip.model.d.mts +2 -0
- package/dist/js/tooltip/tooltip.model.mjs +15 -0
- package/dist/js/tooltip.model-DRkY_BsL.d.mts +37 -0
- package/package.json +43 -37
- package/dist/js/color-picker.mjs +0 -924
- package/dist/js/combobox/constants.combobox.d.mts +0 -2
- package/dist/js/combobox/dom.combobox.d.mts +0 -27
- package/dist/js/combobox/event.combobox.d.mts +0 -23
- package/dist/js/combobox/misc.combobox.d.mts +0 -2
- package/dist/js/combobox/state.combobox.d.mts +0 -12
- package/dist/js/combobox/state.combobox.mjs +0 -2
- package/dist/js/constants.combobox-DmRAMC64.d.mts +0 -26
- package/dist/js/constants.listbox-DRsXUxd3.d.mts +0 -14
- package/dist/js/dialog.d.mts +0 -47
- package/dist/js/dialog.mjs +0 -131
- package/dist/js/draggable-a6w0J1OD.d.mts +0 -154
- package/dist/js/floatable.embedded-Bct4U5Dm.d.mts +0 -69
- package/dist/js/index-DJdFlTLm.d.mts +0 -177
- package/dist/js/internal/draggable.d.mts +0 -2
- package/dist/js/internal/navigable.d.mts +0 -37
- package/dist/js/internal/navigable.mjs +0 -135
- package/dist/js/l10n-Bn-7RcwR.d.mts +0 -20
- package/dist/js/l10n.d.mts +0 -2
- package/dist/js/menu.mjs +0 -172
- package/dist/js/popover.d.mts +0 -38
- package/dist/js/resizable.embedded-3qoR0Bjm.d.mts +0 -34
- package/dist/js/splitter.mjs +0 -322
- package/dist/js/toolbar.mjs +0 -31
- package/dist/js/tooltip.d.mts +0 -45
- package/src/css/a11y.scss +0 -13
- package/src/css/badge.scss +0 -62
- package/src/css/button.scss +0 -50
- package/src/css/color-picker.scss +0 -344
- package/src/css/color.scss +0 -113
- package/src/css/combobox.scss +0 -255
- package/src/css/content.scss +0 -181
- package/src/css/flex.scss +0 -107
- package/src/css/floatable.scss +0 -155
- package/src/css/form.scss +0 -575
- package/src/css/listbox.scss +0 -121
- package/src/css/message.scss +0 -74
- package/src/css/mixins/badge.mixins.scss +0 -53
- package/src/css/mixins/button.mixins.scss +0 -112
- package/src/css/mixins/input.mixins.scss +0 -114
- package/src/css/mixins/message.mixins.scss +0 -41
- package/src/css/mixins/misc.mixins.scss +0 -48
- package/src/css/mixins/shadow.mixins.scss +0 -57
- package/src/css/reset.scss +0 -392
- package/src/css/splitter.scss +0 -89
- package/src/css/table.scss +0 -107
- package/src/css/tabs.scss +0 -74
- package/src/js/color-picker.ts +0 -1653
- package/src/js/combobox/constants.combobox.ts +0 -83
- package/src/js/combobox/dom.combobox.ts +0 -411
- package/src/js/combobox/event.combobox.ts +0 -365
- package/src/js/combobox/index.ts +0 -382
- package/src/js/combobox/misc.combobox.ts +0 -104
- package/src/js/combobox/models.combobox.ts +0 -54
- package/src/js/combobox/state.combobox.ts +0 -246
- package/src/js/dialog.ts +0 -255
- package/src/js/floatable/floatable.embedded.ts +0 -336
- package/src/js/floatable/floatable.standalone.ts +0 -6
- package/src/js/focus-trap/focus-trap.embedded.ts +0 -411
- package/src/js/focus-trap/focus-trap.standalone.ts +0 -1
- package/src/js/index.ts +0 -16
- package/src/js/internal/attributable.ts +0 -73
- package/src/js/internal/draggable.ts +0 -657
- package/src/js/internal/listbox/listbox.constants.ts +0 -25
- package/src/js/internal/listbox/listbox.data.ts +0 -287
- package/src/js/internal/listbox/listbox.dom.ts +0 -446
- package/src/js/internal/listbox/listbox.event.ts +0 -129
- package/src/js/internal/listbox/listbox.form.ts +0 -125
- package/src/js/internal/listbox/listbox.misc.ts +0 -135
- package/src/js/internal/listbox/listbox.model.ts +0 -169
- package/src/js/internal/listbox/listbox.state.ts +0 -82
- package/src/js/internal/misc.ts +0 -27
- package/src/js/internal/navigable.ts +0 -317
- package/src/js/l10n.ts +0 -192
- package/src/js/listbox/constants.listbox.ts +0 -61
- package/src/js/listbox/event.listbox.ts +0 -106
- package/src/js/listbox/index.ts +0 -364
- package/src/js/listbox/misc.listbox.ts +0 -70
- package/src/js/listbox/state.listbox.ts +0 -194
- package/src/js/menu.ts +0 -348
- package/src/js/movable/movable.embedded.ts +0 -318
- package/src/js/movable/movable.standalone.ts +0 -2
- package/src/js/popover.ts +0 -229
- package/src/js/resizable/resizable.embedded.ts +0 -413
- package/src/js/resizable/resizable.standalone.ts +0 -5
- package/src/js/sortable/sortable.embedded.ts +0 -527
- package/src/js/sortable/sortable.standalone.ts +0 -2
- package/src/js/splitter.ts +0 -583
- package/src/js/tabs.ts +0 -441
- package/src/js/toolbar.ts +0 -63
- package/src/js/tooltip.ts +0 -367
- /package/dist/js/combobox/{models.combobox.mjs → combobox.model.mjs} +0 -0
- /package/dist/js/{menu.d.mts → menu/index.d.mts} +0 -0
- /package/dist/js/{toolbar.d.mts → toolbar/index.d.mts} +0 -0
|
@@ -1,657 +0,0 @@
|
|
|
1
|
-
import type {EventPosition, PlainObject} from '@oscarpalmer/atoms/models';
|
|
2
|
-
import {clamp} from '@oscarpalmer/atoms/number';
|
|
3
|
-
import {getAttribute, setAttribute} from '@oscarpalmer/toretto/attribute';
|
|
4
|
-
import {dispatch, getEventPosition, on} from '@oscarpalmer/toretto/event';
|
|
5
|
-
import {findAncestor} from '@oscarpalmer/toretto/find';
|
|
6
|
-
import {isHTMLOrSVGElement} from '@oscarpalmer/toretto/is';
|
|
7
|
-
import {setStyle, setStyles, toggleStyles, type StyleToggler} from '@oscarpalmer/toretto/style';
|
|
8
|
-
import supportsTouch from '@oscarpalmer/toretto/touch';
|
|
9
|
-
import type {OuiMovable} from '../movable/movable.embedded';
|
|
10
|
-
import type {OuiSortable} from '../sortable/sortable.embedded';
|
|
11
|
-
|
|
12
|
-
// #region Types
|
|
13
|
-
|
|
14
|
-
export type CreateOuiDraggableOptions = {
|
|
15
|
-
/**
|
|
16
|
-
* Container to hold the draggable element and restrict its movement within. Can be `body`, `document`, `window`, a _CSS_ selector, or an element. _(If not provided, the draggable element will not have any constraints)_
|
|
17
|
-
*/
|
|
18
|
-
container?: string | HTMLElement;
|
|
19
|
-
/**
|
|
20
|
-
* Direction in which the element can be dragged. _(If not provided, the element can be dragged in any direction)_
|
|
21
|
-
*/
|
|
22
|
-
direction?: OuiDraggableDirection;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
type OuiDraggableDirection = 'horizontal' | 'vertical' | 'x' | 'y';
|
|
26
|
-
|
|
27
|
-
export abstract class OuiDraggable<ExtraState extends PlainObject = PlainObject> {
|
|
28
|
-
#destroyed = false;
|
|
29
|
-
|
|
30
|
-
readonly #state: OuiDraggableState & ExtraState;
|
|
31
|
-
|
|
32
|
-
get element(): HTMLElement {
|
|
33
|
-
return this.#state.element;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
constructor(
|
|
37
|
-
name: keyof OuiDraggableStates,
|
|
38
|
-
event: string,
|
|
39
|
-
attribute: string,
|
|
40
|
-
element: HTMLElement,
|
|
41
|
-
options: OuiDraggableOptions<ExtraState>,
|
|
42
|
-
extras: ExtraState,
|
|
43
|
-
) {
|
|
44
|
-
this.#state = {
|
|
45
|
-
...extras,
|
|
46
|
-
attribute,
|
|
47
|
-
element,
|
|
48
|
-
event,
|
|
49
|
-
name,
|
|
50
|
-
options,
|
|
51
|
-
horizontal: true,
|
|
52
|
-
vertical: true,
|
|
53
|
-
styling: toggleStyles(element, styles),
|
|
54
|
-
} as OuiDraggableState & ExtraState;
|
|
55
|
-
|
|
56
|
-
const item = {
|
|
57
|
-
instance: this,
|
|
58
|
-
state: this.#state,
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
setContainer(item);
|
|
62
|
-
setDirection(item);
|
|
63
|
-
|
|
64
|
-
setAttribute(element, attribute, '');
|
|
65
|
-
|
|
66
|
-
let states = globals.states.get(element);
|
|
67
|
-
|
|
68
|
-
states ??= {};
|
|
69
|
-
|
|
70
|
-
states[this.#state.name] = this.#state;
|
|
71
|
-
|
|
72
|
-
globals.states.set(element, states);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
destroy(): void {
|
|
76
|
-
if (this.#destroyed) {
|
|
77
|
-
return;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
this.#destroyed = true;
|
|
81
|
-
|
|
82
|
-
destroyInstance(this, this.#state);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
type OuiDragBegin<State extends PlainObject = PlainObject> = (
|
|
87
|
-
event: MouseEvent | TouchEvent,
|
|
88
|
-
globals: OuiDraggableGlobals,
|
|
89
|
-
item: OuiDraggableItem<State>,
|
|
90
|
-
element: HTMLElement,
|
|
91
|
-
handle: HTMLElement,
|
|
92
|
-
position: EventPosition,
|
|
93
|
-
) => void;
|
|
94
|
-
|
|
95
|
-
type OuiDragCancel<State extends PlainObject = PlainObject> = (
|
|
96
|
-
globals: OuiDraggableGlobals,
|
|
97
|
-
item: OuiDraggableItem<State>,
|
|
98
|
-
) => void;
|
|
99
|
-
|
|
100
|
-
type OuiDragEnd<State extends PlainObject = PlainObject> = (
|
|
101
|
-
event: MouseEvent | TouchEvent,
|
|
102
|
-
globals: OuiDraggableGlobals,
|
|
103
|
-
item: OuiDraggableItem<State>,
|
|
104
|
-
reset: () => void,
|
|
105
|
-
) => void;
|
|
106
|
-
|
|
107
|
-
type OuiDragMove<State extends PlainObject = PlainObject> = (
|
|
108
|
-
event: MouseEvent | TouchEvent,
|
|
109
|
-
globals: OuiDraggableGlobals,
|
|
110
|
-
item: OuiDraggableItem<State>,
|
|
111
|
-
position: OuiDragMovePosition,
|
|
112
|
-
) => PlainObject | undefined;
|
|
113
|
-
|
|
114
|
-
export type OuiDragMovePosition = {
|
|
115
|
-
calculated: EventPosition;
|
|
116
|
-
original: EventPosition;
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export type OuiDraggableBound<
|
|
120
|
-
Property extends keyof OuiDraggableInstances = keyof OuiDraggableInstances,
|
|
121
|
-
Instance extends OuiDraggableInstances[Property] = OuiDraggableInstances[Property],
|
|
122
|
-
> = {
|
|
123
|
-
constructor: new (element: HTMLElement, options?: CreateOuiDraggableOptions) => Instance;
|
|
124
|
-
property: Property;
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
export type OuiDraggableGlobals = {
|
|
128
|
-
container?: DOMRect;
|
|
129
|
-
element?: OuiDraggableGlobalsElement;
|
|
130
|
-
instances: WeakMap<HTMLElement, OuiDraggableInstances>;
|
|
131
|
-
offset?: EventPosition;
|
|
132
|
-
original?: EventPosition;
|
|
133
|
-
states: WeakMap<HTMLElement, OuiDraggableStates>;
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
type OuiDraggableGlobalsElement = {
|
|
137
|
-
node: HTMLElement;
|
|
138
|
-
rectangle: DOMRect;
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
type OuiDraggableInstances = {
|
|
142
|
-
movable?: OuiMovable;
|
|
143
|
-
sortable?: OuiSortable;
|
|
144
|
-
};
|
|
145
|
-
|
|
146
|
-
export type OuiDraggableItem<ExtraState extends PlainObject = PlainObject> = {
|
|
147
|
-
instance: OuiDraggable<ExtraState>;
|
|
148
|
-
state: OuiDraggableState & ExtraState;
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
type OuiDraggableOptions<ExtraState extends PlainObject = PlainObject> = {
|
|
152
|
-
container: OuiDraggableOptionsContainer<ExtraState>;
|
|
153
|
-
direction: OuiDraggableOptionsDirection<ExtraState>;
|
|
154
|
-
drag: OuiDraggableOptionsDrag<ExtraState>;
|
|
155
|
-
input?: CreateOuiDraggableOptions;
|
|
156
|
-
position: OuiDraggableOptionsPosition<ExtraState>;
|
|
157
|
-
getDragged(): HTMLElement;
|
|
158
|
-
getOrigin(): HTMLElement | undefined;
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
type OuiDraggableOptionsContainer<ExtraState extends PlainObject = PlainObject> = {
|
|
162
|
-
attribute: string;
|
|
163
|
-
map: Map<HTMLElement, Set<OuiDraggable>>;
|
|
164
|
-
onDestroy?: OuiDraggableOptionsContainerOnDestroy<ExtraState>;
|
|
165
|
-
onInitialize?: OuiDraggableOptionsContainerOnInitialize;
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
type OuiDraggableOptionsContainerOnDestroy<ExtraState extends PlainObject = PlainObject> = (
|
|
169
|
-
item: OuiDraggableItem<ExtraState>,
|
|
170
|
-
container: HTMLElement,
|
|
171
|
-
empty: boolean,
|
|
172
|
-
) => void;
|
|
173
|
-
|
|
174
|
-
type OuiDraggableOptionsContainerOnInitialize<ExtraState extends PlainObject = PlainObject> = (
|
|
175
|
-
item: OuiDraggableItem<ExtraState>,
|
|
176
|
-
) => void;
|
|
177
|
-
|
|
178
|
-
type OuiDraggableOptionsDirection<ExtraState extends PlainObject = PlainObject> = {
|
|
179
|
-
attribute: string;
|
|
180
|
-
onAfter?: OuiDraggableOptionsDirectionOnAfter<ExtraState>;
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
type OuiDraggableOptionsDirectionOnAfter<ExtraState extends PlainObject = PlainObject> = (
|
|
184
|
-
item: OuiDraggableItem<ExtraState>,
|
|
185
|
-
) => void;
|
|
186
|
-
|
|
187
|
-
type OuiDraggableOptionsDrag<ExtraState extends PlainObject = PlainObject> = {
|
|
188
|
-
onBegin: OuiDragBegin<ExtraState>;
|
|
189
|
-
onCancel: OuiDragCancel<ExtraState>;
|
|
190
|
-
onEnd: OuiDragEnd<ExtraState>;
|
|
191
|
-
onMove: OuiDragMove<ExtraState>;
|
|
192
|
-
};
|
|
193
|
-
|
|
194
|
-
type OuiDraggableOptionsPosition<ExtraState extends PlainObject = PlainObject> = {
|
|
195
|
-
getOffset: OuiDraggableOptionsPositionGetOffset<ExtraState>;
|
|
196
|
-
getOriginal: OuiDraggableOptionsPositionGetOriginal<ExtraState>;
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
type OuiDraggableOptionsPositionGetOffset<ExtraState extends PlainObject = PlainObject> = (
|
|
200
|
-
globals: OuiDraggableGlobals,
|
|
201
|
-
item: OuiDraggableItem<ExtraState>,
|
|
202
|
-
element: HTMLElement,
|
|
203
|
-
position: EventPosition,
|
|
204
|
-
) => EventPosition;
|
|
205
|
-
|
|
206
|
-
type OuiDraggableOptionsPositionGetOriginal<ExtraState extends PlainObject = PlainObject> = (
|
|
207
|
-
globals: OuiDraggableGlobals,
|
|
208
|
-
item: OuiDraggableItem<ExtraState>,
|
|
209
|
-
position: EventPosition,
|
|
210
|
-
) => EventPosition;
|
|
211
|
-
|
|
212
|
-
export type OuiDraggableState = {
|
|
213
|
-
attribute: string;
|
|
214
|
-
container?: HTMLElement;
|
|
215
|
-
element: HTMLElement;
|
|
216
|
-
hasHandles?: boolean;
|
|
217
|
-
horizontal: boolean;
|
|
218
|
-
name: keyof OuiDraggableStates;
|
|
219
|
-
options: OuiDraggableOptions;
|
|
220
|
-
styling: StyleToggler;
|
|
221
|
-
vertical: boolean;
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
type OuiDraggableStates = {
|
|
225
|
-
movable?: OuiDraggableState;
|
|
226
|
-
sortable?: OuiDraggableState;
|
|
227
|
-
};
|
|
228
|
-
|
|
229
|
-
// #endregion
|
|
230
|
-
|
|
231
|
-
// #region Functions
|
|
232
|
-
|
|
233
|
-
export function addDraggable<
|
|
234
|
-
Property extends keyof OuiDraggableInstances,
|
|
235
|
-
Instance extends OuiDraggableInstances[Property],
|
|
236
|
-
>(
|
|
237
|
-
this: OuiDraggableBound<Property, Instance>,
|
|
238
|
-
element: HTMLElement,
|
|
239
|
-
options?: CreateOuiDraggableOptions,
|
|
240
|
-
): Instance {
|
|
241
|
-
let instances = globals.instances.get(element);
|
|
242
|
-
|
|
243
|
-
if (instances == null) {
|
|
244
|
-
instances = {};
|
|
245
|
-
|
|
246
|
-
globals.instances.set(element, instances);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
instances[this.property] ??= new this.constructor(element, options);
|
|
250
|
-
|
|
251
|
-
return instances[this.property] as Instance;
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
function cancelDrag(item?: OuiDraggableItem): void {
|
|
255
|
-
if (item == null) {
|
|
256
|
-
return;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
item.state.options.drag.onCancel?.(globals, item);
|
|
260
|
-
|
|
261
|
-
dispatch(item.state.element, `oui:${item.state.name}:cancel`, {
|
|
262
|
-
detail: {
|
|
263
|
-
element: item.state.options.getOrigin(),
|
|
264
|
-
},
|
|
265
|
-
});
|
|
266
|
-
|
|
267
|
-
reset();
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
function destroyInstance(instance: OuiDraggable, state: OuiDraggableState): void {
|
|
271
|
-
unsetContainer({
|
|
272
|
-
instance,
|
|
273
|
-
state,
|
|
274
|
-
});
|
|
275
|
-
|
|
276
|
-
state.element.removeAttribute(state.attribute);
|
|
277
|
-
state.styling.remove();
|
|
278
|
-
|
|
279
|
-
state.container = undefined;
|
|
280
|
-
state.element = undefined as never;
|
|
281
|
-
state.options = undefined as never;
|
|
282
|
-
state.styling = undefined as never;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
export function getDraggableStates(element: HTMLElement): OuiDraggableStates | undefined {
|
|
286
|
-
return globals.states.get(element);
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
function getHandle(event: Event, isMovable: boolean): HTMLElement | null {
|
|
290
|
-
return findAncestor(
|
|
291
|
-
event,
|
|
292
|
-
isMovable ? SELECTOR_MOVABLE_HANDLE : SELECTOR_SORTABLE_HANDLE,
|
|
293
|
-
) as HTMLElement;
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
function getNextPosition(item: OuiDraggableItem, position: EventPosition): EventPosition {
|
|
297
|
-
let x = globals.original?.x ?? 0;
|
|
298
|
-
let y = globals.original?.y ?? 0;
|
|
299
|
-
|
|
300
|
-
if (item.state.horizontal) {
|
|
301
|
-
x = position.x - (globals.offset?.x ?? 0);
|
|
302
|
-
|
|
303
|
-
if (globals.container != null && globals.element != null) {
|
|
304
|
-
x = clamp(
|
|
305
|
-
x,
|
|
306
|
-
globals.container.left,
|
|
307
|
-
globals.container.right - globals.element.rectangle.width,
|
|
308
|
-
);
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
|
|
312
|
-
if (item.state.vertical) {
|
|
313
|
-
y = position.y - (globals.offset?.y ?? 0);
|
|
314
|
-
|
|
315
|
-
if (globals.container != null && globals.element != null) {
|
|
316
|
-
y = clamp(
|
|
317
|
-
y,
|
|
318
|
-
globals.container.top,
|
|
319
|
-
globals.container.bottom - globals.element.rectangle.height,
|
|
320
|
-
);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
return {x, y};
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
function onKeydown(event: KeyboardEvent): void {
|
|
328
|
-
if (current != null && event.key === KEY_ESCAPE) {
|
|
329
|
-
cancelDrag(current);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
function onPointerdown(event: MouseEvent | TouchEvent): void {
|
|
334
|
-
if (
|
|
335
|
-
event.altKey ||
|
|
336
|
-
event.ctrlKey ||
|
|
337
|
-
event.metaKey ||
|
|
338
|
-
event.shiftKey ||
|
|
339
|
-
(supportsTouch.value
|
|
340
|
-
? event.type === 'mousedown'
|
|
341
|
-
: event.type === 'touchstart' || (event as MouseEvent).button !== 0)
|
|
342
|
-
) {
|
|
343
|
-
return;
|
|
344
|
-
}
|
|
345
|
-
|
|
346
|
-
const container = findAncestor(event, SELECTOR)! as HTMLElement;
|
|
347
|
-
|
|
348
|
-
const instances = globals.instances.get(container!);
|
|
349
|
-
const states = globals.states.get(container);
|
|
350
|
-
|
|
351
|
-
if (instances == null || states == null) {
|
|
352
|
-
return;
|
|
353
|
-
}
|
|
354
|
-
|
|
355
|
-
const isMovable = container.hasAttribute(ATTRIBUTE_MOVABLE);
|
|
356
|
-
|
|
357
|
-
const item: OuiDraggableItem = {
|
|
358
|
-
instance: (isMovable ? instances.movable : instances.sortable) as OuiDraggable,
|
|
359
|
-
state: (isMovable ? states.movable : states.sortable) as OuiDraggableState,
|
|
360
|
-
};
|
|
361
|
-
|
|
362
|
-
if (item.instance == null || item.state == null) {
|
|
363
|
-
return;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
if (supportsTouch.value) {
|
|
367
|
-
event.preventDefault();
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
let element: HTMLElement | null = container;
|
|
371
|
-
|
|
372
|
-
if (!isMovable) {
|
|
373
|
-
element = findAncestor(event, SELECTOR_SORTABLE_ITEM) as HTMLElement;
|
|
374
|
-
|
|
375
|
-
if (element == null || element.parentElement !== container) {
|
|
376
|
-
return;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
let handle: HTMLElement | null = element;
|
|
381
|
-
|
|
382
|
-
item.state.hasHandles ??= element.querySelector(SELECTOR_SORTABLE_HANDLE) != null;
|
|
383
|
-
|
|
384
|
-
if (item.state.hasHandles) {
|
|
385
|
-
handle = getHandle(event, isMovable);
|
|
386
|
-
}
|
|
387
|
-
|
|
388
|
-
if (handle == null) {
|
|
389
|
-
return;
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
const dragged = item.state.options.getDragged();
|
|
393
|
-
const rectangle = dragged.getBoundingClientRect();
|
|
394
|
-
|
|
395
|
-
const position = getEventPosition(event) ?? {x: 0, y: 0};
|
|
396
|
-
|
|
397
|
-
current = item;
|
|
398
|
-
|
|
399
|
-
globals.container = item.state.container?.getBoundingClientRect();
|
|
400
|
-
|
|
401
|
-
globals.element = {
|
|
402
|
-
rectangle,
|
|
403
|
-
node: dragged,
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
globals.offset = item.state.options.position.getOffset(globals, item, element, position);
|
|
407
|
-
globals.original = item.state.options.position.getOriginal(globals, item, position);
|
|
408
|
-
|
|
409
|
-
if (
|
|
410
|
-
dispatch(item.state.element, `oui:${item.state.name}:begin`, {
|
|
411
|
-
detail: {
|
|
412
|
-
element,
|
|
413
|
-
position: {...globals.original},
|
|
414
|
-
},
|
|
415
|
-
}).defaultPrevented
|
|
416
|
-
) {
|
|
417
|
-
item.state.options.drag.onCancel?.(globals, item);
|
|
418
|
-
|
|
419
|
-
reset();
|
|
420
|
-
|
|
421
|
-
return;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
const next = getNextPosition(item, position);
|
|
425
|
-
|
|
426
|
-
setStyles(dragged, {
|
|
427
|
-
position: 'fixed',
|
|
428
|
-
inset: `${next.y}px auto auto ${next.x}px`,
|
|
429
|
-
transform: 'translate3d(0, 0, 0)',
|
|
430
|
-
});
|
|
431
|
-
|
|
432
|
-
item.state.options.drag.onBegin?.(event, globals, item, element, handle, next);
|
|
433
|
-
|
|
434
|
-
item.state.styling.set();
|
|
435
|
-
styleToggler.set();
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
function onPointermove(event: MouseEvent | TouchEvent): void {
|
|
439
|
-
if (current == null) {
|
|
440
|
-
return;
|
|
441
|
-
}
|
|
442
|
-
|
|
443
|
-
const position = getEventPosition(event);
|
|
444
|
-
|
|
445
|
-
if (position == null) {
|
|
446
|
-
return;
|
|
447
|
-
}
|
|
448
|
-
|
|
449
|
-
const next = getNextPosition(current, position);
|
|
450
|
-
|
|
451
|
-
if (globals.element != null) {
|
|
452
|
-
setStyle(globals.element.node, 'inset', `${next.y}px auto auto ${next.x}px`);
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
const detail = current.state.options.drag.onMove(event, globals, current, {
|
|
456
|
-
calculated: next,
|
|
457
|
-
original: position,
|
|
458
|
-
});
|
|
459
|
-
|
|
460
|
-
if (
|
|
461
|
-
dispatch(current.state.element, `oui:${current.state.name}:move`, {
|
|
462
|
-
detail,
|
|
463
|
-
}).defaultPrevented
|
|
464
|
-
) {
|
|
465
|
-
cancelDrag(current);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
|
|
469
|
-
function onPointerup(event: MouseEvent | TouchEvent): void {
|
|
470
|
-
current?.state.options.drag.onEnd?.(event, globals, current, reset);
|
|
471
|
-
}
|
|
472
|
-
|
|
473
|
-
export function removeDraggable<
|
|
474
|
-
Property extends keyof OuiDraggableInstances,
|
|
475
|
-
Instance extends OuiDraggableInstances[Property],
|
|
476
|
-
>(
|
|
477
|
-
this: {
|
|
478
|
-
constructor: new (element: HTMLElement) => Instance;
|
|
479
|
-
property: Property;
|
|
480
|
-
},
|
|
481
|
-
element: HTMLElement,
|
|
482
|
-
): void {
|
|
483
|
-
const {property} = this;
|
|
484
|
-
|
|
485
|
-
removeInstance(globals.instances, property, element);
|
|
486
|
-
removeInstance(globals.states, property, element);
|
|
487
|
-
}
|
|
488
|
-
|
|
489
|
-
function removeInstance(
|
|
490
|
-
map: WeakMap<HTMLElement, OuiDraggableInstances | OuiDraggableStates>,
|
|
491
|
-
name: keyof OuiDraggableInstances | keyof OuiDraggableStates,
|
|
492
|
-
element: HTMLElement,
|
|
493
|
-
): void {
|
|
494
|
-
const instances = map.get(element);
|
|
495
|
-
|
|
496
|
-
if (instances == null || instances[name] == null) {
|
|
497
|
-
return;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
if (typeof (instances[name] as OuiDraggable).destroy === 'function') {
|
|
501
|
-
(instances[name] as OuiDraggable).destroy();
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
instances[name] = undefined;
|
|
505
|
-
|
|
506
|
-
if (instances[properties[name]] == null) {
|
|
507
|
-
map.delete(element);
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
function reset(): void {
|
|
512
|
-
current?.state.styling.remove();
|
|
513
|
-
styleToggler.remove();
|
|
514
|
-
|
|
515
|
-
current = undefined;
|
|
516
|
-
|
|
517
|
-
globals.container = undefined;
|
|
518
|
-
globals.element = undefined;
|
|
519
|
-
globals.offset = undefined;
|
|
520
|
-
globals.original = undefined;
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
function setContainer(item: OuiDraggableItem): void {
|
|
524
|
-
const {container} = item.state.options.input ?? {};
|
|
525
|
-
|
|
526
|
-
if (isHTMLOrSVGElement(container)) {
|
|
527
|
-
setContainerElement(item, container);
|
|
528
|
-
|
|
529
|
-
return;
|
|
530
|
-
}
|
|
531
|
-
|
|
532
|
-
const selector =
|
|
533
|
-
container ?? getAttribute(item.instance.element, item.state.options.container.attribute);
|
|
534
|
-
|
|
535
|
-
if (typeof selector !== 'string') {
|
|
536
|
-
return;
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
const element = containers.has(selector)
|
|
540
|
-
? item.state.element.ownerDocument.body
|
|
541
|
-
: (document.querySelector(selector) ?? undefined);
|
|
542
|
-
|
|
543
|
-
if (isHTMLOrSVGElement(element)) {
|
|
544
|
-
setContainerElement(item, element);
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
function setContainerElement(item: OuiDraggableItem, element: HTMLElement): void {
|
|
549
|
-
item.state.container = element;
|
|
550
|
-
|
|
551
|
-
const set = item.state.options.container.map.get(element);
|
|
552
|
-
|
|
553
|
-
if (set == null) {
|
|
554
|
-
item.state.options.container.map.set(element, new Set([item.instance]));
|
|
555
|
-
} else {
|
|
556
|
-
set.add(item.instance);
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
item.state.options.container.onInitialize?.(item);
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
function setDirection(item: OuiDraggableItem): void {
|
|
563
|
-
const direction = getAttribute(item.state.element, item.state.options.direction.attribute);
|
|
564
|
-
|
|
565
|
-
if (horizontals.has(direction as OuiDraggableDirection)) {
|
|
566
|
-
item.state.vertical = false;
|
|
567
|
-
} else if (verticals.has(direction as OuiDraggableDirection)) {
|
|
568
|
-
item.state.horizontal = false;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
item.state.options.direction.onAfter?.(item);
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
function unsetContainer(item: OuiDraggableItem): void {
|
|
575
|
-
const {container} = item.state;
|
|
576
|
-
|
|
577
|
-
if (container == null) {
|
|
578
|
-
return;
|
|
579
|
-
}
|
|
580
|
-
|
|
581
|
-
const set = item.state.options.container.map.get(container);
|
|
582
|
-
|
|
583
|
-
let empty = false;
|
|
584
|
-
|
|
585
|
-
if (set != null) {
|
|
586
|
-
set.delete(item.instance);
|
|
587
|
-
|
|
588
|
-
if (set.size === 0) {
|
|
589
|
-
empty = true;
|
|
590
|
-
|
|
591
|
-
item.state.options.container.map.delete(container);
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
|
|
595
|
-
item.state.options.container.onDestroy?.(item, container, empty);
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
// #endregion
|
|
599
|
-
|
|
600
|
-
// #region Variables
|
|
601
|
-
|
|
602
|
-
const ATTRIBUTE_MOVABLE = 'oui-movable';
|
|
603
|
-
|
|
604
|
-
const ATTRIBUTE_SORTABLE = 'oui-sortable';
|
|
605
|
-
|
|
606
|
-
const KEY_ESCAPE = 'Escape';
|
|
607
|
-
|
|
608
|
-
const SELECTOR = `[${ATTRIBUTE_MOVABLE}], [${ATTRIBUTE_SORTABLE}]`;
|
|
609
|
-
|
|
610
|
-
const SELECTOR_MOVABLE_HANDLE = `[${ATTRIBUTE_MOVABLE}-handle]`;
|
|
611
|
-
|
|
612
|
-
const SELECTOR_SORTABLE_HANDLE = `[${ATTRIBUTE_SORTABLE}-handle]`;
|
|
613
|
-
|
|
614
|
-
const SELECTOR_SORTABLE_ITEM = `[${ATTRIBUTE_SORTABLE}] > *`;
|
|
615
|
-
|
|
616
|
-
const containers = new Set<string>(['body', 'document', 'window']);
|
|
617
|
-
|
|
618
|
-
const horizontals = new Set<OuiDraggableDirection>(['horizontal', 'x']);
|
|
619
|
-
|
|
620
|
-
const properties: Record<keyof OuiDraggableInstances, keyof OuiDraggableInstances> = {
|
|
621
|
-
movable: 'sortable',
|
|
622
|
-
sortable: 'movable',
|
|
623
|
-
};
|
|
624
|
-
|
|
625
|
-
const globals: OuiDraggableGlobals = {
|
|
626
|
-
container: undefined,
|
|
627
|
-
element: undefined,
|
|
628
|
-
instances: new WeakMap(),
|
|
629
|
-
offset: undefined,
|
|
630
|
-
original: undefined,
|
|
631
|
-
states: new WeakMap(),
|
|
632
|
-
};
|
|
633
|
-
|
|
634
|
-
const styles = {
|
|
635
|
-
touchAction: 'none',
|
|
636
|
-
userSelect: 'none',
|
|
637
|
-
webkitUserSelect: 'none',
|
|
638
|
-
};
|
|
639
|
-
|
|
640
|
-
const styleToggler = toggleStyles(document.body, styles);
|
|
641
|
-
|
|
642
|
-
const verticals = new Set<OuiDraggableDirection>(['vertical', 'y']);
|
|
643
|
-
|
|
644
|
-
let current: OuiDraggableItem | undefined;
|
|
645
|
-
|
|
646
|
-
// #endregion
|
|
647
|
-
|
|
648
|
-
// #region Initialization
|
|
649
|
-
|
|
650
|
-
on(document, 'keydown', onKeydown);
|
|
651
|
-
on(document, 'mousedown', onPointerdown);
|
|
652
|
-
on(document, 'pointermove', onPointermove);
|
|
653
|
-
on(document, 'pointerup', onPointerup);
|
|
654
|
-
on(document, 'touchcancel', onPointerup);
|
|
655
|
-
on(document, 'touchstart', onPointerdown, {passive: false});
|
|
656
|
-
|
|
657
|
-
// #endregion
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type {OuiListboxType} from './listbox.model';
|
|
2
|
-
|
|
3
|
-
// #region Variables
|
|
4
|
-
|
|
5
|
-
const keysActivation = new Set([' ', 'Backspace', 'Delete', 'Enter']);
|
|
6
|
-
|
|
7
|
-
const keysNavigation = new Set(['ArrowDown', 'ArrowUp', 'PageDown', 'PageUp']);
|
|
8
|
-
|
|
9
|
-
const keysSelection = new Set(['ArrowRight', 'End']);
|
|
10
|
-
|
|
11
|
-
export const LISTBOX_KEYS = {
|
|
12
|
-
activation: keysActivation,
|
|
13
|
-
navigation: keysNavigation,
|
|
14
|
-
selection: keysSelection,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export const LISTBOX_TYPES = new Set<OuiListboxType>(['autocomplete', 'select']);
|
|
18
|
-
|
|
19
|
-
export const listboxScrollOptions: ScrollIntoViewOptions = {
|
|
20
|
-
behavior: 'auto',
|
|
21
|
-
block: 'nearest',
|
|
22
|
-
inline: 'nearest',
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
// #endregion
|