@phcdevworks/spectre-components 1.20.0 → 1.21.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 (350) hide show
  1. package/README.md +672 -49
  2. package/dist/accordion-item.cjs +540 -0
  3. package/dist/accordion-item.cjs.map +1 -0
  4. package/dist/accordion-item.d.cts +59 -0
  5. package/dist/accordion-item.d.ts +59 -0
  6. package/dist/accordion-item.js +537 -0
  7. package/dist/accordion-item.js.map +1 -0
  8. package/dist/accordion.cjs +468 -0
  9. package/dist/accordion.cjs.map +1 -0
  10. package/dist/accordion.d.cts +38 -0
  11. package/dist/accordion.d.ts +38 -0
  12. package/dist/accordion.js +465 -0
  13. package/dist/accordion.js.map +1 -0
  14. package/dist/alert.cjs +166 -65
  15. package/dist/alert.cjs.map +1 -1
  16. package/dist/alert.d.cts +41 -8
  17. package/dist/alert.d.ts +41 -8
  18. package/dist/alert.js +168 -67
  19. package/dist/alert.js.map +1 -1
  20. package/dist/avatar.cjs +27 -1
  21. package/dist/avatar.cjs.map +1 -1
  22. package/dist/avatar.d.cts +19 -3
  23. package/dist/avatar.d.ts +19 -3
  24. package/dist/avatar.js +27 -1
  25. package/dist/avatar.js.map +1 -1
  26. package/dist/badge.cjs +35 -2
  27. package/dist/badge.cjs.map +1 -1
  28. package/dist/badge.d.cts +31 -3
  29. package/dist/badge.d.ts +31 -3
  30. package/dist/badge.js +35 -2
  31. package/dist/badge.js.map +1 -1
  32. package/dist/breadcrumb.cjs +464 -0
  33. package/dist/breadcrumb.cjs.map +1 -0
  34. package/dist/breadcrumb.d.cts +32 -0
  35. package/dist/breadcrumb.d.ts +32 -0
  36. package/dist/breadcrumb.js +461 -0
  37. package/dist/breadcrumb.js.map +1 -0
  38. package/dist/button.cjs +32 -2
  39. package/dist/button.cjs.map +1 -1
  40. package/dist/button.d.cts +19 -3
  41. package/dist/button.d.ts +19 -3
  42. package/dist/button.js +32 -2
  43. package/dist/button.js.map +1 -1
  44. package/dist/card-bleed.cjs +458 -0
  45. package/dist/card-bleed.cjs.map +1 -0
  46. package/dist/card-bleed.d.cts +37 -0
  47. package/dist/card-bleed.d.ts +37 -0
  48. package/dist/card-bleed.js +455 -0
  49. package/dist/card-bleed.js.map +1 -0
  50. package/dist/card.cjs +27 -1
  51. package/dist/card.cjs.map +1 -1
  52. package/dist/card.d.cts +19 -3
  53. package/dist/card.d.ts +19 -3
  54. package/dist/card.js +27 -1
  55. package/dist/card.js.map +1 -1
  56. package/dist/carousel.cjs +655 -0
  57. package/dist/carousel.cjs.map +1 -0
  58. package/dist/carousel.d.cts +79 -0
  59. package/dist/carousel.d.ts +79 -0
  60. package/dist/carousel.js +652 -0
  61. package/dist/carousel.js.map +1 -0
  62. package/dist/checkbox.cjs +3 -1
  63. package/dist/checkbox.cjs.map +1 -1
  64. package/dist/checkbox.js +3 -1
  65. package/dist/checkbox.js.map +1 -1
  66. package/dist/choice-card.cjs +524 -0
  67. package/dist/choice-card.cjs.map +1 -0
  68. package/dist/choice-card.d.cts +81 -0
  69. package/dist/choice-card.d.ts +81 -0
  70. package/dist/choice-card.js +521 -0
  71. package/dist/choice-card.js.map +1 -0
  72. package/dist/container.cjs +23 -6
  73. package/dist/container.cjs.map +1 -1
  74. package/dist/container.d.cts +9 -3
  75. package/dist/container.d.ts +9 -3
  76. package/dist/container.js +23 -7
  77. package/dist/container.js.map +1 -1
  78. package/dist/datepicker.cjs +580 -0
  79. package/dist/datepicker.cjs.map +1 -0
  80. package/dist/datepicker.d.cts +78 -0
  81. package/dist/datepicker.d.ts +78 -0
  82. package/dist/datepicker.js +577 -0
  83. package/dist/datepicker.js.map +1 -0
  84. package/dist/dom-CX9bgbcQ.d.cts +3 -0
  85. package/dist/dom-CX9bgbcQ.d.ts +3 -0
  86. package/dist/dropdown.cjs +24 -0
  87. package/dist/dropdown.cjs.map +1 -1
  88. package/dist/dropdown.d.cts +3 -2
  89. package/dist/dropdown.d.ts +3 -2
  90. package/dist/dropdown.js +25 -1
  91. package/dist/dropdown.js.map +1 -1
  92. package/dist/external-auth-button.cjs +494 -0
  93. package/dist/external-auth-button.cjs.map +1 -0
  94. package/dist/external-auth-button.d.cts +71 -0
  95. package/dist/external-auth-button.d.ts +71 -0
  96. package/dist/external-auth-button.js +491 -0
  97. package/dist/external-auth-button.js.map +1 -0
  98. package/dist/fieldset.cjs +3 -1
  99. package/dist/fieldset.cjs.map +1 -1
  100. package/dist/fieldset.js +3 -1
  101. package/dist/fieldset.js.map +1 -1
  102. package/dist/file-input.cjs +371 -0
  103. package/dist/file-input.cjs.map +1 -0
  104. package/dist/file-input.d.cts +96 -0
  105. package/dist/file-input.d.ts +96 -0
  106. package/dist/file-input.js +367 -0
  107. package/dist/file-input.js.map +1 -0
  108. package/dist/footer-chip.cjs +22 -2
  109. package/dist/footer-chip.cjs.map +1 -1
  110. package/dist/footer-chip.d.cts +12 -1
  111. package/dist/footer-chip.d.ts +12 -1
  112. package/dist/footer-chip.js +22 -2
  113. package/dist/footer-chip.js.map +1 -1
  114. package/dist/footer-link.cjs +19 -1
  115. package/dist/footer-link.cjs.map +1 -1
  116. package/dist/footer-link.d.cts +12 -1
  117. package/dist/footer-link.d.ts +12 -1
  118. package/dist/footer-link.js +19 -1
  119. package/dist/footer-link.js.map +1 -1
  120. package/dist/footer.cjs +30 -1
  121. package/dist/footer.cjs.map +1 -1
  122. package/dist/footer.d.cts +2 -1
  123. package/dist/footer.d.ts +2 -1
  124. package/dist/footer.js +31 -2
  125. package/dist/footer.js.map +1 -1
  126. package/dist/{form-DpPtizpY.d.cts → form-CVO7mlDa.d.cts} +38 -9
  127. package/dist/{form-DpPtizpY.d.ts → form-CVO7mlDa.d.ts} +38 -9
  128. package/dist/grid.cjs +35 -1
  129. package/dist/grid.cjs.map +1 -1
  130. package/dist/grid.d.cts +9 -3
  131. package/dist/grid.d.ts +9 -3
  132. package/dist/grid.js +35 -2
  133. package/dist/grid.js.map +1 -1
  134. package/dist/icon-box.cjs +27 -1
  135. package/dist/icon-box.cjs.map +1 -1
  136. package/dist/icon-box.d.cts +19 -3
  137. package/dist/icon-box.d.ts +19 -3
  138. package/dist/icon-box.js +27 -1
  139. package/dist/icon-box.js.map +1 -1
  140. package/dist/index.cjs +3654 -107
  141. package/dist/index.cjs.map +1 -1
  142. package/dist/index.d.cts +26 -1
  143. package/dist/index.d.ts +26 -1
  144. package/dist/index.js +3594 -110
  145. package/dist/index.js.map +1 -1
  146. package/dist/input-group.cjs +471 -0
  147. package/dist/input-group.cjs.map +1 -0
  148. package/dist/input-group.d.cts +31 -0
  149. package/dist/input-group.d.ts +31 -0
  150. package/dist/input-group.js +468 -0
  151. package/dist/input-group.js.map +1 -0
  152. package/dist/input.cjs +96 -4
  153. package/dist/input.cjs.map +1 -1
  154. package/dist/input.d.cts +45 -6
  155. package/dist/input.d.ts +45 -6
  156. package/dist/input.js +98 -6
  157. package/dist/input.js.map +1 -1
  158. package/dist/label.cjs +3 -1
  159. package/dist/label.cjs.map +1 -1
  160. package/dist/label.js +3 -1
  161. package/dist/label.js.map +1 -1
  162. package/dist/list-group-item.cjs +367 -0
  163. package/dist/list-group-item.cjs.map +1 -0
  164. package/dist/list-group-item.d.cts +73 -0
  165. package/dist/list-group-item.d.ts +73 -0
  166. package/dist/list-group-item.js +364 -0
  167. package/dist/list-group-item.js.map +1 -0
  168. package/dist/list-group.cjs +610 -0
  169. package/dist/list-group.cjs.map +1 -0
  170. package/dist/list-group.d.cts +58 -0
  171. package/dist/list-group.d.ts +58 -0
  172. package/dist/list-group.js +607 -0
  173. package/dist/list-group.js.map +1 -0
  174. package/dist/modal.cjs +38 -35
  175. package/dist/modal.cjs.map +1 -1
  176. package/dist/modal.d.cts +1 -3
  177. package/dist/modal.d.ts +1 -3
  178. package/dist/modal.js +38 -35
  179. package/dist/modal.js.map +1 -1
  180. package/dist/nav-item.cjs +107 -4
  181. package/dist/nav-item.cjs.map +1 -1
  182. package/dist/nav-item.d.cts +52 -2
  183. package/dist/nav-item.d.ts +52 -2
  184. package/dist/nav-item.js +108 -5
  185. package/dist/nav-item.js.map +1 -1
  186. package/dist/nav.cjs +25 -1
  187. package/dist/nav.cjs.map +1 -1
  188. package/dist/nav.d.cts +2 -1
  189. package/dist/nav.d.ts +2 -1
  190. package/dist/nav.js +26 -2
  191. package/dist/nav.js.map +1 -1
  192. package/dist/offcanvas.cjs +621 -0
  193. package/dist/offcanvas.cjs.map +1 -0
  194. package/dist/offcanvas.d.cts +61 -0
  195. package/dist/offcanvas.d.ts +61 -0
  196. package/dist/offcanvas.js +617 -0
  197. package/dist/offcanvas.js.map +1 -0
  198. package/dist/pagination.cjs +452 -0
  199. package/dist/pagination.cjs.map +1 -0
  200. package/dist/pagination.d.cts +69 -0
  201. package/dist/pagination.d.ts +69 -0
  202. package/dist/pagination.js +448 -0
  203. package/dist/pagination.js.map +1 -0
  204. package/dist/popover.cjs +534 -0
  205. package/dist/popover.cjs.map +1 -0
  206. package/dist/popover.d.cts +59 -0
  207. package/dist/popover.d.ts +59 -0
  208. package/dist/popover.js +530 -0
  209. package/dist/popover.js.map +1 -0
  210. package/dist/pricing-card.cjs +121 -64
  211. package/dist/pricing-card.cjs.map +1 -1
  212. package/dist/pricing-card.d.cts +21 -7
  213. package/dist/pricing-card.d.ts +21 -7
  214. package/dist/pricing-card.js +122 -65
  215. package/dist/pricing-card.js.map +1 -1
  216. package/dist/progress.cjs +403 -0
  217. package/dist/progress.cjs.map +1 -0
  218. package/dist/progress.d.cts +70 -0
  219. package/dist/progress.d.ts +70 -0
  220. package/dist/progress.js +398 -0
  221. package/dist/progress.js.map +1 -0
  222. package/dist/prose.cjs +425 -0
  223. package/dist/prose.cjs.map +1 -0
  224. package/dist/prose.d.cts +21 -0
  225. package/dist/prose.d.ts +21 -0
  226. package/dist/prose.js +422 -0
  227. package/dist/prose.js.map +1 -0
  228. package/dist/radio.cjs +3 -1
  229. package/dist/radio.cjs.map +1 -1
  230. package/dist/radio.js +3 -1
  231. package/dist/radio.js.map +1 -1
  232. package/dist/range.cjs +381 -0
  233. package/dist/range.cjs.map +1 -0
  234. package/dist/range.d.cts +76 -0
  235. package/dist/range.d.ts +76 -0
  236. package/dist/range.js +378 -0
  237. package/dist/range.js.map +1 -0
  238. package/dist/rating.cjs +33 -0
  239. package/dist/rating.cjs.map +1 -1
  240. package/dist/rating.d.cts +38 -3
  241. package/dist/rating.d.ts +38 -3
  242. package/dist/rating.js +33 -0
  243. package/dist/rating.js.map +1 -1
  244. package/dist/section.cjs +27 -3
  245. package/dist/section.cjs.map +1 -1
  246. package/dist/section.d.cts +16 -1
  247. package/dist/section.d.ts +16 -1
  248. package/dist/section.js +27 -4
  249. package/dist/section.js.map +1 -1
  250. package/dist/select.cjs +6 -1
  251. package/dist/select.cjs.map +1 -1
  252. package/dist/select.d.cts +7 -1
  253. package/dist/select.d.ts +7 -1
  254. package/dist/select.js +6 -1
  255. package/dist/select.js.map +1 -1
  256. package/dist/sidebar-link.cjs +19 -1
  257. package/dist/sidebar-link.cjs.map +1 -1
  258. package/dist/sidebar-link.d.cts +13 -2
  259. package/dist/sidebar-link.d.ts +13 -2
  260. package/dist/sidebar-link.js +19 -1
  261. package/dist/sidebar-link.js.map +1 -1
  262. package/dist/sidebar-toggle.cjs +3 -1
  263. package/dist/sidebar-toggle.cjs.map +1 -1
  264. package/dist/sidebar-toggle.js +3 -1
  265. package/dist/sidebar-toggle.js.map +1 -1
  266. package/dist/sidebar.cjs +33 -1
  267. package/dist/sidebar.cjs.map +1 -1
  268. package/dist/sidebar.d.cts +1 -0
  269. package/dist/sidebar.d.ts +1 -0
  270. package/dist/sidebar.js +34 -2
  271. package/dist/sidebar.js.map +1 -1
  272. package/dist/spinner.cjs +2 -1
  273. package/dist/spinner.cjs.map +1 -1
  274. package/dist/spinner.d.cts +2 -2
  275. package/dist/spinner.d.ts +2 -2
  276. package/dist/spinner.js +2 -1
  277. package/dist/spinner.js.map +1 -1
  278. package/dist/stack.cjs +4 -2
  279. package/dist/stack.cjs.map +1 -1
  280. package/dist/stack.d.cts +2 -2
  281. package/dist/stack.d.ts +2 -2
  282. package/dist/stack.js +4 -2
  283. package/dist/stack.js.map +1 -1
  284. package/dist/states-Bgzwu_XZ.d.cts +9 -0
  285. package/dist/states-Bgzwu_XZ.d.ts +9 -0
  286. package/dist/stepper.cjs +495 -0
  287. package/dist/stepper.cjs.map +1 -0
  288. package/dist/stepper.d.cts +40 -0
  289. package/dist/stepper.d.ts +40 -0
  290. package/dist/stepper.js +491 -0
  291. package/dist/stepper.js.map +1 -0
  292. package/dist/switch.cjs +492 -0
  293. package/dist/switch.cjs.map +1 -0
  294. package/dist/switch.d.cts +82 -0
  295. package/dist/switch.d.ts +82 -0
  296. package/dist/switch.js +488 -0
  297. package/dist/switch.js.map +1 -0
  298. package/dist/tab-panel.cjs +465 -0
  299. package/dist/tab-panel.cjs.map +1 -0
  300. package/dist/tab-panel.d.cts +48 -0
  301. package/dist/tab-panel.d.ts +48 -0
  302. package/dist/tab-panel.js +462 -0
  303. package/dist/tab-panel.js.map +1 -0
  304. package/dist/table.cjs +506 -0
  305. package/dist/table.cjs.map +1 -0
  306. package/dist/table.d.cts +54 -0
  307. package/dist/table.d.ts +54 -0
  308. package/dist/table.js +501 -0
  309. package/dist/table.js.map +1 -0
  310. package/dist/tabs.cjs +596 -0
  311. package/dist/tabs.cjs.map +1 -0
  312. package/dist/tabs.d.cts +65 -0
  313. package/dist/tabs.d.ts +65 -0
  314. package/dist/tabs.js +592 -0
  315. package/dist/tabs.js.map +1 -0
  316. package/dist/tag.cjs +27 -1
  317. package/dist/tag.cjs.map +1 -1
  318. package/dist/tag.d.cts +19 -3
  319. package/dist/tag.d.ts +19 -3
  320. package/dist/tag.js +27 -1
  321. package/dist/tag.js.map +1 -1
  322. package/dist/testimonial.cjs +130 -64
  323. package/dist/testimonial.cjs.map +1 -1
  324. package/dist/testimonial.d.cts +23 -8
  325. package/dist/testimonial.d.ts +23 -8
  326. package/dist/testimonial.js +131 -65
  327. package/dist/testimonial.js.map +1 -1
  328. package/dist/text.cjs +65 -6
  329. package/dist/text.cjs.map +1 -1
  330. package/dist/text.d.cts +24 -3
  331. package/dist/text.d.ts +24 -3
  332. package/dist/text.js +64 -8
  333. package/dist/text.js.map +1 -1
  334. package/dist/textarea.cjs +3 -0
  335. package/dist/textarea.cjs.map +1 -1
  336. package/dist/textarea.d.cts +7 -1
  337. package/dist/textarea.d.ts +7 -1
  338. package/dist/textarea.js +3 -0
  339. package/dist/textarea.js.map +1 -1
  340. package/dist/toast.cjs +2 -1
  341. package/dist/toast.cjs.map +1 -1
  342. package/dist/toast.d.cts +2 -2
  343. package/dist/toast.d.ts +2 -2
  344. package/dist/toast.js +2 -1
  345. package/dist/toast.js.map +1 -1
  346. package/dist/tooltip.cjs.map +1 -1
  347. package/dist/tooltip.d.cts +2 -2
  348. package/dist/tooltip.d.ts +2 -2
  349. package/dist/tooltip.js.map +1 -1
  350. package/package.json +126 -11
