@marioschmidt/design-system-components 1.3.1 → 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/dist/bds/bds.esm.js +1 -1
  2. package/dist/bds/{p-DUrpTa_b.js → p-B4AUg0uO.js} +2 -2
  3. package/dist/bds/p-a851ab89.entry.js +1 -0
  4. package/dist/cjs/bds.cjs.js +2 -2
  5. package/dist/cjs/ds-button_3.cjs.entry.js +28 -140
  6. package/dist/cjs/{index-yDPq0GyD.js → index-Bb064vv6.js} +3 -56
  7. package/dist/cjs/loader.cjs.js +2 -2
  8. package/dist/collection/ds-button/ds-button.css +2 -6
  9. package/dist/collection/ds-button/ds-button.js +50 -14
  10. package/dist/collection/ds-card/ds-card.js +2 -2
  11. package/dist/collection/ds-icon/ds-icon.css +3 -58
  12. package/dist/collection/ds-icon/ds-icon.js +20 -231
  13. package/dist/collection/icons.js +205 -0
  14. package/dist/components/ds-button.d.ts +1 -1
  15. package/dist/components/ds-button.js +1 -1
  16. package/dist/components/ds-card.d.ts +1 -1
  17. package/dist/components/ds-card.js +1 -1
  18. package/dist/components/ds-icon.d.ts +1 -1
  19. package/dist/components/ds-icon.js +1 -1
  20. package/dist/components/index.js +1 -1
  21. package/dist/components/p-o-zDLqwP.js +1 -0
  22. package/dist/docs/ds-button/readme.md +19 -4
  23. package/dist/docs/ds-icon/readme.md +17 -8
  24. package/dist/esm/bds.js +3 -3
  25. package/dist/esm/ds-button_3.entry.js +28 -140
  26. package/dist/esm/{index-DUrpTa_b.js → index-B4AUg0uO.js} +4 -56
  27. package/dist/esm/loader.js +3 -3
  28. package/dist/types/components.d.ts +24 -46
  29. package/dist/types/ds-button/ds-button.d.ts +9 -10
  30. package/dist/types/ds-icon/ds-icon.d.ts +2 -45
  31. package/dist/types/icons.d.ts +6 -0
  32. package/dist/www/build/bds.esm.js +1 -1
  33. package/dist/www/build/{p-DUrpTa_b.js → p-B4AUg0uO.js} +2 -2
  34. package/dist/www/build/p-a851ab89.entry.js +1 -0
  35. package/dist/www/css/advertorial/components/_dsysdocs.css +1 -1
  36. package/dist/www/css/advertorial/components/article.css +1 -1
  37. package/dist/www/css/advertorial/components/audioplayer.css +1 -1
  38. package/dist/www/css/advertorial/components/avatar.css +1 -1
  39. package/dist/www/css/advertorial/components/badge.css +1 -1
  40. package/dist/www/css/advertorial/components/breadcrumb.css +1 -1
  41. package/dist/www/css/advertorial/components/breakingnews.css +1 -1
  42. package/dist/www/css/advertorial/components/button.css +1 -1
  43. package/dist/www/css/advertorial/components/card.css +1 -1
  44. package/dist/www/css/advertorial/components/carousel.css +1 -1
  45. package/dist/www/css/advertorial/components/chip.css +1 -1
  46. package/dist/www/css/advertorial/components/datepicker.css +1 -1
  47. package/dist/www/css/advertorial/components/drawers.css +1 -1
  48. package/dist/www/css/advertorial/components/dropdown.css +1 -1
  49. package/dist/www/css/advertorial/components/footer.css +1 -1
  50. package/dist/www/css/advertorial/components/icon.css +1 -1
  51. package/dist/www/css/advertorial/components/iconbutton.css +1 -1
  52. package/dist/www/css/advertorial/components/infoelement.css +1 -1
  53. package/dist/www/css/advertorial/components/inputfield.css +1 -1
  54. package/dist/www/css/advertorial/components/liveticker.css +1 -1
  55. package/dist/www/css/advertorial/components/mediaplayer.css +1 -1
  56. package/dist/www/css/advertorial/components/menu.css +1 -1
  57. package/dist/www/css/advertorial/components/newsticker.css +1 -1
  58. package/dist/www/css/advertorial/components/pagination.css +1 -1
  59. package/dist/www/css/advertorial/components/paywall.css +1 -1
  60. package/dist/www/css/advertorial/components/quote.css +1 -1
  61. package/dist/www/css/advertorial/components/radiobutton.css +1 -1
  62. package/dist/www/css/advertorial/components/search.css +1 -1
  63. package/dist/www/css/advertorial/components/sectiontitle.css +1 -1
  64. package/dist/www/css/advertorial/components/separator.css +1 -1
  65. package/dist/www/css/advertorial/components/skeletons.css +1 -1
  66. package/dist/www/css/advertorial/components/slider.css +1 -1
  67. package/dist/www/css/advertorial/components/specialnavi.css +1 -1
  68. package/dist/www/css/advertorial/components/spinner.css +1 -1
  69. package/dist/www/css/advertorial/components/tab.css +1 -1
  70. package/dist/www/css/advertorial/components/table.css +1 -1
  71. package/dist/www/css/advertorial/components/teaser.css +1 -1
  72. package/dist/www/css/advertorial/components/toggleswitch.css +1 -1
  73. package/dist/www/css/advertorial/components/video.css +1 -1
  74. package/dist/www/css/advertorial/theme.css +1 -1
  75. package/dist/www/css/advertorial/tokens.css +1 -1
  76. package/dist/www/css/bild/components/_dsysdoc.css +1 -1
  77. package/dist/www/css/bild/components/_dsysdocs.css +1 -1
  78. package/dist/www/css/bild/components/alert.css +1 -1
  79. package/dist/www/css/bild/components/article.css +1 -1
  80. package/dist/www/css/bild/components/audioplayer.css +1 -1
  81. package/dist/www/css/bild/components/avatar.css +1 -1
  82. package/dist/www/css/bild/components/badge.css +1 -1
  83. package/dist/www/css/bild/components/breadcrumb.css +1 -1
  84. package/dist/www/css/bild/components/breakingnews.css +1 -1
  85. package/dist/www/css/bild/components/button.css +1 -1
  86. package/dist/www/css/bild/components/card.css +1 -1
  87. package/dist/www/css/bild/components/carousel.css +1 -1
  88. package/dist/www/css/bild/components/chip.css +1 -1
  89. package/dist/www/css/bild/components/datepicker.css +1 -1
  90. package/dist/www/css/bild/components/drawers.css +1 -1
  91. package/dist/www/css/bild/components/dropdown.css +1 -1
  92. package/dist/www/css/bild/components/empties.css +1 -1
  93. package/dist/www/css/bild/components/footer.css +1 -1
  94. package/dist/www/css/bild/components/gallery.css +1 -1
  95. package/dist/www/css/bild/components/icon.css +1 -1
  96. package/dist/www/css/bild/components/iconbutton.css +1 -1
  97. package/dist/www/css/bild/components/infoelement.css +1 -1
  98. package/dist/www/css/bild/components/inputfield.css +1 -1
  99. package/dist/www/css/bild/components/kicker.css +1 -1
  100. package/dist/www/css/bild/components/liveticker.css +1 -1
  101. package/dist/www/css/bild/components/mediaplayer.css +1 -1
  102. package/dist/www/css/bild/components/menu.css +1 -1
  103. package/dist/www/css/bild/components/menuitem.css +1 -1
  104. package/dist/www/css/bild/components/newsticker.css +1 -1
  105. package/dist/www/css/bild/components/pagination.css +1 -1
  106. package/dist/www/css/bild/components/partnerlinks.css +1 -1
  107. package/dist/www/css/bild/components/paywall.css +1 -1
  108. package/dist/www/css/bild/components/quote.css +1 -1
  109. package/dist/www/css/bild/components/radiobutton.css +1 -1
  110. package/dist/www/css/bild/components/search.css +1 -1
  111. package/dist/www/css/bild/components/sectiontitle.css +1 -1
  112. package/dist/www/css/bild/components/selection.css +1 -1
  113. package/dist/www/css/bild/components/separator.css +1 -1
  114. package/dist/www/css/bild/components/skeletons.css +1 -1
  115. package/dist/www/css/bild/components/slider.css +1 -1
  116. package/dist/www/css/bild/components/specialnavi.css +1 -1
  117. package/dist/www/css/bild/components/spinner.css +1 -1
  118. package/dist/www/css/bild/components/subheader.css +1 -1
  119. package/dist/www/css/bild/components/tab.css +1 -1
  120. package/dist/www/css/bild/components/table.css +1 -1
  121. package/dist/www/css/bild/components/teaser.css +1 -1
  122. package/dist/www/css/bild/components/toggleswitch.css +1 -1
  123. package/dist/www/css/bild/components/video.css +1 -1
  124. package/dist/www/css/bild/theme.css +1 -1
  125. package/dist/www/css/bild/tokens.css +1 -1
  126. package/dist/www/css/bundles/advertorial.css +1 -1
  127. package/dist/www/css/bundles/bild.css +1 -1
  128. package/dist/www/css/bundles/sportbild.css +1 -1
  129. package/dist/www/css/shared/colorprimitive.css +1 -1
  130. package/dist/www/css/shared/fontprimitive.css +1 -1
  131. package/dist/www/css/shared/primitives.css +1 -1
  132. package/dist/www/css/shared/sizeprimitive.css +1 -1
  133. package/dist/www/css/shared/spaceprimitive.css +1 -1
  134. package/dist/www/css/sportbild/components/_dsysdoc.css +1 -1
  135. package/dist/www/css/sportbild/components/_dsysdocs.css +1 -1
  136. package/dist/www/css/sportbild/components/alert.css +1 -1
  137. package/dist/www/css/sportbild/components/article.css +1 -1
  138. package/dist/www/css/sportbild/components/audioplayer.css +1 -1
  139. package/dist/www/css/sportbild/components/avatar.css +1 -1
  140. package/dist/www/css/sportbild/components/badge.css +1 -1
  141. package/dist/www/css/sportbild/components/breadcrumb.css +1 -1
  142. package/dist/www/css/sportbild/components/breakingnews.css +1 -1
  143. package/dist/www/css/sportbild/components/button.css +1 -1
  144. package/dist/www/css/sportbild/components/card.css +1 -1
  145. package/dist/www/css/sportbild/components/carousel.css +1 -1
  146. package/dist/www/css/sportbild/components/chip.css +1 -1
  147. package/dist/www/css/sportbild/components/datepicker.css +1 -1
  148. package/dist/www/css/sportbild/components/drawers.css +1 -1
  149. package/dist/www/css/sportbild/components/dropdown.css +1 -1
  150. package/dist/www/css/sportbild/components/empties.css +1 -1
  151. package/dist/www/css/sportbild/components/footer.css +1 -1
  152. package/dist/www/css/sportbild/components/gallery.css +1 -1
  153. package/dist/www/css/sportbild/components/icon.css +1 -1
  154. package/dist/www/css/sportbild/components/iconbutton.css +1 -1
  155. package/dist/www/css/sportbild/components/infoelement.css +1 -1
  156. package/dist/www/css/sportbild/components/inputfield.css +1 -1
  157. package/dist/www/css/sportbild/components/kicker.css +1 -1
  158. package/dist/www/css/sportbild/components/liveticker.css +1 -1
  159. package/dist/www/css/sportbild/components/mediaplayer.css +1 -1
  160. package/dist/www/css/sportbild/components/menu.css +1 -1
  161. package/dist/www/css/sportbild/components/menuitem.css +1 -1
  162. package/dist/www/css/sportbild/components/newsticker.css +1 -1
  163. package/dist/www/css/sportbild/components/pagination.css +1 -1
  164. package/dist/www/css/sportbild/components/partnerlinks.css +1 -1
  165. package/dist/www/css/sportbild/components/paywall.css +1 -1
  166. package/dist/www/css/sportbild/components/quote.css +1 -1
  167. package/dist/www/css/sportbild/components/radiobutton.css +1 -1
  168. package/dist/www/css/sportbild/components/search.css +1 -1
  169. package/dist/www/css/sportbild/components/sectiontitle.css +1 -1
  170. package/dist/www/css/sportbild/components/selection.css +1 -1
  171. package/dist/www/css/sportbild/components/separator.css +1 -1
  172. package/dist/www/css/sportbild/components/skeletons.css +1 -1
  173. package/dist/www/css/sportbild/components/slider.css +1 -1
  174. package/dist/www/css/sportbild/components/specialnavi.css +1 -1
  175. package/dist/www/css/sportbild/components/spinner.css +1 -1
  176. package/dist/www/css/sportbild/components/subheader.css +1 -1
  177. package/dist/www/css/sportbild/components/tab.css +1 -1
  178. package/dist/www/css/sportbild/components/table.css +1 -1
  179. package/dist/www/css/sportbild/components/teaser.css +1 -1
  180. package/dist/www/css/sportbild/components/toggleswitch.css +1 -1
  181. package/dist/www/css/sportbild/components/video.css +1 -1
  182. package/dist/www/css/sportbild/theme.css +1 -1
  183. package/dist/www/css/sportbild/tokens.css +1 -1
  184. package/dist/www/icons/manifest.json +2 -2
  185. package/dist/www/index.html +2 -2
  186. package/package.json +1 -1
  187. package/dist/bds/p-f4e1fe1f.entry.js +0 -1
  188. package/dist/www/build/p-f4e1fe1f.entry.js +0 -1
