@bonniernews/dn-design-system-web 21.1.0-beta.5 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +13 -51
  2. package/assets/teaser/teaser.scss +0 -1
  3. package/components/divider/divider.tsx +6 -6
  4. package/components/group-header/group-header.scss +1 -1
  5. package/components/quote/quote.tsx +7 -3
  6. package/components/teaser-card/teaser-card.tsx +36 -0
  7. package/components/teaser-image/teaser-image.scss +1 -1
  8. package/components/teaser-large/teaser-large.njk +1 -7
  9. package/components/teaser-large/teaser-large.scss +0 -20
  10. package/components/teaser-native/teaser-native.scss +6 -0
  11. package/components/teaser-onsite/teaser-onsite.tsx +32 -0
  12. package/components/teaser-package/teaser-package.scss +6 -17
  13. package/components/teaser-split/teaser-split.scss +0 -2
  14. package/components/teaser-standard/teaser-standard.scss +6 -5
  15. package/components/thematic-break/thematic-break.tsx +5 -4
  16. package/foundations/helpers/colors.scss +6 -1
  17. package/foundations/variables/colorsCssVariables.scss +0 -4
  18. package/foundations/variables/colorsDnDarkTokens.scss +60 -64
  19. package/foundations/variables/colorsDnLightTokens.scss +51 -55
  20. package/foundations/variables/metrics.scss +1 -2
  21. package/foundations/variables/typographyFontWeight.scss +0 -1
  22. package/foundations/variables/typographyTokensList.scss +0 -1
  23. package/foundations/variables/typographyTokensScreenExtraLarge.scss +4 -11
  24. package/foundations/variables/typographyTokensScreenLarge.scss +3 -10
  25. package/foundations/variables/typographyTokensScreenSmall.scss +6 -13
  26. package/helpers/formatClassString.ts +3 -0
  27. package/helpers/teaser.tsx +30 -0
  28. package/package.json +2 -1
  29. package/preact/components/quote/quote.d.ts +1 -0
  30. package/preact/components/teaser-card/teaser-card.d.ts +10 -0
  31. package/preact/components/teaser-onsite/teaser-onsite.d.ts +12 -0
  32. package/preact/components.cjs +14 -12
  33. package/preact/components.cjs.map +3 -3
  34. package/preact/components.esm.js +14 -12
  35. package/preact/components.esm.js.map +3 -3
  36. package/react/components/quote/quote.d.ts +1 -0
  37. package/react/components/teaser-card/teaser-card.d.ts +10 -0
  38. package/react/components/teaser-onsite/teaser-onsite.d.ts +12 -0
  39. package/react/components.cjs +14 -12
  40. package/react/components.cjs.map +3 -3
  41. package/react/components.esm.js +14 -12
  42. package/react/components.esm.js.map +3 -3
  43. package/tokens/colors-css-variables.json +1 -5
  44. package/tokens/colors-dark-mode.json +60 -64
  45. package/tokens/colors-light-mode.json +53 -57
  46. package/tokens/typography-list.json +0 -1
  47. package/tokens-tmp/colors-css-variables.json +3 -0
  48. package/components/teaser-breaking/README-UXD.md +0 -0
  49. package/components/teaser-breaking/README.md +0 -46
  50. package/components/teaser-breaking/teaser-breaking.njk +0 -46
  51. package/components/teaser-breaking/teaser-breaking.scss +0 -52
@@ -1,86 +1,82 @@
1
1
  $ds-hex-text-primary: #050505;
2
2
  $ds-hex-text-primary-02: #666666;
3
3
  $ds-hex-text-secondary: #ffffff;
4
- $ds-hex-text-critical: #da000d;
4
+ $ds-hex-text-critical: #DA000D;
5
5
  $ds-hex-text-disabled: #666666;
6
6
  $ds-hex-text-on-brand: #ffffff;
7
7
  $ds-hex-text-on-business: #ffffff;
8
8
  $ds-hex-text-on-critical: #ffffff;
9
9
  $ds-hex-text-on-success: #ffffff;
10
- $ds-hex-text-brand: #da000d;
11
- $ds-hex-text-body-link: #4373ce;
12
- $ds-hex-text-body-link-visited: #4373ce;
13
- $ds-hex-text-positive: #3a8352;
14
- $ds-hex-text-culture: #227ac3;
10
+ $ds-hex-text-brand: #DA000D;
11
+ $ds-hex-text-body-link: #4373CE;
12
+ $ds-hex-text-body-link-visited: #4373CE;
13
+ $ds-hex-text-positive: #3A8352;
15
14
  $ds-hex-icon-primary: #050505;
16
15
  $ds-hex-icon-primary-02: #666666;
17
16
  $ds-hex-icon-secondary: #ffffff;
18
- $ds-hex-icon-critical: #da000d;
17
+ $ds-hex-icon-critical: #DA000D;
19
18
  $ds-hex-icon-disabled: #666666;
20
19
  $ds-hex-icon-on-brand: #ffffff;
21
20
  $ds-hex-icon-on-business: #ffffff;
22
- $ds-hex-icon-brand: #da000d;
21
+ $ds-hex-icon-brand: #DA000D;
23
22
  $ds-hex-icon-on-critical: #ffffff;
24
23
  $ds-hex-icon-on-success: #ffffff;
25
- $ds-hex-icon-culture: #227ac3;
26
- $ds-hex-component-brand: #da000d;
27
- $ds-hex-component-business: #3a8352;
24
+ $ds-hex-component-brand: #DA000D;
25
+ $ds-hex-component-business: #3A8352;
28
26
  $ds-hex-component-primary: #141414;
29
- $ds-hex-component-primary-overlay: rgba(8, 8, 8, 0.13);
30
- $ds-hex-component-primary-overlay-02: rgba(8, 8, 8, 0.2);
27
+ $ds-hex-component-primary-overlay: #08080821;
28
+ $ds-hex-component-primary-overlay-02: #08080833;
31
29
  $ds-hex-component-secondary: #ffffff;
