mtrl 0.2.7 → 0.2.8

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 (164) hide show
  1. package/demo/build.ts +349 -0
  2. package/demo/index.html +110 -0
  3. package/demo/main.js +448 -0
  4. package/demo/styles.css +239 -0
  5. package/package.json +14 -3
  6. package/server.ts +86 -0
  7. package/src/components/badge/api.ts +23 -14
  8. package/src/components/badge/badge.ts +2 -2
  9. package/src/components/badge/config.ts +10 -11
  10. package/src/components/badge/features.ts +15 -10
  11. package/src/components/badge/index.ts +27 -2
  12. package/src/components/badge/types.ts +28 -8
  13. package/src/components/bottom-app-bar/bottom-app-bar.ts +2 -44
  14. package/src/components/bottom-app-bar/config.ts +1 -45
  15. package/src/components/bottom-app-bar/index.ts +7 -1
  16. package/src/components/bottom-app-bar/types.ts +7 -1
  17. package/src/components/button/button.ts +0 -1
  18. package/src/components/button/config.ts +1 -2
  19. package/src/components/button/index.ts +10 -2
  20. package/src/components/button/types.ts +14 -2
  21. package/src/components/card/config.ts +17 -9
  22. package/src/components/card/content.ts +8 -10
  23. package/src/components/card/features.ts +4 -6
  24. package/src/components/card/index.ts +29 -2
  25. package/src/components/card/types.ts +6 -23
  26. package/src/components/checkbox/config.ts +3 -4
  27. package/src/components/checkbox/index.ts +1 -2
  28. package/src/components/checkbox/types.ts +12 -3
  29. package/src/components/chip/api.ts +170 -221
  30. package/src/components/chip/chip.ts +34 -302
  31. package/src/components/chip/config.ts +1 -2
  32. package/src/components/chip/index.ts +10 -2
  33. package/src/components/chip/types.ts +224 -35
  34. package/src/components/datepicker/api.ts +18 -25
  35. package/src/components/datepicker/config.ts +9 -12
  36. package/src/components/datepicker/datepicker.ts +7 -12
  37. package/src/components/datepicker/index.ts +10 -7
  38. package/src/components/datepicker/render.ts +16 -18
  39. package/src/components/datepicker/types.ts +164 -35
  40. package/src/components/datepicker/utils.ts +1 -2
  41. package/src/components/dialog/api.ts +7 -8
  42. package/src/components/dialog/config.ts +3 -4
  43. package/src/components/dialog/features.ts +56 -22
  44. package/src/components/dialog/index.ts +38 -8
  45. package/src/components/dialog/types.ts +33 -10
  46. package/src/components/divider/index.ts +5 -1
  47. package/src/components/extended-fab/config.ts +6 -2
  48. package/src/components/extended-fab/index.ts +7 -2
  49. package/src/components/extended-fab/types.ts +21 -4
  50. package/src/components/fab/config.ts +3 -4
  51. package/src/components/fab/fab.ts +1 -1
  52. package/src/components/fab/index.ts +7 -2
  53. package/src/components/fab/types.ts +21 -4
  54. package/src/components/list/config.ts +4 -5
  55. package/src/components/list/features.ts +6 -7
  56. package/src/components/list/index.ts +7 -9
  57. package/src/components/list/list-item.ts +12 -13
  58. package/src/components/list/types.ts +50 -5
  59. package/src/components/list/utils.ts +30 -3
  60. package/src/components/menu/features/items-manager.ts +9 -9
  61. package/src/components/menu/features/positioning.ts +7 -7
  62. package/src/components/menu/features/visibility.ts +7 -7
  63. package/src/components/menu/index.ts +7 -9
  64. package/src/components/menu/menu-item.ts +6 -6
  65. package/src/components/menu/menu.ts +22 -0
  66. package/src/components/menu/types.ts +29 -10
  67. package/src/components/menu/utils.ts +67 -0
  68. package/src/components/navigation/config.ts +22 -10
  69. package/src/components/navigation/features/items.ts +31 -27
  70. package/src/components/navigation/index.ts +0 -6
  71. package/src/components/navigation/nav-item.ts +12 -24
  72. package/src/components/navigation/navigation.ts +4 -6
  73. package/src/components/navigation/types.ts +228 -203
  74. package/src/components/progress/api.ts +2 -3
  75. package/src/components/progress/config.ts +2 -3
  76. package/src/components/progress/index.ts +0 -1
  77. package/src/components/progress/progress.ts +1 -2
  78. package/src/components/progress/types.ts +186 -33
  79. package/src/components/radios/config.ts +1 -1
  80. package/src/components/radios/index.ts +0 -1
  81. package/src/components/radios/types.ts +0 -7
  82. package/src/components/search/config.ts +1 -2
  83. package/src/components/search/features/search.ts +14 -15
  84. package/src/components/search/features/states.ts +5 -1
  85. package/src/components/search/features/structure.ts +3 -4
  86. package/src/components/search/index.ts +0 -3
  87. package/src/components/search/types.ts +18 -6
  88. package/src/components/segmented-button/config.ts +20 -7
  89. package/src/components/segmented-button/segment.ts +6 -7
  90. package/src/components/segmented-button/segmented-button.ts +4 -5
  91. package/src/components/segmented-button/types.ts +37 -2
  92. package/src/components/slider/types.ts +34 -8
  93. package/src/components/snackbar/config.ts +2 -3
  94. package/src/components/snackbar/constants.ts +0 -32
  95. package/src/components/snackbar/index.ts +0 -1
  96. package/src/components/snackbar/position.ts +9 -1
  97. package/src/components/snackbar/types.ts +122 -46
  98. package/src/components/switch/config.ts +2 -3
  99. package/src/components/switch/index.ts +0 -1
  100. package/src/components/switch/types.ts +3 -2
  101. package/src/components/tabs/config.ts +3 -4
  102. package/src/components/tabs/index.ts +0 -15
  103. package/src/components/tabs/tab-api.ts +12 -4
  104. package/src/components/tabs/tab.ts +18 -6
  105. package/src/components/tabs/types.ts +13 -3
  106. package/src/components/textfield/config.ts +2 -3
  107. package/src/components/textfield/index.ts +0 -1
  108. package/src/components/textfield/types.ts +17 -3
  109. package/src/components/timepicker/api.ts +1 -1
  110. package/src/components/timepicker/clockdial.ts +1 -1
  111. package/src/components/timepicker/config.ts +102 -4
  112. package/src/components/timepicker/index.ts +1 -6
  113. package/src/components/timepicker/render.ts +1 -1
  114. package/src/components/timepicker/timepicker.ts +1 -1
  115. package/src/components/tooltip/api.ts +1 -1
  116. package/src/components/tooltip/config.ts +27 -6
  117. package/src/components/tooltip/index.ts +0 -1
  118. package/src/components/tooltip/types.ts +13 -3
  119. package/src/core/compose/features/textlabel.ts +0 -3
  120. package/src/{components/tabs/_styles.scss → styles/components/_tabs.scss} +1 -1
  121. package/src/{components/textfield/_styles.scss → styles/components/_textfield.scss} +70 -67
  122. package/src/styles/main.scss +98 -49
  123. package/src/components/badge/constants.ts +0 -40
  124. package/src/components/button/constants.ts +0 -11
  125. package/src/components/card/constants.ts +0 -84
  126. package/src/components/datepicker/constants.ts +0 -98
  127. package/src/components/dialog/constants.ts +0 -32
  128. package/src/components/extended-fab/constants.ts +0 -36
  129. package/src/components/fab/constants.ts +0 -41
  130. package/src/components/menu/constants.ts +0 -154
  131. package/src/components/navigation/constants.ts +0 -200
  132. package/src/components/progress/constants.ts +0 -29
  133. package/src/components/search/constants.ts +0 -21
  134. package/src/components/segmented-button/constants.ts +0 -42
  135. package/src/components/switch/constants.ts +0 -80
  136. package/src/components/tabs/constants.ts +0 -89
  137. package/src/components/timepicker/constants.ts +0 -138
  138. /package/src/{components/badge/_styles.scss → styles/components/_badge.scss} +0 -0
  139. /package/src/{components/bottom-app-bar/_styles.scss → styles/components/_bottom-app-bar.scss} +0 -0
  140. /package/src/{components/button/_styles.scss → styles/components/_button.scss} +0 -0
  141. /package/src/{components/card/_styles.scss → styles/components/_card.scss} +0 -0
  142. /package/src/{components/carousel/_styles.scss → styles/components/_carousel.scss} +0 -0
  143. /package/src/{components/checkbox/_styles.scss → styles/components/_checkbox.scss} +0 -0
  144. /package/src/{components/chip/_styles.scss → styles/components/_chip.scss} +0 -0
  145. /package/src/{components/datepicker/_styles.scss → styles/components/_datepicker.scss} +0 -0
  146. /package/src/{components/dialog/_styles.scss → styles/components/_dialog.scss} +0 -0
  147. /package/src/{components/divider/_styles.scss → styles/components/_divider.scss} +0 -0
  148. /package/src/{components/extended-fab/_styles.scss → styles/components/_extended-fab.scss} +0 -0
  149. /package/src/{components/fab/_styles.scss → styles/components/_fab.scss} +0 -0
  150. /package/src/{components/list/_styles.scss → styles/components/_list.scss} +0 -0
  151. /package/src/{components/menu/_styles.scss → styles/components/_menu.scss} +0 -0
  152. /package/src/{components/navigation/_styles.scss → styles/components/_navigation.scss} +0 -0
  153. /package/src/{components/progress/_styles.scss → styles/components/_progress.scss} +0 -0
  154. /package/src/{components/radios/_styles.scss → styles/components/_radios.scss} +0 -0
  155. /package/src/{components/search/_styles.scss → styles/components/_search.scss} +0 -0
  156. /package/src/{components/segmented-button/_styles.scss → styles/components/_segmented-button.scss} +0 -0
  157. /package/src/{components/sheet/_styles.scss → styles/components/_sheet.scss} +0 -0
  158. /package/src/{components/slider/_styles.scss → styles/components/_slider.scss} +0 -0
  159. /package/src/{components/snackbar/_styles.scss → styles/components/_snackbar.scss} +0 -0
  160. /package/src/{components/switch/_styles.scss → styles/components/_switch.scss} +0 -0
  161. /package/src/{components/timepicker/_styles.scss → styles/components/_timepicker.scss} +0 -0
  162. /package/src/{components/tooltip/_styles.scss → styles/components/_tooltip.scss} +0 -0
  163. /package/src/{components/top-app-bar/_styles.scss → styles/components/_top-app-bar.scss} +0 -0
  164. /package/src/styles/utilities/{_color.scss → _colors.scss} +0 -0