@@ -0,0 +1 @@
1
+ import{t,p as e,H as s,h as n}from"./index.js";const i=new Map,a=e(class extends s{constructor(t){super(),!1!==t&&this.__registerHost(),this.__attachShadow(),this.basePath="/icons",this.svgContent=""}connectedCallback(){this.loadIcon()}onNameChange(){this.loadIcon()}async loadIcon(){if(!this.name)return;const t=`${this.basePath}/${this.name}.svg`;if(i.has(t))this.svgContent=i.get(t);else try{const e=await fetch(t);if(e.ok){const s=await e.text();i.set(t,s),this.svgContent=s}}catch{}}render(){return n("span",{key:"f3549bfd71c52f0bf0b23c346fa5a665119c4033",class:"ds-icon",innerHTML:this.svgContent})}static get watchers(){return{name:[{onNameChange:0}]}}static get style(){return":host{display:inline-flex;align-items:center;justify-content:center;width:var(--icon-size, 24px);height:var(--icon-size, 24px);color:inherit}.ds-icon{display:flex;width:100%;height:100%}.ds-icon svg{width:100%;height:100%;fill:currentColor}"}},[1,"ds-icon",{name:[1],basePath:[1,"base-path"],svgContent:[32]},void 0,{name:[{onNameChange:0}]}]);function c(){"undefined"!=typeof customElements&&["ds-icon"].forEach((e=>{"ds-icon"===e&&(customElements.get(t(e))||customElements.define(t(e),a))}))}c();export{a as D,c as d}
@@ -4,12 +4,27 @@
4
4
 
