@redvars/peacock 3.6.2 → 3.6.3

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 (75) hide show
  1. package/dist/assets/components.css.map +1 -1
  2. package/dist/assets/styles.css.map +1 -1
  3. package/dist/{button-colors-AvGh22Zn.js → button-colors-Cg6oxiz-.js} +126 -116
  4. package/dist/{button-colors-AvGh22Zn.js.map → button-colors-Cg6oxiz-.js.map} +1 -1
  5. package/dist/button-group.js +2 -2
  6. package/dist/button.js +17 -14
  7. package/dist/button.js.map +1 -1
  8. package/dist/canvas.js +126 -107
  9. package/dist/canvas.js.map +1 -1
  10. package/dist/custom-elements-jsdocs.json +665 -162
  11. package/dist/custom-elements.json +859 -326
  12. package/dist/{flow-designer-node-BWrPuxAR.js → flow-designer-node-9Bqyn6qx.js} +2 -1
  13. package/dist/flow-designer-node-9Bqyn6qx.js.map +1 -0
  14. package/dist/flow-designer-node.js +1 -1
  15. package/dist/flow-designer.js +3 -3
  16. package/dist/{icon-button-ohxHhy4t.js → icon-button-AdJBEoNy.js} +34 -30
  17. package/dist/icon-button-AdJBEoNy.js.map +1 -0
  18. package/dist/index.js +4 -4
  19. package/dist/{navigation-rail-CD7IrqbN.js → navigation-rail-DAUuJ_Yp.js} +735 -370
  20. package/dist/navigation-rail-DAUuJ_Yp.js.map +1 -0
  21. package/dist/peacock-loader.js +6 -3
  22. package/dist/peacock-loader.js.map +1 -1
  23. package/dist/popover-content.js +1 -1
  24. package/dist/popover-content.js.map +1 -1
  25. package/dist/search.js +11 -14
  26. package/dist/search.js.map +1 -1
  27. package/dist/src/canvas/canvas.d.ts +3 -3
  28. package/dist/src/field/field.d.ts +1 -0
  29. package/dist/src/flow-designer/flow-designer-node.d.ts +1 -0
  30. package/dist/src/image/image.d.ts +2 -2
  31. package/dist/src/index.d.ts +1 -0
  32. package/dist/src/input/input.d.ts +1 -3
  33. package/dist/src/item/index.d.ts +1 -0
  34. package/dist/src/item/item.d.ts +48 -0
  35. package/dist/src/menu/menu-item/menu-item.d.ts +8 -9
  36. package/dist/src/menu/sub-menu/sub-menu.d.ts +1 -0
  37. package/dist/src/navigation-rail/navigation-rail.d.ts +2 -6
  38. package/dist/src/popover/popover-content.d.ts +1 -1
  39. package/dist/src/search/search.d.ts +2 -6
  40. package/dist/test/item.test.d.ts +1 -0
  41. package/dist/tsconfig.tsbuildinfo +1 -1
  42. package/package.json +1 -1
  43. package/scss/mixin.scss +23 -0
  44. package/src/button/button/button-sizes.scss +11 -11
  45. package/src/button/button/button.scss +96 -122
  46. package/src/button/button/button.ts +37 -34
  47. package/src/button/icon-button/icon-button-sizes.scss +8 -8
  48. package/src/button/icon-button/icon-button.ts +23 -20
  49. package/src/canvas/canvas.scss +18 -6
  50. package/src/canvas/canvas.ts +125 -103
  51. package/src/chip/chip/chip.scss +1 -1
  52. package/src/empty-state/empty-state.scss +1 -0
  53. package/src/field/field.ts +6 -0
  54. package/src/flow-designer/flow-designer-node.ts +1 -0
  55. package/src/image/image.scss +21 -16
  56. package/src/image/image.ts +13 -14
  57. package/src/index.ts +1 -0
  58. package/src/input/input.ts +16 -25
  59. package/src/item/index.ts +1 -0
  60. package/src/item/item.scss +184 -0
  61. package/src/item/item.ts +340 -0
  62. package/src/menu/menu/menu.ts +5 -9
  63. package/src/menu/menu-item/menu-item.scss +30 -108
  64. package/src/menu/menu-item/menu-item.ts +89 -129
  65. package/src/menu/sub-menu/sub-menu.ts +6 -2
  66. package/src/navigation-rail/navigation-rail.ts +2 -6
  67. package/src/peacock-loader.ts +4 -0
  68. package/src/popover/popover-content.ts +1 -1
  69. package/src/search/search.ts +11 -16
  70. package/src/select/option.ts +1 -1
  71. package/src/select/select.scss +1 -10
  72. package/src/select/select.ts +2 -0
  73. package/dist/flow-designer-node-BWrPuxAR.js.map +0 -1
  74. package/dist/icon-button-ohxHhy4t.js.map +0 -1
  75. package/dist/navigation-rail-CD7IrqbN.js.map +0 -1
@@ -3,118 +3,40 @@
3
3
  @include mixin.base-styles;
4
4
 
