@spfx-fast/sharepoint-ui 0.4.3 → 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.
Files changed (282) hide show
  1. package/QUICKSTART.md +13 -128
  2. package/README.md +19 -26
  3. package/components.json +240 -5834
  4. package/dist/accordion.d.ts +11 -0
  5. package/dist/accordion.js +4 -0
  6. package/dist/alert.d.ts +3 -0
  7. package/dist/alert.js +4 -0
  8. package/dist/attachment-list.d.ts +15 -0
  9. package/dist/attachment-list.js +14 -0
  10. package/dist/avatar-group.d.ts +12 -0
  11. package/dist/avatar-group.js +7 -0
  12. package/dist/avatar.d.ts +6 -0
  13. package/dist/avatar.js +5 -0
  14. package/dist/badge.d.ts +3 -0
  15. package/dist/badge.js +4 -0
  16. package/dist/breadcrumb.d.ts +10 -0
  17. package/dist/breadcrumb.js +9 -0
  18. package/dist/button-group.d.ts +6 -0
  19. package/dist/button-group.js +4 -0
  20. package/dist/button.d.ts +3 -0
  21. package/dist/button.js +4 -0
  22. package/dist/card.d.ts +3 -0
  23. package/dist/card.js +4 -0
  24. package/dist/carousel.d.ts +11 -0
  25. package/dist/carousel.js +6 -0
  26. package/dist/checkbox.d.ts +3 -0
  27. package/dist/checkbox.js +4 -0
  28. package/dist/combobox.d.ts +9 -0
  29. package/dist/combobox.js +6 -0
  30. package/dist/command-bar.d.ts +6 -0
  31. package/dist/command-bar.js +4 -0
  32. package/dist/copy-button.d.ts +7 -0
  33. package/dist/copy-button.js +19 -0
  34. package/dist/data-grid.d.ts +25 -0
  35. package/dist/data-grid.js +39 -0
  36. package/dist/date-range-picker.d.ts +12 -0
  37. package/dist/date-range-picker.js +4 -0
  38. package/dist/dialog.d.ts +9 -0
  39. package/dist/dialog.js +21 -0
  40. package/dist/divider.d.ts +3 -0
  41. package/dist/divider.js +4 -0
  42. package/dist/drawer.d.ts +6 -0
  43. package/dist/drawer.js +5 -0
  44. package/dist/empty-state.d.ts +7 -0
  45. package/dist/empty-state.js +5 -0
  46. package/dist/field.d.ts +15 -0
  47. package/dist/field.js +11 -0
  48. package/dist/file-dropzone.d.ts +15 -0
  49. package/dist/file-dropzone.js +21 -0
  50. package/dist/filter-bar.d.ts +9 -0
  51. package/dist/filter-bar.js +9 -0
  52. package/dist/image.d.ts +5 -0
  53. package/dist/image.js +4 -0
  54. package/dist/index.d.ts +68 -78
  55. package/dist/index.js +60 -68
  56. package/dist/input.d.ts +3 -0
  57. package/dist/input.js +4 -0
  58. package/dist/label.d.ts +3 -0
  59. package/dist/label.js +4 -0
  60. package/dist/link.d.ts +3 -0
  61. package/dist/link.js +9 -0
  62. package/dist/list-view.d.ts +29 -0
  63. package/dist/list-view.js +14 -0
  64. package/dist/list.d.ts +6 -0
  65. package/dist/list.js +5 -0
  66. package/dist/lookup-picker.d.ts +12 -0
  67. package/dist/lookup-picker.js +4 -0
  68. package/dist/menu.d.ts +6 -0
  69. package/dist/menu.js +4 -0
  70. package/dist/nav.d.ts +12 -0
  71. package/dist/nav.js +4 -0
  72. package/dist/pagination.d.ts +11 -0
  73. package/dist/pagination.js +5 -0
  74. package/dist/person-picker.d.ts +13 -0
  75. package/dist/person-picker.js +4 -0
  76. package/dist/persona.d.ts +7 -0
  77. package/dist/persona.js +5 -0
  78. package/dist/popover.d.ts +6 -0
  79. package/dist/popover.js +4 -0
  80. package/dist/progress-bar.d.ts +5 -0
  81. package/dist/progress-bar.js +5 -0
  82. package/dist/radio-group.d.ts +6 -0
  83. package/dist/radio-group.js +4 -0
  84. package/dist/radio.d.ts +3 -0
  85. package/dist/radio.js +4 -0
  86. package/dist/rating.d.ts +8 -0
  87. package/dist/rating.js +5 -0
  88. package/dist/react.d.ts +1 -4715
  89. package/dist/react.js +1 -7097
  90. package/dist/select.d.ts +3 -0
  91. package/dist/select.js +4 -0
  92. package/dist/sharepoint-field.d.ts +18 -0
  93. package/dist/sharepoint-field.js +54 -0
  94. package/dist/skeleton.d.ts +6 -0
  95. package/dist/skeleton.js +9 -0
  96. package/dist/spinner.d.ts +5 -0
  97. package/dist/spinner.js +4 -0
  98. package/dist/swatch-picker.d.ts +17 -0
  99. package/dist/swatch-picker.js +11 -0
  100. package/dist/switch.d.ts +3 -0
  101. package/dist/switch.js +4 -0
  102. package/dist/table.d.ts +6 -0
  103. package/dist/table.js +4 -0
  104. package/dist/tabs.d.ts +14 -0
  105. package/dist/tabs.js +30 -0
  106. package/dist/tag-group.d.ts +6 -0
  107. package/dist/tag-group.js +4 -0
  108. package/dist/tag-picker.d.ts +12 -0
  109. package/dist/tag-picker.js +4 -0
  110. package/dist/tag.d.ts +7 -0
  111. package/dist/tag.js +5 -0
  112. package/dist/text.d.ts +5 -0
  113. package/dist/text.js +4 -0
  114. package/dist/textarea.d.ts +3 -0
  115. package/dist/textarea.js +4 -0
  116. package/dist/theme.d.ts +15 -175
  117. package/dist/theme.js +36 -239
  118. package/dist/toast.d.ts +9 -0
  119. package/dist/toast.js +12 -0
  120. package/dist/tree.d.ts +13 -0
  121. package/dist/tree.js +9 -0
  122. package/dist/view-card.d.ts +8 -0
  123. package/dist/view-card.js +4 -0
  124. package/dist/view-switcher.d.ts +13 -0
  125. package/dist/view-switcher.js +7 -0
  126. package/dist/virtual-list.d.ts +11 -0
  127. package/dist/virtual-list.js +25 -0
  128. package/measurements.json +365 -0
  129. package/package.json +14 -46
  130. package/src/theme.css +125 -0
  131. package/AGENTS.md +0 -231
  132. package/dist/appearance.d.ts +0 -6
  133. package/dist/appearance.js +0 -217
  134. package/dist/elements/accordion.d.ts +0 -9
  135. package/dist/elements/accordion.js +0 -338
  136. package/dist/elements/alert.d.ts +0 -2
  137. package/dist/elements/alert.js +0 -86
  138. package/dist/elements/avatar-group-primitives.d.ts +0 -3
  139. package/dist/elements/avatar-group-primitives.js +0 -189
  140. package/dist/elements/avatar-group.d.ts +0 -2
  141. package/dist/elements/avatar-group.js +0 -110
  142. package/dist/elements/avatar.d.ts +0 -4
  143. package/dist/elements/avatar.js +0 -251
  144. package/dist/elements/badge.d.ts +0 -8
  145. package/dist/elements/badge.js +0 -182
  146. package/dist/elements/breadcrumb.d.ts +0 -4
  147. package/dist/elements/breadcrumb.js +0 -233
  148. package/dist/elements/button-group.d.ts +0 -1
  149. package/dist/elements/button-group.js +0 -20
  150. package/dist/elements/button-variants.d.ts +0 -6
  151. package/dist/elements/button-variants.js +0 -339
  152. package/dist/elements/button.d.ts +0 -5
  153. package/dist/elements/button.js +0 -233
  154. package/dist/elements/card-primitives.d.ts +0 -3
  155. package/dist/elements/card-primitives.js +0 -83
  156. package/dist/elements/card.d.ts +0 -5
  157. package/dist/elements/card.js +0 -213
  158. package/dist/elements/carousel.d.ts +0 -92
  159. package/dist/elements/carousel.js +0 -1115
  160. package/dist/elements/color-picker.d.ts +0 -24
  161. package/dist/elements/color-picker.js +0 -1004
  162. package/dist/elements/combobox.d.ts +0 -1
  163. package/dist/elements/combobox.js +0 -1012
  164. package/dist/elements/data-grid-model.d.ts +0 -120
  165. package/dist/elements/data-grid-model.js +0 -294
  166. package/dist/elements/data-grid.d.ts +0 -30
  167. package/dist/elements/data-grid.js +0 -1576
  168. package/dist/elements/date-picker.d.ts +0 -1
  169. package/dist/elements/date-picker.js +0 -486
  170. package/dist/elements/dialog.d.ts +0 -23
  171. package/dist/elements/dialog.js +0 -409
  172. package/dist/elements/divider.d.ts +0 -2
  173. package/dist/elements/divider.js +0 -66
  174. package/dist/elements/drawer.d.ts +0 -3
  175. package/dist/elements/drawer.js +0 -308
  176. package/dist/elements/field-composition.d.ts +0 -26
  177. package/dist/elements/field-composition.js +0 -133
  178. package/dist/elements/field.d.ts +0 -1
  179. package/dist/elements/field.js +0 -67
  180. package/dist/elements/file-upload.d.ts +0 -6
  181. package/dist/elements/file-upload.js +0 -211
  182. package/dist/elements/floating-position.d.ts +0 -36
  183. package/dist/elements/floating-position.js +0 -92
  184. package/dist/elements/image.d.ts +0 -28
  185. package/dist/elements/image.js +0 -38
  186. package/dist/elements/info.d.ts +0 -9
  187. package/dist/elements/info.js +0 -102
  188. package/dist/elements/input.d.ts +0 -5
  189. package/dist/elements/input.js +0 -255
  190. package/dist/elements/label.d.ts +0 -15
  191. package/dist/elements/label.js +0 -56
  192. package/dist/elements/link.d.ts +0 -1
  193. package/dist/elements/link.js +0 -92
  194. package/dist/elements/list.d.ts +0 -19
  195. package/dist/elements/list.js +0 -297
  196. package/dist/elements/menu.d.ts +0 -33
  197. package/dist/elements/menu.js +0 -1103
  198. package/dist/elements/message-bar.d.ts +0 -10
  199. package/dist/elements/message-bar.js +0 -327
  200. package/dist/elements/nav.d.ts +0 -32
  201. package/dist/elements/nav.js +0 -794
  202. package/dist/elements/overflow.d.ts +0 -10
  203. package/dist/elements/overflow.js +0 -218
  204. package/dist/elements/persona.d.ts +0 -3
  205. package/dist/elements/persona.js +0 -125
  206. package/dist/elements/popover.d.ts +0 -77
  207. package/dist/elements/popover.js +0 -840
  208. package/dist/elements/progress-bar.d.ts +0 -4
  209. package/dist/elements/progress-bar.js +0 -82
  210. package/dist/elements/radio-group.d.ts +0 -1
  211. package/dist/elements/radio-group.js +0 -303
  212. package/dist/elements/rating-display.d.ts +0 -2
  213. package/dist/elements/rating-display.js +0 -125
  214. package/dist/elements/rating.d.ts +0 -2
  215. package/dist/elements/rating.js +0 -206
  216. package/dist/elements/rich-text-editor.d.ts +0 -32
  217. package/dist/elements/rich-text-editor.js +0 -1367
  218. package/dist/elements/search.d.ts +0 -3
  219. package/dist/elements/search.js +0 -200
  220. package/dist/elements/select.d.ts +0 -6
  221. package/dist/elements/select.js +0 -291
  222. package/dist/elements/shared.d.ts +0 -22
  223. package/dist/elements/shared.js +0 -409
  224. package/dist/elements/sharepoint-field-basic-controls.d.ts +0 -1
  225. package/dist/elements/sharepoint-field-basic-controls.js +0 -14
  226. package/dist/elements/sharepoint-fields.d.ts +0 -29
  227. package/dist/elements/sharepoint-fields.js +0 -460
  228. package/dist/elements/skeleton.d.ts +0 -6
  229. package/dist/elements/skeleton.js +0 -91
  230. package/dist/elements/slider.d.ts +0 -1
  231. package/dist/elements/slider.js +0 -248
  232. package/dist/elements/spin-button.d.ts +0 -7
  233. package/dist/elements/spin-button.js +0 -499
  234. package/dist/elements/spinner.d.ts +0 -4
  235. package/dist/elements/spinner.js +0 -124
  236. package/dist/elements/swatch-picker.d.ts +0 -5
  237. package/dist/elements/swatch-picker.js +0 -363
  238. package/dist/elements/table.d.ts +0 -21
  239. package/dist/elements/table.js +0 -261
  240. package/dist/elements/tabs.d.ts +0 -1
  241. package/dist/elements/tabs.js +0 -276
  242. package/dist/elements/tag-picker.d.ts +0 -29
  243. package/dist/elements/tag-picker.js +0 -715
  244. package/dist/elements/tags.d.ts +0 -21
  245. package/dist/elements/tags.js +0 -421
  246. package/dist/elements/teaching-popover.d.ts +0 -32
  247. package/dist/elements/teaching-popover.js +0 -412
  248. package/dist/elements/text.d.ts +0 -9
  249. package/dist/elements/text.js +0 -75
  250. package/dist/elements/textarea.d.ts +0 -1
  251. package/dist/elements/textarea.js +0 -182
  252. package/dist/elements/toast.d.ts +0 -25
  253. package/dist/elements/toast.js +0 -337
  254. package/dist/elements/toaster.d.ts +0 -6
  255. package/dist/elements/toaster.js +0 -357
  256. package/dist/elements/toggle.d.ts +0 -2
  257. package/dist/elements/toggle.js +0 -246
  258. package/dist/elements/toolbar.d.ts +0 -12
  259. package/dist/elements/toolbar.js +0 -381
  260. package/dist/elements/tooltip.d.ts +0 -76
  261. package/dist/elements/tooltip.js +0 -527
  262. package/dist/elements/tree-model.d.ts +0 -19
  263. package/dist/elements/tree-model.js +0 -34
  264. package/dist/elements/tree.d.ts +0 -5
  265. package/dist/elements/tree.js +0 -273
  266. package/dist/elements/view-card.d.ts +0 -2
  267. package/dist/elements/view-card.js +0 -78
  268. package/dist/elements/virtual-list.d.ts +0 -41
  269. package/dist/elements/virtual-list.js +0 -369
  270. package/dist/elements.d.ts +0 -73
  271. package/dist/elements.js +0 -210
  272. package/dist/sharepoint-fields.d.ts +0 -135
  273. package/dist/sharepoint-fields.js +0 -402
  274. package/dist/virtualizer-hooks.d.ts +0 -80
  275. package/dist/virtualizer-hooks.js +0 -253
  276. package/scripts/generate-token-index.mjs +0 -43
  277. package/scripts/sync-component-catalog-signatures.mjs +0 -55
  278. package/scripts/validate-component-catalog.mjs +0 -44
  279. package/skills/sharepoint-ui/SKILL.md +0 -12
  280. package/skills/sharepoint-ui/references/choosing-components.md +0 -20
  281. package/skills/sharepoint-ui/references/sharepoint-patterns.md +0 -17
  282. package/tokens.json +0 -3777