5
5
  ## Properties
6
6
 
7
- | Property | Attribute | Description | Type | Default |
8
- | ---------- | ---------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
9
- | `disabled` | `disabled` | Disables the button interaction and applies disabled styling. | `boolean` | `false` |
10
- | `variant` | `variant` | Button variant determining visual style. | `"ghost" \| "primary-brand" \| "primary-neutral" \| "primary-success" \| "secondary" \| "tertiary-neutral" \| "tertiary-success"` | `'primary-brand'` |
7
+ | Property | Attribute | Description | Type | Default |
8
+ | -------------- | --------------- | ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ----------------- |
9
+ | `disabled` | `disabled` | Disables the button. | `boolean` | `false` |
10
+ | `icon` | `icon` | Icon name to display (optional). | `string \| undefined` | `undefined` |
11
+ | `iconPosition` | `icon-position` | Icon position: 'start' or 'end'. | `"end" \| "start"` | `'start'` |
12
+ | `variant` | `variant` | Button variant determining visual style. | `"ghost" \| "primary-brand" \| "primary-neutral" \| "primary-success" \| "secondary" \| "tertiary-neutral" \| "tertiary-success"` | `'primary-brand'` |
11
13
 
12
14
 
15
+ ## Dependencies
16
+
17
+ ### Depends on
18
+
19
+ - [ds-icon](../ds-icon)
20
+
21
+ ### Graph
22
+ ```mermaid
23
+ graph TD;
24
+ ds-button --> ds-icon
25
+ style ds-button fill:#f9f,stroke:#333,stroke-width:4px
26
+ ```
27
+
13
28
  ----------------------------------------------
14
29
 
