@guardian/interactive-component-library 0.7.16 → 0.8.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.
@@ -21,7 +21,9 @@ const PageSection = forwardRef(
21
21
  const headerRef = useRef();
22
22
  useLayoutEffect(() => {
23
23
  const headerElement = headerRef.current;
24
- setMinHeight(headerElement.offsetHeight);
24
+ if (headerElement) {
25
+ setMinHeight(headerElement.offsetHeight);
26
+ }
25
27
  }, [children]);
26
28
  return /* @__PURE__ */ jsxs(
27
29
  "section",
@@ -32,7 +34,7 @@ const PageSection = forwardRef(
32
34
  style: { "--background-color": backgroundColor, minHeight },
33
35
  children: [
34
36
  borderTop && /* @__PURE__ */ jsx("div", { className: styles.borderTop }),
35
- /* @__PURE__ */ jsx(
37
+ children.header && /* @__PURE__ */ jsx(
36
38
  "div",
37
39
  {
38
40
  className: [styles.header, styles[layout]].join(" "),
@@ -1,8 +1,8 @@
1
- const borderTop = "_borderTop_1xpz0_9";
2
- const section = "_section_1xpz0_39";
3
- const fullWidth = "_fullWidth_1xpz0_39";
4
- const header = "_header_1xpz0_150";
5
- const content = "_content_1xpz0_187";
1
+ const borderTop = "_borderTop_1v72w_9";
2
+ const section = "_section_1v72w_39";
3
+ const fullWidth = "_fullWidth_1v72w_39";
4
+ const header = "_header_1v72w_150";
5
+ const content = "_content_1v72w_187";
6
6
  const defaultStyles = {
7
7
  borderTop,
8
8
  section,
@@ -1,2 +1,3 @@
1
1
  export * from './coalitions-tracker';
2
2
  export * from './ticker';
3
+ export { Ticker as Ticker2 } from './ticker-v2';
@@ -0,0 +1,3 @@
1
+ export function Gradient({ position }: {
2
+ position?: string;
3
+ }): import("preact").JSX.Element;
@@ -0,0 +1,40 @@
1
+ import { jsxs, jsx, Fragment } from "preact/jsx-runtime";
2
+ import defaultStyles from "./style.module.scss.js";
3
+ function Gradient({ position = "left" }) {
4
+ return /* @__PURE__ */ jsxs(
5
+ "svg",
6
+ {
7
+ className: defaultStyles.gradient,
8
+ "data-position": position,
9
+ width: "100%",
10
+ height: "100%",
11
+ viewBox: "0 0 10 10",
12
+ fill: "none",
13
+ xmlns: "http://www.w3.org/2000/svg",
14
+ preserveAspectRatio: "none",
15
+ children: [
16
+ /* @__PURE__ */ jsx("g", { children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "url(#paint0_linear_3798_6653)" }) }),
17
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
18
+ "linearGradient",
19
+ {
20
+ id: "paint0_linear_3798_6653",
21
+ x1: "0%",
22
+ y1: "0%",
23
+ x2: "100%",
24
+ y2: "0%",
25
+ children: position === "left" ? /* @__PURE__ */ jsxs(Fragment, { children: [
26
+ /* @__PURE__ */ jsx("stop", { className: defaultStyles.lastStop, offset: "1" }),
27
+ /* @__PURE__ */ jsx("stop", { className: defaultStyles.firstStop })
28
+ ] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
29
+ /* @__PURE__ */ jsx("stop", { className: defaultStyles.firstStop }),
30
+ /* @__PURE__ */ jsx("stop", { className: defaultStyles.lastStop, offset: "1" })
31
+ ] })
32
+ }
33
+ ) })
34
+ ]
35
+ }
36
+ );
37
+ }
38
+ export {
39
+ Gradient
40
+ };
@@ -0,0 +1,5 @@
1
+ export function Ticker({ buttonScrollDistance, styles, children }: {
2
+ buttonScrollDistance?: number;
3
+ styles: any;
4
+ children: any;
5
+ }): import("preact").JSX.Element;
@@ -0,0 +1,103 @@
1
+ import { jsxs, jsx } from "preact/jsx-runtime";
2
+ import { toChildArray } from "preact";
3
+ import { mergeStyles } from "../../../styles/helpers/mergeStyles.js";
4
+ import defaultStyles from "./style.module.scss.js";
5
+ import { Gradient } from "./Gradient.js";
6
+ import { useState, useRef, useEffect } from "preact/hooks";
7
+ import "../../particles/info-button/index.js";
8
+ import "../../particles/relative-time-sentence/index.js";
9
+ import { ArrowButton } from "../../particles/arrow-button/index.js";
10
+ function Ticker({ buttonScrollDistance = 250, styles, children }) {
11
+ styles = mergeStyles({ ...defaultStyles }, styles);
12
+ const [isScrolledToStart, setIsScrolledToStart] = useState(true);
13
+ const [isScrolledToEnd, setIsScrolledToEnd] = useState(false);
14
+ const [isOverflow, setIsOverflow] = useState(false);
15
+ const childArray = toChildArray(children);
16
+ const scrollContainerRef = useRef(null);
17
+ function scrubLeft() {
18
+ const scrollContainer = scrollContainerRef.current;
19
+ if (!scrollContainer) return;
20
+ let newScrollLeft = scrollContainer.scrollLeft - buttonScrollDistance;
21
+ if (newScrollLeft < 100) {
22
+ newScrollLeft = 0;
23
+ }
24
+ scrollContainer.scrollTo({
25
+ left: newScrollLeft,
26
+ behavior: "smooth"
27
+ });
28
+ }
29
+ function scrubRight() {
30
+ const scrollContainer = scrollContainerRef.current;
31
+ if (!scrollContainer) return;
32
+ let scrollSpace = scrollContainer.scrollWidth - scrollContainer.clientWidth;
33
+ let newScrollLeft = scrollContainer.scrollLeft + buttonScrollDistance;
34
+ if (newScrollLeft > scrollSpace - 100) {
35
+ newScrollLeft = scrollSpace + 1;
36
+ }
37
+ scrollContainer.scrollTo({
38
+ left: newScrollLeft,
39
+ behavior: "smooth"
40
+ });
41
+ }
42
+ useEffect(() => {
43
+ const scrollContainer = scrollContainerRef.current;
44
+ if (!scrollContainer) return;
45
+ let scrollDebounceTimeout;
46
+ const handleScroll = () => {
47
+ clearTimeout(scrollDebounceTimeout);
48
+ scrollDebounceTimeout = setTimeout(() => {
49
+ const currentScroll = scrollContainer.scrollLeft;
50
+ const scrollSpace = scrollContainer.scrollWidth - scrollContainer.clientWidth - 4;
51
+ setIsScrolledToEnd(currentScroll > scrollSpace);
52
+ setIsScrolledToStart(currentScroll === 0);
53
+ }, 20);
54
+ };
55
+ scrollContainer.addEventListener("scroll", handleScroll);
56
+ return () => {
57
+ clearTimeout(scrollDebounceTimeout);
58
+ scrollContainer.removeEventListener("scroll", handleScroll);
59
+ };
60
+ }, []);
61
+ useEffect(() => {
62
+ const scrollContainer = scrollContainerRef.current;
63
+ if (!scrollContainer) return;
64
+ if (scrollContainer.scrollWidth > scrollContainer.clientWidth) {
65
+ setIsOverflow(true);
66
+ }
67
+ }, [children]);
68
+ return /* @__PURE__ */ jsxs("div", { className: styles.ticker, children: [
69
+ /* @__PURE__ */ jsx("div", { ref: scrollContainerRef, className: styles.scrollContainer, children: childArray.map((child, index) => {
70
+ var _a;
71
+ return /* @__PURE__ */ jsx("div", { className: styles.tickerItem, children: child }, ((_a = child.props) == null ? void 0 : _a.id) ?? index);
72
+ }) }),
73
+ /* @__PURE__ */ jsxs(
74
+ "div",
75
+ {
76
+ className: `${styles.scrubControls} ${isOverflow ? styles.showControls : ""}`,
77
+ children: [
78
+ /* @__PURE__ */ jsx(Gradient, { position: "right" }),
79
+ /* @__PURE__ */ jsx(
80
+ ArrowButton,
81
+ {
82
+ styles: { button: styles.arrowButton },
83
+ onClick: scrubRight,
84
+ disabled: isScrolledToEnd
85
+ }
86
+ ),
87
+ /* @__PURE__ */ jsx(
88
+ ArrowButton,
89
+ {
90
+ styles: { button: styles.arrowButton },
91
+ direction: "left",
92
+ onClick: scrubLeft,
93
+ disabled: isScrolledToStart
94
+ }
95
+ )
96
+ ]
97
+ }
98
+ )
99
+ ] });
100
+ }
101
+ export {
102
+ Ticker
103
+ };
@@ -0,0 +1,32 @@
1
+ const ticker = "_ticker_1pk9n_9";
2
+ const scrollContainer = "_scrollContainer_1pk9n_14";
3
+ const tickerItem = "_tickerItem_1pk9n_39";
4
+ const scrubControls = "_scrubControls_1pk9n_43";
5
+ const showControls = "_showControls_1pk9n_53";
6
+ const arrowButton = "_arrowButton_1pk9n_62";
7
+ const gradient = "_gradient_1pk9n_66";
8
+ const firstStop = "_firstStop_1pk9n_81";
9
+ const lastStop = "_lastStop_1pk9n_86";
10
+ const defaultStyles = {
11
+ ticker,
12
+ scrollContainer,
13
+ tickerItem,
14
+ scrubControls,
15
+ showControls,
16
+ arrowButton,
17
+ gradient,
18
+ firstStop,
19
+ lastStop
20
+ };
21
+ export {
22
+ arrowButton,
23
+ defaultStyles as default,
24
+ firstStop,
25
+ gradient,
26
+ lastStop,
27
+ scrollContainer,
28
+ scrubControls,
29
+ showControls,
30
+ ticker,
31
+ tickerItem
32
+ };
package/dist/index.js CHANGED
@@ -61,6 +61,7 @@ import "./components/molecules/canvas-map/Map.js";
61
61
  import { OptionPicker } from "./components/molecules/option-picker/index.js";
62
62
  import { CoalitionsTracker } from "./components/organisms/coalitions-tracker/index.js";
63
63
  import { Ticker } from "./components/organisms/ticker/index.js";
64
+ import { Ticker as Ticker2 } from "./components/organisms/ticker-v2/index.js";
64
65
  import { useContainerSize } from "./shared/hooks/useContainerSize.js";
65
66
  import { useTouchOrHover } from "./shared/hooks/useTouchOrHover.js";
66
67
  import { useWindowSize } from "./shared/hooks/useWindowSize.js";
@@ -124,6 +125,7 @@ export {
124
125
  Text,
125
126
  TextLayer,
126
127
  Ticker,
128
+ Ticker2,
127
129
  Tooltip,
128
130
  ToplineResult,
129
131
  VectorLayer,
package/dist/style.css CHANGED
@@ -1374,8 +1374,7 @@ body {
1374
1374
  --undeclared: #e7e7e7;
1375
1375
  }
1376
1376
  @media (prefers-color-scheme: dark) {
1377
- body.ios,
1378
- body.android {
1377
+ :root:not([data-color-scheme=light]) body {
1379
1378
  --border-divider-color: #606060;
1380
1379
  --primary-text-color: #dcdcdc;
1381
1380
  --secondary-text-color: #c8c8c8;
@@ -2186,79 +2185,79 @@ body.android {
2186
2185
  --top-inset: 58px;
2187
2186
  }
2188
2187
 
2189
- ._borderTop_1xpz0_9 {
2188
+ ._borderTop_1v72w_9 {
2190
2189
  border-top: 1px solid var(--border-divider-color);
2191
2190
  transform: translate(-10px);
2192
2191
  width: calc(100% + 20px);
2193
2192
  }
2194
2193
  @media (min-width: 30em) {
2195
- ._borderTop_1xpz0_9 {
2194
+ ._borderTop_1v72w_9 {
2196
2195
  transform: translate(-20px);
2197
2196
  width: calc(100% + 40px);
2198
2197
  }
2199
2198
  }
2200
2199
  @media (min-width: 46.25em) {
2201
- ._borderTop_1xpz0_9 {
2200
+ ._borderTop_1v72w_9 {
2202
2201
  width: calc(100% + 40px);
2203
2202
  }
2204
2203
  }
2205
2204
  @media (min-width: 71.25em) {
2206
- ._borderTop_1xpz0_9 {
2205
+ ._borderTop_1v72w_9 {
2207
2206
  transform: translate(-180px);
2208
2207
  width: calc(100% + 197px);
2209
2208
  background-color: transparent;
2210
2209
  }
2211
2210
  }
2212
2211
  @media (min-width: 81.25em) {
2213
- ._borderTop_1xpz0_9 {
2212
+ ._borderTop_1v72w_9 {
2214
2213
  transform: translate(-260px);
2215
2214
  width: calc(100% + 279px);
2216
2215
  }
2217
2216
  }
2218
2217
 
2219
- ._section_1xpz0_39._fullWidth_1xpz0_39 ._borderTop_1xpz0_9 {
2218
+ ._section_1v72w_39._fullWidth_1v72w_39 ._borderTop_1v72w_9 {
2220
2219
  transform: none;
2221
2220
  width: calc(100% - 1px);
2222
2221
  }
2223
2222
 
2224
- ._section_1xpz0_39 {
2223
+ ._section_1v72w_39 {
2225
2224
  position: relative;
2226
2225
  z-index: 0;
2227
2226
  padding-bottom: var(--space-8);
2228
2227
  }
2229
2228
 
2230
- ._section_1xpz0_39._fullWidth_1xpz0_39 {
2229
+ ._section_1v72w_39._fullWidth_1v72w_39 {
2231
2230
  transform: translate(-10px);
2232
2231
  width: calc(100% + 20px);
2233
2232
  margin: 0;
2234
2233
  padding: 0;
2235
2234
  }
2236
2235
  @media (min-width: 30em) {
2237
- ._section_1xpz0_39._fullWidth_1xpz0_39 {
2236
+ ._section_1v72w_39._fullWidth_1v72w_39 {
2238
2237
  transform: translate(-20px);
2239
2238
  width: calc(100% + 40px);
2240
2239
  }
2241
2240
  }
2242
2241
  @media (min-width: 46.25em) {
2243
- ._section_1xpz0_39._fullWidth_1xpz0_39 {
2242
+ ._section_1v72w_39._fullWidth_1v72w_39 {
2244
2243
  transform: translate(-20px);
2245
2244
  width: calc(100% + 40px);
2246
2245
  }
2247
2246
  }
2248
2247
  @media (min-width: 71.25em) {
2249
- ._section_1xpz0_39._fullWidth_1xpz0_39 {
2248
+ ._section_1v72w_39._fullWidth_1v72w_39 {
2250
2249
  transform: translate(-180px);
2251
2250
  width: calc(100% + 197px);
2252
2251
  }
2253
2252
  }
2254
2253
  @media (min-width: 81.25em) {
2255
- ._section_1xpz0_39._fullWidth_1xpz0_39 {
2254
+ ._section_1v72w_39._fullWidth_1v72w_39 {
2256
2255
  transform: translate(-260px);
2257
2256
  width: calc(100% + 280px);
2258
2257
  }
2259
2258
  }
2260
2259
 
2261
- ._section_1xpz0_39::before {
2260
+ ._section_1v72w_39::before {
2262
2261
  display: block;
2263
2262
  content: "";
2264
2263
  position: absolute;
@@ -2271,29 +2270,29 @@ body.android {
2271
2270
  background-color: var(--background-color);
2272
2271
  }
2273
2272
  @media (min-width: 30em) {
2274
- ._section_1xpz0_39::before {
2273
+ ._section_1v72w_39::before {
2275
2274
  transform: translate(-20px);
2276
2275
  width: calc(100% + 40px);
2277
2276
  }
2278
2277
  }
2279
2278
  @media (min-width: 46.25em) {
2280
- ._section_1xpz0_39::before {
2279
+ ._section_1v72w_39::before {
2281
2280
  width: calc(100% + 40px);
2282
2281
  }
2283
2282
  }
2284
2283
  @media (min-width: 71.25em) {
2285
- ._section_1xpz0_39::before {
2284
+ ._section_1v72w_39::before {
2286
2285
  transform: translateX(-9px);
2287
2286
  width: calc(100% + 26px);
2288
2287
  }
2289
2288
  }
2290
2289
  @media (min-width: 81.25em) {
2291
- ._section_1xpz0_39::before {
2290
+ ._section_1v72w_39::before {
2292
2291
  width: calc(100% + 27px);
2293
2292
  }
2294
2293
  }
2295
2294
 
2296
- ._section_1xpz0_39._fullWidth_1xpz0_39::before {
2295
+ ._section_1v72w_39._fullWidth_1v72w_39::before {
2297
2296
  transform: none;
2298
2297
  width: calc(100% - 3px);
2299
2298
  height: 100%;
@@ -2303,38 +2302,38 @@ body.android {
2303
2302
  width: calc(100% + 20px);
2304
2303
  }
2305
2304
  @media (min-width: 30em) {
2306
- ._section_1xpz0_39._fullWidth_1xpz0_39::before {
2305
+ ._section_1v72w_39._fullWidth_1v72w_39::before {
2307
2306
  transform: translate(-20px);
2308
2307
  width: calc(100% + 40px);
2309
2308
  }
2310
2309
  }
2311
2310
  @media (min-width: 46.25em) {
2312
- ._section_1xpz0_39._fullWidth_1xpz0_39::before {
2311
+ ._section_1v72w_39._fullWidth_1v72w_39::before {
2313
2312
  width: 100%;
2314
2313
  transform: translateX(-1px);
2315
2314
  }
2316
2315
  }
2317
2316
  @media (min-width: 71.25em) {
2318
- ._section_1xpz0_39._fullWidth_1xpz0_39::before {
2317
+ ._section_1v72w_39._fullWidth_1v72w_39::before {
2319
2318
  transform: translateX(-1px);
2320
2319
  width: 100%;
2321
2320
  }
2322
2321
  }
2323
2322
  @media (min-width: 81.25em) {
2324
- ._section_1xpz0_39._fullWidth_1xpz0_39::before {
2323
+ ._section_1v72w_39._fullWidth_1v72w_39::before {
2325
2324
  transform: none;
2326
2325
  width: calc(100% - 3px);
2327
2326
  }
2328
2327
  }
2329
2328
 
2330
- ._header_1xpz0_150 {
2329
+ ._header_1v72w_150 {
2331
2330
  color: var(--primary-text-color);
2332
2331
  padding-top: var(--space-2);
2333
2332
  margin-bottom: var(--space-5);
2334
2333
  }
2335
2334
 
2336
2335
  @media (min-width: 71.25em) {
2337
- body:not(.ios, .android) ._header_1xpz0_150 {
2336
+ body:not(.ios, .android) ._header_1v72w_150 {
2338
2337
  position: absolute;
2339
2338
  max-width: 160px;
2340
2339
  transform: translateX(-170px);
@@ -2342,13 +2341,13 @@ body.android {
2342
2341
  }
2343
2342
  }
2344
2343
  @media (min-width: 81.25em) {
2345
- body:not(.ios, .android) ._header_1xpz0_150 {
2344
+ body:not(.ios, .android) ._header_1v72w_150 {
2346
2345
  max-width: 220px;
2347
2346
  transform: translateX(-250px);
2348
2347
  }
2349
2348
  }
2350
2349
 
2351
- body ._header_1xpz0_150._fullWidth_1xpz0_39 {
2350
+ body ._header_1v72w_150._fullWidth_1v72w_39 {
2352
2351
  position: absolute;
2353
2352
  top: 0;
2354
2353
  left: 0;
@@ -2359,28 +2358,32 @@ body ._header_1xpz0_150._fullWidth_1xpz0_39 {
2359
2358
  max-width: 100%;
2360
2359
  }
2361
2360
  @media (min-width: 71.25em) {
2362
- body ._header_1xpz0_150._fullWidth_1xpz0_39 {
2361
+ body ._header_1v72w_150._fullWidth_1v72w_39 {
2363
2362
  margin-bottom: 0;
2364
2363
  }
2365
2364
  }
2366
2365
 
2367
- ._content_1xpz0_187 {
2366
+ ._content_1v72w_187 {
2368
2367
  position: relative;
2369
2368
  padding-top: 0;
2370
2369
  z-index: 0;
2371
2370
  color: var(--primary-text-color);
2372
2371
  }
2373
2372
  @media (min-width: 71.25em) {
2374
- ._content_1xpz0_187 {
2373
+ ._content_1v72w_187 {
2375
2374
  padding-top: var(--space-2);
2376
2375
  }
2377
2376
  }
2378
2377
 
2379
- ._content_1xpz0_187._fullWidth_1xpz0_39 {
2378
+ :not(._header_1v72w_150) + ._content_1v72w_187 {
2379
+ padding-top: var(--space-2);
2380
+ }
2381
+
2382
+ ._content_1v72w_187._fullWidth_1v72w_39 {
2380
2383
  padding-top: 0;
2381
2384
  }
2382
2385
 
2383
- ._content_1xpz0_187._fullWidth_1xpz0_39::before {
2386
+ ._content_1v72w_187._fullWidth_1v72w_39::before {
2384
2387
  display: none;
2385
2388
  }._text_1ci1k_1 {
2386
2389
  font-family: var(--text-sans);
@@ -3413,4 +3416,92 @@ body.android {
3413
3416
  left: 0;
3414
3417
  bottom: 0;
3415
3418
  padding-bottom: 8px;
3419
+ }body {
3420
+ --top-inset: 0;
3421
+ }
3422
+
3423
+ body.android {
3424
+ --top-inset: 58px;
3425
+ }
3426
+
3427
+ ._ticker_1pk9n_9 {
3428
+ width: 100%;
3429
+ position: relative;
3430
+ }
3431
+
3432
+ ._scrollContainer_1pk9n_14 {
3433
+ position: relative;
3434
+ padding: 0;
3435
+ cursor: default;
3436
+ display: flex;
3437
+ flex-direction: row;
3438
+ gap: var(--space-2);
3439
+ overflow-x: scroll;
3440
+ }
3441
+ @media (max-width: 29.99em) {
3442
+ ._scrollContainer_1pk9n_14 {
3443
+ /* Make room for bottom scroll bar */
3444
+ padding-bottom: 8px;
3445
+ }
3446
+ }
3447
+ @media (min-width: 30em) {
3448
+ ._scrollContainer_1pk9n_14 {
3449
+ /* Make room for the scrub controls */
3450
+ padding-right: 36px;
3451
+ }
3452
+ ._scrollContainer_1pk9n_14::-webkit-scrollbar {
3453
+ display: none; /* for Chrome, Safari, and Opera */
3454
+ }
3455
+ }
3456
+
3457
+ ._tickerItem_1pk9n_39 {
3458
+ flex-shrink: 0;
3459
+ }
3460
+
3461
+ ._scrubControls_1pk9n_43 {
3462
+ position: absolute;
3463
+ right: 0;
3464
+ top: 0;
3465
+ height: 100%;
3466
+ flex-direction: column;
3467
+ justify-content: center;
3468
+ display: none;
3469
+ }
3470
+
3471
+ ._scrubControls_1pk9n_43._showControls_1pk9n_53 {
3472
+ display: flex;
3473
+ }
3474
+ @media (max-width: 29.99em) {
3475
+ ._scrubControls_1pk9n_43._showControls_1pk9n_53 {
3476
+ display: none;
3477
+ }
3478
+ }
3479
+
3480
+ ._arrowButton_1pk9n_62 {
3481
+ z-index: 1;
3482
+ }
3483
+
3484
+ ._gradient_1pk9n_66 {
3485
+ position: absolute;
3486
+ top: 0;
3487
+ bottom: 0;
3488
+ width: 40px;
3489
+ }
3490
+
3491
+ ._gradient_1pk9n_66[data-position=left] {
3492
+ left: 0;
3493
+ }
3494
+
3495
+ ._gradient_1pk9n_66[data-position=right] {
3496
+ right: 0;
3497
+ }
3498
+
3499
+ ._firstStop_1pk9n_81 {
3500
+ stop-color: var(--tertiary-bg-color);
3501
+ stop-opacity: 0;
3502
+ }
3503
+
3504
+ ._lastStop_1pk9n_86 {
3505
+ stop-color: var(--tertiary-bg-color);
3506
+ stop-opacity: 1;
3416
3507
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@guardian/interactive-component-library",
3
3
  "private": false,
4
- "version": "0.7.16",
4
+ "version": "0.8.0",
5
5
  "packageManager": "pnpm@8.4.0",
6
6
  "repository": {
7
7
  "type": "git",