@redvars/peacock 3.3.3 → 3.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 (280) hide show
  1. package/dist/IndividualComponent-DUINtMGK.js +67 -0
  2. package/dist/IndividualComponent-DUINtMGK.js.map +1 -0
  3. package/dist/assets/images/empty-state/no-document.svg +11 -12
  4. package/dist/assets/images/empty-state/page.svg +15 -9
  5. package/dist/assets/styles.css +1 -1
  6. package/dist/assets/styles.css.map +1 -1
  7. package/dist/banner.js +202 -0
  8. package/dist/banner.js.map +1 -0
  9. package/dist/bottom-sheet.js +238 -0
  10. package/dist/bottom-sheet.js.map +1 -0
  11. package/dist/{button-ClzS8JLq.js → button-DMN1dPAg.js} +358 -218
  12. package/dist/button-DMN1dPAg.js.map +1 -0
  13. package/dist/button-group-CX9CUUXk.js +435 -0
  14. package/dist/button-group-CX9CUUXk.js.map +1 -0
  15. package/dist/button-group.js +11 -6
  16. package/dist/button-group.js.map +1 -1
  17. package/dist/button.js +10 -5
  18. package/dist/button.js.map +1 -1
  19. package/dist/card-content.js +29 -0
  20. package/dist/card-content.js.map +1 -0
  21. package/dist/card.js +428 -44
  22. package/dist/card.js.map +1 -1
  23. package/dist/{chart-bar-DbnXQgvS.js → chart-bar-cn6rrna-.js} +2 -2
  24. package/dist/{chart-bar-DbnXQgvS.js.map → chart-bar-cn6rrna-.js.map} +1 -1
  25. package/dist/chart-bar.js +5 -4
  26. package/dist/chart-bar.js.map +1 -1
  27. package/dist/chart-doughnut.js +2 -1
  28. package/dist/chart-doughnut.js.map +1 -1
  29. package/dist/chart-pie.js +2 -1
  30. package/dist/chart-pie.js.map +1 -1
  31. package/dist/chart-stacked-bar.js +5 -4
  32. package/dist/chart-stacked-bar.js.map +1 -1
  33. package/dist/{class-map-59YGWLnx.js → class-map-YU7g0o3B.js} +4 -10
  34. package/dist/class-map-YU7g0o3B.js.map +1 -0
  35. package/dist/clock.js +2 -1
  36. package/dist/clock.js.map +1 -1
  37. package/dist/code-editor.js +8 -6
  38. package/dist/code-editor.js.map +1 -1
  39. package/dist/code-highlighter.js +6 -4
  40. package/dist/code-highlighter.js.map +1 -1
  41. package/dist/custom-elements-jsdocs.json +6270 -5026
  42. package/dist/custom-elements.json +5763 -2049
  43. package/dist/directive-ZPhl09Yt.js +9 -0
  44. package/dist/directive-ZPhl09Yt.js.map +1 -0
  45. package/dist/dispatch-event-utils-CuEqjlPT.js +127 -0
  46. package/dist/dispatch-event-utils-CuEqjlPT.js.map +1 -0
  47. package/dist/fab-C5Nzxk0E.js +497 -0
  48. package/dist/fab-C5Nzxk0E.js.map +1 -0
  49. package/dist/fab.js +11 -0
  50. package/dist/fab.js.map +1 -0
  51. package/dist/index.js +24 -12
  52. package/dist/index.js.map +1 -1
  53. package/dist/{observe-theme-change-pALI5fmV.js → is-dark-mode-DicqGkCJ.js} +8 -3
  54. package/dist/is-dark-mode-DicqGkCJ.js.map +1 -0
  55. package/dist/notification.js +417 -0
  56. package/dist/notification.js.map +1 -0
  57. package/dist/number-counter.js +4 -3
  58. package/dist/number-counter.js.map +1 -1
  59. package/dist/observe-slot-change-BGJfgg2E.js +31 -0
  60. package/dist/observe-slot-change-BGJfgg2E.js.map +1 -0
  61. package/dist/peacock-loader.js +59 -10
  62. package/dist/peacock-loader.js.map +1 -1
  63. package/dist/property-1psGvXOq.js +10 -0
  64. package/dist/property-1psGvXOq.js.map +1 -0
  65. package/dist/search.js +452 -0
  66. package/dist/search.js.map +1 -0
  67. package/dist/{radio-b70_Ie9n.js → select-4pl4XBj7.js} +2439 -521
  68. package/dist/select-4pl4XBj7.js.map +1 -0
  69. package/dist/side-sheet.js +186 -0
  70. package/dist/side-sheet.js.map +1 -0
  71. package/dist/spread-B5cgadZl.js +32 -0
  72. package/dist/spread-B5cgadZl.js.map +1 -0
  73. package/dist/src/__base_element/BaseHyperlink.d.ts +20 -0
  74. package/dist/src/__utils/cache-fetch.d.ts +1 -0
  75. package/dist/src/__utils/is-dark-mode.d.ts +1 -0
  76. package/dist/src/__utils/is-in-viewport.d.ts +1 -0
  77. package/dist/src/__utils/observe-slot-change.d.ts +1 -0
  78. package/dist/src/__utils/sanitize-svg.d.ts +1 -0
  79. package/dist/src/__utils/throttle.d.ts +4 -0
  80. package/dist/src/accordion/accordion-item.d.ts +33 -9
  81. package/dist/src/accordion/accordion.d.ts +21 -5
  82. package/dist/src/banner/banner.d.ts +47 -0
  83. package/dist/src/banner/index.d.ts +1 -0
  84. package/dist/src/bottom-sheet/bottom-sheet.d.ts +42 -0
  85. package/dist/src/bottom-sheet/index.d.ts +1 -0
  86. package/dist/src/button/BaseButton.d.ts +7 -13
  87. package/dist/src/button/button/button.d.ts +4 -0
  88. package/dist/src/button/button-group/button-group.d.ts +32 -3
  89. package/dist/src/button/icon-button/icon-button.d.ts +4 -0
  90. package/dist/src/card/card-content.d.ts +15 -0
  91. package/dist/src/card/card.d.ts +37 -3
  92. package/dist/src/card/index.d.ts +1 -0
  93. package/dist/src/container/container.d.ts +1 -1
  94. package/dist/src/empty-state/empty-state.d.ts +1 -1
  95. package/dist/src/fab/fab.d.ts +111 -0
  96. package/dist/src/fab/index.d.ts +1 -0
  97. package/dist/src/focus-ring/focus-ring.d.ts +4 -1
  98. package/dist/src/index.d.ts +11 -1
  99. package/dist/src/link/link.d.ts +3 -10
  100. package/dist/src/menu/menu/menu.d.ts +4 -2
  101. package/dist/src/menu/menu-item/menu-item.d.ts +0 -1
  102. package/dist/src/menu/sub-menu/sub-menu.d.ts +1 -0
  103. package/dist/src/notification/index.d.ts +1 -0
  104. package/dist/src/notification/notification.d.ts +69 -0
  105. package/dist/src/pagination/pagination.d.ts +8 -1
  106. package/dist/src/ripple/ripple.d.ts +19 -3
  107. package/dist/src/search/index.d.ts +1 -0
  108. package/dist/src/search/search.d.ts +76 -0
  109. package/dist/src/segmented-button/index.d.ts +2 -0
  110. package/dist/src/segmented-button/segmented-button-group.d.ts +46 -0
  111. package/dist/src/segmented-button/segmented-button.d.ts +65 -0
  112. package/dist/src/select/index.d.ts +3 -0
  113. package/dist/src/select/option.d.ts +55 -0
  114. package/dist/src/select/select.d.ts +114 -0
  115. package/dist/src/side-sheet/index.d.ts +1 -0
  116. package/dist/src/side-sheet/side-sheet.d.ts +41 -0
  117. package/dist/src/slider/slider.d.ts +4 -0
  118. package/dist/src/snackbar/snackbar.d.ts +14 -1
  119. package/dist/src/tabs/tab-group.d.ts +0 -1
  120. package/dist/src/tabs/tab.d.ts +8 -2
  121. package/dist/src/tabs/tabs.d.ts +13 -1
  122. package/dist/src/toolbar/index.d.ts +1 -0
  123. package/dist/src/toolbar/toolbar.d.ts +86 -0
  124. package/dist/state-DwbEjqVk.js +10 -0
  125. package/dist/state-DwbEjqVk.js.map +1 -0
  126. package/dist/{style-map-DcB52w-l.js → style-map-DVmWOuYy.js} +3 -3
  127. package/dist/{style-map-DcB52w-l.js.map → style-map-DVmWOuYy.js.map} +1 -1
  128. package/dist/test/search.test.d.ts +1 -0
  129. package/dist/test/toolbar.test.d.ts +1 -0
  130. package/dist/throttle-C7ZAPqtu.js +24 -0
  131. package/dist/throttle-C7ZAPqtu.js.map +1 -0
  132. package/dist/toolbar.js +306 -0
  133. package/dist/toolbar.js.map +1 -0
  134. package/dist/tsconfig.tsbuildinfo +1 -1
  135. package/dist/{unsafe-html-C2r3PyzF.js → unsafe-html-BsGUjx94.js} +3 -3
  136. package/dist/{unsafe-html-C2r3PyzF.js.map → unsafe-html-BsGUjx94.js.map} +1 -1
  137. package/package.json +1 -1
  138. package/readme.md +2 -2
  139. package/scss/styles.scss +4 -0
  140. package/src/__base_element/BaseHyperlink.ts +42 -0
  141. package/src/__base_element/README.md +19 -0
  142. package/src/__utils/cache-fetch.ts +65 -0
  143. package/src/{utils → __utils}/dispatch-event-utils.ts +1 -0
  144. package/src/__utils/is-dark-mode.ts +3 -0
  145. package/src/__utils/is-in-viewport.ts +6 -0
  146. package/src/__utils/observe-slot-change.ts +38 -0
  147. package/src/__utils/sanitize-svg.ts +27 -0
  148. package/src/__utils/throttle.ts +27 -0
  149. package/src/accordion/accordion-item.scss +136 -65
  150. package/src/accordion/accordion-item.ts +117 -44
  151. package/src/accordion/accordion.scss +24 -5
  152. package/src/accordion/accordion.ts +29 -23
  153. package/src/accordion/demo/index.html +74 -35
  154. package/src/banner/banner.scss +87 -0
  155. package/src/banner/banner.ts +107 -0
  156. package/src/banner/index.ts +1 -0
  157. package/src/bottom-sheet/bottom-sheet.scss +88 -0
  158. package/src/bottom-sheet/bottom-sheet.ts +135 -0
  159. package/src/bottom-sheet/index.ts +1 -0
  160. package/src/button/BaseButton.ts +26 -30
  161. package/src/button/button/button-colors.scss +90 -19
  162. package/src/button/button/button-sizes.scss +39 -19
  163. package/src/button/button/button.scss +117 -116
  164. package/src/button/button/button.ts +29 -6
  165. package/src/button/button-group/button-group.scss +25 -22
  166. package/src/button/button-group/button-group.ts +122 -5
  167. package/src/button/icon-button/icon-button-sizes.scss +35 -15
  168. package/src/button/icon-button/icon-button.ts +25 -12
  169. package/src/card/card-colors.scss +10 -0
  170. package/src/card/card-content.ts +26 -0
  171. package/src/card/card.scss +221 -41
  172. package/src/card/card.ts +251 -8
  173. package/src/card/index.ts +1 -0
  174. package/src/chart-bar/chart-bar.ts +1 -1
  175. package/src/chart-bar/chart-stacked-bar.ts +3 -1
  176. package/src/chart-doughnut/chart-doughnut.ts +1 -1
  177. package/src/chart-pie/chart-pie.ts +1 -1
  178. package/src/checkbox/checkbox.ts +1 -1
  179. package/src/clock/clock.ts +1 -1
  180. package/src/code-editor/code-editor.ts +5 -5
  181. package/src/code-highlighter/code-highlighter.ts +2 -2
  182. package/src/container/container.ts +1 -1
  183. package/src/date-picker/date-picker.ts +5 -2
  184. package/src/divider/divider.ts +3 -1
  185. package/src/empty-state/empty-state.scss +9 -3
  186. package/src/empty-state/empty-state.ts +2 -2
  187. package/src/fab/fab-colors.scss +49 -0
  188. package/src/fab/fab-sizes.scss +47 -0
  189. package/src/fab/fab.scss +137 -0
  190. package/src/fab/fab.ts +285 -0
  191. package/src/fab/index.ts +1 -0
  192. package/src/field/field.ts +3 -1
  193. package/src/focus-ring/focus-ring.ts +37 -19
  194. package/src/icon/datasource.ts +1 -1
  195. package/src/icon/icon.ts +3 -1
  196. package/src/image/image.ts +3 -2
  197. package/src/index.ts +12 -1
  198. package/src/input/input.ts +5 -2
  199. package/src/link/link.ts +2 -15
  200. package/src/menu/menu/menu.scss +31 -3
  201. package/src/menu/menu/menu.ts +30 -6
  202. package/src/menu/menu-item/menu-item.scss +1 -0
  203. package/src/menu/menu-item/menu-item.ts +1 -9
  204. package/src/menu/sub-menu/sub-menu.ts +1 -0
  205. package/src/notification/index.ts +1 -0
  206. package/src/notification/notification.scss +201 -0
  207. package/src/notification/notification.ts +206 -0
  208. package/src/number-counter/number-counter.ts +3 -1
  209. package/src/number-field/number-field.ts +4 -2
  210. package/src/pagination/pagination.scss +33 -24
  211. package/src/pagination/pagination.ts +113 -60
  212. package/src/peacock-loader.ts +48 -0
  213. package/src/radio/radio.ts +3 -1
  214. package/src/ripple/ripple.ts +19 -3
  215. package/src/search/index.ts +1 -0
  216. package/src/search/search-colors.scss +14 -0
  217. package/src/search/search.scss +204 -0
  218. package/src/search/search.ts +240 -0
  219. package/src/segmented-button/index.ts +2 -0
  220. package/src/segmented-button/segmented-button-group.scss +21 -0
  221. package/src/segmented-button/segmented-button-group.ts +110 -0
  222. package/src/segmented-button/segmented-button.scss +115 -0
  223. package/src/segmented-button/segmented-button.ts +175 -0
  224. package/src/select/index.ts +3 -0
  225. package/src/select/option.ts +109 -0
  226. package/src/select/select.scss +125 -0
  227. package/src/select/select.ts +520 -0
  228. package/src/side-sheet/index.ts +1 -0
  229. package/src/side-sheet/side-sheet.scss +79 -0
  230. package/src/side-sheet/side-sheet.ts +100 -0
  231. package/src/slider/slider.scss +19 -1
  232. package/src/slider/slider.ts +30 -19
  233. package/src/snackbar/snackbar.scss +62 -31
  234. package/src/snackbar/snackbar.ts +92 -12
  235. package/src/switch/switch.ts +3 -1
  236. package/src/table/table.ts +3 -1
  237. package/src/tabs/demo/index.html +90 -0
  238. package/src/tabs/tab-group.ts +0 -3
  239. package/src/tabs/tab.scss +237 -25
  240. package/src/tabs/tab.ts +91 -14
  241. package/src/tabs/tabs.scss +37 -3
  242. package/src/tabs/tabs.ts +118 -2
  243. package/src/textarea/textarea.ts +4 -2
  244. package/src/time-picker/time-picker.ts +4 -2
  245. package/src/toolbar/index.ts +1 -0
  246. package/src/toolbar/toolbar-colors.scss +16 -0
  247. package/src/toolbar/toolbar.scss +165 -0
  248. package/src/toolbar/toolbar.ts +137 -0
  249. package/dist/IndividualComponent-Dt5xirYG.js +0 -73
  250. package/dist/IndividualComponent-Dt5xirYG.js.map +0 -1
  251. package/dist/button-ClzS8JLq.js.map +0 -1
  252. package/dist/button-group-BMS5WvaF.js +0 -292
  253. package/dist/button-group-BMS5WvaF.js.map +0 -1
  254. package/dist/chart-donut.js +0 -309
  255. package/dist/chart-donut.js.map +0 -1
  256. package/dist/class-map-59YGWLnx.js.map +0 -1
  257. package/dist/directive-Cuw6h7YA.js +0 -9
  258. package/dist/directive-Cuw6h7YA.js.map +0 -1
  259. package/dist/dispatch-event-utils-B4odODQf.js +0 -277
  260. package/dist/dispatch-event-utils-B4odODQf.js.map +0 -1
  261. package/dist/observe-theme-change-pALI5fmV.js.map +0 -1
  262. package/dist/radio-b70_Ie9n.js.map +0 -1
  263. package/dist/src/chart-donut/chart-donut.d.ts +0 -53
  264. package/dist/src/chart-donut/index.d.ts +0 -1
  265. package/dist/src/styleMixins.css.d.ts +0 -9
  266. package/dist/src/utils.d.ts +0 -9
  267. package/src/chart-donut/chart-donut.scss +0 -37
  268. package/src/chart-donut/chart-donut.ts +0 -287
  269. package/src/chart-donut/demo/index.html +0 -51
  270. package/src/chart-donut/index.ts +0 -1
  271. package/src/styleMixins.css.ts +0 -55
  272. package/src/utils.ts +0 -193
  273. /package/dist/src/{spread.d.ts → __directive/spread.d.ts} +0 -0
  274. /package/dist/src/{utils → __utils}/copy-to-clipboard.d.ts +0 -0
  275. /package/dist/src/{utils → __utils}/dispatch-event-utils.d.ts +0 -0
  276. /package/dist/src/{utils → __utils}/observe-theme-change.d.ts +0 -0
  277. /package/dist/test/{card.test.d.ts → banner.test.d.ts} +0 -0
  278. /package/src/{spread.ts → __directive/spread.ts} +0 -0
  279. /package/src/{utils → __utils}/copy-to-clipboard.ts +0 -0
  280. /package/src/{utils → __utils}/observe-theme-change.ts +0 -0
