@duskmoon-dev/el-accordion 0.5.0 → 0.6.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.
package/README.md ADDED
@@ -0,0 +1,138 @@
1
+ # @duskmoon-dev/el-accordion
2
+
3
+ A collapsible accordion component built with Web Components.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ bun add @duskmoon-dev/el-accordion
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Auto-Register
14
+
15
+ ```typescript
16
+ import '@duskmoon-dev/el-accordion/register';
17
+ ```
18
+
19
+ ```html
20
+ <el-dm-accordion>
21
+ <el-dm-accordion-item label="Section 1">
22
+ Content for section 1
23
+ </el-dm-accordion-item>
24
+ <el-dm-accordion-item label="Section 2">
25
+ Content for section 2
26
+ </el-dm-accordion-item>
27
+ </el-dm-accordion>
28
+ ```
29
+
30
+ ### Manual Registration
31
+
32
+ ```typescript
33
+ import { ElDmAccordion, ElDmAccordionItem, register } from '@duskmoon-dev/el-accordion';
34
+
35
+ // Register with default tag names
36
+ register();
37
+
38
+ // Or register with custom tag names
39
+ customElements.define('my-accordion', ElDmAccordion);
40
+ customElements.define('my-accordion-item', ElDmAccordionItem);
41
+ ```
42
+
43
+ ## Attributes (el-dm-accordion)
44
+
45
+ | Attribute | Type | Default | Description |
46
+ |-----------|------|---------|-------------|
47
+ | `multiple` | `boolean` | `false` | Allow multiple items open |
48
+ | `value` | `string` | - | Currently open item(s) |
49
+
50
+ ## Attributes (el-dm-accordion-item)
51
+
52
+ | Attribute | Type | Default | Description |
53
+ |-----------|------|---------|-------------|
54
+ | `label` | `string` | `''` | Item header label |
55
+ | `value` | `string` | - | Item value (auto-generated if not set) |
56
+ | `disabled` | `boolean` | `false` | Disable the item |
57
+ | `open` | `boolean` | `false` | Whether the item is open |
58
+
59
+ ## CSS Parts (el-dm-accordion)
60
+
61
+ | Part | Description |
62
+ |------|-------------|
63
+ | `container` | The accordion container |
64
+
65
+ ## Events
66
+
67
+ | Event | Detail | Description |
68
+ |-------|--------|-------------|
69
+ | `change` | `{ value, openItems }` | Fired when open items change |
70
+
71
+ ## Examples
72
+
73
+ ### Basic
74
+
75
+ ```html
76
+ <el-dm-accordion>
77
+ <el-dm-accordion-item label="What is this?">
78
+ This is an accordion component.
79
+ </el-dm-accordion-item>
80
+ <el-dm-accordion-item label="How does it work?">
81
+ Click on the headers to expand/collapse.
82
+ </el-dm-accordion-item>
83
+ </el-dm-accordion>
84
+ ```
85
+
86
+ ### Multiple Open
87
+
88
+ ```html
89
+ <el-dm-accordion multiple>
90
+ <el-dm-accordion-item label="Section 1">Content 1</el-dm-accordion-item>
91
+ <el-dm-accordion-item label="Section 2">Content 2</el-dm-accordion-item>
92
+ <el-dm-accordion-item label="Section 3">Content 3</el-dm-accordion-item>
93
+ </el-dm-accordion>
94
+ ```
95
+
96
+ ### Default Open
97
+
98
+ ```html
99
+ <el-dm-accordion>
100
+ <el-dm-accordion-item label="Open by default" open>
101
+ This section is open by default.
102
+ </el-dm-accordion-item>
103
+ <el-dm-accordion-item label="Closed">
104
+ This section is closed.
105
+ </el-dm-accordion-item>
106
+ </el-dm-accordion>
107
+ ```
108
+
109
+ ### Disabled Item
110
+
111
+ ```html
112
+ <el-dm-accordion>
113
+ <el-dm-accordion-item label="Normal">Content</el-dm-accordion-item>
114
+ <el-dm-accordion-item label="Disabled" disabled>
115
+ Can't open this
116
+ </el-dm-accordion-item>
117
+ </el-dm-accordion>
118
+ ```
119
+
120
+ ### FAQ Example
121
+
122
+ ```html
123
+ <el-dm-accordion>
124
+ <el-dm-accordion-item label="How do I get started?">
125
+ Install the package and import the component.
126
+ </el-dm-accordion-item>
127
+ <el-dm-accordion-item label="Is it accessible?">
128
+ Yes, it follows ARIA accordion patterns.
129
+ </el-dm-accordion-item>
130
+ <el-dm-accordion-item label="Can I style it?">
131
+ Yes, use CSS custom properties and parts.
132
+ </el-dm-accordion-item>
133
+ </el-dm-accordion>
134
+ ```
135
+
136
+ ## License
137
+
138
+ MIT
package/dist/cjs/index.js CHANGED
@@ -36,8 +36,10 @@ __export(exports_src, {
36
36
  module.exports = __toCommonJS(exports_src);
37
37
 
38
38
  // src/el-dm-accordion.ts
39
- var import_el_core = require("@duskmoon-dev/el-core");
40
- var styles = import_el_core.css`
39
+ var import_el_base = require("@duskmoon-dev/el-base");
40
+ var import_accordion = require("@duskmoon-dev/core/components/accordion");
41
+ var coreStyles = import_accordion.css.replace(/@layer\s+components\s*\{/, "").replace(/\}\s*$/, "");
42
+ var styles = import_el_base.css`
41
43
  :host {
42
44
  display: block;
43
45
  }
@@ -46,20 +48,16 @@ var styles = import_el_core.css`
46
48
  display: none !important;
47
49
  }
48
50
 
49
- .accordion {
50
- display: flex;
51
- flex-direction: column;
52
- border: 1px solid var(--color-outline, #e0e0e0);
53
- border-radius: 0.5rem;
54
- overflow: hidden;
55
- }
51
+ /* Import core accordion styles */
52
+ ${coreStyles}
56
53
 
54
+ /* Web component specific: slotted item borders */
57
55
  ::slotted(el-dm-accordion-item:not(:last-child)) {
58
56
  border-bottom: 1px solid var(--color-outline, #e0e0e0);
59
57
  }
60
58
  `;
61
59
 
62
- class ElDmAccordion extends import_el_core.BaseElement {
60
+ class ElDmAccordion extends import_el_base.BaseElement {
63
61
  static properties = {
64
62
  multiple: { type: Boolean, reflect: true },
65
63
  value: { type: String, reflect: true }
@@ -134,7 +132,7 @@ class ElDmAccordion extends import_el_core.BaseElement {
134
132
  `;
135
133
  }
136
134
  }
137
- var itemStyles = import_el_core.css`
135
+ var itemStyles = import_el_base.css`
138
136
  :host {
139
137
  display: block;
140
138
  }
@@ -143,80 +141,23 @@ var itemStyles = import_el_core.css`
143
141
  display: none !important;
144
142
  }
145
143
 
146
- .accordion-item {
147
- background-color: var(--color-surface, #ffffff);
148
- }
144
+ /* Import core accordion styles */
145
+ ${coreStyles}
149
146
 
147
+ /* Web component specific adjustments */
150
148
  .accordion-header {
151
- display: flex;
152
- align-items: center;
153
- justify-content: space-between;
154
- width: 100%;
155
- padding: 1rem 1.25rem;
156
- border: none;
157
- background: transparent;
158
- cursor: pointer;
159
149
  font-family: inherit;
160
150
  font-size: 1rem;
161
- font-weight: 500;
162
- color: var(--color-on-surface, #1a1a1a);
163
- text-align: left;
164
- transition: background-color 150ms ease;
165
- }
166
-
167
- .accordion-header:hover:not(:disabled) {
168
- background-color: var(--color-surface-variant, #f5f5f5);
169
- }
170
-
171
- .accordion-header:focus-visible {
172
- outline: 2px solid var(--color-primary, #6366f1);
173
- outline-offset: -2px;
174
- }
175
-
176
- .accordion-header:disabled {
177
- cursor: not-allowed;
178
- opacity: 0.5;
179
- }
180
-
181
- .header-content {
182
- flex: 1;
183
- display: flex;
184
- align-items: center;
185
- }
186
-
187
- .chevron {
188
- width: 1.25rem;
189
- height: 1.25rem;
190
- transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
191
- flex-shrink: 0;
192
- margin-left: 0.75rem;
193
- }
194
-
195
- :host([open]) .chevron {
196
- transform: rotate(180deg);
197
- }
198
-
199
- .content-wrapper {
200
- display: grid;
201
- grid-template-rows: 0fr;
202
- transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);
203
- }
204
-
205
- :host([open]) .content-wrapper {
206
- grid-template-rows: 1fr;
207
- }
208
-
209
- .content-inner {
210
- overflow: hidden;
151
+ justify-content: space-between;
152
+ padding: 1rem 1.25rem;
211
153
  }
212
154
 
213
- .accordion-content {
155
+ .accordion-body-inner {
214
156
  padding: 0 1.25rem 1rem;
215
- color: var(--color-on-surface-variant, #4a4a4a);
216
157
  }
217
158
  `;
218
159
 
219
- class ElDmAccordionItem extends import_el_core.BaseElement {
160
+ class ElDmAccordionItem extends import_el_base.BaseElement {
220
161
  static properties = {
221
162
  value: { type: String, reflect: true },
222
163
  disabled: { type: Boolean, reflect: true },
@@ -252,13 +193,13 @@ class ElDmAccordionItem extends import_el_core.BaseElement {
252
193
  }
253
194
  }
254
195
  render() {
255
- const chevronSvg = `
256
- <svg class="chevron" part="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
196
+ const expandSvg = `
197
+ <svg class="accordion-expand" part="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="20" height="20">
257
198
  <polyline points="6 9 12 15 18 9"></polyline>
258
199
  </svg>
259
200
  `;
260
201
  return `
261
- <div class="accordion-item">
202
+ <div class="accordion-item ${this.open ? "open" : ""}">
262
203
  <button
263
204
  class="accordion-header"
264
205
  part="header"
@@ -267,15 +208,15 @@ class ElDmAccordionItem extends import_el_core.BaseElement {
267
208
  aria-controls="content-${this.value || "item"}"
268
209
  ${this.disabled ? "disabled" : ""}
269
210
  >
270
- <span class="header-content">
211
+ <span class="accordion-title">
271
212
  <slot name="header"></slot>
272
213
  </span>
273
- ${chevronSvg}
214
+ ${expandSvg}
274
215
  </button>
275
- <div class="content-wrapper">
276
- <div class="content-inner">
216
+ <div class="accordion-content">
217
+ <div class="accordion-body">
277
218
  <div
278
- class="accordion-content"
219
+ class="accordion-body-inner"
279
220
  part="content"
280
221
  id="content-${this.value || "item"}"
281
222
  role="region"
@@ -306,5 +247,5 @@ function register() {
306
247
  }
307
248
  }
308
249
 
309
- //# debugId=0BE2AEAE9A8FF7C564756E2164756E21
250
+ //# debugId=D40479E7458CD77564756E2164756E21
310
251
  //# sourceMappingURL=index.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/el-dm-accordion.ts", "../../src/index.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * DuskMoon Accordion Element\n *\n * An expandable/collapsible panels component for organizing content.\n *\n * @element el-dm-accordion\n *\n * @attr {boolean} multiple - Allow multiple panels to be open simultaneously\n * @attr {string} value - Comma-separated list of open item IDs\n *\n * @slot - Default slot for accordion items (el-dm-accordion-item)\n *\n * @csspart container - The accordion container\n *\n * @fires change - Fired when expansion state changes\n */\n\nimport { BaseElement, css } from '@duskmoon-dev/el-core';\n\nconst styles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n .accordion {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--color-outline, #e0e0e0);\n border-radius: 0.5rem;\n overflow: hidden;\n }\n\n ::slotted(el-dm-accordion-item:not(:last-child)) {\n border-bottom: 1px solid var(--color-outline, #e0e0e0);\n }\n`;\n\nexport class ElDmAccordion extends BaseElement {\n static properties = {\n multiple: { type: Boolean, reflect: true },\n value: { type: String, reflect: true },\n };\n\n /** Allow multiple panels to be open */\n declare multiple: boolean;\n\n /** Comma-separated list of open item IDs */\n declare value: string;\n\n constructor() {\n super();\n this.attachStyles(styles);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n // Initialize items based on value\n this._syncItemsWithValue();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n this.removeEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n }\n\n /**\n * Get array of open item IDs\n */\n getOpenItems(): string[] {\n return this.value ? this.value.split(',').filter(Boolean) : [];\n }\n\n /**\n * Set open items by ID\n */\n setOpenItems(ids: string[]): void {\n this.value = ids.join(',');\n this._syncItemsWithValue();\n this.emit('change', { value: this.value, openItems: ids });\n }\n\n /**\n * Open a specific item by ID\n */\n open(itemId: string): void {\n const openItems = this.getOpenItems();\n if (!openItems.includes(itemId)) {\n if (this.multiple) {\n this.setOpenItems([...openItems, itemId]);\n } else {\n this.setOpenItems([itemId]);\n }\n }\n }\n\n /**\n * Close a specific item by ID\n */\n close(itemId: string): void {\n const openItems = this.getOpenItems();\n this.setOpenItems(openItems.filter((id) => id !== itemId));\n }\n\n /**\n * Toggle a specific item by ID\n */\n toggle(itemId: string): void {\n const openItems = this.getOpenItems();\n if (openItems.includes(itemId)) {\n this.close(itemId);\n } else {\n this.open(itemId);\n }\n }\n\n /**\n * Handle item toggle events from accordion items\n */\n private _handleItemToggle = (event: CustomEvent): void => {\n const { itemId, open } = event.detail;\n if (open) {\n this.open(itemId);\n } else {\n this.close(itemId);\n }\n };\n\n /**\n * Sync accordion item states with current value\n */\n private _syncItemsWithValue(): void {\n const openItems = this.getOpenItems();\n const items = this.querySelectorAll('el-dm-accordion-item');\n items.forEach((item) => {\n const accordionItem = item as ElDmAccordionItem;\n const itemValue = accordionItem.value;\n if (itemValue) {\n accordionItem.open = openItems.includes(itemValue);\n }\n });\n }\n\n render(): string {\n return `\n <div class=\"accordion\" part=\"container\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n }\n}\n\n/**\n * DuskMoon Accordion Item Element\n *\n * An individual expandable panel within an accordion.\n *\n * @element el-dm-accordion-item\n *\n * @attr {string} value - Unique identifier for this item\n * @attr {boolean} disabled - Whether the item is disabled\n * @attr {boolean} open - Whether the item is expanded\n *\n * @slot header - Content for the header/trigger area\n * @slot - Default slot for the expandable content\n *\n * @csspart header - The header button\n * @csspart icon - The chevron icon\n * @csspart content - The content container\n */\n\nconst itemStyles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n .accordion-item {\n background-color: var(--color-surface, #ffffff);\n }\n\n .accordion-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 1rem 1.25rem;\n border: none;\n background: transparent;\n cursor: pointer;\n font-family: inherit;\n font-size: 1rem;\n font-weight: 500;\n color: var(--color-on-surface, #1a1a1a);\n text-align: left;\n transition: background-color 150ms ease;\n }\n\n .accordion-header:hover:not(:disabled) {\n background-color: var(--color-surface-variant, #f5f5f5);\n }\n\n .accordion-header:focus-visible {\n outline: 2px solid var(--color-primary, #6366f1);\n outline-offset: -2px;\n }\n\n .accordion-header:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .header-content {\n flex: 1;\n display: flex;\n align-items: center;\n }\n\n .chevron {\n width: 1.25rem;\n height: 1.25rem;\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n flex-shrink: 0;\n margin-left: 0.75rem;\n }\n\n :host([open]) .chevron {\n transform: rotate(180deg);\n }\n\n .content-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n :host([open]) .content-wrapper {\n grid-template-rows: 1fr;\n }\n\n .content-inner {\n overflow: hidden;\n }\n\n .accordion-content {\n padding: 0 1.25rem 1rem;\n color: var(--color-on-surface-variant, #4a4a4a);\n }\n`;\n\nexport class ElDmAccordionItem extends BaseElement {\n static properties = {\n value: { type: String, reflect: true },\n disabled: { type: Boolean, reflect: true },\n open: { type: Boolean, reflect: true },\n };\n\n /** Unique identifier for this item */\n declare value: string;\n\n /** Whether the item is disabled */\n declare disabled: boolean;\n\n /** Whether the item is expanded */\n declare open: boolean;\n\n constructor() {\n super();\n this.attachStyles(itemStyles);\n }\n\n /**\n * Handle header click\n */\n private _handleClick(): void {\n if (this.disabled) return;\n\n // Dispatch toggle event to parent accordion\n this.dispatchEvent(\n new CustomEvent('accordion-item-toggle', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: this.value,\n open: !this.open,\n },\n }),\n );\n }\n\n /**\n * Handle keyboard events\n */\n private _handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this._handleClick();\n }\n }\n\n /**\n * Toggle the item open/closed\n */\n toggle(): void {\n if (!this.disabled) {\n this._handleClick();\n }\n }\n\n render(): string {\n const chevronSvg = `\n <svg class=\"chevron\" part=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n `;\n\n return `\n <div class=\"accordion-item\">\n <button\n class=\"accordion-header\"\n part=\"header\"\n type=\"button\"\n aria-expanded=\"${this.open ? 'true' : 'false'}\"\n aria-controls=\"content-${this.value || 'item'}\"\n ${this.disabled ? 'disabled' : ''}\n >\n <span class=\"header-content\">\n <slot name=\"header\"></slot>\n </span>\n ${chevronSvg}\n </button>\n <div class=\"content-wrapper\">\n <div class=\"content-inner\">\n <div\n class=\"accordion-content\"\n part=\"content\"\n id=\"content-${this.value || 'item'}\"\n role=\"region\"\n aria-hidden=\"${this.open ? 'false' : 'true'}\"\n >\n <slot></slot>\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n update(): void {\n super.update();\n const header = this.shadowRoot?.querySelector('.accordion-header');\n header?.addEventListener('click', this._handleClick.bind(this));\n header?.addEventListener('keydown', this._handleKeyDown.bind(this) as EventListener);\n }\n}\n",
5
+ "/**\n * DuskMoon Accordion Element\n *\n * An expandable/collapsible panels component for organizing content.\n * Uses styles from @duskmoon-dev/core for consistent theming.\n *\n * @element el-dm-accordion\n *\n * @attr {boolean} multiple - Allow multiple panels to be open simultaneously\n * @attr {string} value - Comma-separated list of open item IDs\n *\n * @slot - Default slot for accordion items (el-dm-accordion-item)\n *\n * @csspart container - The accordion container\n *\n * @fires change - Fired when expansion state changes\n */\n\nimport { BaseElement, css } from '@duskmoon-dev/el-base';\nimport { css as accordionCSS } from '@duskmoon-dev/core/components/accordion';\n\n// Strip @layer wrapper for Shadow DOM compatibility\nconst coreStyles = accordionCSS.replace(/@layer\\s+components\\s*\\{/, '').replace(/\\}\\s*$/, '');\n\nconst styles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n /* Import core accordion styles */\n ${coreStyles}\n\n /* Web component specific: slotted item borders */\n ::slotted(el-dm-accordion-item:not(:last-child)) {\n border-bottom: 1px solid var(--color-outline, #e0e0e0);\n }\n`;\n\nexport class ElDmAccordion extends BaseElement {\n static properties = {\n multiple: { type: Boolean, reflect: true },\n value: { type: String, reflect: true },\n };\n\n /** Allow multiple panels to be open */\n declare multiple: boolean;\n\n /** Comma-separated list of open item IDs */\n declare value: string;\n\n constructor() {\n super();\n this.attachStyles(styles);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n this._syncItemsWithValue();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n this.removeEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n }\n\n getOpenItems(): string[] {\n return this.value ? this.value.split(',').filter(Boolean) : [];\n }\n\n setOpenItems(ids: string[]): void {\n this.value = ids.join(',');\n this._syncItemsWithValue();\n this.emit('change', { value: this.value, openItems: ids });\n }\n\n open(itemId: string): void {\n const openItems = this.getOpenItems();\n if (!openItems.includes(itemId)) {\n if (this.multiple) {\n this.setOpenItems([...openItems, itemId]);\n } else {\n this.setOpenItems([itemId]);\n }\n }\n }\n\n close(itemId: string): void {\n const openItems = this.getOpenItems();\n this.setOpenItems(openItems.filter((id) => id !== itemId));\n }\n\n toggle(itemId: string): void {\n const openItems = this.getOpenItems();\n if (openItems.includes(itemId)) {\n this.close(itemId);\n } else {\n this.open(itemId);\n }\n }\n\n private _handleItemToggle = (event: CustomEvent): void => {\n const { itemId, open } = event.detail;\n if (open) {\n this.open(itemId);\n } else {\n this.close(itemId);\n }\n };\n\n private _syncItemsWithValue(): void {\n const openItems = this.getOpenItems();\n const items = this.querySelectorAll('el-dm-accordion-item');\n items.forEach((item) => {\n const accordionItem = item as ElDmAccordionItem;\n const itemValue = accordionItem.value;\n if (itemValue) {\n accordionItem.open = openItems.includes(itemValue);\n }\n });\n }\n\n render(): string {\n return `\n <div class=\"accordion\" part=\"container\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n }\n}\n\n/**\n * DuskMoon Accordion Item Element\n *\n * An individual expandable panel within an accordion.\n * Uses styles from @duskmoon-dev/core for consistent theming.\n *\n * @element el-dm-accordion-item\n *\n * @attr {string} value - Unique identifier for this item\n * @attr {boolean} disabled - Whether the item is disabled\n * @attr {boolean} open - Whether the item is expanded\n *\n * @slot header - Content for the header/trigger area\n * @slot - Default slot for the expandable content\n *\n * @csspart header - The header button\n * @csspart icon - The expand/collapse icon\n * @csspart content - The content container\n */\n\nconst itemStyles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n /* Import core accordion styles */\n ${coreStyles}\n\n /* Web component specific adjustments */\n .accordion-header {\n font-family: inherit;\n font-size: 1rem;\n justify-content: space-between;\n padding: 1rem 1.25rem;\n }\n\n .accordion-body-inner {\n padding: 0 1.25rem 1rem;\n }\n`;\n\nexport class ElDmAccordionItem extends BaseElement {\n static properties = {\n value: { type: String, reflect: true },\n disabled: { type: Boolean, reflect: true },\n open: { type: Boolean, reflect: true },\n };\n\n declare value: string;\n declare disabled: boolean;\n declare open: boolean;\n\n constructor() {\n super();\n this.attachStyles(itemStyles);\n }\n\n private _handleClick(): void {\n if (this.disabled) return;\n\n this.dispatchEvent(\n new CustomEvent('accordion-item-toggle', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: this.value,\n open: !this.open,\n },\n }),\n );\n }\n\n private _handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this._handleClick();\n }\n }\n\n toggle(): void {\n if (!this.disabled) {\n this._handleClick();\n }\n }\n\n render(): string {\n const expandSvg = `\n <svg class=\"accordion-expand\" part=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"20\" height=\"20\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n `;\n\n return `\n <div class=\"accordion-item ${this.open ? 'open' : ''}\">\n <button\n class=\"accordion-header\"\n part=\"header\"\n type=\"button\"\n aria-expanded=\"${this.open ? 'true' : 'false'}\"\n aria-controls=\"content-${this.value || 'item'}\"\n ${this.disabled ? 'disabled' : ''}\n >\n <span class=\"accordion-title\">\n <slot name=\"header\"></slot>\n </span>\n ${expandSvg}\n </button>\n <div class=\"accordion-content\">\n <div class=\"accordion-body\">\n <div\n class=\"accordion-body-inner\"\n part=\"content\"\n id=\"content-${this.value || 'item'}\"\n role=\"region\"\n aria-hidden=\"${this.open ? 'false' : 'true'}\"\n >\n <slot></slot>\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n update(): void {\n super.update();\n const header = this.shadowRoot?.querySelector('.accordion-header');\n header?.addEventListener('click', this._handleClick.bind(this));\n header?.addEventListener('keydown', this._handleKeyDown.bind(this) as EventListener);\n }\n}\n",
6
6
  "/**\n * @duskmoon-dev/el-accordion\n *\n * DuskMoon Accordion custom element for expandable/collapsible panels\n */\n\nimport { ElDmAccordion, ElDmAccordionItem } from './el-dm-accordion.js';\n\nexport { ElDmAccordion, ElDmAccordionItem };\n\n/**\n * Register the el-dm-accordion and el-dm-accordion-item custom elements\n *\n * @example\n * ```ts\n * import { register } from '@duskmoon-dev/el-accordion';\n * register();\n * ```\n */\nexport function register(): void {\n if (!customElements.get('el-dm-accordion')) {\n customElements.define('el-dm-accordion', ElDmAccordion);\n }\n if (!customElements.get('el-dm-accordion-item')) {\n customElements.define('el-dm-accordion-item', ElDmAccordionItem);\n }\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "0BE2AEAE9A8FF7C564756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "D40479E7458CD77564756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -36,8 +36,10 @@ __export(exports_src, {
36
36
  module.exports = __toCommonJS(exports_src);
37
37
 
38
38
  // src/el-dm-accordion.ts
39
- var import_el_core = require("@duskmoon-dev/el-core");
40
- var styles = import_el_core.css`
39
+ var import_el_base = require("@duskmoon-dev/el-base");
40
+ var import_accordion = require("@duskmoon-dev/core/components/accordion");
41
+ var coreStyles = import_accordion.css.replace(/@layer\s+components\s*\{/, "").replace(/\}\s*$/, "");
42
+ var styles = import_el_base.css`
41
43
  :host {
42
44
  display: block;
43
45
  }
@@ -46,20 +48,16 @@ var styles = import_el_core.css`
46
48
  display: none !important;
47
49
  }
48
50
 
49
- .accordion {
50
- display: flex;
51
- flex-direction: column;
52
- border: 1px solid var(--color-outline, #e0e0e0);
53
- border-radius: 0.5rem;
54
- overflow: hidden;
55
- }
51
+ /* Import core accordion styles */
52
+ ${coreStyles}
56
53
 
54
+ /* Web component specific: slotted item borders */
57
55
  ::slotted(el-dm-accordion-item:not(:last-child)) {
58
56
  border-bottom: 1px solid var(--color-outline, #e0e0e0);
59
57
  }
60
58
  `;
61
59
 
62
- class ElDmAccordion extends import_el_core.BaseElement {
60
+ class ElDmAccordion extends import_el_base.BaseElement {
63
61
  static properties = {
64
62
  multiple: { type: Boolean, reflect: true },
65
63
  value: { type: String, reflect: true }
@@ -134,7 +132,7 @@ class ElDmAccordion extends import_el_core.BaseElement {
134
132
  `;
135
133
  }
136
134
  }
137
- var itemStyles = import_el_core.css`
135
+ var itemStyles = import_el_base.css`
138
136
  :host {
139
137
  display: block;
140
138
  }
@@ -143,80 +141,23 @@ var itemStyles = import_el_core.css`
143
141
  display: none !important;
144
142
  }
145
143
 
146
- .accordion-item {
147
- background-color: var(--color-surface, #ffffff);
148
- }
144
+ /* Import core accordion styles */
145
+ ${coreStyles}
149
146
 
147
+ /* Web component specific adjustments */
150
148
  .accordion-header {
151
- display: flex;
152
- align-items: center;
153
- justify-content: space-between;
154
- width: 100%;
155
- padding: 1rem 1.25rem;
156
- border: none;
157
- background: transparent;
158
- cursor: pointer;
159
149
  font-family: inherit;
160
150
  font-size: 1rem;
161
- font-weight: 500;
162
- color: var(--color-on-surface, #1a1a1a);
163
- text-align: left;
164
- transition: background-color 150ms ease;
165
- }
166
-
167
- .accordion-header:hover:not(:disabled) {
168
- background-color: var(--color-surface-variant, #f5f5f5);
169
- }
170
-
171
- .accordion-header:focus-visible {
172
- outline: 2px solid var(--color-primary, #6366f1);
173
- outline-offset: -2px;
174
- }
175
-
176
- .accordion-header:disabled {
177
- cursor: not-allowed;
178
- opacity: 0.5;
179
- }
180
-
181
- .header-content {
182
- flex: 1;
183
- display: flex;
184
- align-items: center;
185
- }
186
-
187
- .chevron {
188
- width: 1.25rem;
189
- height: 1.25rem;
190
- transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);
191
- flex-shrink: 0;
192
- margin-left: 0.75rem;
193
- }
194
-
195
- :host([open]) .chevron {
196
- transform: rotate(180deg);
197
- }
198
-
199
- .content-wrapper {
200
- display: grid;
201
- grid-template-rows: 0fr;
202
- transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);
203
- }
204
-
205
- :host([open]) .content-wrapper {
206
- grid-template-rows: 1fr;
207
- }
208
-
209
- .content-inner {
210
- overflow: hidden;
151
+ justify-content: space-between;
152
+ padding: 1rem 1.25rem;
211
153
  }
212
154
 
213
- .accordion-content {
155
+ .accordion-body-inner {
214
156
  padding: 0 1.25rem 1rem;
215
- color: var(--color-on-surface-variant, #4a4a4a);
216
157
  }
217
158
  `;
218
159
 
219
- class ElDmAccordionItem extends import_el_core.BaseElement {
160
+ class ElDmAccordionItem extends import_el_base.BaseElement {
220
161
  static properties = {
221
162
  value: { type: String, reflect: true },
222
163
  disabled: { type: Boolean, reflect: true },
@@ -252,13 +193,13 @@ class ElDmAccordionItem extends import_el_core.BaseElement {
252
193
  }
253
194
  }
254
195
  render() {
255
- const chevronSvg = `
256
- <svg class="chevron" part="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
196
+ const expandSvg = `
197
+ <svg class="accordion-expand" part="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" width="20" height="20">
257
198
  <polyline points="6 9 12 15 18 9"></polyline>
258
199
  </svg>
259
200
  `;
260
201
  return `
261
- <div class="accordion-item">
202
+ <div class="accordion-item ${this.open ? "open" : ""}">
262
203
  <button
263
204
  class="accordion-header"
264
205
  part="header"
@@ -267,15 +208,15 @@ class ElDmAccordionItem extends import_el_core.BaseElement {
267
208
  aria-controls="content-${this.value || "item"}"
268
209
  ${this.disabled ? "disabled" : ""}
269
210
  >
270
- <span class="header-content">
211
+ <span class="accordion-title">
271
212
  <slot name="header"></slot>
272
213
  </span>
273
- ${chevronSvg}
214
+ ${expandSvg}
274
215
  </button>
275
- <div class="content-wrapper">
276
- <div class="content-inner">
216
+ <div class="accordion-content">
217
+ <div class="accordion-body">
277
218
  <div
278
- class="accordion-content"
219
+ class="accordion-body-inner"
279
220
  part="content"
280
221
  id="content-${this.value || "item"}"
281
222
  role="region"
@@ -309,5 +250,5 @@ function register() {
309
250
  // src/register.ts
310
251
  register();
311
252
 
312
- //# debugId=20C6F98495A8D02964756E2164756E21
253
+ //# debugId=6A2751D228C88FBB64756E2164756E21
313
254
  //# sourceMappingURL=register.js.map
@@ -2,11 +2,11 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/el-dm-accordion.ts", "../../src/index.ts", "../../src/register.ts"],
4
4
  "sourcesContent": [
5
- "/**\n * DuskMoon Accordion Element\n *\n * An expandable/collapsible panels component for organizing content.\n *\n * @element el-dm-accordion\n *\n * @attr {boolean} multiple - Allow multiple panels to be open simultaneously\n * @attr {string} value - Comma-separated list of open item IDs\n *\n * @slot - Default slot for accordion items (el-dm-accordion-item)\n *\n * @csspart container - The accordion container\n *\n * @fires change - Fired when expansion state changes\n */\n\nimport { BaseElement, css } from '@duskmoon-dev/el-core';\n\nconst styles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n .accordion {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--color-outline, #e0e0e0);\n border-radius: 0.5rem;\n overflow: hidden;\n }\n\n ::slotted(el-dm-accordion-item:not(:last-child)) {\n border-bottom: 1px solid var(--color-outline, #e0e0e0);\n }\n`;\n\nexport class ElDmAccordion extends BaseElement {\n static properties = {\n multiple: { type: Boolean, reflect: true },\n value: { type: String, reflect: true },\n };\n\n /** Allow multiple panels to be open */\n declare multiple: boolean;\n\n /** Comma-separated list of open item IDs */\n declare value: string;\n\n constructor() {\n super();\n this.attachStyles(styles);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n // Initialize items based on value\n this._syncItemsWithValue();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n this.removeEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n }\n\n /**\n * Get array of open item IDs\n */\n getOpenItems(): string[] {\n return this.value ? this.value.split(',').filter(Boolean) : [];\n }\n\n /**\n * Set open items by ID\n */\n setOpenItems(ids: string[]): void {\n this.value = ids.join(',');\n this._syncItemsWithValue();\n this.emit('change', { value: this.value, openItems: ids });\n }\n\n /**\n * Open a specific item by ID\n */\n open(itemId: string): void {\n const openItems = this.getOpenItems();\n if (!openItems.includes(itemId)) {\n if (this.multiple) {\n this.setOpenItems([...openItems, itemId]);\n } else {\n this.setOpenItems([itemId]);\n }\n }\n }\n\n /**\n * Close a specific item by ID\n */\n close(itemId: string): void {\n const openItems = this.getOpenItems();\n this.setOpenItems(openItems.filter((id) => id !== itemId));\n }\n\n /**\n * Toggle a specific item by ID\n */\n toggle(itemId: string): void {\n const openItems = this.getOpenItems();\n if (openItems.includes(itemId)) {\n this.close(itemId);\n } else {\n this.open(itemId);\n }\n }\n\n /**\n * Handle item toggle events from accordion items\n */\n private _handleItemToggle = (event: CustomEvent): void => {\n const { itemId, open } = event.detail;\n if (open) {\n this.open(itemId);\n } else {\n this.close(itemId);\n }\n };\n\n /**\n * Sync accordion item states with current value\n */\n private _syncItemsWithValue(): void {\n const openItems = this.getOpenItems();\n const items = this.querySelectorAll('el-dm-accordion-item');\n items.forEach((item) => {\n const accordionItem = item as ElDmAccordionItem;\n const itemValue = accordionItem.value;\n if (itemValue) {\n accordionItem.open = openItems.includes(itemValue);\n }\n });\n }\n\n render(): string {\n return `\n <div class=\"accordion\" part=\"container\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n }\n}\n\n/**\n * DuskMoon Accordion Item Element\n *\n * An individual expandable panel within an accordion.\n *\n * @element el-dm-accordion-item\n *\n * @attr {string} value - Unique identifier for this item\n * @attr {boolean} disabled - Whether the item is disabled\n * @attr {boolean} open - Whether the item is expanded\n *\n * @slot header - Content for the header/trigger area\n * @slot - Default slot for the expandable content\n *\n * @csspart header - The header button\n * @csspart icon - The chevron icon\n * @csspart content - The content container\n */\n\nconst itemStyles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n .accordion-item {\n background-color: var(--color-surface, #ffffff);\n }\n\n .accordion-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n padding: 1rem 1.25rem;\n border: none;\n background: transparent;\n cursor: pointer;\n font-family: inherit;\n font-size: 1rem;\n font-weight: 500;\n color: var(--color-on-surface, #1a1a1a);\n text-align: left;\n transition: background-color 150ms ease;\n }\n\n .accordion-header:hover:not(:disabled) {\n background-color: var(--color-surface-variant, #f5f5f5);\n }\n\n .accordion-header:focus-visible {\n outline: 2px solid var(--color-primary, #6366f1);\n outline-offset: -2px;\n }\n\n .accordion-header:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .header-content {\n flex: 1;\n display: flex;\n align-items: center;\n }\n\n .chevron {\n width: 1.25rem;\n height: 1.25rem;\n transition: transform 300ms cubic-bezier(0.4, 0, 0.2, 1);\n flex-shrink: 0;\n margin-left: 0.75rem;\n }\n\n :host([open]) .chevron {\n transform: rotate(180deg);\n }\n\n .content-wrapper {\n display: grid;\n grid-template-rows: 0fr;\n transition: grid-template-rows 300ms cubic-bezier(0.4, 0, 0.2, 1);\n }\n\n :host([open]) .content-wrapper {\n grid-template-rows: 1fr;\n }\n\n .content-inner {\n overflow: hidden;\n }\n\n .accordion-content {\n padding: 0 1.25rem 1rem;\n color: var(--color-on-surface-variant, #4a4a4a);\n }\n`;\n\nexport class ElDmAccordionItem extends BaseElement {\n static properties = {\n value: { type: String, reflect: true },\n disabled: { type: Boolean, reflect: true },\n open: { type: Boolean, reflect: true },\n };\n\n /** Unique identifier for this item */\n declare value: string;\n\n /** Whether the item is disabled */\n declare disabled: boolean;\n\n /** Whether the item is expanded */\n declare open: boolean;\n\n constructor() {\n super();\n this.attachStyles(itemStyles);\n }\n\n /**\n * Handle header click\n */\n private _handleClick(): void {\n if (this.disabled) return;\n\n // Dispatch toggle event to parent accordion\n this.dispatchEvent(\n new CustomEvent('accordion-item-toggle', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: this.value,\n open: !this.open,\n },\n }),\n );\n }\n\n /**\n * Handle keyboard events\n */\n private _handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this._handleClick();\n }\n }\n\n /**\n * Toggle the item open/closed\n */\n toggle(): void {\n if (!this.disabled) {\n this._handleClick();\n }\n }\n\n render(): string {\n const chevronSvg = `\n <svg class=\"chevron\" part=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n `;\n\n return `\n <div class=\"accordion-item\">\n <button\n class=\"accordion-header\"\n part=\"header\"\n type=\"button\"\n aria-expanded=\"${this.open ? 'true' : 'false'}\"\n aria-controls=\"content-${this.value || 'item'}\"\n ${this.disabled ? 'disabled' : ''}\n >\n <span class=\"header-content\">\n <slot name=\"header\"></slot>\n </span>\n ${chevronSvg}\n </button>\n <div class=\"content-wrapper\">\n <div class=\"content-inner\">\n <div\n class=\"accordion-content\"\n part=\"content\"\n id=\"content-${this.value || 'item'}\"\n role=\"region\"\n aria-hidden=\"${this.open ? 'false' : 'true'}\"\n >\n <slot></slot>\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n update(): void {\n super.update();\n const header = this.shadowRoot?.querySelector('.accordion-header');\n header?.addEventListener('click', this._handleClick.bind(this));\n header?.addEventListener('keydown', this._handleKeyDown.bind(this) as EventListener);\n }\n}\n",
5
+ "/**\n * DuskMoon Accordion Element\n *\n * An expandable/collapsible panels component for organizing content.\n * Uses styles from @duskmoon-dev/core for consistent theming.\n *\n * @element el-dm-accordion\n *\n * @attr {boolean} multiple - Allow multiple panels to be open simultaneously\n * @attr {string} value - Comma-separated list of open item IDs\n *\n * @slot - Default slot for accordion items (el-dm-accordion-item)\n *\n * @csspart container - The accordion container\n *\n * @fires change - Fired when expansion state changes\n */\n\nimport { BaseElement, css } from '@duskmoon-dev/el-base';\nimport { css as accordionCSS } from '@duskmoon-dev/core/components/accordion';\n\n// Strip @layer wrapper for Shadow DOM compatibility\nconst coreStyles = accordionCSS.replace(/@layer\\s+components\\s*\\{/, '').replace(/\\}\\s*$/, '');\n\nconst styles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n /* Import core accordion styles */\n ${coreStyles}\n\n /* Web component specific: slotted item borders */\n ::slotted(el-dm-accordion-item:not(:last-child)) {\n border-bottom: 1px solid var(--color-outline, #e0e0e0);\n }\n`;\n\nexport class ElDmAccordion extends BaseElement {\n static properties = {\n multiple: { type: Boolean, reflect: true },\n value: { type: String, reflect: true },\n };\n\n /** Allow multiple panels to be open */\n declare multiple: boolean;\n\n /** Comma-separated list of open item IDs */\n declare value: string;\n\n constructor() {\n super();\n this.attachStyles(styles);\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n this.addEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n this._syncItemsWithValue();\n }\n\n disconnectedCallback(): void {\n super.disconnectedCallback?.();\n this.removeEventListener('accordion-item-toggle', this._handleItemToggle as EventListener);\n }\n\n getOpenItems(): string[] {\n return this.value ? this.value.split(',').filter(Boolean) : [];\n }\n\n setOpenItems(ids: string[]): void {\n this.value = ids.join(',');\n this._syncItemsWithValue();\n this.emit('change', { value: this.value, openItems: ids });\n }\n\n open(itemId: string): void {\n const openItems = this.getOpenItems();\n if (!openItems.includes(itemId)) {\n if (this.multiple) {\n this.setOpenItems([...openItems, itemId]);\n } else {\n this.setOpenItems([itemId]);\n }\n }\n }\n\n close(itemId: string): void {\n const openItems = this.getOpenItems();\n this.setOpenItems(openItems.filter((id) => id !== itemId));\n }\n\n toggle(itemId: string): void {\n const openItems = this.getOpenItems();\n if (openItems.includes(itemId)) {\n this.close(itemId);\n } else {\n this.open(itemId);\n }\n }\n\n private _handleItemToggle = (event: CustomEvent): void => {\n const { itemId, open } = event.detail;\n if (open) {\n this.open(itemId);\n } else {\n this.close(itemId);\n }\n };\n\n private _syncItemsWithValue(): void {\n const openItems = this.getOpenItems();\n const items = this.querySelectorAll('el-dm-accordion-item');\n items.forEach((item) => {\n const accordionItem = item as ElDmAccordionItem;\n const itemValue = accordionItem.value;\n if (itemValue) {\n accordionItem.open = openItems.includes(itemValue);\n }\n });\n }\n\n render(): string {\n return `\n <div class=\"accordion\" part=\"container\" role=\"presentation\">\n <slot></slot>\n </div>\n `;\n }\n}\n\n/**\n * DuskMoon Accordion Item Element\n *\n * An individual expandable panel within an accordion.\n * Uses styles from @duskmoon-dev/core for consistent theming.\n *\n * @element el-dm-accordion-item\n *\n * @attr {string} value - Unique identifier for this item\n * @attr {boolean} disabled - Whether the item is disabled\n * @attr {boolean} open - Whether the item is expanded\n *\n * @slot header - Content for the header/trigger area\n * @slot - Default slot for the expandable content\n *\n * @csspart header - The header button\n * @csspart icon - The expand/collapse icon\n * @csspart content - The content container\n */\n\nconst itemStyles = css`\n :host {\n display: block;\n }\n\n :host([hidden]) {\n display: none !important;\n }\n\n /* Import core accordion styles */\n ${coreStyles}\n\n /* Web component specific adjustments */\n .accordion-header {\n font-family: inherit;\n font-size: 1rem;\n justify-content: space-between;\n padding: 1rem 1.25rem;\n }\n\n .accordion-body-inner {\n padding: 0 1.25rem 1rem;\n }\n`;\n\nexport class ElDmAccordionItem extends BaseElement {\n static properties = {\n value: { type: String, reflect: true },\n disabled: { type: Boolean, reflect: true },\n open: { type: Boolean, reflect: true },\n };\n\n declare value: string;\n declare disabled: boolean;\n declare open: boolean;\n\n constructor() {\n super();\n this.attachStyles(itemStyles);\n }\n\n private _handleClick(): void {\n if (this.disabled) return;\n\n this.dispatchEvent(\n new CustomEvent('accordion-item-toggle', {\n bubbles: true,\n composed: true,\n detail: {\n itemId: this.value,\n open: !this.open,\n },\n }),\n );\n }\n\n private _handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this._handleClick();\n }\n }\n\n toggle(): void {\n if (!this.disabled) {\n this._handleClick();\n }\n }\n\n render(): string {\n const expandSvg = `\n <svg class=\"accordion-expand\" part=\"icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" width=\"20\" height=\"20\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n `;\n\n return `\n <div class=\"accordion-item ${this.open ? 'open' : ''}\">\n <button\n class=\"accordion-header\"\n part=\"header\"\n type=\"button\"\n aria-expanded=\"${this.open ? 'true' : 'false'}\"\n aria-controls=\"content-${this.value || 'item'}\"\n ${this.disabled ? 'disabled' : ''}\n >\n <span class=\"accordion-title\">\n <slot name=\"header\"></slot>\n </span>\n ${expandSvg}\n </button>\n <div class=\"accordion-content\">\n <div class=\"accordion-body\">\n <div\n class=\"accordion-body-inner\"\n part=\"content\"\n id=\"content-${this.value || 'item'}\"\n role=\"region\"\n aria-hidden=\"${this.open ? 'false' : 'true'}\"\n >\n <slot></slot>\n </div>\n </div>\n </div>\n </div>\n `;\n }\n\n update(): void {\n super.update();\n const header = this.shadowRoot?.querySelector('.accordion-header');\n header?.addEventListener('click', this._handleClick.bind(this));\n header?.addEventListener('keydown', this._handleKeyDown.bind(this) as EventListener);\n }\n}\n",
6
6
  "/**\n * @duskmoon-dev/el-accordion\n *\n * DuskMoon Accordion custom element for expandable/collapsible panels\n */\n\nimport { ElDmAccordion, ElDmAccordionItem } from './el-dm-accordion.js';\n\nexport { ElDmAccordion, ElDmAccordionItem };\n\n/**\n * Register the el-dm-accordion and el-dm-accordion-item custom elements\n *\n * @example\n * ```ts\n * import { register } from '@duskmoon-dev/el-accordion';\n * register();\n * ```\n */\nexport function register(): void {\n if (!customElements.get('el-dm-accordion')) {\n customElements.define('el-dm-accordion', ElDmAccordion);\n }\n if (!customElements.get('el-dm-accordion-item')) {\n customElements.define('el-dm-accordion-item', ElDmAccordionItem);\n }\n}\n",
7
7
  "/**\n * Auto-register el-dm-accordion and el-dm-accordion-item custom elements\n *\n * @example\n * ```ts\n * import '@duskmoon-dev/el-accordion/register';\n *\n * // Now you can use <el-dm-accordion> and <el-dm-accordion-item> in HTML\n * ```\n */\nimport { register } from './index.js';\n\nregister();\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "20C6F98495A8D02964756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "6A2751D228C88FBB64756E2164756E21",
11
11
  "names": []
12
12
  }