@redvars/peacock 3.6.3 → 3.7.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 (179) hide show
  1. package/dist/ButtonConstants-D06bY4uy.js +114 -0
  2. package/dist/ButtonConstants-D06bY4uy.js.map +1 -0
  3. package/dist/{BaseHyperlinkMixin-BNuwbiEf.js → NativeHyperlinkMixin-DrYXyfMQ.js} +8 -10
  4. package/dist/NativeHyperlinkMixin-DrYXyfMQ.js.map +1 -0
  5. package/dist/assets/components.css +1 -1
  6. package/dist/assets/components.css.map +1 -1
  7. package/dist/assets/styles.css +1 -1
  8. package/dist/assets/styles.css.map +1 -1
  9. package/dist/{button-colors-Cg6oxiz-.js → button-colors-Dwnez1tR.js} +201 -186
  10. package/dist/button-colors-Dwnez1tR.js.map +1 -0
  11. package/dist/button-group.js +8 -8
  12. package/dist/button-group.js.map +1 -1
  13. package/dist/button.js +224 -124
  14. package/dist/button.js.map +1 -1
  15. package/dist/calendar-column-view.js +0 -1
  16. package/dist/calendar-column-view.js.map +1 -1
  17. package/dist/calendar-month-view.js +0 -1
  18. package/dist/calendar-month-view.js.map +1 -1
  19. package/dist/card-content.js +0 -1
  20. package/dist/card-content.js.map +1 -1
  21. package/dist/card.js +96 -90
  22. package/dist/card.js.map +1 -1
  23. package/dist/cb-compound-expression.js +4 -1
  24. package/dist/cb-compound-expression.js.map +1 -1
  25. package/dist/cb-divider.js +0 -1
  26. package/dist/cb-divider.js.map +1 -1
  27. package/dist/cb-expression.js +0 -2
  28. package/dist/cb-expression.js.map +1 -1
  29. package/dist/cb-predicate.js +0 -1
  30. package/dist/cb-predicate.js.map +1 -1
  31. package/dist/code-highlighter.js +23 -6
  32. package/dist/code-highlighter.js.map +1 -1
  33. package/dist/custom-elements-jsdocs.json +5102 -18408
  34. package/dist/custom-elements.json +19630 -20205
  35. package/dist/fab.js +181 -117
  36. package/dist/fab.js.map +1 -1
  37. package/dist/{flow-designer-node-9Bqyn6qx.js → flow-designer-node-BWrPuxAR.js} +1 -2
  38. package/dist/flow-designer-node-BWrPuxAR.js.map +1 -0
  39. package/dist/flow-designer-node.js +1 -1
  40. package/dist/flow-designer.js +5 -5
  41. package/dist/icon-button-DJ0kZXYr.js +318 -0
  42. package/dist/icon-button-DJ0kZXYr.js.map +1 -0
  43. package/dist/index.js +8 -8
  44. package/dist/{navigation-rail-DAUuJ_Yp.js → navigation-rail-CM_svs5_.js} +511 -295
  45. package/dist/navigation-rail-CM_svs5_.js.map +1 -0
  46. package/dist/observe-slot-change-D8Xg-kSS.js +60 -0
  47. package/dist/observe-slot-change-D8Xg-kSS.js.map +1 -0
  48. package/dist/peacock-loader.js +7 -7
  49. package/dist/peacock-loader.js.map +1 -1
  50. package/dist/popover-content.js +0 -1
  51. package/dist/popover-content.js.map +1 -1
  52. package/dist/search.js +4 -1
  53. package/dist/search.js.map +1 -1
  54. package/dist/src/__controllers/attachable-controller.d.ts +109 -0
  55. package/dist/src/__mixins/{BaseButtonMixin.d.ts → NativeButtonMixin.d.ts} +3 -3
  56. package/dist/src/__mixins/{BaseHyperlinkMixin.d.ts → NativeHyperlinkMixin.d.ts} +3 -4
  57. package/dist/src/__utils/is-link.d.ts +1 -0
  58. package/dist/src/__utils/observe-slot-change.d.ts +1 -1
  59. package/dist/src/accordion/accordion-item.d.ts +0 -1
  60. package/dist/src/breadcrumb/breadcrumb-item/breadcrumb-item.d.ts +0 -1
  61. package/dist/src/button/ButtonConstants.d.ts +1 -0
  62. package/dist/src/button/GroupButtonInterface.d.ts +4 -0
  63. package/dist/src/button/button/button.d.ts +32 -7
  64. package/dist/src/button/button-group/button-group.d.ts +2 -1
  65. package/dist/src/button/icon-button/icon-button.d.ts +26 -5
  66. package/dist/src/button/index.d.ts +1 -1
  67. package/dist/src/calendar/calendar-column-view.d.ts +0 -1
  68. package/dist/src/calendar/calendar-month-view.d.ts +0 -1
  69. package/dist/src/card/card-content.d.ts +0 -1
  70. package/dist/src/card/card.d.ts +9 -6
  71. package/dist/src/chip/chip/chip.d.ts +22 -3
  72. package/dist/src/condition-builder/cb-compound-expression.d.ts +0 -1
  73. package/dist/src/condition-builder/cb-divider.d.ts +0 -1
  74. package/dist/src/condition-builder/cb-expression.d.ts +0 -1
  75. package/dist/src/condition-builder/cb-predicate.d.ts +0 -1
  76. package/dist/src/fab/fab.d.ts +20 -6
  77. package/dist/src/flow-designer/flow-designer-node.d.ts +0 -1
  78. package/dist/src/focus-ring/focus-ring.d.ts +26 -20
  79. package/dist/src/item/item.d.ts +2 -1
  80. package/dist/src/link/link.d.ts +1 -1
  81. package/dist/src/list/list-item.d.ts +1 -2
  82. package/dist/src/menu/menu-item/menu-item.d.ts +1 -2
  83. package/dist/src/menu/sub-menu/sub-menu.d.ts +0 -1
  84. package/dist/src/navigation-rail/navigation-rail-item.d.ts +0 -2
  85. package/dist/src/popover/popover-content.d.ts +0 -1
  86. package/dist/src/ripple/ripple.d.ts +9 -1
  87. package/dist/src/segmented-button/segmented-button.d.ts +0 -1
  88. package/dist/src/select/option.d.ts +0 -1
  89. package/dist/src/sidebar-menu/sidebar-menu-item.d.ts +0 -1
  90. package/dist/src/sidebar-menu/sidebar-sub-menu.d.ts +0 -1
  91. package/dist/src/tabs/tab-panel.d.ts +0 -1
  92. package/dist/src/tabs/tab.d.ts +4 -6
  93. package/dist/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +4 -2
  95. package/readme.md +2 -2
  96. package/scss/components.scss +0 -1
  97. package/scss/mixin.scss +10 -13
  98. package/scss/styles.scss +1 -3
  99. package/src/__controllers/attachable-controller.ts +198 -0
  100. package/src/__mixins/NativeButtonMixin.ts +87 -0
  101. package/src/__mixins/{BaseHyperlinkMixin.ts → NativeHyperlinkMixin.ts} +15 -15
  102. package/src/__utils/is-link.ts +3 -0
  103. package/src/__utils/observe-slot-change.ts +46 -14
  104. package/src/accordion/accordion-item.scss +1 -1
  105. package/src/accordion/accordion-item.ts +0 -1
  106. package/src/breadcrumb/breadcrumb-item/breadcrumb-item.ts +0 -1
  107. package/src/button/ButtonConstants.ts +1 -0
  108. package/src/button/GroupButtonInterface.ts +4 -0
  109. package/src/button/button/button-colors.scss +2 -2
  110. package/src/button/button/button-layers.scss +124 -0
  111. package/src/button/button/button-sizes.scss +20 -42
  112. package/src/button/button/button.scss +72 -169
  113. package/src/button/button/button.ts +229 -78
  114. package/src/button/button/only-button.scss +13 -0
  115. package/src/button/button-group/button-group.ts +59 -17
  116. package/src/button/icon-button/icon-button-sizes.scss +6 -21
  117. package/src/button/icon-button/icon-button.ts +198 -93
  118. package/src/button/index.ts +1 -1
  119. package/src/calendar/calendar-column-view.ts +0 -1
  120. package/src/calendar/calendar-month-view.ts +0 -1
  121. package/src/card/card-content.ts +2 -3
  122. package/src/card/card.scss +87 -95
  123. package/src/card/card.ts +62 -60
  124. package/src/chip/chip/chip.scss +65 -70
  125. package/src/chip/chip/chip.ts +155 -56
  126. package/src/code-highlighter/code-highlighter.scss +1 -1
  127. package/src/code-highlighter/code-highlighter.ts +20 -5
  128. package/src/condition-builder/cb-compound-expression.scss +4 -0
  129. package/src/condition-builder/cb-compound-expression.ts +0 -1
  130. package/src/condition-builder/cb-divider.ts +0 -1
  131. package/src/condition-builder/cb-expression.scss +0 -1
  132. package/src/condition-builder/cb-expression.ts +0 -1
  133. package/src/condition-builder/cb-predicate.ts +0 -1
  134. package/src/elevation/elevation.scss +5 -1
  135. package/src/fab/fab-colors.scss +2 -2
  136. package/src/fab/fab-sizes.scss +24 -34
  137. package/src/fab/fab.scss +77 -71
  138. package/src/fab/fab.ts +141 -65
  139. package/src/flow-designer/flow-designer-node.ts +0 -1
  140. package/src/focus-ring/focus-ring.ts +81 -72
  141. package/src/item/item.scss +77 -66
  142. package/src/item/item.ts +61 -39
  143. package/src/link/link.scss +1 -10
  144. package/src/link/link.ts +4 -2
  145. package/src/list/list-item.ts +8 -8
  146. package/src/menu/menu-item/menu-item.ts +17 -8
  147. package/src/menu/sub-menu/sub-menu.ts +0 -1
  148. package/src/navigation-rail/navigation-rail-item.scss +5 -0
  149. package/src/navigation-rail/navigation-rail-item.ts +10 -15
  150. package/src/peacock-loader.ts +1 -1
  151. package/src/popover/popover-content.ts +0 -1
  152. package/src/ripple/ripple.ts +52 -20
  153. package/src/search/search.scss +3 -0
  154. package/src/segmented-button/segmented-button.ts +0 -1
  155. package/src/select/option.ts +0 -1
  156. package/src/sidebar-menu/sidebar-menu-item.ts +0 -1
  157. package/src/sidebar-menu/sidebar-sub-menu.ts +0 -1
  158. package/src/skeleton/skeleton.scss +5 -1
  159. package/src/tabs/tab-panel.ts +0 -1
  160. package/src/tabs/tab.ts +60 -70
  161. package/src/text/text.css-component.scss +3 -21
  162. package/src/tooltip/tooltip.scss +5 -8
  163. package/src/tooltip/tooltip.ts +1 -2
  164. package/dist/BaseButton-BNFAYn-S.js +0 -219
  165. package/dist/BaseButton-BNFAYn-S.js.map +0 -1
  166. package/dist/BaseHyperlinkMixin-BNuwbiEf.js.map +0 -1
  167. package/dist/button-colors-Cg6oxiz-.js.map +0 -1
  168. package/dist/flow-designer-node-9Bqyn6qx.js.map +0 -1
  169. package/dist/icon-button-AdJBEoNy.js +0 -251
  170. package/dist/icon-button-AdJBEoNy.js.map +0 -1
  171. package/dist/navigation-rail-DAUuJ_Yp.js.map +0 -1
  172. package/dist/observe-slot-change-BGJfgg2E.js +0 -31
  173. package/dist/observe-slot-change-BGJfgg2E.js.map +0 -1
  174. package/dist/src/button/BaseButton.d.ts +0 -28
  175. package/dist/src/focus-ring/FocusAttachableController.d.ts +0 -8
  176. package/src/__mixins/BaseButtonMixin.ts +0 -83
  177. package/src/button/BaseButton.ts +0 -113
  178. package/src/focus-ring/FocusAttachableController.ts +0 -28
  179. package/src/popover/tooltip.css-component.scss +0 -19
