bromcom-ui-next 0.1.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 (169) hide show
  1. package/LICENSE +21 -0
  2. package/dist/bromcom-ui/bromcom-ui.css +1 -0
  3. package/dist/bromcom-ui/bromcom-ui.esm.js +2 -0
  4. package/dist/bromcom-ui/bromcom-ui.esm.js.map +1 -0
  5. package/dist/bromcom-ui/global/global.js +40 -0
  6. package/dist/bromcom-ui/index.esm.js +2 -0
  7. package/dist/bromcom-ui/index.esm.js.map +1 -0
  8. package/dist/bromcom-ui/p-27c997d8.js +3 -0
  9. package/dist/bromcom-ui/p-27c997d8.js.map +1 -0
  10. package/dist/bromcom-ui/p-341d46a8.entry.js +2 -0
  11. package/dist/bromcom-ui/p-341d46a8.entry.js.map +1 -0
  12. package/dist/bromcom-ui/p-40643b53.js +2 -0
  13. package/dist/bromcom-ui/p-40643b53.js.map +1 -0
  14. package/dist/bromcom-ui/p-5fcf77f9.js +2 -0
  15. package/dist/bromcom-ui/p-5fcf77f9.js.map +1 -0
  16. package/dist/bromcom-ui/p-997f314c.entry.js +2 -0
  17. package/dist/bromcom-ui/p-997f314c.entry.js.map +1 -0
  18. package/dist/bromcom-ui/p-b36f4f44.js +7 -0
  19. package/dist/bromcom-ui/p-b36f4f44.js.map +1 -0
  20. package/dist/bromcom-ui/p-dcb9df00.entry.js +2 -0
  21. package/dist/bromcom-ui/p-dcb9df00.entry.js.map +1 -0
  22. package/dist/bromcom-ui/p-f0c61f8c.entry.js +2 -0
  23. package/dist/bromcom-ui/p-f0c61f8c.entry.js.map +1 -0
  24. package/dist/cjs/app-globals-e8faea0d.js +43 -0
  25. package/dist/cjs/app-globals-e8faea0d.js.map +1 -0
  26. package/dist/cjs/bcm-accordion_4.cjs.entry.js +623 -0
  27. package/dist/cjs/bcm-accordion_4.cjs.entry.js.map +1 -0
  28. package/dist/cjs/bcm-alert.cjs.entry.js +99 -0
  29. package/dist/cjs/bcm-alert.cjs.entry.js.map +1 -0
  30. package/dist/cjs/bcm-avatar.cjs.entry.js +89 -0
  31. package/dist/cjs/bcm-avatar.cjs.entry.js.map +1 -0
  32. package/dist/cjs/bcm-text.cjs.entry.js +119 -0
  33. package/dist/cjs/bcm-text.cjs.entry.js.map +1 -0
  34. package/dist/cjs/bromcom-ui.cjs.js +27 -0
  35. package/dist/cjs/bromcom-ui.cjs.js.map +1 -0
  36. package/dist/cjs/index-310db2a6.js +2584 -0
  37. package/dist/cjs/index-310db2a6.js.map +1 -0
  38. package/dist/cjs/index-638f2d15.js +1441 -0
  39. package/dist/cjs/index-638f2d15.js.map +1 -0
  40. package/dist/cjs/index-a4eea4bb.js +84 -0
  41. package/dist/cjs/index-a4eea4bb.js.map +1 -0
  42. package/dist/cjs/index.cjs.js +4 -0
  43. package/dist/cjs/index.cjs.js.map +1 -0
  44. package/dist/cjs/loader.cjs.js +17 -0
  45. package/dist/cjs/loader.cjs.js.map +1 -0
  46. package/dist/collection/collection-manifest.json +18 -0
  47. package/dist/collection/components/accordion/accordion.component.js +399 -0
  48. package/dist/collection/components/accordion/accordion.component.js.map +1 -0
  49. package/dist/collection/components/accordion/accordion.css +1 -0
  50. package/dist/collection/components/accordion/types.js +2 -0
  51. package/dist/collection/components/accordion/types.js.map +1 -0
  52. package/dist/collection/components/accordion-group/accordion-group.component.js +269 -0
  53. package/dist/collection/components/accordion-group/accordion-group.component.js.map +1 -0
  54. package/dist/collection/components/accordion-group/accordion-group.css +1 -0
  55. package/dist/collection/components/accordion-group/types.js +2 -0
  56. package/dist/collection/components/accordion-group/types.js.map +1 -0
  57. package/dist/collection/components/alert/alert.component.js +241 -0
  58. package/dist/collection/components/alert/alert.component.js.map +1 -0
  59. package/dist/collection/components/alert/alert.css +1 -0
  60. package/dist/collection/components/alert/types.js +2 -0
  61. package/dist/collection/components/alert/types.js.map +1 -0
  62. package/dist/collection/components/avatar/avatar.component.js +290 -0
  63. package/dist/collection/components/avatar/avatar.component.js.map +1 -0
  64. package/dist/collection/components/avatar/avatar.css +1 -0
  65. package/dist/collection/components/avatar/types.js +2 -0
  66. package/dist/collection/components/avatar/types.js.map +1 -0
  67. package/dist/collection/components/button/button.component.js +628 -0
  68. package/dist/collection/components/button/button.component.js.map +1 -0
  69. package/dist/collection/components/button/button.css +1 -0
  70. package/dist/collection/components/button/types.js +142 -0
  71. package/dist/collection/components/button/types.js.map +1 -0
  72. package/dist/collection/components/chip/chip.component.js +308 -0
  73. package/dist/collection/components/chip/chip.component.js.map +1 -0
  74. package/dist/collection/components/chip/chip.css +1 -0
  75. package/dist/collection/components/chip/types.js +7 -0
  76. package/dist/collection/components/chip/types.js.map +1 -0
  77. package/dist/collection/components/text/text.component.js +176 -0
  78. package/dist/collection/components/text/text.component.js.map +1 -0
  79. package/dist/collection/components/text/text.css +1 -0
  80. package/dist/collection/components/text/text.types.js +2 -0
  81. package/dist/collection/components/text/text.types.js.map +1 -0
  82. package/dist/collection/components/text/text.utils.js +18 -0
  83. package/dist/collection/components/text/text.utils.js.map +1 -0
  84. package/dist/collection/global/global.js +40 -0
  85. package/dist/collection/index.js +2 -0
  86. package/dist/collection/index.js.map +1 -0
  87. package/dist/collection/styles/theme-variables.js +355 -0
  88. package/dist/collection/styles/theme-variables.js.map +1 -0
  89. package/dist/components/bcm-accordion-group.d.ts +11 -0
  90. package/dist/components/bcm-accordion-group.js +113 -0
  91. package/dist/components/bcm-accordion-group.js.map +1 -0
  92. package/dist/components/bcm-accordion.d.ts +11 -0
  93. package/dist/components/bcm-accordion.js +152 -0
  94. package/dist/components/bcm-accordion.js.map +1 -0
  95. package/dist/components/bcm-alert.d.ts +11 -0
  96. package/dist/components/bcm-alert.js +120 -0
  97. package/dist/components/bcm-alert.js.map +1 -0
  98. package/dist/components/bcm-avatar.d.ts +11 -0
  99. package/dist/components/bcm-avatar.js +115 -0
  100. package/dist/components/bcm-avatar.js.map +1 -0
  101. package/dist/components/bcm-button.d.ts +11 -0
  102. package/dist/components/bcm-button.js +334 -0
  103. package/dist/components/bcm-button.js.map +1 -0
  104. package/dist/components/bcm-chip.d.ts +11 -0
  105. package/dist/components/bcm-chip.js +152 -0
  106. package/dist/components/bcm-chip.js.map +1 -0
  107. package/dist/components/bcm-text.d.ts +11 -0
  108. package/dist/components/bcm-text.js +138 -0
  109. package/dist/components/bcm-text.js.map +1 -0
  110. package/dist/components/index.d.ts +33 -0
  111. package/dist/components/index.js +38 -0
  112. package/dist/components/index.js.map +1 -0
  113. package/dist/components/p-0adcc84f.js +1222 -0
  114. package/dist/components/p-0adcc84f.js.map +1 -0
  115. package/dist/components/p-5fcf77f9.js +2582 -0
  116. package/dist/components/p-5fcf77f9.js.map +1 -0
  117. package/dist/components/p-b36f4f44.js +82 -0
  118. package/dist/components/p-b36f4f44.js.map +1 -0
  119. package/dist/esm/app-globals-f781c325.js +41 -0
  120. package/dist/esm/app-globals-f781c325.js.map +1 -0
  121. package/dist/esm/bcm-accordion_4.entry.js +616 -0
  122. package/dist/esm/bcm-accordion_4.entry.js.map +1 -0
  123. package/dist/esm/bcm-alert.entry.js +95 -0
  124. package/dist/esm/bcm-alert.entry.js.map +1 -0
  125. package/dist/esm/bcm-avatar.entry.js +85 -0
  126. package/dist/esm/bcm-avatar.entry.js.map +1 -0
  127. package/dist/esm/bcm-text.entry.js +115 -0
  128. package/dist/esm/bcm-text.entry.js.map +1 -0
  129. package/dist/esm/bromcom-ui.js +22 -0
  130. package/dist/esm/bromcom-ui.js.map +1 -0
  131. package/dist/esm/index-ce2fac11.js +1412 -0
  132. package/dist/esm/index-ce2fac11.js.map +1 -0
  133. package/dist/esm/index-f0e9d579.js +82 -0
  134. package/dist/esm/index-f0e9d579.js.map +1 -0
  135. package/dist/esm/index-f3b17e60.js +2582 -0
  136. package/dist/esm/index-f3b17e60.js.map +1 -0
  137. package/dist/esm/index.js +3 -0
  138. package/dist/esm/index.js.map +1 -0
  139. package/dist/esm/loader.js +13 -0
  140. package/dist/esm/loader.js.map +1 -0
  141. package/dist/index.cjs.js +1 -0
  142. package/dist/index.js +1 -0
  143. package/dist/types/components/accordion/accordion.component.d.ts +137 -0
  144. package/dist/types/components/accordion/types.d.ts +16 -0
  145. package/dist/types/components/accordion-group/accordion-group.component.d.ts +95 -0
  146. package/dist/types/components/accordion-group/types.d.ts +13 -0
  147. package/dist/types/components/alert/alert.component.d.ts +28 -0
  148. package/dist/types/components/alert/types.d.ts +3 -0
  149. package/dist/types/components/avatar/avatar.component.d.ts +24 -0
  150. package/dist/types/components/avatar/types.d.ts +3 -0
  151. package/dist/types/components/button/button.component.d.ts +52 -0
  152. package/dist/types/components/button/types.d.ts +15 -0
  153. package/dist/types/components/chip/chip.component.d.ts +48 -0
  154. package/dist/types/components/chip/types.d.ts +9 -0
  155. package/dist/types/components/text/text.component.d.ts +12 -0
  156. package/dist/types/components/text/text.types.d.ts +3 -0
  157. package/dist/types/components/text/text.utils.d.ts +2 -0
  158. package/dist/types/components.d.ts +1116 -0
  159. package/dist/types/index.d.ts +10 -0
  160. package/dist/types/stencil-public-runtime.d.ts +1680 -0
  161. package/dist/types/styles/theme-variables.d.ts +384 -0
  162. package/loader/cdn.js +1 -0
  163. package/loader/index.cjs.js +1 -0
  164. package/loader/index.d.ts +24 -0
  165. package/loader/index.es2017.js +1 -0
  166. package/loader/index.js +2 -0
  167. package/loader/package.json +11 -0
  168. package/package.json +49 -0
  169. package/readme.md +170 -0
