@grantcodes/ui 2.15.6 → 2.16.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 (300) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/custom-elements.json +476 -346
  3. package/package.json +23 -23
  4. package/src/components/accordion/accordion-item.component.js +17 -19
  5. package/src/components/accordion/accordion-item.css +40 -44
  6. package/src/components/accordion/accordion.component.js +7 -7
  7. package/src/components/accordion/accordion.css +5 -5
  8. package/src/components/accordion/accordion.js +6 -6
  9. package/src/components/accordion/accordion.react.js +6 -6
  10. package/src/components/accordion/accordion.stories.js +10 -10
  11. package/src/components/accordion/accordion.test.js +100 -100
  12. package/src/components/accordion/index.js +6 -6
  13. package/src/components/app-bar/app-bar.component.js +86 -92
  14. package/src/components/app-bar/app-bar.css +187 -203
  15. package/src/components/app-bar/app-bar.js +3 -3
  16. package/src/components/app-bar/app-bar.react.js +9 -9
  17. package/src/components/app-bar/app-bar.stories.js +20 -20
  18. package/src/components/app-bar/app-bar.test.js +190 -237
  19. package/src/components/app-bar/index.js +1 -1
  20. package/src/components/app-bar/nav-link.component.js +7 -9
  21. package/src/components/app-bar/nav-link.css +23 -28
  22. package/src/components/app-bar/nav-link.js +3 -3
  23. package/src/components/app-bar/nav-link.react.js +6 -6
  24. package/src/components/avatar/avatar.component.js +79 -68
  25. package/src/components/avatar/avatar.css +18 -18
  26. package/src/components/avatar/avatar.js +3 -3
  27. package/src/components/avatar/avatar.react.js +6 -6
  28. package/src/components/avatar/avatar.stories.js +24 -23
  29. package/src/components/avatar/avatar.test.js +128 -84
  30. package/src/components/avatar/index.js +1 -1
  31. package/src/components/badge/badge.component.js +23 -23
  32. package/src/components/badge/badge.css +39 -52
  33. package/src/components/badge/badge.js +3 -3
  34. package/src/components/badge/badge.react.js +6 -6
  35. package/src/components/badge/badge.stories.js +23 -23
  36. package/src/components/badge/badge.test.js +53 -68
  37. package/src/components/badge/index.js +1 -1
  38. package/src/components/breadcrumb/breadcrumb.component.js +95 -96
  39. package/src/components/breadcrumb/breadcrumb.css +42 -44
  40. package/src/components/breadcrumb/breadcrumb.js +6 -9
  41. package/src/components/breadcrumb/breadcrumb.react.js +9 -12
  42. package/src/components/breadcrumb/breadcrumb.stories.js +5 -5
  43. package/src/components/breadcrumb/breadcrumb.test.js +139 -151
  44. package/src/components/breadcrumb/index.js +1 -1
  45. package/src/components/button/button.component.js +101 -103
  46. package/src/components/button/button.css +90 -94
  47. package/src/components/button/button.js +3 -3
  48. package/src/components/button/button.react.js +6 -6
  49. package/src/components/button/button.stories.js +25 -25
  50. package/src/components/button/button.test.js +324 -344
  51. package/src/components/button/index.js +1 -1
  52. package/src/components/button-group/button-group.component.js +18 -18
  53. package/src/components/button-group/button-group.css +16 -16
  54. package/src/components/button-group/button-group.js +3 -3
  55. package/src/components/button-group/button-group.react.js +6 -6
  56. package/src/components/button-group/button-group.stories.js +23 -23
  57. package/src/components/button-group/button-group.test.js +54 -54
  58. package/src/components/button-group/index.js +1 -1
  59. package/src/components/card/card.component.js +31 -33
  60. package/src/components/card/card.css +85 -85
  61. package/src/components/card/card.js +4 -4
  62. package/src/components/card/card.react.js +6 -6
  63. package/src/components/card/card.stories.js +27 -26
  64. package/src/components/card/card.test.js +56 -56
  65. package/src/components/card/index.js +1 -1
  66. package/src/components/code-preview/code-preview.component.js +47 -48
  67. package/src/components/code-preview/code-preview.css +11 -11
  68. package/src/components/code-preview/code-preview.js +3 -3
  69. package/src/components/code-preview/code-preview.react.js +6 -6
  70. package/src/components/code-preview/code-preview.stories.js +29 -29
  71. package/src/components/code-preview/code-preview.test.js +112 -135
  72. package/src/components/code-preview/index.js +1 -1
  73. package/src/components/container/container.component.js +27 -27
  74. package/src/components/container/container.css +22 -22
  75. package/src/components/container/container.js +3 -3
  76. package/src/components/container/container.react.js +6 -6
  77. package/src/components/container/container.stories.js +44 -44
  78. package/src/components/container/container.test.js +54 -66
  79. package/src/components/container/index.js +1 -1
  80. package/src/components/countdown/countdown.component.js +160 -162
  81. package/src/components/countdown/countdown.css +50 -34
  82. package/src/components/countdown/countdown.js +3 -3
  83. package/src/components/countdown/countdown.react.js +6 -6
  84. package/src/components/countdown/countdown.stories.js +34 -34
  85. package/src/components/countdown/index.js +1 -1
  86. package/src/components/cta/cta.component.js +77 -81
  87. package/src/components/cta/cta.css +24 -24
  88. package/src/components/cta/cta.js +3 -3
  89. package/src/components/cta/cta.react.js +6 -6
  90. package/src/components/cta/cta.stories.js +32 -32
  91. package/src/components/cta/index.js +1 -1
  92. package/src/components/dialog/dialog.component.js +95 -58
  93. package/src/components/dialog/dialog.css +45 -50
  94. package/src/components/dialog/dialog.js +3 -3
  95. package/src/components/dialog/dialog.react.js +6 -6
  96. package/src/components/dialog/dialog.stories.js +38 -29
  97. package/src/components/dialog/dialog.test.js +188 -102
  98. package/src/components/dialog/index.js +1 -1
  99. package/src/components/dropdown/dropdown.component.js +220 -201
  100. package/src/components/dropdown/dropdown.css +60 -84
  101. package/src/components/dropdown/dropdown.js +6 -9
  102. package/src/components/dropdown/dropdown.react.js +15 -15
  103. package/src/components/dropdown/dropdown.stories.js +10 -10
  104. package/src/components/dropdown/dropdown.test.js +211 -157
  105. package/src/components/dropdown/index.js +1 -1
  106. package/src/components/dropzone/dropzone.component.js +126 -129
  107. package/src/components/dropzone/dropzone.css +35 -37
  108. package/src/components/dropzone/dropzone.js +3 -3
  109. package/src/components/dropzone/dropzone.react.js +6 -6
  110. package/src/components/dropzone/dropzone.stories.js +28 -28
  111. package/src/components/dropzone/dropzone.test.js +91 -99
  112. package/src/components/dropzone/index.js +1 -1
  113. package/src/components/feature-list/feature-list.component.js +78 -86
  114. package/src/components/feature-list/feature-list.css +37 -37
  115. package/src/components/feature-list/feature-list.js +3 -3
  116. package/src/components/feature-list/feature-list.react.js +6 -6
  117. package/src/components/feature-list/feature-list.stories.js +86 -90
  118. package/src/components/feature-list/index.js +1 -1
  119. package/src/components/footer/footer-column.component.js +7 -7
  120. package/src/components/footer/footer-column.css +22 -22
  121. package/src/components/footer/footer.component.js +19 -19
  122. package/src/components/footer/footer.css +38 -38
  123. package/src/components/footer/footer.js +8 -8
  124. package/src/components/footer/footer.react.js +9 -9
  125. package/src/components/footer/footer.stories.js +9 -9
  126. package/src/components/footer/footer.test.js +101 -111
  127. package/src/components/footer/index.js +2 -2
  128. package/src/components/form-field/form-field.component.js +167 -125
  129. package/src/components/form-field/form-field.css +24 -24
  130. package/src/components/form-field/form-field.js +3 -3
  131. package/src/components/form-field/form-field.react.js +6 -6
  132. package/src/components/form-field/form-field.stories.js +53 -44
  133. package/src/components/form-field/form-field.test.js +280 -134
  134. package/src/components/form-field/index.js +1 -1
  135. package/src/components/gallery/gallery-image.component.js +30 -30
  136. package/src/components/gallery/gallery-image.js +3 -3
  137. package/src/components/gallery/gallery-image.react.js +6 -6
  138. package/src/components/gallery/gallery.component.js +24 -17
  139. package/src/components/gallery/gallery.css +79 -72
  140. package/src/components/gallery/gallery.js +3 -3
  141. package/src/components/gallery/gallery.react.js +6 -6
  142. package/src/components/gallery/gallery.stories.js +69 -68
  143. package/src/components/gallery/gallery.test.js +95 -88
  144. package/src/components/gallery/index.js +2 -2
  145. package/src/components/hero/hero.component.js +53 -57
  146. package/src/components/hero/hero.css +27 -27
  147. package/src/components/hero/hero.js +3 -3
  148. package/src/components/hero/hero.react.js +6 -6
  149. package/src/components/hero/hero.stories.js +39 -39
  150. package/src/components/hero/index.js +1 -1
  151. package/src/components/icon/icon.component.js +10 -10
  152. package/src/components/icon/icon.css +13 -13
  153. package/src/components/icon/icon.js +4 -4
  154. package/src/components/icon/icon.react.js +6 -6
  155. package/src/components/icon/icon.stories.js +8 -9
  156. package/src/components/icon/icon.test.js +54 -55
  157. package/src/components/icon/index.js +1 -1
  158. package/src/components/loading/index.js +1 -1
  159. package/src/components/loading/loading.component.js +41 -14
  160. package/src/components/loading/loading.css +47 -30
  161. package/src/components/loading/loading.js +4 -4
  162. package/src/components/loading/loading.react.js +6 -6
  163. package/src/components/loading/loading.stories.js +19 -18
  164. package/src/components/loading/loading.test.js +77 -54
  165. package/src/components/logo-cloud/index.js +1 -1
  166. package/src/components/logo-cloud/logo-cloud.component.js +39 -43
  167. package/src/components/logo-cloud/logo-cloud.css +31 -31
  168. package/src/components/logo-cloud/logo-cloud.js +3 -3
  169. package/src/components/logo-cloud/logo-cloud.react.js +6 -6
  170. package/src/components/logo-cloud/logo-cloud.stories.js +80 -80
  171. package/src/components/map/index.js +1 -1
  172. package/src/components/map/map.component.js +103 -107
  173. package/src/components/map/map.css +22 -22
  174. package/src/components/map/map.js +3 -3
  175. package/src/components/map/map.react.js +6 -6
  176. package/src/components/map/map.stories.js +38 -38
  177. package/src/components/media-text/index.js +1 -1
  178. package/src/components/media-text/media-text.component.js +76 -70
  179. package/src/components/media-text/media-text.css +32 -32
  180. package/src/components/media-text/media-text.js +3 -3
  181. package/src/components/media-text/media-text.react.js +6 -6
  182. package/src/components/media-text/media-text.stories.js +45 -45
  183. package/src/components/media-text/media-text.test.js +72 -0
  184. package/src/components/newsletter/index.js +1 -1
  185. package/src/components/newsletter/newsletter.component.js +56 -64
  186. package/src/components/newsletter/newsletter.css +48 -48
  187. package/src/components/newsletter/newsletter.js +3 -3
  188. package/src/components/newsletter/newsletter.react.js +6 -6
  189. package/src/components/newsletter/newsletter.stories.js +35 -35
  190. package/src/components/notice/index.js +1 -1
  191. package/src/components/notice/notice.component.js +66 -55
  192. package/src/components/notice/notice.css +37 -38
  193. package/src/components/notice/notice.js +3 -3
  194. package/src/components/notice/notice.react.js +6 -6
  195. package/src/components/notice/notice.stories.js +54 -53
  196. package/src/components/notice/notice.test.js +210 -156
  197. package/src/components/pagination/index.js +1 -1
  198. package/src/components/pagination/pagination.component.js +44 -44
  199. package/src/components/pagination/pagination.css +6 -6
  200. package/src/components/pagination/pagination.js +4 -4
  201. package/src/components/pagination/pagination.react.js +6 -6
  202. package/src/components/pagination/pagination.stories.js +20 -18
  203. package/src/components/pagination/pagination.test.js +95 -102
  204. package/src/components/person/index.js +1 -1
  205. package/src/components/person/person.component.js +29 -29
  206. package/src/components/person/person.css +17 -17
  207. package/src/components/person/person.js +4 -4
  208. package/src/components/person/person.react.js +6 -6
  209. package/src/components/person/person.stories.js +34 -33
  210. package/src/components/person/person.test.js +55 -68
  211. package/src/components/pricing/index.js +1 -1
  212. package/src/components/pricing/pricing.component.js +58 -70
  213. package/src/components/pricing/pricing.css +65 -65
  214. package/src/components/pricing/pricing.js +3 -3
  215. package/src/components/pricing/pricing.react.js +6 -6
  216. package/src/components/pricing/pricing.stories.js +96 -96
  217. package/src/components/sidebar/index.js +1 -1
  218. package/src/components/sidebar/sidebar.component.js +157 -130
  219. package/src/components/sidebar/sidebar.css +118 -115
  220. package/src/components/sidebar/sidebar.js +4 -4
  221. package/src/components/sidebar/sidebar.react.js +10 -10
  222. package/src/components/sidebar/sidebar.stories.js +10 -10
  223. package/src/components/sidebar/sidebar.test.js +250 -230
  224. package/src/components/stats/index.js +1 -1
  225. package/src/components/stats/stats.component.js +42 -50
  226. package/src/components/stats/stats.css +29 -29
  227. package/src/components/stats/stats.js +3 -3
  228. package/src/components/stats/stats.react.js +6 -6
  229. package/src/components/stats/stats.stories.js +40 -40
  230. package/src/components/tabs/index.js +2 -2
  231. package/src/components/tabs/internal/tabs-button.component.js +16 -27
  232. package/src/components/tabs/internal/tabs-button.js +3 -3
  233. package/src/components/tabs/internal/tabs-button.react.js +6 -6
  234. package/src/components/tabs/internal/tabs-item.component.js +30 -30
  235. package/src/components/tabs/tab.component.js +9 -11
  236. package/src/components/tabs/tab.js +3 -3
  237. package/src/components/tabs/tab.react.js +6 -6
  238. package/src/components/tabs/tabs.component.js +107 -109
  239. package/src/components/tabs/tabs.css +50 -59
  240. package/src/components/tabs/tabs.js +4 -4
  241. package/src/components/tabs/tabs.react.js +6 -6
  242. package/src/components/tabs/tabs.stories.js +23 -22
  243. package/src/components/tabs/tabs.test.js +201 -147
  244. package/src/components/testimonials/index.js +1 -1
  245. package/src/components/testimonials/testimonials.component.js +47 -51
  246. package/src/components/testimonials/testimonials.css +31 -31
  247. package/src/components/testimonials/testimonials.js +3 -3
  248. package/src/components/testimonials/testimonials.react.js +6 -6
  249. package/src/components/testimonials/testimonials.stories.js +49 -51
  250. package/src/components/toast/index.js +1 -1
  251. package/src/components/toast/toast.component.js +217 -148
  252. package/src/components/toast/toast.css +101 -99
  253. package/src/components/toast/toast.js +6 -9
  254. package/src/components/toast/toast.react.js +12 -12
  255. package/src/components/toast/toast.stories.js +75 -49
  256. package/src/components/toast/toast.test.js +260 -221
  257. package/src/components/tooltip/index.js +1 -1
  258. package/src/components/tooltip/tooltip.component.js +56 -49
  259. package/src/components/tooltip/tooltip.css +61 -50
  260. package/src/components/tooltip/tooltip.js +4 -4
  261. package/src/components/tooltip/tooltip.react.js +6 -6
  262. package/src/components/tooltip/tooltip.stories.js +24 -23
  263. package/src/components/tooltip/tooltip.test.js +143 -155
  264. package/src/constructor.test.js +31 -0
  265. package/src/css/base.css +1 -0
  266. package/src/css/colors.stories.js +120 -122
  267. package/src/css/elements/a.css +28 -28
  268. package/src/css/elements/forms/button.css +1 -1
  269. package/src/css/elements/forms/input.css +80 -80
  270. package/src/css/elements/forms/label.css +3 -3
  271. package/src/css/elements/media/image.css +2 -2
  272. package/src/css/elements.stories.js +48 -49
  273. package/src/css/helpers.css +8 -8
  274. package/src/css/layers.stories.js +5 -5
  275. package/src/css/reset.css +102 -102
  276. package/src/css/themes/todomap.css +1 -1
  277. package/src/css/tokens.stories.js +50 -53
  278. package/src/css/typography.css +30 -32
  279. package/src/css/typography.stories.js +92 -92
  280. package/src/css/util/focus-ring.css +12 -20
  281. package/src/css/view-transitions.css +16 -0
  282. package/src/exports.test.js +89 -105
  283. package/src/icons.js +1 -1
  284. package/src/lib/generate-id.js +1 -1
  285. package/src/lib/slot-presence-controller.js +48 -0
  286. package/src/lib/styles/all.css +38 -37
  287. package/src/lib/styles/focus-ring.css +12 -20
  288. package/src/lib/view-transition.js +42 -0
  289. package/src/lib/view-transition.test.js +105 -0
  290. package/src/main.js +29 -29
  291. package/src/pages/agency.stories.js +59 -59
  292. package/src/pages/blog-post.stories.js +48 -48
  293. package/src/pages/saas-landing.stories.js +180 -180
  294. package/src/react.js +44 -44
  295. package/src/react.test.js +42 -51
  296. package/src/test-utils/assert-helpers.js +39 -58
  297. package/src/test-utils/events.js +32 -34
  298. package/src/test-utils/fixture.js +31 -31
  299. package/src/test-utils/index.js +3 -3
  300. package/src/types.d.ts +3 -3