15
30
  *Built with [StencilJS](https://stenciljs.com/)*
@@ -4,16 +4,25 @@
4
4
 
5
5
  ## Properties
6
6
 
7
- | Property | Attribute | Description | Type | Default |
8
- | ------------------- | ----------- | ---------------------------------------------------------------------------------------------------------------- | --------------------- | ---------------- |
9
- | `basePath` | `base-path` | Base path for loading icon SVG files. | `string` | `'/icons'` |
10
- | `color` | `color` | Color of the icon. Accepts any valid CSS color value. Icons use currentColor by default, inheriting from parent. | `string` | `'currentColor'` |
11
- | `label` | `label` | Accessible label for screen readers. If provided, icon is treated as semantic (not decorative). | `string \| undefined` | `undefined` |
12
- | `lazy` | `lazy` | Enable lazy loading with IntersectionObserver. Icon will only load when visible in viewport. | `boolean` | `false` |
13
- | `name` _(required)_ | `name` | Name of the icon to display (without .svg extension). Must match a file in the icons directory. | `string` | `undefined` |
14
- | `size` | `size` | Size of the icon in pixels. | `number` | `24` |
7
+ | Property | Attribute | Description | Type | Default |
8
+ | ------------------- | ----------- | ------------------------------------------ | -------- | ----------- |
9
+ | `basePath` | `base-path` | Base path for icon SVG files. | `string` | `'/icons'` |
10
+ | `name` _(required)_ | `name` | Name of the icon (without .svg extension). | `string` | `undefined` |
15
11
 
16
12
 
13
+ ## Dependencies
14
+
15
+ ### Used by
16
+
17
+ - [ds-button](../ds-button)
18
+
19
+ ### Graph
20
+ ```mermaid
21
+ graph TD;
22
+ ds-button --> ds-icon
23
+ style ds-icon fill:#f9f,stroke:#333,stroke-width:4px
24
+ ```
25
+
17
26
  ----------------------------------------------
18
27
 
19
28
  *Built with [StencilJS](https://stenciljs.com/)*
package/dist/esm/bds.js CHANGED
@@ -1,5 +1,5 @@
1
- import { p as promiseResolve, g as globalScripts, b as bootstrapLazy } from './index-DUrpTa_b.js';
2
- export { s as setNonce } from './index-DUrpTa_b.js';
1
+ import { p as promiseResolve, g as globalScripts, b as bootstrapLazy } from './index-B4AUg0uO.js';
2
+ export { s as setNonce } from './index-B4AUg0uO.js';
3
3
 
4
4
  /*
5
5
  Stencil Client Patch Browser v4.41.0 | MIT Licensed | https://stenciljs.com
@@ -16,5 +16,5 @@ var patchBrowser = () => {
16
16
 
17
17
  patchBrowser().then(async (options) => {
18
18
  await globalScripts();
19
- return bootstrapLazy([["ds-button_3",[[257,"ds-button",{"variant":[1],"disabled":[4]}],[257,"ds-card",{"surface":[1],"cardTitle":[1,"card-title"]}],[1,"ds-icon",{"name":[1],"size":[2],"color":[1],"basePath":[1,"base-path"],"lazy":[4],"label":[1],"svgContent":[32],"isLoading":[32],"hasError":[32]},null,{"name":[{"onNameChange":0}],"basePath":[{"onBasePathChange":0}]}]]]], options);
19
+ return bootstrapLazy([["ds-button_3",[[257,"ds-button",{"variant":[1],"disabled":[4],"icon":[1],"iconPosition":[1,"icon-position"]}],[257,"ds-card",{"surface":[1],"cardTitle":[1,"card-title"]}],[1,"ds-icon",{"name":[1],"basePath":[1,"base-path"],"svgContent":[32]},null,{"name":[{"onNameChange":0}]}]]]], options);
20
20
  });
@@ -1,27 +1,30 @@
1
- import { r as registerInstance, h, a as getElement } from './index-DUrpTa_b.js';
1
+ import { r as registerInstance, h } from './index-B4AUg0uO.js';
2
2
 
3
- const dsButtonCss = () => `:host{display:inline-block}.ds-button{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;border:none;background:transparent;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;padding:var(--button-stack-space) var(--button-inline-space);min-height:var(--button-height-size);gap:var(--button-content-gap-space);border-radius:var(--button-border-radius);font-family:var(--button-label-font-family);font-weight:var(--font-weight-bold);font-size:var(--button-label-font-size);line-height:var(--button-label-line-height);letter-spacing:var(--letter-space-0-p-5);text-transform:uppercase}.ds-button__label{display:inline-flex;align-items:center;gap:inherit}::slotted(ds-icon){--icon-size:var(--icon-size, 24px);color:inherit;flex-shrink:0}.ds-button--primary-brand{background-color:var(--button-primary-brand-bg-color-idle);color:var(--button-primary-brand-label-color)}.ds-button--primary-brand:hover:not(:disabled){background-color:var(--button-primary-brand-bg-color-hover)}.ds-button--primary-brand:active:not(:disabled){background-color:var(--button-primary-brand-bg-color-active)}.ds-button--primary-neutral{background-color:var(--button-primary-neutral-bg-color-idle);color:var(--button-primary-neutral-label-color)}.ds-button--primary-neutral:hover:not(:disabled){background-color:var(--button-primary-neutral-bg-color-hover)}.ds-button--primary-neutral:active:not(:disabled){background-color:var(--button-primary-neutral-bg-color-active)}.ds-button--primary-success{background-color:var(--button-primary-success-bg-color-idle);color:var(--button-primary-success-label-color)}.ds-button--primary-success:hover:not(:disabled){background-color:var(--button-primary-success-bg-color-hover)}.ds-button--primary-success:active:not(:disabled){background-color:var(--button-primary-success-bg-color-active)}.ds-button--secondary{background-color:var(--button-secondary-bg-color-idle);color:var(--button-secondary-label-color)}.ds-button--secondary:hover:not(:disabled){background-color:var(--button-secondary-bg-color-hover)}.ds-button--secondary:active:not(:disabled){background-color:var(--button-secondary-bg-color-active)}.ds-button--tertiary-neutral{background-color:transparent;color:var(--button-tertiary-neutral-label-color);border:var(--button-border-width-size) solid var(--button-tertiary-neutral-border-color-idle)}.ds-button--tertiary-neutral:hover:not(:disabled){background-color:var(--button-tertiary-neutral-bg-color-hover);border-color:var(--button-tertiary-neutral-border-color-hover)}.ds-button--tertiary-neutral:active:not(:disabled){background-color:var(--button-tertiary-neutral-bg-color-active)}.ds-button--tertiary-success{background-color:transparent;color:var(--button-tertiary-success-label-color);border:var(--button-border-width-size) solid var(--button-tertiary-success-border-color)}.ds-button--tertiary-success:hover:not(:disabled){background-color:var(--button-tertiary-success-bg-color-hover)}.ds-button--ghost{background-color:transparent;color:var(--button-ghost-label-color)}.ds-button--ghost:hover:not(:disabled){background-color:var(--button-ghost-bg-color-hover)}.ds-button--ghost:active:not(:disabled){background-color:var(--button-ghost-bg-color-active)}.ds-button--disabled,.ds-button:disabled{cursor:not-allowed;background-color:var(--button-disabled-bg-color);color:var(--button-disabled-label-color);border-color:var(--button-disabled-border-color)}.ds-button--disabled:hover,.ds-button--disabled:active,.ds-button:disabled:hover,.ds-button:disabled:active{background-color:var(--button-disabled-bg-color);color:var(--button-disabled-label-color);border-color:var(--button-disabled-border-color)}.ds-button:focus-visible{outline:2px solid var(--core-color-primary);outline-offset:2px}`;
3
+ const dsButtonCss = () => `:host{display:inline-block}.ds-button{display:inline-flex;align-items:center;justify-content:center;cursor:pointer;border:none;background:transparent;transition:background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;padding:var(--button-stack-space) var(--button-inline-space);min-height:var(--button-height-size);gap:var(--button-content-gap-space);border-radius:var(--button-border-radius);font-family:var(--button-label-font-family);font-weight:var(--font-weight-bold);font-size:var(--button-label-font-size);line-height:var(--button-label-line-height);letter-spacing:var(--letter-space-0-p-5);text-transform:uppercase}.ds-button__label{display:inline-flex;align-items:center;gap:inherit}ds-icon{flex-shrink:0}.ds-button--primary-brand{background-color:var(--button-primary-brand-bg-color-idle);color:var(--button-primary-brand-label-color)}.ds-button--primary-brand:hover:not(:disabled){background-color:var(--button-primary-brand-bg-color-hover)}.ds-button--primary-brand:active:not(:disabled){background-color:var(--button-primary-brand-bg-color-active)}.ds-button--primary-neutral{background-color:var(--button-primary-neutral-bg-color-idle);color:var(--button-primary-neutral-label-color)}.ds-button--primary-neutral:hover:not(:disabled){background-color:var(--button-primary-neutral-bg-color-hover)}.ds-button--primary-neutral:active:not(:disabled){background-color:var(--button-primary-neutral-bg-color-active)}.ds-button--primary-success{background-color:var(--button-primary-success-bg-color-idle);color:var(--button-primary-success-label-color)}.ds-button--primary-success:hover:not(:disabled){background-color:var(--button-primary-success-bg-color-hover)}.ds-button--primary-success:active:not(:disabled){background-color:var(--button-primary-success-bg-color-active)}.ds-button--secondary{background-color:var(--button-secondary-bg-color-idle);color:var(--button-secondary-label-color)}.ds-button--secondary:hover:not(:disabled){background-color:var(--button-secondary-bg-color-hover)}.ds-button--secondary:active:not(:disabled){background-color:var(--button-secondary-bg-color-active)}.ds-button--tertiary-neutral{background-color:transparent;color:var(--button-tertiary-neutral-label-color);border:var(--button-border-width-size) solid var(--button-tertiary-neutral-border-color-idle)}.ds-button--tertiary-neutral:hover:not(:disabled){background-color:var(--button-tertiary-neutral-bg-color-hover);border-color:var(--button-tertiary-neutral-border-color-hover)}.ds-button--tertiary-neutral:active:not(:disabled){background-color:var(--button-tertiary-neutral-bg-color-active)}.ds-button--tertiary-success{background-color:transparent;color:var(--button-tertiary-success-label-color);border:var(--button-border-width-size) solid var(--button-tertiary-success-border-color)}.ds-button--tertiary-success:hover:not(:disabled){background-color:var(--button-tertiary-success-bg-color-hover)}.ds-button--ghost{background-color:transparent;color:var(--button-ghost-label-color)}.ds-button--ghost:hover:not(:disabled){background-color:var(--button-ghost-bg-color-hover)}.ds-button--ghost:active:not(:disabled){background-color:var(--button-ghost-bg-color-active)}.ds-button--disabled,.ds-button:disabled{cursor:not-allowed;background-color:var(--button-disabled-bg-color);color:var(--button-disabled-label-color);border-color:var(--button-disabled-border-color)}.ds-button--disabled:hover,.ds-button--disabled:active,.ds-button:disabled:hover,.ds-button:disabled:active{background-color:var(--button-disabled-bg-color);color:var(--button-disabled-label-color);border-color:var(--button-disabled-border-color)}.ds-button:focus-visible{outline:2px solid var(--core-color-primary);outline-offset:2px}`;
4
4
 
5
5
  const DsButton = class {
6
6
  constructor(hostRef) {
7
7
  registerInstance(this, hostRef);
8
8
  /**
9
9
  * Button variant determining visual style.
10
- * @default 'primary-brand'
11
10
  */
12
11
  this.variant = 'primary-brand';
13
12
  /**
14
- * Disables the button interaction and applies disabled styling.
15
- * @default false
13
+ * Disables the button.
16
14
  */
17
15
  this.disabled = false;
16
+ /**
17
+ * Icon position: 'start' or 'end'.
18
+ */
19
+ this.iconPosition = 'start';
18
20
  }
19
21
  render() {
20
- return (h("button", { key: 'b2c29af56fa84e6274900496d1a57bf7be6070e0', class: {
22
+ const iconEl = this.icon ? h("ds-icon", { name: this.icon }) : null;
23
+ return (h("button", { key: '000508b5713956932132412d59f9ba1b9baa96c7', class: {
21
24
  'ds-button': true,
22
25
  [`ds-button--${this.variant}`]: true,
23
26
  'ds-button--disabled': this.disabled,
24
- }, disabled: this.disabled }, h("slot", { key: 'c87fb66dffa329b2911752390d69d808aea83ead', name: "icon-start" }), h("span", { key: '3049998d0fca7eef41dc5bbc51ab14d396855840', class: "ds-button__label" }, h("slot", { key: '540e93a8de6f0be305963e7b05b90dcbacda6f37' })), h("slot", { key: 'f48be5683052a40bb97436f20b219a42fb09319a', name: "icon-end" })));
27
+ }, disabled: this.disabled }, this.iconPosition === 'start' && iconEl, h("span", { key: '1cf189f05c1f2cdb82f54f6f2283eaa9c6e38381', class: "ds-button__label" }, h("slot", { key: '89eadaa81aaa4e458e46b29e02291ad45c027101' })), this.iconPosition === 'end' && iconEl));
25
28
  }
26
29
  };