@@ -1,248 +0,0 @@
1
- import { base, rememberNativeFormControlDefaults, stopHostAccessibleNameSync, syncHostAccessibleName } from "./shared.js";
2
- export function defineSlider() {
3
- if (customElements.get("spui-slider"))
4
- return;
5
- class SpuiSlider extends HTMLElement {
6
- static formAssociated = true;
7
- static observedAttributes = ["label", "value", "default-value", "min", "max", "step", "size", "vertical", "disabled", "name", "aria-label", "aria-labelledby", "aria-description", "aria-describedby", "aria-invalid", "aria-orientation", "aria-required", "aria-valuetext"];
8
- internals;
9
- currentValue;
10
- currentDefaultValue;
11
- formDisabled = false;
12
- boundInput;
13
- slotInputDefaults;
14
- defaultAriaOrientation;
15
- get form() { return this.internals?.form ?? null; }
16
- constructor() {
17
- super();
18
- try {
19
- this.internals = this.attachInternals();
20
- }
21
- catch { /* The native range input remains usable without ElementInternals. */ }
22
- }
23
- connectedCallback() { this.render(); }
24
- disconnectedCallback() { stopHostAccessibleNameSync(this); }
25
- attributeChangedCallback(name, _oldValue, value) {
26
- if (!this.isConnected)
27
- return;
28
- const input = this.getInput();
29
- if (!input)
30
- return;
31
- if (name === "label") {
32
- const label = this.shadowRoot?.querySelector("label");
33
- if (label)
34
- label.textContent = value ?? "";
35
- }
36
- else if (name === "value") {
37
- this.currentValue = value ?? "";
38
- if (value !== null)
39
- input.value = value;
40
- this.syncVisual(input);
41
- }
42
- else if (name === "default-value") {
43
- this.currentDefaultValue = value ?? "";
44
- if (this.getAttribute("value") === null)
45
- input.value = value ?? "0";
46
- this.syncVisual(input);
47
- }
48
- else if (["min", "max", "step"].includes(name)) {
49
- if (value === null)
50
- input.removeAttribute(name);
51
- else
52
- input.setAttribute(name, value);
53
- this.syncVisual(input);
54
- }
55
- else if (name === "size" || name === "vertical") {
56
- if (value === null || value === "false")
57
- this.removeAttribute(name);
58
- if (name === "vertical") {
59
- if (this.hasAttribute("vertical"))
60
- input.setAttribute("orient", "vertical");
61
- else
62
- input.removeAttribute("orient");
63
- }
64
- }
65
- else if (name === "disabled")
66
- input.disabled = this.formDisabled || this.hasAttribute("disabled") || Boolean(this.slotInputDefaults?.disabled);
67
- else if (name === "aria-label" || name === "aria-labelledby" || name === "aria-description" || name === "aria-describedby" || name === "aria-invalid" || name === "aria-orientation" || name === "aria-required" || name === "aria-valuetext") {
68
- if (name === "aria-orientation")
69
- this.defaultAriaOrientation = undefined;
70
- value === null ? input.removeAttribute(name) : input.setAttribute(name, value);
71
- }
72
- this.syncFormValue(input);
73
- this.syncSlots();
74
- }
75
- get value() { return this.getInput()?.valueAsNumber ?? Number(this.currentValue ?? this.getAttribute("value")); }
76
- set value(value) {
77
- this.currentValue = String(value);
78
- const input = this.getInput();
79
- if (input) {
80
- input.value = this.currentValue;
81
- this.syncFormValue(input);
82
- this.syncVisual(input);
83
- }
84
- }
85
- get defaultValue() {
86
- const value = this.currentDefaultValue ?? this.getAttribute("default-value");
87
- if (value !== null && value !== undefined)
88
- return Number(value);
89
- const input = this.getInput();
90
- const fallback = this.shadowRoot?.querySelector(".input-fallback");
91
- return Number(input && input !== fallback ? this.slotInputDefaults?.defaultValue ?? input.defaultValue : 0);
92
- }
93
- set defaultValue(value) {
94
- this.currentDefaultValue = String(value);
95
- this.setAttribute("default-value", this.currentDefaultValue);
96
- }
97
- formDisabledCallback(disabled) { this.formDisabled = disabled; this.syncSlots(); }
98
- formResetCallback() { const input = this.getInput(); if (input) {
99
- input.value = this.getAttribute("value") ?? String(this.defaultValue);
100
- this.currentValue = input.value;
101
- this.syncFormValue(input);
102
- this.syncVisual(input);
103
- } }
104
- formStateRestoreCallback(state) { if (typeof state === "string")
105
- this.value = Number(state); }
106
- syncFormValue(input) { this.internals?.setFormValue(input.value); }
107
- getInput() {
108
- const slot = this.shadowRoot?.querySelector('slot[name="input"]');
109
- return slot?.assignedElements().find((element) => element instanceof HTMLInputElement)
110
- ?? this.shadowRoot?.querySelector(".input-fallback") ?? undefined;
111
- }
112
- syncVisual(input) {
113
- const min = Number(input.min || 0);
114
- const max = Number(input.max || 100);
115
- const range = max - min;
116
- const progress = range > 0 ? Math.max(0, Math.min(1, (input.valueAsNumber - min) / range)) : 0;
117
- const track = this.shadowRoot?.querySelector(".track");
118
- track?.style.setProperty("--spui-slider-progress", String(progress));
119
- const thumbSlot = this.shadowRoot?.querySelector('slot[name="thumb"]');
120
- const thumb = thumbSlot?.assignedElements()[0] ?? this.shadowRoot?.querySelector(".thumb");
121
- const progressPercent = `${progress * 100}%`;
122
- track?.style.setProperty("--spui-slider-progress-percent", progressPercent);
123
- track?.style.setProperty("--spui-slider-fill-percent", progressPercent);
124
- if (thumb) {
125
- if (this.hasAttribute("vertical")) {
126
- thumb.style.insetInlineStart = "50%";
127
- thumb.style.insetBlockStart = `${(1 - progress) * 100}%`;
128
- }
129
- else {
130
- thumb.style.insetInlineStart = `${progress * 100}%`;
131
- thumb.style.insetBlockStart = "50%";
132
- }
133
- }
134
- }
135
- syncSlots() {
136
- const input = this.getInput();
137
- if (!input)
138
- return;
139
- const fallback = this.shadowRoot?.querySelector(".input-fallback");
140
- if (input !== fallback)
141
- this.slotInputDefaults = rememberNativeFormControlDefaults(this.slotInputDefaults, input);
142
- if (this.boundInput !== input) {
143
- this.boundInput?.removeEventListener("input", this.handleInput);
144
- input.addEventListener("input", this.handleInput);
145
- this.boundInput = input;
146
- input.value = this.currentValue ?? this.getAttribute("value") ?? this.currentDefaultValue ?? this.getAttribute("default-value") ?? input.value ?? "0";
147
- }
148
- if (fallback) {
149
- const assigned = input !== fallback;
150
- fallback.hidden = assigned;
151
- fallback.setAttribute("aria-hidden", String(assigned));
152
- }
153
- input.type = "range";
154
- input.removeAttribute("name");
155
- if (!input.id)
156
- input.id = this.shadowRoot?.querySelector("label")?.htmlFor ?? `slider-${crypto.randomUUID()}`;
157
- if (this.hasAttribute("vertical"))
158
- input.setAttribute("orient", "vertical");
159
- else
160
- input.removeAttribute("orient");
161
- if (!input.hasAttribute("aria-label") && !input.hasAttribute("aria-labelledby")) {
162
- const label = this.getAttribute("label");
163
- if (label)
164
- input.setAttribute("aria-label", label);
165
- }
166
- for (const name of ["min", "max", "step", "aria-description", "aria-describedby", "aria-invalid", "aria-orientation", "aria-required", "aria-valuetext"])
167
- if (!input.hasAttribute(name)) {
168
- const value = this.getAttribute(name);
169
- if (value !== null)
170
- input.setAttribute(name, value);
171
- }
172
- const orientation = this.hasAttribute("vertical") ? "vertical" : "horizontal";
173
- const previousDefault = this.defaultAriaOrientation;
174
- const orientationWasDefaulted = previousDefault?.input === input && input.getAttribute("aria-orientation") === previousDefault.value;
175
- if (orientationWasDefaulted || !input.hasAttribute("aria-orientation")) {
176
- input.setAttribute("aria-orientation", orientation);
177
- this.defaultAriaOrientation = { input, value: orientation };
178
- }
179
- else
180
- this.defaultAriaOrientation = undefined;
181
- syncHostAccessibleName(this, input);
182
- input.disabled = this.formDisabled || this.hasAttribute("disabled") || Boolean(input === fallback ? false : this.slotInputDefaults?.disabled);
183
- this.syncFormValue(input);
184
- this.syncVisual(input);
185
- }
186
- handleInput = (event) => {
187
- const input = event.currentTarget;
188
- this.currentValue = input.value;
189
- this.syncFormValue(input);
190
- this.syncVisual(input);
191
- this.dispatchEvent(new CustomEvent("spui-change", { detail: { value: input.valueAsNumber, sourceEvent: event }, bubbles: true, composed: true }));
192
- };
193
- render() {
194
- const shadow = this.shadowRoot ?? this.attachShadow({ mode: "open" });
195
- const id = `slider-${crypto.randomUUID()}`;
196
- const label = document.createElement("label");
197
- label.htmlFor = id;
198
- label.textContent = this.getAttribute("label") ?? "";
199
- label.part.add("label");
200
- const input = document.createElement("input");
201
- input.className = "input-fallback";
202
- input.id = id;
203
- input.type = "range";
204
- if (this.hasAttribute("vertical"))
205
- input.setAttribute("orient", "vertical");
206
- input.value = this.currentValue ?? this.getAttribute("value") ?? this.currentDefaultValue ?? this.getAttribute("default-value") ?? "0";
207
- for (const name of ["min", "max", "step", "aria-label", "aria-description", "aria-describedby", "aria-invalid", "aria-required", "aria-valuetext"]) {
208
- const value = this.getAttribute(name);
209
- if (value !== null)
210
- input.setAttribute(name, value);
211
- }
212
- input.disabled = this.hasAttribute("disabled");
213
- input.part.add("control");
214
- const track = document.createElement("div");
215
- track.className = "track";
216
- track.part.add("track");
217
- const rail = document.createElement("div");
218
- rail.className = "rail";
219
- rail.part.add("rail");
220
- const railSlot = document.createElement("slot");
221
- railSlot.name = "rail";
222
- railSlot.append(rail);
223
- railSlot.addEventListener("slotchange", () => this.syncSlots());
224
- const fill = document.createElement("div");
225
- fill.className = "rail-fill";
226
- fill.setAttribute("aria-hidden", "true");
227
- const thumb = document.createElement("span");
228
- thumb.className = "thumb";
229
- thumb.part.add("thumb");
230
- const thumbSlot = document.createElement("slot");
231
- thumbSlot.name = "thumb";
232
- thumbSlot.append(thumb);
233
- thumbSlot.addEventListener("slotchange", () => this.syncSlots());
234
- const inputSlot = document.createElement("slot");
235
- inputSlot.name = "input";
236
- inputSlot.part.add("input");
237
- inputSlot.append(input);
238
- inputSlot.addEventListener("slotchange", () => this.syncSlots());
239
- track.append(railSlot, fill, thumbSlot, inputSlot);
240
- const style = document.createElement("style");
241
- style.textContent = `${base}:host{display:grid;gap:var(--spui-control-gap,6px)}label{font-size:14px;font-weight:600;color:var(--spui-ui-muted,var(--spui-semantic-body-text,inherit))}input{width:100%;min-height:var(--spui-control-height,32px);margin:0;accent-color:var(--spui-ui-accent,var(--spui-semantic-primary-button-background,var(--colorBrandBackground,#0f6cbd)));cursor:pointer}input:focus-visible{outline:2px solid var(--spui-focus-ring,#005a9e);outline-offset:3px}input:disabled{opacity:.55;cursor:not-allowed}:host([size=small]) input{min-height:24px}:host([vertical]){display:inline-grid;justify-items:center;align-content:start}:host([vertical]) input{width:var(--spui-control-height,32px);height:160px;min-height:160px;writing-mode:vertical-lr;direction:rtl}:host([vertical]) label{grid-row:2}@media(forced-colors:active){input{accent-color:Highlight}input:focus-visible{outline-color:Highlight}}`;
242
- style.textContent += `.track{position:relative;width:100%;min-width:0;height:var(--spui-control-height,32px);touch-action:pan-y}.rail{position:absolute;inset-inline:0;inset-block-start:50%;height:4px;transform:translateY(-50%);border-radius:999px;background:var(--spui-slider-rail,var(--spui-ui-stroke,var(--colorNeutralStroke1,#d1d1d1)))}.rail-fill{position:absolute;inset-inline-start:0;inset-block-start:50%;width:var(--spui-slider-fill-percent,0%);height:4px;transform:translateY(-50%);border-radius:999px;background:var(--spui-slider-fill,var(--spui-ui-accent,var(--colorBrandBackground,#0f6cbd)));pointer-events:none}.thumb{position:absolute;inset-inline-start:var(--spui-slider-progress-percent,0%);inset-block-start:50%;width:16px;height:16px;transform:translate(-50%,-50%);border:2px solid var(--spui-slider-thumb-border,var(--spui-ui-accent,var(--colorBrandBackground,#0f6cbd)));border-radius:50%;background:var(--spui-slider-thumb-background,var(--spui-ui-canvas,#fff));box-shadow:var(--shadow2,0 1px 2px rgb(0 0 0 / 20%));pointer-events:none}slot[name=rail]{position:absolute;inset:0;pointer-events:none}slot[name=rail]::slotted(*){position:absolute;inset-inline:0;inset-block-start:50%;height:4px;transform:translateY(-50%);border-radius:999px;background:var(--spui-slider-rail,var(--spui-ui-stroke,var(--colorNeutralStroke1,#d1d1d1)))}slot[name=thumb]{position:absolute;inset:0;pointer-events:none}slot[name=thumb]::slotted(*){position:absolute;inset-inline-start:var(--spui-slider-progress-percent,0%);inset-block-start:50%;width:16px;height:16px;transform:translate(-50%,-50%);border:2px solid var(--spui-slider-thumb-border,var(--spui-ui-accent,var(--colorBrandBackground,#0f6cbd)));border-radius:50%;background:var(--spui-slider-thumb-background,var(--spui-ui-canvas,#fff));box-shadow:var(--shadow2,0 1px 2px rgb(0 0 0 / 20%))}slot[name=input]{position:absolute;inset:0}input{position:absolute;inset:0;width:100%;height:100%;min-height:24px;opacity:0;appearance:none;cursor:pointer}input::-webkit-slider-thumb{appearance:none;width:24px;height:24px}input:focus-visible{outline:0}.track:focus-within{outline:2px solid var(--spui-focus-ring,#005a9e);outline-offset:2px;border-radius:4px}:host([size=small]) .track{height:24px}:host([vertical]) .track{display:block;width:var(--spui-control-height,32px);height:160px;min-height:160px;touch-action:pan-x}:host([vertical]) .rail,:host([vertical]) slot[name=rail]::slotted(*){inset-inline:50%;inset-block:0;width:4px;height:auto;transform:translateX(-50%)}:host([vertical]) .rail-fill{inset-inline-start:50%;inset-block-start:auto;inset-block-end:0;width:4px;height:var(--spui-slider-fill-percent,0%);transform:translateX(-50%)}:host([vertical]) .thumb,:host([vertical]) slot[name=thumb]::slotted(*){inset-inline-start:50%;inset-block-start:calc(100% - var(--spui-slider-progress-percent,0%));transform:translate(-50%,-50%)}:host([vertical]) label{grid-row:2}:host([dir=rtl]) .rail-fill{inset-inline-start:auto;inset-inline-end:0}:host([dir=rtl]) .thumb,:host([dir=rtl]) slot[name=thumb]::slotted(*){inset-inline-start:auto;inset-inline-end:var(--spui-slider-progress-percent,0%);transform:translate(50%,-50%)}@media(forced-colors:active){.rail{background:CanvasText}.rail-fill{background:Highlight}.thumb{border-color:Highlight;background:Canvas}}`;
243
- shadow.replaceChildren(style, label, track);
244
- this.syncSlots();
245
- }
246
- }
247
- customElements.define("spui-slider", SpuiSlider);
248
- }
@@ -1,7 +0,0 @@
1
- export type SpinButtonAppearance = "outline" | "underline" | "filled-darker" | "filled-lighter";
2
- export type SpinButtonSize = "small" | "medium";
3
- export type SpinButtonChangeData = {
4
- value: number | null;
5
- displayValue?: string;
6
- };
7
- export declare function defineSpinButton(): void;