@@ -1,103 +1,101 @@
1
- import { html, LitElement } from "lit";
2
- import focusRingStyles from "../../lib/styles/focus-ring.css" with {
3
- type: "css",
4
- };
5
- import buttonStyles from "./button.css" with { type: "css" };
1
+ import { html, LitElement } from 'lit';
2
+ import focusRingStyles from '../../lib/styles/focus-ring.css' with { type: 'css' };
3
+ import buttonStyles from './button.css' with { type: 'css' };
6
4
 
7
5
  export class GrantCodesButton extends LitElement {
8
- // Styles are scoped to this element: they won't conflict with styles
9
- // on the main page or in other components. Styling API can be exposed
10
- // via CSS custom properties.
11
- static styles = [focusRingStyles, buttonStyles];
12
-
13
- static formAssociated = true;
14
-
15
- static properties = {
16
- href: { type: String },
17
- type: { type: String },
18
- name: { type: String },
19
- value: { type: String },
20
- disabled: { type: Boolean, reflect: true },
21
- form: { type: String, reflect: true },
22
- };
23
-
24
- constructor() {
25
- super();
26
-
27
- this.href = "";
28
- this.type = "button";
29
- this.name = "";
30
- this.value = "";
31
- // Do NOT set form="" — an empty form attribute overrides ancestor form association
32
- this._fieldsetDisabled = false;
33
-
34
- // Attach ElementInternals for form participation.
35
- // try/catch because happy-dom (DOM-shim test env) may not support attachInternals()
36
- try {
37
- this.internals = this.attachInternals();
38
- } catch (e) {
39
- this.internals = null;
40
- }
41
- this.disabled = false;
42
- }
43
-
44
- updated(changedProperties) {
45
- super.updated(changedProperties);
46
- if (this.internals) {
47
- if (changedProperties.has("name") || changedProperties.has("value")) {
48
- this.internals.setFormValue(this.name ? this.value : null);
49
- }
50
- }
51
- }
52
-
53
- connectedCallback() {
54
- super.connectedCallback();
55
- this.addEventListener("click", this._handleFormClick);
56
- }
57
-
58
- disconnectedCallback() {
59
- super.disconnectedCallback();
60
- this.removeEventListener("click", this._handleFormClick);
61
- }
62
-
63
- _handleFormClick(e) {
64
- // href mode renders a link — do not intercept form actions
65
- if (this.href) return;
66
- // Only handle form actions when we have internals and are inside a form
67
- if (!this.internals || !this.internals.form || this.disabled) return;
68
-
69
- const t = this.type.toLowerCase();
70
- if (t === "submit") {
71
- this.internals.form.requestSubmit();
72
- } else if (t === "reset") {
73
- this.internals.form.reset();
74
- }
75
- // type === "button" or any other value: no form action (default no-op)
76
- }
77
-
78
- formDisabledCallback(disabled) {
79
- this._fieldsetDisabled = disabled;
80
- this.requestUpdate();
81
- }
82
-
83
- formResetCallback() {
84
- // Called by the browser when the associated form is reset.
85
- // Reset the value to an empty string (default state).
86
- // If a future version tracks an initial value, restore it here.
87
- this.value = "";
88
- }
89
-
90
- // The render() method is called any time reactive properties change.
91
- // Return HTML in a string template literal tagged with the `html`
92
- // tag function to describe the component's internal DOM.
93
- // Expressions can set attribute values, property values, event handlers,
94
- // and child nodes/text.
95
- /** @returns {import('lit').TemplateResult} */
96
- render() {
97
- const isLink = !!this.href;
98
-
99
- if (isLink) {
100
- return html`
6
+ // Styles are scoped to this element: they won't conflict with styles
7
+ // on the main page or in other components. Styling API can be exposed
8
+ // via CSS custom properties.
9
+ static styles = [focusRingStyles, buttonStyles];
10
+
11
+ static formAssociated = true;
12
+
13
+ static properties = {
14
+ href: { type: String },
15
+ type: { type: String },
16
+ name: { type: String },
17
+ value: { type: String },
18
+ disabled: { type: Boolean, reflect: true },
19
+ form: { type: String, reflect: true },
20
+ };
21
+
22
+ constructor() {
23
+ super();
24
+
25
+ this.href = '';
26
+ this.type = 'button';
27
+ this.name = '';
28
+ this.value = '';
29
+ // Do NOT set form="" — an empty form attribute overrides ancestor form association
30
+ this._fieldsetDisabled = false;
31
+
32
+ // Attach ElementInternals for form participation.
33
+ // try/catch because happy-dom (DOM-shim test env) may not support attachInternals()
34
+ try {
35
+ this.internals = this.attachInternals();
36
+ } catch (e) {
37
+ this.internals = null;
38
+ }
39
+ this.disabled = false;
40
+ }
41
+
42
+ updated(changedProperties) {
43
+ super.updated(changedProperties);
44
+ if (this.internals) {
45
+ if (changedProperties.has('name') || changedProperties.has('value')) {
46
+ this.internals.setFormValue(this.name ? this.value : null);
47
+ }
48
+ }
49
+ }
50
+
51
+ connectedCallback() {
52
+ super.connectedCallback();
53
+ this.addEventListener('click', this._handleFormClick);
54
+ }
55
+
56
+ disconnectedCallback() {
57
+ super.disconnectedCallback();
58
+ this.removeEventListener('click', this._handleFormClick);
59
+ }
60
+
61
+ _handleFormClick(e) {
62
+ // href mode renders a link — do not intercept form actions
63
+ if (this.href) return;
64
+ // Only handle form actions when we have internals and are inside a form
65
+ if (!this.internals || !this.internals.form || this.disabled) return;
66
+
67
+ const t = this.type.toLowerCase();
68
+ if (t === 'submit') {
69
+ this.internals.form.requestSubmit();
70
+ } else if (t === 'reset') {
71
+ this.internals.form.reset();
72
+ }
73
+ // type === "button" or any other value: no form action (default no-op)
74
+ }
75
+
76
+ formDisabledCallback(disabled) {
77
+ this._fieldsetDisabled = disabled;
78
+ this.requestUpdate();
79
+ }
80
+
81
+ formResetCallback() {
82
+ // Called by the browser when the associated form is reset.
83
+ // Reset the value to an empty string (default state).
84
+ // If a future version tracks an initial value, restore it here.
85
+ this.value = '';
86
+ }
87
+
88
+ // The render() method is called any time reactive properties change.
89
+ // Return HTML in a string template literal tagged with the `html`
90
+ // tag function to describe the component's internal DOM.
91
+ // Expressions can set attribute values, property values, event handlers,
92
+ // and child nodes/text.
93
+ /** @returns {import('lit').TemplateResult} */
94
+ render() {
95
+ const isLink = !!this.href;
96
+
97
+ if (isLink) {
98
+ return html`
101
99
  <a
102
100
  class="button focus-ring"
103
101
  href=${this.href}
@@ -106,18 +104,18 @@ export class GrantCodesButton extends LitElement {
106
104
  <span><slot></slot></span>
107
105
  </a>
108
106
  `;
109
- }
107
+ }
110
108
 
111
- return html`
109
+ return html`
112
110
  <button
113
111
  class="button focus-ring"
114
112
  type="button"
115
- name=${this.name ?? ""}
116
- value=${this.value ?? ""}
113
+ name=${this.name ?? ''}
114
+ value=${this.value ?? ''}
117
115
  ?disabled=${this.disabled || this._fieldsetDisabled}
118
116
  >
119
117
  <span><slot></slot></span>
120
118
  </button>
121
119
  `;
122
- }
120
+ }
123
121
  }
@@ -2,149 +2,145 @@
2
2
  *,
3
3
  *::before,
4
4
  *::after {
5
- box-sizing: border-box;
5
+ box-sizing: border-box;
6
6
  }
7
7
 
8
8
  :host {
9
- display: block;
9
+ display: block;
10
10
  }
11
11
 
12
12
  /* Color variants */
13
13
  :host {
14
- --_button-base: var(--g-button-color-background);
15
- --_button-border: var(--g-button-color-border);
14
+ --_button-base: var(--g-button-color-background);
15
+ --_button-border: var(--g-button-color-border);
16
16
  }
17
17
  :host([color="secondary"]) {
18
- --_button-base: var(--g-button-secondary-color-background);
19
- --_button-border: var(--g-button-secondary-color-border);
18
+ --_button-base: var(--g-button-secondary-color-background);
19
+ --_button-border: var(--g-button-secondary-color-border);
20
20
  }
21
21
  :host([color="neutral"]) {
22
- --_button-base: var(--g-button-neutral-color-background);
23
- --_button-border: var(--g-button-neutral-color-border);
22
+ --_button-base: var(--g-button-neutral-color-background);
23
+ --_button-border: var(--g-button-neutral-color-border);
24
24
  }
25
25
  :host([color="danger"]) {
26
- --_button-base: var(--g-button-danger-color-background);
27
- --_button-border: var(--g-button-danger-color-border);
26
+ --_button-base: var(--g-button-danger-color-background);
27
+ --_button-border: var(--g-button-danger-color-border);
28
28
  }
29
29
 
30
30
  /* Style variants */
31
31
  :host {
32
- /* biome-ignore lint/correctness/noUnknownFunction: contrast-color is new */
33
- --_button-color: contrast-color(var(--_button-base));
34
- --_button-background: var(--_button-base);
32
+ /* biome-ignore lint/correctness/noUnknownFunction: contrast-color is new */
33
+ --_button-color: contrast-color(var(--_button-base));
34
+ --_button-background: var(--_button-base);
35
35
  }
36
36
 
37
37
  :host([variant="outline"]) {
38
- --_button-color: var(--_button-base);
39
- --_button-background: transparent;
40
- --_button-background-hover: rgb(from var(--_button-base) r g b / 0.2);
41
- --_button-background-active: rgb(from var(--_button-base) r g b / 0.25);
38
+ --_button-color: var(--_button-base);
39
+ --_button-background: transparent;
40
+ --_button-background-hover: rgb(from var(--_button-base) r g b / 0.2);
41
+ --_button-background-active: rgb(from var(--_button-base) r g b / 0.25);
42
42
  }
43
43
  :host([variant="ghost"]) {
44
- --_button-color: var(--_button-base);
45
- --_button-background: transparent;
46
- --_button-border: transparent;
47
- --_button-border-hover: transparent;
48
- --_button-border-active: transparent;
49
- --_button-background-hover: rgb(from var(--_button-base) r g b / 0.2);
50
- --_button-background-active: rgb(from var(--_button-base) r g b / 0.25);
44
+ --_button-color: var(--_button-base);
45
+ --_button-background: transparent;
46
+ --_button-border: transparent;
47
+ --_button-border-hover: transparent;
48
+ --_button-border-active: transparent;
49
+ --_button-background-hover: rgb(from var(--_button-base) r g b / 0.2);
50
+ --_button-background-active: rgb(from var(--_button-base) r g b / 0.25);
51
51
  }
52
52
 
53
53
  :host {
54
- --_button-action-tint: var(--_button-color);
55
- --_button-border-radius-start: var(--g-border-radius-md);
56
- --_button-border-radius-end: var(--g-border-radius-md);
57
- --_button-background-hover: color-mix(
58
- in oklab,
59
- var(--_button-background),
60
- var(--_button-action-tint) 10%
61
- );
62
- --_button-border-hover: color-mix(
63
- in oklab,
64
- var(--_button-border),
65
- var(--_button-action-tint) 10%
66
- );
67
- --_button-color-hover: color-mix(
68
- in oklab,
69
- var(--_button-color),
70
- var(--_button-action-tint) 10%
71
- );
72
- --_button-background-active: color-mix(
73
- in oklab,
74
- var(--_button-background-hover),
75
- var(--_button-action-tint) 10%
76
- );
77
- --_button-border-active: color-mix(
78
- in oklab,
79
- var(--_button-border-hover),
80
- var(--_button-action-tint) 10%
81
- );
82
- --_button-color-active: color-mix(
83
- in oklab,
84
- var(--_button-color-hover),
85
- var(--_button-action-tint) 10%
86
- );
54
+ --_button-action-tint: var(--_button-color);
55
+ --_button-border-radius-start: var(--g-border-radius-md);
56
+ --_button-border-radius-end: var(--g-border-radius-md);
57
+ --_button-background-hover: color-mix(
58
+ in oklab,
59
+ var(--_button-background),
60
+ var(--_button-action-tint) 10%
61
+ );
62
+ --_button-border-hover: color-mix(
63
+ in oklab,
64
+ var(--_button-border),
65
+ var(--_button-action-tint) 10%
66
+ );
67
+ --_button-color-hover: color-mix(in oklab, var(--_button-color), var(--_button-action-tint) 10%);
68
+ --_button-background-active: color-mix(
69
+ in oklab,
70
+ var(--_button-background-hover),
71
+ var(--_button-action-tint) 10%
72
+ );
73
+ --_button-border-active: color-mix(
74
+ in oklab,
75
+ var(--_button-border-hover),
76
+ var(--_button-action-tint) 10%
77
+ );
78
+ --_button-color-active: color-mix(
79
+ in oklab,
80
+ var(--_button-color-hover),
81
+ var(--_button-action-tint) 10%
82
+ );
87
83
  }
88
84
 
89
85
  .button {
90
- display: inline-flex;
91
- flex-direction: row;
92
- align-items: center;
93
- gap: var(--g-spacing-sm);
94
- background: var(--_button-background);
95
- color: var(--_button-color);
96
- border-width: var(--g-border-width-md);
97
- border-style: solid;
98
- border-color: var(--_button-border);
99
- border-start-start-radius: var(--_button-border-radius-start);
100
- border-start-end-radius: var(--_button-border-radius-end);
101
- border-end-start-radius: var(--_button-border-radius-start);
102
- border-end-end-radius: var(--_button-border-radius-end);
103
- font: var(--g-typography-body-sm-font);
104
- text-decoration: none;
105
- text-align: center;
106
- transition-property: color, border-color, background-color, outline;
86
+ display: inline-flex;
87
+ flex-direction: row;
88
+ align-items: center;
89
+ gap: var(--g-spacing-sm);
90
+ background: var(--_button-background);
91
+ color: var(--_button-color);
92
+ border-width: var(--g-border-width-md);
93
+ border-style: solid;
94
+ border-color: var(--_button-border);
95
+ border-start-start-radius: var(--_button-border-radius-start);
96
+ border-start-end-radius: var(--_button-border-radius-end);
97
+ border-end-start-radius: var(--_button-border-radius-start);
98
+ border-end-end-radius: var(--_button-border-radius-end);
99
+ font: var(--g-typography-body-sm-font);
100
+ text-decoration: none;
101
+ text-align: center;
102
+ transition-property: color, border-color, background-color, outline;
107
103
  }
108
104
 
109
105
  .button:hover,
110
106
  .button:focus-visible {
111
- color: var(--_button-color-hover);
112
- background: var(--_button-background-hover);
113
- border-color: var(--_button-border-hover);
114
- cursor: pointer;
115
- text-decoration: none;
107
+ color: var(--_button-color-hover);
108
+ background: var(--_button-background-hover);
109
+ border-color: var(--_button-border-hover);
110
+ cursor: pointer;
111
+ text-decoration: none;
116
112
  }
117
113
 
118
114
  .button:active {
119
- color: var(--_button-color-active);
120
- background: var(--_button-background-active);
121
- border-color: var(--_button-border-active);
115
+ color: var(--_button-color-active);
116
+ background: var(--_button-background-active);
117
+ border-color: var(--_button-border-active);
122
118
  }
123
119
 
124
120
  .button:active {
125
- transform: translateY(1px);
121
+ transform: translateY(1px);
126
122
  }
127
123
 
128
124
  .button[disabled] {
129
- cursor: not-allowed;
130
- filter: grayscale(70%);
131
- opacity: 0.8;
125
+ cursor: not-allowed;
126
+ filter: grayscale(70%);
127
+ opacity: 0.8;
132
128
  }
133
129
 
134
130
  /* Size variants */
135
131
  :host .button {
136
- padding-block: var(--g-spacing-sm);
137
- padding-inline: var(--g-spacing-md);
138
- font-size: var(--g-typography-font-size-sm)
132
+ padding-block: var(--g-spacing-sm);
133
+ padding-inline: var(--g-spacing-md);
134
+ font-size: var(--g-typography-font-size-sm);
139
135
  }
140
136
 
141
137
  :host([size="sm"]) .button {
142
- padding-block: var(--g-spacing-xs);
143
- padding-inline: var(--g-spacing-sm);
144
- font-size: var(--g-typography-font-size-xs)
138
+ padding-block: var(--g-spacing-xs);
139
+ padding-inline: var(--g-spacing-sm);
140
+ font-size: var(--g-typography-font-size-xs);
145
141
  }
146
142
 
147
143
  :host([size="lg"]) .button {
148
- padding-inline: var(--g-spacing-lg);
149
- font-size: var(--g-typography-font-size-md);
144
+ padding-inline: var(--g-spacing-lg);
145
+ font-size: var(--g-typography-font-size-md);
150
146
  }
@@ -1,6 +1,6 @@
1
- import { GrantCodesButton } from "./button.component.js";
1
+ import { GrantCodesButton } from './button.component.js';
2
2
 
3
- export * from "./button.component.js";
3
+ export * from './button.component.js';
4
4
  export default GrantCodesButton;
5
5
 
6
- customElements.define("grantcodes-button", GrantCodesButton);
6
+ customElements.define('grantcodes-button', GrantCodesButton);
@@ -1,9 +1,9 @@
1
- import React from "react";
2
- import { createComponent } from "@lit/react";
3
- import { GrantCodesButton } from "./button.js";
1
+ import { createComponent } from '@lit/react';
2
+ import React from 'react';
3
+ import { GrantCodesButton } from './button.js';
4
4
 
5
5
  export const Button = createComponent({
6
- tagName: "grantcodes-button",
7
- elementClass: GrantCodesButton,
8
- react: React,
6
+ tagName: 'grantcodes-button',
7
+ elementClass: GrantCodesButton,
8
+ react: React,
9
9
  });
@@ -1,20 +1,20 @@
1
- import { getStorybookHelpers } from "@wc-toolkit/storybook-helpers";
2
- import { html } from "lit/static-html.js";
3
- import "./button.js";
4
- const { events, args, argTypes, template } =
5
- getStorybookHelpers("grantcodes-button");
1
+ import { getStorybookHelpers } from '@wc-toolkit/storybook-helpers';
2
+ import { html } from 'lit/static-html.js';
3
+ import './button.js';
4
+
5
+ const { events, args, argTypes, template } = getStorybookHelpers('grantcodes-button');
6
6
 
7
7
  const meta = {
8
- title: "Components/Button",
9
- component: "grantcodes-button",
10
- args,
11
- argTypes,
12
- render: (args) => template(args, html`Button label`),
13
- parameters: {
14
- actions: {
15
- handles: events,
16
- },
17
- },
8
+ title: 'Components/Button',
9
+ component: 'grantcodes-button',
10
+ args,
11
+ argTypes,
12
+ render: (args) => template(args, html`Button label`),
13
+ parameters: {
14
+ actions: {
15
+ handles: events,
16
+ },
17
+ },
18
18
  };
19
19
 
20
20
  export default meta;
@@ -28,7 +28,7 @@ export const Button = {};
28
28
  * Different button styles
29
29
  */
30
30
  export const ButtonStyles = {
31
- render: () => html`
31
+ render: () => html`
32
32
  <div style="display: flex; gap: 1rem;">
33
33
  <div>
34
34
  <h4>Default</h4>
@@ -66,9 +66,9 @@ export const ButtonStyles = {
66
66
  * The button will not respond to clicks when disabled.
67
67
  */
68
68
  export const Disabled = {
69
- args: {
70
- disabled: true,
71
- },
69
+ args: {
70
+ disabled: true,
71
+ },
72
72
  };
73
73
 
74
74
  /**
@@ -76,10 +76,10 @@ export const Disabled = {
76
76
  * Useful for navigation actions that look like buttons.
77
77
  */
78
78
  export const AsLink = {
79
- args: {
80
- href: "https://example.com",
81
- },
82
- render: (args) => template(args, html`Link Button`),
79
+ args: {
80
+ href: 'https://example.com',
81
+ },
82
+ render: (args) => template(args, html`Link Button`),
83
83
  };
84
84
 
85
85
  /**
@@ -89,7 +89,7 @@ export const AsLink = {
89
89
  * - reset: Resets form fields
90
90
  */
91
91
  export const ButtonTypes = {
92
- render: () => html`
92
+ render: () => html`
93
93
  <div style="display: flex; gap: 1rem;">
94
94
  <grantcodes-button type="button">Button</grantcodes-button>
95
95
  <grantcodes-button type="submit">Submit</grantcodes-button>
@@ -102,7 +102,7 @@ export const ButtonTypes = {
102
102
  * Various button states for different contexts.
103
103
  */
104
104
  export const AllStates = {
105
- render: () => html`
105
+ render: () => html`
106
106
  <div style="display: flex; flex-direction: column; gap: 1rem; max-width: 300px;">
107
107
  <grantcodes-button>Normal Button</grantcodes-button>
108
108
  <grantcodes-button disabled>Disabled Button</grantcodes-button>