27
30
  DsButton.style = dsButtonCss();
@@ -37,173 +40,58 @@ const DsCard = class {
37
40
  this.surface = 'primary';
38
41
  }
39
42
  render() {
40
- return (h("div", { key: '0709463754ee76974475f214840ade290ee7aa83', class: {
43
+ return (h("div", { key: '545dfb7389201a046b465e96723fdc8ad5cd1160', class: {
41
44
  'ds-card': true,
42
45
  [`ds-card--${this.surface}`]: true,
43
- } }, this.cardTitle && (h("div", { key: 'e161468e870e419852e6ef9f92ab9fc24ac60635', class: "ds-card__header" }, h("h3", { key: '8cccde3f7e5ea185ef24d90312439d2e49621504', class: "ds-card__title" }, this.cardTitle))), h("div", { key: '47457839b1fa00f261c1fbfb8842904fb9bf8245', class: "ds-card__content" }, h("slot", { key: '009a1b1e7411daec2c67fd084d654de71875222e' }))));
46
+ } }, this.cardTitle && (h("div", { key: '63523222100e039098a941c2125df63a7bc8a0ee', class: "ds-card__header" }, h("h3", { key: '7e60906b0aeb4d8d20fc09a85d06f4d0bd4a95ae', class: "ds-card__title" }, this.cardTitle))), h("div", { key: '544d6b4e6ac95745261ee73c81f2d01c2806afd3', class: "ds-card__content" }, h("slot", { key: '9102bcc585687daf5d954059a138ad7bac27b640' }))));
44
47
  }
45
48
  };
46
49
  DsCard.style = dsCardCss();
47
50
 
48
- const dsIconCss = () => `:host{display:inline-flex;align-items:center;justify-content:center}.ds-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--icon-size, 24px);height:var(--icon-size, 24px);color:var(--icon-color, currentColor);flex-shrink:0}.ds-icon__svg{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.ds-icon__svg svg{width:100%;height:100%;fill:currentColor}.ds-icon--loading{opacity:0.5}.ds-icon--error{opacity:0.3}.ds-icon__error{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.ds-icon__error svg{width:100%;height:100%;fill:currentColor}`;
51
+ const dsIconCss = () => `:host{display:inline-flex;align-items:center;justify-content:center;width:var(--icon-size, 24px);height:var(--icon-size, 24px);color:inherit}.ds-icon{display:flex;width:100%;height:100%}.ds-icon svg{width:100%;height:100%;fill:currentColor}`;
49
52
 
