@guardian/interactive-component-library 0.4.4 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/molecules/canvas-map/context/MapContext.js +31 -13
- package/dist/components/molecules/canvas-map/lib/layers/TextLayer.d.ts +7 -2
- package/dist/components/molecules/canvas-map/lib/layers/TextLayer.js +1 -0
- package/dist/components/molecules/canvas-map/lib/layers/VectorLayer.d.ts +7 -2
- package/dist/components/molecules/canvas-map/lib/layers/VectorLayer.js +1 -0
- package/dist/components/molecules/canvas-map/lib/renderers/FeatureRenderer.js +6 -1
- package/dist/components/molecules/canvas-map/lib/renderers/MapRenderer.js +6 -7
- package/dist/components/molecules/canvas-map/lib/renderers/TextLayerRenderer.js +5 -3
- package/dist/components/molecules/canvas-map/lib/styles/Style.d.ts +2 -0
- package/dist/components/molecules/canvas-map/lib/styles/Style.js +3 -1
- package/dist/components/molecules/option-picker/style.module.css.js +10 -10
- package/dist/components/molecules/result-summary/index.js +2 -2
- package/dist/components/organisms/ticker/style.module.scss.js +12 -12
- package/dist/components/particles/relative-time-sentence/index.js +1 -1
- package/dist/style.css +42 -39
- package/package.json +1 -1
|
@@ -7,7 +7,10 @@ function MapProvider({ map, children }) {
|
|
|
7
7
|
const registerLayer = (layer, comp) => {
|
|
8
8
|
if (!layers.includes(layer)) {
|
|
9
9
|
const position = getCompTreePosition(comp, children);
|
|
10
|
-
if (position === null)
|
|
10
|
+
if (position === null) {
|
|
11
|
+
console.warn(`failed to find target component in component tree`, comp);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
11
14
|
setLayers((prevLayers) => {
|
|
12
15
|
const newLayers = [...prevLayers];
|
|
13
16
|
newLayers.splice(position, 0, layer);
|
|
@@ -26,27 +29,42 @@ function MapProvider({ map, children }) {
|
|
|
26
29
|
}, [map, layers]);
|
|
27
30
|
return /* @__PURE__ */ jsx(MapContext.Provider, { value: { registerLayer, unregisterLayer }, children });
|
|
28
31
|
}
|
|
29
|
-
function getCompTreePosition(targetComponent, children) {
|
|
32
|
+
function getCompTreePosition(targetComponent, children, debug = false) {
|
|
30
33
|
let index = 0;
|
|
34
|
+
let debugComponentPath = [];
|
|
31
35
|
function traverse(nodes) {
|
|
32
|
-
var _a, _b;
|
|
36
|
+
var _a, _b, _c, _d;
|
|
33
37
|
for (const node of nodes) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
if (!node) continue;
|
|
39
|
+
const childNodes = (_b = (_a = node.__c) == null ? void 0 : _a.__v) == null ? void 0 : _b.__k;
|
|
40
|
+
if (debug) {
|
|
41
|
+
let name = ((_c = node.__c) == null ? void 0 : _c.constructor.displayName) || ((_d = node.__c) == null ? void 0 : _d.constructor.name);
|
|
42
|
+
if (name === "m") {
|
|
43
|
+
name = "";
|
|
39
44
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
debugComponentPath.push(name);
|
|
46
|
+
}
|
|
47
|
+
if (childNodes && childNodes.length > 0) {
|
|
48
|
+
const result2 = traverse(childNodes);
|
|
49
|
+
if (result2 !== null) {
|
|
50
|
+
return result2;
|
|
43
51
|
}
|
|
44
|
-
index++;
|
|
45
52
|
}
|
|
53
|
+
if ((node == null ? void 0 : node.__c) === targetComponent) {
|
|
54
|
+
return index;
|
|
55
|
+
}
|
|
56
|
+
if (debug) {
|
|
57
|
+
debugComponentPath.pop();
|
|
58
|
+
}
|
|
59
|
+
index++;
|
|
46
60
|
}
|
|
47
61
|
return null;
|
|
48
62
|
}
|
|
49
|
-
|
|
63
|
+
const result = traverse(Array.isArray(children) ? children : [children]);
|
|
64
|
+
if (debug && result) {
|
|
65
|
+
console.log(`<${debugComponentPath.join("/> → <")}/>`);
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
50
68
|
}
|
|
51
69
|
export {
|
|
52
70
|
MapContext,
|
|
@@ -5,8 +5,6 @@ import { Dispatcher } from '../events/Dispatcher';
|
|
|
5
5
|
/** @typedef {Omit<ConstructorParameters<typeof TextLayer>[0], "source">} TextLayerOptions */
|
|
6
6
|
/** @typedef {TextLayerOptions & { features: import("../Feature").Feature[] | import("../FeatureCollection").FeatureCollection }} TextLayerComponentProps */
|
|
7
7
|
export class TextLayer {
|
|
8
|
-
/** @param {TextLayerComponentProps} props */
|
|
9
|
-
static Component({ features: featureCollection, style, minZoom, opacity, declutter, drawCollisionBoxes, }: TextLayerComponentProps): boolean;
|
|
10
8
|
/**
|
|
11
9
|
* @param {import("../Feature").Feature[]} features
|
|
12
10
|
* @param {TextLayerOptions} options
|
|
@@ -46,6 +44,13 @@ export class TextLayer {
|
|
|
46
44
|
getStyleFunction(): () => Style;
|
|
47
45
|
renderFrame(frameState: any, targetElement: any): any;
|
|
48
46
|
}
|
|
47
|
+
export namespace TextLayer {
|
|
48
|
+
/** @param {TextLayerComponentProps} props */
|
|
49
|
+
function Component({ features: featureCollection, style, minZoom, opacity, declutter, drawCollisionBoxes, }: TextLayerComponentProps): boolean;
|
|
50
|
+
namespace Component {
|
|
51
|
+
let displayName: string;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
49
54
|
export type TextLayerOptions = Omit<ConstructorParameters<typeof TextLayer>[0], "source">;
|
|
50
55
|
export type TextLayerComponentProps = TextLayerOptions & {
|
|
51
56
|
features: import('../Feature').Feature[] | import('../FeatureCollection').FeatureCollection;
|
|
@@ -5,8 +5,6 @@ import { VectorSource } from '../sources/VectorSource';
|
|
|
5
5
|
/** @typedef {Omit<ConstructorParameters<typeof VectorLayer>[0], "source">} VectorLayerOptions */
|
|
6
6
|
/** @typedef {VectorLayerOptions & { features: import("../Feature").Feature[] | import("../FeatureCollection").FeatureCollection }} VectorLayerComponentProps */
|
|
7
7
|
export class VectorLayer {
|
|
8
|
-
/** @param {VectorLayerComponentProps} props */
|
|
9
|
-
static Component({ features: featureCollection, style, minZoom, opacity, hitDetectionEnabled, }: VectorLayerComponentProps): boolean;
|
|
10
8
|
/**
|
|
11
9
|
* @param {import("../Feature").Feature[]} features
|
|
12
10
|
* @param {VectorLayerOptions} options
|
|
@@ -51,6 +49,13 @@ export class VectorLayer {
|
|
|
51
49
|
findFeatures(coordinate: any): any;
|
|
52
50
|
renderFrame(frameState: any, targetElement: any): any;
|
|
53
51
|
}
|
|
52
|
+
export namespace VectorLayer {
|
|
53
|
+
/** @param {VectorLayerComponentProps} props */
|
|
54
|
+
function Component({ features: featureCollection, style, minZoom, opacity, hitDetectionEnabled, }: VectorLayerComponentProps): boolean;
|
|
55
|
+
namespace Component {
|
|
56
|
+
let displayName: string;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
54
59
|
export type VectorLayerOptions = Omit<ConstructorParameters<typeof VectorLayer>[0], "source">;
|
|
55
60
|
export type VectorLayerComponentProps = VectorLayerOptions & {
|
|
56
61
|
features: import('../Feature').Feature[] | import('../FeatureCollection').FeatureCollection;
|
|
@@ -18,7 +18,7 @@ class FeatureRenderer {
|
|
|
18
18
|
}
|
|
19
19
|
const feature = this.feature;
|
|
20
20
|
const { projection, transform, pixelRatio } = frameState.viewState;
|
|
21
|
-
const { stroke, fill } = this.style;
|
|
21
|
+
const { stroke, fill, pointRadius } = this.style;
|
|
22
22
|
const geometries = feature.getProjectedGeometries(projection);
|
|
23
23
|
if (frameState.debug) {
|
|
24
24
|
try {
|
|
@@ -31,6 +31,11 @@ class FeatureRenderer {
|
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
}
|
|
34
|
+
if (pointRadius) {
|
|
35
|
+
this.drawingFunction.pointRadius(
|
|
36
|
+
projection.scale() * pointRadius / transform.k
|
|
37
|
+
);
|
|
38
|
+
}
|
|
34
39
|
this.drawPath(geometries, context);
|
|
35
40
|
if (fill) {
|
|
36
41
|
fill.drawInContext(context, transform.k);
|
|
@@ -36,14 +36,13 @@ class MapRenderer {
|
|
|
36
36
|
}
|
|
37
37
|
viewState.projection = projection;
|
|
38
38
|
};
|
|
39
|
-
const baseLayers = visibleLayers.filter((layer) => !layer.declutter);
|
|
40
|
-
for (const layer of baseLayers) {
|
|
41
|
-
renderLayer(layer);
|
|
42
|
-
}
|
|
43
39
|
const declutterTree = new RBush();
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
40
|
+
for (const layer of visibleLayers) {
|
|
41
|
+
if (layer.declutter) {
|
|
42
|
+
renderLayer(layer, declutterTree);
|
|
43
|
+
} else {
|
|
44
|
+
renderLayer(layer);
|
|
45
|
+
}
|
|
47
46
|
}
|
|
48
47
|
replaceChildren(this._element, mapElements);
|
|
49
48
|
}
|
|
@@ -43,10 +43,12 @@ class TextLayerRenderer {
|
|
|
43
43
|
x: relativeX * viewPortSize[0],
|
|
44
44
|
y: relativeY * viewPortSize[1]
|
|
45
45
|
});
|
|
46
|
-
if (declutterTree
|
|
47
|
-
|
|
46
|
+
if (declutterTree) {
|
|
47
|
+
if (declutterTree.collides(bbox)) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
declutterTree.insert(bbox);
|
|
48
51
|
}
|
|
49
|
-
declutterTree.insert(bbox);
|
|
50
52
|
if (this.layer.drawCollisionBoxes) {
|
|
51
53
|
const collisionBoxDebugElement = this.getCollisionBoxElement(bbox);
|
|
52
54
|
textElements.push(collisionBoxDebugElement);
|
|
@@ -10,12 +10,14 @@
|
|
|
10
10
|
* @property {Object} properties.stroke - The stroke color of the style
|
|
11
11
|
* @property {Fill} properties.fill - The fill color of the style
|
|
12
12
|
* @property {Object} properties.text - The text color of the style
|
|
13
|
+
* @property {number} properties.pointRadius - Radius of drawn "Point"-type geometries, if present
|
|
13
14
|
*/
|
|
14
15
|
export class Style {
|
|
15
16
|
constructor(properties: any);
|
|
16
17
|
stroke: any;
|
|
17
18
|
fill: any;
|
|
18
19
|
text: any;
|
|
20
|
+
pointRadius: any;
|
|
19
21
|
clone(): Style;
|
|
20
22
|
}
|
|
21
23
|
/**
|
|
@@ -3,12 +3,14 @@ class Style {
|
|
|
3
3
|
this.stroke = properties == null ? void 0 : properties.stroke;
|
|
4
4
|
this.fill = properties == null ? void 0 : properties.fill;
|
|
5
5
|
this.text = properties == null ? void 0 : properties.text;
|
|
6
|
+
this.pointRadius = properties == null ? void 0 : properties.pointRadius;
|
|
6
7
|
}
|
|
7
8
|
clone() {
|
|
8
9
|
return new Style({
|
|
9
10
|
stroke: this.stroke,
|
|
10
11
|
fill: this.fill,
|
|
11
|
-
text: this.text
|
|
12
|
+
text: this.text,
|
|
13
|
+
pointRadius: this.pointRadius
|
|
12
14
|
});
|
|
13
15
|
}
|
|
14
16
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
const optionPicker = "
|
|
2
|
-
const title = "
|
|
3
|
-
const options = "
|
|
4
|
-
const option = "
|
|
5
|
-
const selected = "
|
|
6
|
-
const optionIconContainer = "
|
|
7
|
-
const optionIcon = "
|
|
8
|
-
const optionTitle = "
|
|
9
|
-
const checkmark = "
|
|
10
|
-
const checkmarkPath = "
|
|
1
|
+
const optionPicker = "_optionPicker_1c1rh_1";
|
|
2
|
+
const title = "_title_1c1rh_13";
|
|
3
|
+
const options = "_options_1c1rh_20";
|
|
4
|
+
const option = "_option_1c1rh_1";
|
|
5
|
+
const selected = "_selected_1c1rh_47";
|
|
6
|
+
const optionIconContainer = "_optionIconContainer_1c1rh_56";
|
|
7
|
+
const optionIcon = "_optionIcon_1c1rh_56";
|
|
8
|
+
const optionTitle = "_optionTitle_1c1rh_68";
|
|
9
|
+
const checkmark = "_checkmark_1c1rh_79";
|
|
10
|
+
const checkmarkPath = "_checkmarkPath_1c1rh_83";
|
|
11
11
|
const defaultStyles = {
|
|
12
12
|
optionPicker,
|
|
13
13
|
title,
|
|
@@ -15,10 +15,10 @@ import "../svg-map/index.js";
|
|
|
15
15
|
import "../canvas-map/lib/Map.js";
|
|
16
16
|
import "d3-polygon";
|
|
17
17
|
import "../canvas-map/lib/projection/index.js";
|
|
18
|
-
import "
|
|
18
|
+
import "../canvas-map/lib/layers/TextLayer.js";
|
|
19
|
+
import "../canvas-map/lib/layers/VectorLayer.js";
|
|
19
20
|
import "rbush";
|
|
20
21
|
import "rbush-knn";
|
|
21
|
-
import "../canvas-map/context/MapContext.js";
|
|
22
22
|
import "../canvas-map/Map.js";
|
|
23
23
|
function ResultSummary({
|
|
24
24
|
previous,
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
const tickerVertical = "
|
|
2
|
-
const ticker = "
|
|
3
|
-
const tickerItems = "
|
|
4
|
-
const tickerScrollVertical = "
|
|
5
|
-
const tickerScroll = "
|
|
6
|
-
const tickerItem = "
|
|
7
|
-
const controls = "
|
|
8
|
-
const gradient = "
|
|
9
|
-
const gradientHorizontal = "
|
|
10
|
-
const buttons = "
|
|
11
|
-
const button = "
|
|
12
|
-
const buttonInner = "
|
|
1
|
+
const tickerVertical = "_tickerVertical_1at7j_9";
|
|
2
|
+
const ticker = "_ticker_1at7j_9";
|
|
3
|
+
const tickerItems = "_tickerItems_1at7j_28";
|
|
4
|
+
const tickerScrollVertical = "_tickerScrollVertical_1at7j_33";
|
|
5
|
+
const tickerScroll = "_tickerScroll_1at7j_33";
|
|
6
|
+
const tickerItem = "_tickerItem_1at7j_28";
|
|
7
|
+
const controls = "_controls_1at7j_76";
|
|
8
|
+
const gradient = "_gradient_1at7j_91";
|
|
9
|
+
const gradientHorizontal = "_gradientHorizontal_1at7j_103";
|
|
10
|
+
const buttons = "_buttons_1at7j_118";
|
|
11
|
+
const button = "_button_1at7j_118";
|
|
12
|
+
const buttonInner = "_buttonInner_1at7j_144";
|
|
13
13
|
const styles = {
|
|
14
14
|
tickerVertical,
|
|
15
15
|
ticker,
|
|
@@ -2,7 +2,7 @@ import { jsx } from "preact/jsx-runtime";
|
|
|
2
2
|
import defaultStyles from "./style.module.css.js";
|
|
3
3
|
import { mergeStyles } from "../../../styles/helpers/mergeStyles.js";
|
|
4
4
|
import dayjs from "dayjs";
|
|
5
|
-
import relativeTime from "dayjs/plugin/relativeTime";
|
|
5
|
+
import relativeTime from "dayjs/plugin/relativeTime.js";
|
|
6
6
|
dayjs.extend(relativeTime);
|
|
7
7
|
const RelativeTimeSentence = ({ timeStamp, styles }) => {
|
|
8
8
|
styles = mergeStyles({ ...defaultStyles }, styles);
|
package/dist/style.css
CHANGED
|
@@ -3009,7 +3009,7 @@ body.android {
|
|
|
3009
3009
|
cursor: auto;
|
|
3010
3010
|
background-color: var(--tertiary-bg-color);
|
|
3011
3011
|
}
|
|
3012
|
-
.
|
|
3012
|
+
._optionPicker_1c1rh_1 {
|
|
3013
3013
|
background-color: rgba(255, 255, 255, 0.6);
|
|
3014
3014
|
border: 1px solid var(--border-divider-color);
|
|
3015
3015
|
border-radius: 8px;
|
|
@@ -3021,31 +3021,32 @@ body.android {
|
|
|
3021
3021
|
row-gap: 4px;
|
|
3022
3022
|
}
|
|
3023
3023
|
|
|
3024
|
-
.
|
|
3024
|
+
._title_1c1rh_13 {
|
|
3025
3025
|
color: var(--secondary-text-color);
|
|
3026
3026
|
font-family: var(--text-sans);
|
|
3027
3027
|
font-size: var(--sans-xxsmall);
|
|
3028
3028
|
line-height: var(--sans-line-height);
|
|
3029
3029
|
}
|
|
3030
3030
|
|
|
3031
|
-
.
|
|
3031
|
+
._options_1c1rh_20 {
|
|
3032
3032
|
display: flex;
|
|
3033
3033
|
flex-direction: row;
|
|
3034
3034
|
justify-content: stretch;
|
|
3035
3035
|
gap: var(--space-2);
|
|
3036
3036
|
}
|
|
3037
3037
|
|
|
3038
|
-
.
|
|
3038
|
+
._options_1c1rh_20.vertical {
|
|
3039
3039
|
flex-direction: column;
|
|
3040
3040
|
}
|
|
3041
3041
|
|
|
3042
|
-
.
|
|
3042
|
+
._option_1c1rh_1 {
|
|
3043
|
+
flex: 1;
|
|
3044
|
+
|
|
3043
3045
|
display: flex;
|
|
3044
3046
|
flex-direction: column;
|
|
3045
3047
|
align-items: center;
|
|
3046
3048
|
gap: var(--space-2);
|
|
3047
3049
|
min-height: 70px;
|
|
3048
|
-
max-width: 124px;
|
|
3049
3050
|
|
|
3050
3051
|
border: 1px solid var(--border-divider-color);
|
|
3051
3052
|
border-radius: 8px;
|
|
@@ -3054,16 +3055,16 @@ body.android {
|
|
|
3054
3055
|
background-color: var(--primary-bg-color);
|
|
3055
3056
|
}
|
|
3056
3057
|
|
|
3057
|
-
.
|
|
3058
|
+
._option_1c1rh_1._selected_1c1rh_47 {
|
|
3058
3059
|
border: 1px solid var(--primary-text-color);
|
|
3059
3060
|
}
|
|
3060
3061
|
|
|
3061
|
-
.
|
|
3062
|
+
._option_1c1rh_1:hover:enabled {
|
|
3062
3063
|
background-color: var(--news-grey-05);
|
|
3063
3064
|
cursor: pointer;
|
|
3064
3065
|
}
|
|
3065
3066
|
|
|
3066
|
-
.
|
|
3067
|
+
._optionIconContainer_1c1rh_56 {
|
|
3067
3068
|
width: 100%;
|
|
3068
3069
|
display: flex;
|
|
3069
3070
|
flex-direction: row;
|
|
@@ -3071,26 +3072,26 @@ body.android {
|
|
|
3071
3072
|
gap: var(--space-1);
|
|
3072
3073
|
}
|
|
3073
3074
|
|
|
3074
|
-
.
|
|
3075
|
+
._optionIcon_1c1rh_56 {
|
|
3075
3076
|
width: 100%;
|
|
3076
3077
|
}
|
|
3077
3078
|
|
|
3078
|
-
.
|
|
3079
|
+
._optionTitle_1c1rh_68 {
|
|
3079
3080
|
color: var(--primary-text-color);
|
|
3080
3081
|
font-family: var(--text-sans);
|
|
3081
3082
|
font-size: var(--sans-xxsmall);
|
|
3082
3083
|
line-height: var(--sans-line-height);
|
|
3083
3084
|
}
|
|
3084
3085
|
|
|
3085
|
-
.
|
|
3086
|
+
._option_1c1rh_1._selected_1c1rh_47 ._optionTitle_1c1rh_68 {
|
|
3086
3087
|
font-weight: 700;
|
|
3087
3088
|
}
|
|
3088
3089
|
|
|
3089
|
-
.
|
|
3090
|
+
._checkmark_1c1rh_79 {
|
|
3090
3091
|
width: 11px;
|
|
3091
3092
|
}
|
|
3092
3093
|
|
|
3093
|
-
.
|
|
3094
|
+
._checkmarkPath_1c1rh_83 {
|
|
3094
3095
|
fill: var(--primary-text-color);
|
|
3095
3096
|
}
|
|
3096
3097
|
body {
|
|
@@ -3199,30 +3200,31 @@ body.android {
|
|
|
3199
3200
|
--top-inset: 58px;
|
|
3200
3201
|
}
|
|
3201
3202
|
|
|
3202
|
-
.
|
|
3203
|
+
._tickerVertical_1at7j_9 {
|
|
3203
3204
|
position: relative;
|
|
3204
3205
|
padding-bottom: 44px;
|
|
3205
3206
|
--ticker-item-width: 100%;
|
|
3206
3207
|
}
|
|
3207
3208
|
@media (min-width: 30em) {
|
|
3208
|
-
.
|
|
3209
|
+
._tickerVertical_1at7j_9 {
|
|
3209
3210
|
--ticker-item-width: auto;
|
|
3210
3211
|
padding: 0;
|
|
3211
3212
|
}
|
|
3212
3213
|
}
|
|
3213
3214
|
|
|
3214
|
-
.
|
|
3215
|
+
._ticker_1at7j_9 {
|
|
3215
3216
|
position: relative;
|
|
3216
3217
|
--ticker-item-width: 200px;
|
|
3217
3218
|
padding: 0;
|
|
3219
|
+
cursor: default;
|
|
3218
3220
|
}
|
|
3219
3221
|
|
|
3220
|
-
.
|
|
3222
|
+
._tickerItems_1at7j_28 {
|
|
3221
3223
|
width: 100%;
|
|
3222
3224
|
overflow: clip;
|
|
3223
3225
|
}
|
|
3224
3226
|
|
|
3225
|
-
.
|
|
3227
|
+
._tickerScrollVertical_1at7j_33 {
|
|
3226
3228
|
display: flex;
|
|
3227
3229
|
flex-direction: column;
|
|
3228
3230
|
row-gap: var(--space-2);
|
|
@@ -3231,7 +3233,7 @@ body.android {
|
|
|
3231
3233
|
overflow: visible;
|
|
3232
3234
|
}
|
|
3233
3235
|
@media (min-width: 30em) {
|
|
3234
|
-
.
|
|
3236
|
+
._tickerScrollVertical_1at7j_33 {
|
|
3235
3237
|
flex-direction: row;
|
|
3236
3238
|
column-gap: var(--space-2);
|
|
3237
3239
|
transform: translateX(var(--ticker-offset));
|
|
@@ -3239,7 +3241,7 @@ body.android {
|
|
|
3239
3241
|
}
|
|
3240
3242
|
}
|
|
3241
3243
|
|
|
3242
|
-
.
|
|
3244
|
+
._tickerScroll_1at7j_33 {
|
|
3243
3245
|
display: flex;
|
|
3244
3246
|
flex-direction: row;
|
|
3245
3247
|
flex-wrap: nowrap;
|
|
@@ -3251,28 +3253,28 @@ body.android {
|
|
|
3251
3253
|
width: auto;
|
|
3252
3254
|
padding-right: 50px;
|
|
3253
3255
|
}
|
|
3254
|
-
.
|
|
3256
|
+
._tickerScroll_1at7j_33:-webkit-scrollbar {
|
|
3255
3257
|
display: none; /* for Chrome, Safari, and Opera */
|
|
3256
3258
|
}
|
|
3257
3259
|
@media (min-width: 30em) {
|
|
3258
|
-
.
|
|
3260
|
+
._tickerScroll_1at7j_33 {
|
|
3259
3261
|
width: fit-content;
|
|
3260
3262
|
}
|
|
3261
3263
|
}
|
|
3262
3264
|
|
|
3263
|
-
.
|
|
3265
|
+
._tickerItem_1at7j_28 {
|
|
3264
3266
|
width: var(--ticker-item-width);
|
|
3265
3267
|
flex-shrink: 0;
|
|
3266
3268
|
}
|
|
3267
3269
|
|
|
3268
|
-
.
|
|
3270
|
+
._controls_1at7j_76 {
|
|
3269
3271
|
position: absolute;
|
|
3270
3272
|
bottom: 0;
|
|
3271
3273
|
width: 100%;
|
|
3272
3274
|
height: 130px;
|
|
3273
3275
|
}
|
|
3274
3276
|
@media (min-width: 30em) {
|
|
3275
|
-
.
|
|
3277
|
+
._controls_1at7j_76 {
|
|
3276
3278
|
top: 0;
|
|
3277
3279
|
right: 0;
|
|
3278
3280
|
width: 86px;
|
|
@@ -3280,19 +3282,20 @@ body.android {
|
|
|
3280
3282
|
}
|
|
3281
3283
|
}
|
|
3282
3284
|
|
|
3283
|
-
.
|
|
3285
|
+
._gradient_1at7j_91 {
|
|
3284
3286
|
width: 100%;
|
|
3285
3287
|
height: 86px;
|
|
3286
3288
|
}
|
|
3287
3289
|
@media (min-width: 30em) {
|
|
3288
|
-
.
|
|
3290
|
+
._gradient_1at7j_91 {
|
|
3289
3291
|
width: auto;
|
|
3290
3292
|
height: 100%;
|
|
3291
3293
|
right: 0;
|
|
3292
3294
|
}
|
|
3293
3295
|
}
|
|
3294
3296
|
|
|
3295
|
-
.
|
|
3297
|
+
._gradientHorizontal_1at7j_103 {
|
|
3298
|
+
pointer-events: none;
|
|
3296
3299
|
width: 60px;
|
|
3297
3300
|
height: 100%;
|
|
3298
3301
|
right: 0;
|
|
@@ -3301,16 +3304,16 @@ body.android {
|
|
|
3301
3304
|
background: linear-gradient(to right, transparent 0%, var(--tertiary-bg-color) 80%, var(--tertiary-bg-color));
|
|
3302
3305
|
}
|
|
3303
3306
|
@media (min-width: 30em) {
|
|
3304
|
-
.
|
|
3307
|
+
._gradientHorizontal_1at7j_103 {
|
|
3305
3308
|
width: auto;
|
|
3306
3309
|
}
|
|
3307
3310
|
}
|
|
3308
3311
|
|
|
3309
|
-
.
|
|
3312
|
+
._buttons_1at7j_118 {
|
|
3310
3313
|
display: none;
|
|
3311
3314
|
}
|
|
3312
3315
|
@media (min-width: 30em) {
|
|
3313
|
-
.
|
|
3316
|
+
._buttons_1at7j_118 {
|
|
3314
3317
|
position: absolute;
|
|
3315
3318
|
top: 0;
|
|
3316
3319
|
right: var(--space-5);
|
|
@@ -3321,36 +3324,36 @@ body.android {
|
|
|
3321
3324
|
}
|
|
3322
3325
|
}
|
|
3323
3326
|
|
|
3324
|
-
.
|
|
3327
|
+
._button_1at7j_118 {
|
|
3325
3328
|
min-height: 40px;
|
|
3326
3329
|
background-color: var(--tertiary-bg-color);
|
|
3327
3330
|
padding-bottom: 20px;
|
|
3328
3331
|
}
|
|
3329
3332
|
@media (min-width: 30em) {
|
|
3330
|
-
.
|
|
3333
|
+
._button_1at7j_118 {
|
|
3331
3334
|
display: none;
|
|
3332
3335
|
}
|
|
3333
3336
|
}
|
|
3334
3337
|
|
|
3335
|
-
.
|
|
3338
|
+
._buttonInner_1at7j_144 {
|
|
3336
3339
|
background-color: var(--tertiary-bg-color);
|
|
3337
3340
|
}
|
|
3338
3341
|
|
|
3339
|
-
.
|
|
3342
|
+
._tickerVertical_1at7j_9[data-expanded=true] {
|
|
3340
3343
|
padding-bottom: 0;
|
|
3341
3344
|
}
|
|
3342
3345
|
|
|
3343
|
-
.
|
|
3346
|
+
._tickerVertical_1at7j_9[data-expanded=true] ._tickerScrollVertical_1at7j_33 {
|
|
3344
3347
|
max-height: fit-content;
|
|
3345
3348
|
margin-bottom: -40px;
|
|
3346
3349
|
}
|
|
3347
3350
|
|
|
3348
|
-
.
|
|
3351
|
+
._tickerVertical_1at7j_9[data-expanded=true] ._controls_1at7j_76 {
|
|
3349
3352
|
position: sticky;
|
|
3350
3353
|
margin-top: -40px;
|
|
3351
3354
|
}
|
|
3352
3355
|
|
|
3353
|
-
.
|
|
3356
|
+
._tickerVertical_1at7j_9[data-expanded=true] ._button_1at7j_118 {
|
|
3354
3357
|
position: absolute;
|
|
3355
3358
|
width: 100%;
|
|
3356
3359
|
left: 0;
|