@spfx-fast/sharepoint-ui 0.4.2 → 0.5.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/QUICKSTART.md +18 -0
- package/README.md +19 -24
- package/components.json +240 -5694
- package/dist/accordion.d.ts +11 -0
- package/dist/accordion.js +4 -0
- package/dist/alert.d.ts +3 -0
- package/dist/alert.js +4 -0
- package/dist/attachment-list.d.ts +15 -0
- package/dist/attachment-list.js +14 -0
- package/dist/avatar-group.d.ts +12 -0
- package/dist/avatar-group.js +7 -0
- package/dist/avatar.d.ts +6 -0
- package/dist/avatar.js +5 -0
- package/dist/badge.d.ts +3 -0
- package/dist/badge.js +4 -0
- package/dist/breadcrumb.d.ts +10 -0
- package/dist/breadcrumb.js +9 -0
- package/dist/button-group.d.ts +6 -0
- package/dist/button-group.js +4 -0
- package/dist/button.d.ts +3 -0
- package/dist/button.js +4 -0
- package/dist/card.d.ts +3 -0
- package/dist/card.js +4 -0
- package/dist/carousel.d.ts +11 -0
- package/dist/carousel.js +6 -0
- package/dist/checkbox.d.ts +3 -0
- package/dist/checkbox.js +4 -0
- package/dist/combobox.d.ts +9 -0
- package/dist/combobox.js +6 -0
- package/dist/command-bar.d.ts +6 -0
- package/dist/command-bar.js +4 -0
- package/dist/copy-button.d.ts +7 -0
- package/dist/copy-button.js +19 -0
- package/dist/data-grid.d.ts +25 -0
- package/dist/data-grid.js +39 -0
- package/dist/date-range-picker.d.ts +12 -0
- package/dist/date-range-picker.js +4 -0
- package/dist/dialog.d.ts +9 -0
- package/dist/dialog.js +21 -0
- package/dist/divider.d.ts +3 -0
- package/dist/divider.js +4 -0
- package/dist/drawer.d.ts +6 -0
- package/dist/drawer.js +5 -0
- package/dist/empty-state.d.ts +7 -0
- package/dist/empty-state.js +5 -0
- package/dist/field.d.ts +15 -0
- package/dist/field.js +11 -0
- package/dist/file-dropzone.d.ts +15 -0
- package/dist/file-dropzone.js +21 -0
- package/dist/filter-bar.d.ts +9 -0
- package/dist/filter-bar.js +9 -0
- package/dist/image.d.ts +5 -0
- package/dist/image.js +4 -0
- package/dist/index.d.ts +68 -76
- package/dist/index.js +60 -66
- package/dist/input.d.ts +3 -0
- package/dist/input.js +4 -0
- package/dist/label.d.ts +3 -0
- package/dist/label.js +4 -0
- package/dist/link.d.ts +3 -0
- package/dist/link.js +9 -0
- package/dist/list-view.d.ts +29 -0
- package/dist/list-view.js +14 -0
- package/dist/list.d.ts +6 -0
- package/dist/list.js +5 -0
- package/dist/lookup-picker.d.ts +12 -0
- package/dist/lookup-picker.js +4 -0
- package/dist/menu.d.ts +6 -0
- package/dist/menu.js +4 -0
- package/dist/nav.d.ts +12 -0
- package/dist/nav.js +4 -0
- package/dist/pagination.d.ts +11 -0
- package/dist/pagination.js +5 -0
- package/dist/person-picker.d.ts +13 -0
- package/dist/person-picker.js +4 -0
- package/dist/persona.d.ts +7 -0
- package/dist/persona.js +5 -0
- package/dist/popover.d.ts +6 -0
- package/dist/popover.js +4 -0
- package/dist/progress-bar.d.ts +5 -0
- package/dist/progress-bar.js +5 -0
- package/dist/radio-group.d.ts +6 -0
- package/dist/radio-group.js +4 -0
- package/dist/radio.d.ts +3 -0
- package/dist/radio.js +4 -0
- package/dist/rating.d.ts +8 -0
- package/dist/rating.js +5 -0
- package/dist/react.d.ts +1 -4583
- package/dist/react.js +1 -6837
- package/dist/select.d.ts +3 -0
- package/dist/select.js +4 -0
- package/dist/sharepoint-field.d.ts +18 -0
- package/dist/sharepoint-field.js +54 -0
- package/dist/skeleton.d.ts +6 -0
- package/dist/skeleton.js +9 -0
- package/dist/spinner.d.ts +5 -0
- package/dist/spinner.js +4 -0
- package/dist/swatch-picker.d.ts +17 -0
- package/dist/swatch-picker.js +11 -0
- package/dist/switch.d.ts +3 -0
- package/dist/switch.js +4 -0
- package/dist/table.d.ts +6 -0
- package/dist/table.js +4 -0
- package/dist/tabs.d.ts +14 -0
- package/dist/tabs.js +30 -0
- package/dist/tag-group.d.ts +6 -0
- package/dist/tag-group.js +4 -0
- package/dist/tag-picker.d.ts +12 -0
- package/dist/tag-picker.js +4 -0
- package/dist/tag.d.ts +7 -0
- package/dist/tag.js +5 -0
- package/dist/text.d.ts +5 -0
- package/dist/text.js +4 -0
- package/dist/textarea.d.ts +3 -0
- package/dist/textarea.js +4 -0
- package/dist/theme.d.ts +15 -167
- package/dist/theme.js +36 -162
- package/dist/toast.d.ts +9 -0
- package/dist/toast.js +12 -0
- package/dist/tree.d.ts +13 -0
- package/dist/tree.js +9 -0
- package/dist/view-card.d.ts +8 -0
- package/dist/view-card.js +4 -0
- package/dist/view-switcher.d.ts +13 -0
- package/dist/view-switcher.js +7 -0
- package/dist/virtual-list.d.ts +11 -0
- package/dist/virtual-list.js +25 -0
- package/measurements.json +365 -0
- package/package.json +19 -42
- package/src/theme.css +125 -0
- package/AGENTS.md +0 -211
- package/dist/appearance.d.ts +0 -6
- package/dist/appearance.js +0 -217
- package/dist/elements/accordion.d.ts +0 -9
- package/dist/elements/accordion.js +0 -338
- package/dist/elements/alert.d.ts +0 -2
- package/dist/elements/alert.js +0 -62
- package/dist/elements/avatar-group-primitives.d.ts +0 -3
- package/dist/elements/avatar-group-primitives.js +0 -189
- package/dist/elements/avatar-group.d.ts +0 -2
- package/dist/elements/avatar-group.js +0 -110
- package/dist/elements/avatar.d.ts +0 -4
- package/dist/elements/avatar.js +0 -251
- package/dist/elements/badge.d.ts +0 -8
- package/dist/elements/badge.js +0 -182
- package/dist/elements/breadcrumb.d.ts +0 -4
- package/dist/elements/breadcrumb.js +0 -233
- package/dist/elements/button-group.d.ts +0 -1
- package/dist/elements/button-group.js +0 -20
- package/dist/elements/button-variants.d.ts +0 -6
- package/dist/elements/button-variants.js +0 -339
- package/dist/elements/button.d.ts +0 -5
- package/dist/elements/button.js +0 -233
- package/dist/elements/card-primitives.d.ts +0 -3
- package/dist/elements/card-primitives.js +0 -83
- package/dist/elements/card.d.ts +0 -5
- package/dist/elements/card.js +0 -213
- package/dist/elements/carousel.d.ts +0 -92
- package/dist/elements/carousel.js +0 -1112
- package/dist/elements/color-picker.d.ts +0 -24
- package/dist/elements/color-picker.js +0 -1004
- package/dist/elements/combobox.d.ts +0 -1
- package/dist/elements/combobox.js +0 -1012
- package/dist/elements/data-grid-model.d.ts +0 -117
- package/dist/elements/data-grid-model.js +0 -294
- package/dist/elements/data-grid.d.ts +0 -29
- package/dist/elements/data-grid.js +0 -1567
- package/dist/elements/date-picker.d.ts +0 -1
- package/dist/elements/date-picker.js +0 -486
- package/dist/elements/dialog.d.ts +0 -23
- package/dist/elements/dialog.js +0 -409
- package/dist/elements/divider.d.ts +0 -2
- package/dist/elements/divider.js +0 -66
- package/dist/elements/drawer.d.ts +0 -3
- package/dist/elements/drawer.js +0 -308
- package/dist/elements/field-composition.d.ts +0 -26
- package/dist/elements/field-composition.js +0 -133
- package/dist/elements/field.d.ts +0 -1
- package/dist/elements/field.js +0 -67
- package/dist/elements/file-upload.d.ts +0 -6
- package/dist/elements/file-upload.js +0 -211
- package/dist/elements/floating-position.d.ts +0 -26
- package/dist/elements/floating-position.js +0 -39
- package/dist/elements/image.d.ts +0 -28
- package/dist/elements/image.js +0 -38
- package/dist/elements/info.d.ts +0 -9
- package/dist/elements/info.js +0 -102
- package/dist/elements/input.d.ts +0 -5
- package/dist/elements/input.js +0 -255
- package/dist/elements/label.d.ts +0 -15
- package/dist/elements/label.js +0 -56
- package/dist/elements/link.d.ts +0 -1
- package/dist/elements/link.js +0 -92
- package/dist/elements/list.d.ts +0 -19
- package/dist/elements/list.js +0 -297
- package/dist/elements/menu.d.ts +0 -33
- package/dist/elements/menu.js +0 -1103
- package/dist/elements/message-bar.d.ts +0 -10
- package/dist/elements/message-bar.js +0 -299
- package/dist/elements/nav.d.ts +0 -32
- package/dist/elements/nav.js +0 -791
- package/dist/elements/overflow.d.ts +0 -9
- package/dist/elements/overflow.js +0 -218
- package/dist/elements/persona.d.ts +0 -3
- package/dist/elements/persona.js +0 -125
- package/dist/elements/popover.d.ts +0 -77
- package/dist/elements/popover.js +0 -840
- package/dist/elements/progress-bar.d.ts +0 -4
- package/dist/elements/progress-bar.js +0 -82
- package/dist/elements/radio-group.d.ts +0 -1
- package/dist/elements/radio-group.js +0 -303
- package/dist/elements/rating-display.d.ts +0 -2
- package/dist/elements/rating-display.js +0 -125
- package/dist/elements/rating.d.ts +0 -2
- package/dist/elements/rating.js +0 -206
- package/dist/elements/rich-text-editor.d.ts +0 -18
- package/dist/elements/rich-text-editor.js +0 -508
- package/dist/elements/search.d.ts +0 -3
- package/dist/elements/search.js +0 -207
- package/dist/elements/select.d.ts +0 -6
- package/dist/elements/select.js +0 -291
- package/dist/elements/shared.d.ts +0 -19
- package/dist/elements/shared.js +0 -396
- package/dist/elements/skeleton.d.ts +0 -6
- package/dist/elements/skeleton.js +0 -91
- package/dist/elements/slider.d.ts +0 -1
- package/dist/elements/slider.js +0 -248
- package/dist/elements/spin-button.d.ts +0 -7
- package/dist/elements/spin-button.js +0 -499
- package/dist/elements/spinner.d.ts +0 -4
- package/dist/elements/spinner.js +0 -124
- package/dist/elements/swatch-picker.d.ts +0 -5
- package/dist/elements/swatch-picker.js +0 -363
- package/dist/elements/table.d.ts +0 -21
- package/dist/elements/table.js +0 -261
- package/dist/elements/tabs.d.ts +0 -1
- package/dist/elements/tabs.js +0 -276
- package/dist/elements/tag-picker.d.ts +0 -29
- package/dist/elements/tag-picker.js +0 -697
- package/dist/elements/tags.d.ts +0 -21
- package/dist/elements/tags.js +0 -421
- package/dist/elements/teaching-popover.d.ts +0 -32
- package/dist/elements/teaching-popover.js +0 -412
- package/dist/elements/text.d.ts +0 -9
- package/dist/elements/text.js +0 -75
- package/dist/elements/textarea.d.ts +0 -1
- package/dist/elements/textarea.js +0 -182
- package/dist/elements/toast.d.ts +0 -25
- package/dist/elements/toast.js +0 -337
- package/dist/elements/toaster.d.ts +0 -6
- package/dist/elements/toaster.js +0 -356
- package/dist/elements/toggle.d.ts +0 -2
- package/dist/elements/toggle.js +0 -246
- package/dist/elements/toolbar.d.ts +0 -12
- package/dist/elements/toolbar.js +0 -381
- package/dist/elements/tooltip.d.ts +0 -76
- package/dist/elements/tooltip.js +0 -510
- package/dist/elements/tree-model.d.ts +0 -19
- package/dist/elements/tree-model.js +0 -34
- package/dist/elements/tree.d.ts +0 -5
- package/dist/elements/tree.js +0 -273
- package/dist/elements/view-card.d.ts +0 -2
- package/dist/elements/view-card.js +0 -78
- package/dist/elements/virtual-list.d.ts +0 -41
- package/dist/elements/virtual-list.js +0 -369
- package/dist/elements.d.ts +0 -72
- package/dist/elements.js +0 -207
- package/dist/virtualizer-hooks.d.ts +0 -80
- package/dist/virtualizer-hooks.js +0 -253
- package/scripts/generate-token-index.mjs +0 -43
- package/scripts/sync-component-catalog-signatures.mjs +0 -55
- package/scripts/validate-component-catalog.mjs +0 -44
- package/skills/sharepoint-ui/SKILL.md +0 -12
- package/skills/sharepoint-ui/references/choosing-components.md +0 -20
- package/skills/sharepoint-ui/references/sharepoint-patterns.md +0 -17
- package/tokens.json +0 -3777
package/dist/elements/shared.js
DELETED
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
export const base = `:host{font:inherit;font-family:var(--spui-font-family,inherit);color:var(--spui-ui-text,var(--spui-semantic-body-text,var(--colorNeutralForeground1,#323130)));color-scheme:var(--spui-color-scheme,light dark)}button,input,textarea{font:inherit;font-family:var(--spui-font-family,inherit)}button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--spui-focus-ring,var(--spui-semantic-focus-border,var(--colorStrokeFocus2,#005a9e)));outline-offset:2px}`;
|
|
2
|
-
const accessibleNameSyncStates = new WeakMap();
|
|
3
|
-
function stopHostAccessibleNameObserver(host, control) {
|
|
4
|
-
const hostStates = accessibleNameSyncStates.get(host);
|
|
5
|
-
const states = control ? [hostStates?.get(control)].filter((state) => Boolean(state)) : [...(hostStates?.values() ?? [])];
|
|
6
|
-
for (const state of states) {
|
|
7
|
-
state.observer?.disconnect();
|
|
8
|
-
state.observer = undefined;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
function stopHostAccessibleDescriptionObserver(host, control) {
|
|
12
|
-
const hostStates = accessibleNameSyncStates.get(host);
|
|
13
|
-
const states = control ? [hostStates?.get(control)].filter((state) => Boolean(state)) : [...(hostStates?.values() ?? [])];
|
|
14
|
-
for (const state of states) {
|
|
15
|
-
state.descriptionObserver?.disconnect();
|
|
16
|
-
state.descriptionObserver = undefined;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export function stopHostAccessibleNameSync(host) {
|
|
20
|
-
stopHostAccessibleNameObserver(host);
|
|
21
|
-
stopHostAccessibleDescriptionObserver(host);
|
|
22
|
-
for (const state of accessibleNameSyncStates.get(host)?.values() ?? []) {
|
|
23
|
-
state.labelledBy = undefined;
|
|
24
|
-
state.describedBy = undefined;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function accessibleNameRoots(context) {
|
|
28
|
-
const isDocument = context.nodeType === Node.DOCUMENT_NODE;
|
|
29
|
-
const root = isDocument ? context : context.getRootNode();
|
|
30
|
-
const document = isDocument ? context : context.ownerDocument;
|
|
31
|
-
return [...new Set([root, document].filter((value) => value != null && (value.nodeType === Node.DOCUMENT_NODE || (value.nodeType === Node.DOCUMENT_FRAGMENT_NODE && "host" in value))))];
|
|
32
|
-
}
|
|
33
|
-
function accessibleNameHidden(element) {
|
|
34
|
-
const view = element.ownerDocument.defaultView;
|
|
35
|
-
let current = element;
|
|
36
|
-
while (current) {
|
|
37
|
-
if (current.hasAttribute("hidden") || current.getAttribute("aria-hidden") === "true")
|
|
38
|
-
return true;
|
|
39
|
-
if (view) {
|
|
40
|
-
const style = view.getComputedStyle(current);
|
|
41
|
-
if (style.display === "none" || style.visibility === "hidden" || style.visibility === "collapse" || style.contentVisibility === "hidden")
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
if (current.parentElement)
|
|
45
|
-
current = current.parentElement;
|
|
46
|
-
else {
|
|
47
|
-
const root = current.getRootNode();
|
|
48
|
-
current = root.nodeType === Node.DOCUMENT_FRAGMENT_NODE && "host" in root ? root.host : null;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
function normalizeAccessibleText(value) {
|
|
54
|
-
return value.replace(/\s+/g, " ").trim();
|
|
55
|
-
}
|
|
56
|
-
function resolveAccessibleText(context, labelledBy) {
|
|
57
|
-
const roots = accessibleNameRoots(context);
|
|
58
|
-
const targets = new Set();
|
|
59
|
-
const contentPath = new Set();
|
|
60
|
-
let unresolved = false;
|
|
61
|
-
const find = (id) => {
|
|
62
|
-
for (const root of roots) {
|
|
63
|
-
const target = root.getElementById(id);
|
|
64
|
-
if (target)
|
|
65
|
-
return target;
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
68
|
-
};
|
|
69
|
-
const resolveIds = (ids, path) => ids.trim().split(/\s+/).filter(Boolean).map(id => {
|
|
70
|
-
const target = find(id);
|
|
71
|
-
if (!target) {
|
|
72
|
-
unresolved = true;
|
|
73
|
-
return "";
|
|
74
|
-
}
|
|
75
|
-
return nameOf(target, path, true);
|
|
76
|
-
}).filter(Boolean).join(" ");
|
|
77
|
-
const nameOf = (element, path, referenced) => {
|
|
78
|
-
targets.add(element);
|
|
79
|
-
const alreadyReferenced = path.has(element);
|
|
80
|
-
const repeatedContent = contentPath.has(element);
|
|
81
|
-
const addedReference = referenced && !alreadyReferenced;
|
|
82
|
-
if (addedReference)
|
|
83
|
-
path.add(element);
|
|
84
|
-
const addedContent = !repeatedContent;
|
|
85
|
-
if (addedContent)
|
|
86
|
-
contentPath.add(element);
|
|
87
|
-
try {
|
|
88
|
-
const hidden = accessibleNameHidden(element);
|
|
89
|
-
if (hidden && !referenced)
|
|
90
|
-
return "";
|
|
91
|
-
const includeHiddenDescendants = hidden && referenced;
|
|
92
|
-
if (referenced && ["none", "presentation"].includes(element.getAttribute("role") ?? ""))
|
|
93
|
-
return "";
|
|
94
|
-
const labelledByValue = element.getAttribute("aria-labelledby");
|
|
95
|
-
if (labelledByValue && !alreadyReferenced) {
|
|
96
|
-
const name = resolveIds(labelledByValue, path);
|
|
97
|
-
if (name)
|
|
98
|
-
return name;
|
|
99
|
-
}
|
|
100
|
-
const embedded = referenced || element.closest("label") !== null;
|
|
101
|
-
if (embedded) {
|
|
102
|
-
const role = element.getAttribute("role");
|
|
103
|
-
if (role === "textbox" && element.isContentEditable)
|
|
104
|
-
return normalizeAccessibleText(element.textContent ?? "");
|
|
105
|
-
if (["slider", "spinbutton", "scrollbar", "progressbar"].includes(role ?? "")) {
|
|
106
|
-
const valueText = element.getAttribute("aria-valuetext");
|
|
107
|
-
if (valueText !== null)
|
|
108
|
-
return normalizeAccessibleText(valueText);
|
|
109
|
-
const valueNow = element.getAttribute("aria-valuenow");
|
|
110
|
-
if (valueNow !== null)
|
|
111
|
-
return normalizeAccessibleText(valueNow);
|
|
112
|
-
}
|
|
113
|
-
if (element.localName === "input") {
|
|
114
|
-
const input = element;
|
|
115
|
-
if (["text", "search", "url", "tel", "email", "password", "number"].includes(input.type))
|
|
116
|
-
return normalizeAccessibleText(input.value);
|
|
117
|
-
if (input.type === "range")
|
|
118
|
-
return normalizeAccessibleText(input.value);
|
|
119
|
-
}
|
|
120
|
-
if (element.localName === "textarea")
|
|
121
|
-
return normalizeAccessibleText(element.value);
|
|
122
|
-
if (element.localName === "select") {
|
|
123
|
-
const selected = [...element.selectedOptions].map(option => normalizeAccessibleText(option.textContent ?? "")).filter(Boolean);
|
|
124
|
-
return selected.join(" ");
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
const ariaLabel = element.getAttribute("aria-label");
|
|
128
|
-
if (ariaLabel?.trim())
|
|
129
|
-
return normalizeAccessibleText(ariaLabel);
|
|
130
|
-
if (element.localName === "img" && element.hasAttribute("alt"))
|
|
131
|
-
return normalizeAccessibleText(element.getAttribute("alt") ?? "");
|
|
132
|
-
if (element.localName === "input") {
|
|
133
|
-
const input = element;
|
|
134
|
-
if (input.type === "image" && element.hasAttribute("alt"))
|
|
135
|
-
return normalizeAccessibleText(element.getAttribute("alt") ?? "");
|
|
136
|
-
if (["button", "submit", "reset"].includes(input.type) && input.value)
|
|
137
|
-
return normalizeAccessibleText(input.value);
|
|
138
|
-
}
|
|
139
|
-
if (element.namespaceURI === "http://www.w3.org/2000/svg" && element.localName === "svg") {
|
|
140
|
-
const title = element.querySelector(":scope > title")?.textContent;
|
|
141
|
-
if (title?.trim())
|
|
142
|
-
return normalizeAccessibleText(title);
|
|
143
|
-
}
|
|
144
|
-
const text = [...element.childNodes].map(node => {
|
|
145
|
-
if (node.nodeType === Node.TEXT_NODE)
|
|
146
|
-
return normalizeAccessibleText(node.textContent ?? "");
|
|
147
|
-
return node.nodeType === Node.ELEMENT_NODE && !repeatedContent ? nameOf(node, path, includeHiddenDescendants) : "";
|
|
148
|
-
}).filter(Boolean).join(" ");
|
|
149
|
-
return normalizeAccessibleText(text || element.getAttribute("title") || "");
|
|
150
|
-
}
|
|
151
|
-
finally {
|
|
152
|
-
if (addedReference)
|
|
153
|
-
path.delete(element);
|
|
154
|
-
if (addedContent)
|
|
155
|
-
contentPath.delete(element);
|
|
156
|
-
}
|
|
157
|
-
};
|
|
158
|
-
return { text: resolveIds(labelledBy, new Set()), targets, unresolved };
|
|
159
|
-
}
|
|
160
|
-
export function observeAccessibleTextFromIdRefs(context, labelledBy, onText) {
|
|
161
|
-
const view = context.ownerDocument.defaultView;
|
|
162
|
-
const Observer = view?.MutationObserver ?? MutationObserver;
|
|
163
|
-
const observer = new Observer(() => update());
|
|
164
|
-
const roots = accessibleNameRoots(context);
|
|
165
|
-
const valueListeners = new Map();
|
|
166
|
-
const removeValueListeners = () => {
|
|
167
|
-
for (const [target, listener] of valueListeners) {
|
|
168
|
-
target.removeEventListener("input", listener);
|
|
169
|
-
target.removeEventListener("change", listener);
|
|
170
|
-
}
|
|
171
|
-
valueListeners.clear();
|
|
172
|
-
};
|
|
173
|
-
const disconnectNative = observer.disconnect.bind(observer);
|
|
174
|
-
const update = () => {
|
|
175
|
-
const result = resolveAccessibleText(context, labelledBy);
|
|
176
|
-
onText(result.text);
|
|
177
|
-
disconnectNative();
|
|
178
|
-
removeValueListeners();
|
|
179
|
-
const subscriptions = new Map();
|
|
180
|
-
const add = (node, options) => {
|
|
181
|
-
const current = subscriptions.get(node) ?? {};
|
|
182
|
-
const filters = new Set([...(current.attributeFilter ?? []), ...(options.attributeFilter ?? [])]);
|
|
183
|
-
subscriptions.set(node, {
|
|
184
|
-
childList: current.childList || options.childList,
|
|
185
|
-
subtree: current.subtree || options.subtree,
|
|
186
|
-
characterData: current.characterData || options.characterData,
|
|
187
|
-
attributes: current.attributes || options.attributes,
|
|
188
|
-
...(filters.size ? { attributeFilter: [...filters] } : {}),
|
|
189
|
-
});
|
|
190
|
-
};
|
|
191
|
-
for (const target of result.targets) {
|
|
192
|
-
add(target, { subtree: true, childList: true, characterData: true, attributes: true, attributeFilter: ["aria-label", "aria-labelledby", "alt", "title", "hidden", "aria-hidden", "id", "value", "class", "style"] });
|
|
193
|
-
if (target.parentNode)
|
|
194
|
-
add(target.parentNode, { childList: true });
|
|
195
|
-
for (let parent = target.parentElement; parent; parent = parent.parentElement) {
|
|
196
|
-
add(parent, { attributes: true, attributeFilter: ["class", "style", "hidden", "aria-hidden"] });
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
if (result.unresolved)
|
|
200
|
-
for (const root of roots)
|
|
201
|
-
add(root, { subtree: true, childList: true, attributes: true, attributeFilter: ["id"] });
|
|
202
|
-
for (const [node, options] of subscriptions)
|
|
203
|
-
observer.observe(node, options);
|
|
204
|
-
for (const target of result.targets)
|
|
205
|
-
if (["input", "textarea", "select"].includes(target.localName)) {
|
|
206
|
-
const listener = () => update();
|
|
207
|
-
target.addEventListener("input", listener);
|
|
208
|
-
target.addEventListener("change", listener);
|
|
209
|
-
valueListeners.set(target, listener);
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
update();
|
|
213
|
-
return { disconnect: () => { disconnectNative(); removeValueListeners(); } };
|
|
214
|
-
}
|
|
215
|
-
export function resolveAccessibleTextFromIdRefs(context, labelledBy) {
|
|
216
|
-
return resolveAccessibleText(context, labelledBy).text;
|
|
217
|
-
}
|
|
218
|
-
function syncHostAccessibleDescription(host, control, state) {
|
|
219
|
-
const description = host.getAttribute("aria-description");
|
|
220
|
-
const describedBy = host.getAttribute("aria-describedby");
|
|
221
|
-
const setResolvedDescription = (text) => {
|
|
222
|
-
const value = host.hasAttribute("data-spui-field-description") ? [text, description].filter(Boolean).join(" ") : text;
|
|
223
|
-
if (value) {
|
|
224
|
-
if (control.getAttribute("aria-description") !== value)
|
|
225
|
-
control.setAttribute("aria-description", value);
|
|
226
|
-
}
|
|
227
|
-
else if (control.hasAttribute("aria-description"))
|
|
228
|
-
control.removeAttribute("aria-description");
|
|
229
|
-
};
|
|
230
|
-
if (describedBy !== null) {
|
|
231
|
-
const ids = describedBy.trim().split(/\s+/).filter(Boolean);
|
|
232
|
-
const localRoot = control.getRootNode();
|
|
233
|
-
if (ids.length && ids.every(id => localRoot.getElementById(id))) {
|
|
234
|
-
stopHostAccessibleDescriptionObserver(host, control);
|
|
235
|
-
state.describedBy = describedBy;
|
|
236
|
-
state.resolvedDescription = undefined;
|
|
237
|
-
if (control.getAttribute("aria-describedby") !== describedBy)
|
|
238
|
-
control.setAttribute("aria-describedby", describedBy);
|
|
239
|
-
if (description === null)
|
|
240
|
-
control.removeAttribute("aria-description");
|
|
241
|
-
else if (control.getAttribute("aria-description") !== description)
|
|
242
|
-
control.setAttribute("aria-description", description);
|
|
243
|
-
return;
|
|
244
|
-
}
|
|
245
|
-
if (control.hasAttribute("aria-describedby"))
|
|
246
|
-
control.removeAttribute("aria-describedby");
|
|
247
|
-
if (state.describedBy !== describedBy || !state.descriptionObserver) {
|
|
248
|
-
stopHostAccessibleDescriptionObserver(host, control);
|
|
249
|
-
state.describedBy = describedBy;
|
|
250
|
-
state.descriptionObserver = observeAccessibleTextFromIdRefs(host, describedBy, text => {
|
|
251
|
-
state.resolvedDescription = text;
|
|
252
|
-
setResolvedDescription(text);
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
else {
|
|
256
|
-
setResolvedDescription(state.resolvedDescription ?? "");
|
|
257
|
-
}
|
|
258
|
-
return;
|
|
259
|
-
}
|
|
260
|
-
stopHostAccessibleDescriptionObserver(host, control);
|
|
261
|
-
state.describedBy = null;
|
|
262
|
-
state.resolvedDescription = undefined;
|
|
263
|
-
if (state.originalDescribedBy === null)
|
|
264
|
-
control.removeAttribute("aria-describedby");
|
|
265
|
-
else if (control.getAttribute("aria-describedby") !== state.originalDescribedBy)
|
|
266
|
-
control.setAttribute("aria-describedby", state.originalDescribedBy);
|
|
267
|
-
if (description === null) {
|
|
268
|
-
if (state.originalDescription === null)
|
|
269
|
-
control.removeAttribute("aria-description");
|
|
270
|
-
else if (control.getAttribute("aria-description") !== state.originalDescription)
|
|
271
|
-
control.setAttribute("aria-description", state.originalDescription);
|
|
272
|
-
}
|
|
273
|
-
else if (control.getAttribute("aria-description") !== description)
|
|
274
|
-
control.setAttribute("aria-description", description);
|
|
275
|
-
}
|
|
276
|
-
export function syncHostAccessibleName(host, control) {
|
|
277
|
-
const label = host.getAttribute("aria-label");
|
|
278
|
-
const labelledBy = host.getAttribute("aria-labelledby");
|
|
279
|
-
const description = host.getAttribute("aria-description");
|
|
280
|
-
const describedBy = host.getAttribute("aria-describedby");
|
|
281
|
-
const root = control.getRootNode();
|
|
282
|
-
const inShadowRoot = host.shadowRoot?.contains(control) ?? false;
|
|
283
|
-
// Most controls live inside the host's shadow root, but compound React adapters
|
|
284
|
-
// can provide the active control as a slotted light-DOM child. In that case the
|
|
285
|
-
// host and control share the same tree, so native ID references can be forwarded
|
|
286
|
-
// directly instead of being ignored.
|
|
287
|
-
if (!inShadowRoot && host.getRootNode() !== root)
|
|
288
|
-
return;
|
|
289
|
-
let hostStates = accessibleNameSyncStates.get(host);
|
|
290
|
-
if (!hostStates) {
|
|
291
|
-
hostStates = new Map();
|
|
292
|
-
accessibleNameSyncStates.set(host, hostStates);
|
|
293
|
-
}
|
|
294
|
-
let state = hostStates.get(control);
|
|
295
|
-
if (!state) {
|
|
296
|
-
state = {
|
|
297
|
-
control,
|
|
298
|
-
originalLabel: control.getAttribute("aria-label") === label ? null : control.getAttribute("aria-label"),
|
|
299
|
-
originalLabelledBy: control.getAttribute("aria-labelledby") === labelledBy ? null : control.getAttribute("aria-labelledby"),
|
|
300
|
-
originalDescription: control.getAttribute("aria-description") === description ? null : control.getAttribute("aria-description"),
|
|
301
|
-
originalDescribedBy: control.getAttribute("aria-describedby") === describedBy ? null : control.getAttribute("aria-describedby"),
|
|
302
|
-
};
|
|
303
|
-
hostStates.set(control, state);
|
|
304
|
-
}
|
|
305
|
-
if (label === null && labelledBy === null) {
|
|
306
|
-
stopHostAccessibleNameObserver(host, control);
|
|
307
|
-
if (state.originalLabel === null)
|
|
308
|
-
control.removeAttribute("aria-label");
|
|
309
|
-
else
|
|
310
|
-
control.setAttribute("aria-label", state.originalLabel);
|
|
311
|
-
if (state.originalLabelledBy === null)
|
|
312
|
-
control.removeAttribute("aria-labelledby");
|
|
313
|
-
else
|
|
314
|
-
control.setAttribute("aria-labelledby", state.originalLabelledBy);
|
|
315
|
-
syncHostAccessibleDescription(host, control, state);
|
|
316
|
-
if (description === null && describedBy === null) {
|
|
317
|
-
hostStates.delete(control);
|
|
318
|
-
if (hostStates.size === 0)
|
|
319
|
-
accessibleNameSyncStates.delete(host);
|
|
320
|
-
}
|
|
321
|
-
return;
|
|
322
|
-
}
|
|
323
|
-
if (labelledBy !== null && inShadowRoot) {
|
|
324
|
-
const ids = labelledBy.trim().split(/\s+/).filter(Boolean);
|
|
325
|
-
const localRoot = root;
|
|
326
|
-
if (ids.length && ids.every(id => localRoot.getElementById(id))) {
|
|
327
|
-
stopHostAccessibleNameObserver(host, control);
|
|
328
|
-
state.labelledBy = labelledBy;
|
|
329
|
-
control.removeAttribute("aria-label");
|
|
330
|
-
control.setAttribute("aria-labelledby", labelledBy);
|
|
331
|
-
syncHostAccessibleDescription(host, control, state);
|
|
332
|
-
return;
|
|
333
|
-
}
|
|
334
|
-
control.removeAttribute("aria-labelledby");
|
|
335
|
-
if (state.labelledBy !== labelledBy || !state.observer) {
|
|
336
|
-
stopHostAccessibleNameObserver(host, control);
|
|
337
|
-
state.labelledBy = labelledBy;
|
|
338
|
-
state.observer = observeAccessibleTextFromIdRefs(host, labelledBy, resolved => {
|
|
339
|
-
if (resolved) {
|
|
340
|
-
if (control.getAttribute("aria-label") !== resolved)
|
|
341
|
-
control.setAttribute("aria-label", resolved);
|
|
342
|
-
}
|
|
343
|
-
else if (control.hasAttribute("aria-label"))
|
|
344
|
-
control.removeAttribute("aria-label");
|
|
345
|
-
});
|
|
346
|
-
}
|
|
347
|
-
syncHostAccessibleDescription(host, control, state);
|
|
348
|
-
return;
|
|
349
|
-
}
|
|
350
|
-
stopHostAccessibleNameObserver(host, control);
|
|
351
|
-
state.labelledBy = labelledBy;
|
|
352
|
-
if (labelledBy !== null)
|
|
353
|
-
control.setAttribute("aria-labelledby", labelledBy);
|
|
354
|
-
else
|
|
355
|
-
control.removeAttribute("aria-labelledby");
|
|
356
|
-
if (labelledBy === null && label !== null)
|
|
357
|
-
control.setAttribute("aria-label", label);
|
|
358
|
-
else
|
|
359
|
-
control.removeAttribute("aria-label");
|
|
360
|
-
syncHostAccessibleDescription(host, control, state);
|
|
361
|
-
}
|
|
362
|
-
export function rememberNativeFormControlDefaults(current, control) {
|
|
363
|
-
if (current?.control === control)
|
|
364
|
-
return current;
|
|
365
|
-
return {
|
|
366
|
-
control,
|
|
367
|
-
disabled: control.disabled,
|
|
368
|
-
required: control.required,
|
|
369
|
-
readOnly: "readOnly" in control && control.readOnly,
|
|
370
|
-
multiple: "multiple" in control && control.multiple,
|
|
371
|
-
value: control.value,
|
|
372
|
-
defaultValue: "defaultValue" in control ? control.defaultValue : control.value,
|
|
373
|
-
checked: "checked" in control && control.checked,
|
|
374
|
-
defaultChecked: "defaultChecked" in control && control.defaultChecked,
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
export function findFocusable(root) {
|
|
378
|
-
const selector = "button,a[href],input:not([type=hidden]),select,textarea,[tabindex],slot";
|
|
379
|
-
const candidates = [...(root instanceof HTMLElement && root.matches(selector) ? [root] : []), ...root.querySelectorAll(selector)];
|
|
380
|
-
for (const node of candidates) {
|
|
381
|
-
if (!node.hasAttribute("disabled") && node.tabIndex >= 0 && node.getClientRects().length)
|
|
382
|
-
return node;
|
|
383
|
-
if (node.shadowRoot) {
|
|
384
|
-
const nested = findFocusable(node.shadowRoot);
|
|
385
|
-
if (nested)
|
|
386
|
-
return nested;
|
|
387
|
-
}
|
|
388
|
-
if (node instanceof HTMLSlotElement)
|
|
389
|
-
for (const assigned of node.assignedElements({ flatten: true })) {
|
|
390
|
-
const nested = findFocusable(assigned);
|
|
391
|
-
if (nested)
|
|
392
|
-
return nested;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
return undefined;
|
|
396
|
-
}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export type SkeletonAnimation = "wave" | "pulse" | "none";
|
|
2
|
-
export type SkeletonAppearance = "opaque" | "translucent";
|
|
3
|
-
export type SkeletonShape = "text" | "rectangle" | "rounded" | "circle" | "square";
|
|
4
|
-
export declare function defineSkeleton(): void;
|
|
5
|
-
export type SkeletonItemSize = 8 | 12 | 14 | 16 | 20 | 22 | 24 | 28 | 32 | 36 | 40 | 48 | 52 | 56 | 64 | 72 | 92 | 96 | 120 | 128;
|
|
6
|
-
export declare function defineSkeletonItem(): void;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import { base } from "./shared.js";
|
|
2
|
-
export function defineSkeleton() {
|
|
3
|
-
if (customElements.get("spui-skeleton"))
|
|
4
|
-
return;
|
|
5
|
-
defineSkeletonItem();
|
|
6
|
-
class SpuiSkeleton extends HTMLElement {
|
|
7
|
-
static observedAttributes = ["shape", "width", "height", "animated", "animation", "appearance", "size"];
|
|
8
|
-
connectedCallback() { if (!this.shadowRoot)
|
|
9
|
-
this.render(); this.sync(); }
|
|
10
|
-
attributeChangedCallback() { if (this.isConnected)
|
|
11
|
-
this.sync(); }
|
|
12
|
-
sync() {
|
|
13
|
-
const shape = this.getAttribute("shape") ?? "text";
|
|
14
|
-
this.dataset.shape = ["text", "rectangle", "circle", "rounded", "square"].includes(shape) ? shape : "text";
|
|
15
|
-
const width = this.getAttribute("width");
|
|
16
|
-
const height = this.getAttribute("height");
|
|
17
|
-
if (width)
|
|
18
|
-
this.style.setProperty("--spui-skeleton-width", this.cssLength(width));
|
|
19
|
-
else
|
|
20
|
-
this.style.removeProperty("--spui-skeleton-width");
|
|
21
|
-
if (height)
|
|
22
|
-
this.style.setProperty("--spui-skeleton-height", this.cssLength(height));
|
|
23
|
-
else
|
|
24
|
-
this.style.removeProperty("--spui-skeleton-height");
|
|
25
|
-
const slot = this.shadowRoot?.querySelector("slot");
|
|
26
|
-
const hasItems = Boolean(slot?.assignedElements().length);
|
|
27
|
-
this.toggleAttribute("data-has-items", hasItems);
|
|
28
|
-
if (!this.hasAttribute("role"))
|
|
29
|
-
this.setAttribute("role", "progressbar");
|
|
30
|
-
if (!this.hasAttribute("aria-busy"))
|
|
31
|
-
this.setAttribute("aria-busy", "true");
|
|
32
|
-
const animation = this.getAttribute("animated") === "false" ? "none" : this.getAttribute("animation") ?? "wave";
|
|
33
|
-
this.dataset.animation = ["wave", "pulse", "none"].includes(animation) ? animation : "wave";
|
|
34
|
-
this.dataset.appearance = this.getAttribute("appearance") === "translucent" ? "translucent" : "opaque";
|
|
35
|
-
if (hasItems) {
|
|
36
|
-
for (const item of this.querySelectorAll("spui-skeleton-item"))
|
|
37
|
-
item.refresh?.();
|
|
38
|
-
}
|
|
39
|
-
else {
|
|
40
|
-
this.removeAttribute("data-has-items");
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
render() {
|
|
44
|
-
const shadow = this.attachShadow({ mode: "open" });
|
|
45
|
-
const block = document.createElement("span");
|
|
46
|
-
block.part.add("shape");
|
|
47
|
-
const children = document.createElement("slot");
|
|
48
|
-
children.addEventListener("slotchange", () => this.sync());
|
|
49
|
-
const style = document.createElement("style");
|
|
50
|
-
style.textContent = `${base}:host{display:inline-block;vertical-align:middle;width:var(--spui-skeleton-width,100%);height:var(--spui-skeleton-height,1em);max-width:100%;overflow:hidden;border-radius:3px;background:var(--spui-skeleton-background,var(--spui-ui-stroke,#e5e5e5));color:transparent}:host([data-appearance=translucent]){background:var(--spui-skeleton-translucent,color-mix(in srgb,var(--spui-skeleton-background,var(--spui-ui-stroke,#e5e5e5)) 28%,transparent))}:host([data-shape=text]){height:var(--spui-skeleton-height,1em);width:var(--spui-skeleton-width,100%);border-radius:3px}:host([data-shape=rectangle]){height:var(--spui-skeleton-height,120px);border-radius:var(--spui-card-radius,8px)}:host([data-shape=rounded]){height:var(--spui-skeleton-height,40px);border-radius:999px}:host([data-shape=circle]){width:var(--spui-skeleton-width,40px);height:var(--spui-skeleton-height,40px);border-radius:50%}:host([data-shape=square]){width:var(--spui-skeleton-width,40px);height:var(--spui-skeleton-height,40px);border-radius:3px}:host([data-has-items]){display:block;width:auto;height:auto;overflow:visible;background:none}span{display:block;width:100%;height:100%;background:linear-gradient(100deg,transparent 20%,color-mix(in srgb,var(--spui-ui-surface,#fff) 55%,transparent) 50%,transparent 80%);background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite}:host([data-animation=pulse]) span{animation:spui-skeleton-pulse 1s ease-in-out infinite;background:none}slot{display:none}:host([data-has-items]) span{display:none}:host([data-has-items]) slot{display:block}:host([data-has-items]) slot::slotted(spui-skeleton-item){margin-inline-end:8px}@keyframes shimmer{to{background-position-x:-200%}}@keyframes spui-skeleton-pulse{50%{opacity:.4}}:host([animated=false]) span,:host([data-animation=none]) span{animation:none;background:none}@media(prefers-reduced-motion:reduce){span{animation:none;background:none}}@media(forced-colors:active){:host{forced-color-adjust:none;background:CanvasText;opacity:.25}span{display:none}}`;
|
|
51
|
-
shadow.append(style, block, children);
|
|
52
|
-
}
|
|
53
|
-
cssLength(value) {
|
|
54
|
-
return /^-?(?:\d+\.?\d*|\.\d+)$/.test(value.trim()) ? `${value.trim()}px` : value;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
customElements.define("spui-skeleton", SpuiSkeleton);
|
|
58
|
-
}
|
|
59
|
-
const skeletonItemSizes = new Set([8, 12, 14, 16, 20, 22, 24, 28, 32, 36, 40, 48, 52, 56, 64, 72, 92, 96, 120, 128]);
|
|
60
|
-
export function defineSkeletonItem() {
|
|
61
|
-
if (customElements.get("spui-skeleton-item"))
|
|
62
|
-
return;
|
|
63
|
-
class SpuiSkeletonItem extends HTMLElement {
|
|
64
|
-
static observedAttributes = ["animation", "appearance", "size", "shape"];
|
|
65
|
-
connectedCallback() { if (!this.shadowRoot)
|
|
66
|
-
this.render(); this.sync(); }
|
|
67
|
-
attributeChangedCallback() { if (this.isConnected)
|
|
68
|
-
this.sync(); }
|
|
69
|
-
refresh() { this.sync(); }
|
|
70
|
-
sync() {
|
|
71
|
-
const parent = this.closest("spui-skeleton");
|
|
72
|
-
const animation = this.getAttribute("animation") ?? (parent?.getAttribute("animated") === "false" ? "none" : parent?.getAttribute("animation") ?? "wave");
|
|
73
|
-
const appearance = this.getAttribute("appearance") ?? parent?.getAttribute("appearance") ?? "opaque";
|
|
74
|
-
const requestedSize = Number(this.getAttribute("size") ?? parent?.getAttribute("size") ?? 16);
|
|
75
|
-
const size = skeletonItemSizes.has(requestedSize) ? requestedSize : 16;
|
|
76
|
-
const shape = this.getAttribute("shape") ?? parent?.getAttribute("shape") ?? "rectangle";
|
|
77
|
-
this.dataset.animation = ["wave", "pulse", "none"].includes(animation) ? animation : "wave";
|
|
78
|
-
this.dataset.appearance = appearance === "translucent" ? "translucent" : "opaque";
|
|
79
|
-
this.dataset.size = String(size);
|
|
80
|
-
this.dataset.shape = ["circle", "square", "rectangle"].includes(shape) ? shape : "rectangle";
|
|
81
|
-
}
|
|
82
|
-
render() {
|
|
83
|
-
const shadow = this.attachShadow({ mode: "open" });
|
|
84
|
-
const sizeRules = [...skeletonItemSizes].map(size => `:host([data-size="${size}"]){--spui-skeleton-size:${size}px}`).join("");
|
|
85
|
-
const style = document.createElement("style");
|
|
86
|
-
style.textContent = `${base}:host{position:relative;display:inline-block;vertical-align:middle;box-sizing:border-box;overflow:hidden;min-width:0;background:var(--spui-skeleton-background,var(--spui-ui-stroke,#e1e1e1));border-radius:4px}${sizeRules}:host([data-shape=rectangle]){display:block;width:100%;height:var(--spui-skeleton-size,16px)}:host([data-shape=square]){width:var(--spui-skeleton-size,16px);height:var(--spui-skeleton-size,16px)}:host([data-shape=circle]){width:var(--spui-skeleton-size,16px);height:var(--spui-skeleton-size,16px);border-radius:50%}:host([data-appearance=translucent]){background:var(--spui-skeleton-translucent,color-mix(in srgb,var(--spui-skeleton-background,var(--spui-ui-stroke,#e1e1e1)) 28%,transparent))}:host::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,transparent 0%,var(--spui-skeleton-highlight,color-mix(in srgb,var(--spui-ui-surface,#fff) 60%,transparent)) 50%,transparent 100%);transform:translateX(-100%);animation:spui-skeleton-wave 1.5s ease-in-out infinite}:host([data-animation=pulse]){animation:spui-skeleton-pulse 1s ease-in-out infinite}:host([data-animation=pulse])::after{display:none}:host([data-animation=none]){animation:none}:host([data-animation=none])::after{display:none}@keyframes spui-skeleton-wave{to{transform:translateX(100%)}}@keyframes spui-skeleton-pulse{50%{opacity:.4}}@media(prefers-reduced-motion:reduce){:host,:host::after{animation:none}}@media(forced-colors:active){:host{forced-color-adjust:none;background:CanvasText;opacity:.25}:host::after{display:none}}`;
|
|
87
|
-
shadow.append(style);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
customElements.define("spui-skeleton-item", SpuiSkeletonItem);
|
|
91
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function defineSlider(): void;
|