@@ -1,13 +1,24 @@
1
- import { html } from 'lit';
2
- import { property } from 'lit/decorators.js';
1
+ import { html, LitElement, nothing } from 'lit';
2
+ import { property, query } from 'lit/decorators.js';
3
3
  import { classMap } from 'lit/directives/class-map.js';
4
4
  import { ifDefined } from 'lit/directives/if-defined.js';
5
+ import { when } from 'lit/directives/when.js';
6
+ import buttonLayers from '../button/button-layers.scss';
5
7
  import styles from '../button/button.scss';
6
8
  import colorStyles from '../button/button-colors.scss';
7
9
  import sizeStyles from './icon-button-sizes.scss';
8
10
  import { spread } from '@/__directive/spread.js';
9
11
  import { throttle } from '@/__utils/throttle.js';
10
- import { BaseButton } from '../BaseButton.js';
12
+ import { isLink } from '@/__utils/is-link.js';
13
+ import { observerSlotChangesWithCallback } from '@/__utils/observe-slot-change.js';
14
+ import {
15
+ dispatchActivationClick,
16
+ isActivationClick,
17
+ } from '@/__utils/dispatch-event-utils.js';
18
+ import NativeButtonMixin from '@/__mixins/NativeButtonMixin.js';
19
+ import NativeHyperlinkMixin from '@/__mixins/NativeHyperlinkMixin.js';
20
+ import { GroupButtonInterface } from '@/button/GroupButtonInterface.js';
21
+ import { DISABLED_REASON_ID } from '@/button/ButtonConstants.js';
11
22
 
