@dsn-starter-kit/components-web 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +120 -0
  3. package/dist/button/Button.d.ts +50 -0
  4. package/dist/button/Button.d.ts.map +1 -0
  5. package/dist/button/Button.js +247 -0
  6. package/dist/button/Button.js.map +1 -0
  7. package/dist/button/Button.test.d.ts +2 -0
  8. package/dist/button/Button.test.d.ts.map +1 -0
  9. package/dist/button/Button.test.js +299 -0
  10. package/dist/button/Button.test.js.map +1 -0
  11. package/dist/button/button-styles.generated.d.ts +2 -0
  12. package/dist/button/button-styles.generated.d.ts.map +1 -0
  13. package/dist/button/button-styles.generated.js +4 -0
  14. package/dist/button/button-styles.generated.js.map +1 -0
  15. package/dist/button/index.d.ts +3 -0
  16. package/dist/button/index.d.ts.map +1 -0
  17. package/dist/button/index.js +2 -0
  18. package/dist/button/index.js.map +1 -0
  19. package/dist/heading/Heading.d.ts +30 -0
  20. package/dist/heading/Heading.d.ts.map +1 -0
  21. package/dist/heading/Heading.js +79 -0
  22. package/dist/heading/Heading.js.map +1 -0
  23. package/dist/heading/Heading.test.d.ts +2 -0
  24. package/dist/heading/Heading.test.d.ts.map +1 -0
  25. package/dist/heading/Heading.test.js +157 -0
  26. package/dist/heading/Heading.test.js.map +1 -0
  27. package/dist/heading/heading-styles.generated.d.ts +2 -0
  28. package/dist/heading/heading-styles.generated.d.ts.map +1 -0
  29. package/dist/heading/heading-styles.generated.js +4 -0
  30. package/dist/heading/heading-styles.generated.js.map +1 -0
  31. package/dist/heading/index.d.ts +3 -0
  32. package/dist/heading/index.d.ts.map +1 -0
  33. package/dist/heading/index.js +2 -0
  34. package/dist/heading/index.js.map +1 -0
  35. package/dist/icon/Icon.d.ts +31 -0
  36. package/dist/icon/Icon.d.ts.map +1 -0
  37. package/dist/icon/Icon.js +110 -0
  38. package/dist/icon/Icon.js.map +1 -0
  39. package/dist/icon/Icon.test.d.ts +2 -0
  40. package/dist/icon/Icon.test.d.ts.map +1 -0
  41. package/dist/icon/Icon.test.js +193 -0
  42. package/dist/icon/Icon.test.js.map +1 -0
  43. package/dist/icon/icon-paths.generated.d.ts +2 -0
  44. package/dist/icon/icon-paths.generated.d.ts.map +1 -0
  45. package/dist/icon/icon-paths.generated.js +56 -0
  46. package/dist/icon/icon-paths.generated.js.map +1 -0
  47. package/dist/icon/icon-styles.generated.d.ts +2 -0
  48. package/dist/icon/icon-styles.generated.d.ts.map +1 -0
  49. package/dist/icon/icon-styles.generated.js +4 -0
  50. package/dist/icon/icon-styles.generated.js.map +1 -0
  51. package/dist/icon/index.d.ts +3 -0
  52. package/dist/icon/index.d.ts.map +1 -0
  53. package/dist/icon/index.js +2 -0
  54. package/dist/icon/index.js.map +1 -0
  55. package/dist/index.d.ts +52 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +71 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/link/Link.d.ts +52 -0
  60. package/dist/link/Link.d.ts.map +1 -0
  61. package/dist/link/Link.js +260 -0
  62. package/dist/link/Link.js.map +1 -0
  63. package/dist/link/Link.test.d.ts +2 -0
  64. package/dist/link/Link.test.d.ts.map +1 -0
  65. package/dist/link/Link.test.js +256 -0
  66. package/dist/link/Link.test.js.map +1 -0
  67. package/dist/link/index.d.ts +3 -0
  68. package/dist/link/index.d.ts.map +1 -0
  69. package/dist/link/index.js +2 -0
  70. package/dist/link/index.js.map +1 -0
  71. package/dist/link/link-styles.generated.d.ts +2 -0
  72. package/dist/link/link-styles.generated.d.ts.map +1 -0
  73. package/dist/link/link-styles.generated.js +4 -0
  74. package/dist/link/link-styles.generated.js.map +1 -0
  75. package/dist/ordered-list/OrderedList.d.ts +32 -0
  76. package/dist/ordered-list/OrderedList.d.ts.map +1 -0
  77. package/dist/ordered-list/OrderedList.js +72 -0
  78. package/dist/ordered-list/OrderedList.js.map +1 -0
  79. package/dist/ordered-list/OrderedList.test.d.ts +2 -0
  80. package/dist/ordered-list/OrderedList.test.d.ts.map +1 -0
  81. package/dist/ordered-list/OrderedList.test.js +82 -0
  82. package/dist/ordered-list/OrderedList.test.js.map +1 -0
  83. package/dist/ordered-list/index.d.ts +2 -0
  84. package/dist/ordered-list/index.d.ts.map +1 -0
  85. package/dist/ordered-list/index.js +2 -0
  86. package/dist/ordered-list/index.js.map +1 -0
  87. package/dist/ordered-list/ordered-list-styles.generated.d.ts +2 -0
  88. package/dist/ordered-list/ordered-list-styles.generated.d.ts.map +1 -0
  89. package/dist/ordered-list/ordered-list-styles.generated.js +4 -0
  90. package/dist/ordered-list/ordered-list-styles.generated.js.map +1 -0
  91. package/dist/paragraph/Paragraph.d.ts +26 -0
  92. package/dist/paragraph/Paragraph.d.ts.map +1 -0
  93. package/dist/paragraph/Paragraph.js +60 -0
  94. package/dist/paragraph/Paragraph.js.map +1 -0
  95. package/dist/paragraph/Paragraph.test.d.ts +2 -0
  96. package/dist/paragraph/Paragraph.test.d.ts.map +1 -0
  97. package/dist/paragraph/Paragraph.test.js +121 -0
  98. package/dist/paragraph/Paragraph.test.js.map +1 -0
  99. package/dist/paragraph/index.d.ts +3 -0
  100. package/dist/paragraph/index.d.ts.map +1 -0
  101. package/dist/paragraph/index.js +2 -0
  102. package/dist/paragraph/index.js.map +1 -0
  103. package/dist/paragraph/paragraph-styles.generated.d.ts +2 -0
  104. package/dist/paragraph/paragraph-styles.generated.d.ts.map +1 -0
  105. package/dist/paragraph/paragraph-styles.generated.js +4 -0
  106. package/dist/paragraph/paragraph-styles.generated.js.map +1 -0
  107. package/dist/unordered-list/UnorderedList.d.ts +22 -0
  108. package/dist/unordered-list/UnorderedList.d.ts.map +1 -0
  109. package/dist/unordered-list/UnorderedList.js +42 -0
  110. package/dist/unordered-list/UnorderedList.js.map +1 -0
  111. package/dist/unordered-list/UnorderedList.test.d.ts +2 -0
  112. package/dist/unordered-list/UnorderedList.test.d.ts.map +1 -0
  113. package/dist/unordered-list/UnorderedList.test.js +56 -0
  114. package/dist/unordered-list/UnorderedList.test.js.map +1 -0
  115. package/dist/unordered-list/index.d.ts +2 -0
  116. package/dist/unordered-list/index.d.ts.map +1 -0
  117. package/dist/unordered-list/index.js +2 -0
  118. package/dist/unordered-list/index.js.map +1 -0
  119. package/dist/unordered-list/unordered-list-styles.generated.d.ts +2 -0
  120. package/dist/unordered-list/unordered-list-styles.generated.d.ts.map +1 -0
  121. package/dist/unordered-list/unordered-list-styles.generated.js +4 -0
  122. package/dist/unordered-list/unordered-list-styles.generated.js.map +1 -0
  123. package/package.json +42 -0
  124. package/src/button/Button.test.ts +360 -0
  125. package/src/button/Button.ts +299 -0
  126. package/src/button/button-demo.html +477 -0
  127. package/src/button/button-styles.generated.ts +3 -0
  128. package/src/button/button.shadow.css +20 -0
  129. package/src/button/index.ts +2 -0
  130. package/src/heading/Heading.test.ts +186 -0
  131. package/src/heading/Heading.ts +104 -0
  132. package/src/heading/heading-styles.generated.ts +3 -0
  133. package/src/heading/heading.shadow.css +11 -0
  134. package/src/heading/index.ts +2 -0
  135. package/src/icon/Icon.test.ts +228 -0
  136. package/src/icon/Icon.ts +136 -0
  137. package/src/icon/icon-paths.generated.ts +55 -0
  138. package/src/icon/icon-styles.generated.ts +3 -0
  139. package/src/icon/icon.shadow.css +13 -0
  140. package/src/icon/index.ts +2 -0
  141. package/src/index.ts +83 -0
  142. package/src/link/Link.test.ts +309 -0
  143. package/src/link/Link.ts +284 -0
  144. package/src/link/index.ts +2 -0
  145. package/src/link/link-styles.generated.ts +3 -0
  146. package/src/link/link.shadow.css +15 -0
  147. package/src/ordered-list/OrderedList.test.ts +97 -0
  148. package/src/ordered-list/OrderedList.ts +84 -0
  149. package/src/ordered-list/index.ts +1 -0
  150. package/src/ordered-list/ordered-list-styles.generated.ts +3 -0
  151. package/src/ordered-list/ordered-list.shadow.css +11 -0
  152. package/src/paragraph/Paragraph.test.ts +143 -0
  153. package/src/paragraph/Paragraph.ts +77 -0
  154. package/src/paragraph/index.ts +2 -0
  155. package/src/paragraph/paragraph-styles.generated.ts +3 -0
  156. package/src/paragraph/paragraph.shadow.css +11 -0
  157. package/src/unordered-list/UnorderedList.test.ts +66 -0
  158. package/src/unordered-list/UnorderedList.ts +50 -0
  159. package/src/unordered-list/index.ts +1 -0
  160. package/src/unordered-list/unordered-list-styles.generated.ts +3 -0
  161. package/src/unordered-list/unordered-list.shadow.css +11 -0
