legacy.css 0.1.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/LICENSE +21 -0
- package/README.md +242 -0
- package/dist/legacy.css +1045 -0
- package/dist/legacy.js +1466 -0
- package/dist/legacy.min.css +1 -0
- package/dist/legacy.min.js +1 -0
- package/mcp/server.js +524 -0
- package/package.json +52 -0
- package/src/alerts.css +21 -0
- package/src/badges.css +39 -0
- package/src/base.css +43 -0
- package/src/buttons.css +40 -0
- package/src/dragdrop.css +49 -0
- package/src/features/dragdrop.ts +273 -0
- package/src/features/modal.ts +265 -0
- package/src/features/multiselect.ts +390 -0
- package/src/features/pagination.ts +483 -0
- package/src/features/popover.ts +322 -0
- package/src/features/tabs.ts +199 -0
- package/src/features/theme.ts +59 -0
- package/src/features/toast.ts +216 -0
- package/src/forms.css +57 -0
- package/src/internal.ts +210 -0
- package/src/jquery.ts +141 -0
- package/src/legacy.css +22 -0
- package/src/legacy.ts +31 -0
- package/src/lists.css +21 -0
- package/src/modal.css +46 -0
- package/src/multiselect.css +118 -0
- package/src/navigation.css +18 -0
- package/src/pagination.css +53 -0
- package/src/panels.css +22 -0
- package/src/popover.css +36 -0
- package/src/progress.css +117 -0
- package/src/sidebar.css +62 -0
- package/src/tables.css +31 -0
- package/src/tabs.css +43 -0
- package/src/toast.css +78 -0
- package/src/toolbars.css +33 -0
- package/src/typography.css +48 -0
- package/src/utilities.css +23 -0
- package/src/variables.css +83 -0
package/src/alerts.css
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.alert {
|
|
2
|
+
background: var(--legacy-info-bg);
|
|
3
|
+
border: 1px solid var(--legacy-info-border);
|
|
4
|
+
margin: 0 0 var(--legacy-space-4);
|
|
5
|
+
padding: var(--legacy-space-3);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.alert-success {
|
|
9
|
+
background: var(--legacy-success-bg);
|
|
10
|
+
border-color: var(--legacy-success-border);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.alert-warning {
|
|
14
|
+
background: var(--legacy-warning-bg);
|
|
15
|
+
border-color: var(--legacy-warning-border);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.alert-danger {
|
|
19
|
+
background: var(--legacy-danger-bg);
|
|
20
|
+
border-color: var(--legacy-danger-border);
|
|
21
|
+
}
|
package/src/badges.css
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
.badge {
|
|
2
|
+
background: var(--legacy-info-bg);
|
|
3
|
+
border: 1px solid var(--legacy-info-border);
|
|
4
|
+
border-radius: var(--legacy-radius);
|
|
5
|
+
color: var(--legacy-text);
|
|
6
|
+
display: inline-block;
|
|
7
|
+
font-size: 0.85em;
|
|
8
|
+
font-weight: 700;
|
|
9
|
+
line-height: 1.2;
|
|
10
|
+
padding: 0.12rem 0.35rem;
|
|
11
|
+
vertical-align: baseline;
|
|
12
|
+
white-space: nowrap;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.badge-info {
|
|
16
|
+
background: var(--legacy-info-bg);
|
|
17
|
+
border-color: var(--legacy-info-border);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.badge-success {
|
|
21
|
+
background: var(--legacy-success-bg);
|
|
22
|
+
border-color: var(--legacy-success-border);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.badge-warning {
|
|
26
|
+
background: var(--legacy-warning-bg);
|
|
27
|
+
border-color: var(--legacy-warning-border);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.badge-danger {
|
|
31
|
+
background: var(--legacy-danger-bg);
|
|
32
|
+
border-color: var(--legacy-danger-border);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
.badge-muted {
|
|
36
|
+
background: var(--legacy-surface);
|
|
37
|
+
border-color: var(--legacy-border);
|
|
38
|
+
color: var(--legacy-muted);
|
|
39
|
+
}
|
package/src/base.css
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
* {
|
|
2
|
+
box-sizing: border-box;
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
html {
|
|
6
|
+
background: var(--legacy-page-bg);
|
|
7
|
+
color: var(--legacy-text);
|
|
8
|
+
font-family: var(--legacy-font-sans);
|
|
9
|
+
font-size: var(--legacy-font-size);
|
|
10
|
+
line-height: var(--legacy-line-height);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
body {
|
|
14
|
+
margin: 0 auto;
|
|
15
|
+
max-width: 1120px;
|
|
16
|
+
min-height: 100vh;
|
|
17
|
+
padding: var(--legacy-space-4);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
main {
|
|
21
|
+
background: var(--legacy-surface);
|
|
22
|
+
border: 1px solid var(--legacy-border);
|
|
23
|
+
padding: var(--legacy-space-4);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
hr {
|
|
27
|
+
border: 0;
|
|
28
|
+
border-top: 1px solid var(--legacy-border);
|
|
29
|
+
margin: var(--legacy-space-4) 0;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
img,
|
|
33
|
+
svg,
|
|
34
|
+
video {
|
|
35
|
+
max-width: 100%;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
code,
|
|
39
|
+
kbd,
|
|
40
|
+
pre,
|
|
41
|
+
samp {
|
|
42
|
+
font-family: var(--legacy-font-mono);
|
|
43
|
+
}
|
package/src/buttons.css
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
button,
|
|
2
|
+
input[type="button"],
|
|
3
|
+
input[type="reset"],
|
|
4
|
+
input[type="submit"] {
|
|
5
|
+
background: linear-gradient(
|
|
6
|
+
var(--legacy-button-bg-top),
|
|
7
|
+
var(--legacy-button-bg-bottom)
|
|
8
|
+
);
|
|
9
|
+
border: 1px solid var(--legacy-button-border);
|
|
10
|
+
border-radius: var(--legacy-radius);
|
|
11
|
+
color: var(--legacy-text);
|
|
12
|
+
cursor: pointer;
|
|
13
|
+
display: inline-block;
|
|
14
|
+
font-family: var(--legacy-font-sans);
|
|
15
|
+
font-size: 0.92rem;
|
|
16
|
+
font-weight: 400;
|
|
17
|
+
line-height: 1.2;
|
|
18
|
+
min-height: 1.75rem;
|
|
19
|
+
padding: 0.16rem 0.55rem;
|
|
20
|
+
text-align: center;
|
|
21
|
+
width: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
button:hover,
|
|
25
|
+
input[type="button"]:hover,
|
|
26
|
+
input[type="reset"]:hover,
|
|
27
|
+
input[type="submit"]:hover {
|
|
28
|
+
background: linear-gradient(
|
|
29
|
+
var(--legacy-button-bg-top),
|
|
30
|
+
var(--legacy-button-hover-bottom)
|
|
31
|
+
);
|
|
32
|
+
border-color: var(--legacy-primary);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
button:active,
|
|
36
|
+
input[type="button"]:active,
|
|
37
|
+
input[type="reset"]:active,
|
|
38
|
+
input[type="submit"]:active {
|
|
39
|
+
background: var(--legacy-button-active-bg);
|
|
40
|
+
}
|
package/src/dragdrop.css
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
.dragdrop {
|
|
2
|
+
align-items: stretch;
|
|
3
|
+
display: grid;
|
|
4
|
+
gap: var(--legacy-space-3);
|
|
5
|
+
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
|
|
6
|
+
margin: 0 0 var(--legacy-space-4);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.dragdrop-column {
|
|
10
|
+
background: var(--legacy-surface);
|
|
11
|
+
border: 1px solid var(--legacy-border);
|
|
12
|
+
min-height: 8rem;
|
|
13
|
+
padding: var(--legacy-space-2);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.dragdrop-column > header {
|
|
17
|
+
background: var(--legacy-header-bg);
|
|
18
|
+
border: 1px solid var(--legacy-border);
|
|
19
|
+
color: var(--legacy-primary-dark);
|
|
20
|
+
font-weight: 700;
|
|
21
|
+
margin: 0 0 var(--legacy-space-2);
|
|
22
|
+
padding: var(--legacy-space-2);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.dragdrop-column.is-drag-over {
|
|
26
|
+
background: var(--legacy-info-bg);
|
|
27
|
+
outline: 2px solid var(--legacy-info-border);
|
|
28
|
+
outline-offset: -2px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.dragdrop-item,
|
|
32
|
+
[data-dragdrop-item] {
|
|
33
|
+
background: var(--legacy-surface-raised);
|
|
34
|
+
border: 1px solid var(--legacy-border-dark);
|
|
35
|
+
cursor: move;
|
|
36
|
+
margin: 0 0 var(--legacy-space-2);
|
|
37
|
+
padding: var(--legacy-space-2);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.dragdrop-item:focus,
|
|
41
|
+
[data-dragdrop-item]:focus {
|
|
42
|
+
outline: 2px solid var(--legacy-focus);
|
|
43
|
+
outline-offset: 1px;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
.dragdrop-item.is-dragging,
|
|
47
|
+
[data-dragdrop-item].is-dragging {
|
|
48
|
+
opacity: 0.55;
|
|
49
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { currentTargetElement, eventTargetElement, isElement, isLegacyCollection, listen } from "../internal";
|
|
2
|
+
import type { LegacyDragdropOptions, LegacyDragdropPayload, LegacyDragdropState, LegacyRequiredApi, LegacyTarget } from "../internal";
|
|
3
|
+
const wiredDragdropBoards = new WeakSet<Element>();
|
|
4
|
+
const dragdropOptions = new WeakMap<Element, LegacyDragdropOptions>();
|
|
5
|
+
const dragdropBoardSelector = "[data-dragdrop], .dragdrop";
|
|
6
|
+
const dragdropColumnSelector = "[data-dragdrop-column], .dragdrop-column";
|
|
7
|
+
const dragdropItemSelector = "[data-dragdrop-item], .dragdrop-item";
|
|
8
|
+
let dragdropState: LegacyDragdropState | null = null;
|
|
9
|
+
|
|
10
|
+
export function installDragdrop(legacy: LegacyRequiredApi): void {
|
|
11
|
+
function resolveDragdropBoard(target: LegacyTarget): Element | null {
|
|
12
|
+
if (!target) {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (isLegacyCollection(target)) {
|
|
17
|
+
return resolveDragdropBoard(target[0]);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
if (typeof target === "string") {
|
|
21
|
+
return document.querySelector(target);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (isElement(target)) {
|
|
25
|
+
if (target.matches(dragdropBoardSelector)) {
|
|
26
|
+
return target;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return target.closest(dragdropBoardSelector);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function getDragdropItems(column: Element): Element[] {
|
|
36
|
+
return Array.from(column.querySelectorAll(dragdropItemSelector)).filter(
|
|
37
|
+
(item) => item.closest(dragdropColumnSelector) === column
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function getDragdropColumnId(column: Element): string | null {
|
|
42
|
+
return column.getAttribute("data-column") || column.id || null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function getDragdropIndex(item: Element, column: Element): number {
|
|
46
|
+
return getDragdropItems(column).indexOf(item);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function getDragdropInsertBefore(column: Element, clientY: number): Element | null {
|
|
50
|
+
return getDragdropItems(column)
|
|
51
|
+
.filter((item) => !item.classList.contains("is-dragging"))
|
|
52
|
+
.reduce(
|
|
53
|
+
(closest, item) => {
|
|
54
|
+
const rect = item.getBoundingClientRect();
|
|
55
|
+
const offset = clientY - rect.top - rect.height / 2;
|
|
56
|
+
|
|
57
|
+
if (offset < 0 && offset > closest.offset) {
|
|
58
|
+
return { offset, item };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return closest;
|
|
62
|
+
},
|
|
63
|
+
{ offset: Number.NEGATIVE_INFINITY, item: null as Element | null }
|
|
64
|
+
).item;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function createDragdropPayload(originalEvent: Event, toColumn: Element | null): LegacyDragdropPayload | null {
|
|
68
|
+
/* v8 ignore next -- payload creation is only called after drag state has been established */
|
|
69
|
+
if (!dragdropState) {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* v8 ignore next -- drop handlers pass an explicit destination column */
|
|
74
|
+
const destinationColumn = toColumn || dragdropState.item.closest(dragdropColumnSelector);
|
|
75
|
+
|
|
76
|
+
return {
|
|
77
|
+
board: dragdropState.board,
|
|
78
|
+
item: dragdropState.item,
|
|
79
|
+
fromColumn: dragdropState.fromColumn,
|
|
80
|
+
toColumn: destinationColumn,
|
|
81
|
+
fromColumnId: getDragdropColumnId(dragdropState.fromColumn),
|
|
82
|
+
/* v8 ignore next -- destination is established by validated dragover/drop targets */
|
|
83
|
+
toColumnId: destinationColumn ? getDragdropColumnId(destinationColumn) : null,
|
|
84
|
+
fromIndex: dragdropState.fromIndex,
|
|
85
|
+
/* v8 ignore next -- destination is established by validated dragover/drop targets */
|
|
86
|
+
toIndex: destinationColumn ? getDragdropIndex(dragdropState.item, destinationColumn) : -1,
|
|
87
|
+
originalEvent,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
function callDragdropCallback(
|
|
92
|
+
board: Element,
|
|
93
|
+
name: keyof LegacyDragdropOptions,
|
|
94
|
+
payload: LegacyDragdropPayload | null
|
|
95
|
+
): void {
|
|
96
|
+
/* v8 ignore next -- setup always initializes an options object for wired boards */
|
|
97
|
+
const options = dragdropOptions.get(board) || {};
|
|
98
|
+
const callback = options[name];
|
|
99
|
+
|
|
100
|
+
if (typeof callback === "function") {
|
|
101
|
+
callback.call(board, payload as LegacyDragdropPayload);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function clearDragdropState(): void {
|
|
106
|
+
/* v8 ignore next -- cleanup is shared by active and already-cleared drag paths */
|
|
107
|
+
if (dragdropState) {
|
|
108
|
+
dragdropState.item.classList.remove("is-dragging");
|
|
109
|
+
dragdropState.board
|
|
110
|
+
.querySelectorAll(".is-drag-over")
|
|
111
|
+
.forEach((column) => column.classList.remove("is-drag-over"));
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
dragdropState = null;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function handleDragdropStart(event: DragEvent): void {
|
|
118
|
+
const target = eventTargetElement(event);
|
|
119
|
+
/* v8 ignore next -- browser drag events provide element targets */
|
|
120
|
+
const item = target ? target.closest(dragdropItemSelector) : null;
|
|
121
|
+
const board = resolveDragdropBoard(currentTargetElement(event));
|
|
122
|
+
|
|
123
|
+
if (!item || !board || !board.contains(item)) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const fromColumn = item.closest(dragdropColumnSelector);
|
|
128
|
+
|
|
129
|
+
if (!fromColumn || !board.contains(fromColumn)) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
dragdropState = {
|
|
134
|
+
board,
|
|
135
|
+
item,
|
|
136
|
+
fromColumn,
|
|
137
|
+
fromIndex: getDragdropIndex(item, fromColumn),
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
item.classList.add("is-dragging");
|
|
141
|
+
|
|
142
|
+
/* v8 ignore next -- jsdom tests cover both event payloads and no-payload drag events */
|
|
143
|
+
if (event.dataTransfer) {
|
|
144
|
+
event.dataTransfer.effectAllowed = "move";
|
|
145
|
+
event.dataTransfer.setData("text/plain", item.getAttribute("data-id") || item.id || "");
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
callDragdropCallback(board, "onDrag", createDragdropPayload(event, fromColumn));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
function handleDragdropOver(event: DragEvent): void {
|
|
152
|
+
if (!dragdropState) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
const target = eventTargetElement(event);
|
|
157
|
+
/* v8 ignore next -- browser dragover events provide element targets */
|
|
158
|
+
const column = target ? target.closest(dragdropColumnSelector) : null;
|
|
159
|
+
|
|
160
|
+
if (!column || !dragdropState.board.contains(column)) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
|
|
166
|
+
if (event.dataTransfer) {
|
|
167
|
+
event.dataTransfer.dropEffect = "move";
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
dragdropState.board
|
|
171
|
+
.querySelectorAll(".is-drag-over")
|
|
172
|
+
.forEach((currentColumn) => {
|
|
173
|
+
/* v8 ignore next -- class cleanup depends on prior hover column */
|
|
174
|
+
if (currentColumn !== column) {
|
|
175
|
+
currentColumn.classList.remove("is-drag-over");
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
column.classList.add("is-drag-over");
|
|
180
|
+
|
|
181
|
+
const insertBefore = getDragdropInsertBefore(column, event.clientY);
|
|
182
|
+
column.insertBefore(dragdropState.item, insertBefore);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function handleDragdropDrop(event: DragEvent): void {
|
|
186
|
+
if (!dragdropState) {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const target = eventTargetElement(event);
|
|
191
|
+
/* v8 ignore next -- browser drop events provide element targets */
|
|
192
|
+
const column = target ? target.closest(dragdropColumnSelector) : null;
|
|
193
|
+
|
|
194
|
+
if (!column || !dragdropState.board.contains(column)) {
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
event.preventDefault();
|
|
199
|
+
|
|
200
|
+
const payload = createDragdropPayload(event, column);
|
|
201
|
+
|
|
202
|
+
/* v8 ignore next -- guarded by dragdropState check before payload creation */
|
|
203
|
+
if (!payload) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
const changedColumn = payload.fromColumn !== payload.toColumn;
|
|
208
|
+
const changedIndex = payload.fromIndex !== payload.toIndex;
|
|
209
|
+
|
|
210
|
+
/* v8 ignore next -- no-op same-position drops are intentionally silent */
|
|
211
|
+
if (changedColumn || changedIndex) {
|
|
212
|
+
callDragdropCallback(payload.board, "onDrop", payload);
|
|
213
|
+
|
|
214
|
+
if (changedColumn) {
|
|
215
|
+
callDragdropCallback(payload.board, "onChangeColumn", payload);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
clearDragdropState();
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
function handleDragdropEnd(): void {
|
|
223
|
+
clearDragdropState();
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function setupDragdrop(target: LegacyTarget, options?: LegacyDragdropOptions): Element | null {
|
|
227
|
+
const board = resolveDragdropBoard(target);
|
|
228
|
+
|
|
229
|
+
if (!board) {
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/* v8 ignore next 6 -- option setup supports explicit, merged, and default branches */
|
|
234
|
+
if (options !== undefined) {
|
|
235
|
+
/* v8 ignore next -- option merging tolerates absent prior options and null updates */
|
|
236
|
+
dragdropOptions.set(board, Object.assign({}, dragdropOptions.get(board), options || {}));
|
|
237
|
+
} else if (!dragdropOptions.has(board)) {
|
|
238
|
+
dragdropOptions.set(board, {});
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
board.querySelectorAll(dragdropItemSelector).forEach((item) => {
|
|
242
|
+
if (!item.hasAttribute("draggable")) {
|
|
243
|
+
item.setAttribute("draggable", "true");
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
if (wiredDragdropBoards.has(board)) {
|
|
248
|
+
return board;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
wiredDragdropBoards.add(board);
|
|
252
|
+
listen(board, "dragstart", handleDragdropStart as EventListener);
|
|
253
|
+
listen(board, "dragover", handleDragdropOver as EventListener);
|
|
254
|
+
listen(board, "drop", handleDragdropDrop as EventListener);
|
|
255
|
+
listen(board, "dragend", handleDragdropEnd);
|
|
256
|
+
|
|
257
|
+
return board;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
legacy.dragdrop = {
|
|
261
|
+
setup(target, options) {
|
|
262
|
+
return setupDragdrop(target, options);
|
|
263
|
+
},
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
document.addEventListener("DOMContentLoaded", function () {
|
|
267
|
+
document.querySelectorAll(dragdropBoardSelector).forEach((board) => {
|
|
268
|
+
setupDragdrop(board);
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
}
|