50
- /**
51
- * Icon cache shared between all ds-icon instances.
52
- * Prevents duplicate fetch requests for the same icon.
53
- */
54
53
  const iconCache = new Map();
55
- const pendingRequests = new Map();
56
54
  const DsIcon = class {
57
55
  constructor(hostRef) {
58
56
  registerInstance(this, hostRef);
59
57
  /**
60
- * Size of the icon in pixels.
61
- * @default 24
62
- */
63
- this.size = 24;
64
- /**
65
- * Color of the icon. Accepts any valid CSS color value.
66
- * Icons use currentColor by default, inheriting from parent.
67
- * @default 'currentColor'
68
- */
69
- this.color = 'currentColor';
70
- /**
71
- * Base path for loading icon SVG files.
72
- * @default '/icons'
58
+ * Base path for icon SVG files.
73
59
  */
74
60
  this.basePath = '/icons';
75
- /**
76
- * Enable lazy loading with IntersectionObserver.
77
- * Icon will only load when visible in viewport.
78
- * @default false
79
- */
80
- this.lazy = false;
81
- /**
82
- * Internal state for the loaded SVG content.
83
- */
84
61
  this.svgContent = '';
85
- /**
86
- * Internal state for loading status.
87
- */
88
- this.isLoading = false;
89
- /**
90
- * Internal state for error status.
91
- */
92
- this.hasError = false;
93
- this.isVisible = false;
94
62
  }
95
63
  connectedCallback() {
96
- if (this.lazy) {
97
- this.setupIntersectionObserver();
98
- }
99
- else {
100
- this.loadIcon();
101
- }
102
- }
103
- disconnectedCallback() {
104
- this.observer?.disconnect();
64
+ this.loadIcon();
105
65
  }
106
66
  onNameChange() {
107
- if (!this.lazy || this.isVisible) {
108
- this.loadIcon();
109
- }
110
- }
111
- onBasePathChange() {
112
- if (!this.lazy || this.isVisible) {
113
- this.loadIcon();
114
- }
115
- }
116
- setupIntersectionObserver() {
117
- if (typeof IntersectionObserver === 'undefined') {
118
- // Fallback for browsers without IntersectionObserver
119
- this.loadIcon();
120
- return;
121
- }
122
- this.observer = new IntersectionObserver((entries) => {
123
- entries.forEach((entry) => {
124
- if (entry.isIntersecting) {
125
- this.isVisible = true;
126
- this.loadIcon();
127
- this.observer?.disconnect();
128
- }
129
- });
130
- }, {
131
- rootMargin: '50px', // Load slightly before entering viewport
132
- });
133
- this.observer.observe(this.el);
67
+ this.loadIcon();
134
68
  }
135
69
  async loadIcon() {
136
- if (!this.name) {
137
- this.hasError = true;
138
- return;
139
- }
140
- const iconUrl = `${this.basePath}/${this.name}.svg`;
141
- // Check cache first
142
- if (iconCache.has(iconUrl)) {
143
- this.svgContent = iconCache.get(iconUrl);
144
- this.hasError = false;
70
+ if (!this.name)
145
71
  return;
146
- }
147
- // Check for pending request (prevent duplicate fetches)
148
- if (pendingRequests.has(iconUrl)) {
149
- try {
150
- this.svgContent = await pendingRequests.get(iconUrl);
151
- this.hasError = false;
152
- }
153
- catch {
154
- this.hasError = true;
155
- }
72
+ const url = `${this.basePath}/${this.name}.svg`;
73
+ if (iconCache.has(url)) {
74
+ this.svgContent = iconCache.get(url);
156
75
  return;
157
76
  }
158
- this.isLoading = true;
159
- this.hasError = false;
160
- // Create fetch promise and store it
161
- const fetchPromise = this.fetchIcon(iconUrl);
162
- pendingRequests.set(iconUrl, fetchPromise);
163
77
  try {
164
- this.svgContent = await fetchPromise;
165
- iconCache.set(iconUrl, this.svgContent);
166
- this.hasError = false;
78
+ const response = await fetch(url);
79
+ if (response.ok) {
80
+ const svg = await response.text();
81
+ iconCache.set(url, svg);
82
+ this.svgContent = svg;
83
+ }
167
84
  }
168
85
  catch {
169
- this.hasError = true;
170
- this.svgContent = '';
171
- }
172
- finally {
173
- this.isLoading = false;
174
- pendingRequests.delete(iconUrl);
175
- }
176
- }
177
- async fetchIcon(url) {
178
- const response = await fetch(url);
179
- if (!response.ok) {
180
- throw new Error(`Failed to load icon: ${url}`);
181
- }
182
- const svgText = await response.text();
183
- // Basic security check - ensure it's valid SVG
184
- if (!svgText.includes('<svg')) {
185
- throw new Error(`Invalid SVG content: ${url}`);
86
+ // Silent fail
186
87
  }
187
- return svgText;
188
88
  }
189
89
  render() {
190
- const isDecorative = !this.label;
191
- return (h("span", { key: 'f3c397e6532cf9022416cf53458dd6d0b128a3ed', class: {
192
- 'ds-icon': true,
193
- 'ds-icon--loading': this.isLoading,
194
- 'ds-icon--error': this.hasError,
195
- }, style: {
196
- '--icon-size': `${this.size}px`,
197
- '--icon-color': this.color,
198
- }, role: isDecorative ? 'presentation' : 'img', "aria-hidden": isDecorative ? 'true' : undefined, "aria-label": this.label }, this.svgContent ? (h("span", { class: "ds-icon__svg", innerHTML: this.svgContent })) : this.hasError ? (h("span", { class: "ds-icon__error", title: `Icon "${this.name}" not found` }, h("svg", { viewBox: "0 0 24 24", fill: "currentColor" }, h("path", { d: "M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" })))) : null));
90
+ return (h("span", { key: 'f3549bfd71c52f0bf0b23c346fa5a665119c4033', class: "ds-icon", innerHTML: this.svgContent }));
199
91
  }
200
- get el() { return getElement(this); }
201
92
  static get watchers() { return {
202
93
  "name": [{
203
94
  "onNameChange": 0
204
- }],
205
- "basePath": [{
206
- "onBasePathChange": 0
207
95
  }]
208
96
  }; }
209
97
  };
@@ -253,10 +253,6 @@ var require_brace_expansion = __commonJS({
253
253
  }
254
254
  }
255
255
  });