5
5
  :host {
6
- padding-inline: var(--spacing-050);
7
6
  outline: none;
8
- }
9
-
10
- .menu-item {
11
- position: relative;
12
- height: 3rem;
13
- display: flex;
14
- align-items: center;
15
- padding-inline: 0.75rem;
16
- outline: 0;
17
- text-decoration: none;
18
-
19
- @include mixin.get-typography(label-large);
20
-
21
- .menu-item-content {
22
- display: flex;
23
- align-items: center;
24
- z-index: 1;
25
- width: 100%;
26
- gap: var(--spacing-100);
27
-
28
- color: var(--_label-text-color);
29
- opacity: var(--_label-text-opacity, 1);
30
- --icon-size: var(--button-icon-size, var(--_button-icon-size));
31
- --icon-color: var(--_label-text-color);
32
-
33
- .slot-container {
34
- flex: 1;
35
- }
36
- }
37
-
38
-
39
- .background {
40
- display: block;
41
- position: absolute;
42
- left: 0;
43
- top: 0;
44
- width: 100%;
45
- height: 100%;
46
- background-color: var(--_container-color);
47
- opacity: var(--_container-opacity, 1);
48
7
 
49
- border-start-start-radius: var(--_container-shape-start-start);
50
- border-start-end-radius: var(--_container-shape-start-end);
51
- border-end-start-radius: var(--_container-shape-end-start);
52
- border-end-end-radius: var(--_container-shape-end-end);
53
- corner-shape: var(--_container-corner-shape-variant);
54
- pointer-events: none;
55
- }
56
-
57
- /*
58
- Background layers
59
- */
60
- .focus-ring {
61
- z-index: 2;
62
- --focus-ring-container-shape-start-start: var(--_container-shape-start-start);
63
- --focus-ring-container-shape-start-end: var(--_container-shape-start-end);
64
- --focus-ring-container-shape-end-start: var(--_container-shape-end-start);
65
- --focus-ring-container-shape-end-end: var(--_container-shape-end-end);
66
- --focus-ring-container-shape-variant: var(--_container-corner-shape-variant);
67
- }
68
-
69
- .ripple {
70
- --ripple-state-opacity: var(--_container-state-opacity, 0);
71
- --ripple-pressed-color: var(--_container-state-color);
72
- border-start-start-radius: var(--_container-shape-start-start);
73
- border-start-end-radius: var(--_container-shape-start-end);
74
- border-end-start-radius: var(--_container-shape-end-start);
75
- border-end-end-radius: var(--_container-shape-end-end);
76
- corner-shape: var(--_container-corner-shape-variant);
77
- }
8
+ --menu-item-container-shape-start-start: var(--shape-corner-extra-small);
9
+ --menu-item-container-shape-start-end: var(--shape-corner-extra-small);
10
+ --menu-item-container-shape-end-start: var(--shape-corner-extra-small);
11
+ --menu-item-container-shape-end-end: var(--shape-corner-extra-small);
78
12
  }
79
13
 
80
-
81
14
  .menu-item {
15
+ width: 100%;
16
+ --item-height: 3rem;
17
+ --item-container-shape-start-start: var(--menu-item-container-shape-start-start);
18
+ --item-container-shape-start-end: var(--menu-item-container-shape-start-end);
19
+ --item-container-shape-end-start: var(--menu-item-container-shape-end-start);
20
+ --item-container-shape-end-end: var(--menu-item-container-shape-end-end);
21
+ --item-container-shape-variant: none;
22
+
23
+ --item-label-font-family: var(--typography-label-large-font-family);
24
+ --item-label-font-size: var(--typography-label-large-font-size);
25
+ --item-label-font-weight: var(--typography-label-large-font-weight);
26
+ --item-label-line-height: var(--typography-label-large-line-height);
27
+ --item-label-letter-spacing: var(--typography-label-large-letter-spacing);
28
+
29
+ --item-label-text-color: var(--menu-item-label-color);
30
+ --item-leading-trailing-color: var(--menu-item-label-color);
31
+ --item-supporting-text-color: var(--menu-item-label-color);
32
+ --item-container-selected-color: var(--menu-item-container-selected-color);
33
+ --item-label-text-selected-color: var(--menu-item-label-selected-color);
34
+ --item-icon-size: var(--button-icon-size, var(--_button-icon-size));
35
+ }
82
36
 
83
- --_container-shape-start-start: var(--menu-item-container-shape-start-start, var(--shape-corner-extra-small));
84
- --_container-shape-start-end: var(--menu-item-container-shape-start-end, var(--shape-corner-extra-small));
85
- --_container-shape-end-start: var(--menu-item-container-shape-end-start, var(--shape-corner-extra-small));
86
- --_container-shape-end-end: var(--menu-item-container-shape-end-end, var(--shape-corner-extra-small));
87
- --_container-corner-shape-variant: none;
88
- --_label-text-color: var(--menu-item-label-color);
89
- --_container-state-color: var(--_label-text-color);
90
-
91
- &:hover:not(:where(.disabled, .selected)) {
92
- --_container-state-opacity: 0.08;
93
- }
94
-
95
- &.pressed:not(:where(.disabled)) {
96
- --_container-state-opacity: 0.12;
97
- }
98
-
99
- &.selected {
100
- --_container-color: var(--menu-item-container-selected-color);
101
- --_label-text-color: var(--menu-item-label-selected-color);
102
- --_container-shape-start-start: var(--shape-corner-large);
103
- --_container-shape-start-end: var(--shape-corner-large);
104
- --_container-shape-end-start: var(--shape-corner-large);
105
- --_container-shape-end-end: var(--shape-corner-large);
106
- --_container-corner-shape-variant: none;
107
- }
108
-
109
- &.disabled {
110
- cursor: not-allowed;
111
- --_container-color: var(--color-on-surface);
112
- --_container-opacity: 0.1;
113
- --_label-text-color: var(--color-on-surface);
114
- --_label-text-opacity: 0.38;
115
-
116
- .ripple {
117
- display: none;
118
- }
119
- }
37
+ :host([selected]) {
38
+ --menu-item-container-shape-start-start: var(--shape-corner-large);
39
+ --menu-item-container-shape-start-end: var(--shape-corner-large);
40
+ --menu-item-container-shape-end-start: var(--shape-corner-large);
41
+ --menu-item-container-shape-end-end: var(--shape-corner-large);
120
42
  }