@@ -0,0 +1,256 @@
1
+ import { describe, it, expect, beforeAll, beforeEach, vi } from 'vitest';
2
+ import { DsnLink, defineLink } from './Link';
3
+ // Register the custom element once for all tests
4
+ beforeAll(() => {
5
+ defineLink();
6
+ });
7
+ function createElement(attrs = {}) {
8
+ const el = document.createElement('dsn-link');
9
+ for (const [key, value] of Object.entries(attrs)) {
10
+ el.setAttribute(key, value);
11
+ }
12
+ document.body.appendChild(el);
13
+ return el;
14
+ }
15
+ function getInternalAnchor(el) {
16
+ return el.shadowRoot.querySelector('a');
17
+ }
18
+ describe('DsnLink', () => {
19
+ beforeEach(() => {
20
+ document.body.innerHTML = '';
21
+ });
22
+ describe('rendering', () => {
23
+ it('creates a shadow root', () => {
24
+ const el = createElement();
25
+ expect(el.shadowRoot).not.toBeNull();
26
+ });
27
+ it('renders an internal anchor element', () => {
28
+ const el = createElement();
29
+ const anchor = getInternalAnchor(el);
30
+ expect(anchor).toBeInstanceOf(HTMLAnchorElement);
31
+ });
32
+ it('renders a style element in shadow DOM', () => {
33
+ const el = createElement();
34
+ const style = el.shadowRoot.querySelector('style');
35
+ expect(style).not.toBeNull();
36
+ expect(style.textContent).toContain('.dsn-link');
37
+ });
38
+ it('renders a default slot for content projection', () => {
39
+ const el = createElement();
40
+ const slot = el.shadowRoot.querySelector('slot:not([name])');
41
+ expect(slot).not.toBeNull();
42
+ });
43
+ it('renders an icon-start named slot', () => {
44
+ const el = createElement();
45
+ const slot = el.shadowRoot.querySelector('slot[name="icon-start"]');
46
+ expect(slot).not.toBeNull();
47
+ });
48
+ it('renders an icon-end named slot', () => {
49
+ const el = createElement();
50
+ const slot = el.shadowRoot.querySelector('slot[name="icon-end"]');
51
+ expect(slot).not.toBeNull();
52
+ });
53
+ it('renders slots in correct order: icon-start, default, icon-end', () => {
54
+ const el = createElement();
55
+ const anchor = getInternalAnchor(el);
56
+ const slots = anchor.querySelectorAll('slot');
57
+ expect(slots).toHaveLength(3);
58
+ expect(slots[0].getAttribute('name')).toBe('icon-start');
59
+ expect(slots[1].getAttribute('name')).toBeNull();
60
+ expect(slots[2].getAttribute('name')).toBe('icon-end');
61
+ });
62
+ it('applies dsn-link class to internal anchor', () => {
63
+ const el = createElement();
64
+ const anchor = getInternalAnchor(el);
65
+ expect(anchor.classList.contains('dsn-link')).toBe(true);
66
+ });
67
+ });
68
+ describe('href attribute', () => {
69
+ it('sets href on internal anchor', () => {
70
+ const el = createElement({ href: '/about' });
71
+ const anchor = getInternalAnchor(el);
72
+ expect(anchor.getAttribute('href')).toBe('/about');
73
+ });
74
+ it('defaults to no href', () => {
75
+ const el = createElement();
76
+ const anchor = getInternalAnchor(el);
77
+ expect(anchor.hasAttribute('href')).toBe(false);
78
+ });
79
+ it('updates internal anchor when href changes', () => {
80
+ const el = createElement({ href: '/about' });
81
+ const anchor = getInternalAnchor(el);
82
+ expect(anchor.getAttribute('href')).toBe('/about');
83
+ el.href = '/contact';
84
+ expect(anchor.getAttribute('href')).toBe('/contact');
85
+ });
86
+ it('removes href from internal anchor when set to null', () => {
87
+ const el = createElement({ href: '/about' });
88
+ const anchor = getInternalAnchor(el);
89
+ expect(anchor.getAttribute('href')).toBe('/about');
90
+ el.href = null;
91
+ expect(anchor.hasAttribute('href')).toBe(false);
92
+ });
93
+ });
94
+ describe('target attribute', () => {
95
+ it('sets target on internal anchor', () => {
96
+ const el = createElement({ href: '/about', target: '_blank' });
97
+ const anchor = getInternalAnchor(el);
98
+ expect(anchor.getAttribute('target')).toBe('_blank');
99
+ });
100
+ it('defaults to no target', () => {
101
+ const el = createElement();
102
+ const anchor = getInternalAnchor(el);
103
+ expect(anchor.hasAttribute('target')).toBe(false);
104
+ });
105
+ });
106
+ describe('rel attribute', () => {
107
+ it('sets rel on internal anchor', () => {
108
+ const el = createElement({ href: '/about', rel: 'noopener noreferrer' });
109
+ const anchor = getInternalAnchor(el);
110
+ expect(anchor.getAttribute('rel')).toBe('noopener noreferrer');
111
+ });
112
+ it('defaults to no rel', () => {
113
+ const el = createElement();
114
+ const anchor = getInternalAnchor(el);
115
+ expect(anchor.hasAttribute('rel')).toBe(false);
116
+ });
117
+ });
118
+ describe('disabled state', () => {
119
+ it('sets aria-disabled on internal anchor when disabled', () => {
120
+ const el = createElement({ href: '/about', disabled: '' });
121
+ const anchor = getInternalAnchor(el);
122
+ expect(anchor.getAttribute('aria-disabled')).toBe('true');
123
+ });
124
+ it('removes href from internal anchor when disabled', () => {
125
+ const el = createElement({ href: '/about', disabled: '' });
126
+ const anchor = getInternalAnchor(el);
127
+ expect(anchor.hasAttribute('href')).toBe(false);
128
+ });
129
+ it('sets tabindex to -1 when disabled', () => {
130
+ const el = createElement({ href: '/about', disabled: '' });
131
+ const anchor = getInternalAnchor(el);
132
+ expect(anchor.getAttribute('tabindex')).toBe('-1');
133
+ });
134
+ it('restores href when disabled is removed', () => {
135
+ const el = createElement({ href: '/about', disabled: '' });
136
+ const anchor = getInternalAnchor(el);
137
+ expect(anchor.hasAttribute('href')).toBe(false);
138
+ el.disabled = false;
139
+ expect(anchor.getAttribute('href')).toBe('/about');
140
+ });
141
+ it('removes aria-disabled when disabled is removed', () => {
142
+ const el = createElement({ href: '/about', disabled: '' });
143
+ const anchor = getInternalAnchor(el);
144
+ expect(anchor.getAttribute('aria-disabled')).toBe('true');
145
+ el.disabled = false;
146
+ expect(anchor.hasAttribute('aria-disabled')).toBe(false);
147
+ });
148
+ it('removes tabindex when disabled is removed', () => {
149
+ const el = createElement({ href: '/about', disabled: '' });
150
+ const anchor = getInternalAnchor(el);
151
+ expect(anchor.getAttribute('tabindex')).toBe('-1');
152
+ el.disabled = false;
153
+ expect(anchor.hasAttribute('tabindex')).toBe(false);
154
+ });
155
+ it('reflects disabled property to attribute', () => {
156
+ const el = createElement();
157
+ el.disabled = true;
158
+ expect(el.hasAttribute('disabled')).toBe(true);
159
+ el.disabled = false;
160
+ expect(el.hasAttribute('disabled')).toBe(false);
161
+ });
162
+ });
163
+ describe('current state', () => {
164
+ it('sets aria-current="page" on internal anchor when current', () => {
165
+ const el = createElement({ href: '/dashboard', current: '' });
166
+ const anchor = getInternalAnchor(el);
167
+ expect(anchor.getAttribute('aria-current')).toBe('page');
168
+ });
169
+ it('removes aria-current when current is removed', () => {
170
+ const el = createElement({ href: '/dashboard', current: '' });
171
+ const anchor = getInternalAnchor(el);
172
+ expect(anchor.getAttribute('aria-current')).toBe('page');
173
+ el.current = false;
174
+ expect(anchor.hasAttribute('aria-current')).toBe(false);
175
+ });
176
+ it('reflects current property to attribute', () => {
177
+ const el = createElement();
178
+ el.current = true;
179
+ expect(el.hasAttribute('current')).toBe(true);
180
+ el.current = false;
181
+ expect(el.hasAttribute('current')).toBe(false);
182
+ });
183
+ });
184
+ describe('size attribute', () => {
185
+ it('does not apply size class by default', () => {
186
+ const el = createElement();
187
+ const anchor = getInternalAnchor(el);
188
+ expect(anchor.className).toBe('dsn-link');
189
+ });
190
+ it('applies size class when size is set to small', () => {
191
+ const el = createElement({ size: 'small' });
192
+ const anchor = getInternalAnchor(el);
193
+ expect(anchor.classList.contains('dsn-link--size-small')).toBe(true);
194
+ });
195
+ it('applies size class when size is set to default', () => {
196
+ const el = createElement({ size: 'default' });
197
+ const anchor = getInternalAnchor(el);
198
+ expect(anchor.classList.contains('dsn-link--size-default')).toBe(true);
199
+ });
200
+ it('applies size class when size is set to large', () => {
201
+ const el = createElement({ size: 'large' });
202
+ const anchor = getInternalAnchor(el);
203
+ expect(anchor.classList.contains('dsn-link--size-large')).toBe(true);
204
+ });
205
+ it('updates class when size changes', () => {
206
+ const el = createElement({ size: 'small' });
207
+ const anchor = getInternalAnchor(el);
208
+ expect(anchor.classList.contains('dsn-link--size-small')).toBe(true);
209
+ el.size = 'large';
210
+ expect(anchor.classList.contains('dsn-link--size-large')).toBe(true);
211
+ expect(anchor.classList.contains('dsn-link--size-small')).toBe(false);
212
+ });
213
+ it('returns default from size property when no attribute set', () => {
214
+ const el = createElement();
215
+ expect(el.size).toBe('default');
216
+ });
217
+ it('reflects size property to attribute', () => {
218
+ const el = createElement();
219
+ el.size = 'large';
220
+ expect(el.getAttribute('size')).toBe('large');
221
+ });
222
+ });
223
+ describe('focus delegation', () => {
224
+ it('delegates focus to internal anchor', () => {
225
+ const el = createElement({ href: '/about' });
226
+ const anchor = getInternalAnchor(el);
227
+ const focusSpy = vi.spyOn(anchor, 'focus');
228
+ el.focus();
229
+ expect(focusSpy).toHaveBeenCalled();
230
+ });
231
+ it('delegates blur to internal anchor', () => {
232
+ const el = createElement({ href: '/about' });
233
+ const anchor = getInternalAnchor(el);
234
+ const blurSpy = vi.spyOn(anchor, 'blur');
235
+ el.blur();
236
+ expect(blurSpy).toHaveBeenCalled();
237
+ });
238
+ it('delegates click to internal anchor', () => {
239
+ const el = createElement({ href: '/about' });
240
+ const anchor = getInternalAnchor(el);
241
+ const clickSpy = vi.spyOn(anchor, 'click');
242
+ el.click();
243
+ expect(clickSpy).toHaveBeenCalled();
244
+ });
245
+ });
246
+ });
247
+ describe('defineLink', () => {
248
+ it('does not throw when called with an already-registered tag', () => {
249
+ expect(() => defineLink('dsn-link')).not.toThrow();
250
+ });
251
+ it('registers a custom element with the default tag name', () => {
252
+ const el = document.createElement('dsn-link');
253
+ expect(el).toBeInstanceOf(DsnLink);
254
+ });
255
+ });
256
+ //# sourceMappingURL=Link.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link.test.js","sourceRoot":"","sources":["../../src/link/Link.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { DsnLink, defineLink } from './Link';
2
+ export type { LinkSize } from './Link';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DsnLink, defineLink } from './Link';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/link/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const linkStyles = "/**\n * Shadow DOM wrapper styles for the Link Web Component.\n * The core link styles are imported from the shared HTML/CSS source.\n */\n\n:host {\n display: inline;\n}\n\n::slotted(*) {\n pointer-events: none;\n}\n\n/* Shared link styles - single source of truth */\n/**\n * Link Component\n * Uses component tokens for consistent styling\n */\n\n.dsn-link {\n /* Layout */\n display: inline-flex;\n align-self: flex-start;\n align-items: center;\n gap: var(--dsn-link-gap);\n position: relative; /* Ankerpunt voor DotBadge */\n\n /* Typography */\n color: var(--dsn-link-color);\n text-decoration-line: var(--dsn-link-text-decoration-line);\n text-decoration-color: var(--dsn-link-text-decoration-color);\n text-decoration-thickness: var(--dsn-link-text-decoration-thickness);\n text-underline-offset: var(--dsn-link-text-underline-offset);\n font: inherit;\n\n /* Interaction */\n cursor: pointer;\n transition:\n color var(--dsn-transition-duration-normal)\n var(--dsn-transition-easing-default),\n text-decoration-color var(--dsn-transition-duration-normal)\n var(--dsn-transition-easing-default);\n}\n\n/* Icon sizing */\n.dsn-link > .dsn-icon {\n width: var(--dsn-link-icon-size);\n height: var(--dsn-link-icon-size);\n flex-shrink: 0;\n}\n\n/* Size Variants */\n.dsn-link--size-small {\n font-size: var(--dsn-link-size-small-font-size);\n gap: var(--dsn-link-size-small-gap);\n}\n\n.dsn-link--size-default {\n font-size: var(--dsn-link-size-default-font-size);\n gap: var(--dsn-link-size-default-gap);\n}\n\n.dsn-link--size-large {\n font-size: var(--dsn-link-size-large-font-size);\n gap: var(--dsn-link-size-large-gap);\n}\n\n/* Icon sizing per link size */\n.dsn-link--size-small > .dsn-icon {\n width: var(--dsn-link-size-small-icon-size);\n height: var(--dsn-link-size-small-icon-size);\n}\n\n.dsn-link--size-default > .dsn-icon {\n width: var(--dsn-link-size-default-icon-size);\n height: var(--dsn-link-size-default-icon-size);\n}\n\n.dsn-link--size-large > .dsn-icon {\n width: var(--dsn-link-size-large-icon-size);\n height: var(--dsn-link-size-large-icon-size);\n}\n\n/* Hover */\n.dsn-link:hover:not([aria-disabled='true']) {\n color: var(--dsn-link-hover-color);\n text-decoration-line: var(--dsn-link-hover-text-decoration-line);\n}\n\n/* Active */\n.dsn-link:active:not([aria-disabled='true']) {\n color: var(--dsn-link-active-color);\n}\n\n/* Focus */\n.dsn-link:focus-visible {\n background-color: var(--dsn-focus-background-color);\n color: var(--dsn-focus-color);\n text-decoration: none;\n outline: var(--dsn-focus-outline-width) var(--dsn-focus-outline-style)\n var(--dsn-focus-outline-color);\n outline-offset: var(--dsn-focus-outline-offset);\n box-shadow: 0 0 0\n calc(var(--dsn-focus-outline-offset) + var(--dsn-focus-outline-width))\n var(--dsn-focus-inverse-outline-color);\n box-decoration-break: clone;\n}\n\n/* Current page */\n.dsn-link[aria-current='page'] {\n cursor: default;\n text-decoration-line: none;\n}\n\n/* Disabled */\n.dsn-link[aria-disabled='true'] {\n color: var(--dsn-link-disabled-color);\n text-decoration-line: none;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n";
2
+ //# sourceMappingURL=link-styles.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-styles.generated.d.ts","sourceRoot":"","sources":["../../src/link/link-styles.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,UAAU,woGAAwoG,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Auto-generated — do not edit manually.
2
+ // Source: link.shadow.css + components-html source
3
+ export const linkStyles = "/**\n * Shadow DOM wrapper styles for the Link Web Component.\n * The core link styles are imported from the shared HTML/CSS source.\n */\n\n:host {\n display: inline;\n}\n\n::slotted(*) {\n pointer-events: none;\n}\n\n/* Shared link styles - single source of truth */\n/**\n * Link Component\n * Uses component tokens for consistent styling\n */\n\n.dsn-link {\n /* Layout */\n display: inline-flex;\n align-self: flex-start;\n align-items: center;\n gap: var(--dsn-link-gap);\n position: relative; /* Ankerpunt voor DotBadge */\n\n /* Typography */\n color: var(--dsn-link-color);\n text-decoration-line: var(--dsn-link-text-decoration-line);\n text-decoration-color: var(--dsn-link-text-decoration-color);\n text-decoration-thickness: var(--dsn-link-text-decoration-thickness);\n text-underline-offset: var(--dsn-link-text-underline-offset);\n font: inherit;\n\n /* Interaction */\n cursor: pointer;\n transition:\n color var(--dsn-transition-duration-normal)\n var(--dsn-transition-easing-default),\n text-decoration-color var(--dsn-transition-duration-normal)\n var(--dsn-transition-easing-default);\n}\n\n/* Icon sizing */\n.dsn-link > .dsn-icon {\n width: var(--dsn-link-icon-size);\n height: var(--dsn-link-icon-size);\n flex-shrink: 0;\n}\n\n/* Size Variants */\n.dsn-link--size-small {\n font-size: var(--dsn-link-size-small-font-size);\n gap: var(--dsn-link-size-small-gap);\n}\n\n.dsn-link--size-default {\n font-size: var(--dsn-link-size-default-font-size);\n gap: var(--dsn-link-size-default-gap);\n}\n\n.dsn-link--size-large {\n font-size: var(--dsn-link-size-large-font-size);\n gap: var(--dsn-link-size-large-gap);\n}\n\n/* Icon sizing per link size */\n.dsn-link--size-small > .dsn-icon {\n width: var(--dsn-link-size-small-icon-size);\n height: var(--dsn-link-size-small-icon-size);\n}\n\n.dsn-link--size-default > .dsn-icon {\n width: var(--dsn-link-size-default-icon-size);\n height: var(--dsn-link-size-default-icon-size);\n}\n\n.dsn-link--size-large > .dsn-icon {\n width: var(--dsn-link-size-large-icon-size);\n height: var(--dsn-link-size-large-icon-size);\n}\n\n/* Hover */\n.dsn-link:hover:not([aria-disabled='true']) {\n color: var(--dsn-link-hover-color);\n text-decoration-line: var(--dsn-link-hover-text-decoration-line);\n}\n\n/* Active */\n.dsn-link:active:not([aria-disabled='true']) {\n color: var(--dsn-link-active-color);\n}\n\n/* Focus */\n.dsn-link:focus-visible {\n background-color: var(--dsn-focus-background-color);\n color: var(--dsn-focus-color);\n text-decoration: none;\n outline: var(--dsn-focus-outline-width) var(--dsn-focus-outline-style)\n var(--dsn-focus-outline-color);\n outline-offset: var(--dsn-focus-outline-offset);\n box-shadow: 0 0 0\n calc(var(--dsn-focus-outline-offset) + var(--dsn-focus-outline-width))\n var(--dsn-focus-inverse-outline-color);\n box-decoration-break: clone;\n}\n\n/* Current page */\n.dsn-link[aria-current='page'] {\n cursor: default;\n text-decoration-line: none;\n}\n\n/* Disabled */\n.dsn-link[aria-disabled='true'] {\n color: var(--dsn-link-disabled-color);\n text-decoration-line: none;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n";
4
+ //# sourceMappingURL=link-styles.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-styles.generated.js","sourceRoot":"","sources":["../../src/link/link-styles.generated.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,mDAAmD;AACnD,MAAM,CAAC,MAAM,UAAU,GAAG,qoGAAqoG,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * DSN Ordered List Web Component
3
+ *
4
+ * A custom element that provides a styled ordered list with numbered markers.
5
+ * Uses the same CSS classes and design tokens as the HTML and React components.
6
+ *
7
+ * @example
8
+ * ```html
9
+ * <dsn-ordered-list>
10
+ * <li>First step</li>
11
+ * <li>Second step</li>
12
+ * <li>Third step</li>
13
+ * </dsn-ordered-list>
14
+ *
15
+ * <dsn-ordered-list start="5">
16
+ * <li>Fifth step</li>
17
+ * <li>Sixth step</li>
18
+ * </dsn-ordered-list>
19
+ * ```
20
+ */
21
+ export declare class DsnOrderedList extends HTMLElement {
22
+ static get observedAttributes(): string[];
23
+ private _list;
24
+ constructor();
25
+ connectedCallback(): void;
26
+ attributeChangedCallback(name: string): void;
27
+ private _updateStart;
28
+ get start(): number;
29
+ set start(value: number);
30
+ }
31
+ export declare function defineOrderedList(tagName?: string): void;
32
+ //# sourceMappingURL=OrderedList.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderedList.d.ts","sourceRoot":"","sources":["../../src/ordered-list/OrderedList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,KAAK,CAAmB;;IAmBhC,iBAAiB,IAAI,IAAI;IAKzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM5C,OAAO,CAAC,YAAY;IAUpB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAEtB;CACF;AAGD,wBAAgB,iBAAiB,CAAC,OAAO,SAAqB,GAAG,IAAI,CAIpE"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * DSN Ordered List Web Component
3
+ *
4
+ * A custom element that provides a styled ordered list with numbered markers.
5
+ * Uses the same CSS classes and design tokens as the HTML and React components.
6
+ *
7
+ * @example
8
+ * ```html
9
+ * <dsn-ordered-list>
10
+ * <li>First step</li>
11
+ * <li>Second step</li>
12
+ * <li>Third step</li>
13
+ * </dsn-ordered-list>
14
+ *
15
+ * <dsn-ordered-list start="5">
16
+ * <li>Fifth step</li>
17
+ * <li>Sixth step</li>
18
+ * </dsn-ordered-list>
19
+ * ```
20
+ */
21
+ // Auto-generated CSS from shared source — run `node scripts/build-css.js` to regenerate
22
+ import { orderedListStyles } from './ordered-list-styles.generated';
23
+ export class DsnOrderedList extends HTMLElement {
24
+ static get observedAttributes() {
25
+ return ['start'];
26
+ }
27
+ constructor() {
28
+ super();
29
+ this.attachShadow({ mode: 'open' });
30
+ // Create the internal list element
31
+ this._list = document.createElement('ol');
32
+ this._list.classList.add('dsn-ordered-list');
33
+ this._list.innerHTML = '<slot></slot>';
34
+ // Create style element with embedded CSS
35
+ const style = document.createElement('style');
36
+ style.textContent = orderedListStyles;
37
+ this.shadowRoot.appendChild(style);
38
+ this.shadowRoot.appendChild(this._list);
39
+ }
40
+ connectedCallback() {
41
+ this._list.className = 'dsn-ordered-list';
42
+ this._updateStart();
43
+ }
44
+ attributeChangedCallback(name) {
45
+ if (name === 'start') {
46
+ this._updateStart();
47
+ }
48
+ }
49
+ _updateStart() {
50
+ const start = this.getAttribute('start');
51
+ if (start) {
52
+ this._list.setAttribute('start', start);
53
+ }
54
+ else {
55
+ this._list.removeAttribute('start');
56
+ }
57
+ }
58
+ // Property: start
59
+ get start() {
60
+ return parseInt(this.getAttribute('start') || '1', 10);
61
+ }
62
+ set start(value) {
63
+ this.setAttribute('start', String(value));
64
+ }
65
+ }
66
+ // Register the custom element
67
+ export function defineOrderedList(tagName = 'dsn-ordered-list') {
68
+ if (!customElements.get(tagName)) {
69
+ customElements.define(tagName, DsnOrderedList);
70
+ }
71
+ }
72
+ //# sourceMappingURL=OrderedList.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderedList.js","sourceRoot":"","sources":["../../src/ordered-list/OrderedList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,wFAAwF;AACxF,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,MAAM,OAAO,cAAe,SAAQ,WAAW;IAC7C,MAAM,KAAK,kBAAkB;QAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IAID;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAEpC,mCAAmC;QACnC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,eAAe,CAAC;QAEvC,yCAAyC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9C,KAAK,CAAC,WAAW,GAAG,iBAAiB,CAAC;QAEtC,IAAI,CAAC,UAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,CAAC,UAAW,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,kBAAkB,CAAC;QAC1C,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;IAED,wBAAwB,CAAC,IAAY;QACnC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,KAAK;QACP,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,KAAK,CAAC,KAAa;QACrB,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5C,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,UAAU,iBAAiB,CAAC,OAAO,GAAG,kBAAkB;IAC5D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,cAAc,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=OrderedList.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderedList.test.d.ts","sourceRoot":"","sources":["../../src/ordered-list/OrderedList.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import { describe, it, expect, beforeAll, beforeEach } from 'vitest';
2
+ import { DsnOrderedList, defineOrderedList } from './OrderedList';
3
+ // Register the custom element once for all tests
4
+ beforeAll(() => {
5
+ defineOrderedList();
6
+ });
7
+ function createElement(attrs = {}) {
8
+ const el = document.createElement('dsn-ordered-list');
9
+ for (const [key, value] of Object.entries(attrs)) {
10
+ el.setAttribute(key, value);
11
+ }
12
+ document.body.appendChild(el);
13
+ return el;
14
+ }
15
+ function getInternalList(el) {
16
+ return el.shadowRoot.querySelector('ol');
17
+ }
18
+ describe('DsnOrderedList', () => {
19
+ beforeEach(() => {
20
+ document.body.innerHTML = '';
21
+ });
22
+ describe('rendering', () => {
23
+ it('creates a shadow root', () => {
24
+ const el = createElement();
25
+ expect(el.shadowRoot).not.toBeNull();
26
+ });
27
+ it('renders an internal ol element', () => {
28
+ const el = createElement();
29
+ const list = getInternalList(el);
30
+ expect(list).toBeInstanceOf(HTMLOListElement);
31
+ });
32
+ it('renders a style element in shadow DOM', () => {
33
+ const el = createElement();
34
+ const style = el.shadowRoot.querySelector('style');
35
+ expect(style).not.toBeNull();
36
+ expect(style.textContent).toContain('.dsn-ordered-list');
37
+ });
38
+ it('renders a default slot for content projection', () => {
39
+ const el = createElement();
40
+ const slot = el.shadowRoot.querySelector('slot');
41
+ expect(slot).not.toBeNull();
42
+ });
43
+ it('applies dsn-ordered-list class to internal list', () => {
44
+ const el = createElement();
45
+ const list = getInternalList(el);
46
+ expect(list.classList.contains('dsn-ordered-list')).toBe(true);
47
+ });
48
+ });
49
+ describe('start attribute', () => {
50
+ it('sets start on internal ol', () => {
51
+ const el = createElement({ start: '5' });
52
+ const list = getInternalList(el);
53
+ expect(list.getAttribute('start')).toBe('5');
54
+ });
55
+ it('defaults to no start attribute', () => {
56
+ const el = createElement();
57
+ const list = getInternalList(el);
58
+ expect(list.hasAttribute('start')).toBe(false);
59
+ });
60
+ it('updates internal ol when start changes', () => {
61
+ const el = createElement({ start: '3' });
62
+ const list = getInternalList(el);
63
+ expect(list.getAttribute('start')).toBe('3');
64
+ el.start = 10;
65
+ expect(list.getAttribute('start')).toBe('10');
66
+ });
67
+ it('returns 1 from start property when no attribute set', () => {
68
+ const el = createElement();
69
+ expect(el.start).toBe(1);
70
+ });
71
+ });
72
+ });
73
+ describe('defineOrderedList', () => {
74
+ it('does not throw when called with an already-registered tag', () => {
75
+ expect(() => defineOrderedList('dsn-ordered-list')).not.toThrow();
76
+ });
77
+ it('registers a custom element with the default tag name', () => {
78
+ const el = document.createElement('dsn-ordered-list');
79
+ expect(el).toBeInstanceOf(DsnOrderedList);
80
+ });
81
+ });
82
+ //# sourceMappingURL=OrderedList.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OrderedList.test.js","sourceRoot":"","sources":["../../src/ordered-list/OrderedList.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { DsnOrderedList, defineOrderedList } from './OrderedList';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ordered-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { DsnOrderedList, defineOrderedList } from './OrderedList';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ordered-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const orderedListStyles = "/**\n * Shadow DOM wrapper styles for the OrderedList Web Component.\n * The core styles are imported from the shared HTML/CSS source.\n */\n\n:host {\n display: block;\n}\n\n/* Shared ordered list styles - single source of truth */\n/**\n * Ordered List Component\n * Uses component tokens for consistent styling.\n */\n\n.dsn-ordered-list {\n font-family: var(--dsn-ordered-list-font-family);\n font-weight: var(--dsn-ordered-list-font-weight);\n color: var(--dsn-ordered-list-color);\n font-size: var(--dsn-ordered-list-font-size);\n line-height: var(--dsn-ordered-list-line-height);\n max-inline-size: var(--dsn-ordered-list-max-inline-size);\n padding-inline-start: var(--dsn-ordered-list-padding-inline-start);\n margin-block-start: 0;\n margin-block-end: var(--dsn-ordered-list-margin-block-end);\n list-style-type: decimal;\n}\n\n/* Number markers */\n.dsn-ordered-list ::marker {\n color: var(--dsn-ordered-list-marker-color);\n}\n\n/* Spacing between list items */\n.dsn-ordered-list > li {\n margin-block-end: var(--dsn-ordered-list-gap);\n}\n\n.dsn-ordered-list > li:last-child {\n margin-block-end: 0;\n}\n\n";
2
+ //# sourceMappingURL=ordered-list-styles.generated.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordered-list-styles.generated.d.ts","sourceRoot":"","sources":["../../src/ordered-list/ordered-list-styles.generated.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,onCAAonC,CAAC"}
@@ -0,0 +1,4 @@
1
+ // Auto-generated — do not edit manually.
2
+ // Source: ordered-list.shadow.css + components-html source
3
+ export const orderedListStyles = "/**\n * Shadow DOM wrapper styles for the OrderedList Web Component.\n * The core styles are imported from the shared HTML/CSS source.\n */\n\n:host {\n display: block;\n}\n\n/* Shared ordered list styles - single source of truth */\n/**\n * Ordered List Component\n * Uses component tokens for consistent styling.\n */\n\n.dsn-ordered-list {\n font-family: var(--dsn-ordered-list-font-family);\n font-weight: var(--dsn-ordered-list-font-weight);\n color: var(--dsn-ordered-list-color);\n font-size: var(--dsn-ordered-list-font-size);\n line-height: var(--dsn-ordered-list-line-height);\n max-inline-size: var(--dsn-ordered-list-max-inline-size);\n padding-inline-start: var(--dsn-ordered-list-padding-inline-start);\n margin-block-start: 0;\n margin-block-end: var(--dsn-ordered-list-margin-block-end);\n list-style-type: decimal;\n}\n\n/* Number markers */\n.dsn-ordered-list ::marker {\n color: var(--dsn-ordered-list-marker-color);\n}\n\n/* Spacing between list items */\n.dsn-ordered-list > li {\n margin-block-end: var(--dsn-ordered-list-gap);\n}\n\n.dsn-ordered-list > li:last-child {\n margin-block-end: 0;\n}\n\n";
4
+ //# sourceMappingURL=ordered-list-styles.generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ordered-list-styles.generated.js","sourceRoot":"","sources":["../../src/ordered-list/ordered-list-styles.generated.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,inCAAinC,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * DSN Paragraph Web Component
3
+ *
4
+ * A custom element that provides a styled paragraph with multiple variants.
5
+ * Uses the same CSS classes and design tokens as the HTML and React paragraph components.
6
+ *
7
+ * @example
8
+ * ```html
9
+ * <dsn-paragraph>Default body text</dsn-paragraph>
10
+ * <dsn-paragraph variant="lead">Introductory text</dsn-paragraph>
11
+ * <dsn-paragraph variant="small-print">Terms and conditions apply.</dsn-paragraph>
12
+ * ```
13
+ */
14
+ export type ParagraphVariant = 'default' | 'lead' | 'small-print';
15
+ export declare class DsnParagraph extends HTMLElement {
16
+ static get observedAttributes(): string[];
17
+ private _paragraph;
18
+ constructor();
19
+ connectedCallback(): void;
20
+ attributeChangedCallback(): void;
21
+ private _updateClasses;
22
+ get variant(): ParagraphVariant;
23
+ set variant(value: ParagraphVariant);
24
+ }
25
+ export declare function defineParagraph(tagName?: string): void;
26
+ //# sourceMappingURL=Paragraph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paragraph.d.ts","sourceRoot":"","sources":["../../src/paragraph/Paragraph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,CAAC;AAKlE,qBAAa,YAAa,SAAQ,WAAW;IAC3C,MAAM,KAAK,kBAAkB,IAAI,MAAM,EAAE,CAExC;IAED,OAAO,CAAC,UAAU,CAAuB;;IAkBzC,iBAAiB,IAAI,IAAI;IAIzB,wBAAwB,IAAI,IAAI;IAIhC,OAAO,CAAC,cAAc;IAYtB,IAAI,OAAO,IAAI,gBAAgB,CAE9B;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,gBAAgB,EAElC;CACF;AAGD,wBAAgB,eAAe,CAAC,OAAO,SAAkB,GAAG,IAAI,CAI/D"}