@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,10 +0,0 @@
1
- export type MessageBarIntent = "info" | "success" | "warning" | "error";
2
- export type MessageBarPoliteness = "assertive" | "polite";
3
- export type MessageBarShape = "square" | "rounded";
4
- export type MessageBarLayout = "auto" | "singleline" | "multiline";
5
- export type MessageBarGroupAnimation = "exit-only" | "both";
6
- export declare function defineMessageBarActions(): void;
7
- export declare function defineMessageBarBody(): void;
8
- export declare function defineMessageBarTitle(): void;
9
- export declare function defineMessageBarGroup(): void;
10
- export declare function defineMessageBar(): void;
@@ -1,327 +0,0 @@
1
- import { base } from "./shared.js";
2
- let messageBarTitleSequence = 0;
3
- function definePart(tag, content, css, observed = []) {
4
- if (customElements.get(tag))
5
- return;
6
- class SpuiMessageBarPart extends HTMLElement {
7
- static observedAttributes = observed;
8
- resizeObserver;
9
- childObserver;
10
- childRects = new WeakMap();
11
- connectedCallback() {
12
- if (!this.shadowRoot) {
13
- const shadow = this.attachShadow({ mode: "open" });
14
- const root = document.createElement("div");
15
- root.part.add("root");
16
- const fragment = document.createRange().createContextualFragment(content);
17
- const style = document.createElement("style");
18
- style.textContent = `${base}:host{display:block;min-width:0;font:inherit;color:inherit;line-height:inherit}${css}`;
19
- shadow.append(style, root);
20
- root.append(fragment);
21
- }
22
- this.sync();
23
- if (tag.endsWith("-group"))
24
- this.observeMessageBars();
25
- }
26
- disconnectedCallback() { this.resizeObserver?.disconnect(); this.childObserver?.disconnect(); }
27
- attributeChangedCallback() { if (this.isConnected)
28
- this.sync(); }
29
- sync() {
30
- if (tag.endsWith("-group")) {
31
- this.setAttribute("role", "group");
32
- this.dataset.animate = this.getAttribute("animate") === "both" ? "both" : "exit-only";
33
- }
34
- if (tag.endsWith("-actions")) {
35
- const parent = this.closest("spui-message-bar");
36
- const layout = parent?.dataset.layout ?? parent?.getAttribute("layout");
37
- if (layout)
38
- this.dataset.layout = layout;
39
- else
40
- delete this.dataset.layout;
41
- }
42
- }
43
- observeMessageBars() {
44
- const view = this.ownerDocument.defaultView;
45
- if (!view)
46
- return;
47
- const ResizeObserverConstructor = view.ResizeObserver;
48
- if (ResizeObserverConstructor && !this.resizeObserver) {
49
- this.resizeObserver = new ResizeObserverConstructor(entries => {
50
- for (const entry of entries)
51
- if (entry.target instanceof HTMLElement && entry.target.isConnected)
52
- this.childRects.set(entry.target, entry.target.getBoundingClientRect());
53
- });
54
- }
55
- const MutationObserverConstructor = view.MutationObserver;
56
- if (MutationObserverConstructor) {
57
- this.childObserver ??= new MutationObserverConstructor(records => {
58
- for (const record of records) {
59
- for (const node of record.addedNodes)
60
- if (node instanceof HTMLElement && node.localName === "spui-message-bar" && !node.hasAttribute("data-spui-exiting")) {
61
- if (node.isConnected) {
62
- const rect = node.getBoundingClientRect();
63
- if (rect.width && rect.height)
64
- this.childRects.set(node, rect);
65
- this.resizeObserver?.observe(node);
66
- }
67
- }
68
- for (const node of record.removedNodes)
69
- if (node instanceof HTMLElement && node.localName === "spui-message-bar" && !node.hasAttribute("data-spui-exiting")) {
70
- this.resizeObserver?.unobserve(node);
71
- this.animateExit(node);
72
- }
73
- }
74
- });
75
- this.childObserver.observe(this, { childList: true });
76
- }
77
- for (const bar of this.querySelectorAll(":scope > spui-message-bar"))
78
- this.resizeObserver?.observe(bar);
79
- }
80
- animateExit(bar) {
81
- const view = this.ownerDocument.defaultView;
82
- const rect = this.childRects.get(bar);
83
- if (!view || !rect || this.getAttribute("animate") === "none" || view.matchMedia("(prefers-reduced-motion: reduce)").matches)
84
- return;
85
- const groupRect = this.getBoundingClientRect();
86
- for (const sibling of this.querySelectorAll(":scope > spui-message-bar:not([data-spui-exiting])")) {
87
- const previous = this.childRects.get(sibling);
88
- const current = sibling.getBoundingClientRect();
89
- this.childRects.set(sibling, current);
90
- const offset = previous ? previous.top - current.top : 0;
91
- if (Math.abs(offset) < 1)
92
- continue;
93
- sibling.style.setProperty("--spui-message-shift", `${offset}px`);
94
- sibling.setAttribute("data-spui-shifting", "");
95
- const clearShift = () => {
96
- sibling.removeAttribute("data-spui-shifting");
97
- sibling.style.removeProperty("--spui-message-shift");
98
- sibling.removeEventListener("animationend", clearShift);
99
- sibling.removeEventListener("animationcancel", clearShift);
100
- };
101
- sibling.addEventListener("animationend", clearShift);
102
- sibling.addEventListener("animationcancel", clearShift);
103
- }
104
- const clone = bar.cloneNode(true);
105
- clone.setAttribute("data-spui-exiting", "");
106
- clone.setAttribute("aria-hidden", "true");
107
- clone.removeAttribute("data-spui-shifting");
108
- clone.style.removeProperty("--spui-message-shift");
109
- clone.inert = true;
110
- clone.removeAttribute("id");
111
- clone.querySelectorAll("[id], [data-testid]").forEach(node => { node.removeAttribute("id"); node.removeAttribute("data-testid"); });
112
- Object.assign(clone.style, {
113
- position: "absolute",
114
- insetInlineStart: `${rect.left - groupRect.left - this.clientLeft + this.scrollLeft}px`,
115
- top: `${rect.top - groupRect.top - this.clientTop + this.scrollTop}px`,
116
- width: `${rect.width}px`,
117
- height: `${rect.height}px`,
118
- margin: "0",
119
- pointerEvents: "none",
120
- zIndex: "1",
121
- });
122
- const removeClone = () => {
123
- clone.removeEventListener("animationend", removeClone);
124
- clone.removeEventListener("animationcancel", removeClone);
125
- clone.remove();
126
- };
127
- clone.addEventListener("animationend", removeClone);
128
- clone.addEventListener("animationcancel", removeClone);
129
- this.append(clone);
130
- view.setTimeout(removeClone, 300);
131
- }
132
- }
133
- customElements.define(tag, SpuiMessageBarPart);
134
- }
135
- export function defineMessageBarActions() {
136
- definePart("spui-message-bar-actions", '<slot></slot><slot name="container-action"></slot>', ":host{display:flex;align-items:center;flex-wrap:wrap;gap:8px}:host([data-layout=multiline]){align-items:flex-start}slot[name=container-action]{margin-inline-start:auto}");
137
- }
138
- export function defineMessageBarBody() {
139
- definePart("spui-message-bar-body", "<slot></slot>", ":host{line-height:1.45;min-width:0}");
140
- }
141
- export function defineMessageBarTitle() {
142
- definePart("spui-message-bar-title", "<slot></slot>", ":host{display:inline;font-weight:600}");
143
- }
144
- export function defineMessageBarGroup() {
145
- definePart("spui-message-bar-group", "<slot></slot>", ":host{position:relative;display:grid;gap:8px}:host([data-animate=both]) ::slotted(spui-message-bar:not([data-spui-exiting])){animation:spui-message-enter 160ms cubic-bezier(.2,0,0,1) both}::slotted(spui-message-bar[data-spui-exiting]){animation:spui-message-exit 250ms ease-in both}:host([data-animate]) ::slotted(spui-message-bar[data-spui-shifting]){animation:spui-message-shift 180ms cubic-bezier(.2,0,0,1) both}@keyframes spui-message-enter{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes spui-message-exit{to{opacity:0}}@keyframes spui-message-shift{from{transform:translateY(var(--spui-message-shift,0px))}to{transform:translateY(0)}}@media(prefers-reduced-motion:reduce){:host([data-animate=both]) ::slotted(spui-message-bar:not([data-spui-exiting])),::slotted(spui-message-bar[data-spui-exiting]),:host([data-animate]) ::slotted(spui-message-bar[data-spui-shifting]){animation:none}}", ["animate"]);
146
- }
147
- export function defineMessageBar() {
148
- if (customElements.get("spui-message-bar"))
149
- return;
150
- defineMessageBarActions();
151
- defineMessageBarBody();
152
- defineMessageBarTitle();
153
- defineMessageBarGroup();
154
- class SpuiMessageBar extends HTMLElement {
155
- static observedAttributes = ["intent", "politeness", "shape", "layout"];
156
- resizeObserver;
157
- contentObserver;
158
- reflowing = false;
159
- singleLineWidth = Number.POSITIVE_INFINITY;
160
- generatedTitleLabel;
161
- lastAnnouncement;
162
- connectedCallback() {
163
- if (!this.shadowRoot) {
164
- const shadow = this.attachShadow({ mode: "open" });
165
- const content = document.createElement("div");
166
- content.className = "content";
167
- content.part.add("content");
168
- const iconSlot = document.createElement("slot");
169
- iconSlot.name = "icon";
170
- const fallbackIcon = document.createElement("span");
171
- fallbackIcon.className = "icon";
172
- fallbackIcon.part.add("intent-icon");
173
- fallbackIcon.setAttribute("aria-hidden", "true");
174
- const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
175
- svg.setAttribute("viewBox", "0 0 20 20");
176
- svg.setAttribute("width", "20");
177
- svg.setAttribute("height", "20");
178
- svg.setAttribute("fill", "none");
179
- svg.setAttribute("stroke", "currentColor");
180
- svg.setAttribute("stroke-width", "1.7");
181
- svg.setAttribute("stroke-linecap", "round");
182
- svg.setAttribute("stroke-linejoin", "round");
183
- svg.setAttribute("focusable", "false");
184
- fallbackIcon.append(svg);
185
- iconSlot.append(fallbackIcon);
186
- iconSlot.addEventListener("slotchange", () => this.syncIcon());
187
- const childrenSlot = document.createElement("slot");
188
- childrenSlot.addEventListener("slotchange", () => { this.updateLayout(); this.updateAnnouncement(); this.updateLabel(); });
189
- content.append(iconSlot, childrenSlot);
190
- const spacerSlot = document.createElement("slot");
191
- spacerSlot.name = "bottom-reflow-spacer";
192
- const spacer = document.createElement("div");
193
- spacer.className = "reflow-spacer";
194
- spacer.part.add("bottom-reflow-spacer");
195
- spacer.setAttribute("aria-hidden", "true");
196
- spacerSlot.append(spacer);
197
- content.append(spacerSlot);
198
- const liveRegion = document.createElement("span");
199
- liveRegion.className = "announcement";
200
- liveRegion.setAttribute("aria-live", "polite");
201
- liveRegion.setAttribute("aria-atomic", "true");
202
- const style = document.createElement("style");
203
- style.textContent = `${base}:host{display:block;min-width:0;border:1px solid var(--spui-control-border,var(--spui-ui-stroke,var(--spui-semantic-body-divider,var(--colorNeutralStroke2,#edebe9))));border-radius:var(--spui-control-radius,4px);padding:12px 14px;background:var(--spui-ui-canvas,var(--colorNeutralBackground2,#f5f5f5));box-sizing:border-box;white-space:nowrap}:host([shape=rounded]){border-radius:var(--spui-card-radius,8px)}:host([shape=square]){border-radius:0}:host([intent=success]){background:var(--spui-success-surface,var(--spui-ui-success-surface,var(--spui-semantic-success-background,var(--colorPaletteGreenBackground1,#dff6dd))))}:host([intent=warning]){background:var(--spui-warning-surface,var(--spui-ui-warning-surface,var(--spui-semantic-warning-background,var(--colorPaletteYellowBackground1,#fff4ce))))}:host([intent=error]){background:var(--spui-danger-surface,var(--spui-ui-danger-surface,var(--spui-semantic-error-background,var(--colorPaletteRedBackground1,#fde7e9))))}.content{display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto;grid-template-areas:'icon body actions';align-items:center;min-width:0;gap:0 12px;line-height:1.45}.content>slot:not([name]){display:contents}.content>slot[name=icon]{grid-area:icon;display:flex;align-items:center}.content>slot[name=bottom-reflow-spacer]{grid-area:spacer}.content ::slotted(spui-message-bar-title){grid-area:body}.content ::slotted(spui-message-bar-body){grid-area:body;min-width:0;white-space:inherit}.content ::slotted(spui-message-bar-actions){grid-area:actions;min-width:0}.icon,::slotted([slot=icon]){display:inline-flex;align-items:center;justify-content:center;flex:none;vertical-align:middle;margin-inline-end:8px;color:var(--spui-message-icon-color,var(--spui-ui-accent,#0f6cbd))}:host([intent=success]) .icon{color:var(--spui-ui-success,#107c10)}:host([intent=warning]) .icon{color:var(--spui-ui-warning,#835b00)}:host([intent=error]) .icon{color:var(--spui-ui-danger,#b10e1c)}:host([data-layout=multiline]){white-space:normal}:host([data-layout=multiline]) .content{grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto auto;grid-template-areas:'icon body actions' 'spacer spacer spacer';align-items:start;row-gap:8px}:host([data-layout=multiline]) .icon{margin-inline-end:0}.reflow-spacer,::slotted([slot=bottom-reflow-spacer]){display:none}:host([data-layout=multiline]) .reflow-spacer,:host([data-layout=multiline]) ::slotted([slot=bottom-reflow-spacer]){display:block;min-height:8px;margin-block-end:8px}:host([data-spui-appearance=glass]),:host-context([data-spui-appearance=glass]){backdrop-filter:var(--spui-card-backdrop,none);border-color:var(--spui-card-border,#ffffff80)}.announcement{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(forced-colors:active){:host{border-color:CanvasText;color:CanvasText;background:Canvas}.icon,::slotted([slot=icon]){color:CanvasText}}`;
204
- shadow.append(style, content, liveRegion);
205
- }
206
- this.updateIntent();
207
- this.updateLayout();
208
- this.updateLabel();
209
- this.updateAnnouncement();
210
- this.observeLayout();
211
- const MutationObserverConstructor = this.ownerDocument.defaultView?.MutationObserver;
212
- if (MutationObserverConstructor) {
213
- this.contentObserver ??= new MutationObserverConstructor(() => { this.updateLayout(); this.updateLabel(); this.updateAnnouncement(); });
214
- this.contentObserver.observe(this, { childList: true, characterData: true, subtree: true });
215
- }
216
- }
217
- disconnectedCallback() { this.resizeObserver?.disconnect(); this.contentObserver?.disconnect(); }
218
- attributeChangedCallback() { if (this.isConnected) {
219
- this.updateIntent();
220
- this.updateLayout();
221
- this.updateLabel();
222
- this.observeLayout();
223
- } }
224
- observeLayout() {
225
- this.resizeObserver?.disconnect();
226
- const ResizeObserverConstructor = this.ownerDocument.defaultView?.ResizeObserver;
227
- if ((this.getAttribute("layout") ?? "auto") !== "auto" || !ResizeObserverConstructor)
228
- return;
229
- this.resizeObserver = new ResizeObserverConstructor(() => this.updateLayout());
230
- this.resizeObserver.observe(this);
231
- }
232
- updateLayout() {
233
- const layout = this.getAttribute("layout") ?? "auto";
234
- if (layout !== "auto")
235
- this.reflowing = layout === "multiline";
236
- else {
237
- const width = this.getBoundingClientRect().width;
238
- const scrollWidth = Math.max(this.scrollWidth, this.shadowRoot?.querySelector(".content")?.scrollWidth ?? 0);
239
- if (this.reflowing) {
240
- if (width >= this.singleLineWidth)
241
- this.reflowing = false;
242
- }
243
- else if (width < scrollWidth) {
244
- this.reflowing = true;
245
- this.singleLineWidth = scrollWidth;
246
- }
247
- }
248
- const resolved = layout === "auto" ? this.reflowing ? "multiline" : "singleline" : layout;
249
- if (this.dataset.layout !== resolved)
250
- this.dataset.layout = resolved;
251
- for (const actions of this.querySelectorAll("spui-message-bar-actions"))
252
- actions.dataset.layout = resolved;
253
- }
254
- updateLabel() {
255
- if (this.generatedTitleLabel && this.getAttribute("aria-labelledby") === this.generatedTitleLabel)
256
- this.removeAttribute("aria-labelledby");
257
- this.generatedTitleLabel = undefined;
258
- if (this.hasAttribute("aria-label") || this.hasAttribute("aria-labelledby"))
259
- return;
260
- const title = this.querySelector("spui-message-bar-title");
261
- if (!title)
262
- return;
263
- if (!title.id)
264
- title.id = `spui-message-bar-title-${++messageBarTitleSequence}`;
265
- this.generatedTitleLabel = title.id;
266
- this.setAttribute("aria-labelledby", title.id);
267
- }
268
- updateAnnouncement() {
269
- const liveRegion = this.shadowRoot?.querySelector(".announcement");
270
- if (!liveRegion || this.hasAttribute("data-spui-exiting"))
271
- return;
272
- const body = this.querySelector("spui-message-bar-body")?.textContent ?? Array.from(this.childNodes).filter(node => !(node instanceof HTMLElement && ["spui-message-bar-title", "spui-message-bar-actions"].includes(node.localName))).map(node => node.textContent ?? "").join("");
273
- const actions = this.querySelector("spui-message-bar-actions")?.textContent ?? "";
274
- const message = [body?.trim(), actions.trim()].filter(Boolean).join(",");
275
- if (message === this.lastAnnouncement)
276
- return;
277
- this.lastAnnouncement = message;
278
- liveRegion.textContent = "";
279
- queueMicrotask(() => { if (this.isConnected && liveRegion.isConnected)
280
- liveRegion.textContent = message; });
281
- }
282
- syncIcon() {
283
- const slot = this.shadowRoot?.querySelector('slot[name="icon"]');
284
- const fallback = this.shadowRoot?.querySelector(".icon");
285
- if (fallback) {
286
- const intent = this.getAttribute("intent") ?? "info";
287
- fallback.dataset.intent = intent;
288
- const svg = fallback.querySelector("svg");
289
- const paths = {
290
- info: ["M10 2.5a7.5 7.5 0 1 0 0 15a7.5 7.5 0 0 0 0-15", "M10 9v4", "M10 6.4v.1"],
291
- success: ["M10 2.5a7.5 7.5 0 1 0 0 15a7.5 7.5 0 0 0 0-15", "m6.2 10.2 2.5 2.5 5.2-5.2"],
292
- warning: ["m10 2.5 8 14H2l8-14Z", "M10 7.5v4", "M10 14.4v.1"],
293
- error: ["M6 2.5h8l3.5 7.5-3.5 7.5H6L2.5 10 6 2.5Z", "m7.5 7.5 5 5", "m12.5 7.5-5 5"]
294
- };
295
- if (svg) {
296
- svg.replaceChildren();
297
- for (const d of paths[intent] ?? paths.info) {
298
- const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
299
- path.setAttribute("d", d);
300
- svg.append(path);
301
- }
302
- }
303
- }
304
- if (slot && fallback)
305
- fallback.hidden = slot.assignedElements().length > 0;
306
- }
307
- updateIntent() {
308
- const politeness = this.getAttribute("politeness");
309
- const intent = this.getAttribute("intent") ?? "info";
310
- if (!this.hasAttribute("role"))
311
- this.setAttribute("role", "group");
312
- const liveRegion = this.shadowRoot?.querySelector(".announcement");
313
- liveRegion?.setAttribute("aria-live", politeness ?? (intent === "info" ? "polite" : "assertive"));
314
- this.syncIcon();
315
- for (const actions of this.querySelectorAll("spui-message-bar-actions")) {
316
- const layout = this.getAttribute("layout");
317
- if (layout)
318
- actions.dataset.layout = layout;
319
- else
320
- delete actions.dataset.layout;
321
- }
322
- this.updateLabel();
323
- this.updateAnnouncement();
324
- }
325
- }
326
- customElements.define("spui-message-bar", SpuiMessageBar);
327
- }
@@ -1,32 +0,0 @@
1
- export type NavItemSelectData = {
2
- value: string;
3
- href: string | null;
4
- label: string;
5
- categoryValue?: string;
6
- event: MouseEvent;
7
- type: "click";
8
- };
9
- export type NavCategoryToggleData = {
10
- value: string;
11
- categoryValue?: string;
12
- open: boolean;
13
- openCategories: string[];
14
- event: MouseEvent;
15
- type: "click";
16
- };
17
- export declare function defineNav(): void;
18
- export declare function defineNavItem(): void;
19
- export declare function defineNavSubItem(): void;
20
- export declare function defineAppItem(): void;
21
- export declare function defineAppItemStatic(): void;
22
- export declare function defineSplitNavItem(): void;
23
- export declare function defineHamburger(): void;
24
- export declare function defineNavDrawer(): void;
25
- export declare function defineNavDrawerHeader(): void;
26
- export declare function defineNavDrawerBody(): void;
27
- export declare function defineNavDrawerFooter(): void;
28
- export declare function defineNavCategory(): void;
29
- export declare function defineNavCategoryItem(): void;
30
- export declare function defineNavSubItemGroup(): void;
31
- export declare function defineNavDivider(): void;
32
- export declare function defineNavSectionHeader(): void;