@@ -0,0 +1,269 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * @component BcmAccordionGroup
4
+ * @description A container component that manages a group of accordions. Provides single/multiple expansion
5
+ * modes and methods for controlling all accordions simultaneously. Uses shadow DOM for style encapsulation.
6
+ *
7
+ * @example Basic usage - Single expansion mode
8
+ * <bcm-accordion-group>
9
+ * <bcm-accordion>
10
+ * <div slot="title">Section 1</div>
11
+ * <div>Content 1</div>
12
+ * </bcm-accordion>
13
+ * <bcm-accordion>
14
+ * <div slot="title">Section 2</div>
15
+ * <div>Content 2</div>
16
+ * </bcm-accordion>
17
+ * </bcm-accordion-group>
18
+ *
19
+ * @example Multiple expansion mode
20
+ * <bcm-accordion-group multi={true}>
21
+ * <bcm-accordion>...</bcm-accordion>
22
+ * <bcm-accordion>...</bcm-accordion>
23
+ * </bcm-accordion-group>
24
+ *
25
+ * @example Event handling
26
+ * // Listen to accordion group changes
27
+ * const accordionGroup = document.querySelector('bcm-accordion-group');
28
+ * accordionGroup.addEventListener('bcmAccordionGroupChange', (event) => {
29
+ * const { expanded, changed, expandedItems, expandedCount } = event.detail;
30
+ * console.log('Accordion expanded state:', expanded);
31
+ * console.log('Changed accordion:', changed);
32
+ * console.log('Currently expanded accordions:', expandedItems);
33
+ * console.log('Number of expanded accordions:', expandedCount);
34
+ * });
35
+ *
36
+ * // Using methods
37
+ * await accordionGroup.expandAll(); // Expands all accordions (only in multi mode)
38
+ * await accordionGroup.collapseAll(); // Collapses all accordions
39
+ * const expanded = await accordionGroup.getExpandedItems(); // Gets expanded accordions
40
+ *
41
+ * @prop {boolean} multi - Controls whether multiple accordions can be expanded simultaneously (default: false)
42
+ *
43
+ * @slot default - Container slot for bcm-accordion components
44
+ *
45
+ * @event {EventEmitter<AccordionGroupChangeEventType>} bcmAccordionGroupChange - Emitted when any accordion's state changes
46
+ * @eventProperty {boolean} expanded - Current expanded state of the changed accordion
47
+ * @eventProperty {HTMLElement} changed - The accordion element that triggered the change
48
+ * @eventProperty {HTMLElement[]} expandedItems - Array of currently expanded accordion elements
49
+ * @eventProperty {number} expandedCount - Number of currently expanded accordions
50
+ *
51
+ * @method expandAll() - Expands all accordions (only available in multi mode)
52
+ * @method collapseAll() - Collapses all accordions
53
+ * @method getExpandedItems() - Returns array of currently expanded accordions
54
+ *
55
+ * @csspart container - The accordion group container element
56
+ *
57
+ * @css {string} --bcm-accordion-border - Border color of the accordion group
58
+ * @css {string} --bcm-accordion-radius - Border radius of the accordion group
59
+ */
60
+ export class BcmAccordionGroup {
61
+ constructor() {
62
+ /** Controls whether multiple accordions can be expanded simultaneously */
63
+ this.multi = false;
64
+ /** Array of accordion elements within the group */
65
+ this.accordionItems = [];
66
+ /**
67
+ * Updates the accordion items array when slot content changes
68
+ */
69
+ this.handleSlotChange = () => {
70
+ this.accordionItems = Array.from(this.host.querySelectorAll('bcm-accordion'));
71
+ this.setGroupBehavior();
72
+ // Validate accordion items
73
+ if (this.accordionItems.length === 0) {
74
+ console.warn('No accordion items found in accordion group');
75
+ }
76
+ };
77
+ }
78
+ /**
79
+ * Expands all accordions in the group
80
+ * Only available when multi=true
81
+ */
82
+ async expandAll() {
83
+ if (!this.multi) {
84
+ console.warn('expandAll is only available when multi=true');
85
+ return;
86
+ }
87
+ await Promise.all(this.accordionItems.map(item => item.expand()));
88
+ }
89
+ /**
90
+ * Collapses all accordions in the group
91
+ */
92
+ async collapseAll() {
93
+ await Promise.all(this.accordionItems.map(item => item.collapse()));
94
+ }
95
+ /**
96
+ * Returns an array of currently expanded accordion elements
97
+ */
98
+ async getExpandedItems() {
99
+ return this.accordionItems.filter(item => item.expanded);
100
+ }
101
+ componentWillLoad() {
102
+ this.handleSlotChange();
103
+ }
104
+ setGroupBehavior() {
105
+ this.accordionItems.forEach(item => {
106
+ item.group = true;
107
+ });
108
+ }
109
+ /**
110
+ * Handles state changes of individual accordions
111
+ */
112
+ handleAccordionChange(event) {
113
+ this.handleSlotChange();
114
+ const { expanded, source } = event === null || event === void 0 ? void 0 : event.detail;
115
+ if (!this.multi) {
116
+ this.accordionItems.forEach(item => {
117
+ if (item !== source) {
118
+ item.collapse();
119
+ }
120
+ item.expanded = item === source ? expanded : false;
121
+ });
122
+ }
123
+ const expandedItems = this.accordionItems.filter(item => item.expanded);
124
+ this.bcmAccordionGroupChange.emit({
125
+ expanded,
126
+ changed: source,
127
+ expandedItems,
128
+ expandedCount: expandedItems.length,
129
+ });
130
+ }
131
+ render() {
132
+ return (h("div", { key: '258e722af4cf7958d94f83c7bce7cd623b15f8fc', class: "flex flex-col bcm-ui-element w-full border border-[--bcm-accordion-border] rounded-[--bcm-accordion-radius]", role: "group", "aria-label": "Accordion group" }, h("slot", { key: 'e35cc8fe810e49f678b6af6962a4fbe09ae7f59e', onSlotchange: this.handleSlotChange })));
133
+ }
134
+ static get is() { return "bcm-accordion-group"; }
135
+ static get encapsulation() { return "shadow"; }
136
+ static get originalStyleUrls() {
137
+ return {
138
+ "$": ["accordion-group.css"]
139
+ };
140
+ }
141
+ static get styleUrls() {
142
+ return {
143
+ "$": ["accordion-group.css"]
144
+ };
145
+ }
146
+ static get properties() {
147
+ return {
148
+ "multi": {
149
+ "type": "boolean",
150
+ "mutable": false,
151
+ "complexType": {
152
+ "original": "boolean",
153
+ "resolved": "boolean",
154
+ "references": {}
155
+ },
156
+ "required": false,
157
+ "optional": false,
158
+ "docs": {
159
+ "tags": [],
160
+ "text": "Controls whether multiple accordions can be expanded simultaneously"
161
+ },
162
+ "getter": false,
163
+ "setter": false,
164
+ "attribute": "multi",
165
+ "reflect": false,
166
+ "defaultValue": "false"
167
+ }
168
+ };
169
+ }
170
+ static get states() {
171
+ return {
172
+ "accordionItems": {}
173
+ };
174
+ }
175
+ static get events() {
176
+ return [{
177
+ "method": "bcmAccordionGroupChange",
178
+ "name": "bcmAccordionGroupChange",
179
+ "bubbles": false,
180
+ "cancelable": true,
181
+ "composed": false,
182
+ "docs": {
183
+ "tags": [],
184
+ "text": "Event emitted when any accordion's expanded state changes"
185
+ },
186
+ "complexType": {
187
+ "original": "AccordionGroupChangeEventType",
188
+ "resolved": "BaseAccordionChangeEventType & { changed?: HTMLElement; expandedItems?: HTMLElement[]; expandedCount?: number; }",
189
+ "references": {
190
+ "AccordionGroupChangeEventType": {
191
+ "location": "import",
192
+ "path": "./types",
193
+ "id": "src/components/accordion-group/types.ts::AccordionGroupChangeEventType"
194
+ }
195
+ }
196
+ }
197
+ }];
198
+ }
199
+ static get methods() {
200
+ return {
201
+ "expandAll": {
202
+ "complexType": {
203
+ "signature": "() => Promise<void>",
204
+ "parameters": [],
205
+ "references": {
206
+ "Promise": {
207
+ "location": "global",
208
+ "id": "global::Promise"
209
+ }
210
+ },
211
+ "return": "Promise<void>"
212
+ },
213
+ "docs": {
214
+ "text": "Expands all accordions in the group\nOnly available when multi=true",
215
+ "tags": []
216
+ }
217
+ },
218
+ "collapseAll": {
219
+ "complexType": {
220
+ "signature": "() => Promise<void>",
221
+ "parameters": [],
222
+ "references": {
223
+ "Promise": {
224
+ "location": "global",
225
+ "id": "global::Promise"
226
+ }
227
+ },
228
+ "return": "Promise<void>"
229
+ },
230
+ "docs": {
231
+ "text": "Collapses all accordions in the group",
232
+ "tags": []
233
+ }
234
+ },
235
+ "getExpandedItems": {
236
+ "complexType": {
237
+ "signature": "() => Promise<HTMLBcmAccordionElement[]>",
238
+ "parameters": [],
239
+ "references": {
240
+ "Promise": {
241
+ "location": "global",
242
+ "id": "global::Promise"
243
+ },
244
+ "HTMLBcmAccordionElement": {
245
+ "location": "global",
246
+ "id": "global::HTMLBcmAccordionElement"
247
+ }
248
+ },
249
+ "return": "Promise<HTMLBcmAccordionElement[]>"
250
+ },
251
+ "docs": {
252
+ "text": "Returns an array of currently expanded accordion elements",
253
+ "tags": []
254
+ }
255
+ }
256
+ };
257
+ }
258
+ static get elementRef() { return "host"; }
259
+ static get listeners() {
260
+ return [{
261
+ "name": "bcmAccordionChange",
262
+ "method": "handleAccordionChange",
263
+ "target": undefined,
264
+ "capture": true,
265
+ "passive": false
266
+ }];
267
+ }
268
+ }
269
+ //# sourceMappingURL=accordion-group.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accordion-group.component.js","sourceRoot":"","sources":["../../../src/components/accordion-group/accordion-group.component.tsx"],"names":[],"mappings":"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","sourcesContent":["\nimport { Component, ComponentInterface, h, Element, Prop, Listen, State, Event, EventEmitter, Method } from '@stencil/core';\nimport { AccordionChangeEventType } from '../accordion/types';\nimport { AccordionGroupChangeEventType } from './types';\n\n/**\n* @component BcmAccordionGroup\n* @description A container component that manages a group of accordions. Provides single/multiple expansion \n* modes and methods for controlling all accordions simultaneously. Uses shadow DOM for style encapsulation.\n*\n* @example Basic usage - Single expansion mode\n* <bcm-accordion-group>\n* <bcm-accordion>\n* <div slot=\"title\">Section 1</div>\n* <div>Content 1</div>\n* </bcm-accordion>\n* <bcm-accordion>\n* <div slot=\"title\">Section 2</div>\n* <div>Content 2</div>\n* </bcm-accordion>\n* </bcm-accordion-group>\n*\n* @example Multiple expansion mode\n* <bcm-accordion-group multi={true}>\n* <bcm-accordion>...</bcm-accordion>\n* <bcm-accordion>...</bcm-accordion>\n* </bcm-accordion-group>\n* \n* @example Event handling\n* // Listen to accordion group changes\n* const accordionGroup = document.querySelector('bcm-accordion-group');\n* accordionGroup.addEventListener('bcmAccordionGroupChange', (event) => {\n* const { expanded, changed, expandedItems, expandedCount } = event.detail;\n* console.log('Accordion expanded state:', expanded);\n* console.log('Changed accordion:', changed);\n* console.log('Currently expanded accordions:', expandedItems);\n* console.log('Number of expanded accordions:', expandedCount);\n* });\n* \n* // Using methods\n* await accordionGroup.expandAll(); // Expands all accordions (only in multi mode)\n* await accordionGroup.collapseAll(); // Collapses all accordions\n* const expanded = await accordionGroup.getExpandedItems(); // Gets expanded accordions\n*\n* @prop {boolean} multi - Controls whether multiple accordions can be expanded simultaneously (default: false)\n*\n* @slot default - Container slot for bcm-accordion components\n*\n* @event {EventEmitter<AccordionGroupChangeEventType>} bcmAccordionGroupChange - Emitted when any accordion's state changes\n* @eventProperty {boolean} expanded - Current expanded state of the changed accordion\n* @eventProperty {HTMLElement} changed - The accordion element that triggered the change\n* @eventProperty {HTMLElement[]} expandedItems - Array of currently expanded accordion elements\n* @eventProperty {number} expandedCount - Number of currently expanded accordions\n*\n* @method expandAll() - Expands all accordions (only available in multi mode)\n* @method collapseAll() - Collapses all accordions\n* @method getExpandedItems() - Returns array of currently expanded accordions\n*\n* @csspart container - The accordion group container element\n*\n* @css {string} --bcm-accordion-border - Border color of the accordion group\n* @css {string} --bcm-accordion-radius - Border radius of the accordion group\n*/\n@Component({\n tag: 'bcm-accordion-group',\n styleUrl: 'accordion-group.css',\n shadow: true,\n})\nexport class BcmAccordionGroup implements ComponentInterface {\n /** Reference to the host element */\n @Element() host: HTMLElement;\n\n /** Controls whether multiple accordions can be expanded simultaneously */\n @Prop() multi: boolean = false;\n\n /** Array of accordion elements within the group */\n @State() accordionItems: HTMLBcmAccordionElement[] = [];\n\n /** Event emitted when any accordion's expanded state changes */\n @Event({\n composed: false,\n bubbles: false,\n cancelable: true,\n }) bcmAccordionGroupChange: EventEmitter<AccordionGroupChangeEventType>;\n\n /**\n * Expands all accordions in the group\n * Only available when multi=true\n */\n @Method()\n async expandAll(): Promise<void> {\n if (!this.multi) {\n console.warn('expandAll is only available when multi=true');\n return;\n }\n await Promise.all(this.accordionItems.map(item => item.expand()));\n }\n\n /**\n * Collapses all accordions in the group\n */\n @Method()\n async collapseAll(): Promise<void> {\n await Promise.all(this.accordionItems.map(item => item.collapse()));\n }\n\n /**\n * Returns an array of currently expanded accordion elements\n */\n @Method()\n async getExpandedItems(): Promise<HTMLBcmAccordionElement[]> {\n return this.accordionItems.filter(item => item.expanded);\n }\n\n componentWillLoad() {\n this.handleSlotChange();\n }\n\n\n private setGroupBehavior(): void {\n this.accordionItems.forEach(item => {\n item.group = true;\n });\n }\n\n /**\n * Updates the accordion items array when slot content changes\n */\n private handleSlotChange = () => {\n this.accordionItems = Array.from(this.host.querySelectorAll('bcm-accordion'));\n this.setGroupBehavior();\n // Validate accordion items\n if (this.accordionItems.length === 0) {\n console.warn('No accordion items found in accordion group');\n }\n };\n\n /**\n * Handles state changes of individual accordions\n */\n @Listen('bcmAccordionChange', { capture: true })\n handleAccordionChange(event: CustomEvent<AccordionChangeEventType>) {\n this.handleSlotChange();\n const { expanded, source } = event?.detail;\n\n if (!this.multi) {\n this.accordionItems.forEach(item => {\n if (item !== source) {\n item.collapse();\n }\n item.expanded = item === source ? expanded : false;\n });\n }\n\n const expandedItems = this.accordionItems.filter(item => item.expanded);\n this.bcmAccordionGroupChange.emit({\n expanded,\n changed: source,\n expandedItems,\n expandedCount: expandedItems.length,\n });\n }\n\n render() {\n return (\n <div\n class=\"flex flex-col bcm-ui-element w-full border border-[--bcm-accordion-border] rounded-[--bcm-accordion-radius]\"\n role=\"group\"\n aria-label=\"Accordion group\"\n >\n <slot onSlotchange={this.handleSlotChange}></slot>\n </div>\n );\n }\n}"]}
@@ -0,0 +1 @@
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(147,197,253,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: ;border:0 solid oklch(.928 .006 264.531);box-sizing:border-box}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(147,197,253,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:oklch(.707 .022 261.325);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}.block{display:block}:host{--bcm-accordion-border:var(--bcm-ui-color-border-default);--bcm-accordion-radius:6px;display:block;width:100%}.bcm-ui-element{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.collapse{visibility:collapse}.static{position:static}.flex{display:flex}.w-full{width:100%}.flex-col{flex-direction:column}.rounded-\[--bcm-accordion-radius\]{border-radius:var(--bcm-accordion-radius)}.border{border-width:1px}.border-\[--bcm-accordion-border\]{border-color:var(--bcm-accordion-border)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/accordion-group/types.ts"],"names":[],"mappings":"","sourcesContent":["import { BaseAccordionChangeEventType } from '../accordion/types';\n\n/**\n * Type for accordion group change events\n * @extends BaseAccordionChangeEventType\n */\nexport type AccordionGroupChangeEventType = BaseAccordionChangeEventType & {\n /** The accordion element that triggered the change */\n changed?: HTMLElement;\n /** List of currently expanded accordion elements */\n expandedItems?: HTMLElement[];\n /** Number of currently expanded accordions */\n expandedCount?: number;\n};\n"]}
@@ -0,0 +1,241 @@
1
+ import { h } from "@stencil/core";
2
+ import { tv } from "tailwind-variants";
3
+ /**
4
+ * Alert component that displays messages with different statuses and styles
5
+ * @class BcmAlert
6
+ */
7
+ export class BcmAlert {
8
+ constructor() {
9
+ /** Alert status type */
10
+ this.status = 'default';
11
+ /** Alert size variant */
12
+ this.size = 'medium';
13
+ /** Alert style variant */
14
+ this.kind = 'filled';
15
+ /** Whether alert can be dismissed */
16
+ this.dismissible = true;
17
+ /** Whether to show status icon */
18
+ this.showStatusIcon = true;
19
+ }
20
+ /**
21
+ * Handles alert dismissal
22
+ * @private
23
+ */
24
+ onDismiss() {
25
+ this.bcmDismiss.emit();
26
+ }
27
+ getStatusIcon() {
28
+ const statusIcon = {
29
+ info: 'fa-regular fa-info-circle',
30
+ error: 'fa-regular fa-exclamation-circle',
31
+ warning: 'fa-regular fa-exclamation-triangle',
32
+ success: 'fa-regular fa-check-circle',
33
+ };
34
+ return statusIcon[this.status];
35
+ }
36
+ get alertClass() {
37
+ return tv({
38
+ slots: {
39
+ base: 'alert bcm-ui-element font-medium flex items-center justify-between bg-[--bcm-alert-bg] text-[--bcm-alert-text] rounded-[--bcm-alert-radius] px-3 gap-3 w-full',
40
+ section: 'flex items-center gap-2',
41
+ },
42
+ variants: {
43
+ size: {
44
+ small: {
45
+ base: 'py-1.5 text-size-4',
46
+ },
47
+ medium: {
48
+ base: 'py-2 text-size-5',
49
+ },
50
+ large: {
51
+ base: 'py-2.5 text-size-6',
52
+ },
53
+ },
54
+ },
55
+ }, {
56
+ twMerge: false,
57
+ });
58
+ }
59
+ get alertStyles() {
60
+ let colorStatus = {
61
+ info: 'var(--bcm-ui-color-background-palette-blue-default)',
62
+ error: 'var(--bcm-ui-color-background-palette-red-default)',
63
+ warning: 'var(--bcm-ui-color-background-palette-yellow-default)',
64
+ success: 'var(--bcm-ui-color-background-palette-green-default)',
65
+ default: 'var(--bcm-ui-color-background-palette-gray-default)',
66
+ };
67
+ let textStatusColor = {
68
+ info: 'var(--bcm-ui-color-text-info)',
69
+ error: 'var(--bcm-ui-color-text-error)',
70
+ warning: 'var(--bcm-ui-color-text-warning)',
71
+ success: 'var(--bcm-ui-color-text-success)',
72
+ default: 'var(--bcm-ui-color-text-default)',
73
+ };
74
+ let filleStyle = {
75
+ '--bcm-alert-bg': colorStatus[this.status],
76
+ '--bcm-alert-text': textStatusColor[this.status],
77
+ };
78
+ let textStyle = {
79
+ '--bcm-alert-bg': 'transparent',
80
+ '--bcm-alert-text': textStatusColor[this.status],
81
+ };
82
+ return this.kind === 'filled' ? filleStyle : textStyle;
83
+ }
84
+ render() {
85
+ const { base, section } = this.alertClass({ size: this.size });
86
+ return (h("div", { key: '5a7dec540ad5df4d97401d03fb4924d79b00b75e', role: "alert", "aria-live": "assertive", "aria-atomic": "true", class: base(), style: this.alertStyles }, h("div", { key: 'f211e20930b7d0007e6c6d94332f69f1a1ff5939', class: section() }, this.showStatusIcon && h("bcm-icon", { key: '31ad93bd2f034bef37f56f17c97cd366cd3b54aa', "icon-name": this.getStatusIcon() }), h("slot", { key: '26277da45eef448aa2f3a99ad332f203aa4d0434' })), h("div", { key: '5954fd7e611352a9ad95e3a2a929724c8881017d', class: section() }, h("div", { key: '840d82e093bfdc407ba473b4134ad1ab815dea85', part: "action" }, h("slot", { key: '77550c4511a713351a47693887beb6e0fa385400', name: "action" })), h("span", { key: '582aea7459612020cf0be1542cda4b8ce38c8d37', part: "icon" }, this.dismissible && h("bcm-icon", { key: '1c1e5c8d606be8c91add73b49d1f9f71f6d6150d', onClick: () => this.onDismiss(), class: "cursor-pointer", "icon-name": "fa-regular fa-xmark" })))));
87
+ }
88
+ static get is() { return "bcm-alert"; }
89
+ static get encapsulation() { return "shadow"; }
90
+ static get originalStyleUrls() {
91
+ return {
92
+ "$": ["alert.css"]
93
+ };
94
+ }
95
+ static get styleUrls() {
96
+ return {
97
+ "$": ["alert.css"]
98
+ };
99
+ }
100
+ static get properties() {
101
+ return {
102
+ "status": {
103
+ "type": "string",
104
+ "mutable": false,
105
+ "complexType": {
106
+ "original": "AlertStatus",
107
+ "resolved": "\"default\" | \"error\" | \"info\" | \"success\" | \"warning\"",
108
+ "references": {
109
+ "AlertStatus": {
110
+ "location": "import",
111
+ "path": "./types",
112
+ "id": "src/components/alert/types.ts::AlertStatus"
113
+ }
114
+ }
115
+ },
116
+ "required": false,
117
+ "optional": true,
118
+ "docs": {
119
+ "tags": [],
120
+ "text": "Alert status type"
121
+ },
122
+ "getter": false,
123
+ "setter": false,
124
+ "attribute": "status",
125
+ "reflect": false,
126
+ "defaultValue": "'default'"
127
+ },
128
+ "size": {
129
+ "type": "string",
130
+ "mutable": false,
131
+ "complexType": {
132
+ "original": "AlertSize",
133
+ "resolved": "\"large\" | \"medium\" | \"small\"",
134
+ "references": {
135
+ "AlertSize": {
136
+ "location": "import",
137
+ "path": "./types",
138
+ "id": "src/components/alert/types.ts::AlertSize"
139
+ }
140
+ }
141
+ },
142
+ "required": false,
143
+ "optional": true,
144
+ "docs": {
145
+ "tags": [],
146
+ "text": "Alert size variant"
147
+ },
148
+ "getter": false,
149
+ "setter": false,
150
+ "attribute": "size",
151
+ "reflect": false,
152
+ "defaultValue": "'medium'"
153
+ },
154
+ "kind": {
155
+ "type": "string",
156
+ "mutable": false,
157
+ "complexType": {
158
+ "original": "AlertKind",
159
+ "resolved": "\"filled\" | \"text\"",
160
+ "references": {
161
+ "AlertKind": {
162
+ "location": "import",
163
+ "path": "./types",
164
+ "id": "src/components/alert/types.ts::AlertKind"
165
+ }
166
+ }
167
+ },
168
+ "required": false,
169
+ "optional": true,
170
+ "docs": {
171
+ "tags": [],
172
+ "text": "Alert style variant"
173
+ },
174
+ "getter": false,
175
+ "setter": false,
176
+ "attribute": "kind",
177
+ "reflect": false,
178
+ "defaultValue": "'filled'"
179
+ },
180
+ "dismissible": {
181
+ "type": "boolean",
182
+ "mutable": false,
183
+ "complexType": {
184
+ "original": "boolean",
185
+ "resolved": "boolean",
186
+ "references": {}
187
+ },
188
+ "required": false,
189
+ "optional": true,
190
+ "docs": {
191
+ "tags": [],
192
+ "text": "Whether alert can be dismissed"
193
+ },
194
+ "getter": false,
195
+ "setter": false,
196
+ "attribute": "dismissible",
197
+ "reflect": false,
198
+ "defaultValue": "true"
199
+ },
200
+ "showStatusIcon": {
201
+ "type": "boolean",
202
+ "mutable": false,
203
+ "complexType": {
204
+ "original": "boolean",
205
+ "resolved": "boolean",
206
+ "references": {}
207
+ },
208
+ "required": false,
209
+ "optional": true,
210
+ "docs": {
211
+ "tags": [],
212
+ "text": "Whether to show status icon"
213
+ },
214
+ "getter": false,
215
+ "setter": false,
216
+ "attribute": "show-status-icon",
217
+ "reflect": false,
218
+ "defaultValue": "true"
219
+ }
220
+ };
221
+ }
222
+ static get events() {
223
+ return [{
224
+ "method": "bcmDismiss",
225
+ "name": "bcmDismiss",
226
+ "bubbles": true,
227
+ "cancelable": true,
228
+ "composed": true,
229
+ "docs": {
230
+ "tags": [],
231
+ "text": ""
232
+ },
233
+ "complexType": {
234
+ "original": "void",
235
+ "resolved": "void",
236
+ "references": {}
237
+ }
238
+ }];
239
+ }
240
+ }
241
+ //# sourceMappingURL=alert.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.component.js","sourceRoot":"","sources":["../../../src/components/alert/alert.component.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, ComponentInterface, h, Prop, Event, EventEmitter } from '@stencil/core';\nimport { AlertKind, AlertSize, AlertStatus } from './types';\nimport { tv } from 'tailwind-variants';\n\n\n/**\n * Alert component that displays messages with different statuses and styles\n * @class BcmAlert\n */\n@Component({\n tag: 'bcm-alert',\n styleUrl: 'alert.css',\n shadow: true,\n})\nexport class BcmAlert implements ComponentInterface {\n /** Alert status type */\n @Prop()\n status?: AlertStatus = 'default';\n\n /** Alert size variant */\n @Prop()\n size?: AlertSize = 'medium';\n\n /** Alert style variant */\n @Prop()\n kind?: AlertKind = 'filled';\n\n /** Whether alert can be dismissed */\n @Prop()\n dismissible?: boolean = true;\n\n /** Whether to show status icon */\n @Prop()\n showStatusIcon?: boolean = true;\n\n @Event() bcmDismiss: EventEmitter<void>;\n\n\n /**\n * Handles alert dismissal\n * @private\n */\n private onDismiss() {\n this.bcmDismiss.emit();\n }\n\n private getStatusIcon() {\n const statusIcon = {\n info: 'fa-regular fa-info-circle',\n error: 'fa-regular fa-exclamation-circle',\n warning: 'fa-regular fa-exclamation-triangle',\n success: 'fa-regular fa-check-circle',\n };\n return statusIcon[this.status];\n }\n\n private get alertClass() {\n return tv(\n {\n slots: {\n base: 'alert bcm-ui-element font-medium flex items-center justify-between bg-[--bcm-alert-bg] text-[--bcm-alert-text] rounded-[--bcm-alert-radius] px-3 gap-3 w-full',\n section: 'flex items-center gap-2',\n },\n variants: {\n size: {\n small: {\n base: 'py-1.5 text-size-4',\n },\n medium: {\n base: 'py-2 text-size-5',\n },\n large: {\n base: 'py-2.5 text-size-6',\n },\n },\n },\n },\n {\n twMerge: false,\n },\n );\n }\n\n private get alertStyles() {\n let colorStatus = {\n info: 'var(--bcm-ui-color-background-palette-blue-default)',\n error: 'var(--bcm-ui-color-background-palette-red-default)',\n warning: 'var(--bcm-ui-color-background-palette-yellow-default)',\n success: 'var(--bcm-ui-color-background-palette-green-default)',\n default: 'var(--bcm-ui-color-background-palette-gray-default)',\n };\n\n let textStatusColor = {\n info: 'var(--bcm-ui-color-text-info)',\n error: 'var(--bcm-ui-color-text-error)',\n warning: 'var(--bcm-ui-color-text-warning)',\n success: 'var(--bcm-ui-color-text-success)',\n default: 'var(--bcm-ui-color-text-default)',\n };\n\n let filleStyle = {\n '--bcm-alert-bg': colorStatus[this.status],\n '--bcm-alert-text': textStatusColor[this.status],\n };\n\n let textStyle = {\n '--bcm-alert-bg': 'transparent',\n '--bcm-alert-text': textStatusColor[this.status],\n };\n\n return this.kind === 'filled' ? filleStyle : textStyle;\n }\n\n render() {\n const { base, section } = this.alertClass({ size: this.size });\n return (\n <div role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\" class={base()} style={this.alertStyles}>\n <div class={section()}>\n {this.showStatusIcon && <bcm-icon icon-name={this.getStatusIcon()}></bcm-icon>}\n <slot></slot>\n </div>\n <div class={section()}>\n <div part=\"action\">\n <slot name=\"action\"></slot>\n </div>\n <span part=\"icon\">{this.dismissible && <bcm-icon onClick={() => this.onDismiss()} class=\"cursor-pointer\" icon-name=\"fa-regular fa-xmark\"></bcm-icon>}</span>\n </div>\n </div>\n );\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(147,197,253,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: ;border:0 solid oklch(.928 .006 264.531);box-sizing:border-box}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(147,197,253,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,fieldset,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{color:oklch(.707 .022 261.325);opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:host{--bcm-alert-bg:var(--bcm-ui-color-background-default-default);--bcm-alert-text:var(--bcm-ui-color-text-default);--bcm-alert-radius:6px;display:inline-block;width:100%}.bcm-ui-element{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.static{position:static}.flex{display:flex}.w-full{width:100%}.cursor-pointer{cursor:pointer}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.rounded-\[--bcm-alert-radius\]{border-radius:var(--bcm-alert-radius)}.bg-\[--bcm-alert-bg\]{background-color:var(--bcm-alert-bg)}.px-3{padding-left:.75rem;padding-right:.75rem}.py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.text-size-4{font-size:var(--bcm-ui-font-size-4,14px);line-height:var(--bcm-ui-line-height-4,20px)}.text-size-5{font-size:var(--bcm-ui-font-size-5,16px);line-height:var(--bcm-ui-line-height-5,24px)}.text-size-6{font-size:var(--bcm-ui-font-size-6,18px);line-height:var(--bcm-ui-line-height-6,24px)}.font-medium{font-weight:500}.text-\[--bcm-alert-text\]{color:var(--bcm-alert-text)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/alert/types.ts"],"names":[],"mappings":"","sourcesContent":["export type AlertSize = 'small' | 'medium' | 'large';\nexport type AlertKind = 'filled' | 'text';\nexport type AlertStatus = 'info' | 'error' | 'warning' | 'success' | 'default';\n"]}