lightweight-charts-react-components 1.3.0 → 1.4.1
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/README.md +13 -0
- package/dist/index.d.ts +24 -11
- package/dist/lightweight-charts-react-components.mjs +4 -4
- package/dist/lightweight-charts-react-components.mjs.map +1 -1
- package/dist/lightweight-charts-react-components.standalone.js +2 -2
- package/dist/lightweight-charts-react-components.standalone.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -188,6 +188,12 @@ const volumeData = [
|
|
|
188
188
|
];
|
|
189
189
|
|
|
190
190
|
const chartOptions = {
|
|
191
|
+
// Important to set width and height for the chart
|
|
192
|
+
// Otherwise make chart container scale to its parent size by using containerProps, like:
|
|
193
|
+
// <Chart containerProps={{ style: { width: '100%', height: '100%' } }} />
|
|
194
|
+
// Chart itself automatically resizes to fit its container
|
|
195
|
+
width: 600,
|
|
196
|
+
height: 400,
|
|
191
197
|
// Chart options can be customized here
|
|
192
198
|
};
|
|
193
199
|
|
|
@@ -215,6 +221,13 @@ const App = () => {
|
|
|
215
221
|
export { App };
|
|
216
222
|
```
|
|
217
223
|
|
|
224
|
+
### Chart Container Sizing
|
|
225
|
+
|
|
226
|
+
The `Chart` component requires explicit width and height to render correctly. You can set these dimensions directly via the `options` prop or make the chart container scale to its parent size using the `containerProps` prop.
|
|
227
|
+
Note that the chart will automatically resize to fit its container.
|
|
228
|
+
|
|
229
|
+
There may be cases where the chart's parent HTML element has no size defined (for example, when the parent is a flex container with no defined height). In such cases, you need to ensure that the parent element has a defined size (width and height) for the chart to render properly.
|
|
230
|
+
|
|
218
231
|
## Examples
|
|
219
232
|
|
|
220
233
|
The [examples](https://github.com/ukorvl/lightweight-charts-react-components/blob/main/examples/) app itself is a [Demo](https://ukorvl.github.io/lightweight-charts-react-components/) web application, but it contains a lot of examples of how to use the library. You can find the source code in the [samples folder](https://github.com/ukorvl/lightweight-charts-react-components/blob/main/examples/src/samples).
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
/**!
|
|
3
|
-
* lightweight-charts-react-components v1.
|
|
3
|
+
* lightweight-charts-react-components v1.4.1
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
6
6
|
* LICENSE.md file in the root directory of this source tree.
|
|
@@ -35,6 +35,7 @@ import type { ReactNode } from 'react';
|
|
|
35
35
|
import type { RefAttributes } from 'react';
|
|
36
36
|
import type { SeriesDataItemTypeMap } from 'lightweight-charts';
|
|
37
37
|
import type { SeriesMarker } from 'lightweight-charts';
|
|
38
|
+
import type { SeriesMarkersOptions } from 'lightweight-charts';
|
|
38
39
|
import type { SeriesPartialOptionsMap } from 'lightweight-charts';
|
|
39
40
|
import type { SeriesType } from 'lightweight-charts';
|
|
40
41
|
import type { SizeChangeEventHandler } from 'lightweight-charts';
|
|
@@ -62,7 +63,7 @@ import type { TimeScaleOptions as TimeScaleOptions_2 } from 'lightweight-charts'
|
|
|
62
63
|
* />
|
|
63
64
|
* ```
|
|
64
65
|
*/
|
|
65
|
-
export declare const AreaSeries:
|
|
66
|
+
export declare const AreaSeries: SeriesForwardRefComponent<"Area">;
|
|
66
67
|
|
|
67
68
|
/**
|
|
68
69
|
* BarSeries component that can be used to create a bar series in a chart.
|
|
@@ -83,7 +84,7 @@ export declare const AreaSeries: ForwardRefExoticComponent<SeriesProps<"Area"> &
|
|
|
83
84
|
* />
|
|
84
85
|
* ```
|
|
85
86
|
*/
|
|
86
|
-
export declare const BarSeries:
|
|
87
|
+
export declare const BarSeries: SeriesForwardRefComponent<"Bar">;
|
|
87
88
|
|
|
88
89
|
/**
|
|
89
90
|
* BaselineSeries component that can be used to create a baseline series in a chart.
|
|
@@ -104,7 +105,7 @@ export declare const BarSeries: ForwardRefExoticComponent<SeriesProps<"Bar"> & R
|
|
|
104
105
|
* />
|
|
105
106
|
* ```
|
|
106
107
|
*/
|
|
107
|
-
export declare const BaselineSeries:
|
|
108
|
+
export declare const BaselineSeries: SeriesForwardRefComponent<"Baseline">;
|
|
108
109
|
|
|
109
110
|
/**
|
|
110
111
|
* CandlestickSeries component that can be used to create a candlestick series in a chart.
|
|
@@ -125,7 +126,7 @@ export declare const BaselineSeries: ForwardRefExoticComponent<SeriesProps<"Base
|
|
|
125
126
|
* />
|
|
126
127
|
* ```
|
|
127
128
|
*/
|
|
128
|
-
export declare const CandlestickSeries:
|
|
129
|
+
export declare const CandlestickSeries: SeriesForwardRefComponent<"Candlestick">;
|
|
129
130
|
|
|
130
131
|
/**
|
|
131
132
|
* Chart component that can be used to create a chart.
|
|
@@ -222,7 +223,7 @@ export declare type ChartProps = {
|
|
|
222
223
|
* />
|
|
223
224
|
* ```
|
|
224
225
|
*/
|
|
225
|
-
export declare const CustomSeries:
|
|
226
|
+
export declare const CustomSeries: SeriesForwardRefComponent<"Custom">;
|
|
226
227
|
|
|
227
228
|
/**
|
|
228
229
|
* Unique properties for the custom series component.
|
|
@@ -259,7 +260,7 @@ declare type GenericSeriesPrimitiveComponent = (<T extends SeriesType>(props: Se
|
|
|
259
260
|
* />
|
|
260
261
|
* ```
|
|
261
262
|
*/
|
|
262
|
-
export declare const HistogramSeries:
|
|
263
|
+
export declare const HistogramSeries: SeriesForwardRefComponent<"Histogram">;
|
|
263
264
|
|
|
264
265
|
/**
|
|
265
266
|
* Unique properties for the image watermark component.
|
|
@@ -301,7 +302,7 @@ export declare interface IPaneContext {
|
|
|
301
302
|
* />
|
|
302
303
|
* ```
|
|
303
304
|
*/
|
|
304
|
-
export declare const LineSeries:
|
|
305
|
+
export declare const LineSeries: SeriesForwardRefComponent<"Line">;
|
|
305
306
|
|
|
306
307
|
/**
|
|
307
308
|
* Markers component that can be used to add markers to a chart pane.
|
|
@@ -309,8 +310,8 @@ export declare const LineSeries: ForwardRefExoticComponent<SeriesProps<"Line"> &
|
|
|
309
310
|
* @param props - The properties for the markers.
|
|
310
311
|
* @param ref - The ref to access the markers API.
|
|
311
312
|
* @returns A React component that renders the markers.
|
|
312
|
-
* @see {@link https://
|
|
313
|
-
* @see {@link https://tradingview.github.io/lightweight-charts/
|
|
313
|
+
* @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/markers | Documentation for Markers}
|
|
314
|
+
* @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/series-markers | TradingView documentation for markers}
|
|
314
315
|
* @example
|
|
315
316
|
* ```tsx
|
|
316
317
|
* <Markers
|
|
@@ -356,6 +357,10 @@ export declare type MarkersProps = {
|
|
|
356
357
|
/**
|
|
357
358
|
* Options for the markers.
|
|
358
359
|
*/
|
|
360
|
+
options?: DeepPartial<SeriesMarkersOptions>;
|
|
361
|
+
/**
|
|
362
|
+
* Whether markers should update reactively when marker list changes.
|
|
363
|
+
*/
|
|
359
364
|
reactive?: boolean;
|
|
360
365
|
};
|
|
361
366
|
|
|
@@ -550,6 +555,11 @@ export declare type SeriesApiRef<T extends SeriesType> = {
|
|
|
550
555
|
clear: () => void;
|
|
551
556
|
};
|
|
552
557
|
|
|
558
|
+
/**
|
|
559
|
+
* Forward ref component type for a series component.
|
|
560
|
+
*/
|
|
561
|
+
declare type SeriesForwardRefComponent<T extends SeriesType> = ForwardRefExoticComponent<SeriesProps<T> & RefAttributes<SeriesApiRef<T>>>;
|
|
562
|
+
|
|
553
563
|
/**
|
|
554
564
|
* Series options that can be used to customize the appearance and behavior of a series.
|
|
555
565
|
*/
|
|
@@ -705,7 +715,10 @@ export declare type TimeScaleFitContentTriggerProps = {
|
|
|
705
715
|
declare type TimeScaleOptions = DeepPartial<TimeScaleOptions_2>;
|
|
706
716
|
|
|
707
717
|
/**
|
|
708
|
-
* TimeScale component
|
|
718
|
+
* Props for the TimeScale component that controls chart time scale behavior.
|
|
719
|
+
*
|
|
720
|
+
* Use this component to configure how the chart's visible time/logical range is initialized
|
|
721
|
+
* and updated, and to react to time scale updates via event handlers.
|
|
709
722
|
*/
|
|
710
723
|
export declare type TimeScaleProps = {
|
|
711
724
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
/**!
|
|
3
|
-
* lightweight-charts-react-components v1.
|
|
3
|
+
* lightweight-charts-react-components v1.4.1
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
6
6
|
* LICENSE.md file in the root directory of this source tree.
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* @license MIT
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
import*as e from"react";import*as t from"lightweight-charts";let
|
|
11
|
+
import*as e from"react";import*as t from"lightweight-charts";let r=(0,e.createContext)(null);r.displayName="ChartContext";let i={addDefaultPane:!1},a=({container:r,onClick:a,onCrosshairMove:l,onInit:n,options:s={},onDblClick:u})=>{let[c,f]=(0,e.useState)(!1),p=(0,e.useRef)({_chart:null,api(){return this._chart},init(){if(null===this._chart){let e=(0,t.createChart)(r,{...i,...s});this._chart=e,n&&n(this._chart)}return c||f(!0),this._chart},clear(){null!==this._chart&&(f(!1),this._chart.remove(),this._chart=null)}});return(0,e.useLayoutEffect)(()=>(p.current.init(),()=>{p.current.clear()}),[]),(0,e.useLayoutEffect)(()=>{if(r){if(a){var e;null==(e=p.current.api())||e.subscribeClick(a)}return()=>{if(a){var e;null==(e=p.current.api())||e.unsubscribeClick(a)}}}},[a]),(0,e.useLayoutEffect)(()=>{if(r){if(l){var e;null==(e=p.current.api())||e.subscribeCrosshairMove(l)}return()=>{if(l){var e;null==(e=p.current.api())||e.unsubscribeCrosshairMove(l)}}}},[l]),(0,e.useLayoutEffect)(()=>{if(r){if(u){var e;null==(e=p.current.api())||e.subscribeDblClick(u)}return()=>{if(u){var e;null==(e=p.current.api())||e.unsubscribeDblClick(u)}}}},[u]),(0,e.useLayoutEffect)(()=>{var e;r&&(null==(e=p.current.api())||e.applyOptions({...i,...s}))},[s]),{chartApiRef:p,isReady:c}},l=({children:t,container:i,onClick:l,onCrosshairMove:n,onInit:s,options:u})=>{let{chartApiRef:{current:c},isReady:f}=a({container:i,onClick:l,onCrosshairMove:n,onInit:s,options:u});return e.default.createElement(r.Provider,{value:{chartApiRef:c,isReady:f}},t)},n=(0,e.forwardRef)(({children:t,containerProps:r,...i},a)=>{let[n,s]=(0,e.useState)(),u=(0,e.useCallback)(e=>{s(e),a&&("function"==typeof a?u(e):a.current=e)},[a]);return e.default.createElement("div",{ref:u,...r},!!n&&e.default.createElement(l,{container:n,...i},t))});n.displayName="ChartWrapper";let s=(0,e.createContext)(null);s.displayName="TimeScaleContext";let u="1.4.1";function c(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}class f extends Error{constructor(e,{isOperational:t=!0,cause:r,docsPath:i}={}){super(e),c(this,"isOperational",void 0),c(this,"cause",void 0),this.name=this.constructor.name??"InternalError",this.isOperational=t,this.cause=r,this.message=`${e??"An error occurred"}`,i&&(this.message=`${this.message}
|
|
12
12
|
|
|
13
|
-
Docs: see ${"https://ukorvl.github.io/lightweight-charts-react-components/docs/"+
|
|
13
|
+
Docs: see ${"https://ukorvl.github.io/lightweight-charts-react-components/docs/"+i}`),u&&(this.message=`${this.message}
|
|
14
14
|
|
|
15
|
-
Version: lightweight-charts-react-components@${u}`),Object.setPrototypeOf(this,f.prototype)}}let o=(t,i)=>{let r=(0,e.useContext)(t);if(!r){let e=t.name??t.displayName??"Context";throw new f(i??`${e} not found.`,{isOperational:!0})}return r},p=({onVisibleTimeRangeChange:t,onVisibleLogicalRangeChange:r,onSizeChange:a,visibleRange:l,visibleLogicalRange:n,options:s={}})=>{let{isReady:u,chartApiRef:c}=o(i),[f,p]=(0,e.useState)(!1),d=(0,e.useRef)({_timeScale:null,api(){return this._timeScale},init(){if(this._timeScale)return this._timeScale;let e=null==c?void 0:c.api();return e?(this._timeScale=e.timeScale(),this._timeScale.applyOptions(s),l&&this._timeScale.setVisibleRange(l),n&&this._timeScale.setVisibleLogicalRange(n),t&&this._timeScale.subscribeVisibleTimeRangeChange(t),r&&this._timeScale.subscribeVisibleLogicalRangeChange(r),a&&this._timeScale.subscribeSizeChange(a),p(!0),this._timeScale):null},clear(){this._timeScale=null,p(!1)}});return(0,e.useLayoutEffect)(()=>{u&&d.current.init()},[u]),(0,e.useLayoutEffect)(()=>()=>{d.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(c&&s){var e,t;null===(t=d.current)||void 0===t||null===(e=t.api())||void 0===e||e.applyOptions(s)}},[s]),(0,e.useLayoutEffect)(()=>{if(c){if(a){var e,t;null===(t=d.current)||void 0===t||null===(e=t.api())||void 0===e||e.subscribeSizeChange(a)}return()=>{if(a){var e,t;null===(t=d.current)||void 0===t||null===(e=t.api())||void 0===e||e.unsubscribeSizeChange(a)}}}},[a]),(0,e.useLayoutEffect)(()=>{if(c){if(r){var e,t;null===(t=d.current)||void 0===t||null===(e=t.api())||void 0===e||e.subscribeVisibleLogicalRangeChange(r)}return()=>{if(r){var e,t;null===(t=d.current)||void 0===t||null===(e=t.api())||void 0===e||e.unsubscribeVisibleLogicalRangeChange(r)}}}},[r]),(0,e.useLayoutEffect)(()=>{if(c){if(t){var e,i;null===(i=d.current)||void 0===i||null===(e=i.api())||void 0===e||e.subscribeVisibleTimeRangeChange(t)}return()=>{if(t){var e,i;null===(i=d.current)||void 0===i||null===(e=i.api())||void 0===e||e.unsubscribeVisibleTimeRangeChange(t)}}}},[t]),(0,e.useLayoutEffect)(()=>{if(c&&l){var e,t;null===(t=d.current)||void 0===t||null===(e=t.api())||void 0===e||e.setVisibleRange(l)}},[l]),(0,e.useLayoutEffect)(()=>{if(c&&n){var e,t;null===(t=d.current)||void 0===t||null===(e=t.api())||void 0===e||e.setVisibleLogicalRange(n)}},[n]),{timeScaleApiRef:d,isReady:f}},d=(0,e.forwardRef)(({children:t,...i},r)=>{let{timeScaleApiRef:{current:a},isReady:l}=p(i);return(0,e.useImperativeHandle)(r,()=>a,[a]),e.default.createElement(s.Provider,{value:{timeScaleApiRef:a,isReady:l}},t)});d.displayName="TimeScale";let h=(0,e.createContext)(null);h.displayName="PaneContext";let m=()=>{let t=(0,e.useContext)(h),i=!!t;return{isInsidePane:i,isPaneReady:!!(null==t?void 0:t.isReady),paneApiRef:null==t?void 0:t.paneApiRef}},v=({options:t={},id:r})=>{let{isReady:a,chartApiRef:l}=o(i),{isInsidePane:n,isPaneReady:s}=m(),u=(0,e.useRef)({_priceScale:null,api(){return this._priceScale},init(){if(!this._priceScale){let e=null==l?void 0:l.api();if(!e)return null;this._priceScale=e.priceScale(r),this._priceScale.applyOptions(t)}return this._priceScale},setId(e){null!==this._priceScale&&null!==l&&(this._priceScale=l.api().priceScale(e),this._priceScale.applyOptions(t))},clear(){this._priceScale=null}});return(0,e.useLayoutEffect)(()=>{if(a){if(!n)throw new f("PriceScale must be used inside a pane. Please ensure that the component is wrapped in a pane component.",{isOperational:!0,docsPath:""});s&&u.current.init()}},[a,n,s]),(0,e.useLayoutEffect)(()=>()=>{u.current.clear()},[]),(0,e.useLayoutEffect)(()=>{var e;l&&(null===(e=u.current)||void 0===e||e.setId(r))},[r]),(0,e.useLayoutEffect)(()=>{if(l&&t){var e,i;null===(i=u.current)||void 0===i||null===(e=i.api())||void 0===e||e.applyOptions(t)}},[t]),u},y=(0,e.forwardRef)((t,i)=>{let r=v(t);return(0,e.useImperativeHandle)(i,()=>r.current,[r]),null});y.displayName="PriceScale";let _=({deps:t})=>{let{timeScaleApiRef:i,isReady:r}=o(s);(0,e.useLayoutEffect)(()=>{if(!r||!i)return;let e=i.api();queueMicrotask(()=>{e&&e.fitContent()})},[...t,r])},S=({deps:e})=>(_({deps:e}),null),R=(0,e.createContext)({seriesApiRef:null,isReady:!1});R.displayName="SeriesContext";let L=({type:t,data:r,options:a={},reactive:l=!0,seriesOrder:n,alwaysReplaceData:s=!1,...u})=>{let{isReady:c,chartApiRef:p}=o(i),{isPaneReady:d,isInsidePane:h,paneApiRef:v}=m(),[y,_]=(0,e.useState)(!1),S=(0,e.useRef)({_series:null,api(){return this._series},init(){if(!this._series){var e,i,l;let s=null==p?void 0:p.api();if(!s)return null;let c=h?null==v||null===(e=v.api())||void 0===e?void 0:e.paneIndex():void 0;if("Custom"===t){let e=u.plugin;if(!e)throw new f("Custom series requires a plugin to be defined");this._series=s.addCustomSeries(e,a,c)}else this._series=s.addSeries(g[t],a,c);null===(i=this._series)||void 0===i||i.setData(r),void 0!==n&&(null===(l=this._series)||void 0===l||l.setSeriesOrder(n)),_(!0)}return this._series},clear(){if(null!==this._series){var e;null==p||null===(e=p.api())||void 0===e||e.removeSeries(this._series),this._series=null,_(!1)}}});return(0,e.useLayoutEffect)(()=>{c&&(!h||d)&&S.current.init()},[c,h,d]),(0,e.useLayoutEffect)(()=>()=>{S.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(p&&r&&l){let e=S.current.api();if(!e)return;let t=e.data(),i=r.length-t.length;if(s||0===t.length||0===r.length||i<0||i>1){e.setData(r);return}let a={...r[r.length-1]};e.update(a)}},[r,l,s]),(0,e.useLayoutEffect)(()=>{if(p&&a){var e;null===(e=S.current.api())||void 0===e||e.applyOptions(a)}},[a]),(0,e.useLayoutEffect)(()=>{if(p&&void 0!==n){var e;null===(e=S.current.api())||void 0===e||e.setSeriesOrder(n)}},[n]),{isReady:y,seriesApiRef:S}},g={Line:t.LineSeries,Candlestick:t.CandlestickSeries,Histogram:t.HistogramSeries,Area:t.AreaSeries,Baseline:t.BaselineSeries,Bar:t.BarSeries},E=(0,e.forwardRef)(({children:t,...i},r)=>{let{seriesApiRef:{current:a},isReady:l}=L(i);return(0,e.useImperativeHandle)(r,()=>a,[a]),e.default.createElement(R.Provider,{value:{seriesApiRef:a,isReady:l}},t)});E.displayName="SeriesTemplate";let b=(0,e.forwardRef)(({children:t,...i},r)=>e.default.createElement(E,{type:"Line",ref:r,...i},t));b.displayName="LineSeries";let C=(0,e.forwardRef)(({children:t,...i},r)=>e.default.createElement(E,{type:"Histogram",ref:r,...i},t));C.displayName="HistogramSeries";let k=(0,e.forwardRef)(({children:t,...i},r)=>e.default.createElement(E,{type:"Candlestick",ref:r,...i},t));k.displayName="CandlestickSeries";let w=(0,e.forwardRef)(({children:t,...i},r)=>e.default.createElement(E,{type:"Area",ref:r,...i},t));w.displayName="AreaSeries";let P=(0,e.forwardRef)(({children:t,...i},r)=>e.default.createElement(E,{type:"Baseline",ref:r,...i},t));P.displayName="BaselineSeries";let A=(0,e.forwardRef)(({children:t,...i},r)=>e.default.createElement(E,{type:"Bar",ref:r,...i},t));A.displayName="BarSeries";let N=(0,e.forwardRef)(({children:t,...i},r)=>e.default.createElement(E,{type:"Custom",ref:r,...i},t));N.displayName="CustomSeries";let x=({options:t,price:i})=>{let{isReady:r,seriesApiRef:a}=o(R),l=(0,e.useRef)({_priceLine:null,api(){return this._priceLine},init(){if(!this._priceLine){let e=null==a?void 0:a.api();if(!e)return null;this._priceLine=e.createPriceLine({price:i,...t})}return this._priceLine},clear(){if(null!==this._priceLine){var e;null==a||null===(e=a.api())||void 0===e||e.removePriceLine(this._priceLine),this._priceLine=null}}});return(0,e.useLayoutEffect)(()=>{r&&l.current.init()},[r]),(0,e.useLayoutEffect)(()=>()=>{l.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(a&&t){var e;null===(e=l.current.api())||void 0===e||e.applyOptions(t)}},[t]),(0,e.useLayoutEffect)(()=>{if(a&&i){var e;null===(e=l.current.api())||void 0===e||e.applyOptions({price:i})}},[i]),l},O=(0,e.forwardRef)((t,i)=>{let r=x(t);return(0,e.useImperativeHandle)(i,()=>r.current,[r]),null});O.displayName="PriceLine";let I=({reactive:i=!0,markers:r})=>{let{isReady:a,seriesApiRef:l}=o(R),n=(0,e.useRef)({_markers:null,api(){return this._markers},init(){if(null===this._markers){let e=null==l?void 0:l.api();if(!e)return null;this._markers=(0,t.createSeriesMarkers)(e,r)}return this._markers},clear(){null!==this._markers&&(this._markers.detach(),this._markers=null)}});return(0,e.useLayoutEffect)(()=>{a&&n.current.init()},[a]),(0,e.useLayoutEffect)(()=>()=>{n.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(l&&r&&i){var e;null===(e=n.current.api())||void 0===e||e.setMarkers(r)}},[r,i]),n},H=(0,e.forwardRef)(({...t},i)=>{let r=I(t);return(0,e.useImperativeHandle)(i,()=>r.current,[r]),null});H.displayName="Markers";let T=r=>{let{isReady:a,chartApiRef:l}=o(i),{isPaneReady:n,isInsidePane:s,paneApiRef:u}=m(),c=(0,e.useRef)({_watermark:null,api(){return this._watermark},init(){if(null===this._watermark){let e=null==l?void 0:l.api(),i=null==u?void 0:u.api();if(!e||!i)return null;if(V(r)){let{type:e,...a}=r;this._watermark=(0,t.createTextWatermark)(i,a)}else{let{type:e,src:a,...l}=r;this._watermark=(0,t.createImageWatermark)(i,a,l)}}return this._watermark},clear(){null!==this._watermark&&(this._watermark.detach(),this._watermark=null)}});return(0,e.useLayoutEffect)(()=>{if(a){if(!s)throw new f("Watermark must be used inside a pane. Please ensure that the component is wrapped in a pane component.",{isOperational:!0,docsPath:""});n&&c.current.init()}},[a,n,s]),(0,e.useLayoutEffect)(()=>()=>{c.current.clear()},[]),(0,e.useLayoutEffect)(()=>{var e;if(!l||!r)return;let{type:t,...i}=r;null===(e=c.current.api())||void 0===e||e.applyOptions(i)},[r]),c},V=e=>"text"===e.type,B=(t,i)=>{let r=T(t);return(0,e.useImperativeHandle)(i,()=>r.current,[r]),null},W=(0,e.forwardRef)((e,t)=>B({...e,type:"text"},t)),M=(0,e.forwardRef)((e,t)=>B({...e,type:"image"},t));W.displayName="WatermarkText",M.displayName="WatermarkImage";let D=({render:t,plugin:r})=>{let{isReady:a,chartApiRef:l}=o(i),{isReady:n,seriesApiRef:s}=o(R),u=(0,e.useRef)({_primitive:null,api(){return this._primitive},init(){if(!this._primitive){let e=null==s?void 0:s.api(),i=null==l?void 0:l.api();if(!i||!e)return null;let a=r||t({chart:i,series:e});e.attachPrimitive(a),this._primitive=a}return this._primitive},clear(){if(null!==this._primitive){var e;null==s||null===(e=s.api())||void 0===e||e.detachPrimitive(this._primitive),this._primitive=null}}});return(0,e.useLayoutEffect)(()=>{a&&n&&u.current.init()},[n,a]),(0,e.useLayoutEffect)(()=>()=>{u.current.clear()},[]),u},$=(0,e.forwardRef)((t,i)=>{let r=D(t);return(0,e.useImperativeHandle)(i,()=>r.current,[r]),null});$.displayName="SeriesPrimitive";let z=({stretchFactor:t}={})=>{let{chartApiRef:r,isReady:a}=o(i),[l,n]=(0,e.useState)(!1),s=(0,e.useRef)({_pane:null,api(){return this._pane},init(){let e=null==r?void 0:r.api();if(!e)return null;let i=e.addPane(!0);return this._pane=i,n(!0),void 0!==t&&this._pane.setStretchFactor(t),this._pane},clear(){if(null!==this._pane){var e;null==r||null===(e=r.api())||void 0===e||e.removePane(this._pane.paneIndex()),n(!1),this._pane=null}}});return(0,e.useLayoutEffect)(()=>{a&&s.current.init()},[a]),(0,e.useLayoutEffect)(()=>()=>{s.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(void 0===t)return;let e=s.current.api();e&&e.setStretchFactor(t)},[t]),{paneApiRef:s,isReady:l}},F=(0,e.forwardRef)(({children:t,stretchFactor:i},r)=>{let{paneApiRef:{current:a},isReady:l}=z({stretchFactor:i});return(0,e.useImperativeHandle)(r,()=>a,[a]),e.default.createElement(h.Provider,{value:{paneApiRef:a,isReady:l}},t)});F.displayName="Pane";export{w as AreaSeries,A as BarSeries,P as BaselineSeries,k as CandlestickSeries,n as Chart,N as CustomSeries,C as HistogramSeries,b as LineSeries,H as Markers,F as Pane,O as PriceLine,y as PriceScale,$ as SeriesPrimitive,d as TimeScale,S as TimeScaleFitContentTrigger,M as WatermarkImage,W as WatermarkText};
|
|
15
|
+
Version: lightweight-charts-react-components@${u}`),Object.setPrototypeOf(this,f.prototype)}}let p=(t,r)=>{let i=(0,e.useContext)(t);if(!i){let e=t.name??t.displayName??"Context";throw new f(r??`${e} not found.`,{isOperational:!0})}return i},o=(0,e.createContext)(null);o.displayName="PaneContext";let h=()=>{let t=(0,e.useContext)(o),r=!!t;return{isInsidePane:r,isPaneReady:!!(null==t?void 0:t.isReady),paneApiRef:null==t?void 0:t.paneApiRef}},m=({onVisibleTimeRangeChange:t,onVisibleLogicalRangeChange:i,onSizeChange:a,visibleRange:l,visibleLogicalRange:n,options:s={}})=>{let{isReady:u,chartApiRef:c}=p(r),{isPaneReady:f,isInsidePane:o}=h(),[m,d]=(0,e.useState)(!1),y=(0,e.useRef)({_timeScale:null,api(){return this._timeScale},init(){if(this._timeScale)return this._timeScale;let e=null==c?void 0:c.api();return e?(this._timeScale=e.timeScale(),this._timeScale.applyOptions(s),l&&this._timeScale.setVisibleRange(l),n&&this._timeScale.setVisibleLogicalRange(n),t&&this._timeScale.subscribeVisibleTimeRangeChange(t),i&&this._timeScale.subscribeVisibleLogicalRangeChange(i),a&&this._timeScale.subscribeSizeChange(a),d(!0),this._timeScale):null},clear(){this._timeScale=null,d(!1)}});return(0,e.useLayoutEffect)(()=>{u&&(!o||f)&&y.current.init()},[u,o,f]),(0,e.useLayoutEffect)(()=>()=>{y.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(c&&s){var e,t;null==(t=y.current)||null==(e=t.api())||e.applyOptions(s)}},[s]),(0,e.useLayoutEffect)(()=>{if(c){if(a){var e,t;null==(t=y.current)||null==(e=t.api())||e.subscribeSizeChange(a)}return()=>{if(a){var e,t;null==(t=y.current)||null==(e=t.api())||e.unsubscribeSizeChange(a)}}}},[a]),(0,e.useLayoutEffect)(()=>{if(c){if(i){var e,t;null==(t=y.current)||null==(e=t.api())||e.subscribeVisibleLogicalRangeChange(i)}return()=>{if(i){var e,t;null==(t=y.current)||null==(e=t.api())||e.unsubscribeVisibleLogicalRangeChange(i)}}}},[i]),(0,e.useLayoutEffect)(()=>{if(c){if(t){var e,r;null==(r=y.current)||null==(e=r.api())||e.subscribeVisibleTimeRangeChange(t)}return()=>{if(t){var e,r;null==(r=y.current)||null==(e=r.api())||e.unsubscribeVisibleTimeRangeChange(t)}}}},[t]),(0,e.useLayoutEffect)(()=>{if(c&&l){var e,t;null==(t=y.current)||null==(e=t.api())||e.setVisibleRange(l)}},[l]),(0,e.useLayoutEffect)(()=>{if(c&&n){var e,t;null==(t=y.current)||null==(e=t.api())||e.setVisibleLogicalRange(n)}},[n]),{timeScaleApiRef:y,isReady:m}},d=(0,e.forwardRef)(({children:t,...r},i)=>{let{timeScaleApiRef:{current:a},isReady:l}=m(r);return(0,e.useImperativeHandle)(i,()=>a,[a]),e.default.createElement(s.Provider,{value:{timeScaleApiRef:a,isReady:l}},t)});d.displayName="TimeScale";let y=({options:t={},id:i})=>{let{isReady:a,chartApiRef:l}=p(r),{isInsidePane:n,isPaneReady:s}=h(),u=(0,e.useRef)({_priceScale:null,api(){return this._priceScale},init(){if(!this._priceScale){let e=null==l?void 0:l.api();if(!e)return null;this._priceScale=e.priceScale(i),this._priceScale.applyOptions(t)}return this._priceScale},setId(e){null!==this._priceScale&&null!==l&&(this._priceScale=l.api().priceScale(e),this._priceScale.applyOptions(t))},clear(){this._priceScale=null}});return(0,e.useLayoutEffect)(()=>{if(a){if(!n)throw new f("PriceScale must be used inside a pane. Please ensure that the component is wrapped in a pane component.",{isOperational:!0,docsPath:""});s&&u.current.init()}},[a,n,s]),(0,e.useLayoutEffect)(()=>()=>{u.current.clear()},[]),(0,e.useLayoutEffect)(()=>{var e;l&&(null==(e=u.current)||e.setId(i))},[i]),(0,e.useLayoutEffect)(()=>{if(l&&t){var e,r;null==(r=u.current)||null==(e=r.api())||e.applyOptions(t)}},[t]),u},v=(0,e.forwardRef)((t,r)=>{let i=y(t);return(0,e.useImperativeHandle)(r,()=>i.current,[i]),null});v.displayName="PriceScale";let _=({deps:t})=>{let{timeScaleApiRef:r,isReady:i}=p(s);(0,e.useLayoutEffect)(()=>{if(!i||!r)return;let e=r.api();queueMicrotask(()=>{e&&e.fitContent()})},[...t,i])},S=({deps:e})=>(_({deps:e}),null),R=(0,e.createContext)({seriesApiRef:null,isReady:!1});R.displayName="SeriesContext";let L=({type:t,data:i,options:a={},reactive:l=!0,seriesOrder:n,alwaysReplaceData:s=!1,...u})=>{let{isReady:c,chartApiRef:o}=p(r),{isPaneReady:m,isInsidePane:d,paneApiRef:y}=h(),[v,_]=(0,e.useState)(!1),S=(0,e.useRef)({_series:null,api(){return this._series},init(){if(!this._series){var e,r,l;let s=null==o?void 0:o.api();if(!s)return null;let c=d?null==y||null==(e=y.api())?void 0:e.paneIndex():void 0;if("Custom"===t){let e=u.plugin;if(!e)throw new f("Custom series requires a plugin to be defined");this._series=s.addCustomSeries(e,a,c)}else this._series=s.addSeries(g[t],a,c);null==(r=this._series)||r.setData(i),void 0!==n&&(null==(l=this._series)||l.setSeriesOrder(n)),_(!0)}return this._series},clear(){if(null!==this._series){var e;null==o||null==(e=o.api())||e.removeSeries(this._series),this._series=null,_(!1)}}});return(0,e.useLayoutEffect)(()=>{c&&(!d||m)&&S.current.init()},[c,d,m]),(0,e.useLayoutEffect)(()=>()=>{S.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(o&&i&&l){let e=S.current.api();if(!e)return;let t=e.data(),r=i.length-t.length;if(s||0===t.length||0===i.length||r<0||r>1)return void e.setData(i);let a=i[i.length-1];e.update(a)}},[i,l,s]),(0,e.useLayoutEffect)(()=>{if(o&&a){var e;null==(e=S.current.api())||e.applyOptions(a)}},[a]),(0,e.useLayoutEffect)(()=>{if(o&&void 0!==n){var e;null==(e=S.current.api())||e.setSeriesOrder(n)}},[n]),{isReady:v,seriesApiRef:S}},g={Line:t.LineSeries,Candlestick:t.CandlestickSeries,Histogram:t.HistogramSeries,Area:t.AreaSeries,Baseline:t.BaselineSeries,Bar:t.BarSeries},E=(0,e.forwardRef)(({children:t,...r},i)=>{let{seriesApiRef:{current:a},isReady:l}=L(r);return(0,e.useImperativeHandle)(i,()=>a,[a]),e.default.createElement(R.Provider,{value:{seriesApiRef:a,isReady:l}},t)});E.displayName="SeriesTemplate";let b=(0,e.forwardRef)(({children:t,...r},i)=>e.default.createElement(E,{type:"Line",ref:i,...r},t));b.displayName="LineSeries";let C=(0,e.forwardRef)(({children:t,...r},i)=>e.default.createElement(E,{type:"Histogram",ref:i,...r},t));C.displayName="HistogramSeries";let k=(0,e.forwardRef)(({children:t,...r},i)=>e.default.createElement(E,{type:"Candlestick",ref:i,...r},t));k.displayName="CandlestickSeries";let w=(0,e.forwardRef)(({children:t,...r},i)=>e.default.createElement(E,{type:"Area",ref:i,...r},t));w.displayName="AreaSeries";let P=(0,e.forwardRef)(({children:t,...r},i)=>e.default.createElement(E,{type:"Baseline",ref:i,...r},t));P.displayName="BaselineSeries";let A=(0,e.forwardRef)(({children:t,...r},i)=>e.default.createElement(E,{type:"Bar",ref:i,...r},t));A.displayName="BarSeries";let N=(0,e.forwardRef)(({children:t,...r},i)=>e.default.createElement(E,{type:"Custom",ref:i,...r},t));N.displayName="CustomSeries";let x=({options:t,price:r})=>{let{isReady:i,seriesApiRef:a}=p(R),l=(0,e.useRef)({_priceLine:null,api(){return this._priceLine},init(){if(!this._priceLine){let e=null==a?void 0:a.api();if(!e)return null;this._priceLine=e.createPriceLine({price:r,...t})}return this._priceLine},clear(){if(null!==this._priceLine){var e;null==a||null==(e=a.api())||e.removePriceLine(this._priceLine),this._priceLine=null}}});return(0,e.useLayoutEffect)(()=>{i&&l.current.init()},[i]),(0,e.useLayoutEffect)(()=>()=>{l.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(a&&t){var e;null==(e=l.current.api())||e.applyOptions(t)}},[t]),(0,e.useLayoutEffect)(()=>{if(a&&r){var e;null==(e=l.current.api())||e.applyOptions({price:r})}},[r]),l},O=(0,e.forwardRef)((t,r)=>{let i=x(t);return(0,e.useImperativeHandle)(r,()=>i.current,[i]),null});O.displayName="PriceLine";let I=({reactive:r=!0,markers:i,options:a})=>{let{isReady:l,seriesApiRef:n}=p(R),s=(0,e.useRef)({_markers:null,api(){return this._markers},init(){if(null===this._markers){let e=null==n?void 0:n.api();if(!e)return null;this._markers=(0,t.createSeriesMarkers)(e,i,a)}return this._markers},clear(){null!==this._markers&&(this._markers.detach(),this._markers=null)}});return(0,e.useLayoutEffect)(()=>{l&&s.current.init()},[l]),(0,e.useLayoutEffect)(()=>()=>{s.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(n&&i&&r){var e;null==(e=s.current.api())||e.setMarkers(i)}},[i,r]),s},H=(0,e.forwardRef)(({...t},r)=>{let i=I(t);return(0,e.useImperativeHandle)(r,()=>i.current,[i]),null});H.displayName="Markers";let T=i=>{let{isReady:a,chartApiRef:l}=p(r),{isPaneReady:n,isInsidePane:s,paneApiRef:u}=h(),c=(0,e.useRef)({_watermark:null,api(){return this._watermark},init(){if(null===this._watermark){let e=null==l?void 0:l.api(),r=null==u?void 0:u.api();if(!e||!r)return null;if(V(i)){let{type:e,...a}=i;this._watermark=(0,t.createTextWatermark)(r,a)}else{let{type:e,src:a,...l}=i;this._watermark=(0,t.createImageWatermark)(r,a,l)}}return this._watermark},clear(){null!==this._watermark&&(this._watermark.detach(),this._watermark=null)}});return(0,e.useLayoutEffect)(()=>{if(a){if(!s)throw new f("Watermark must be used inside a pane. Please ensure that the component is wrapped in a pane component.",{isOperational:!0,docsPath:""});n&&c.current.init()}},[a,n,s]),(0,e.useLayoutEffect)(()=>()=>{c.current.clear()},[]),(0,e.useLayoutEffect)(()=>{var e;if(!l||!i)return;let{type:t,...r}=i;null==(e=c.current.api())||e.applyOptions(r)},[i]),c},V=e=>"text"===e.type,B=(t,r)=>{let i=T(t);return(0,e.useImperativeHandle)(r,()=>i.current,[i]),null},W=(0,e.forwardRef)((e,t)=>B({...e,type:"text"},t)),M=(0,e.forwardRef)((e,t)=>B({...e,type:"image"},t));W.displayName="WatermarkText",M.displayName="WatermarkImage";let D=({render:t,plugin:i})=>{let{isReady:a,chartApiRef:l}=p(r),{isReady:n,seriesApiRef:s}=p(R),u=(0,e.useRef)({_primitive:null,api(){return this._primitive},init(){if(!this._primitive){let e=null==s?void 0:s.api(),r=null==l?void 0:l.api();if(!r||!e)return null;let a=i||t({chart:r,series:e});e.attachPrimitive(a),this._primitive=a}return this._primitive},clear(){if(null!==this._primitive){var e;null==s||null==(e=s.api())||e.detachPrimitive(this._primitive),this._primitive=null}}});return(0,e.useLayoutEffect)(()=>{a&&n&&u.current.init()},[n,a]),(0,e.useLayoutEffect)(()=>()=>{u.current.clear()},[]),u},$=(0,e.forwardRef)((t,r)=>{let i=D(t);return(0,e.useImperativeHandle)(r,()=>i.current,[i]),null});$.displayName="SeriesPrimitive";let z=({stretchFactor:t}={})=>{let{chartApiRef:i,isReady:a}=p(r),[l,n]=(0,e.useState)(!1),s=(0,e.useRef)({_pane:null,api(){return this._pane},init(){let e=null==i?void 0:i.api();if(!e)return null;let r=e.addPane(!0);return this._pane=r,n(!0),void 0!==t&&this._pane.setStretchFactor(t),this._pane},clear(){if(null!==this._pane){var e;null==i||null==(e=i.api())||e.removePane(this._pane.paneIndex()),n(!1),this._pane=null}}});return(0,e.useLayoutEffect)(()=>{a&&s.current.init()},[a]),(0,e.useEffect)(()=>()=>{s.current.clear()},[]),(0,e.useLayoutEffect)(()=>{if(void 0===t)return;let e=s.current.api();e&&e.setStretchFactor(t)},[t]),{paneApiRef:s,isReady:l}},F=(0,e.forwardRef)(({children:t,stretchFactor:r},i)=>{let{paneApiRef:{current:a},isReady:l}=z({stretchFactor:r});return(0,e.useImperativeHandle)(i,()=>a,[a]),e.default.createElement(o.Provider,{value:{paneApiRef:a,isReady:l}},t)});F.displayName="Pane";export{w as AreaSeries,A as BarSeries,P as BaselineSeries,k as CandlestickSeries,n as Chart,N as CustomSeries,C as HistogramSeries,b as LineSeries,H as Markers,F as Pane,O as PriceLine,v as PriceScale,$ as SeriesPrimitive,d as TimeScale,S as TimeScaleFitContentTrigger,M as WatermarkImage,W as WatermarkText};
|
|
16
16
|
//# sourceMappingURL=lightweight-charts-react-components.mjs.map
|