@barchart/chart-lib 2.106.1 → 2.183.2
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.
- chart-lib/AMZN_Daily.json +6042 -0
- chart-lib/AMZN_Events.json +462 -0
- {package → chart-lib}/README.md +9 -15
- {package → chart-lib}/barchart.chart.d.ts +174 -21
- chart-lib/barchart.chart.js +2 -0
- chart-lib/chart.def.json +132 -0
- chart-lib/index.html +20 -0
- chart-lib/index.js +195 -0
- {package → chart-lib}/package.json +8 -2
- chart-lib/style.css +171 -0
- package/barchart.chart.js +0 -15
chart-lib/chart.def.json
ADDED
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
{
|
|
2
|
+
"data": {
|
|
3
|
+
"aggregation": {
|
|
4
|
+
"unit": "Day",
|
|
5
|
+
"size": 1
|
|
6
|
+
},
|
|
7
|
+
"maxDataPoints": 300
|
|
8
|
+
},
|
|
9
|
+
"display": {
|
|
10
|
+
"density": 92,
|
|
11
|
+
"chart": {
|
|
12
|
+
"backgroundColor": "#111",
|
|
13
|
+
"fontFamily": "Open Sans",
|
|
14
|
+
"previous": {
|
|
15
|
+
"color": "#b0b0b0",
|
|
16
|
+
"dashStyle": "LongDashDot",
|
|
17
|
+
"forceVisible": true
|
|
18
|
+
},
|
|
19
|
+
"exportUrl": "/export/image",
|
|
20
|
+
"newPaneHeight": 1
|
|
21
|
+
},
|
|
22
|
+
"scrollbar": {
|
|
23
|
+
"barColor": "#808083",
|
|
24
|
+
"buttonColor": "#606063",
|
|
25
|
+
"trackColor": "#404043",
|
|
26
|
+
"visible": true
|
|
27
|
+
},
|
|
28
|
+
"scrollBehavior": "wheel",
|
|
29
|
+
"tooltip": {
|
|
30
|
+
"mode": "standard",
|
|
31
|
+
"visible": true,
|
|
32
|
+
"backgroundColor": "#000",
|
|
33
|
+
"showMainPlot": true
|
|
34
|
+
},
|
|
35
|
+
"xAxis": {
|
|
36
|
+
"visible": true,
|
|
37
|
+
"gridLines": {
|
|
38
|
+
"visible": true,
|
|
39
|
+
"color": "#1f1f1f"
|
|
40
|
+
},
|
|
41
|
+
"textColor": "#fff",
|
|
42
|
+
"crosshair": {
|
|
43
|
+
"enabled": true,
|
|
44
|
+
"showValue": true,
|
|
45
|
+
"color": "#494949",
|
|
46
|
+
"dashStyle": "Solid",
|
|
47
|
+
"snap": true,
|
|
48
|
+
"format": "{value:%m/%d/%Y}"
|
|
49
|
+
},
|
|
50
|
+
"minTickInterval": 0,
|
|
51
|
+
"equidistant": true,
|
|
52
|
+
"marginBars": 5
|
|
53
|
+
},
|
|
54
|
+
"yAxis": {
|
|
55
|
+
"visible": true,
|
|
56
|
+
"gridLines": {
|
|
57
|
+
"visible": true,
|
|
58
|
+
"color": "#1f1f1f"
|
|
59
|
+
},
|
|
60
|
+
"textColor": "#fff",
|
|
61
|
+
"showLastValue": "All",
|
|
62
|
+
"crosshair": {
|
|
63
|
+
"enabled": true,
|
|
64
|
+
"showValue": true,
|
|
65
|
+
"color": "#494949",
|
|
66
|
+
"dashStyle": "Solid",
|
|
67
|
+
"snap": false
|
|
68
|
+
},
|
|
69
|
+
"preventLabelOverlap": false,
|
|
70
|
+
"maxPadding": 0.1,
|
|
71
|
+
"snapAnnotationsToPrices": true
|
|
72
|
+
},
|
|
73
|
+
"annotationTraits": {
|
|
74
|
+
"line": {
|
|
75
|
+
"width": 1,
|
|
76
|
+
"color": "#888",
|
|
77
|
+
"dashStyle": "Solid"
|
|
78
|
+
},
|
|
79
|
+
"fill": {
|
|
80
|
+
"color": "rgba(136,136,136,0.3)"
|
|
81
|
+
},
|
|
82
|
+
"zIndex": 8
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"panes": [
|
|
86
|
+
{
|
|
87
|
+
"axes": [
|
|
88
|
+
{
|
|
89
|
+
"plots": [
|
|
90
|
+
{
|
|
91
|
+
"curves": [
|
|
92
|
+
{
|
|
93
|
+
"attributes": ["OpenVsClose"],
|
|
94
|
+
"colors": ["#b63400", "#007f3e", "#1664db", "#333", "#777"],
|
|
95
|
+
"fields": ["Open", "High", "Low", "Close", "Change"],
|
|
96
|
+
"style": "Candlestick",
|
|
97
|
+
"varyColorPerBar": true,
|
|
98
|
+
"lineWidth": 1
|
|
99
|
+
}
|
|
100
|
+
],
|
|
101
|
+
"main": true,
|
|
102
|
+
"symbol": "PLACEHOLDER",
|
|
103
|
+
"type": "Symbol",
|
|
104
|
+
"showPrevious": false,
|
|
105
|
+
"events": {
|
|
106
|
+
"earnings": {
|
|
107
|
+
"show": true
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
],
|
|
112
|
+
"comparison": "None",
|
|
113
|
+
"scale": "Linear"
|
|
114
|
+
}
|
|
115
|
+
],
|
|
116
|
+
"height": 4
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"axes": [
|
|
120
|
+
{
|
|
121
|
+
"plots": [
|
|
122
|
+
{
|
|
123
|
+
"type": "Study",
|
|
124
|
+
"study": "VOL"
|
|
125
|
+
}
|
|
126
|
+
]
|
|
127
|
+
}
|
|
128
|
+
]
|
|
129
|
+
}
|
|
130
|
+
],
|
|
131
|
+
"version": 21
|
|
132
|
+
}
|
chart-lib/index.html
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
|
|
3
|
+
<html lang="en">
|
|
4
|
+
<head>
|
|
5
|
+
<title>Demo Barchart Chart SDK</title>
|
|
6
|
+
<link rel="stylesheet" href="https://unpkg.com/normalize.css@8.0.1/normalize.css" />
|
|
7
|
+
<link
|
|
8
|
+
href="https://fonts.googleapis.com/css?family=Open+Sans:400,400i,700,700i"
|
|
9
|
+
rel="stylesheet"
|
|
10
|
+
type="text/css"
|
|
11
|
+
/>
|
|
12
|
+
<link rel="stylesheet" href="style.css" />
|
|
13
|
+
</head>
|
|
14
|
+
<body style="overflow: hidden">
|
|
15
|
+
<div class="root">
|
|
16
|
+
<div id="root"></div>
|
|
17
|
+
</div>
|
|
18
|
+
<script type="module" src="./index.js"></script>
|
|
19
|
+
</body>
|
|
20
|
+
</html>
|
chart-lib/index.js
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import {
|
|
2
|
+
initFeed,
|
|
3
|
+
BaseDataFeed,
|
|
4
|
+
BaseRecordSource,
|
|
5
|
+
TimeSeriesContainer,
|
|
6
|
+
Fields,
|
|
7
|
+
formatPriceWithDecimals,
|
|
8
|
+
asyncReady,
|
|
9
|
+
PubSub,
|
|
10
|
+
ChunkPart,
|
|
11
|
+
Topics,
|
|
12
|
+
SeriesKind,
|
|
13
|
+
} from "./barchart.chart.js";
|
|
14
|
+
|
|
15
|
+
const ohlcFields = [
|
|
16
|
+
Fields.DateTime,
|
|
17
|
+
Fields.Open,
|
|
18
|
+
Fields.High,
|
|
19
|
+
Fields.Low,
|
|
20
|
+
Fields.Close,
|
|
21
|
+
Fields.Volume,
|
|
22
|
+
Fields.Change,
|
|
23
|
+
];
|
|
24
|
+
|
|
25
|
+
const chunkSize = 180;
|
|
26
|
+
let _jsonData = {};
|
|
27
|
+
|
|
28
|
+
const dailyFileName = "AMZN_Daily.json";
|
|
29
|
+
const eventsFileName = "AMZN_Events.json";
|
|
30
|
+
|
|
31
|
+
async function getData(fileName) {
|
|
32
|
+
if (_jsonData[fileName] == null) {
|
|
33
|
+
const resp = await fetch(`./${fileName}`);
|
|
34
|
+
_jsonData[fileName] = await resp.json();
|
|
35
|
+
}
|
|
36
|
+
return _jsonData[fileName];
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
class ExampleTimeSeries {
|
|
40
|
+
constructor(query) {
|
|
41
|
+
this.query = query;
|
|
42
|
+
this.container = null;
|
|
43
|
+
this.canLoadMoreData = true;
|
|
44
|
+
this.isLoading = false;
|
|
45
|
+
}
|
|
46
|
+
get hasData() {
|
|
47
|
+
return this.container !== null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
async loadMoreData(headChunk = true) {
|
|
51
|
+
if (this.isLoading) return Promise.resolve();
|
|
52
|
+
this.isLoading = true;
|
|
53
|
+
const data = await getData(dailyFileName);
|
|
54
|
+
|
|
55
|
+
const loaded = this.container !== null ? this.container.size : 0;
|
|
56
|
+
if (data.length === loaded) {
|
|
57
|
+
this.canLoadMoreData = false;
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const container = new TimeSeriesContainer(ohlcFields);
|
|
62
|
+
let precedingClose = null;
|
|
63
|
+
const to = data.length - loaded;
|
|
64
|
+
const from = Math.max(0, to - chunkSize);
|
|
65
|
+
for (let i = from; i < to; ++i) {
|
|
66
|
+
const row = data[i];
|
|
67
|
+
container.addDataPoint(Fields.DateTime, new Date(row.date));
|
|
68
|
+
container.addDataPoint(Fields.Open, row.open);
|
|
69
|
+
container.addDataPoint(Fields.High, row.high);
|
|
70
|
+
container.addDataPoint(Fields.Low, row.low);
|
|
71
|
+
container.addDataPoint(Fields.Close, row.close);
|
|
72
|
+
container.addDataPoint(Fields.Volume, row.volume);
|
|
73
|
+
container.addDataPoint(Fields.Change, precedingClose != null ? row.close - precedingClose : null);
|
|
74
|
+
precedingClose = row.close;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (!headChunk) this.container = container;
|
|
78
|
+
else this.container.prepend(container);
|
|
79
|
+
this.isLoading = false;
|
|
80
|
+
if (headChunk) {
|
|
81
|
+
// the first chunk is loaded implicitly during the call to ready method below
|
|
82
|
+
// so there's no need for notification
|
|
83
|
+
PubSub.publish(Topics.TS_MANYCHANGED, {
|
|
84
|
+
series: this,
|
|
85
|
+
part: ChunkPart.Head,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
async ready() {
|
|
90
|
+
return asyncReady.call(this, async () => {
|
|
91
|
+
await this.loadMoreData(false);
|
|
92
|
+
return true;
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
class ExampleEventsSeries {
|
|
98
|
+
constructor(query) {
|
|
99
|
+
this.query = query;
|
|
100
|
+
this.container = null;
|
|
101
|
+
}
|
|
102
|
+
get hasData() {
|
|
103
|
+
return this.container !== null;
|
|
104
|
+
}
|
|
105
|
+
async loadAndParse() {
|
|
106
|
+
const data = await getData(eventsFileName);
|
|
107
|
+
const suffix = "T00:00:00";
|
|
108
|
+
this.container = new TimeSeriesContainer([
|
|
109
|
+
Fields.DateTime,
|
|
110
|
+
Fields.Dividends,
|
|
111
|
+
Fields.Earnings,
|
|
112
|
+
Fields.Splits,
|
|
113
|
+
]);
|
|
114
|
+
const addValue = (field, row) => {
|
|
115
|
+
const matching = field.id === row.kind ? row.value : null;
|
|
116
|
+
this.container.addDataPoint(field, matching);
|
|
117
|
+
};
|
|
118
|
+
data.forEach(row => {
|
|
119
|
+
this.container.addDataPoint(Fields.DateTime, new Date(Date.parse(row.date + suffix)));
|
|
120
|
+
this.container.fields.filter(f => f !== Fields.DateTime).forEach(f => addValue(f, row));
|
|
121
|
+
});
|
|
122
|
+
return Promise.resolve(true);
|
|
123
|
+
}
|
|
124
|
+
async ready() {
|
|
125
|
+
return asyncReady.call(this, this.loadAndParse);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
class ExampleTimeSeriesSource {
|
|
130
|
+
getTimeSeries(query) {
|
|
131
|
+
const kind = query.seriesKind || SeriesKind.Normal;
|
|
132
|
+
const isAmazon = query.symbol === "AMZN";
|
|
133
|
+
if (kind === SeriesKind.Normal) return isAmazon ? new ExampleTimeSeries(query) : null;
|
|
134
|
+
else if (kind === SeriesKind.Events) return isAmazon ? new ExampleEventsSeries(query) : null;
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
class ExampleMetaData {
|
|
140
|
+
constructor(decimals) {
|
|
141
|
+
this._decimals = decimals;
|
|
142
|
+
}
|
|
143
|
+
async ready() {
|
|
144
|
+
return true;
|
|
145
|
+
}
|
|
146
|
+
format(price, _field, _options) {
|
|
147
|
+
return formatPriceWithDecimals(price, this._decimals);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
class ExampleMetaDataSource {
|
|
152
|
+
getMetaData(symbol) {
|
|
153
|
+
return new ExampleMetaData(symbol === "AMZN" ? 2 : 0);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
class ExampleRecord {
|
|
158
|
+
async ready() {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
hasField(_field) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
getValue(_field) {
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
class ExampleRecordSource extends BaseRecordSource {
|
|
170
|
+
getRecord(symbol) {
|
|
171
|
+
return symbol === "AMZN" ? new ExampleRecord() : null;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
class ExampleFeed extends BaseDataFeed {
|
|
176
|
+
constructor(config) {
|
|
177
|
+
super(config);
|
|
178
|
+
this.timeSeriesSource = new ExampleTimeSeriesSource();
|
|
179
|
+
this.metaDataSource = new ExampleMetaDataSource();
|
|
180
|
+
this.recordSource = new ExampleRecordSource();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const feed = initFeed(ExampleFeed, {
|
|
185
|
+
throttleMillis: 250,
|
|
186
|
+
apiKey: "<YOUR_API_KEY>",
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
feed.ready().then(done => {
|
|
190
|
+
if (done) {
|
|
191
|
+
feed.addChart("root", {
|
|
192
|
+
symbol: `AMZN`,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
});
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@barchart/chart-lib",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.183.2",
|
|
4
4
|
"description": "Barchart HTML5 Streaming Chart",
|
|
5
5
|
"main": "barchart.chart.js",
|
|
6
6
|
"types": "barchart.chart.d.ts",
|
|
7
7
|
"license": "UNLICENSED",
|
|
8
8
|
"files": [
|
|
9
|
-
"
|
|
9
|
+
"AMZN_Daily.json",
|
|
10
|
+
"AMZN_Events.json",
|
|
11
|
+
"barchart.chart.d.ts",
|
|
12
|
+
"chart.def.json",
|
|
13
|
+
"index.html",
|
|
14
|
+
"index.js",
|
|
15
|
+
"style.css"
|
|
10
16
|
]
|
|
11
17
|
}
|
chart-lib/style.css
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
html {
|
|
2
|
+
font-family: "Open Sans", serif;
|
|
3
|
+
font-size: 14px;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.root {
|
|
7
|
+
box-sizing: border-box;
|
|
8
|
+
display: flex;
|
|
9
|
+
flex-direction: column;
|
|
10
|
+
height: 100vh;
|
|
11
|
+
width: 100vw;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.root * {
|
|
15
|
+
box-sizing: inherit;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.bcharts-tooltip {
|
|
19
|
+
background-color: #222;
|
|
20
|
+
color: #ccc;
|
|
21
|
+
cursor: default;
|
|
22
|
+
font-size: 12px;
|
|
23
|
+
pointer-events: none;
|
|
24
|
+
white-space: nowrap;
|
|
25
|
+
box-shadow: 1px 1px 3px darkgray;
|
|
26
|
+
z-index: 4;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.bcharts-tooltip table tr td {
|
|
30
|
+
padding: 0 5px !important;
|
|
31
|
+
border-bottom: none;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.bcharts-tooltip .field-value {
|
|
35
|
+
text-align: right;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.bcharts-card {
|
|
39
|
+
z-index: 4;
|
|
40
|
+
background: rgba(0, 0, 0, 0);
|
|
41
|
+
line-height: 1.6;
|
|
42
|
+
font-size: 13px;
|
|
43
|
+
padding: 3px;
|
|
44
|
+
vertical-align: center;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.bcharts-card-first {
|
|
48
|
+
margin-top: 0px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.bcharts-card .plot {
|
|
52
|
+
vertical-align: middle;
|
|
53
|
+
margin-left: 5px;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.bcharts-card .plot:first-of-type {
|
|
57
|
+
display: inline;
|
|
58
|
+
margin-left: 5px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.bcharts-card .value-title {
|
|
62
|
+
color: #fff;
|
|
63
|
+
cursor: pointer;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.bcharts-card .value-subtitle {
|
|
67
|
+
color: #888;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.bcharts-card .field-name {
|
|
71
|
+
color: #777;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.bcharts-card .field-value {
|
|
75
|
+
font-weight: 500;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.bcharts-card .field-up-value {
|
|
79
|
+
color: #1c4;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.bcharts-card .field-down-value {
|
|
83
|
+
color: #f03;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.bcharts-card .field-same-value {
|
|
87
|
+
color: #58f;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.bcharts-card .curve-color {
|
|
91
|
+
padding-right: 2px;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
.bcharts-card .move-pane {
|
|
95
|
+
padding: 3px;
|
|
96
|
+
fill: #ffd1dc;
|
|
97
|
+
cursor: pointer;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.bcharts-card .delete-plot {
|
|
101
|
+
padding: 3px;
|
|
102
|
+
fill: #999;
|
|
103
|
+
cursor: pointer;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.bcharts-card .delete-plot:hover {
|
|
107
|
+
fill: #f00;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.bubble-box {
|
|
111
|
+
background-color: #272e32;
|
|
112
|
+
box-shadow: 0px 0px 0px 1px #3a4850, 0px 2px 3px rgba(#000, 0.6);
|
|
113
|
+
border-radius: 1px 1px 0 1px;
|
|
114
|
+
padding: 8px 10px;
|
|
115
|
+
line-height: 18px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.bubble-box-date {
|
|
119
|
+
color: rgba(200, 201, 201, 0.8);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.bubble-box-last {
|
|
123
|
+
font-size: 18px;
|
|
124
|
+
font-weight: 700;
|
|
125
|
+
color: #fff;
|
|
126
|
+
margin-bottom: 2px;
|
|
127
|
+
margin-top: 1px;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
.bubble-box-values {
|
|
131
|
+
padding-left: 15px;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.bubble-box-volume {
|
|
135
|
+
color: rgba(200, 201, 201, 0.8);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.bubble-box-label {
|
|
139
|
+
padding-right: 5px;
|
|
140
|
+
color: rgba(200, 201, 201, 0.8);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.bubble-box-value {
|
|
144
|
+
padding-left: 5px;
|
|
145
|
+
color: #fff;
|
|
146
|
+
font-weight: 400;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.bcharts-logo {
|
|
150
|
+
opacity: 0.15;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.bcharts-logo .minor {
|
|
154
|
+
opacity: 0.55;
|
|
155
|
+
fill: #ccc;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.bcharts-logo .major {
|
|
159
|
+
fill: #ccc;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.go-to-latest {
|
|
163
|
+
cursor: pointer;
|
|
164
|
+
background-color: rgba(255, 255, 255, 0.9);
|
|
165
|
+
outline: none;
|
|
166
|
+
border: none;
|
|
167
|
+
padding: 0;
|
|
168
|
+
width: 24px;
|
|
169
|
+
height: 24px;
|
|
170
|
+
fill: #eee;
|
|
171
|
+
}
|