@@ -1,244 +1,193 @@
1
- // src/components/chip/api.js
1
+ // src/components/chip/api.ts
2
+ import { ApiOptions, ChipComponent } from './types'
3
+
4
+ interface ComponentWithElements {
5
+ element: HTMLElement;
6
+ text?: {
7
+ setText: (content: string) => any;
8
+ getText: () => string;
9
+ getElement: () => HTMLElement | null;
10
+ };
11
+ icon?: {
12
+ setIcon: (html: string) => any;
13
+ getIcon: () => string;
14
+ getElement: () => HTMLElement | null;
15
+ };
16
+ getClass: (name: string) => string;
17
+ }
2
18
 
3
19
  /**
4
20
  * Enhances a chip component with API methods
5
- * @param {Object} options - API configuration options
6
- * @param {Object} options.disabled - Object containing enable/disable methods
7
- * @param {Object} options.lifecycle - Object containing lifecycle methods
21
+ * @param {ApiOptions} options - API configuration options
8
22
  * @returns {Function} Higher-order function that adds API methods to component
9
23
  * @internal This is an internal utility for the Chip component
10
24
  */
11
- export const withAPI = ({ disabled, lifecycle }) => (component) => {
12
- // Track selected state internally
13
- let isSelected = component.element.classList.contains(`${component.getClass('chip')}--selected`);
14
-
15
- return {
16
- ...component,
17
- element: component.element,
18
-
19
- /**
20
- * Gets the chip's value
21
- * @returns {string} The chip's value attribute
22
- */
23
- getValue() {
24
- return component.element.getAttribute('data-value') || '';
25
- },
26
-
27
- /**
28
- * Sets the chip's value
29
- * @param {string} value - Value to set
30
- * @returns {Object} The chip instance for chaining
31
- */
32
- setValue(value) {
33
- component.element.setAttribute('data-value', value || '');
34
- return this;
35
- },
36
-
37
- /**
38
- * Checks if the chip is disabled
39
- * @returns {boolean} True if the chip is disabled
40
- */
41
- isDisabled() {
42
- return component.element.getAttribute('aria-disabled') === 'true';
43
- },
44
-
45
- /**
46
- * Enables the chip
47
- * @returns {Object} The chip instance for chaining
48
- */
49
- enable() {
50
- disabled.enable();
51
- component.element.classList.remove(`${component.getClass('chip')}--disabled`);
52
- component.element.setAttribute('aria-disabled', 'false');
53
- component.element.setAttribute('tabindex', '0');
54
- return this;
55
- },
56
-
57
- /**
58
- * Disables the chip
59
- * @returns {Object} The chip instance for chaining
60
- */
61
- disable() {
62
- disabled.disable();
63
- component.element.classList.add(`${component.getClass('chip')}--disabled`);
64
- component.element.setAttribute('aria-disabled', 'true');
65
- component.element.setAttribute('tabindex', '-1');
66
- return this;
67
- },
68
-
69
- /**
70
- * Sets the chip's text content
71
- * @param {string} content - Text content
72
- * @returns {Object} The chip instance for chaining
73
- */
74
- setText(content) {
75
- const containerSelector = `.${component.getClass('chip')}-content`;
76
- const contentContainer = component.element.querySelector(containerSelector) || component.element;
25
+ export const withAPI = ({ disabled, lifecycle }: ApiOptions) =>
26
+ (component: ComponentWithElements): ChipComponent => {
27
+ // Track selected state internally
28
+ let isSelected = component.element.classList.contains(`${component.getClass('chip')}--selected`);
29
+
30
+ return {
31
+ ...component as any,
32
+ element: component.element,
33
+
34
+ getValue() {
35
+ return component.element.getAttribute('data-value') || null;
36
+ },
37
+
38
+ setValue(value: string) {
39
+ component.element.setAttribute('data-value', value || '');
40
+ return this;
41
+ },
77
42
 
78
- const textSelector = `.${component.getClass('chip')}-text`;
79
- let textElement = component.element.querySelector(textSelector);
43
+ isDisabled() {
44
+ return component.element.getAttribute('aria-disabled') === 'true';
45
+ },
80
46
 
81
- if (!textElement && content) {
82
- textElement = document.createElement('span');
83
- textElement.className = `${component.getClass('chip')}-text`;
47
+ enable() {
48
+ disabled.enable();
49
+ component.element.classList.remove(`${component.getClass('chip')}--disabled`);
50
+ component.element.setAttribute('aria-disabled', 'false');
51
+ component.element.setAttribute('tabindex', '0');
52
+ return this;
53
+ },
54
+
55
+ disable() {
56
+ disabled.disable();
57
+ component.element.classList.add(`${component.getClass('chip')}--disabled`);
58
+ component.element.setAttribute('aria-disabled', 'true');
59
+ component.element.setAttribute('tabindex', '-1');
60
+ return this;
61
+ },
62
+
63
+ setText(content: string) {
64
+ const containerSelector = `.${component.getClass('chip')}-content`;
65
+ const contentContainer = component.element.querySelector(containerSelector) || component.element;
84
66
 
85
- // Find the right position to insert (after leading icon if present, or as first child)
86
- const leadingIcon = component.element.querySelector(`.${component.getClass('chip')}-leading-icon`);
87
- if (leadingIcon) {
88
- contentContainer.insertBefore(textElement, leadingIcon.nextSibling);
89
- } else {
90
- contentContainer.insertBefore(textElement, contentContainer.firstChild);
67
+ const textSelector = `.${component.getClass('chip')}-text`;
68
+ let textElement = component.element.querySelector(textSelector);
69
+
70
+ if (!textElement && content) {
71
+ textElement = document.createElement('span');
72
+ textElement.className = `${component.getClass('chip')}-text`;
73
+
74
+ // Find the right position to insert (after leading icon if present, or as first child)
75
+ const leadingIcon = component.element.querySelector(`.${component.getClass('chip')}-leading-icon`);
76
+ if (leadingIcon) {
77
+ contentContainer.insertBefore(textElement, leadingIcon.nextSibling);
78
+ } else {
79
+ contentContainer.insertBefore(textElement, contentContainer.firstChild);
80
+ }
91
81
  }
92
- }
93
-
94
- if (textElement) {
95
- textElement.textContent = content || '';
96
82
 
97
- // Remove the element if content is empty
98
- if (!content && textElement.parentNode) {
99
- textElement.parentNode.removeChild(textElement);
83
+ if (textElement) {
84
+ textElement.textContent = content || '';
85
+
86
+ // Remove the element if content is empty
87
+ if (!content && textElement.parentNode) {
88
+ textElement.parentNode.removeChild(textElement);
89
+ }
100
90
  }
101
- }
91
+
92
+ return this;
93
+ },
102
94
 
103
- return this;
104
- },
105
-
106
- /**
107
- * Gets the chip's text content
108
- * @returns {string} The chip's text content
109
- */
110
- getText() {
111
- const textElement = component.element.querySelector(`.${component.getClass('chip')}-text`);
112
- return textElement ? textElement.textContent : '';
113
- },
114
-
115
- /**
116
- * Sets the chip's leading icon (alias for setLeadingIcon)
117
- * @param {string} icon - Icon HTML content
118
- * @returns {Object} The chip instance for chaining
119
- */
120
- setIcon(icon) {
121
- return this.setLeadingIcon(icon);
122
- },
123
-
124
- /**
125
- * Gets the chip's icon content
126
- * @returns {string} The chip's icon HTML
127
- */
128
- getIcon() {
129
- const iconElement = component.element.querySelector(`.${component.getClass('chip')}-leading-icon`);
130
- return iconElement ? iconElement.innerHTML : '';
131
- },
132
-
133
- /**
134
- * Sets the chip's leading icon
135
- * @param {string} icon - Icon HTML content
136
- * @returns {Object} The chip instance for chaining
137
- */
138
- setLeadingIcon(icon) {
139
- const contentContainer = component.element.querySelector(`.${component.getClass('chip')}-content`) || component.element;
140
- const leadingIconSelector = `.${component.getClass('chip')}-leading-icon`;
141
- let leadingIconElement = component.element.querySelector(leadingIconSelector);
142
-
143
- if (!leadingIconElement && icon) {
144
- leadingIconElement = document.createElement('span');
145
- leadingIconElement.className = `${component.getClass('chip')}-leading-icon`;
95
+ getText() {
96
+ const textElement = component.element.querySelector(`.${component.getClass('chip')}-text`);
97
+ return textElement ? textElement.textContent || '' : '';
98
+ },
99
+
100
+ setIcon(icon: string) {
101
+ return this.setLeadingIcon(icon);
102
+ },
103
+
104
+ getIcon() {
105
+ const iconElement = component.element.querySelector(`.${component.getClass('chip')}-leading-icon`);
106
+ return iconElement ? iconElement.innerHTML : '';
107
+ },
108
+
109
+ setLeadingIcon(icon: string) {
110
+ const contentContainer = component.element.querySelector(`.${component.getClass('chip')}-content`) || component.element;
111
+ const leadingIconSelector = `.${component.getClass('chip')}-leading-icon`;
112
+ let leadingIconElement = component.element.querySelector(leadingIconSelector);
146
113
 
147
- // Insert as first child of the content container
148
- contentContainer.insertBefore(leadingIconElement, contentContainer.firstChild);
149
- }
150
-
151
- if (leadingIconElement) {
152
- leadingIconElement.innerHTML = icon || '';
114
+ if (!leadingIconElement && icon) {
115
+ leadingIconElement = document.createElement('span');
116
+ leadingIconElement.className = `${component.getClass('chip')}-leading-icon`;
117
+
118
+ // Insert as first child of the content container
119
+ contentContainer.insertBefore(leadingIconElement, contentContainer.firstChild);
120
+ }
153
121
 
154
- // Remove the element if icon is empty
155
- if (!icon && leadingIconElement.parentNode) {
156
- leadingIconElement.parentNode.removeChild(leadingIconElement);
122
+ if (leadingIconElement) {
123
+ leadingIconElement.innerHTML = icon || '';
124
+
125
+ // Remove the element if icon is empty
126
+ if (!icon && leadingIconElement.parentNode) {
127
+ leadingIconElement.parentNode.removeChild(leadingIconElement);
128
+ }
157
129
  }
158
- }
159
-
160
- return this;
161
- },
162
-
163
- /**
164
- * Sets the chip's trailing icon
165
- * @param {string} icon - Icon HTML content
166
- * @param {Function} [onClick] - Click handler for the trailing icon
167
- * @returns {Object} The chip instance for chaining
168
- */
169
- setTrailingIcon(icon, onClick) {
170
- const contentContainer = component.element.querySelector(`.${component.getClass('chip')}-content`) || component.element;
171
- const trailingIconSelector = `.${component.getClass('chip')}-trailing-icon`;
172
- let trailingIconElement = component.element.querySelector(trailingIconSelector);
173
-
174
- if (!trailingIconElement && icon) {
175
- trailingIconElement = document.createElement('span');
176
- trailingIconElement.className = `${component.getClass('chip')}-trailing-icon`;
177
130
 
178
- // Add as last child of content container
179
- contentContainer.appendChild(trailingIconElement);
131
+ return this;
132
+ },
133
+
134
+ setTrailingIcon(icon: string, onClick?: (chip: ChipComponent) => void) {
135
+ const contentContainer = component.element.querySelector(`.${component.getClass('chip')}-content`) || component.element;
136
+ const trailingIconSelector = `.${component.getClass('chip')}-trailing-icon`;
137
+ let trailingIconElement = component.element.querySelector(trailingIconSelector);
180
138
 
181
- // Add click handler if provided
182
- if (onClick) {
183
- trailingIconElement.addEventListener('click', (e) => {
184
- e.stopPropagation(); // Prevent chip click event
185
- onClick(this);
186
- });
139
+ if (!trailingIconElement && icon) {
140
+ trailingIconElement = document.createElement('span');
141
+ trailingIconElement.className = `${component.getClass('chip')}-trailing-icon`;
142
+
143
+ // Add as last child of content container
144
+ contentContainer.appendChild(trailingIconElement);
145
+
146
+ // Add click handler if provided
147
+ if (onClick) {
148
+ trailingIconElement.addEventListener('click', (e) => {
149
+ e.stopPropagation(); // Prevent chip click event
150
+ onClick(this as unknown as ChipComponent);
151
+ });
152
+ }
187
153
  }
188
- }
189
-
190
- if (trailingIconElement) {
191
- trailingIconElement.innerHTML = icon || '';
192
154
 
193
- // Remove the element if icon is empty
194
- if (!icon && trailingIconElement.parentNode) {
195
- trailingIconElement.parentNode.removeChild(trailingIconElement);
155
+ if (trailingIconElement) {
156
+ trailingIconElement.innerHTML = icon || '';
157
+
158
+ // Remove the element if icon is empty
159
+ if (!icon && trailingIconElement.parentNode) {
160
+ trailingIconElement.parentNode.removeChild(trailingIconElement);
161
+ }
196
162
  }
197
- }
198
-
199
- return this;
200
- },
201
-
202
- /**
203
- * Checks if the chip is selected
204
- * @returns {boolean} True if the chip is selected
205
- */
206
- isSelected() {
207
- return isSelected;
208
- },
209
-
210
- /**
211
- * Sets the chip's selected state
212
- * @param {boolean} selected - Whether the chip should be selected
213
- * @returns {Object} The chip instance for chaining
214
- */
215
- setSelected(selected) {
216
- isSelected = !!selected;
163
+
164
+ return this;
165
+ },
217
166
 
218
- if (selected) {
219
- component.element.classList.add(`${component.getClass('chip')}--selected`);
220
- component.element.setAttribute('aria-selected', 'true');
221
- } else {
222
- component.element.classList.remove(`${component.getClass('chip')}--selected`);
223
- component.element.setAttribute('aria-selected', 'false');
224
- }
167
+ isSelected() {
168
+ return isSelected;
169
+ },
225
170
 
226
- return this;
227
- },
228
-
229
- /**
230
- * Toggles the chip's selected state
231
- * @returns {Object} The chip instance for chaining
232
- */
233
- toggleSelected() {
234
- return this.setSelected(!isSelected);
235
- },
236
-
237
- /**
238
- * Destroys the chip component and cleans up resources
239
- */
240
- destroy() {
241
- lifecycle.destroy();
242
- }
243
- };
244
- };
171
+ setSelected(selected: boolean) {
172
+ isSelected = !!selected;
173
+
174
+ if (selected) {
175
+ component.element.classList.add(`${component.getClass('chip')}--selected`);
176
+ component.element.setAttribute('aria-selected', 'true');
177
+ } else {
178
+ component.element.classList.remove(`${component.getClass('chip')}--selected`);
179
+ component.element.setAttribute('aria-selected', 'false');
180
+ }
181
+
182
+ return this;
183
+ },
184
+
185
+ toggleSelected() {
186
+ return this.setSelected(!isSelected);
187
+ },
188
+
189
+ destroy() {
190
+ lifecycle.destroy();
191
+ }
192
+ } as unknown as ChipComponent;
193
+ };