32
- $ds-hex-component-secondary-overlay: rgba(255, 255, 255, 0.13);
33
- $ds-hex-component-secondary-overlay-02: rgba(255, 255, 255, 0.2);
34
- $ds-hex-component-critical: #ea3e3f;
35
- $ds-hex-component-critical-overlay: #a51d24;
30
+ $ds-hex-component-secondary-overlay: #ffffff21;
31
+ $ds-hex-component-secondary-overlay-02: #ffffff33;
32
+ $ds-hex-component-critical: #EA3E3F;
33
+ $ds-hex-component-critical-overlay: #A51D24;
36
34
  $ds-hex-component-static-white: #ffffff;
37
- $ds-hex-component-positive: #3a8352;
38
- $ds-hex-component-primary-02: #cfcfcf;
39
- $ds-hex-surface-below: #f2f2f2;
40
- $ds-hex-surface-native-article: #ededed;
35
+ $ds-hex-component-positive: #3A8352;
36
+ $ds-hex-component-primary-02: #CFCFCF;
37
+ $ds-hex-surface-below: #EDEDED;
38
+ $ds-hex-surface-native-article: #EDEDED;
41
39
  $ds-hex-surface-background: #ffffff;
42
- $ds-hex-surface-raised: #ededed;
40
+ $ds-hex-surface-raised: #EDEDED;
43
41
  $ds-hex-surface-elevated: #ffffff;
44
- $ds-hex-surface-overlay: rgba(5, 5, 5, 0.5);
45
- $ds-hex-surface-quiz: #ea3e3f;
46
- $ds-hex-surface-korsord: #8bb6e8;
47
- $ds-hex-surface-sudoko: #90d0bd;
48
- $ds-hex-surface-brand: #da000d;
42
+ $ds-hex-surface-overlay: #05050580;
43
+ $ds-hex-surface-quiz: #EA3E3F;
44
+ $ds-hex-surface-korsord: #8BB6E8;
45
+ $ds-hex-surface-sudoko: #90D0BD;
46
+ $ds-hex-surface-brand: #DA000D;
49
47
  $ds-hex-surface-inverted: #141414;
50
- $ds-hex-surface-breaking: #300407;
51
- $ds-hex-border-primary: rgba(5, 5, 5, 0.13);
52
- $ds-hex-border-primary-02: rgba(8, 8, 8, 0.4);
48
+ $ds-hex-border-primary: #08080821;
49
+ $ds-hex-border-primary-02: #08080866;
53
50
  $ds-hex-border-primary-03: #050505;
54
51
  $ds-hex-border-secondary: #ffffff;
55
- $ds-hex-border-business: #3a8352;
56
- $ds-hex-border-critical: #da000d;
57
- $ds-hex-border-focus: #da000d;
52
+ $ds-hex-border-business: #3A8352;
53
+ $ds-hex-border-critical: #DA000D;
54
+ $ds-hex-border-focus: #DA000D;
58
55
  $ds-hex-border-focus-02: #141414;
59
- $ds-hex-border-focus-03: #da000d;
60
- $ds-hex-border-focus-04: #3a8352;
61
- $ds-hex-border-brand: #da000d;
62
- $ds-hex-border-culture: #227ac3;
56
+ $ds-hex-border-focus-03: #DA000D;
57
+ $ds-hex-border-focus-04: #3A8352;
58
+ $ds-hex-border-brand: #DA000D;
63
59
  $ds-hex-background-primary: #ffffff;
64
- $ds-hex-static-red-100: #fad4d4;
60
+ $ds-hex-static-red-100: #FAD4D4;
65
61
  $ds-hex-static-black: #141414;
66
- $ds-hex-static-transparent-black: rgba(20, 20, 20, 0.6);
62
+ $ds-hex-static-transparent-black: #14141499;
67
63
  $ds-hex-static-white: #ffffff;