@@ -1,11 +1,11 @@
1
1
  import { html, LitElement, nothing } from 'lit';
2
- import { property, query, state } from 'lit/decorators.js';
3
- import { classMap } from 'lit/directives/class-map.js';
2
+ import { property, query } from 'lit/decorators.js';
3
+ import { ifDefined } from 'lit/directives/if-defined.js';
4
4
  import styles from './menu-item.scss';
5
5
  import colorStyles from './menu-item-colors.scss';
6
6
  import BaseButtonMixin from '@/__mixins/BaseButtonMixin.js';
7
7
  import BaseHyperlinkMixin from '@/__mixins/BaseHyperlinkMixin.js';
8
- import { dispatchActivationClick, isActivationClick } from '@/__utils/dispatch-event-utils.js';
8
+ import { Item } from '@/item/item.js';
9
9
 
10
10
  /**
11
11
  * @label Menu Item
@@ -21,7 +21,6 @@ import { dispatchActivationClick, isActivationClick } from '@/__utils/dispatch-e
21
21
  * ```
22
22
  */
23
23
  export class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(LitElement)) {
24
-
25
24
  @property({ type: String }) value = '';
26
25
 
27
26
  @property({ type: Boolean, reflect: true }) selected = false;
@@ -37,31 +36,40 @@ export class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(LitElement)) {
37
36
 
38
37
  static styles = [styles, colorStyles];
39
38
 
40
- @query('#item') readonly itemElement!: HTMLElement | null;
39
+ @query('wc-item') readonly itemElement!: Item | null;
41
40
 
42
- /**
43
- * States
44
- */
45
- @state()
46
- isPressed = false;
41
+ private readonly _contentObserver = new MutationObserver(() => {
42
+ this.requestUpdate();
43
+ });
44
+
45
+ private _rovingTabIndex = -1;
47
46
 
48
47
  connectedCallback() {
49
48
  // eslint-disable-next-line wc/guard-super-call
50
49
  super.connectedCallback();
51
- if (!this.hasAttribute('role')) {
52
- this.setAttribute('role', 'menuitem');
53
- }
54
-
55
- this.addEventListener('click', this.__dispatchClickWithThrottle);
56
- window.addEventListener('mouseup', this.__handlePress);
50
+ this._contentObserver.observe(this, {
51
+ subtree: true,
52
+ childList: true,
53
+ characterData: true,
54
+ attributes: true,
55
+ attributeFilter: ['slot'],
56
+ });
57
57
  }
58
58
 
59
59
  disconnectedCallback() {
60
- window.removeEventListener('mouseup', this.__handlePress);
61
- this.removeEventListener('click', this.__dispatchClickWithThrottle);
60
+ this._contentObserver.disconnect();
62
61
  super.disconnectedCallback();
63
62
  }
64
63
 
64
+ override get tabIndex() {
65
+ return this._rovingTabIndex;
66
+ }
67
+
68
+ override set tabIndex(value: number) {
69
+ this._rovingTabIndex = value;
70
+ this.requestUpdate();
71
+ }
72
+
65
73
  override focus() {
66
74
  this.itemElement?.focus();
67
75
  }
@@ -70,129 +78,81 @@ export class MenuItem extends BaseButtonMixin(BaseHyperlinkMixin(LitElement)) {
70
78
  this.itemElement?.blur();
71
79
  }
72
80
 
73
- __dispatchClickWithThrottle: (event: MouseEvent | KeyboardEvent) => void =
74
- event => {
75
- this.__dispatchClick(event);
76
- };
77
-
78
- __dispatchClick = (event: MouseEvent | KeyboardEvent) => {
79
- // If the button is soft-disabled or a disabled link, we need to explicitly
80
- // prevent the click from propagating to other event listeners as well as
81
- // prevent the default action.
82
- if (this.softDisabled || (this.disabled && this.href)) {
83
- event.stopImmediatePropagation();
84
- event.preventDefault();
85
- return;
86
- }
87
-
88
- if (!isActivationClick(event) || !this.itemElement) {
89
- return;
90
- }
91
-
92
- this.focus();
93
- dispatchActivationClick(this.itemElement);
94
- };
95
-
96
- __handleKeyDown = (event: KeyboardEvent) => {
97
- this.__handlePress(event);
98
-
99
- if (this.disabled || this.softDisabled || !this.itemElement) {
100
- return;
101
- }
102
-
103
- if (event.key === ' ') {
104
- event.preventDefault();
105
- this.itemElement.click();
106
- return;
107
- }
108
-
109
- if (event.key === 'Enter' && !this.__isLink()) {
110
- event.preventDefault();
111
- this.itemElement.click();
112
- }
113
- };
114
-
115
- __handlePress = (event: KeyboardEvent | MouseEvent) => {
116
- if (this.disabled || this.softDisabled) return;
117
- if (
118
- event instanceof KeyboardEvent &&
119
- event.type === 'keydown' &&
120
- (event.key === 'Enter' || event.key === ' ')
121
- ) {
122
- this.isPressed = true;
123
- } else if (event.type === 'mousedown') {
124
- this.isPressed = true;
125
- } else {
126
- this.isPressed = false;
127
- }
128
- };
129
-
130
- render() {
131
- const isLink = this.__isLink();
81
+ private _hasNamedSlot(...names: string[]) {
82
+ return names.some(name =>
83
+ Array.from(this.children).some(child => child.getAttribute('slot') === name),
84
+ );
85
+ }
132
86
 
133
- const cssClasses = {
134
- 'menu-item': true,
135
- disabled: this.disabled,
136
- selected: this.selected,
137
- pressed: this.isPressed,
138
- };
87
+ private _hasDefaultSlot() {
88
+ return Array.from(this.childNodes).some(node => {
89
+ if (node.nodeType === Node.TEXT_NODE) {
90
+ return Boolean(node.textContent?.trim());
91
+ }
92
+
93
+ return (
94
+ node.nodeType === Node.ELEMENT_NODE &&
95
+ !(node as Element).hasAttribute('slot')
96
+ );
97
+ });
98
+ }
139
99
 
100
+ render() {
140
101
  const controls = this.getAttribute('aria-controls');
141
102
 
142
- if (isLink) {
143
- return html`<a
103
+ return html`
104
+ <wc-item
144
105
  id="item"
145
- class=${classMap(cssClasses)}
146
- href=${this.href}
147
- target=${this.target}
148
- tabindex=${this.disabled ? '-1' : '0'}
149
-
150
- @click=${this.__dispatchClickWithThrottle}
151
- @mousedown=${this.__handlePress}
152
- @keydown=${this.__handleKeyDown}
153
- @keyup=${this.__handlePress}
154
-
155
- aria-disabled=${String(this.disabled)}
106
+ class="menu-item"
107
+ role="menuitem"
108
+ tabindex=${String(this.tabIndex)}
109
+ ?selected=${this.selected}
110
+ ?disabled=${this.disabled}
111
+ .softDisabled=${this.softDisabled}
112
+ .htmlType=${this.htmlType}
113
+ .href=${this.href}
114
+ .target=${this.target}
115
+ .rel=${this.rel}
116
+ .download=${this.download}
156
117
  aria-haspopup=${this.hasSubmenu ? 'menu' : nothing}
157
- aria-controls=${this.hasSubmenu && controls ? controls : nothing}
158
- aria-expanded=${this.hasSubmenu ? String(this.submenuOpen) : nothing}
118
+ aria-controls=${ifDefined(this.hasSubmenu && controls ? controls : undefined)}
119
+ aria-expanded=${ifDefined(this.hasSubmenu ? String(this.submenuOpen) : undefined)}
159
120
  >
160
121
  ${this.renderContent()}
161
- </a> `;
162
- }
163
-
164
- return html`<div
165
- id="item"
166
- class=${classMap(cssClasses)}
167
- tabindex=${this.disabled ? '-1' : '0'}
168
-
169
- @click=${this.__dispatchClick}
170
- @mousedown=${this.__handlePress}
171
- @keydown=${this.__handleKeyDown}
172
- @keyup=${this.__handlePress}
173
-
174
- aria-disabled=${String(this.disabled)}
175
- aria-haspopup=${this.hasSubmenu ? 'menu' : nothing}
176
- aria-controls=${this.hasSubmenu && controls ? controls : nothing}
177
- aria-expanded=${this.hasSubmenu ? String(this.submenuOpen) : nothing}
178
- >
179
- ${this.renderContent()}
180
- </div>`;
122
+ </wc-item>
123
+ `;
181
124
  }
182
125
 
183
126
  renderContent() {
127
+ const hasStart = this._hasNamedSlot('start');
128
+ const hasOverline = this._hasNamedSlot('overline');
129
+ const hasHeadline = this._hasNamedSlot('headline');
130
+ const hasDefault = this._hasDefaultSlot();
131
+ const hasSupportingText = this._hasNamedSlot('supporting-text');
132
+ const hasTrailingSupportingText = this._hasNamedSlot(
133
+ 'trailing-supporting-text',
134
+ );
135
+ const hasEnd = this._hasNamedSlot('end');
136
+
184
137
  return html`
185
- <wc-focus-ring class="focus-ring" for='item'></wc-focus-ring>
186
- <div class="background"></div>
187
- <wc-ripple class="ripple"></wc-ripple>
188
-
189
- <div class="menu-item-content" data-variant=${this.variant}>
190
- <slot name="leading-icon"></slot>
191
- <div class="slot-container">
192
- <slot></slot>
193
- </div>
194
- <slot name="trailing-supporting-text"></slot>
195
- </div>
138
+ ${hasStart ? html`<slot name="start" slot="start"></slot>` : nothing}
139
+ ${hasOverline
140
+ ? html`<slot name="overline" slot="overline"></slot>`
141
+ : nothing}
142
+ ${hasHeadline ? html`<slot name="headline" slot="headline"></slot>` : nothing}
143
+ ${hasDefault ? html`<slot></slot>` : nothing}
144
+ ${hasSupportingText
145
+ ? html`<slot name="supporting-text" slot="supporting-text"></slot>`
146
+ : nothing}
147
+ ${hasTrailingSupportingText
148
+ ? html`
149
+ <slot
150
+ name="trailing-supporting-text"
151
+ slot="trailing-supporting-text"
152
+ ></slot>
153
+ `
154
+ : nothing}
155
+ ${hasEnd ? html`<slot name="end" slot="end"></slot>` : nothing}
196
156
  `;
197
157
  }
198
158
  }
@@ -38,6 +38,10 @@ export class SubMenu extends LitElement {
38
38
 
39
39
  private _closeTimeout?: number;
40
40
 
41
+ private _resolveAnchorElement(item: MenuItem) {
42
+ return item.itemElement?.itemElement ?? item.itemElement ?? item;
43
+ }
44
+
41
45
  private readonly _onChildMenuOpened = () => {
42
46
  const { item } = this;
43
47
  if (!item) {
@@ -91,7 +95,7 @@ export class SubMenu extends LitElement {
91
95
  return;
92
96
  }
93
97
 
94
- menu.anchorElement = item;
98
+ menu.anchorElement = this._resolveAnchorElement(item);
95
99
  menu.isSubmenu = true;
96
100
  menu.show();
97
101
 
@@ -152,7 +156,7 @@ export class SubMenu extends LitElement {
152
156
  menu.addEventListener('closed', this._onChildMenuClosed);
153
157
 
154
158
  menu.isSubmenu = true;
155
- menu.anchorElement = item;
159
+ menu.anchorElement = this._resolveAnchorElement(item);
156
160
  menu.placement =
157
161
  getComputedStyle(this).direction === 'rtl' ? 'left-start' : 'right-start';
158
162
  menu.offset = 4;
@@ -32,17 +32,13 @@ import { NavigationRailItem } from './navigation-rail-item.js';
32
32
  * ```html
33
33
  * <wc-navigation-rail>
34
34
  * <wc-navigation-rail-item active>
35
- * <wc-icon slot="icon">home</wc-icon>
35
+ * <wc-icon slot="icon" name="home"></wc-icon>
36
36
  * Home
37
37
  * </wc-navigation-rail-item>
38
38
  * <wc-navigation-rail-item>
39
- * <wc-icon slot="icon">search</wc-icon>
39
+ * <wc-icon slot="icon" name="search"></wc-icon>
40
40
  * Search
41
41
  * </wc-navigation-rail-item>
42
- * <wc-navigation-rail-item>
43
- * <wc-icon slot="icon">settings</wc-icon>
44
- * Settings
45
- * </wc-navigation-rail-item>
46
42
  * </wc-navigation-rail>
47
43
  * ```
48
44
  * @tags navigation
@@ -30,6 +30,7 @@ import { Radio } from './radio/radio.js';
30
30
  import { Menu } from './menu/menu/menu.js';
31
31
  import { MenuItem } from './menu/menu-item/menu-item.js';
32
32
  import { SubMenu } from './menu/sub-menu/sub-menu.js';
33
+ import { Item } from './item/item.js';
33
34
  import { List } from './list/list.js';
34
35
  import { ListItem } from './list/list-item.js';
35
36
 
@@ -290,6 +291,9 @@ const loaderConfig: LoaderConfig = {
290
291
  'wc-list-item': {
291
292
  CustomElementClass: ListItem,
292
293
  },
294
+ 'wc-item': {
295
+ CustomElementClass: Item,
296
+ },
293
297
  'wc-container': {
294
298
  CustomElementClass: Container,
295
299
  },
@@ -9,7 +9,7 @@ import styles from './popover-content.scss';
9
9
  * @tag wc-popover-content
10
10
  * @rawTag popover-content
11
11
  * @summary Content container for the wc-popover component.
12
- * @childComponent true
12
+ * @parentRawTag popover
13
13
  * @tags display
14
14
  *
15
15
  * @cssprop --popover-content-background - Background color of the popover content. Defaults to `var(--color-surface-container)`.
@@ -97,16 +97,15 @@ export class Search extends LitElement {
97
97
  );
98
98
  }
99
99
 
100
- /** Focuses the internal input element. */
101
- override focus() {
100
+ override async focus() {
101
+ await Promise.all([
102
+ customElements.whenDefined('wc-input'),
103
+ customElements.whenDefined('wc-field'),
104
+ ]);
105
+ await this.updateComplete;
102
106
  this.inputElement?.focus();
103
107
  }
104
108
 
105
- /** Blurs the internal input element. */
106
- override blur() {
107
- this.inputElement?.blur();
108
- }
109
-
110
109
  private __handleInput(event: InputEvent) {
111
110
  const input = event.target as HTMLInputElement;
112
111
  this.value = input.value;
@@ -150,13 +149,9 @@ export class Search extends LitElement {
150
149
  }
151
150
  }
152
151
 
153
- private __handleFocus() {
154
- this.focused = true;
155
- }
156
-
157
- private __handleBlur() {
158
- this.focused = false;
159
- }
152
+ private __handleFocusChange = (event: FocusEvent) => {
153
+ this.focused = event.type === 'focus';
154
+ };
160
155
 
161
156
  private __clearValue() {
162
157
  this.value = '';
@@ -230,8 +225,8 @@ export class Search extends LitElement {
230
225
  @input=${this.__handleInput}
231
226
  @change=${this.__handleChange}
232
227
  @keydown=${this.__handleKeydown}
233
- @focus=${this.__handleFocus}
234
- @blur=${this.__handleBlur}
228
+ @focus=${this.__handleFocusChange}
229
+ @blur=${this.__handleFocusChange}
235
230
  />
236
231
 
237
232
  <div class="trailing-actions">
@@ -94,7 +94,7 @@ export class SelectOptionElement extends LitElement {
94
94
  ?keep-open=${this.keepOpen}
95
95
  >
96
96
  ${this.icon
97
- ? html`<wc-icon name=${this.icon} slot="leading-icon"></wc-icon>`
97
+ ? html`<wc-icon name=${this.icon} slot="start"></wc-icon>`
98
98
  : nothing}
99
99
  <slot>${this.value === '' ? 'None' : ''}</slot>
100
100
  ${this.selected && this.keepOpen
@@ -98,18 +98,9 @@
98
98
  /* Multi-select chips area — single scrollable row, no vertical growth */
99
99
  .chips-container {
100
100
  display: flex;
101
- flex-wrap: nowrap;
102
- overflow-x: auto;
103
- scrollbar-width: none;
104
- gap: var(--spacing-050);
105
- padding-block: var(--spacing-050);
106
101
  align-items: center;
107
102
  flex: 1;
108
- min-width: 0;
109
-
110
- &::-webkit-scrollbar {
111
- display: none;
112
- }
103
+ padding-block: .5rem;
113
104
  }
114
105
 
115
106
  /* Disabled state */
@@ -430,6 +430,7 @@ export class Select extends BaseInput {
430
430
  // Multi-select: show chips for selected items
431
431
  if (this.multiple && this._selectedValues.length > 0) {
432
432
  return html`<div class="chips-container">
433
+ <wc-chip-set>
433
434
  ${this._selectedValues.map(
434
435
  val => html`
435
436
  <wc-chip
@@ -441,6 +442,7 @@ export class Select extends BaseInput {
441
442
  >
442
443
  `,
443
444
  )}
445
+ </wc-chip-set>
444
446
  </div>`;
445
447
  }
446
448
 
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow-designer-node-BWrPuxAR.js","sources":["../../src/flow-designer/flow-designer-node.ts"],"sourcesContent":["import { html, LitElement, nothing } from 'lit';\nimport { property, state } from 'lit/decorators.js';\nimport IndividualComponent from '@/IndividualComponent.js';\nimport styles from './flow-designer.scss';\nimport type { WorkflowNode } from './types.js';\n\n/**\n * Individual node component for flow designer\n * Renders a single workflow node with customizable slot templates\n *\n * @tag wc-flow-designer-node\n * @rawTag flow-designer-node\n * @wip true\n */\n@IndividualComponent\nexport class FlowDesignerNode extends LitElement {\n static styles = [styles];\n\n /**\n * The workflow node to render\n */\n @property({ type: Object })\n node: WorkflowNode = { id: '', type: 'action', label: '' };\n\n /**\n * Whether this node is currently selected\n */\n @property({ type: Boolean, reflect: true, attribute: 'selected' })\n isSelected: boolean = false;\n\n /**\n * Whether this node is in edit mode\n */\n @property({ type: Boolean, reflect: true, attribute: 'editing' })\n isEditing: boolean = false;\n\n /**\n * Whether this node is disabled\n */\n @property({ type: Boolean, reflect: true })\n disabled: boolean = false;\n\n /**\n * Whether to show the delete button\n */\n @property({ type: Boolean, attribute: 'show-delete' })\n showDelete: boolean = true;\n\n private _handleClick = () => {\n this.dispatchEvent(\n new CustomEvent('node-click', {\n detail: { nodeId: this.node.id },\n bubbles: true,\n composed: true,\n })\n );\n };\n\n private _handleDoubleClick = () => {\n this.dispatchEvent(\n new CustomEvent('node-edit-start', {\n detail: { nodeId: this.node.id },\n bubbles: true,\n composed: true,\n })\n );\n };\n\n private _handleDelete = (e: Event) => {\n e.stopPropagation();\n if (confirm(`Delete \"${this.node.label}\"?`)) {\n this.dispatchEvent(\n new CustomEvent('node-delete', {\n detail: { nodeId: this.node.id },\n bubbles: true,\n composed: true,\n })\n );\n }\n };\n\n private _handleMouseEnter = () => {\n // Node hover state handled via CSS\n };\n\n private _handleMouseLeave = () => {\n // Node hover state handled via CSS\n };\n\n render() {\n const { node, isSelected, isEditing, disabled } = this;\n const nodeType = node.type || 'action';\n\n return html`\n <div\n class=\"node-card ${nodeType}\"\n ?selected=${isSelected}\n ?editing=${isEditing}\n ?disabled=${disabled}\n @click=${this._handleClick}\n @dblclick=${this._handleDoubleClick}\n role=\"button\"\n tabindex=\"0\"\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') this._handleClick();\n }}\n >\n <!-- Customizable header slot -->\n <slot name=\"${nodeType}-header\">\n ${this._renderDefaultHeader()}\n </slot>\n\n <!-- Customizable body slot -->\n <slot name=\"${nodeType}-body\">${this._renderDefaultBody()}</slot>\n\n <!-- Action buttons -->\n ${this.isEditing\n ? html`\n <div class=\"node-actions\">\n <button class=\"btn-sm\" @click=${this._handleDelete}>\n Delete\n </button>\n </div>\n `\n : nothing}\n </div>\n `;\n }\n\n private _renderDefaultHeader() {\n const { node } = this;\n const iconMap: Record<string, string> = {\n trigger: 'play-circle',\n action: 'check-circle',\n decision: 'help-circle',\n loop_start: 'repeat',\n loop_end: 'repeat',\n fork: 'git-branch',\n join: 'git-merge',\n };\n\n const icon = iconMap[node.type] || 'activity';\n\n return html`\n <div class=\"node-header\">\n <wc-icon provider=\"carbon\" name=${icon} class=\"node-icon\"></wc-icon>\n <span class=\"node-title\">${node.label}</span>\n </div>\n `;\n }\n\n private _renderDefaultBody() {\n const { node } = this;\n return html`\n <div class=\"node-body\">\n ${node.description\n ? html`<p class=\"node-description\">${node.description}</p>`\n : nothing}\n <div class=\"node-metadata\">\n <span class=\"node-type-tag\">${node.type}</span>\n ${node.id ? html`<span class=\"node-id\">${node.id}</span>` : nothing}\n </div>\n </div>\n `;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'wc-flow-designer-node': FlowDesignerNode;\n }\n}\n"],"names":["LitElement","html","nothing","styles","property"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"icon-button-ohxHhy4t.js","sources":["../../src/button/icon-button/icon-button.ts"],"sourcesContent":["import { html } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport styles from '../button/button.scss';\nimport colorStyles from '../button/button-colors.scss';\nimport sizeStyles from './icon-button-sizes.scss';\nimport { spread } from '@/__directive/spread.js';\nimport { throttle } from '@/__utils/throttle.js';\nimport { BaseButton } from '../BaseButton.js';\n\n/**\n * @label Icon Button\n * @tag wc-icon-button\n * @rawTag icon-button\n *\n * @summary Icon buttons allow users to take actions, and make choices, with a single tap.\n *\n * @overview\n * <p>Icon buttons are clickable elements that are used to trigger actions. They communicate calls to action to the user and allow users to interact with pages in a variety of ways. IconButton labels express what action will occur when the user interacts with it.</p>\n *\n * @cssprop --button-container-shape: Defines the border radius of the button container shape.\n *\n * @cssprop --button-container-shape-start-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-start-end: Defines the end position of the button container shape.\n * @cssprop --button-container-shape-end-start: Defines the start position of the button container shape.\n * @cssprop --button-container-shape-end-end: Defines the end position of the button container shape.\n *\n *\n * @cssprop --filled-button-container-color: Color of the filled button container.\n * @cssprop --filled-button-label-text-color: Text color of the filled button label.\n *\n * @cssprop --outlined-button-container-color: Color of the outlined button container.\n * @cssprop --outlined-button-label-text-color: Text color of the outlined button label.\n *\n * @cssprop --text-button-label-text-color: Text color of the text button label.\n *\n * @cssprop --tonal-button-container-color: Color of the tonal button container.\n * @cssprop --tonal-button-label-text-color: Text color of the tonal button label.\n *\n * @cssprop --elevated-button-container-color: Color of the elevated button container.\n * @cssprop --elevated-button-label-text-color: Text color of the elevated button label.\n *\n * @cssprop --neo-button-container-color: Color of the neo button container.\n * @cssprop --neo-button-label-text-color: Text color of the neo button label.\n *\n * @fires {CustomEvent} button:click - Dispatched when the button is clicked.\n *\n * @example\n * ```html\n * <wc-icon-button><wc-icon name=\"home\"></wc-icon></wc-icon-button>\n * ```\n * @tags display\n */\nexport class IconButton extends BaseButton {\n static override styles = [styles, colorStyles, sizeStyles];\n\n /**\n * Button size.\n * Possible values are `\"xs\"`, `\"sm\"`, `\"md\"`, `\"lg\"`, `\"xl\"`. Defaults to `\"sm\"`.\n */\n @property({ reflect: true }) size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /**\n * Type is preset of color and variant. Type will be only applied.\n *\n */\n @property({ type: String }) type?: 'primary' | 'secondary' | 'tertiary';\n \n /**\n * The visual style of the button.\n *\n * Possible variant values:\n * `\"filled\"` is a filled button.\n * `\"outlined\"` is an outlined button.\n * `\"text\"` is a transparent button.\n * `\"tonal\"` is a light color button.\n * `\"elevated\"` is elevated button\n */\n @property() variant:\n | 'elevated'\n | 'filled'\n | 'tonal'\n | 'outlined'\n | 'text'\n | 'neo' = 'filled';\n \n /**\n * Defines the primary color of the button. This can be set to predefined color names to apply specific color themes.\n */\n @property({ reflect: true }) color:\n | 'primary'\n | 'success'\n | 'danger'\n | 'warning'\n | 'surface'\n | 'on-surface' = 'primary';\n\n /**\n * Additional ARIA attributes to pass to the inner button/anchor element.\n */\n @property({ reflect: true })\n configAria?: { [key: string]: any };\n\n override focus() {\n this.buttonElement?.focus();\n }\n\n override blur() {\n this.buttonElement?.blur();\n }\n \n override firstUpdated() {\n this.__dispatchClickWithThrottle = throttle(\n this.__dispatchClick,\n this.throttleDelay,\n );\n this.__convertTypeToVariantAndColor();\n }\n\n __convertTypeToVariantAndColor() {\n if (this.type === 'primary') {\n this.color = 'primary';\n this.variant = 'filled';\n } else if (this.type === 'secondary') {\n this.color = 'surface';\n this.variant = 'filled';\n } else if (this.type === 'tertiary') {\n this.color = 'primary';\n this.variant = 'text';\n } else if (this.type === 'danger') {\n this.color = 'danger';\n this.variant = 'filled';\n }\n }\n\n override render() {\n const isLink = this.__isLink();\n\n const cssClasses = {\n button: true,\n 'button-element': true,\n [`size-${this.size}`]: true,\n [`variant-${this.variant}`]: true,\n [`color-${this.color}`]: true,\n disabled: this.disabled || this.softDisabled,\n pressed: this.isPressed,\n skeleton: this.skeleton,\n };\n\n if (!isLink) {\n return html`<button\n class=${classMap(cssClasses)}\n id=\"button\"\n type=${this.htmlType}\n @click=${this.__dispatchClickWithThrottle}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n \n aria-describedby=${ifDefined(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}\n ?aria-disabled=${this.softDisabled}\n\n ?disabled=${this.disabled}\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </button>\n ${this.__renderTooltip()}`;\n }\n return html`<a\n class=${classMap(cssClasses)}\n id=\"button\"\n href=${this.href}\n target=${this.target}\n tabindex=${this.disabled ? '-1' : '0'}\n @click=${this.__dispatchClick}\n @mousedown=${this.__handlePress}\n @keydown=${this.__handlePress}\n @keyup=${this.__handlePress}\n role=\"button\"\n \n aria-describedby=${ifDefined(this.softDisabled ? BaseButton.DISABLED_REASON_ID : undefined)}\n ?aria-disabled=${this.softDisabled}\n\n ${spread(this.configAria)}\n >\n ${this.renderButtonContent()}\n </a>\n ${this.__renderTooltip()}`;\n }\n\n renderButtonContent() {\n return html`\n <wc-focus-ring class=\"focus-ring\" for='button'></wc-focus-ring>\n <wc-elevation class=\"elevation\"></wc-elevation>\n <div class=\"neo-background\"></div>\n <div class=\"background\"></div>\n <div class=\"outline\"></div>\n <wc-ripple class=\"ripple\"></wc-ripple>\n <wc-skeleton class=\"skeleton\"></wc-skeleton>\n\n <div class=\"button-content\">\n <slot></slot>\n </div>\n\n ${this.__renderDisabledReason(this.softDisabled)}\n `;\n }\n}\n"],"names":["html","classMap","ifDefined","styles","colorStyles","sizeStyles","property"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;AACG,MAAO,UAAW,SAAQ,UAAU,CAAA;AAA1C,IAAA,WAAA,GAAA;;AAGE;;;AAGG;QAC0B,IAAA,CAAA,IAAI,GAAqC,IAAI;AAQxE;;;;;;;;;AASG;QACS,IAAA,CAAA,OAAO,GAMP,QAAQ;AAEpB;;AAEG;QAC0B,IAAA,CAAA,KAAK,GAMf,SAAS;IAiHhC;IAzGW,KAAK,GAAA;AACZ,QAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;IAC7B;IAES,IAAI,GAAA;AACX,QAAA,IAAI,CAAC,aAAa,EAAE,IAAI,EAAE;IAC5B;IAES,YAAY,GAAA;AACnB,QAAA,IAAI,CAAC,2BAA2B,GAAG,QAAQ,CACzC,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,aAAa,CACnB;QACD,IAAI,CAAC,8BAA8B,EAAE;IACvC;IAEA,8BAA8B,GAAA;AAC5B,QAAA,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;AAC3B,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE;AACpC,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ;QACzB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE;AACnC,YAAA,IAAI,CAAC,KAAK,GAAG,SAAS;AACtB,YAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QACvB;AAAO,aAAA,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE;AACjC,YAAA,IAAI,CAAC,KAAK,GAAG,QAAQ;AACrB,YAAA,IAAI,CAAC,OAAO,GAAG,QAAQ;QACzB;IACF;IAES,MAAM,GAAA;AACb,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;AAE9B,QAAA,MAAM,UAAU,GAAG;AACjB,YAAA,MAAM,EAAE,IAAI;AACZ,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAA,CAAE,GAAG,IAAI;AAC3B,YAAA,CAAC,WAAW,IAAI,CAAC,OAAO,CAAA,CAAE,GAAG,IAAI;AACjC,YAAA,CAAC,SAAS,IAAI,CAAC,KAAK,CAAA,CAAE,GAAG,IAAI;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;YAC5C,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB;QAED,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAOA,CAAI,CAAA,CAAA;kBACCC,CAAQ,CAAC,UAAU,CAAC;;AAErB,eAAA,EAAA,IAAI,CAAC,QAAQ;AACX,iBAAA,EAAA,IAAI,CAAC,2BAA2B;AAC5B,qBAAA,EAAA,IAAI,CAAC,aAAa;AACpB,mBAAA,EAAA,IAAI,CAAC,aAAa;AACpB,iBAAA,EAAA,IAAI,CAAC,aAAa;;AAER,2BAAA,EAAAC,CAAS,CAAC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,kBAAkB,GAAG,SAAS,CAAC;AAC1E,yBAAA,EAAA,IAAI,CAAC,YAAY;;AAEtB,oBAAA,EAAA,IAAI,CAAC,QAAQ;AACvB,UAAA,EAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;;YAEvB,IAAI,CAAC,mBAAmB,EAAE;;AAE5B,QAAA,EAAA,IAAI,CAAC,eAAe,EAAE,CAAA,CAAE;QAC9B;AACA,QAAA,OAAOF,CAAI,CAAA,CAAA;gBACCC,CAAQ,CAAC,UAAU,CAAC;;AAErB,aAAA,EAAA,IAAI,CAAC,IAAI;AACP,eAAA,EAAA,IAAI,CAAC,MAAM;mBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG;AAC5B,eAAA,EAAA,IAAI,CAAC,eAAe;AAChB,mBAAA,EAAA,IAAI,CAAC,aAAa;AACpB,iBAAA,EAAA,IAAI,CAAC,aAAa;AACpB,eAAA,EAAA,IAAI,CAAC,aAAa;;;AAGR,yBAAA,EAAAC,CAAS,CAAC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,kBAAkB,GAAG,SAAS,CAAC;AAC1E,uBAAA,EAAA,IAAI,CAAC,YAAY;;AAEhC,QAAA,EAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;;UAEvB,IAAI,CAAC,mBAAmB,EAAE;;AAE5B,MAAA,EAAA,IAAI,CAAC,eAAe,EAAE,CAAA,CAAE;IAC9B;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAOF,CAAI,CAAA;;;;;;;;;;;;;AAaP,MAAA,EAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,YAAY,CAAC;KACjD;IACH;;AAzJgB,UAAA,CAAA,MAAM,GAAG,CAACG,UAAM,EAAEC,UAAW,EAAEC,QAAU,CAAnC;AAMO,UAAA,CAAA;AAA5B,IAAAC,CAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;AAAgD,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAM7C,UAAA,CAAA;AAA3B,IAAAA,CAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE;AAA8C,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,CAAA;AAY5D,UAAA,CAAA;AAAX,IAAAA,CAAQ;AAMY,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAKQ,UAAA,CAAA;AAA5B,IAAAA,CAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;AAME,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,OAAA,EAAA,MAAA,CAAA;AAM/B,UAAA,CAAA;AADC,IAAAA,CAAQ,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE;AACS,CAAA,EAAA,UAAA,CAAA,SAAA,EAAA,YAAA,EAAA,MAAA,CAAA;;;;"}