256
-
257
- // src/utils/constants.ts
258
- var SVG_NS = "http://www.w3.org/2000/svg";
259
- var HTML_NS = "http://www.w3.org/1999/xhtml";
260
256
  var reWireGetterSetter = (instance, hostRef) => {
261
257
  var _a;
262
258
  const cmpMeta = hostRef.$cmpMeta$;
@@ -2124,9 +2120,6 @@ var parsePropertyValue = (propValue, propType, isFormAssociated) => {
2124
2120
  return propValue === "false" ? false : propValue === "" || !!propValue;
2125
2121
  }
2126
2122
  }
2127
- if (propType & 2 /* Number */) {
2128
- return typeof propValue === "string" ? parseFloat(propValue) : typeof propValue === "number" ? propValue : NaN;
2129
- }
2130
2123
  if (propType & 1 /* String */) {
2131
2124
  return String(propValue);
2132
2125
  }
@@ -2134,10 +2127,6 @@ var parsePropertyValue = (propValue, propType, isFormAssociated) => {
2134
2127
  }
2135
2128
  return propValue;
2136
2129
  };
2137
- var getElement = (ref) => {
2138
- var _a;
2139
- return (_a = getHostRef(ref)) == null ? void 0 : _a.$hostElement$ ;
2140
- };
2141
2130
  var emitEvent = (elm, name, opts) => {
2142
2131
  const ev = plt.ce(name, opts);
2143
2132
  elm.dispatchEvent(ev);
@@ -2157,30 +2146,9 @@ var setAccessor = (elm, memberName, oldValue, newValue, isSvg, flags, initialRen
2157
2146
  classList.remove(...oldClasses.filter((c) => c && !newClasses.includes(c)));
2158
2147
  classList.add(...newClasses.filter((c) => c && !oldClasses.includes(c)));
2159
2148
  }
2160
- } else if (memberName === "style") {
2161
- {
2162
- for (const prop in oldValue) {
2163
- if (!newValue || newValue[prop] == null) {
2164
- if (prop.includes("-")) {
2165
- elm.style.removeProperty(prop);
2166
- } else {
2167
- elm.style[prop] = "";
2168
- }
2169
- }
2170
- }
2171
- }
2172
- for (const prop in newValue) {
2173
- if (!oldValue || newValue[prop] !== oldValue[prop]) {
2174
- if (prop.includes("-")) {
2175
- elm.style.setProperty(prop, newValue[prop]);
2176
- } else {
2177
- elm.style[prop] = newValue[prop];
2178
- }
2179
- }
2180
- }
2181
2149
  } else if (memberName === "key") ; else {
2182
2150
  const isComplex = isComplexType(newValue);
2183
- if ((isProp || isComplex && newValue !== null) && !isSvg) {
2151
+ if ((isProp || isComplex && newValue !== null) && true) {
2184
2152
  try {
2185
2153
  if (!elm.tagName.includes("-")) {
2186
2154
  const n = newValue == null ? "" : newValue;
@@ -2272,21 +2240,14 @@ var createElm = (oldParentVNode, newParentVNode, childIndex) => {
2272
2240
  if (newVNode2.$text$ !== null) {
2273
2241
  elm = newVNode2.$elm$ = win.document.createTextNode(newVNode2.$text$);
2274
2242
  } else {
2275
- if (!isSvgMode) {
2276
- isSvgMode = newVNode2.$tag$ === "svg";
2277
- }
2278
2243
  if (!win.document) {
2279
2244
  throw new Error(
2280
2245
  "You are trying to render a Stencil component in an environment that doesn't support the DOM. Make sure to populate the [`window`](https://developer.mozilla.org/en-US/docs/Web/API/Window/window) object before rendering a component."
2281
2246
  );
2282
2247
  }
2283
- elm = newVNode2.$elm$ = win.document.createElementNS(
2284
- isSvgMode ? SVG_NS : HTML_NS,
2248
+ elm = newVNode2.$elm$ = win.document.createElement(
2285
2249
  newVNode2.$tag$
2286
- ) ;
2287
- if (isSvgMode && newVNode2.$tag$ === "foreignObject") {
2288
- isSvgMode = false;
2289
- }
2250
+ );
2290
2251
  {
2291
2252
  updateElement(null, newVNode2, isSvgMode);
2292
2253
  }
@@ -2299,13 +2260,6 @@ var createElm = (oldParentVNode, newParentVNode, childIndex) => {
2299
2260
  }
2300
2261
  }
2301
2262
  }
2302
- {
2303
- if (newVNode2.$tag$ === "svg") {
2304
- isSvgMode = false;
2305
- } else if (elm.tagName === "foreignObject") {
2306
- isSvgMode = true;
2307
- }
2308
- }
2309
2263
  }
2310
2264
  elm["s-hn"] = hostTagName;
2311
2265
  return elm;
@@ -2463,9 +2417,6 @@ var patch = (oldVNode, newVNode2, isInitialRender = false) => {
2463
2417
  const tag = newVNode2.$tag$;
2464
2418
  const text = newVNode2.$text$;
2465
2419
  if (text === null) {
2466
- {
2467
- isSvgMode = tag === "svg" ? true : tag === "foreignObject" ? false : isSvgMode;
2468
- }
2469
2420
  {
2470
2421
  if (tag === "slot" && !useNativeShadowDom) {
2471
2422
  if (oldVNode.$name$ !== newVNode2.$name$) {
@@ -2488,9 +2439,6 @@ var patch = (oldVNode, newVNode2, isInitialRender = false) => {
2488
2439
  ) {
2489
2440
  removeVnodes(oldChildren, 0, oldChildren.length - 1);
2490
2441
  } else ;
2491
- if (isSvgMode && tag === "svg") {
2492
- isSvgMode = false;
2493
- }
2494
2442
  } else if (oldVNode.$text$ !== text) {
2495
2443
  elm.data = text;
2496
2444
  }
@@ -3184,4 +3132,4 @@ function transformTag(tag) {
3184
3132
  return tag;
3185
3133
  }
3186
3134
 
3187
- export { getElement as a, bootstrapLazy as b, globalScripts as g, h, promiseResolve as p, registerInstance as r, setNonce as s };
3135
+ export { bootstrapLazy as b, globalScripts as g, h, promiseResolve as p, registerInstance as r, setNonce as s };
@@ -1,10 +1,10 @@
1
- import { g as globalScripts, b as bootstrapLazy } from './index-DUrpTa_b.js';
2
- export { s as setNonce } from './index-DUrpTa_b.js';
1
+ import { g as globalScripts, b as bootstrapLazy } from './index-B4AUg0uO.js';
2
+ export { s as setNonce } from './index-B4AUg0uO.js';
3
3
 
4
4
  const defineCustomElements = async (win, options) => {
5
5
  if (typeof window === 'undefined') return undefined;
6
6
  await globalScripts();
7
- return bootstrapLazy([["ds-button_3",[[257,"ds-button",{"variant":[1],"disabled":[4]}],[257,"ds-card",{"surface":[1],"cardTitle":[1,"card-title"]}],[1,"ds-icon",{"name":[1],"size":[2],"color":[1],"basePath":[1,"base-path"],"lazy":[4],"label":[1],"svgContent":[32],"isLoading":[32],"hasError":[32]},null,{"name":[{"onNameChange":0}],"basePath":[{"onBasePathChange":0}]}]]]], options);
7
+ return bootstrapLazy([["ds-button_3",[[257,"ds-button",{"variant":[1],"disabled":[4],"icon":[1],"iconPosition":[1,"icon-position"]}],[257,"ds-card",{"surface":[1],"cardTitle":[1,"card-title"]}],[1,"ds-icon",{"name":[1],"basePath":[1,"base-path"],"svgContent":[32]},null,{"name":[{"onNameChange":0}]}]]]], options);
8
8
  };
9
9
 
10
10
  export { defineCustomElements };
@@ -10,10 +10,19 @@ export { ButtonVariant } from "./ds-button/ds-button";
10
10
  export namespace Components {
11
11
  interface DsButton {
12
12
  /**
13
- * Disables the button interaction and applies disabled styling.
13
+ * Disables the button.
14
14
  * @default false
15
15
  */
16
16
  "disabled": boolean;
17
+ /**
18
+ * Icon name to display (optional).
19
+ */
20
+ "icon"?: string;
21
+ /**
22
+ * Icon position: 'start' or 'end'.
23
+ * @default 'start'
24
+ */
25
+ "iconPosition": 'start' | 'end';
17
26
  /**
18
27
  * Button variant determining visual style.
19
28
  * @default 'primary-brand'
@@ -33,34 +42,14 @@ export namespace Components {
33
42
  }
34
43
  interface DsIcon {
35
44
  /**
36
- * Base path for loading icon SVG files.
45
+ * Base path for icon SVG files.
37
46
  * @default '/icons'
38
47
  */
39
48
  "basePath": string;
40
49
  /**
41
- * Color of the icon. Accepts any valid CSS color value. Icons use currentColor by default, inheriting from parent.
42
- * @default 'currentColor'
43
- */
44
- "color": string;
45
- /**
46
- * Accessible label for screen readers. If provided, icon is treated as semantic (not decorative).
47
- */
48
- "label"?: string;
49
- /**
50
- * Enable lazy loading with IntersectionObserver. Icon will only load when visible in viewport.
51
- * @default false
52
- */
53
- "lazy": boolean;
54
- /**
55
- * Name of the icon to display (without .svg extension). Must match a file in the icons directory.
56
- * @example "add", "arrow-left", "close"
50
+ * Name of the icon (without .svg extension).
57
51
  */
58
52
  "name": string;
59
- /**
60
- * Size of the icon in pixels.
61
- * @default 24
62
- */
63
- "size": number;
64
53
  }
65
54
  }
66
55
  declare global {
@@ -91,10 +80,19 @@ declare global {
91
80
  declare namespace LocalJSX {
92
81
  interface DsButton {
93
82
  /**
94
- * Disables the button interaction and applies disabled styling.
83
+ * Disables the button.
95
84
  * @default false
96
85
  */
97
86
  "disabled"?: boolean;
87
+ /**
88
+ * Icon name to display (optional).
89
+ */
90
+ "icon"?: string;
91
+ /**
92
+ * Icon position: 'start' or 'end'.
93
+ * @default 'start'
94
+ */
95
+ "iconPosition"?: 'start' | 'end';
98
96
  /**
99
97
  * Button variant determining visual style.
100
98
  * @default 'primary-brand'
@@ -114,34 +112,14 @@ declare namespace LocalJSX {
114
112
  }
115
113
  interface DsIcon {
116
114
  /**
117
- * Base path for loading icon SVG files.
115
+ * Base path for icon SVG files.
118
116
  * @default '/icons'
119
117
  */
120
118
  "basePath"?: string;
121
119
  /**
122
- * Color of the icon. Accepts any valid CSS color value. Icons use currentColor by default, inheriting from parent.
123
- * @default 'currentColor'
124
- */
125
- "color"?: string;
126
- /**
127
- * Accessible label for screen readers. If provided, icon is treated as semantic (not decorative).
128
- */
129
- "label"?: string;
130
- /**
131
- * Enable lazy loading with IntersectionObserver. Icon will only load when visible in viewport.
132
- * @default false
133
- */
134
- "lazy"?: boolean;
135
- /**
136
- * Name of the icon to display (without .svg extension). Must match a file in the icons directory.
137
- * @example "add", "arrow-left", "close"
120
+ * Name of the icon (without .svg extension).
138
121
  */
139
122
  "name": string;
140
- /**
141
- * Size of the icon in pixels.
142
- * @default 24
143
- */
144
- "size"?: number;
145
123
  }
146
124
  interface IntrinsicElements {
147
125
  "ds-button": DsButton;
@@ -1,21 +1,20 @@
1
- /**
2
- * Button variants matching the design system specification.
3
- * - Primary variants: Filled background (brand, neutral, success)
4
- * - Secondary: Neutral filled background
5
- * - Tertiary variants: Outlined style (neutral, success)
6
- * - Ghost: Text only, no background/border
7
- */
8
1
  export type ButtonVariant = 'primary-brand' | 'primary-neutral' | 'primary-success' | 'secondary' | 'tertiary-neutral' | 'tertiary-success' | 'ghost';
9
2
  export declare class DsButton {
10
3
  /**
11
4
  * Button variant determining visual style.
12
- * @default 'primary-brand'
13
5
  */
14
6
  variant: ButtonVariant;
15
7
  /**
16
- * Disables the button interaction and applies disabled styling.
17
- * @default false
8
+ * Disables the button.
18
9
  */
19
10
  disabled: boolean;
11
+ /**
12
+ * Icon name to display (optional).
13
+ */
14
+ icon?: string;
15
+ /**
16
+ * Icon position: 'start' or 'end'.
17
+ */
18
+ iconPosition: 'start' | 'end';
20
19
  render(): any;
21
20
  }