package/dist/alert.d.cts CHANGED
@@ -1,15 +1,18 @@
1
- import { S as SpectreInputSize, a as SpectreAlertVariant } from './form-DpPtizpY.cjs';
2
- export { D as spectreAlertSizes, E as spectreAlertVariants } from './form-DpPtizpY.cjs';
1
+ import { S as SpectreInputSize, a as SpectreAlertVariant } from './form-CVO7mlDa.cjs';
2
+ export { Q as spectreAlertSizes, R as spectreAlertVariants } from './form-CVO7mlDa.cjs';
3
3
  import * as lit_html from 'lit-html';
4
- import { S as SpectreProjectableElement } from './projectable-DLOn6eaW.cjs';
5
- import './base-D0s95V2v.cjs';
4
+ import { S as SpectreBaseElement } from './base-D0s95V2v.cjs';
5
+ import { a as SpectreInteractionStateProps } from './states-Bgzwu_XZ.cjs';
6
6
  import 'lit';
7
7
 
8
- interface SpectreAlertProps {
8
+ interface SpectreAlertProps extends SpectreInteractionStateProps {
9
+ interactive?: boolean | undefined;
9
10
  ariaLabel?: string | null;
10
11
  ariaLabelledBy?: string | null;
11
12
  ariaDescribedBy?: string | null;
13
+ dismissLabel?: string | undefined;
12
14
  dismissed?: boolean | undefined;
15
+ dismissible?: boolean | undefined;
13
16
  disabled?: boolean | undefined;
14
17
  fullWidth?: boolean | undefined;
15
18
  id?: string | null | undefined;
@@ -18,12 +21,20 @@ interface SpectreAlertProps {
18
21
  title?: string | null | undefined;
19
22
  variant?: SpectreAlertVariant | undefined;
20
23
  }
21
- declare class SpectreAlertElement extends SpectreProjectableElement implements SpectreAlertProps {
24
+ declare class SpectreAlertElement extends SpectreBaseElement implements SpectreAlertProps {
22
25
  static properties: {
26
+ dismissLabel: {
27
+ attribute: string;
28
+ type: StringConstructor;
29
+ };
23
30
  dismissed: {
24
31
  type: BooleanConstructor;
25
32
  reflect: boolean;
26
33
  };
34
+ dismissible: {
35
+ type: BooleanConstructor;
36
+ reflect: boolean;
37
+ };
27
38
  disabled: {
28
39
  type: BooleanConstructor;
29
40
  reflect: boolean;
@@ -45,8 +56,30 @@ declare class SpectreAlertElement extends SpectreProjectableElement implements S
45
56
  type: StringConstructor;
46
57
  reflect: boolean;
47
58
  };
59
+ active: {
60
+ readonly type: BooleanConstructor;
61
+ readonly reflect: true;
62
+ };
63
+ focused: {
64
+ readonly type: BooleanConstructor;
65
+ readonly reflect: true;
66
+ };
67
+ hovered: {
68
+ readonly type: BooleanConstructor;
69
+ readonly reflect: true;
70
+ };
71
+ interactive: {
72
+ type: BooleanConstructor;
73
+ reflect: boolean;
74
+ };
48
75
  };
76
+ interactive: boolean | undefined;
77
+ active: boolean | undefined;
78
+ focused: boolean | undefined;
79
+ hovered: boolean | undefined;
80
+ dismissLabel: string | undefined;
49
81
  dismissed: boolean | undefined;
82
+ dismissible: boolean | undefined;
50
83
  disabled: boolean | undefined;
51
84
  fullWidth: boolean | undefined;
52
85
  loading: boolean | undefined;
@@ -56,9 +89,9 @@ declare class SpectreAlertElement extends SpectreProjectableElement implements S
56
89
  set id(value: string | null | undefined);
57
90
  get title(): string;
58
91
  set title(value: string | null | undefined);
59
- protected getContentContainer(): Element | null;
60
- protected isInternalNode(node: Node): boolean;
92
+ private readonly projection;
61
93
  protected willUpdate(changedProperties: Map<PropertyKey, unknown>): void;
94
+ private dismiss;
62
95
  private get alertClasses();
63
96
  render(): lit_html.TemplateResult<1>;
64
97
  }
package/dist/alert.d.ts CHANGED
@@ -1,15 +1,18 @@
1
- import { S as SpectreInputSize, a as SpectreAlertVariant } from './form-DpPtizpY.js';
2
- export { D as spectreAlertSizes, E as spectreAlertVariants } from './form-DpPtizpY.js';
1
+ import { S as SpectreInputSize, a as SpectreAlertVariant } from './form-CVO7mlDa.js';
2
+ export { Q as spectreAlertSizes, R as spectreAlertVariants } from './form-CVO7mlDa.js';
3
3
  import * as lit_html from 'lit-html';
4
- import { S as SpectreProjectableElement } from './projectable-D9YCo9NY.js';
5
- import './base-D0s95V2v.js';
4
+ import { S as SpectreBaseElement } from './base-D0s95V2v.js';
5
+ import { a as SpectreInteractionStateProps } from './states-Bgzwu_XZ.js';
6
6
  import 'lit';
7
7
 
8
- interface SpectreAlertProps {
8
+ interface SpectreAlertProps extends SpectreInteractionStateProps {
9
+ interactive?: boolean | undefined;
9
10
  ariaLabel?: string | null;
10
11
  ariaLabelledBy?: string | null;
11
12
  ariaDescribedBy?: string | null;
13
+ dismissLabel?: string | undefined;
12
14
  dismissed?: boolean | undefined;
15
+ dismissible?: boolean | undefined;
13
16
  disabled?: boolean | undefined;
14
17
  fullWidth?: boolean | undefined;
15
18
  id?: string | null | undefined;
@@ -18,12 +21,20 @@ interface SpectreAlertProps {
18
21
  title?: string | null | undefined;
19
22
  variant?: SpectreAlertVariant | undefined;
20
23
  }
21
- declare class SpectreAlertElement extends SpectreProjectableElement implements SpectreAlertProps {
24
+ declare class SpectreAlertElement extends SpectreBaseElement implements SpectreAlertProps {
22
25
  static properties: {
26
+ dismissLabel: {
27
+ attribute: string;
28
+ type: StringConstructor;
29
+ };
23
30
  dismissed: {
24
31
  type: BooleanConstructor;
25
32
  reflect: boolean;
26
33
  };
34
+ dismissible: {
35
+ type: BooleanConstructor;
36
+ reflect: boolean;
37
+ };
27
38
  disabled: {
28
39
  type: BooleanConstructor;
29
40
  reflect: boolean;
@@ -45,8 +56,30 @@ declare class SpectreAlertElement extends SpectreProjectableElement implements S
45
56
  type: StringConstructor;
46
57
  reflect: boolean;
47
58
  };
59
+ active: {
60
+ readonly type: BooleanConstructor;
61
+ readonly reflect: true;
62
+ };
63
+ focused: {
64
+ readonly type: BooleanConstructor;
65
+ readonly reflect: true;
66
+ };
67
+ hovered: {
68
+ readonly type: BooleanConstructor;
69
+ readonly reflect: true;
70
+ };
71
+ interactive: {
72
+ type: BooleanConstructor;
73
+ reflect: boolean;
74
+ };
48
75
  };
76
+ interactive: boolean | undefined;
77
+ active: boolean | undefined;
78
+ focused: boolean | undefined;
79
+ hovered: boolean | undefined;
80
+ dismissLabel: string | undefined;
49
81
  dismissed: boolean | undefined;
82
+ dismissible: boolean | undefined;
50
83
  disabled: boolean | undefined;
51
84
  fullWidth: boolean | undefined;
52
85
  loading: boolean | undefined;
@@ -56,9 +89,9 @@ declare class SpectreAlertElement extends SpectreProjectableElement implements S
56
89
  set id(value: string | null | undefined);
57
90
  get title(): string;
58
91
  set title(value: string | null | undefined);
59
- protected getContentContainer(): Element | null;
60
- protected isInternalNode(node: Node): boolean;
92
+ private readonly projection;
61
93
  protected willUpdate(changedProperties: Map<PropertyKey, unknown>): void;
94
+ private dismiss;
62
95
  private get alertClasses();
63
96
  render(): lit_html.TemplateResult<1>;
64
97
  }
package/dist/alert.js CHANGED
@@ -1,5 +1,5 @@
1
- import { getAlertClasses } from '@phcdevworks/spectre-ui';
2
- import { LitElement, nothing, html } from 'lit';
1
+ import { getAlertClasses, getAlertIconClasses, getAlertDismissClasses } from '@phcdevworks/spectre-ui';
2
+ import { svg, LitElement, nothing, html } from 'lit';
3
3
  import { ifDefined } from 'lit/directives/if-defined.js';
4
4
 
5
5
  // src/utils/form.ts
@@ -12,7 +12,8 @@ var spectreAlertVariants = [
12
12
  "success",
13
13
  "warning",
14
14
  "danger",
15
- "neutral"
15
+ "neutral",
16
+ "brand"
16
17
  ];
17
18
  function isAlertVariant(value) {
18
19
  return spectreAlertVariants.includes(value);
@@ -279,6 +280,28 @@ var SpectreBaseElement = class extends LitElement {
279
280
  }
280
281
  };
281
282
  SpectreBaseElement.properties = {};
283
+ var paths = {
284
+ check: svg`<path d="M3 8.5l3 3 7-7" />`,
285
+ chevronDown: svg`<path d="M4 6l4 4 4-4" />`,
286
+ chevronLeft: svg`<path d="M10 4l-4 4 4 4" />`,
287
+ chevronRight: svg`<path d="M6 4l4 4-4 4" />`,
288
+ close: svg`<path d="M4 4l8 8M12 4l-8 8" />`
289
+ };
290
+ function renderIcon(name, sizeClass = "sp-icon-sm") {
291
+ return html`<svg
292
+ aria-hidden="true"
293
+ class="${sizeClass}"
294
+ fill="none"
295
+ focusable="false"
296
+ stroke="currentColor"
297
+ stroke-linecap="round"
298
+ stroke-linejoin="round"
299
+ stroke-width="2"
300
+ viewBox="0 0 16 16"
301
+ >
302
+ ${paths[name]}
303
+ </svg>`;
304
+ }
282
305
 
283
306
  // src/utils/dom.ts
284
307
  function hasMeaningfulContent(nodes) {
@@ -293,79 +316,135 @@ function hasMeaningfulContent(nodes) {
293
316
  });
294
317
  }
295
318
 
296
- // src/utils/projectable.ts
297
- var SpectreProjectableElement = class extends SpectreBaseElement {
298
- constructor() {
299
- super(...arguments);
300
- this.projectedContent = [];
319
+ // src/utils/projection.ts
320
+ function slotOf(node) {
321
+ if (node.nodeType !== Node.ELEMENT_NODE) {
322
+ return void 0;
323
+ }
324
+ return node.getAttribute("slot") ?? void 0;
325
+ }
326
+ var ProjectionController = class {
327
+ constructor(host, internalAttributes) {
328
+ this.host = host;
329
+ this.internalAttributes = internalAttributes;
330
+ this.projected = [];
331
+ host.addController(this);
301
332
  }
302
- get hasProjectedContent() {
303
- return hasMeaningfulContent(this.projectedContent);
333
+ hostConnected() {
334
+ this.sync();
335
+ this.observe();
304
336
  }
305
- connectedCallback() {
306
- super.connectedCallback();
307
- this.syncProjectedContent();
308
- this.startContentObserver();
309
- }
310
- disconnectedCallback() {
311
- this.stopContentObserver();
312
- super.disconnectedCallback();
313
- }
314
- update(changedProperties) {
315
- this.stopContentObserver();
316
- super.update(changedProperties);
317
- this.startContentObserver();
318
- }
319
- syncProjectedContent() {
320
- const nextProjectedContent = [];
321
- const sourceNodes = [
322
- ...this.childNodes,
323
- ...this.getContentContainer()?.childNodes ?? []
337
+ hostDisconnected() {
338
+ this.disconnect();
339
+ }
340
+ hostUpdate() {
341
+ this.sync();
342
+ this.disconnect();
343
+ }
344
+ hostUpdated() {
345
+ this.observe();
346
+ }
347
+ // Every projected node in authored order, regardless of slot.
348
+ all() {
349
+ return [...this.projected];
350
+ }
351
+ // Omitting `slot` returns the nodes without a slot attribute.
352
+ nodes(slot) {
353
+ return this.projected.filter((node) => slotOf(node) === slot);
354
+ }
355
+ elements(slot) {
356
+ return this.nodes(slot).filter(
357
+ (node) => node.nodeType === Node.ELEMENT_NODE
358
+ );
359
+ }
360
+ has(slot) {
361
+ return hasMeaningfulContent(this.nodes(slot));
362
+ }
363
+ isInternalNode(node) {
364
+ return node.nodeType === Node.ELEMENT_NODE && this.internalAttributes.some(
365
+ (name) => node.hasAttribute(name)
366
+ );
367
+ }
368
+ isProjectable(node) {
369
+ if (node.nodeType === Node.COMMENT_NODE || this.isInternalNode(node)) {
370
+ return false;
371
+ }
372
+ if (node.nodeType === Node.TEXT_NODE && this.hostHasRendered) {
373
+ return Boolean(node.textContent?.trim());
374
+ }
375
+ return true;
376
+ }
377
+ get hostHasRendered() {
378
+ return this.host.hasUpdated;
379
+ }
380
+ sync() {
381
+ const next = [
382
+ .../* @__PURE__ */ new Set([
383
+ ...this.projected.filter((node) => this.host.contains(node)),
384
+ ...Array.from(this.host.childNodes).filter(
385
+ (node) => this.isProjectable(node)
386
+ )
387
+ ])
324
388
  ];
325
- sourceNodes.forEach((node) => {
326
- if (!this.isInternalNode(node) && !nextProjectedContent.includes(node)) {
327
- nextProjectedContent.push(node);
328
- }
329
- });
330
- const hasChanged = nextProjectedContent.length !== this.projectedContent.length || nextProjectedContent.some((node, index) => node !== this.projectedContent[index]);
331
- if (hasChanged) {
332
- this.projectedContent = nextProjectedContent;
389
+ const changed = next.length !== this.projected.length || next.some((node, index) => node !== this.projected[index]);
390
+ if (changed) {
391
+ this.projected = next;
333
392
  }
334
- return hasChanged;
393
+ return changed;
335
394
  }
336
- startContentObserver() {
337
- if (this.contentObserver) {
395
+ observe() {
396
+ if (this.observer || !this.host.isConnected) {
338
397
  return;
339
398
  }
340
- this.contentObserver = new MutationObserver((mutations) => {
341
- const isInternalMovement = mutations.every(
342
- (mutation) => [...mutation.removedNodes].every(
343
- (node) => this.isInternalNode(node) || this.contains(node)
344
- ) && [...mutation.addedNodes].every((node) => this.isInternalNode(node))
345
- );
346
- if (isInternalMovement) {
347
- return;
348
- }
349
- if (this.syncProjectedContent()) {
350
- this.requestUpdate();
399
+ this.observer = new MutationObserver(() => {
400
+ if (this.sync()) {
401
+ this.host.requestUpdate();
351
402
  }
352
403
  });
353
- this.contentObserver.observe(this, { childList: true });
404
+ this.observer.observe(this.host, { childList: true });
354
405
  }
355
- stopContentObserver() {
356
- this.contentObserver?.disconnect();
357
- this.contentObserver = void 0;
406
+ disconnect() {
407
+ this.observer?.disconnect();
408
+ this.observer = void 0;
358
409
  }
359
410
  };
360
- var SpectreAlertElement = class extends SpectreProjectableElement {
411
+
412
+ // src/utils/states.ts
413
+ var hoverFocusStateProperties = {
414
+ focused: { type: Boolean, reflect: true },
415
+ hovered: { type: Boolean, reflect: true }
416
+ };
417
+ var interactionStateProperties = {
418
+ ...hoverFocusStateProperties,
419
+ active: { type: Boolean, reflect: true }
420
+ };
421
+ function hoverFocusStates(element) {
422
+ return {
423
+ focused: element.focused ?? false,
424
+ hovered: element.hovered ?? false
425
+ };
426
+ }
427
+ function interactionStates(element) {
428
+ return { ...hoverFocusStates(element), active: element.active ?? false };
429
+ }
430
+ var SpectreAlertElement = class extends SpectreBaseElement {
361
431
  constructor() {
362
432
  super(...arguments);
433
+ this.interactive = false;
434
+ this.active = false;
435
+ this.focused = false;
436
+ this.hovered = false;
437
+ this.dismissLabel = "Dismiss";
363
438
  this.dismissed = false;
439
+ this.dismissible = false;
364
440
  this.disabled = false;
365
441
  this.fullWidth = false;
366
442
  this.loading = false;
367
443
  this.size = "md";
368
444
  this.variant = "info";
445
+ this.projection = new ProjectionController(this, [
446
+ "data-sp-alert-native"
447
+ ]);
369
448
  }
370
449
  get id() {
371
450
  return super.id;
@@ -379,20 +458,16 @@ var SpectreAlertElement = class extends SpectreProjectableElement {
379
458
  set title(value) {
380
459
  super.title = value;
381
460
  }
382
- getContentContainer() {
383
- return this.querySelector("[data-sp-alert-native]");
384
- }
385
- isInternalNode(node) {
386
- if (node.nodeType !== Node.ELEMENT_NODE) {
387
- return false;
388
- }
389
- const el = node;
390
- return el.hasAttribute("data-sp-alert-native");
391
- }
392
461
  willUpdate(changedProperties) {
462
+ if (changedProperties.has("dismissLabel") && !this.dismissLabel) {
463
+ this.dismissLabel = "Dismiss";
464
+ }
393
465
  if (changedProperties.has("dismissed") && this.dismissed == null) {
394
466
  this.dismissed = false;
395
467
  }
468
+ if (changedProperties.has("dismissible") && this.dismissible == null) {
469
+ this.dismissible = false;
470
+ }
396
471
  if (changedProperties.has("disabled") && this.disabled == null) {
397
472
  this.disabled = false;
398
473
  }
@@ -409,10 +484,20 @@ var SpectreAlertElement = class extends SpectreProjectableElement {
409
484
  this.size = "md";
410
485
  }
411
486
  }
487
+ dismiss() {
488
+ if (this.dismissed) {
489
+ return;
490
+ }
491
+ this.dismissed = true;
492
+ this.dispatchEvent(new CustomEvent("sp-dismiss", { bubbles: true }));
493
+ }
412
494
  get alertClasses() {
413
495
  return getAlertClasses({
496
+ interactive: this.interactive ?? false,
497
+ ...interactionStates(this),
414
498
  disabled: this.isDisabled,
415
499
  dismissed: this.dismissed ?? false,
500
+ dismissible: this.dismissible ?? false,
416
501
  fullWidth: this.fullWidth ?? false,
417
502
  loading: this.loading ?? false,
418
503
  size: this.size,
@@ -431,12 +516,28 @@ var SpectreAlertElement = class extends SpectreProjectableElement {
431
516
  role="alert"
432
517
  title="${ifDefined(this.title || void 0)}"
433
518
  >
434
- ${this.hasProjectedContent ? this.projectedContent : nothing}
519
+ ${this.projection.has("icon") ? html`<span class="${getAlertIconClasses()}"
520
+ >${this.projection.nodes("icon")}</span
521
+ >` : nothing}
522
+ ${this.projection.has() ? this.projection.nodes() : nothing}
523
+ ${this.dismissible ? html`<button
524
+ aria-label="${this.dismissLabel ?? "Dismiss"}"
525
+ class="${getAlertDismissClasses()}"
526
+ data-sp-alert-dismiss
527
+ type="button"
528
+ @click="${() => this.dismiss()}"
529
+ >
530
+ ${renderIcon("close")}
531
+ </button>` : nothing}
435
532
  </div>`;
436
533
  }
437
534
  };
438
535
  SpectreAlertElement.properties = {
536
+ interactive: { type: Boolean, reflect: true },
537
+ ...interactionStateProperties,
538
+ dismissLabel: { attribute: "dismiss-label", type: String },
439
539
  dismissed: { type: Boolean, reflect: true },
540
+ dismissible: { type: Boolean, reflect: true },
440
541
  disabled: { type: Boolean, reflect: true },
441
542
  fullWidth: { attribute: "full-width", type: Boolean, reflect: true },
442
543
  loading: { type: Boolean, reflect: true },