12
23
  /**
13
24
  * @label Icon Button
@@ -52,8 +63,11 @@ import { BaseButton } from '../BaseButton.js';
52
63
  * ```
53
64
  * @tags display
54
65
  */
55
- export class IconButton extends BaseButton {
56
- static override styles = [styles, colorStyles, sizeStyles];
66
+ export class IconButton
67
+ extends NativeButtonMixin(NativeHyperlinkMixin(LitElement))
68
+ implements GroupButtonInterface
69
+ {
70
+ static override styles = [buttonLayers, styles, colorStyles, sizeStyles];
57
71
 
58
72
  /**
59
73
  * Button size.
@@ -62,39 +76,39 @@ export class IconButton extends BaseButton {
62
76
  @property({ reflect: true }) size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';
63
77
 
64
78
  /**
65
- * Type is preset of color and variant. Type will be only applied.
66
- *
67
- */
68
- @property({ type: String }) type?: 'primary' | 'secondary' | 'tertiary';
69
-
70
- /**
71
- * The visual style of the button.
72
- *
73
- * Possible variant values:
74
- * `"filled"` is a filled button.
75
- * `"outlined"` is an outlined button.
76
- * `"text"` is a transparent button.
77
- * `"tonal"` is a light color button.
78
- * `"elevated"` is elevated button
79
- */
80
- @property() variant:
81
- | 'elevated'
82
- | 'filled'
83
- | 'tonal'
84
- | 'outlined'
85
- | 'text'
86
- | 'neo' = 'filled';
87
-
88
- /**
89
- * Defines the primary color of the button. This can be set to predefined color names to apply specific color themes.
90
- */
91
- @property({ reflect: true }) color:
92
- | 'primary'
93
- | 'success'
94
- | 'danger'
95
- | 'warning'
96
- | 'surface'
97
- | 'on-surface' = 'primary';
79
+ * Type is preset of color and variant. Type will be only applied.
80
+ *
81
+ */
82
+ @property({ type: String }) type?: 'primary' | 'secondary' | 'tertiary';
83
+
84
+ /**
85
+ * The visual style of the button.
86
+ *
87
+ * Possible variant values:
88
+ * `"filled"` is a filled button.
89
+ * `"outlined"` is an outlined button.
90
+ * `"text"` is a transparent button.
91
+ * `"tonal"` is a light color button.
92
+ * `"elevated"` is elevated button
93
+ */
94
+ @property({ reflect: true }) variant:
95
+ | 'elevated'
96
+ | 'filled'
97
+ | 'tonal'
98
+ | 'outlined'
99
+ | 'text'
100
+ | 'neo' = 'filled';
101
+
102
+ /**
103
+ * Defines the primary color of the button. This can be set to predefined color names to apply specific color themes.
104
+ */
105
+ @property({ reflect: true }) color:
106
+ | 'primary'
107
+ | 'success'
108
+ | 'danger'
109
+ | 'warning'
110
+ | 'surface'
111
+ | 'on-surface' = 'primary';
98
112
 
99
113
  /**
100
114
  * Additional ARIA attributes to pass to the inner button/anchor element.
@@ -102,6 +116,92 @@ export class IconButton extends BaseButton {
102
116
  @property({ reflect: true })
103
117
  configAria?: { [key: string]: any };
104
118
 
119
+ @property({ type: Boolean, reflect: true }) skeleton: boolean = false;
120
+
121
+ @property({ type: Boolean, reflect: true }) toggle: boolean = false;
122
+
123
+ @property({ type: Boolean, reflect: true }) selected: boolean = false;
124
+
125
+ /**
126
+ * Sets the delay for throttle in milliseconds. Defaults to 200 milliseconds.
127
+ */
128
+ @property() throttleDelay = 200;
129
+
130
+ @property() tooltip?: string;
131
+
132
+ @property({ type: Boolean, reflect: true })
133
+ pressed = false;
134
+
135
+ @query('.button') readonly buttonElement!: HTMLElement | null;
136
+
137
+ override connectedCallback() {
138
+ super.connectedCallback();
139
+ this.addEventListener('click', this.__dispatchClickWithThrottle);
140
+ window.addEventListener('mouseup', this.__handlePress);
141
+ }
142
+
143
+ override disconnectedCallback() {
144
+ window.removeEventListener('mouseup', this.__handlePress);
145
+ this.removeEventListener('click', this.__dispatchClickWithThrottle);
146
+ super.disconnectedCallback();
147
+ }
148
+
149
+ __handlePress = (event: KeyboardEvent | MouseEvent) => {
150
+ if (this.disabled || this.skeleton || this.softDisabled) return;
151
+ this.pressed =
152
+ (event instanceof KeyboardEvent &&
153
+ event.type === 'keydown' &&
154
+ (event.key === 'Enter' || event.key === ' ')) ||
155
+ event.type === 'mousedown';
156
+ };
157
+
158
+ __dispatchClickWithThrottle: (event: MouseEvent | KeyboardEvent) => void =
159
+ event => {
160
+ this.__dispatchClick(event);
161
+ };
162
+
163
+ __dispatchClick = (event: MouseEvent | KeyboardEvent) => {
164
+ // If the button is soft-disabled or a disabled link, we need to explicitly
165
+ // prevent the click from propagating to other event listeners as well as
166
+ // prevent the default action.
167
+ if (this.softDisabled || (this.disabled && this.href) || this.skeleton) {
168
+ event.stopImmediatePropagation();
169
+ event.preventDefault();
170
+ return;
171
+ }
172
+
173
+ if (!isActivationClick(event) || !this.buttonElement) {
174
+ return;
175
+ }
176
+
177
+ if (this.toggle) {
178
+ this.selected = !this.selected;
179
+ }
180
+
181
+ this.focus();
182
+ dispatchActivationClick(this.buttonElement);
183
+ };
184
+
185
+ __renderDisabledReason(softDisabled: boolean) {
186
+ if (softDisabled)
187
+ return html`<div
188
+ id=${DISABLED_REASON_ID}
189
+ role="tooltip"
190
+ aria-label=${this.disabledReason}
191
+ class="screen-reader-only"
192
+ >
193
+ ${this.disabledReason}
194
+ </div>`;
195
+ return nothing;
196
+ }
197
+
198
+ __renderTooltip() {
199
+ if (this.tooltip) {
200
+ return html`<wc-tooltip class="tooltip" for="button">${this.tooltip}</wc-tooltip>`;
201
+ }
202
+ return nothing;
203
+ }
204
+
105
205
  override focus() {
106
206
  this.buttonElement?.focus();
107
207
  }
@@ -109,7 +209,7 @@ export class IconButton extends BaseButton {
109
209
  override blur() {
110
210
  this.buttonElement?.blur();
111
211
  }
112
-
212
+
113
213
  override firstUpdated() {
114
214
  this.__dispatchClickWithThrottle = throttle(
115
215
  this.__dispatchClick,
@@ -135,8 +235,26 @@ export class IconButton extends BaseButton {
135
235
  }
136
236
 
137
237
  override render() {
138
- const isLink = this.__isLink();
238
+ return html`
239
+ <wc-focus-ring class="focus-ring" for="button"></wc-focus-ring>
240
+ <wc-elevation class="elevation"></wc-elevation>
241
+ ${when(
242
+ this.variant === 'neo',
243
+ () => html`<div class="neo-background"></div>`,
244
+ )}
245
+ <div class="background"></div>
246
+ ${when(
247
+ this.variant === 'outlined' || this.variant === 'neo',
248
+ () => html`<div class="outline"></div>`,
249
+ )}
250
+ <wc-ripple class="ripple" for="button"></wc-ripple>
251
+ <wc-skeleton class="skeleton"></wc-skeleton>
252
+
253
+ ${this.renderButtonElement()} ${this.__renderTooltip()}
254
+ `;
255
+ }
139
256
 
257
+ renderButtonElement() {
140
258
  const cssClasses = {
141
259
  button: true,
142
260
  'button-element': true,
@@ -144,69 +262,56 @@ export class IconButton extends BaseButton {
144
262
  [`variant-${this.variant}`]: true,
145
263
  [`color-${this.color}`]: true,
146
264
  disabled: this.disabled || this.softDisabled,
147
- pressed: this.isPressed,
265
+ pressed: this.pressed,
148
266
  skeleton: this.skeleton,
149
267
  };
150
268
 
151
- if (!isLink) {
269
+ if (!isLink(this)) {
152
270
  cssClasses['native-button'] = true;
153
271
  return html`<button
154
- class=${classMap(cssClasses)}
155
- id="button"
156
- type=${this.htmlType}
157
- @click=${this.__dispatchClickWithThrottle}
158
- @mousedown=${this.__handlePress}
159
- @keydown=${this.__handlePress}
160
- @keyup=${this.__handlePress}
161
-
162
- aria-describedby=${ifDefined(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}
163
- ?aria-disabled=${this.softDisabled}
164
-
165
- ?disabled=${this.disabled}
166
- ${spread(this.configAria)}
167
- >
168
- ${this.renderButtonContent()}
169
- </button>
170
- ${this.__renderTooltip()}`;
171
- } else {
172
- cssClasses['native-link'] = true;
173
- return html`<a
174
- class=${classMap(cssClasses)}
175
- id="button"
176
- href=${this.href}
177
- target=${this.target}
178
- tabindex=${this.disabled ? '-1' : '0'}
179
- @click=${this.__dispatchClick}
180
- @mousedown=${this.__handlePress}
181
- @keydown=${this.__handlePress}
182
- @keyup=${this.__handlePress}
183
- role="button"
184
-
185
- aria-describedby=${ifDefined(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}
186
- ?aria-disabled=${this.softDisabled}
187
-
188
- ${spread(this.configAria)}
189
- >
190
- ${this.renderButtonContent()}
191
- </a>
192
- ${this.__renderTooltip()}`;
272
+ class=${classMap(cssClasses)}
273
+ id="button"
274
+ type=${this.htmlType}
275
+ @click=${this.__dispatchClickWithThrottle}
276
+ @mousedown=${this.__handlePress}
277
+ @keydown=${this.__handlePress}
278
+ @keyup=${this.__handlePress}
279
+ aria-describedby=${ifDefined(
280
+ this.softDisabled ? DISABLED_REASON_ID : undefined,
281
+ )}
282
+ ?aria-disabled=${this.softDisabled}
283
+ ?disabled=${this.disabled}
284
+ ${spread(this.configAria)}
285
+ >
286
+ ${this.renderButtonContent()}
287
+ </button>`;
193
288
  }
289
+ cssClasses['native-link'] = true;
290
+ return html`<a
291
+ class=${classMap(cssClasses)}
292
+ id="button"
293
+ href=${this.href}
294
+ target=${this.target}
295
+ tabindex=${this.disabled ? '-1' : '0'}
296
+ @click=${this.__dispatchClick}
297
+ @mousedown=${this.__handlePress}
298
+ @keydown=${this.__handlePress}
299
+ @keyup=${this.__handlePress}
300
+ role="button"
301
+ aria-describedby=${ifDefined(
302
+ this.softDisabled ? DISABLED_REASON_ID : undefined,
303
+ )}
304
+ ?aria-disabled=${this.softDisabled}
305
+ ${spread(this.configAria)}
306
+ >
307
+ ${this.renderButtonContent()}
308
+ </a>`;
194
309
  }
195
310
 
196
311
  renderButtonContent() {
197
312
  return html`
198
- <wc-focus-ring class="focus-ring" for='button'></wc-focus-ring>
199
- <wc-elevation class="elevation"></wc-elevation>
200
- <div class="neo-background"></div>
201
- <div class="background"></div>
202
- <div class="outline"></div>
203
- <wc-ripple class="ripple"></wc-ripple>
204
- <wc-skeleton class="skeleton"></wc-skeleton>
205
-
206
- <div class="button-content">
207
- <slot></slot>
208
- </div>
209
-
313
+ <slot class="icon-slot"></slot>
314
+ <div class="touch"></div>
210
315
  ${this.__renderDisabledReason(this.softDisabled)}
211
316
  `;
212
317
  }
@@ -1,3 +1,3 @@
1
1
  export { Button } from './button/button.js';
2
- export { ButtonGroup } from './button-group/button-group.js';
2
+ export { default as ButtonGroup } from './button-group/button-group.js';
3
3
  export { IconButton } from './icon-button/icon-button.js';
@@ -22,7 +22,6 @@ import styles from './calendar-column-view.scss';
22
22
  * @label Calendar Column View
23
23
  * @tag wc-calendar-column-view
24
24
  * @rawTag calendar-column-view
25
- * @parentRawTag calendar
26
25
  * @summary Internal column view component for the calendar (day/week views).
27
26
  */
28
27
  @IndividualComponent
@@ -21,7 +21,6 @@ import styles from './calendar-month-view.scss';
21
21
  * @label Calendar Month View
22
22
  * @tag wc-calendar-month-view
23
23
  * @rawTag calendar-month-view
24
- * @parentRawTag calendar
25
24
  * @summary Internal month view component for the calendar.
26
25
  */
27
26
  @IndividualComponent
@@ -5,8 +5,7 @@ import IndividualComponent from '../IndividualComponent.js';
5
5
  * @label Card Content
6
6
  * @tag wc-card-content
7
7
  * @rawTag card-content
8
- * @parentRawTag
9
- *
8
+ *
10
9
  * @cssprop --card-content-padding - Inner padding for the card container. Defaults to 1rem.
11
10
  *
12
11
  * ```
@@ -23,4 +22,4 @@ export class CardContent extends LitElement {
23
22
  render() {
24
23
  return html`<slot></slot>`;
25
24
  }
26
- }
25
+ }
@@ -3,6 +3,7 @@
3
3
  @include mixin.base-styles;
4
4
 
5
5
  :host {
6
+ position: relative;
6
7
  display: block;
7
8
  --card-gap: 0;
8
9
  --card-padding: 0;
@@ -11,6 +12,11 @@
11
12
  --card-container-shape-start-end: unset;
12
13
  --card-container-shape-end-start: unset;
13
14
  --card-container-shape-end-end: unset;
15
+
16
+ --_container-shape-start-start: var(--card-container-shape-start-start, var(--card-container-shape));
17
+ --_container-shape-start-end: var(--card-container-shape-start-end, var(--card-container-shape));
18
+ --_container-shape-end-start: var(--card-container-shape-end-start, var(--card-container-shape));
19
+ --_container-shape-end-end: var(--card-container-shape-end-end, var(--card-container-shape));
14
20
  }
15
21
 
16
22
  /*
@@ -27,16 +33,10 @@
27
33
  }
28
34
 
29
35
  .card {
30
- position: relative;
31
36
  display: flex;
32
37
  height: 100%;
33
38
  width: 100%;
34
-
35
- --_container-shape-start-start: var(--card-container-shape-start-start, var(--card-container-shape));
36
- --_container-shape-start-end: var(--card-container-shape-start-end, var(--card-container-shape));
37
- --_container-shape-end-start: var(--card-container-shape-end-start, var(--card-container-shape));
38
- --_container-shape-end-end: var(--card-container-shape-end-end, var(--card-container-shape));
39
-
39
+ z-index: 0;
40
40
 
41
41
  .card-content {
42
42
  z-index: 0;
@@ -63,83 +63,80 @@
63
63
  height: 100%;
64
64
  }
65
65
  }
66
+ }
66
67
 
67
- /*
68
- Background layers
69
- */
70
- .focus-ring {
71
- z-index: 2;
72
- display: none;
73
- --focus-ring-container-shape-start-start: var(--_container-shape-start-start);
74
- --focus-ring-container-shape-start-end: var(--_container-shape-start-end);
75
- --focus-ring-container-shape-end-start: var(--_container-shape-end-start);
76
- --focus-ring-container-shape-end-end: var(--_container-shape-end-end);
77
- --focus-ring-container-shape-variant: var(--_container-corner-shape-variant);
78
- }
79
-
80
- .ripple {
81
- display: none;
82
- border-start-start-radius: var(--_container-shape-start-start);
83
- border-start-end-radius: var(--_container-shape-start-end);
84
- border-end-start-radius: var(--_container-shape-end-start);
85
- border-end-end-radius: var(--_container-shape-end-end);
86
- corner-shape: var(--_container-corner-shape-variant);
87
- --ripple-state-opacity: var(--_container-state-opacity, 0);
88
- --ripple-pressed-color: var(--_container-state-color);
89
- }
90
-
91
- .background {
92
- z-index: 0;
93
- display: block;
94
- position: absolute;
95
- top: 0;
96
- left: 0;
97
- width: 100%;
98
- height: 100%;
99
- background-color: var(--_container-color);
100
- opacity: var(--_container-opacity, 1);
101
-
102
- border-start-start-radius: var(--_container-shape-start-start);
103
- border-start-end-radius: var(--_container-shape-start-end);
104
- border-end-start-radius: var(--_container-shape-end-start);
105
- border-end-end-radius: var(--_container-shape-end-end);
106
- corner-shape: var(--_container-corner-shape-variant);
107
- pointer-events: none;
108
- }
109
-
110
- .elevation {
111
- --elevation-level: var(--_container-elevation-level);
112
- transition-duration: 280ms;
113
- --elevation-container-shape-start-start: var(--_container-shape-start-start);
114
- --elevation-container-shape-start-end: var(--_container-shape-start-end);
115
- --elevation-container-shape-end-start: var(--_container-shape-end-start);
116
- --elevation-container-shape-end-end: var(--_container-shape-end-end);
117
- --elevation-container-shape-variant: var(--_container-corner-shape-variant);
118
- }
68
+ /*
69
+ Background layers
70
+ */
71
+ .focus-ring {
72
+ z-index: 2;
73
+ display: none;
74
+ --focus-ring-container-shape-start-start: var(--_container-shape-start-start);
75
+ --focus-ring-container-shape-start-end: var(--_container-shape-start-end);
76
+ --focus-ring-container-shape-end-start: var(--_container-shape-end-start);
77
+ --focus-ring-container-shape-end-end: var(--_container-shape-end-end);
78
+ --focus-ring-container-shape-variant: var(--_container-corner-shape-variant);
79
+ }
119
80
 
120
- .outline {
121
- z-index: 0;
122
- display: none;
123
- position: absolute;
124
- left: 0;
125
- top: 0;
126
- width: 100%;
127
- height: 100%;
128
- pointer-events: none;
129
- border: var(--_outline-width) solid var(--_outline-color);
130
- opacity: var(--_outline-opacity, 1);
131
- border-start-start-radius: var(--_container-shape-start-start);
132
- border-start-end-radius: var(--_container-shape-start-end);
133
- border-end-start-radius: var(--_container-shape-end-start);
134
- border-end-end-radius: var(--_container-shape-end-end);
135
- corner-shape: var(--_container-corner-shape-variant);
136
- }
81
+ .ripple {
82
+ display: none;
83
+ border-start-start-radius: var(--_container-shape-start-start);
84
+ border-start-end-radius: var(--_container-shape-start-end);
85
+ border-end-start-radius: var(--_container-shape-end-start);
86
+ border-end-end-radius: var(--_container-shape-end-end);
87
+ corner-shape: var(--_container-corner-shape-variant);
88
+ --ripple-state-opacity: var(--_container-state-opacity, 0);
89
+ --ripple-pressed-color: var(--_container-state-color);
90
+ }
137
91
 
92
+ .background {
93
+ z-index: 0;
94
+ display: block;
95
+ position: absolute;
96
+ top: 0;
97
+ left: 0;
98
+ width: 100%;
99
+ height: 100%;
100
+ background-color: var(--_container-color);
101
+ opacity: var(--_container-opacity, 1);
102
+
103
+ border-start-start-radius: var(--_container-shape-start-start);
104
+ border-start-end-radius: var(--_container-shape-start-end);
105
+ border-end-start-radius: var(--_container-shape-end-start);
106
+ border-end-end-radius: var(--_container-shape-end-end);
107
+ corner-shape: var(--_container-corner-shape-variant);
108
+ pointer-events: none;
109
+ }
138
110
 
111
+ .elevation {
112
+ --elevation-level: var(--_container-elevation-level);
113
+ transition-duration: 280ms;
114
+ --elevation-container-shape-start-start: var(--_container-shape-start-start);
115
+ --elevation-container-shape-start-end: var(--_container-shape-start-end);
116
+ --elevation-container-shape-end-start: var(--_container-shape-end-start);
117
+ --elevation-container-shape-end-end: var(--_container-shape-end-end);
118
+ --elevation-container-shape-variant: var(--_container-corner-shape-variant);
139
119
  }
140
120
 
141
- .card.actionable {
121
+ .outline {
122
+ z-index: 0;
123
+ display: none;
124
+ position: absolute;
125
+ left: 0;
126
+ top: 0;
127
+ width: 100%;
128
+ height: 100%;
129
+ pointer-events: none;
130
+ border: var(--_outline-width) solid var(--_outline-color);
131
+ opacity: var(--_outline-opacity, 1);
132
+ border-start-start-radius: var(--_container-shape-start-start);
133
+ border-start-end-radius: var(--_container-shape-start-end);
134
+ border-end-start-radius: var(--_container-shape-end-start);
135
+ border-end-end-radius: var(--_container-shape-end-end);
136
+ corner-shape: var(--_container-corner-shape-variant);
137
+ }
142
138
 
139
+ :host([actionable]) {
143
140
  .focus-ring,
144
141
  .ripple {
145
142
  display: block;
@@ -150,24 +147,23 @@
150
147
  }
151
148
  }
152
149
 
153
- .card.variant-elevated {
150
+ :host([variant='elevated']) {
154
151
  --_container-color: var(--elevated-card-container-color);
155
152
  --_label-text-color: var(--elevated-card-label-text-color);
156
153
  --_container-elevation-level: 1;
157
-
158
154
  --_container-state-color: var(--_label-text-color);
159
155
 
160
- &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
156
+ &:hover:not([disabled]) {
161
157
  --_container-elevation-level: 2;
162
158
  --_container-state-opacity: 0.08;
163
159
  }
164
160
 
165
- &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
161
+ &:has(.card.pressed):not([disabled]) {
166
162
  --_container-elevation-level: 1;
167
163
  --_container-state-opacity: 0.12;
168
164
  }
169
165
 
170
- &.disabled {
166
+ &[disabled] {
171
167
  --_container-color: var(--color-on-surface);
172
168
  --_container-opacity: 0.1;
173
169
  --_label-text-color: var(--color-on-surface);
@@ -179,24 +175,22 @@
179
175
  }
180
176
  }
181
177
 
182
-
183
- .card.variant-filled {
178
+ :host([variant='filled']) {
184
179
  --_container-color: var(--filled-card-container-color);
185
180
  --_label-text-color: var(--filled-card-label-text-color);
186
181
  --_container-state-color: var(--_label-text-color);
187
182
 
188
-
189
- &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
183
+ &:hover:not([disabled]) {
190
184
  --_container-elevation-level: 1;
191
185
  --_container-state-opacity: 0.08;
192
186
  }
193
187
 
194
- &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
188
+ &:has(.card.pressed):not([disabled]) {
195
189
  --_container-elevation-level: 0;
196
190
  --_container-state-opacity: 0.1;
197
191
  }
198
192
 
199
- &.disabled {
193
+ &[disabled] {
200
194
  --_container-color: var(--color-on-surface);
201
195
  --_container-opacity: 0.1;
202
196
  --_label-text-color: var(--color-on-surface);
@@ -208,27 +202,25 @@
208
202
  }
209
203
  }
210
204
 
211
-
212
- .card.variant-outlined {
205
+ :host([variant='outlined']) {
213
206
  --_outline-width: var(--outlined-card-outline-width, 0.0675rem);
214
207
  --_outline-color: var(--outlined-card-outline-color);
215
208
  --_label-text-color: var(--outlined-card-label-text-color);
216
-
217
209
  --_container-state-color: var(--_label-text-color);
218
210
 
219
211
  .outline {
220
212
  display: block;
221
213
  }
222
214
 
223
- &:hover:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
215
+ &:hover:not([disabled]) {
224
216
  --_container-state-opacity: 0.08;
225
217
  }
226
218
 
227
- &.pressed:not(:where(.disabled, .soft-disabled, .show-skeleton)) {
219
+ &:has(.card.pressed):not([disabled]) {
228
220
  --_container-state-opacity: 0.12;
229
221
  }
230
222
 
231
- &.disabled {
223
+ &[disabled] {
232
224
  --_outline-color: var(--color-on-surface);
233
225
  --_label-text-color: var(--color-on-surface);
234
226
  --_label-text-opacity: 0.38;
@@ -238,4 +230,4 @@
238
230
  display: none;
239
231
  }
240
232
  }
241
- }
233
+ }