@@ -1,10 +1,15 @@
1
1
  @use '../../../scss/mixin';
2
2
 
3
- .button.size-xs,
4
- .button.size-extra-small {
5
- --_button-height: 2rem;
3
+
4
+ :host([size='xs']),
5
+ :host([size='extra-small']) {
6
+ --button-height: 2rem;
7
+ }
8
+
9
+ :host([size='xs']) .button,
10
+ :host([size='extra-small']) .button {
6
11
  --_button-icon-size: 1rem;
7
- --_container-padding: 0.75rem;
12
+ --_button_container-padding: 0.75rem;
8
13
 
9
14
  font-size: 0.875rem !important;
10
15
  font-weight: var(--font-weight-medium) !important;
@@ -13,11 +18,15 @@
13
18
  }
14
19
 
15
20
 
16
- .button.size-sm,
17
- .button.size-small {
18
- --_button-height: 2.5rem;
21
+ :host([size='sm']),
22
+ :host([size='small']) {
23
+ --button-height: 2.5rem;
24
+ }
25
+
26
+ :host([size='sm']) .button,
27
+ :host([size='small']) .button {
19
28
  --_button-icon-size: 1.25rem;
20
- --_container-padding: 1rem;
29
+ --_button_container-padding: 1rem;
21
30
  --_button-icon-label-spacing: 0.5rem;
22
31
 
23
32
  font-size: 0.875rem !important;
@@ -26,11 +35,15 @@
26
35
  letter-spacing: 0.1px !important;
27
36
  }
28
37
 
29
- .button.size-md,
30
- .button.size-medium {
31
- --_button-height: 3.5rem;
38
+ :host([size='md']),
39
+ :host([size='medium']) {
40
+ --button-height: 3.5rem;
41
+ }
42
+
43
+ :host([size='md']) .button,
44
+ :host([size='medium']) .button {
32
45
  --_button-icon-size: 1.5rem;
33
- --_container-padding: 1.5rem;
46
+ --_button_container-padding: 1.5rem;
34
47
 
35
48
  font-size: 1rem !important;
36
49
  font-weight: var(--font-weight-medium) !important;
@@ -38,11 +51,15 @@
38
51
  letter-spacing: 0.15px !important;
39
52
  }
40
53
 
41
- .button.size-lg,
42
- .button.size-large {
43
- --_button-height: 6rem;
54
+ :host([size='lg']),
55
+ :host([size='large']) {
56
+ --button-height: 6rem;
57
+ }
58
+
59
+ :host([size='lg']) .button,
60
+ :host([size='large']) .button {
44
61
  --_button-icon-size: 2rem;
45
- --_container-padding: 3rem;
62
+ --_button_container-padding: 3rem;
46
63
 
47
64
  font-size: 1.5rem !important;
48
65
  font-weight: var(--font-weight-regular) !important;
@@ -50,10 +67,13 @@
50
67
  letter-spacing: 0 !important;
51
68
  }
52
69
 
53
- .button.size-xl {
54
- --_button-height: 8.5rem;
70
+ :host([size='xl']) {
71
+ --button-height: 8.5rem;
72
+ }
73
+
74
+ :host([size='xl']) .button {
55
75
  --_button-icon-size: 2.5rem;
56
- --_container-padding: 4rem;
76
+ --_button_container-padding: 4rem;
57
77
 
58
78
  font-size: 2rem !important;
59
79
  font-weight: var(--font-weight-regular) !important;
@@ -5,17 +5,17 @@
5
5
 
6
6
  :host {
7
7
  display: inline-flex;
8
- --z-index-button: 0;
9
8
 
10
9
 
11
10
  --button-height: unset;
12
11
  --button-icon-size: unset;
13
- --button-container-shape: unset;
12
+ --button-container-padding: unset;
13
+ --button-container-shape: var(--shape-corner-medium);
14
14
  --button-container-shape-start-start: unset;
15
15
  --button-container-shape-start-end: unset;
16
16
  --button-container-shape-end-start: unset;
17
17
  --button-container-shape-end-end: unset;
18
- --button-container-shape-variant: unset;
18
+ --button-container-shape-variant: squircle;
19
19
  }
20
20
 
21
21
  /**
@@ -24,7 +24,7 @@
24
24
  */
25
25
  slot::slotted(*) {
26
26
  --icon-size: var(--button-icon-size, var(--_button-icon-size));
27
- --icon-color: var(--_label-text-color);
27
+ --icon-color: var(--_button_label-text-color);
28
28
  }
29
29
 
30
30
  /*
@@ -45,32 +45,33 @@ slot::slotted(*) {
45
45
  flex-direction: column;
46
46
  align-items: center;
47
47
  justify-content: center;
48
- height: var(--button-height, var(--_button-height));
49
- padding: 0 var(--_container-padding);
48
+ height: var(--button-height);
49
+ padding: 0 var(--button-container-padding, var(--_button_container-padding));
50
50
  width: 100%;
51
51
  font-family: var(--font-family-sans) !important;
52
52
  cursor: pointer;
53
53
 
54
- --_container-shape-start-start: var(--button-container-shape-start-start, var(--button-container-shape, var(--shape-corner-medium)));
55
- --_container-shape-start-end: var(--button-container-shape-start-end, var(--button-container-shape, var(--shape-corner-medium)));
56
- --_container-shape-end-start: var(--button-container-shape-end-start, var(--button-container-shape, var(--shape-corner-medium)));
57
- --_container-shape-end-end: var(--button-container-shape-end-end, var(--button-container-shape, var(--shape-corner-medium)));
58
- --_container-corner-shape-variant: var(--button-container-shape-variant, squircle);
54
+ --_button_container-shape-start-start: var(--button-container-shape-start-start, var(--button-container-shape));
55
+ --_button_container-shape-start-end: var(--button-container-shape-start-end, var(--button-container-shape));
56
+ --_button_container-shape-end-start: var(--button-container-shape-end-start, var(--button-container-shape));
57
+ --_button_container-shape-end-end: var(--button-container-shape-end-end, var(--button-container-shape));
58
+ --_button_container-corner-shape-variant: var(--button-container-shape-variant);
59
59
 
60
60
 
61
61
  .button-content {
62
62
  display: flex;
63
63
  align-items: center;
64
64
  justify-content: center;
65
+ pointer-events: none;
65
66
  gap: var(--_button-icon-label-spacing);
66
67
  width: 100%;
67
68
  height: 100%;
68
69
  z-index: 0;
69
70
 
70
- color: var(--_label-text-color);
71
- opacity: var(--_label-text-opacity, 1);
71
+ color: var(--_button_label-text-color);
72
+ opacity: var(--_button_label-text-opacity, 1);
72
73
  --icon-size: var(--button-icon-size, var(--_button-icon-size));
73
- --icon-color: var(--_label-text-color);
74
+ --icon-color: var(--_button_label-text-color);
74
75
 
75
76
  .slot-container {
76
77
  display: none;
@@ -87,21 +88,21 @@ slot::slotted(*) {
87
88
  */
88
89
  .focus-ring {
89
90
  z-index: 2;
90
- --focus-ring-container-shape-start-start: var(--_container-shape-start-start);
91
- --focus-ring-container-shape-start-end: var(--_container-shape-start-end);
92
- --focus-ring-container-shape-end-start: var(--_container-shape-end-start);
93
- --focus-ring-container-shape-end-end: var(--_container-shape-end-end);
94
- --focus-ring-container-shape-variant: var(--_container-corner-shape-variant);
91
+ --focus-ring-container-shape-start-start: var(--_button_container-shape-start-start);
92
+ --focus-ring-container-shape-start-end: var(--_button_container-shape-start-end);
93
+ --focus-ring-container-shape-end-start: var(--_button_container-shape-end-start);
94
+ --focus-ring-container-shape-end-end: var(--_button_container-shape-end-end);
95
+ --focus-ring-container-shape-variant: var(--_button_container-corner-shape-variant);
95
96
  }
96
97
 
97
98
  .ripple {
98
- border-start-start-radius: var(--_container-shape-start-start);
99
- border-start-end-radius: var(--_container-shape-start-end);
100
- border-end-start-radius: var(--_container-shape-end-start);
101
- border-end-end-radius: var(--_container-shape-end-end);
102
- corner-shape: var(--_container-corner-shape-variant);
103
- --ripple-state-opacity: var(--_container-state-opacity, 0);
104
- --ripple-pressed-color: var(--_container-state-color);
99
+ border-start-start-radius: var(--_button_container-shape-start-start);
100
+ border-start-end-radius: var(--_button_container-shape-start-end);
101
+ border-end-start-radius: var(--_button_container-shape-end-start);
102
+ border-end-end-radius: var(--_button_container-shape-end-end);
103
+ corner-shape: var(--_button_container-corner-shape-variant);
104
+ --ripple-state-opacity: var(--_button_container-state-opacity, 0);
105
+ --ripple-pressed-color: var(--_button_container-state-color);
105
106
  }
106
107
 
107
108
  .background {
@@ -110,14 +111,14 @@ slot::slotted(*) {
110
111
  left: 0;
111
112
  width: 100%;
112
113
  height: 100%;
113
- background-color: var(--_container-color);
114
- opacity: var(--_container-opacity, 1);
115
-
116
- border-start-start-radius: var(--_container-shape-start-start);
117
- border-start-end-radius: var(--_container-shape-start-end);
118
- border-end-start-radius: var(--_container-shape-end-start);
119
- border-end-end-radius: var(--_container-shape-end-end);
120
- corner-shape: var(--_container-corner-shape-variant);
114
+ background-color: var(--_button_container-color);
115
+ opacity: var(--_button_container-opacity, 1);
116
+
117
+ border-start-start-radius: var(--_button_container-shape-start-start);
118
+ border-start-end-radius: var(--_button_container-shape-start-end);
119
+ border-end-start-radius: var(--_button_container-shape-end-start);
120
+ border-end-end-radius: var(--_button_container-shape-end-end);
121
+ corner-shape: var(--_button_container-corner-shape-variant);
121
122
  pointer-events: none;
122
123
  }
123
124
 
@@ -129,32 +130,32 @@ slot::slotted(*) {
129
130
  position: absolute;
130
131
  top: 0;
131
132
  left: 0;
132
- --skeleton-container-shape-start-start: var(--_container-shape-start-start);
133
- --skeleton-container-shape-start-end: var(--_container-shape-start-end);
134
- --skeleton-container-shape-end-start: var(--_container-shape-end-start);
135
- --skeleton-container-shape-end-end: var(--_container-shape-end-end);
136
- --skeleton-container-shape-variant: var(--_container-corner-shape-variant);
133
+ --skeleton-container-shape-start-start: var(--_button_container-shape-start-start);
134
+ --skeleton-container-shape-start-end: var(--_button_container-shape-start-end);
135
+ --skeleton-container-shape-end-start: var(--_button_container-shape-end-start);
136
+ --skeleton-container-shape-end-end: var(--_button_container-shape-end-end);
137
+ --skeleton-container-shape-variant: var(--_button_container-corner-shape-variant);
137
138
  }
138
139
 
139
140
  .elevation {
140
- --elevation-level: var(--_container-elevation-level);
141
+ --elevation-level: var(--_button_container-elevation-level);
141
142
  transition-duration: 280ms;
142
- --elevation-container-shape-start-start: var(--_container-shape-start-start);
143
- --elevation-container-shape-start-end: var(--_container-shape-start-end);
144
- --elevation-container-shape-end-start: var(--_container-shape-end-start);
145
- --elevation-container-shape-end-end: var(--_container-shape-end-end);
146
- --elevation-container-shape-variant: var(--_container-corner-shape-variant);
143
+ --elevation-container-shape-start-start: var(--_button_container-shape-start-start);
144
+ --elevation-container-shape-start-end: var(--_button_container-shape-start-end);
145
+ --elevation-container-shape-end-start: var(--_button_container-shape-end-start);
146
+ --elevation-container-shape-end-end: var(--_button_container-shape-end-end);
147
+ --elevation-container-shape-variant: var(--_button_container-corner-shape-variant);
147
148
  }
148
149
 
149
150
  .neo-background {
150
151
  display: none;
151
152
  position: absolute;
152
153
  background: var(--color-inverse-surface);
153
- border-start-start-radius: var(--_container-shape-start-start);
154
- border-start-end-radius: var(--_container-shape-start-end);
155
- border-end-start-radius: var(--_container-shape-end-start);
156
- border-end-end-radius: var(--_container-shape-end-end);
157
- corner-shape: var(--_container-corner-shape-variant);
154
+ border-start-start-radius: var(--_button_container-shape-start-start);
155
+ border-start-end-radius: var(--_button_container-shape-start-end);
156
+ border-end-start-radius: var(--_button_container-shape-end-start);
157
+ border-end-end-radius: var(--_button_container-shape-end-end);
158
+ corner-shape: var(--_button_container-corner-shape-variant);
158
159
  width: 100%;
159
160
  height: 100%;
160
161
  pointer-events: none;
@@ -169,13 +170,13 @@ slot::slotted(*) {
169
170
  width: 100%;
170
171
  height: 100%;
171
172
  pointer-events: none;
172
- border: var(--_outline-width) solid var(--_outline-color);
173
- opacity: var(--_outline-opacity, 1);
174
- border-start-start-radius: var(--_container-shape-start-start);
175
- border-start-end-radius: var(--_container-shape-start-end);
176
- border-end-start-radius: var(--_container-shape-end-start);
177
- border-end-end-radius: var(--_container-shape-end-end);
178
- corner-shape: var(--_container-corner-shape-variant);
173
+ border: var(--_button_outline-width) solid var(--_button_outline-color);
174
+ opacity: var(--_button_outline-opacity, 1);
175
+ border-start-start-radius: var(--_button_container-shape-start-start);
176
+ border-start-end-radius: var(--_button_container-shape-start-end);
177
+ border-end-start-radius: var(--_button_container-shape-end-start);
178
+ border-end-end-radius: var(--_button_container-shape-end-end);
179
+ corner-shape: var(--_button_container-corner-shape-variant);
179
180
  }
180
181
 
181
182
 
@@ -221,27 +222,27 @@ slot::slotted(*) {
221
222
  */
222
223
 
223
224
  .button.variant-elevated {
224
- --_container-color: var(--elevated-button-container-color);
225
- --_label-text-color: var(--elevated-button-label-text-color);
226
- --_container-elevation-level: 1;
225
+ --_button_container-color: var(--elevated-button-container-color);
226
+ --_button_label-text-color: var(--elevated-button-label-text-color);
227
+ --_button_container-elevation-level: 1;
227
228
 
228
- --_container-state-color: var(--_label-text-color);
229
+ --_button_container-state-color: var(--_button_label-text-color);
229
230
 
230
231
  &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
231
- --_container-elevation-level: 2;
232
- --_container-state-opacity: 0.08;
232
+ --_button_container-elevation-level: 2;
233
+ --_button_container-state-opacity: 0.08;
233
234
  }
234
235
 
235
236
  &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
236
- --_container-elevation-level: 1;
237
- --_container-state-opacity: 0.12;
237
+ --_button_container-elevation-level: 1;
238
+ --_button_container-state-opacity: 0.12;
238
239
  }
239
240
 
240
241
  &.disabled {
241
- --_container-color: var(--color-on-surface);
242
- --_container-opacity: 0.1;
243
- --_label-text-color: var(--color-on-surface);
244
- --_label-text-opacity: 0.38;
242
+ --_button_container-color: var(--color-on-surface);
243
+ --_button_container-opacity: 0.1;
244
+ --_button_label-text-color: var(--color-on-surface);
245
+ --_button_label-text-opacity: 0.38;
245
246
 
246
247
  .ripple {
247
248
  display: none;
@@ -251,26 +252,26 @@ slot::slotted(*) {
251
252
 
252
253
 
253
254
  .button.variant-filled {
254
- --_container-color: var(--filled-button-container-color);
255
- --_label-text-color: var(--filled-button-label-text-color);
256
- --_container-state-color: var(--_label-text-color);
255
+ --_button_container-color: var(--filled-button-container-color);
256
+ --_button_label-text-color: var(--filled-button-label-text-color);
257
+ --_button_container-state-color: var(--_button_label-text-color);
257
258
 
258
259
 
259
260
  &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
260
- --_container-elevation-level: 1;
261
- --_container-state-opacity: 0.08;
261
+ --_button_container-elevation-level: 1;
262
+ --_button_container-state-opacity: 0.08;
262
263
  }
263
264
 
264
265
  &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
265
- --_container-elevation-level: 0;
266
- --_container-state-opacity: 0.1;
266
+ --_button_container-elevation-level: 0;
267
+ --_button_container-state-opacity: 0.1;
267
268
  }
268
269
 
269
270
  &.disabled {
270
- --_container-color: var(--color-on-surface);
271
- --_container-opacity: 0.1;
272
- --_label-text-color: var(--color-on-surface);
273
- --_label-text-opacity: 0.38;
271
+ --_button_container-color: var(--color-on-surface);
272
+ --_button_container-opacity: 0.1;
273
+ --_button_label-text-color: var(--color-on-surface);
274
+ --_button_label-text-opacity: 0.38;
274
275
 
275
276
  .ripple {
276
277
  display: none;
@@ -280,26 +281,26 @@ slot::slotted(*) {
280
281
 
281
282
 
282
283
  .button.variant-tonal {
283
- --_container-color: var(--tonal-button-container-color);
284
- --_label-text-color: var(--tonal-button-label-text-color);
284
+ --_button_container-color: var(--tonal-button-container-color);
285
+ --_button_label-text-color: var(--tonal-button-label-text-color);
285
286
 
286
- --_container-state-color: var(--_label-text-color);
287
+ --_button_container-state-color: var(--_button_label-text-color);
287
288
 
288
289
  &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
289
- --_container-elevation-level: 1;
290
- --_container-state-opacity: 0.08;
290
+ --_button_container-elevation-level: 1;
291
+ --_button_container-state-opacity: 0.08;
291
292
  }
292
293
 
293
294
  &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
294
- --_container-elevation-level: 0;
295
- --_container-state-opacity: 0.12;
295
+ --_button_container-elevation-level: 0;
296
+ --_button_container-state-opacity: 0.12;
296
297
  }
297
298
 
298
299
  &.disabled {
299
- --_container-color: var(--color-on-surface);
300
- --_container-opacity: 0.1;
301
- --_label-text-color: var(--color-on-surface);
302
- --_label-text-opacity: 0.38;
300
+ --_button_container-color: var(--color-on-surface);
301
+ --_button_container-opacity: 0.1;
302
+ --_button_label-text-color: var(--color-on-surface);
303
+ --_button_label-text-opacity: 0.38;
303
304
 
304
305
  .ripple {
305
306
  display: none;
@@ -309,29 +310,29 @@ slot::slotted(*) {
309
310
 
310
311
 
311
312
  .button.variant-outlined {
312
- --_outline-width: var(--outlined-button-outline-width, 0.0675rem);
313
- --_outline-color: var(--outlined-button-outline-color);
314
- --_label-text-color: var(--outlined-button-label-text-color);
313
+ --_button_outline-width: var(--outlined-button-outline-width, 0.0675rem);
314
+ --_button_outline-color: var(--outlined-button-outline-color);
315
+ --_button_label-text-color: var(--outlined-button-label-text-color);
315
316
 
316
- --_container-state-color: var(--_label-text-color);
317
+ --_button_container-state-color: var(--_button_label-text-color);
317
318
 
318
319
  .outline {
319
320
  display: block;
320
321
  }
321
322
 
322
323
  &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
323
- --_container-state-opacity: 0.08;
324
+ --_button_container-state-opacity: 0.08;
324
325
  }
325
326
 
326
327
  &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
327
- --_container-state-opacity: 0.12;
328
+ --_button_container-state-opacity: 0.12;
328
329
  }
329
330
 
330
331
  &.disabled {
331
- --_outline-color: var(--color-on-surface);
332
- --_label-text-color: var(--color-on-surface);
333
- --_label-text-opacity: 0.38;
334
- --_outline-opacity: 0.12;
332
+ --_button_outline-color: var(--color-on-surface);
333
+ --_button_label-text-color: var(--color-on-surface);
334
+ --_button_label-text-opacity: 0.38;
335
+ --_button_outline-opacity: 0.12;
335
336
 
336
337
  .ripple {
337
338
  display: none;
@@ -342,20 +343,20 @@ slot::slotted(*) {
342
343
 
343
344
  .button.variant-text {
344
345
 
345
- --_label-text-color: var(--text-button-label-text-color);
346
- --_container-state-color: var(--_label-text-color);
346
+ --_button_label-text-color: var(--text-button-label-text-color);
347
+ --_button_container-state-color: var(--_button_label-text-color);
347
348
 
348
349
  &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
349
- --_container-state-opacity: 0.08;
350
+ --_button_container-state-opacity: 0.08;
350
351
  }
351
352
 
352
353
  &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
353
- --_container-state-opacity: 0.12;
354
+ --_button_container-state-opacity: 0.12;
354
355
  }
355
356
 
356
357
  &.disabled {
357
- --_label-text-color: var(--color-on-surface);
358
- --_label-text-opacity: 0.38;
358
+ --_button_label-text-color: var(--color-on-surface);
359
+ --_button_label-text-opacity: 0.38;
359
360
 
360
361
  .ripple {
361
362
  display: none;
@@ -365,11 +366,11 @@ slot::slotted(*) {
365
366
 
366
367
  .button.variant-neo {
367
368
 
368
- --_container-color: var(--neo-button-container-color);
369
- --_label-text-color: var(--neo-button-label-text-color);
369
+ --_button_container-color: var(--neo-button-container-color);
370
+ --_button_label-text-color: var(--neo-button-label-text-color);
370
371
 
371
- --_outline-width: var(--outlined-button-outline-width, 0.125rem);
372
- --_outline-color: var(--color-inverse-surface);
372
+ --_button_outline-width: var(--outlined-button-outline-width, 0.125rem);
373
+ --_button_outline-color: var(--color-inverse-surface);
373
374
 
374
375
  .outline {
375
376
  display: block;
@@ -395,11 +396,11 @@ slot::slotted(*) {
395
396
  }
396
397
 
397
398
  &.disabled {
398
- --_container-color: var(--color-on-surface);
399
- --_container-opacity: 0.1;
400
- --_label-text-color: var(--color-on-surface);
401
- --_label-text-opacity: 0.38;
402
- --_outline-opacity: 0.12;
399
+ --_button_container-color: var(--color-on-surface);
400
+ --_button_container-opacity: 0.1;
401
+ --_button_label-text-color: var(--color-on-surface);
402
+ --_button_label-text-opacity: 0.38;
403
+ --_button_outline-opacity: 0.12;
403
404
 
404
405
 
405
406
  .ripple {
@@ -1,12 +1,13 @@
1
1
  import { html } from 'lit';
2
2
  import { property, state } from 'lit/decorators.js';
3
3
  import { classMap } from 'lit/directives/class-map.js';
4
- import IndividualComponent from 'src/IndividualComponent.js';
4
+ import IndividualComponent from '@/IndividualComponent.js';
5
5
  import styles from './button.scss';
6
6
  import colorStyles from './button-colors.scss';
7
7
  import sizeStyles from './button-sizes.scss';
8
- import { observerSlotChangesWithCallback, throttle } from '../../utils.js';
9
- import { spread } from '../../spread.js';
8
+ import { observerSlotChangesWithCallback } from '@/__utils/observe-slot-change.js';
9
+ import { throttle } from '@/__utils/throttle.js';
10
+ import { spread } from '@/__directive/spread.js';
10
11
  import { BaseButton } from '../BaseButton.js';
11
12
 
12
13
  /**
@@ -67,6 +68,26 @@ export class Button extends BaseButton {
67
68
  @state()
68
69
  private slotHasContent = false;
69
70
 
71
+ override focus() {
72
+ this.buttonElement?.focus();
73
+ }
74
+
75
+ override blur() {
76
+ this.buttonElement?.blur();
77
+ }
78
+
79
+ override connectedCallback() {
80
+ super.connectedCallback();
81
+ this.addEventListener('click', this.__dispatchClickWithThrottle);
82
+ window.addEventListener('mouseup', this.__handlePress);
83
+ }
84
+
85
+ override disconnectedCallback() {
86
+ window.removeEventListener('mouseup', this.__handlePress);
87
+ this.removeEventListener('click', this.__dispatchClickWithThrottle);
88
+ super.disconnectedCallback();
89
+ }
90
+
70
91
  override firstUpdated() {
71
92
  this.__dispatchClickWithThrottle = throttle(
72
93
  this.__dispatchClick,
@@ -105,10 +126,11 @@ export class Button extends BaseButton {
105
126
  id="button"
106
127
  tabindex=${this.#tabindex}
107
128
  type=${this.htmlType}
129
+ @click=${this.__dispatchClickWithThrottle}
108
130
  @mousedown=${this.__handlePress}
109
131
  @keydown=${this.__handlePress}
110
132
  @keyup=${this.__handlePress}
111
- ?aria-describedby=${this.__getDisabledReasonID()}
133
+ aria-describedby=${this.__disabledReasonID}
112
134
  aria-disabled=${`${this.disabled || this.softDisabled}`}
113
135
  ?disabled=${this.disabled}
114
136
  ${spread(this.configAria)}
@@ -123,11 +145,12 @@ export class Button extends BaseButton {
123
145
  tabindex=${this.#tabindex}
124
146
  href=${this.href}
125
147
  target=${this.target}
148
+ @click=${this.__dispatchClickWithThrottle}
126
149
  @mousedown=${this.__handlePress}
127
150
  @keydown=${this.__handlePress}
128
151
  @keyup=${this.__handlePress}
129
152
  role="button"
130
- ?aria-describedby=${this.__getDisabledReasonID()}
153
+ aria-describedby=${this.__disabledReasonID}
131
154
  aria-disabled=${`${this.disabled}`}
132
155
  ${spread(this.configAria)}
133
156
  >
@@ -138,7 +161,7 @@ export class Button extends BaseButton {
138
161
 
139
162
  renderButtonContent() {
140
163
  return html`
141
- <wc-focus-ring class="focus-ring" .control=${this} element="buttonElement"></wc-focus-ring>
164
+ <wc-focus-ring class="focus-ring" .control=${this} .forElement=${this.buttonElement}></wc-focus-ring>
142
165
  <wc-elevation class="elevation"></wc-elevation>
143
166
  <div class="neo-background"></div>
144
167
  <div class="background"></div>
@@ -7,31 +7,10 @@ $border-width: 0.0625rem;
7
7
  .button-group {
8
8
  display: flex;
9
9
  gap: var(--_button-group-gap);
10
-
11
-
12
- slot::slotted(:first-child) {
13
- --button-container-shape-start-start: 50%;
14
- --button-container-shape-end-start: 50%;
15
- --button-container-shape-start-end: var(--shape-corner-medium);
16
- --button-container-shape-end-end: var(--shape-corner-medium);
17
- --button-container-shape-variant: unset;
18
- }
19
-
20
- slot::slotted(:last-child) {
21
- --button-container-shape-end-end: 50%;
22
- --button-container-shape-start-end: 50%;
23
-
24
- --button-container-shape-end-start: var(--shape-corner-medium);
25
- --button-container-shape-start-start: var(--shape-corner-medium);
26
- --button-container-shape-variant: unset;
27
- }
28
-
29
- slot::slotted(:only-child) {
30
- --button-container-shape: 50%;
31
- }
32
10
  }
33
11
 
34
12
 
13
+ // Size-specific rules (can be overridden by variant rules below)
35
14
  .button-group.size-xs,
36
15
  .button-group.size-extra-small {
37
16
  --_button-group-gap: 0.125rem;
@@ -41,6 +20,7 @@ $border-width: 0.0625rem;
41
20
  .button-group.size-sm,
42
21
  .button-group.size-small {
43
22
  --_button-group-gap: 0.125rem;
23
+ --button-container-padding: 1.5rem;
44
24
  }
45
25
 
46
26
  .button-group.size-md,
@@ -58,4 +38,27 @@ $border-width: 0.0625rem;
58
38
  }
59
39
 
60
40
 
41
+ // Standard variant: buttons with a visible gap, each keeping their own shape
42
+ .button-group.variant-standard {
43
+ --_button-group-gap: 0.5rem;
44
+ }
45
+
46
+
47
+ // Connected variant: buttons with a 2px gap; outer buttons have fully rounded outer
48
+ // corners while middle buttons keep standard rounded corners (handled via JS for
49
+ // per-position corner overrides, including vertical orientation).
50
+ .button-group.variant-connected {
51
+ --_button-group-gap: 0.125rem;
52
+ }
53
+
54
+
55
+ // Orientation
56
+ .button-group.orientation-horizontal {
57
+ flex-direction: row;
58
+ }
59
+
60
+ .button-group.orientation-vertical {
61
+ flex-direction: column;
62
+ }
63
+
61
64