68
- $ds-hex-static-transparent-white: rgba(255, 255, 255, 0.5);
69
- $ds-hex-static-green-100: #cee4d6;
70
- $ds-hex-static-red-300: #ef7171;
71
- $ds-hex-static-transparent-white-10: rgba(255, 255, 255, 0.13);
72
- $ds-hex-static-kultur: #568cbb;
73
- $ds-hex-static-economy: #60bca1;
74
- $ds-hex-static-sport: #f58d2d;
75
- $ds-hex-static-neutral-200: #e0e0e0;
76
- $ds-hex-static-sthlm: #ff589b;
77
- $ds-hex-static-ad-yellow: #ffeac2;
78
- $ds-hex-static-neutral-100: #ededed;
79
- $ds-hex-static-neutral-500: #9e9e9e;
80
- $ds-hex-static-red-500: #da000d;
81
- $ds-hex-static-yellow: #ffe600;
82
- $ds-hex-static-red-200: #f6acad;
83
- $ds-hex-static-red-0: #fce8e8;
64
+ $ds-hex-static-transparent-white: #ffffff80;
65
+ $ds-hex-static-green-100: #CEE4D6;
66
+ $ds-hex-static-red-300: #EF7171;
67
+ $ds-hex-static-transparent-white-10: #ffffff21;
68
+ $ds-hex-static-kultur: #568CBB;
69
+ $ds-hex-static-economy: #60BCA1;
70
+ $ds-hex-static-sport: #F58D2D;
71
+ $ds-hex-static-neutral-200: #E0E0E0;
72
+ $ds-hex-static-sthlm: #FF589B;
73
+ $ds-hex-static-ad-yellow: #FFEAC2;
74
+ $ds-hex-static-neutral-100: #EDEDED;
75
+ $ds-hex-static-neutral-500: #9E9E9E;
76
+ $ds-hex-static-red-500: #DA000D;
77
+ $ds-hex-static-yellow: #FFE600;
78
+ $ds-hex-static-red-200: #F6ACAD;
79
+ $ds-hex-static-red-0: #FCE8E8;
84
80
  $ds-hex-gradient-content-fade-left: linear-gradient(90deg, #ffffff00 0%, #ffffff 100%);
85
81
  $ds-hex-gradient-content-fade-right: linear-gradient(-90deg, #ffffff00 0%, #ffffff 100%);
86
82
  $ds-hex-gradient-content-fade-up: linear-gradient(180deg, #ffffff00 0%, #ffffff 100%);
@@ -1,8 +1,7 @@
1
1
  $metrics: (
2
2
  border-radius: (
3
3
  x1: 2,
4
- x2: 4,
5
- lg: 8
4
+ x2: 4
6
5
  ),
7
6
  border-width: (
8
7
  x1: 1,
@@ -2,4 +2,3 @@ $ds-fontweight-regular: Regular;
2
2
  $ds-fontweight-medium: Medium;
3
3
  $ds-fontweight-semibold: SemiBold;
4
4
  $ds-fontweight-bold: Bold;
5
- $ds-fontweight-extrabold: ExtraBold;
@@ -15,7 +15,6 @@ $ds-typography-detaildirekt-header: 'detaildirekt-header';
15
15
  $ds-typography-detailteaser-standard-compact: 'detailteaser-standard-compact';
16
16
  $ds-typography-detailteaser-standard-compact-opinion: 'detailteaser-standard-compact-opinion';
17
17
  $ds-typography-detailteaser-large: 'detailteaser-large';
18
- $ds-typography-detailteaser-breaking: 'detailteaser-breaking';
19
18
  $ds-typography-detailteaser-large-opinion: 'detailteaser-large-opinion';
20
19
  $ds-typography-detailteaser-large-storRubrik: 'detailteaser-large-storRubrik';
21
20
  $ds-typography-detailteaser-standard: 'detailteaser-standard';
@@ -54,22 +54,15 @@ $typographyTokensScreenExtraLarge: (
54
54
  fontFamily: "DN Serif Display",
55
55
  fontWeight: Bold,
56
56
  lineHeight: 1.1,
57
- fontSize: 48,
58
- letterSpacing: 0
59
- ),
60
- detailteaser-breaking: (
61
- fontFamily: "DN Serif Display",
62
- fontWeight: ExtraBold,
63
- lineHeight: 1.1,
64
- fontSize: 64,
57
+ fontSize: 56,
65
58
  letterSpacing: 0
66
59
  ),
67
60
  detailteaser-standard: (
68
61
  fontFamily: "DN Serif Headline",
62
+ fontSize: 36,
69
63
  lineHeight: 1.1,
70
64
  letterSpacing: 0,
71
- fontWeight: Bold,
72
- fontSize: 28
65
+ fontWeight: Bold
73
66
  ),
74
67
  detailteaser-standard-compact: (
75
68
  fontFamily: "DN Serif Headline",
@@ -81,7 +74,7 @@ $typographyTokensScreenExtraLarge: (
81
74
  detailteaser-large-compact: (
82
75
  fontFamily: "DN Serif Display",
83
76
  fontWeight: Bold,
84
- fontSize: 36,
77
+ fontSize: 40,
85
78
  lineHeight: 1.1,
86
79
  letterSpacing: 0
87
80
  ),
@@ -93,13 +93,6 @@ $typographyTokensScreenLarge: (
93
93
  fontSize: 40,
94
94
  letterSpacing: 0
95
95
  ),
96
- detailteaser-breaking: (
97
- fontFamily: "DN Serif Display",
98
- fontWeight: ExtraBold,
99
- lineHeight: 1.1,
100
- fontSize: 64,
101
- letterSpacing: 0
102
- ),
103
96
  detailteaser-large-opinion: (
104
97
  fontFamily: "DN Serif Display",
105
98
  fontWeight: Regular,
@@ -117,10 +110,10 @@ $typographyTokensScreenLarge: (
117
110
  ),
118
111
  detailteaser-standard: (
119
112
  fontFamily: "DN Serif Headline",
113
+ fontSize: 26,
120
114
  lineHeight: 1.1,
121
115
  letterSpacing: 0,
122
- fontWeight: Bold,
123
- fontSize: 28
116
+ fontWeight: Bold
124
117
  ),
125
118
  detailteaser-standard-opinion: (
126
119
  fontFamily: "DN Serif Headline",
@@ -140,7 +133,7 @@ $typographyTokensScreenLarge: (
140
133
  detailteaser-large-compact: (
141
134
  fontFamily: "DN Serif Display",
142
135
  fontWeight: Bold,
143
- fontSize: 32,
136
+ fontSize: 40,
144
137
  lineHeight: 1.1,
145
138
  letterSpacing: 0
146
139
  ),
@@ -122,13 +122,6 @@ $typographyTokensScreenSmall: (
122
122
  fontSize: 26,
123
123
  letterSpacing: 0
124
124
  ),
125
- detailteaser-breaking: (
126
- fontFamily: "DN Serif Display",
127
- fontWeight: ExtraBold,
128
- lineHeight: 1.1,
129
- fontSize: 36,
130
- letterSpacing: 0
131
- ),
132
125
  detailteaser-large-opinion: (
133
126
  fontFamily: "DN Serif Headline",
134
127
  fontWeight: Regular,
@@ -146,10 +139,10 @@ $typographyTokensScreenSmall: (
146
139
  ),
147
140
  detailteaser-standard: (
148
141
  fontFamily: "DN Serif Headline",
142
+ fontSize: 20,
149
143
  lineHeight: 1.2,
150
144
  letterSpacing: 0,
151
- fontWeight: Bold,
152
- fontSize: 20
145
+ fontWeight: Bold
153
146
  ),
154
147
  detailteaser-standard-opinion: (
155
148
  fontFamily: "DN Serif Headline",
@@ -163,14 +156,14 @@ $typographyTokensScreenSmall: (
163
156
  fontFamily: "DN Serif Text",
164
157
  fontWeight: Bold,
165
158
  lineHeight: 1.2,
166
- fontSize: 18,
159
+ fontSize: 17,
167
160
  letterSpacing: 0
168
161
  ),
169
162
  detailteaser-large-compact: (
170
163
  fontFamily: "DN Serif Headline",
171
164
  fontWeight: Bold,
172
- fontSize: 20,
173
- lineHeight: 1.2,
165
+ fontSize: 26,
166
+ lineHeight: 1.1,
174
167
  letterSpacing: 0
175
168
  ),
176
169
  detailteaser-large-compact-opinion: (
@@ -212,7 +205,7 @@ $typographyTokensScreenSmall: (
212
205
  detailteaser-tipsa: (
213
206
  fontFamily: "DN Serif Text",
214
207
  fontWeight: Bold,
215
- fontSize: 18,
208
+ fontSize: 17,
216
209
  lineHeight: 1.2,
217
210
  letterSpacing: 0
218
211
  ),
@@ -0,0 +1,3 @@
1
+ export const formatClassString = (classesArray: (string|undefined|false)[]): string => {
2
+ return classesArray.filter(x => !!x).join(' ');
3
+ }
@@ -0,0 +1,30 @@
1
+ interface MediaProps {
2
+ mediaHtml?: string;
3
+ }
4
+
5
+ export const Media = ({ mediaHtml }: MediaProps) => {
6
+ return mediaHtml && (<div className="ds-teaser__media" dangerouslySetInnerHTML={{ __html: mediaHtml }} />)
7
+ }
8
+
9
+ interface ContentProps {
10
+ children: any;
11
+ }
12
+ export const Content = ({ children }: ContentProps) => {
13
+ return (<div className="ds-teaser__content">
14
+ {children}
15
+ </div>)
16
+ }
17
+
18
+ interface TitleProps {
19
+ title?: string;
20
+ }
21
+ export const Title = ({ title }: TitleProps) => {
22
+ return title && (<h2 className="ds-teaser__title">{title}</h2>)
23
+ }
24
+
25
+ interface BodyProps {
26
+ text?: string;
27
+ }
28
+ export const Body = ({ text }: BodyProps) => {
29
+ return text && (<p className="ds-teaser__text">{text}</p>)
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonniernews/dn-design-system-web",
3
- "version": "21.1.0-beta.5",
3
+ "version": "21.1.0",
4
4
  "description": "DN design system for web.",
5
5
  "main": "index.tsx",
6
6
  "type": "module",
@@ -30,6 +30,7 @@
30
30
  "./assets/*.scss": "./assets/*.scss",
31
31
  "./components/*": "./components/*",
32
32
  "./njk-helpers/*": "./njk-helpers/*",
33
+ "./helpers/*": "./helpers/*",
33
34
  "./introduction/*.md": "./introduction/*.md",
34
35
  "./foundations/*": "./foundations/*",
35
36
  "./tokens/*.json": "./tokens/*.json",
@@ -2,6 +2,7 @@ export interface QuoteProps {
2
2
  bodyHtml: string;
3
3
  theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';
4
4
  classNames?: string;
5
+ /** Ex. { target: "_blank", "data-test": "lorem ipsum" } */
5
6
  attributes?: object;
6
7
  forcePx?: boolean;
7
8
  }
@@ -0,0 +1,10 @@
1
+ export interface TeaserCardsProps {
2
+ areaType?: 'right' | 'bauta' | 'bautaxl';
3
+ targetLink?: string;
4
+ theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';
5
+ classes?: string;
6
+ /** Ex. { target: "_blank", "data-test": "lorem ipsum" } */
7
+ attributes?: object;
8
+ children: any;
9
+ }
10
+ export declare const TeaserCard: ({ areaType, targetLink, theme, classes, attributes, children }: TeaserCardsProps) => import("preact").JSX.Element;
@@ -0,0 +1,12 @@
1
+ export interface TeaserOnSiteProps {
2
+ areaType?: 'right' | 'bauta' | 'bautaxl';
3
+ targetLink?: string;
4
+ theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';
5
+ classNames?: string;
6
+ /** Ex. { target: "_blank", "data-test": "lorem ipsum" } */
7
+ attributes?: object;
8
+ mediaHtml?: string;
9
+ title?: string;
10
+ text?: string;
11
+ }
12
+ export declare const TeaserOnSite: ({ areaType, targetLink, theme, classNames, attributes, mediaHtml, title, text }: TeaserOnSiteProps) => import("preact").JSX.Element;
@@ -26,27 +26,29 @@ __export(src_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(src_exports);
28
28
 
29
+ // ../src/helpers/formatClassString.ts
30
+ var formatClassString = (classesArray) => {
31
+ return classesArray.filter((x) => !!x).join(" ");
32
+ };
33
+
29
34
  // ../src/components/divider/divider.tsx
30
35
  var import_jsx_runtime = require("preact/jsx-runtime");
31
36
  var Divider = ({ variant = "soft", classNames, attributes }) => {
32
- const componentClassName = "ds-divider";
33
- const classNamePrefix = `${componentClassName}--`;
34
- const classes = [
35
- componentClassName,
36
- `${classNamePrefix}${variant}`,
37
+ const classes = formatClassString([
38
+ "ds-divider",
39
+ `ds-divider--${variant}`,
37
40
  classNames
38
- ].filter(Boolean).join(" ");
41
+ ]);
39
42
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: classes, ...attributes, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("hr", {}) });
40
43
  };
41
44
 
42
45
  // ../src/components/thematic-break/thematic-break.tsx
43
46
  var import_jsx_runtime2 = require("preact/jsx-runtime");
44
47
  var ThematicBreak = ({ classNames, attributes }) => {
45
- const componentClassName = "ds-thematic-break";
46
- const classes = [
47
- componentClassName,
48
+ const classes = formatClassString([
49
+ "ds-thematic-break",
48
50
  classNames
49
- ].filter(Boolean).join(" ");
51
+ ]);
50
52
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: classes, ...attributes, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("hr", {}) });
51
53
  };
52
54
 
@@ -54,12 +56,12 @@ var ThematicBreak = ({ classNames, attributes }) => {
54
56
  var import_jsx_runtime3 = require("preact/jsx-runtime");
55
57
  var Quote = ({ bodyHtml, theme = "nyheter", classNames, attributes, forcePx }) => {
56
58
  const componentClassName = "ds-quote";
57
- const classes = [
59
+ const classes = formatClassString([
58
60
  componentClassName,
59
61
  `ds-theme--${theme}`,
60
62
  forcePx && "ds-force-px",
61
63
  classNames
62
- ].filter(Boolean).join(" ");
64
+ ]);
63
65
  const quoteHtml = `<span class="${componentClassName}__border"></span> ${bodyHtml}`;
64
66
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("blockquote", { dangerouslySetInnerHTML: { __html: quoteHtml }, className: classes, ...attributes });
65
67
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../index.tsx", "../components/divider/divider.tsx", "../components/thematic-break/thematic-break.tsx", "../components/quote/quote.tsx"],
4
- "sourcesContent": ["import { Divider } from \"./components/divider/divider\";\nexport { Divider };\n\nimport { ThematicBreak } from \"./components/thematic-break/thematic-break\";\nexport { ThematicBreak };\n\nimport { Quote } from \"./components/quote/quote\";\nexport { Quote };\n", "export interface DividerProps {\n variant?: 'soft' | 'medium' | 'hard';\n classNames?: string;\n attributes?: object;\n}\n\nexport const Divider = ({ variant = 'soft', classNames, attributes }: DividerProps) => {\n const componentClassName = 'ds-divider';\n const classNamePrefix = `${componentClassName}--`;\n const classes = [\n componentClassName,\n `${classNamePrefix}${variant}`,\n classNames\n ].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default Divider;\n", "export interface ThematicBreakProps {\n classNames?: string;\n attributes?: object;\n}\n\nexport const ThematicBreak = ({ classNames, attributes }: ThematicBreakProps) => {\n const componentClassName = 'ds-thematic-break';\n const classes = [\n componentClassName,\n classNames\n ].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default ThematicBreak;\n", "export interface QuoteProps {\n bodyHtml: string;\n theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';\n classNames?: string;\n attributes?: object;\n forcePx?: boolean;\n}\n\nexport const Quote = ({ bodyHtml, theme = 'nyheter', classNames, attributes, forcePx }: QuoteProps) => {\n const componentClassName = 'ds-quote';\n const classes = [\n componentClassName,\n `ds-theme--${theme}`,\n forcePx && 'ds-force-px',\n classNames\n ].filter(Boolean).join(' ');\n\n const quoteHtml = `<span class=\"${componentClassName}__border\"></span> ${bodyHtml}`\n\n return (\n <blockquote dangerouslySetInnerHTML={{ __html: quoteHtml }} className={classes} {...attributes} />\n );\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACgB6C;AAVtC,IAAM,UAAU,CAAC,EAAE,UAAU,QAAQ,YAAY,WAAW,MAAoB;AACrF,QAAM,qBAAqB;AAC3B,QAAM,kBAAkB,GAAG,kBAAkB;AAC7C,QAAM,UAAU;AAAA,IACd;AAAA,IACA,GAAG,eAAe,GAAG,OAAO;AAAA,IAC5B;AAAA,EACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACE,4CAAC,SAAI,WAAW,SAAU,GAAG,YAAY,sDAAC,QAAG,GAAE;AAEnD;;;ACL6C,IAAAA,sBAAA;AARtC,IAAM,gBAAgB,CAAC,EAAE,YAAY,WAAW,MAA0B;AAC/E,QAAM,qBAAqB;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,EACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACE,6CAAC,SAAI,WAAW,SAAU,GAAG,YAAY,uDAAC,QAAG,GAAE;AAEnD;;;ACKI,IAAAC,sBAAA;AAZG,IAAM,QAAQ,CAAC,EAAE,UAAU,QAAQ,WAAW,YAAY,YAAY,QAAQ,MAAkB;AACrG,QAAM,qBAAqB;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IACA,aAAa,KAAK;AAAA,IAClB,WAAW;AAAA,IACX;AAAA,EACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,YAAY,gBAAgB,kBAAkB,qBAAqB,QAAQ;AAEjF,SACE,6CAAC,gBAAW,yBAAyB,EAAE,QAAQ,UAAU,GAAG,WAAW,SAAU,GAAG,YAAY;AAEpG;",
3
+ "sources": ["../index.tsx", "../helpers/formatClassString.ts", "../components/divider/divider.tsx", "../components/thematic-break/thematic-break.tsx", "../components/quote/quote.tsx"],
4
+ "sourcesContent": ["import { Divider } from \"./components/divider/divider\";\nexport { Divider };\n\nimport { ThematicBreak } from \"./components/thematic-break/thematic-break\";\nexport { ThematicBreak };\n\nimport { Quote } from \"./components/quote/quote\";\nexport { Quote };\n", "export const formatClassString = (classesArray: (string|undefined|false)[]): string => {\n return classesArray.filter(x => !!x).join(' ');\n}\n", "import { formatClassString } from \"@bonniernews/dn-design-system-web/helpers/formatClassString.ts\";\n\nexport interface DividerProps {\n variant?: 'soft' | 'medium' | 'hard';\n classNames?: string;\n attributes?: object;\n}\n\nexport const Divider = ({ variant = 'soft', classNames, attributes }: DividerProps) => {\n const classes = formatClassString([\n 'ds-divider',\n `ds-divider--${variant}`,\n classNames\n ])\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default Divider;\n", "import { formatClassString } from \"@bonniernews/dn-design-system-web/helpers/formatClassString.ts\";\n\nexport interface ThematicBreakProps {\n classNames?: string;\n attributes?: object;\n}\n\nexport const ThematicBreak = ({ classNames, attributes }: ThematicBreakProps) => {\n const classes = formatClassString([\n 'ds-thematic-break',\n classNames\n ])\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default ThematicBreak;\n", "import { formatClassString } from \"@bonniernews/dn-design-system-web/helpers/formatClassString.ts\";\n\nexport interface QuoteProps {\n bodyHtml: string;\n theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';\n classNames?: string;\n /** Ex. { target: \"_blank\", \"data-test\": \"lorem ipsum\" } */\n attributes?: object;\n forcePx?: boolean;\n}\n\nexport const Quote = ({ bodyHtml, theme = 'nyheter', classNames, attributes, forcePx }: QuoteProps) => {\n const componentClassName = 'ds-quote';\n\n const classes = formatClassString([\n componentClassName,\n `ds-theme--${theme}`,\n forcePx && 'ds-force-px',\n classNames,\n ])\n\n const quoteHtml = `<span class=\"${componentClassName}__border\"></span> ${bodyHtml}`\n\n return (\n <blockquote dangerouslySetInnerHTML={{ __html: quoteHtml }} className={classes} {...attributes} />\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,IAAM,oBAAoB,CAAC,iBAAqD;AACrF,SAAO,aAAa,OAAO,OAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG;AAC/C;;;ACc6C;AARtC,IAAM,UAAU,CAAC,EAAE,UAAU,QAAQ,YAAY,WAAW,MAAoB;AACrF,QAAM,UAAU,kBAAkB;AAAA,IAChC;AAAA,IACA,eAAe,OAAO;AAAA,IACtB;AAAA,EACF,CAAC;AAED,SACE,4CAAC,SAAI,WAAW,SAAU,GAAG,YAAY,sDAAC,QAAG,GAAE;AAEnD;;;ACJ6C,IAAAA,sBAAA;AAPtC,IAAM,gBAAgB,CAAC,EAAE,YAAY,WAAW,MAA0B;AAC/E,QAAM,UAAU,kBAAkB;AAAA,IAChC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,6CAAC,SAAI,WAAW,SAAU,GAAG,YAAY,uDAAC,QAAG,GAAE;AAEnD;;;ACQI,IAAAC,sBAAA;AAbG,IAAM,QAAQ,CAAC,EAAE,UAAU,QAAQ,WAAW,YAAY,YAAY,QAAQ,MAAkB;AACrG,QAAM,qBAAqB;AAE3B,QAAM,UAAU,kBAAkB;AAAA,IAChC;AAAA,IACA,aAAa,KAAK;AAAA,IAClB,WAAW;AAAA,IACX;AAAA,EACF,CAAC;AAED,QAAM,YAAY,gBAAgB,kBAAkB,qBAAqB,QAAQ;AAEjF,SACE,6CAAC,gBAAW,yBAAyB,EAAE,QAAQ,UAAU,GAAG,WAAW,SAAU,GAAG,YAAY;AAEpG;",
6
6
  "names": ["import_jsx_runtime", "import_jsx_runtime"]
7
7
  }
@@ -1,24 +1,26 @@
1
+ // ../src/helpers/formatClassString.ts
2
+ var formatClassString = (classesArray) => {
3
+ return classesArray.filter((x) => !!x).join(" ");
4
+ };
5
+
1
6
  // ../src/components/divider/divider.tsx
2
7
  import { jsx } from "preact/jsx-runtime";
3
8
  var Divider = ({ variant = "soft", classNames, attributes }) => {
4
- const componentClassName = "ds-divider";
5
- const classNamePrefix = `${componentClassName}--`;
6
- const classes = [
7
- componentClassName,
8
- `${classNamePrefix}${variant}`,
9
+ const classes = formatClassString([
10
+ "ds-divider",
11
+ `ds-divider--${variant}`,
9
12
  classNames
10
- ].filter(Boolean).join(" ");
13
+ ]);
11
14
  return /* @__PURE__ */ jsx("div", { className: classes, ...attributes, children: /* @__PURE__ */ jsx("hr", {}) });
12
15
  };
13
16
 
14
17
  // ../src/components/thematic-break/thematic-break.tsx
15
18
  import { jsx as jsx2 } from "preact/jsx-runtime";
16
19
  var ThematicBreak = ({ classNames, attributes }) => {
17
- const componentClassName = "ds-thematic-break";
18
- const classes = [
19
- componentClassName,
20
+ const classes = formatClassString([
21
+ "ds-thematic-break",
20
22
  classNames
21
- ].filter(Boolean).join(" ");
23
+ ]);
22
24
  return /* @__PURE__ */ jsx2("div", { className: classes, ...attributes, children: /* @__PURE__ */ jsx2("hr", {}) });
23
25
  };
24
26
 
@@ -26,12 +28,12 @@ var ThematicBreak = ({ classNames, attributes }) => {
26
28
  import { jsx as jsx3 } from "preact/jsx-runtime";
27
29
  var Quote = ({ bodyHtml, theme = "nyheter", classNames, attributes, forcePx }) => {
28
30
  const componentClassName = "ds-quote";
29
- const classes = [
31
+ const classes = formatClassString([
30
32
  componentClassName,
31
33
  `ds-theme--${theme}`,
32
34
  forcePx && "ds-force-px",
33
35
  classNames
34
- ].filter(Boolean).join(" ");
36
+ ]);
35
37
  const quoteHtml = `<span class="${componentClassName}__border"></span> ${bodyHtml}`;
36
38
  return /* @__PURE__ */ jsx3("blockquote", { dangerouslySetInnerHTML: { __html: quoteHtml }, className: classes, ...attributes });
37
39
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../components/divider/divider.tsx", "../components/thematic-break/thematic-break.tsx", "../components/quote/quote.tsx"],
4
- "sourcesContent": ["export interface DividerProps {\n variant?: 'soft' | 'medium' | 'hard';\n classNames?: string;\n attributes?: object;\n}\n\nexport const Divider = ({ variant = 'soft', classNames, attributes }: DividerProps) => {\n const componentClassName = 'ds-divider';\n const classNamePrefix = `${componentClassName}--`;\n const classes = [\n componentClassName,\n `${classNamePrefix}${variant}`,\n classNames\n ].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default Divider;\n", "export interface ThematicBreakProps {\n classNames?: string;\n attributes?: object;\n}\n\nexport const ThematicBreak = ({ classNames, attributes }: ThematicBreakProps) => {\n const componentClassName = 'ds-thematic-break';\n const classes = [\n componentClassName,\n classNames\n ].filter(Boolean).join(' ');\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default ThematicBreak;\n", "export interface QuoteProps {\n bodyHtml: string;\n theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';\n classNames?: string;\n attributes?: object;\n forcePx?: boolean;\n}\n\nexport const Quote = ({ bodyHtml, theme = 'nyheter', classNames, attributes, forcePx }: QuoteProps) => {\n const componentClassName = 'ds-quote';\n const classes = [\n componentClassName,\n `ds-theme--${theme}`,\n forcePx && 'ds-force-px',\n classNames\n ].filter(Boolean).join(' ');\n\n const quoteHtml = `<span class=\"${componentClassName}__border\"></span> ${bodyHtml}`\n\n return (\n <blockquote dangerouslySetInnerHTML={{ __html: quoteHtml }} className={classes} {...attributes} />\n );\n};\n"],
5
- "mappings": ";AAgB6C;AAVtC,IAAM,UAAU,CAAC,EAAE,UAAU,QAAQ,YAAY,WAAW,MAAoB;AACrF,QAAM,qBAAqB;AAC3B,QAAM,kBAAkB,GAAG,kBAAkB;AAC7C,QAAM,UAAU;AAAA,IACd;AAAA,IACA,GAAG,eAAe,GAAG,OAAO;AAAA,IAC5B;AAAA,EACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACE,oBAAC,SAAI,WAAW,SAAU,GAAG,YAAY,8BAAC,QAAG,GAAE;AAEnD;;;ACL6C,gBAAAA,YAAA;AARtC,IAAM,gBAAgB,CAAC,EAAE,YAAY,WAAW,MAA0B;AAC/E,QAAM,qBAAqB;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,EACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,SACE,gBAAAA,KAAC,SAAI,WAAW,SAAU,GAAG,YAAY,0BAAAA,KAAC,QAAG,GAAE;AAEnD;;;ACKI,gBAAAC,YAAA;AAZG,IAAM,QAAQ,CAAC,EAAE,UAAU,QAAQ,WAAW,YAAY,YAAY,QAAQ,MAAkB;AACrG,QAAM,qBAAqB;AAC3B,QAAM,UAAU;AAAA,IACd;AAAA,IACA,aAAa,KAAK;AAAA,IAClB,WAAW;AAAA,IACX;AAAA,EACF,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE1B,QAAM,YAAY,gBAAgB,kBAAkB,qBAAqB,QAAQ;AAEjF,SACE,gBAAAA,KAAC,gBAAW,yBAAyB,EAAE,QAAQ,UAAU,GAAG,WAAW,SAAU,GAAG,YAAY;AAEpG;",
3
+ "sources": ["../helpers/formatClassString.ts", "../components/divider/divider.tsx", "../components/thematic-break/thematic-break.tsx", "../components/quote/quote.tsx"],
4
+ "sourcesContent": ["export const formatClassString = (classesArray: (string|undefined|false)[]): string => {\n return classesArray.filter(x => !!x).join(' ');\n}\n", "import { formatClassString } from \"@bonniernews/dn-design-system-web/helpers/formatClassString.ts\";\n\nexport interface DividerProps {\n variant?: 'soft' | 'medium' | 'hard';\n classNames?: string;\n attributes?: object;\n}\n\nexport const Divider = ({ variant = 'soft', classNames, attributes }: DividerProps) => {\n const classes = formatClassString([\n 'ds-divider',\n `ds-divider--${variant}`,\n classNames\n ])\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default Divider;\n", "import { formatClassString } from \"@bonniernews/dn-design-system-web/helpers/formatClassString.ts\";\n\nexport interface ThematicBreakProps {\n classNames?: string;\n attributes?: object;\n}\n\nexport const ThematicBreak = ({ classNames, attributes }: ThematicBreakProps) => {\n const classes = formatClassString([\n 'ds-thematic-break',\n classNames\n ])\n\n return (\n <div className={classes} {...attributes}><hr /></div>\n );\n};\n\nexport default ThematicBreak;\n", "import { formatClassString } from \"@bonniernews/dn-design-system-web/helpers/formatClassString.ts\";\n\nexport interface QuoteProps {\n bodyHtml: string;\n theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';\n classNames?: string;\n /** Ex. { target: \"_blank\", \"data-test\": \"lorem ipsum\" } */\n attributes?: object;\n forcePx?: boolean;\n}\n\nexport const Quote = ({ bodyHtml, theme = 'nyheter', classNames, attributes, forcePx }: QuoteProps) => {\n const componentClassName = 'ds-quote';\n\n const classes = formatClassString([\n componentClassName,\n `ds-theme--${theme}`,\n forcePx && 'ds-force-px',\n classNames,\n ])\n\n const quoteHtml = `<span class=\"${componentClassName}__border\"></span> ${bodyHtml}`\n\n return (\n <blockquote dangerouslySetInnerHTML={{ __html: quoteHtml }} className={classes} {...attributes} />\n );\n};\n"],
5
+ "mappings": ";AAAO,IAAM,oBAAoB,CAAC,iBAAqD;AACrF,SAAO,aAAa,OAAO,OAAK,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG;AAC/C;;;ACc6C;AARtC,IAAM,UAAU,CAAC,EAAE,UAAU,QAAQ,YAAY,WAAW,MAAoB;AACrF,QAAM,UAAU,kBAAkB;AAAA,IAChC;AAAA,IACA,eAAe,OAAO;AAAA,IACtB;AAAA,EACF,CAAC;AAED,SACE,oBAAC,SAAI,WAAW,SAAU,GAAG,YAAY,8BAAC,QAAG,GAAE;AAEnD;;;ACJ6C,gBAAAA,YAAA;AAPtC,IAAM,gBAAgB,CAAC,EAAE,YAAY,WAAW,MAA0B;AAC/E,QAAM,UAAU,kBAAkB;AAAA,IAChC;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,gBAAAA,KAAC,SAAI,WAAW,SAAU,GAAG,YAAY,0BAAAA,KAAC,QAAG,GAAE;AAEnD;;;ACQI,gBAAAC,YAAA;AAbG,IAAM,QAAQ,CAAC,EAAE,UAAU,QAAQ,WAAW,YAAY,YAAY,QAAQ,MAAkB;AACrG,QAAM,qBAAqB;AAE3B,QAAM,UAAU,kBAAkB;AAAA,IAChC;AAAA,IACA,aAAa,KAAK;AAAA,IAClB,WAAW;AAAA,IACX;AAAA,EACF,CAAC;AAED,QAAM,YAAY,gBAAgB,kBAAkB,qBAAqB,QAAQ;AAEjF,SACE,gBAAAA,KAAC,gBAAW,yBAAyB,EAAE,QAAQ,UAAU,GAAG,WAAW,SAAU,GAAG,YAAY;AAEpG;",
6
6
  "names": ["jsx", "jsx"]
7
7
  }
@@ -2,6 +2,7 @@ export interface QuoteProps {
2
2
  bodyHtml: string;
3
3
  theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';
4
4
  classNames?: string;
5
+ /** Ex. { target: "_blank", "data-test": "lorem ipsum" } */
5
6
  attributes?: object;
6
7
  forcePx?: boolean;
7
8
  }
@@ -0,0 +1,10 @@
1
+ export interface TeaserCardsProps {
2
+ areaType?: 'right' | 'bauta' | 'bautaxl';
3
+ targetLink?: string;
4
+ theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';
5
+ classes?: string;
6
+ /** Ex. { target: "_blank", "data-test": "lorem ipsum" } */
7
+ attributes?: object;
8
+ children: any;
9
+ }
10
+ export declare const TeaserCard: ({ areaType, targetLink, theme, classes, attributes, children }: TeaserCardsProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ export interface TeaserOnSiteProps {
2
+ areaType?: 'right' | 'bauta' | 'bautaxl';
3
+ targetLink?: string;
4
+ theme?: 'kultur' | 'nyheter' | 'sport' | 'ekonomi' | 'sthlm';
5
+ classNames?: string;
6
+ /** Ex. { target: "_blank", "data-test": "lorem ipsum" } */
7
+ attributes?: object;
8
+ mediaHtml?: string;
9
+ title?: string;
10
+ text?: string;
11
+ }
12
+ export declare const TeaserOnSite: ({ areaType, targetLink, theme, classNames, attributes, mediaHtml, title, text }: TeaserOnSiteProps) => import("react/jsx-runtime").JSX.Element;
@@ -26,27 +26,29 @@ __export(src_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(src_exports);
28
28
 
29
+ // ../src/helpers/formatClassString.ts
30
+ var formatClassString = (classesArray) => {
31
+ return classesArray.filter((x) => !!x).join(" ");
32
+ };
33
+
29
34
  // ../src/components/divider/divider.tsx
30
35
  var import_jsx_runtime = require("react/jsx-runtime");
31
36
  var Divider = ({ variant = "soft", classNames, attributes }) => {
32
- const componentClassName = "ds-divider";
33
- const classNamePrefix = `${componentClassName}--`;
34
- const classes = [
35
- componentClassName,
36
- `${classNamePrefix}${variant}`,
37
+ const classes = formatClassString([
38
+ "ds-divider",
39
+ `ds-divider--${variant}`,
37
40
  classNames
38
- ].filter(Boolean).join(" ");
41
+ ]);
39
42
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: classes, ...attributes, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("hr", {}) });
40
43
  };
41
44
 
42
45
  // ../src/components/thematic-break/thematic-break.tsx
43
46
  var import_jsx_runtime2 = require("react/jsx-runtime");
44
47
  var ThematicBreak = ({ classNames, attributes }) => {
45
- const componentClassName = "ds-thematic-break";
46
- const classes = [
47
- componentClassName,
48
+ const classes = formatClassString([
49
+ "ds-thematic-break",
48
50
  classNames
49
- ].filter(Boolean).join(" ");
51
+ ]);
50
52
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: classes, ...attributes, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("hr", {}) });
51
53
  };
52
54
 
@@ -54,12 +56,12 @@ var ThematicBreak = ({ classNames, attributes }) => {
54
56
  var import_jsx_runtime3 = require("react/jsx-runtime");
55
57
  var Quote = ({ bodyHtml, theme = "nyheter", classNames, attributes, forcePx }) => {
56
58
  const componentClassName = "ds-quote";
57
- const classes = [
59
+ const classes = formatClassString([
58
60
  componentClassName,
59
61
  `ds-theme--${theme}`,
60
62
  forcePx && "ds-force-px",
61
63
  classNames
62
- ].filter(Boolean).join(" ");
64
+ ]);
63
65
  const quoteHtml = `<span class="${componentClassName}__border"></span> ${bodyHtml}`;
64
66
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("blockquote", { dangerouslySetInnerHTML: { __html: quoteHtml }, className: classes, ...attributes });
65
67
  };