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.
@@ -0,0 +1,216 @@
1
+ import { isElement, isLegacyCollection } from "../internal";
2
+ import type { LegacyRequiredApi, LegacyTarget, LegacyToastInput, LegacyToastOptions, LegacyToastPosition, LegacyToastType } from "../internal";
3
+ const legacyToastPositions: LegacyToastPosition[] = ["top-left", "top-right", "bottom-left", "bottom-right"];
4
+ const toastTimers = new WeakMap<Element, number>();
5
+ function isToastPosition(position: unknown): position is LegacyToastPosition {
6
+ return typeof position === "string" && legacyToastPositions.includes(position as LegacyToastPosition);
7
+ }
8
+
9
+ export function installToast(legacy: LegacyRequiredApi): void {
10
+ function resolveToast(target: LegacyTarget): Element | null {
11
+ if (!target) {
12
+ return null;
13
+ }
14
+
15
+ if (isLegacyCollection(target)) {
16
+ return resolveToast(target[0]);
17
+ }
18
+
19
+ if (typeof target === "string") {
20
+ return document.querySelector(target);
21
+ }
22
+
23
+ if (isElement(target) && target.matches(".toast, [data-toast]")) {
24
+ return target;
25
+ }
26
+
27
+ return null;
28
+ }
29
+
30
+ function normalizeToastPosition(position: unknown): LegacyToastPosition {
31
+ return isToastPosition(position)
32
+ ? position
33
+ : "bottom-right";
34
+ }
35
+
36
+ function getToastRegion(position: unknown): HTMLElement {
37
+ const normalizedPosition = normalizeToastPosition(position);
38
+ let region = document.querySelector<HTMLElement>(
39
+ '[data-toast-region][data-position="' +
40
+ normalizedPosition +
41
+ '"], .toast-region[data-position="' +
42
+ normalizedPosition +
43
+ '"]'
44
+ );
45
+
46
+ if (region) {
47
+ return region;
48
+ }
49
+
50
+ region = document.createElement("div");
51
+ region.className = "toast-region";
52
+ region.dataset.position = normalizedPosition;
53
+ region.dataset.toastRegion = "";
54
+ region.setAttribute("aria-live", "polite");
55
+ region.setAttribute("aria-atomic", "false");
56
+ document.body.append(region);
57
+
58
+ return region;
59
+ }
60
+
61
+ function normalizeToastOptions(message: LegacyToastInput, options?: LegacyToastOptions): LegacyToastOptions {
62
+ if (message && typeof message === "object" && !("nodeType" in message) && !("jquery" in message)) {
63
+ return Object.assign({}, message);
64
+ }
65
+
66
+ return Object.assign({}, options, {
67
+ message: isLegacyCollection(message as LegacyTarget) ? (message as { 0?: Node })[0] : message,
68
+ });
69
+ }
70
+
71
+ function resolveToastContainer(target: LegacyTarget): Element | Document | null {
72
+ /* v8 ignore next -- public toast callers only resolve truthy container targets */
73
+ if (!target) {
74
+ return null;
75
+ }
76
+
77
+ if (isLegacyCollection(target)) {
78
+ return resolveToastContainer(target[0]);
79
+ }
80
+
81
+ if (typeof target === "string") {
82
+ return document.querySelector(target);
83
+ }
84
+
85
+ if (isElement(target)) {
86
+ return target;
87
+ }
88
+
89
+ return null;
90
+ }
91
+
92
+ function setToastContent(toast: HTMLElement, options: LegacyToastOptions): void {
93
+ const body = document.createElement("div");
94
+ body.className = "toast-body";
95
+
96
+ if (options.title) {
97
+ const title = document.createElement("strong");
98
+ title.className = "toast-title";
99
+ title.textContent = options.title;
100
+ body.append(title);
101
+ }
102
+
103
+ if (options.message && typeof options.message === "object" && "nodeType" in options.message) {
104
+ body.append(options.message);
105
+ } else {
106
+ const message = document.createElement("span");
107
+ message.textContent = options.message || "";
108
+ body.append(message);
109
+ }
110
+
111
+ toast.append(body);
112
+ }
113
+
114
+ function closeToastElement(toast: Element | null): Element | null {
115
+ if (!toast) {
116
+ return null;
117
+ }
118
+
119
+ const timer = toastTimers.get(toast);
120
+
121
+ if (timer) {
122
+ window.clearTimeout(timer);
123
+ toastTimers.delete(toast);
124
+ }
125
+
126
+ toast.dispatchEvent(new CustomEvent("toast:close", { bubbles: true }));
127
+ toast.remove();
128
+
129
+ return toast;
130
+ }
131
+
132
+ function showToast(message: LegacyToastInput, options?: LegacyToastOptions): HTMLElement | null {
133
+ const nextOptions = normalizeToastOptions(message, options);
134
+ const type: LegacyToastType = nextOptions.type &&
135
+ ["info", "success", "warning", "danger", "muted"].includes(nextOptions.type)
136
+ ? nextOptions.type
137
+ : "info";
138
+ const region = nextOptions.container
139
+ ? resolveToastContainer(nextOptions.container)
140
+ : getToastRegion(nextOptions.position);
141
+ const toast = document.createElement("section");
142
+ const duration =
143
+ typeof nextOptions.duration === "number" ? nextOptions.duration : 5000;
144
+
145
+ if (!region) {
146
+ return null;
147
+ }
148
+
149
+ toast.className = "toast";
150
+ toast.dataset.toast = "";
151
+ toast.setAttribute("role", type === "danger" ? "alert" : "status");
152
+
153
+ if (type !== "info") {
154
+ toast.classList.add("toast-" + type);
155
+ }
156
+
157
+ setToastContent(toast, nextOptions);
158
+
159
+ if (nextOptions.dismissible !== false) {
160
+ const closeButton = document.createElement("button");
161
+ closeButton.type = "button";
162
+ closeButton.className = "toast-close";
163
+ closeButton.setAttribute(
164
+ "aria-label",
165
+ nextOptions.closeLabel || "Close notification"
166
+ );
167
+ closeButton.textContent = nextOptions.closeText || "Close";
168
+ closeButton.addEventListener("click", function () {
169
+ closeToastElement(toast);
170
+ });
171
+ toast.append(closeButton);
172
+ }
173
+
174
+ region.append(toast);
175
+ toast.dispatchEvent(new CustomEvent("toast:show", { bubbles: true }));
176
+
177
+ if (duration > 0) {
178
+ toastTimers.set(
179
+ toast,
180
+ window.setTimeout(function () {
181
+ closeToastElement(toast);
182
+ }, duration)
183
+ );
184
+ }
185
+
186
+ return toast;
187
+ }
188
+
189
+ function clearToasts(target?: LegacyTarget): Element[] {
190
+ /* v8 ignore next -- public clear covers both document and resolved-container behavior */
191
+ const rootElement = target
192
+ ? resolveToastContainer(target)
193
+ : document;
194
+ const toasts: Element[] = rootElement
195
+ ? Array.from(rootElement.querySelectorAll(".toast, [data-toast]"))
196
+ : [];
197
+
198
+ toasts.forEach(closeToastElement);
199
+
200
+ return toasts;
201
+ }
202
+
203
+ legacy.toast = {
204
+ show(message, options) {
205
+ return showToast(message, options);
206
+ },
207
+ close(target) {
208
+ return closeToastElement(resolveToast(target));
209
+ },
210
+ clear(target) {
211
+ return clearToasts(target);
212
+ },
213
+ };
214
+
215
+
216
+ }
package/src/forms.css ADDED
@@ -0,0 +1,57 @@
1
+ form {
2
+ margin: 0 0 var(--legacy-space-4);
3
+ }
4
+
5
+ fieldset {
6
+ background: var(--legacy-surface-raised);
7
+ border: 1px solid var(--legacy-border);
8
+ margin: 0 0 var(--legacy-space-4);
9
+ padding: var(--legacy-space-3) var(--legacy-space-4) var(--legacy-space-4);
10
+ }
11
+
12
+ legend {
13
+ background: var(--legacy-primary);
14
+ border: 1px solid var(--legacy-primary-dark);
15
+ color: var(--legacy-primary-contrast);
16
+ font-weight: 700;
17
+ padding: var(--legacy-space-1) var(--legacy-space-2);
18
+ }
19
+
20
+ label {
21
+ display: inline-block;
22
+ font-weight: 700;
23
+ margin: var(--legacy-space-2) 0 var(--legacy-space-1);
24
+ }
25
+
26
+ input,
27
+ select,
28
+ textarea {
29
+ background: var(--legacy-control-bg);
30
+ border: 1px solid var(--legacy-border-dark);
31
+ border-radius: var(--legacy-radius);
32
+ color: var(--legacy-text);
33
+ display: block;
34
+ font: inherit;
35
+ max-width: 100%;
36
+ padding: 0.35rem 0.45rem;
37
+ width: 100%;
38
+ }
39
+
40
+ input[type="checkbox"],
41
+ input[type="radio"] {
42
+ display: inline-block;
43
+ margin-right: var(--legacy-space-1);
44
+ width: auto;
45
+ }
46
+
47
+ textarea {
48
+ min-height: 7rem;
49
+ resize: vertical;
50
+ }
51
+
52
+ input:focus,
53
+ select:focus,
54
+ textarea:focus {
55
+ outline: 2px solid var(--legacy-focus);
56
+ outline-offset: 1px;
57
+ }
@@ -0,0 +1,210 @@
1
+ export type LegacyTarget<T extends Element = Element> =
2
+ | string
3
+ | T
4
+ | { 0?: T; jquery?: unknown; nodeType?: number }
5
+ | null
6
+ | undefined;
7
+
8
+ export type LegacyRequiredApi = {
9
+ [Key in keyof LegacyCssApi]-?: LegacyCssApi[Key];
10
+ };
11
+
12
+ export type LegacyFocusableElement = HTMLElement | SVGElement;
13
+ export type LegacyPageToken = number | "ellipsis-start" | "ellipsis-end";
14
+ export type LegacyPaginationAction = "previous" | "next" | "page";
15
+ export type LegacyTheme = "light" | "dark";
16
+
17
+ export interface LegacyDragdropState {
18
+ board: Element;
19
+ item: Element;
20
+ fromColumn: Element;
21
+ fromIndex: number;
22
+ }
23
+
24
+ export interface LegacyMultiselectState {
25
+ label: HTMLSpanElement;
26
+ menu: HTMLDivElement;
27
+ options: HTMLButtonElement[];
28
+ root: HTMLDivElement;
29
+ toggle: HTMLButtonElement;
30
+ }
31
+
32
+ export interface LegacyCloseEvent {
33
+ currentTarget: HTMLDialogElement;
34
+ }
35
+
36
+ export type LegacyToastType = "info" | "success" | "warning" | "danger" | "muted";
37
+ export type LegacyToastPosition = "top-left" | "top-right" | "bottom-left" | "bottom-right";
38
+ export type LegacyPopoverPlacement = "top" | "right" | "bottom" | "left";
39
+
40
+ export interface LegacyToastOptions {
41
+ closeLabel?: string;
42
+ closeText?: string;
43
+ container?: LegacyTarget;
44
+ dismissible?: boolean;
45
+ duration?: number;
46
+ message?: string | Node;
47
+ position?: LegacyToastPosition;
48
+ title?: string;
49
+ type?: LegacyToastType;
50
+ }
51
+
52
+ export type LegacyToastInput = LegacyToastOptions | string | Node | null | undefined;
53
+
54
+ export interface LegacyDragdropPayload {
55
+ board: Element;
56
+ item: Element;
57
+ fromColumn: Element;
58
+ toColumn: Element | null;
59
+ fromColumnId: string | null;
60
+ toColumnId: string | null;
61
+ fromIndex: number;
62
+ toIndex: number;
63
+ originalEvent: Event;
64
+ }
65
+
66
+ export interface LegacyDragdropOptions {
67
+ onChangeColumn?: (this: Element, payload: LegacyDragdropPayload) => void;
68
+ onDrag?: (this: Element, payload: LegacyDragdropPayload | null) => void;
69
+ onDrop?: (this: Element, payload: LegacyDragdropPayload) => void;
70
+ }
71
+
72
+ export interface LegacyPaginationState {
73
+ page: number;
74
+ pageSize: number;
75
+ request: number;
76
+ result?: LegacyPaginationResult;
77
+ }
78
+
79
+ export interface LegacyPaginationResult {
80
+ items: unknown[];
81
+ page: number;
82
+ pageCount: number;
83
+ pageSize: number;
84
+ total: number;
85
+ }
86
+
87
+ export interface LegacyPaginationOptions {
88
+ data?: unknown[];
89
+ load?: (this: Element, state: { page: number; pageSize: number; offset: number }) => Promise<unknown> | unknown;
90
+ maxPages?: number;
91
+ pageSize?: number;
92
+ pageSizes?: number[];
93
+ renderItem?: (
94
+ item: unknown,
95
+ index: number,
96
+ state: LegacyPaginationResult
97
+ ) => Element | DocumentFragment | string | null | undefined;
98
+ target?: Element | null;
99
+ }
100
+
101
+ export interface LegacyPaginationSetupOptions extends Omit<LegacyPaginationOptions, "pageSizes" | "target"> {
102
+ pageSizes?: number[] | string;
103
+ target?: LegacyTarget | Element | null;
104
+ }
105
+
106
+ export interface LegacyPaginationPayload {
107
+ items?: unknown;
108
+ page?: unknown;
109
+ pageCount?: unknown;
110
+ pageSize?: unknown;
111
+ total?: unknown;
112
+ }
113
+
114
+ export interface LegacyCssApi {
115
+ theme?: {
116
+ apply(theme?: string | null): LegacyTheme;
117
+ get(): LegacyTheme;
118
+ set(theme: string): LegacyTheme;
119
+ };
120
+ dragdrop?: {
121
+ setup(target: LegacyTarget, options?: LegacyDragdropOptions): Element | null;
122
+ };
123
+ modal?: {
124
+ close(target: LegacyTarget<HTMLDialogElement>, returnValue?: string): HTMLDialogElement | null;
125
+ open(target: LegacyTarget<HTMLDialogElement>): HTMLDialogElement | null;
126
+ toggle(target: LegacyTarget<HTMLDialogElement>): HTMLDialogElement | null;
127
+ };
128
+ multiselect?: {
129
+ close(target: LegacyTarget): HTMLSelectElement | null;
130
+ open(target: LegacyTarget): HTMLSelectElement | null;
131
+ setup(target: LegacyTarget): HTMLSelectElement | null;
132
+ toggle(target: LegacyTarget): HTMLSelectElement | null;
133
+ };
134
+ pagination?: {
135
+ goTo(target: LegacyTarget, page: number | string): Element | null;
136
+ pageSize(target: LegacyTarget, pageSize: number | string): Element | null;
137
+ refresh(target: LegacyTarget): Element | null;
138
+ setup(target: LegacyTarget, options?: LegacyPaginationSetupOptions): Element | null;
139
+ };
140
+ popover?: {
141
+ close(target: LegacyTarget): Element | null;
142
+ open(target: LegacyTarget): Element | null;
143
+ setup(target: LegacyTarget): Element | null;
144
+ toggle(target: LegacyTarget): Element | null;
145
+ };
146
+ tabs?: {
147
+ select(target: LegacyTarget, index: number | string): Element | null;
148
+ setup(target: LegacyTarget): Element | null;
149
+ };
150
+ toast?: {
151
+ clear(target?: LegacyTarget): Element[];
152
+ close(target: LegacyTarget): Element | null;
153
+ show(message: LegacyToastInput, options?: LegacyToastOptions): HTMLElement | null;
154
+ };
155
+ }
156
+
157
+ export interface LegacyJQueryCollection {
158
+ each(callback: (this: Element) => void): LegacyJQueryCollection;
159
+ dragdrop?: (options?: LegacyDragdropOptions) => LegacyJQueryCollection;
160
+ modal?: (action?: string) => LegacyJQueryCollection;
161
+ multiselect?: (action?: string) => LegacyJQueryCollection;
162
+ pagination?: (action?: string | LegacyPaginationSetupOptions, value?: number | string) => LegacyJQueryCollection;
163
+ popover?: (action?: string) => LegacyJQueryCollection;
164
+ tabs?: (action?: string, index?: number | string) => LegacyJQueryCollection;
165
+ toast?: (action?: string | LegacyToastOptions) => LegacyJQueryCollection;
166
+ }
167
+
168
+ export interface LegacyJQuery {
169
+ (target?: unknown): LegacyJQueryCollection;
170
+ fn?: LegacyJQueryCollection;
171
+ theme?: (theme?: string) => LegacyTheme;
172
+ toast?: (message: LegacyToastInput, options?: LegacyToastOptions) => HTMLElement | null;
173
+ }
174
+
175
+ declare global {
176
+ interface Window {
177
+ LegacyCss?: LegacyCssApi;
178
+ jQuery?: LegacyJQuery;
179
+ }
180
+ }
181
+
182
+ export function isLegacyCollection<T extends Element>(target: LegacyTarget<T>): target is { 0?: T; jquery?: unknown } {
183
+ return typeof target === "object" && target !== null && "jquery" in target;
184
+ }
185
+
186
+ export function isElement(target: unknown): target is Element {
187
+ return (
188
+ typeof target === "object" &&
189
+ target !== null &&
190
+ "nodeType" in target &&
191
+ (target as { nodeType: number }).nodeType === 1
192
+ );
193
+ }
194
+
195
+ export function isSelectElement(target: unknown): target is HTMLSelectElement {
196
+ return isElement(target) && target.nodeName === "SELECT";
197
+ }
198
+
199
+ export function eventTargetElement(event: Event): Element | null {
200
+ return isElement(event.target) ? event.target : null;
201
+ }
202
+
203
+ export function currentTargetElement(event: Event): Element | null {
204
+ /* v8 ignore next -- browser component listeners always dispatch from elements */
205
+ return isElement(event.currentTarget) ? event.currentTarget : null;
206
+ }
207
+
208
+ export function listen(target: EventTarget, type: string, listener: EventListener): void {
209
+ target.addEventListener(type, listener);
210
+ }
package/src/jquery.ts ADDED
@@ -0,0 +1,141 @@
1
+ import type { LegacyJQuery, LegacyRequiredApi } from "./internal";
2
+
3
+ export function installJQueryBridges(root: Window & { jQuery?: LegacyJQuery }, legacy: LegacyRequiredApi): void {
4
+ if (root.jQuery && root.jQuery.fn && !root.jQuery.fn.modal) {
5
+ root.jQuery.fn.modal = function (action) {
6
+ const method = action || "open";
7
+
8
+ return this.each(function () {
9
+ if (method === "close") {
10
+ legacy.modal.close(this);
11
+ return;
12
+ }
13
+
14
+ if (method === "toggle") {
15
+ legacy.modal.toggle(this);
16
+ return;
17
+ }
18
+
19
+ legacy.modal.open(this);
20
+ });
21
+ };
22
+ }
23
+
24
+ if (root.jQuery && !root.jQuery.toast) {
25
+ root.jQuery.toast = function (message, options) {
26
+ return legacy.toast.show(message, options);
27
+ };
28
+ }
29
+
30
+ if (root.jQuery && !root.jQuery.theme) {
31
+ root.jQuery.theme = function (theme) {
32
+ return theme === undefined ? legacy.theme.get() : legacy.theme.set(theme);
33
+ };
34
+ }
35
+
36
+ if (root.jQuery && root.jQuery.fn && !root.jQuery.fn.toast) {
37
+ root.jQuery.fn.toast = function (action) {
38
+ return this.each(function () {
39
+ if (action === "close") {
40
+ legacy.toast.close(this);
41
+ return;
42
+ }
43
+
44
+ /* v8 ignore next -- jQuery bridge accepts object options or default toast options */
45
+ legacy.toast.show(this, typeof action === "object" ? action : undefined);
46
+ });
47
+ };
48
+ }
49
+
50
+ if (root.jQuery && root.jQuery.fn && !root.jQuery.fn.tabs) {
51
+ root.jQuery.fn.tabs = function (action, index) {
52
+ return this.each(function () {
53
+ if (action === "select" && index !== undefined) {
54
+ legacy.tabs.select(this, index);
55
+ return;
56
+ }
57
+
58
+ legacy.tabs.setup(this);
59
+ });
60
+ };
61
+ }
62
+
63
+ if (root.jQuery && root.jQuery.fn && !root.jQuery.fn.popover) {
64
+ root.jQuery.fn.popover = function (action) {
65
+ return this.each(function () {
66
+ if (action === "open") {
67
+ legacy.popover.open(this);
68
+ return;
69
+ }
70
+
71
+ if (action === "close") {
72
+ legacy.popover.close(this);
73
+ return;
74
+ }
75
+
76
+ if (action === "toggle") {
77
+ legacy.popover.toggle(this);
78
+ return;
79
+ }
80
+
81
+ legacy.popover.setup(this);
82
+ });
83
+ };
84
+ }
85
+
86
+ if (root.jQuery && root.jQuery.fn && !root.jQuery.fn.dragdrop) {
87
+ root.jQuery.fn.dragdrop = function (options) {
88
+ return this.each(function () {
89
+ legacy.dragdrop.setup(this, options);
90
+ });
91
+ };
92
+ }
93
+
94
+ if (root.jQuery && root.jQuery.fn && !root.jQuery.fn.multiselect) {
95
+ root.jQuery.fn.multiselect = function (action) {
96
+ return this.each(function () {
97
+ if (action === "open") {
98
+ legacy.multiselect.open(this);
99
+ return;
100
+ }
101
+
102
+ if (action === "close") {
103
+ legacy.multiselect.close(this);
104
+ return;
105
+ }
106
+
107
+ if (action === "toggle") {
108
+ legacy.multiselect.toggle(this);
109
+ return;
110
+ }
111
+
112
+ legacy.multiselect.setup(this);
113
+ });
114
+ };
115
+ }
116
+
117
+ if (root.jQuery && root.jQuery.fn && !root.jQuery.fn.pagination) {
118
+ root.jQuery.fn.pagination = function (action, value) {
119
+ return this.each(function () {
120
+ if (action === "goTo" && value !== undefined) {
121
+ legacy.pagination.goTo(this, value);
122
+ return;
123
+ }
124
+
125
+ if (action === "pageSize" && value !== undefined) {
126
+ legacy.pagination.pageSize(this, value);
127
+ return;
128
+ }
129
+
130
+ if (action === "refresh") {
131
+ legacy.pagination.refresh(this);
132
+ return;
133
+ }
134
+
135
+ /* v8 ignore next -- jQuery bridge accepts object options or default setup options */
136
+ legacy.pagination.setup(this, typeof action === "object" ? action : undefined);
137
+ });
138
+ };
139
+ }
140
+
141
+ }
package/src/legacy.css ADDED
@@ -0,0 +1,22 @@
1
+ @import url("./variables.css");
2
+ @import url("./base.css");
3
+ @import url("./typography.css");
4
+ @import url("./lists.css");
5
+ @import url("./forms.css");
6
+ @import url("./multiselect.css");
7
+ @import url("./buttons.css");
8
+ @import url("./toolbars.css");
9
+ @import url("./tables.css");
10
+ @import url("./navigation.css");
11
+ @import url("./sidebar.css");
12
+ @import url("./pagination.css");
13
+ @import url("./panels.css");
14
+ @import url("./modal.css");
15
+ @import url("./popover.css");
16
+ @import url("./tabs.css");
17
+ @import url("./dragdrop.css");
18
+ @import url("./progress.css");
19
+ @import url("./alerts.css");
20
+ @import url("./toast.css");
21
+ @import url("./badges.css");
22
+ @import url("./utilities.css");
package/src/legacy.ts ADDED
@@ -0,0 +1,31 @@
1
+ import { installDragdrop } from "./features/dragdrop";
2
+ import { installJQueryBridges } from "./jquery";
3
+ import { installModal } from "./features/modal";
4
+ import { installMultiselect } from "./features/multiselect";
5
+ import { installPagination } from "./features/pagination";
6
+ import { installPopover } from "./features/popover";
7
+ import { installTabs } from "./features/tabs";
8
+ import { installTheme } from "./features/theme";
9
+ import { installToast } from "./features/toast";
10
+ import type { LegacyRequiredApi } from "./internal";
11
+
12
+ (function () {
13
+ const root = window;
14
+
15
+ /* v8 ignore next -- alternate startup path is preserving an existing namespace */
16
+ if (!root.LegacyCss) {
17
+ root.LegacyCss = {};
18
+ }
19
+
20
+ const legacy = root.LegacyCss as LegacyRequiredApi;
21
+
22
+ installTheme(legacy);
23
+ installModal(legacy);
24
+ installToast(legacy);
25
+ installPopover(legacy);
26
+ installTabs(legacy);
27
+ installDragdrop(legacy);
28
+ installMultiselect(legacy);
29
+ installPagination(legacy);
30
+ installJQueryBridges(root, legacy);
31
+ })();
package/src/lists.css ADDED
@@ -0,0 +1,21 @@
1
+ ul,
2
+ ol {
3
+ margin: 0 0 var(--legacy-space-4) var(--legacy-space-6);
4
+ padding: 0;
5
+ }
6
+
7
+ li {
8
+ margin-bottom: var(--legacy-space-1);
9
+ }
10
+
11
+ dl {
12
+ margin: 0 0 var(--legacy-space-4);
13
+ }
14
+
15
+ dt {
16
+ font-weight: 700;
17
+ }
18
+
19
+ dd {
20
+ margin: 0 0 var(--legacy-space-2) var(--legacy-space-4);
21
+ }