lightweight-charts-react-components 2.6.0 → 2.7.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/README.md +71 -10
- package/dist/index.d.ts +15 -3
- package/dist/lightweight-charts-react-components.mjs +3 -3
- 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 +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lightweight-charts-react-components.mjs","sources":["webpack://lightweight-charts-react-components/./src/_shared/assignRef.ts","webpack://lightweight-charts-react-components/./src/chart/ChartContext.ts","webpack://lightweight-charts-react-components/./src/chart/defaultChartOptions.ts","webpack://lightweight-charts-react-components/./src/chart/useChart.ts","webpack://lightweight-charts-react-components/./src/chart/ChartComponent.tsx","webpack://lightweight-charts-react-components/./src/chart/ChartWrapper.tsx","webpack://lightweight-charts-react-components/./src/chart/OptionsChart.tsx","webpack://lightweight-charts-react-components/./src/chart/YieldCurveChart.tsx","webpack://lightweight-charts-react-components/./src/chart/CustomChart.tsx","webpack://lightweight-charts-react-components/./src/scales/TimeScaleContext.ts","webpack://lightweight-charts-react-components/./src/version.ts","webpack://lightweight-charts-react-components/./src/_shared/InternalError.ts","webpack://lightweight-charts-react-components/./src/_shared/docsBaseUrl.ts","webpack://lightweight-charts-react-components/./src/_shared/useSafeContext.ts","webpack://lightweight-charts-react-components/./src/pane/PaneContext.ts","webpack://lightweight-charts-react-components/./src/pane/usePaneContext.ts","webpack://lightweight-charts-react-components/./src/scales/useTimeScale.ts","webpack://lightweight-charts-react-components/./src/scales/TimeScale.tsx","webpack://lightweight-charts-react-components/./src/scales/usePriceScale.ts","webpack://lightweight-charts-react-components/./src/scales/PriceScale.tsx","webpack://lightweight-charts-react-components/./src/scales/useTimeScaleFitContentTrigger.ts","webpack://lightweight-charts-react-components/./src/scales/TimeScaleFitContentTrigger.tsx","webpack://lightweight-charts-react-components/./src/series/SeriesContext.ts","webpack://lightweight-charts-react-components/./src/series/useSeries.ts","webpack://lightweight-charts-react-components/./src/series/SeriesTemplate.tsx","webpack://lightweight-charts-react-components/./src/series/LineSeries.tsx","webpack://lightweight-charts-react-components/./src/series/HistogramSeries.tsx","webpack://lightweight-charts-react-components/./src/series/CandlestickSeries.tsx","webpack://lightweight-charts-react-components/./src/series/AreaSeries.tsx","webpack://lightweight-charts-react-components/./src/series/BaselineSeries.tsx","webpack://lightweight-charts-react-components/./src/series/BarSeries.tsx","webpack://lightweight-charts-react-components/./src/series/CustomSeries.tsx","webpack://lightweight-charts-react-components/./src/priceLine/usePriceLine.ts","webpack://lightweight-charts-react-components/./src/priceLine/PriceLine.tsx","webpack://lightweight-charts-react-components/./src/markers/useMarkers.ts","webpack://lightweight-charts-react-components/./src/markers/Markers.tsx","webpack://lightweight-charts-react-components/./src/_shared/useLatestRef.ts","webpack://lightweight-charts-react-components/./src/watermark/useWatermark.ts","webpack://lightweight-charts-react-components/./src/watermark/Watermark.tsx","webpack://lightweight-charts-react-components/./src/primitives/useReactivePrimitive.ts","webpack://lightweight-charts-react-components/./src/primitives/usePanePrimitive.ts","webpack://lightweight-charts-react-components/./src/primitives/PanePrimitive.tsx","webpack://lightweight-charts-react-components/./src/primitives/useSeriesPrimitive.ts","webpack://lightweight-charts-react-components/./src/primitives/SeriesPrimitive.tsx","webpack://lightweight-charts-react-components/./src/pane/usePane.ts","webpack://lightweight-charts-react-components/./src/pane/Pane.tsx"],"sourcesContent":["import type { RefObject, Ref } from \"react\";\n\nexport const assignRef = <T>(ref: Ref<T> | undefined, value: T | null): void => {\n if (!ref) {\n return;\n }\n\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n\n (ref as RefObject<T | null>).current = value;\n};\n","import { createContext } from \"react\";\nimport { type IChartContext } from \"./types\";\nimport type { IChartApiBase } from \"lightweight-charts\";\n\nconst ChartContext = createContext<IChartContext<unknown, IChartApiBase<unknown>> | null>(\n null\n);\n\nChartContext.displayName = \"ChartContext\";\nexport { ChartContext };\n","import type { DefaultChartOptions } from \"./types\";\n\nconst defaultChartOptions: DefaultChartOptions = {\n addDefaultPane: false,\n};\n\nexport { defaultChartOptions };\n","import {\n createChart,\n type ChartOptionsImpl,\n type DeepPartial,\n type Time,\n} from \"lightweight-charts\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { defaultChartOptions } from \"./defaultChartOptions\";\nimport type {\n ChartApiInstance,\n ChartApiRef,\n CreateChartApi,\n UseChartOptions,\n} from \"./types\";\n\nexport const useChart = <\n HorzScaleItem = Time,\n TChartApi extends ChartApiInstance<HorzScaleItem> = ChartApiInstance<HorzScaleItem>,\n TOptions extends ChartOptionsImpl<HorzScaleItem> = ChartOptionsImpl<HorzScaleItem>,\n>({\n container,\n onClick,\n onCrosshairMove,\n options = {},\n onDblClick,\n createChartApi = createChart as unknown as CreateChartApi<\n HorzScaleItem,\n TChartApi,\n TOptions\n >,\n}: UseChartOptions<HorzScaleItem, TChartApi, TOptions>) => {\n const [isReady, setIsReady] = useState(false);\n\n const chartApiRef = useRef<ChartApiRef<HorzScaleItem, TChartApi>>({\n _chart: null,\n api() {\n return this._chart;\n },\n init() {\n if (this._chart === null) {\n const chart = createChartApi(container, {\n ...defaultChartOptions,\n ...options,\n } as DeepPartial<TOptions>);\n this._chart = chart;\n }\n\n if (!isReady) {\n setIsReady(true);\n }\n\n return this._chart;\n },\n clear() {\n if (this._chart !== null) {\n setIsReady(false);\n this._chart.remove();\n this._chart = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n chartApiRef.current.init();\n\n return () => {\n chartApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n if (onClick) {\n chartApiRef.current.api()?.subscribeClick(onClick);\n }\n\n return () => {\n if (onClick) {\n chartApiRef.current.api()?.unsubscribeClick(onClick);\n }\n };\n }, [onClick]);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n if (onCrosshairMove) {\n chartApiRef.current.api()?.subscribeCrosshairMove(onCrosshairMove);\n }\n\n return () => {\n if (onCrosshairMove) {\n chartApiRef.current.api()?.unsubscribeCrosshairMove(onCrosshairMove);\n }\n };\n }, [onCrosshairMove]);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n if (onDblClick) {\n chartApiRef.current.api()?.subscribeDblClick(onDblClick);\n }\n\n return () => {\n if (onDblClick) {\n chartApiRef.current.api()?.unsubscribeDblClick(onDblClick);\n }\n };\n }, [onDblClick]);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n chartApiRef.current.api()?.applyOptions({\n ...defaultChartOptions,\n ...options,\n } as DeepPartial<TOptions>);\n }, [options]);\n\n return { chartApiRef, isReady };\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { ChartContext } from \"./ChartContext\";\nimport { useChart } from \"./useChart\";\nimport type { ChartApiInstance, ChartApiRef, ChartComponentProps } from \"./types\";\nimport type { ChartOptionsImpl } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericChartComponent = (<\n HorzScaleItem,\n TChartApi extends ChartApiInstance<HorzScaleItem> = ChartApiInstance<HorzScaleItem>,\n TOptions extends ChartOptionsImpl<HorzScaleItem> = ChartOptionsImpl<HorzScaleItem>,\n>(\n props: ChartComponentProps<HorzScaleItem, TChartApi, TOptions> & {\n ref?: ForwardedRef<ChartApiRef<HorzScaleItem, TChartApi>>;\n }\n) => JSX.Element) & {\n displayName?: string;\n};\n\nconst ChartComponentRenderFunction = <\n HorzScaleItem,\n TChartApi extends ChartApiInstance<HorzScaleItem> = ChartApiInstance<HorzScaleItem>,\n TOptions extends ChartOptionsImpl<HorzScaleItem> = ChartOptionsImpl<HorzScaleItem>,\n>(\n {\n children,\n container,\n onClick,\n onCrosshairMove,\n options,\n onDblClick,\n chartKind = \"time\",\n createChartApi,\n }: ChartComponentProps<HorzScaleItem, TChartApi, TOptions>,\n ref: ForwardedRef<ChartApiRef<HorzScaleItem, TChartApi>>\n) => {\n const {\n chartApiRef: { current: chartApiRef },\n isReady,\n } = useChart({\n container,\n onClick,\n onCrosshairMove,\n options,\n onDblClick,\n createChartApi,\n });\n useImperativeHandle(ref, () => chartApiRef, [chartApiRef]);\n\n return (\n <ChartContext.Provider\n value={{\n chartApiRef: chartApiRef as never,\n isReady,\n chartKind,\n }}\n >\n {children}\n </ChartContext.Provider>\n );\n};\n\nconst ChartComponent = forwardRef(ChartComponentRenderFunction) as GenericChartComponent;\nChartComponent.displayName = \"ChartComponent\";\n\nexport { ChartComponent };\n","import { createChart, type IChartApi, type Time } from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, ChartProps } from \"./types\";\nimport type {\n ForwardRefExoticComponent,\n ForwardRefRenderFunction,\n RefAttributes,\n} from \"react\";\n\nconst ChartRenderFunction: ForwardRefRenderFunction<\n ChartApiRef<Time, IChartApi>,\n ChartProps\n> = ({ children, containerProps, containerRef, ...rest }, ref) => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent\n ref={ref}\n container={container}\n createChartApi={createChart}\n chartKind=\"time\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * Chart component that can be used to create a chart.\n *\n * @param props - The properties for the chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types | TradingView documentation for charts}\n * @example\n * ```tsx\n * <Chart>\n * <Pane stretchFactor={2}>\n * ...\n * </Pane>\n * </Chart>\n * ```\n */\nexport const ChartWrapper: ForwardRefExoticComponent<\n ChartProps & RefAttributes<ChartApiRef<Time, IChartApi>>\n> = forwardRef(ChartRenderFunction);\nChartWrapper.displayName = \"ChartWrapper\";\n","import {\n createOptionsChart,\n type IChartApiBase,\n type PriceChartOptions,\n} from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, OptionsChartProps } from \"./types\";\nimport type {\n ForwardRefExoticComponent,\n ForwardRefRenderFunction,\n RefAttributes,\n} from \"react\";\n\nconst OptionsChartRenderFunction: ForwardRefRenderFunction<\n ChartApiRef<number, IChartApiBase<number>>,\n OptionsChartProps\n> = ({ children, containerProps, containerRef, ...rest }, ref) => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent<number, IChartApiBase<number>, PriceChartOptions>\n ref={ref}\n container={container}\n createChartApi={createOptionsChart}\n chartKind=\"options\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * OptionsChart component that can be used to create a price-based horizontal scale chart.\n *\n * @param props - The properties for the options chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the options chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types#options-chart-price-based | TradingView documentation for options charts}\n * @example\n * ```tsx\n * <OptionsChart>\n * <LineSeries data={[{ time: 95, value: 1.2 }, { time: 100, value: 2.8 }]} />\n * </OptionsChart>\n * ```\n */\nexport const OptionsChart: ForwardRefExoticComponent<\n OptionsChartProps & RefAttributes<ChartApiRef<number, IChartApiBase<number>>>\n> = forwardRef(OptionsChartRenderFunction);\nOptionsChart.displayName = \"OptionsChart\";\n","import {\n createYieldCurveChart,\n type IYieldCurveChartApi,\n type YieldCurveChartOptions,\n} from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, YieldCurveChartProps } from \"./types\";\nimport type {\n ForwardRefExoticComponent,\n ForwardRefRenderFunction,\n RefAttributes,\n} from \"react\";\n\nconst YieldCurveChartRenderFunction: ForwardRefRenderFunction<\n ChartApiRef<number, IYieldCurveChartApi>,\n YieldCurveChartProps\n> = ({ children, containerProps, containerRef, ...rest }, ref) => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent<number, IYieldCurveChartApi, YieldCurveChartOptions>\n ref={ref}\n container={container}\n createChartApi={createYieldCurveChart}\n chartKind=\"yield-curve\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * YieldCurveChart component that can be used to create a yield curve chart.\n *\n * @param props - The properties for the yield curve chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the yield curve chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types#yield-curve-chart | TradingView documentation for yield curve charts}\n * @example\n * ```tsx\n * <YieldCurveChart>\n * <LineSeries data={[{ time: 1, value: 5.2 }, { time: 12, value: 4.7 }]} />\n * </YieldCurveChart>\n * ```\n */\nexport const YieldCurveChart: ForwardRefExoticComponent<\n YieldCurveChartProps & RefAttributes<ChartApiRef<number, IYieldCurveChartApi>>\n> = forwardRef(YieldCurveChartRenderFunction);\nYieldCurveChart.displayName = \"YieldCurveChart\";\n","import {\n createChartEx,\n type DeepPartial,\n type IChartApiBase,\n type IHorzScaleBehavior,\n} from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, CustomChartProps } from \"./types\";\nimport type { ForwardedRef, JSX, RefAttributes } from \"react\";\n\ntype CustomChartForwardRefComponent = (<\n HorzScaleItem,\n THorzScaleBehavior extends IHorzScaleBehavior<HorzScaleItem>,\n>(\n props: CustomChartProps<HorzScaleItem, THorzScaleBehavior> &\n RefAttributes<ChartApiRef<HorzScaleItem, IChartApiBase<HorzScaleItem>>>\n) => JSX.Element) & {\n displayName: string;\n};\n\nconst CustomChartRenderFunction = <\n HorzScaleItem,\n THorzScaleBehavior extends IHorzScaleBehavior<HorzScaleItem>,\n>(\n {\n children,\n containerProps,\n containerRef,\n horzScaleBehavior,\n ...rest\n }: CustomChartProps<HorzScaleItem, THorzScaleBehavior>,\n ref: ForwardedRef<ChartApiRef<HorzScaleItem, IChartApiBase<HorzScaleItem>>>\n): JSX.Element => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n const createCustomChart = useCallback(\n (\n chartContainer: HTMLElement,\n options?: DeepPartial<ReturnType<THorzScaleBehavior[\"options\"]>>\n ) => {\n return createChartEx<HorzScaleItem, THorzScaleBehavior>(\n chartContainer,\n horzScaleBehavior,\n options\n );\n },\n [horzScaleBehavior]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent<\n HorzScaleItem,\n IChartApiBase<HorzScaleItem>,\n ReturnType<THorzScaleBehavior[\"options\"]>\n >\n ref={ref}\n container={container}\n createChartApi={createCustomChart}\n chartKind=\"custom\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * CustomChart component that can be used to create a chart with a custom horizontal scale behavior.\n *\n * @param props - The properties for the custom chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the custom chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types#custom-horizontal-scale-chart | TradingView documentation for custom horizontal scale charts}\n * @example\n * ```tsx\n * <CustomChart horzScaleBehavior={new (defaultHorzScaleBehavior())()}>\n * <LineSeries data={[{ time: \"2025-01-01\", value: 100 }]} />\n * </CustomChart>\n * ```\n */\nexport const CustomChart = forwardRef(\n CustomChartRenderFunction\n) as CustomChartForwardRefComponent;\nCustomChart.displayName = \"CustomChart\";\n","import { createContext } from \"react\";\nimport { type ITimeScaleContext } from \"./types\";\n\nconst TimeScaleContext = createContext<ITimeScaleContext<unknown> | null>(null);\nTimeScaleContext.displayName = \"TimeScaleContext\";\nexport { TimeScaleContext };\n","export const version = \"2.6.0\";\n","import { version } from \"../version\";\nimport { docsBaseUrl } from \"./docsBaseUrl\";\n\ntype IBaseErrorParameters = {\n /**\n * An operational error refers to an error that occurs during normal program operation\n * due to external factors or expected failures, not due to bugs in the code itself.\n */\n isOperational?: boolean;\n /**\n * The cause of the error, if any.\n * This can be used to provide additional context or information about the error.\n */\n cause?: Error | BaseInternalError;\n /**\n * A path to the documentation that can help resolve the error.\n * This is useful for providing users with guidance on how to fix or understand the error.\n */\n docsPath?: string;\n};\n\nclass BaseInternalError extends Error {\n public isOperational: boolean;\n public override cause?: Error | BaseInternalError;\n\n constructor(\n message?: string,\n { isOperational = true, cause, docsPath }: IBaseErrorParameters = {}\n ) {\n super(message);\n\n this.name = this.constructor.name ?? \"InternalError\";\n this.isOperational = isOperational;\n this.cause = cause;\n\n this.message = `${message ?? \"An error occurred\"}`;\n\n if (docsPath) {\n this.message = `${this.message}\\n\\nDocs: see ${docsBaseUrl + docsPath}`;\n }\n\n if (version) {\n this.message = `${this.message}\\n\\nVersion: lightweight-charts-react-components@${version}`;\n }\n\n Object.setPrototypeOf(this, BaseInternalError.prototype);\n }\n}\n\nexport { BaseInternalError };\n","const docsBaseUrl = \"https://ukorvl.github.io/lightweight-charts-react-components/docs/\";\nexport { docsBaseUrl };\n","import { type Context, useContext } from \"react\";\nimport { BaseInternalError } from \"./InternalError\";\n\nconst useSafeContext = <T>(context: Context<T>, errorMessage?: string) => {\n const currentContextValue = useContext(context);\n\n if (!currentContextValue) {\n const ctxName = context.name ?? context.displayName ?? \"Context\";\n // TODO: Accept a docsPath so missing-context errors can link to the relevant docs.\n throw new BaseInternalError(errorMessage ?? `${ctxName} not found.`, {\n isOperational: true,\n });\n }\n\n return currentContextValue;\n};\n\nexport { useSafeContext };\n","import { createContext } from \"react\";\nimport { type IPaneContext } from \"./types\";\n\nconst PaneContext = createContext<IPaneContext<unknown> | null>(null);\n\nPaneContext.displayName = \"PaneContext\";\nexport { PaneContext };\n","import { useContext } from \"react\";\nimport { PaneContext } from \"./PaneContext\";\nimport type { IPaneContext } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\n\nconst usePaneContext = <HorzScaleItem = Time>() => {\n const paneContext = useContext(PaneContext) as IPaneContext<HorzScaleItem> | null;\n\n const isInsidePane = !!paneContext;\n const isPaneReady = !!paneContext?.isReady;\n const paneApiRef = paneContext?.paneApiRef;\n\n return { isInsidePane, isPaneReady, paneApiRef };\n};\n\nexport { usePaneContext };\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport type { TimeScaleApiRef, TimeScaleProps } from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\n\nexport const useTimeScale = <HorzScaleItem = Time>({\n onVisibleTimeRangeChange,\n onVisibleLogicalRangeChange,\n onSizeChange,\n visibleRange,\n visibleLogicalRange,\n options = {},\n}: Omit<TimeScaleProps<HorzScaleItem>, \"children\">) => {\n const { isReady: chartIsReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isPaneReady, isInsidePane } = usePaneContext<HorzScaleItem>();\n const [isReady, setIsReady] = useState(false);\n\n const timeScaleApiRef = useRef<TimeScaleApiRef<HorzScaleItem>>({\n _timeScale: null,\n api() {\n return this._timeScale;\n },\n init() {\n if (this._timeScale) {\n return this._timeScale;\n }\n\n const chartApi = chart?.api();\n\n if (!chartApi) {\n return null;\n }\n\n this._timeScale = chartApi.timeScale();\n\n this._timeScale.applyOptions(options);\n\n if (visibleRange) {\n this._timeScale.setVisibleRange(visibleRange);\n }\n\n if (visibleLogicalRange) {\n this._timeScale.setVisibleLogicalRange(visibleLogicalRange);\n }\n\n setIsReady(true);\n\n return this._timeScale;\n },\n clear() {\n this._timeScale = null;\n setIsReady(false);\n },\n });\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n if (isInsidePane && !isPaneReady) {\n return;\n }\n\n timeScaleApiRef.current.init();\n }, [chartIsReady, isInsidePane, isPaneReady]);\n\n useLayoutEffect(() => {\n return () => {\n timeScaleApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (options) {\n timeScaleApiRef.current?.api()?.applyOptions(options);\n }\n }, [options]);\n\n useLayoutEffect(() => {\n if (!chart || !isReady) return;\n\n const timeScaleApi = timeScaleApiRef.current.api();\n\n if (onSizeChange && timeScaleApi) {\n timeScaleApi.subscribeSizeChange(onSizeChange);\n }\n\n return () => {\n if (onSizeChange && timeScaleApi) {\n timeScaleApi.unsubscribeSizeChange(onSizeChange);\n }\n };\n }, [chart, isReady, onSizeChange]);\n\n useLayoutEffect(() => {\n if (!chart || !isReady) return;\n\n const timeScaleApi = timeScaleApiRef.current.api();\n\n if (onVisibleLogicalRangeChange && timeScaleApi) {\n timeScaleApi.subscribeVisibleLogicalRangeChange(onVisibleLogicalRangeChange);\n }\n\n return () => {\n if (onVisibleLogicalRangeChange && timeScaleApi) {\n timeScaleApi.unsubscribeVisibleLogicalRangeChange(onVisibleLogicalRangeChange);\n }\n };\n }, [chart, isReady, onVisibleLogicalRangeChange]);\n\n useLayoutEffect(() => {\n if (!chart || !isReady) return;\n\n const timeScaleApi = timeScaleApiRef.current.api();\n\n if (onVisibleTimeRangeChange && timeScaleApi) {\n timeScaleApi.subscribeVisibleTimeRangeChange(onVisibleTimeRangeChange);\n }\n\n return () => {\n if (onVisibleTimeRangeChange && timeScaleApi) {\n timeScaleApi.unsubscribeVisibleTimeRangeChange(onVisibleTimeRangeChange);\n }\n };\n }, [chart, isReady, onVisibleTimeRangeChange]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (visibleRange) {\n timeScaleApiRef.current?.api()?.setVisibleRange(visibleRange);\n }\n }, [visibleRange]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (visibleLogicalRange) {\n timeScaleApiRef.current?.api()?.setVisibleLogicalRange(visibleLogicalRange);\n }\n }, [visibleLogicalRange]);\n\n return { timeScaleApiRef, isReady };\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { TimeScaleContext } from \"./TimeScaleContext\";\nimport { useTimeScale } from \"./useTimeScale\";\nimport type { TimeScaleApiRef, TimeScaleProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericTimeScaleComponent = (<HorzScaleItem = Time>(\n props: TimeScaleProps<HorzScaleItem> & {\n ref?: ForwardedRef<TimeScaleApiRef<HorzScaleItem>>;\n }\n) => JSX.Element) & {\n displayName: string;\n};\n\nconst TimeScaleRenderFunction = <HorzScaleItem = Time,>(\n { children, ...props }: TimeScaleProps<HorzScaleItem>,\n ref: ForwardedRef<TimeScaleApiRef<HorzScaleItem>>\n): JSX.Element => {\n const {\n timeScaleApiRef: { current: timeScaleApiRef },\n isReady,\n } = useTimeScale(props);\n useImperativeHandle(ref, () => timeScaleApiRef, [timeScaleApiRef]);\n\n return (\n <TimeScaleContext.Provider\n value={{\n timeScaleApiRef: timeScaleApiRef as never,\n isReady,\n }}\n >\n {children}\n </TimeScaleContext.Provider>\n );\n};\n\n/**\n * TimeScale component that can be used to create/customize time scale in a chart.\n *\n * @param props - The properties for the time scale.\n * @param ref - The ref to access the time scale API.\n * @returns A React component that renders the time scale.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/time-scale | Time Scale documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/time-scale | TradingView documentation for time scale}\n * @example\n * ```tsx\n * <TimeScale\n * visibleRange={{ from: 0, to: 100 }}\n * onVisibleTimeRangeChange={() => {}}\n * />\n * ```\n */\nexport const TimeScale = forwardRef(TimeScaleRenderFunction) as GenericTimeScaleComponent;\nTimeScale.displayName = \"TimeScale\";\n","import { useLayoutEffect, useRef } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport type { PriceScaleProps, PriceScaleApiRef } from \"./types\";\n\nexport const usePriceScale = ({ options = {}, id }: PriceScaleProps) => {\n const { isReady: chartIsReady, chartApiRef: chart } = useSafeContext(ChartContext);\n const { isInsidePane, isPaneReady } = usePaneContext();\n\n const priceScaleApiRef = useRef<PriceScaleApiRef>({\n _priceScale: null,\n api() {\n return this._priceScale;\n },\n init() {\n if (!this._priceScale) {\n const chartApi = chart?.api();\n\n if (!chartApi) {\n return null;\n }\n\n this._priceScale = chartApi.priceScale(id);\n\n this._priceScale.applyOptions(options);\n }\n\n return this._priceScale;\n },\n setId(idToSet) {\n if (this._priceScale === null || chart === null) {\n return;\n }\n\n this._priceScale = chart.api()!.priceScale(idToSet);\n this._priceScale.applyOptions(options);\n },\n clear() {\n this._priceScale = null;\n },\n });\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n if (!isInsidePane) {\n // TODO: Replace the empty docsPath with the published price scale docs route.\n throw new BaseInternalError(\n \"PriceScale must be used inside a pane. Please ensure that the component is wrapped in a pane component.\",\n {\n isOperational: true,\n docsPath: \"\",\n }\n );\n }\n\n if (!isPaneReady) {\n return;\n }\n\n priceScaleApiRef.current.init();\n }, [chartIsReady, isInsidePane, isPaneReady]);\n\n useLayoutEffect(() => {\n return () => {\n priceScaleApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n priceScaleApiRef.current?.setId(id);\n }, [id]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (options) {\n priceScaleApiRef.current?.api()?.applyOptions(options);\n }\n }, [options]);\n\n return priceScaleApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { usePriceScale } from \"./usePriceScale\";\nimport type { PriceScaleApiRef, PriceScaleProps } from \"./types\";\nimport type { ForwardedRef, ForwardRefExoticComponent, JSX, RefAttributes } from \"react\";\n\nconst PriceScaleRenderFunction = (\n props: PriceScaleProps,\n ref: ForwardedRef<PriceScaleApiRef>\n): JSX.Element | null => {\n const priceScaleApiRef = usePriceScale(props);\n useImperativeHandle(ref, () => priceScaleApiRef.current, [priceScaleApiRef]);\n\n return null;\n};\n\n/**\n * PriceScale component that can be used to create/customize price scale in a chart.\n *\n * @param props - The properties for the price scale.\n * @param ref - The ref to access the price scale API.\n * @returns A React component that renders the price scale.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/price-scale | Price Scale documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/price-scale | TradingView documentation for price scale}\n * @example\n * ```tsx\n * <PriceScale id=\"right\" options={{}} />\n * ```\n */\nexport const PriceScale: ForwardRefExoticComponent<\n PriceScaleProps & RefAttributes<PriceScaleApiRef>\n> = forwardRef(PriceScaleRenderFunction);\nPriceScale.displayName = \"PriceScale\";\n","import { useLayoutEffect } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { TimeScaleContext } from \"./TimeScaleContext\";\nimport type { TimeScaleFitContentTriggerProps } from \"./types\";\n\nconst useTimeScaleFitContentTrigger = ({ deps }: TimeScaleFitContentTriggerProps) => {\n const timeScaleContext = useSafeContext(TimeScaleContext);\n const { timeScaleApiRef, isReady } = timeScaleContext;\n\n useLayoutEffect(() => {\n if (!isReady || !timeScaleApiRef) {\n return;\n }\n\n const timeScale = timeScaleApiRef.api();\n queueMicrotask(() => {\n if (timeScale) {\n timeScale.fitContent();\n }\n });\n }, [...deps, isReady]);\n};\n\nexport { useTimeScaleFitContentTrigger };\n","import { useTimeScaleFitContentTrigger } from \"./useTimeScaleFitContentTrigger\";\nimport type { TimeScaleFitContentTriggerProps } from \"./types\";\nimport type { JSX } from \"react\";\n\n/**\n * TimeScaleFitContentTrigger component that triggers a fit content operation on the time scale.\n *\n * @param props - The properties for the time scale fit content trigger.\n * @returns A React component that triggers a fit content operation on the time scale.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/time-scale-fit-content-trigger | Time Scale Fit Content Trigger documentation}\n * @example\n * ```tsx\n * <TimeScaleFitContentTrigger deps={[...]} />\n * ```\n */\nexport const TimeScaleFitContentTrigger = ({\n deps,\n}: TimeScaleFitContentTriggerProps): JSX.Element | null => {\n useTimeScaleFitContentTrigger({ deps });\n\n return null;\n};\n","import { createContext } from \"react\";\nimport { type ISeriesContext } from \"./types\";\n\nconst SeriesContext = createContext<ISeriesContext<unknown>>({\n seriesApiRef: null,\n isReady: false,\n});\nSeriesContext.displayName = \"SeriesContext\";\nexport { SeriesContext };\n","import {\n LineSeries,\n CandlestickSeries,\n HistogramSeries,\n AreaSeries,\n BaselineSeries,\n BarSeries,\n isBusinessDay,\n type BusinessDay,\n type IChartApiBase,\n type SeriesDataItemTypeMap,\n type Time,\n} from \"lightweight-charts\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport type { CustomSeriesUniqueProps, SeriesApiRef, SeriesTemplateProps } from \"./types\";\nimport type { SeriesDefinition, ISeriesApi, SeriesType } from \"lightweight-charts\";\n\ntype SeriesTypeWithoutCustom = Exclude<SeriesType, \"Custom\">;\ntype SeriesDataPoint<\n T extends SeriesType,\n HorzScaleItem = Time,\n> = SeriesDataItemTypeMap<HorzScaleItem>[T];\n\nexport const useSeries = <T extends SeriesType, HorzScaleItem = Time>({\n type,\n data,\n options = {},\n reactive = true,\n seriesOrder,\n alwaysReplaceData = false,\n ...rest\n}: Omit<SeriesTemplateProps<T, HorzScaleItem>, \"children\">) => {\n const {\n isReady: chartIsReady,\n chartApiRef: chart,\n chartKind,\n } = useSafeContext(ChartContext) as IChartContext<\n HorzScaleItem,\n IChartApiBase<HorzScaleItem>\n >;\n const { isPaneReady, isInsidePane, paneApiRef } = usePaneContext<HorzScaleItem>();\n const [isReady, setIsReady] = useState(false);\n\n const seriesApiRef = useRef<SeriesApiRef<T, HorzScaleItem>>({\n _series: null,\n api() {\n return this._series;\n },\n init() {\n if (!this._series) {\n const chartApi = chart?.api();\n\n if (!chartApi) {\n return null;\n }\n\n const paneIndex = isInsidePane ? paneApiRef?.api()?.paneIndex() : undefined;\n\n if (type === \"Custom\") {\n const plugin = (rest as CustomSeriesUniqueProps<HorzScaleItem>).plugin;\n if (!plugin) {\n // TODO: Link this error to docs covering custom series plugin requirements.\n throw new BaseInternalError(\"Custom series requires a plugin to be defined\");\n }\n\n // TODO: Fix this type cast and infer the correct type\n (this._series as unknown as ISeriesApi<\"Custom\", HorzScaleItem>) =\n chartApi.addCustomSeries(plugin, options, paneIndex);\n } else {\n if (chartKind === \"yield-curve\" && type !== \"Area\" && type !== \"Line\") {\n // TODO: Link this error to docs covering YieldCurveChart series constraints.\n throw new BaseInternalError(\n \"YieldCurveChart only supports LineSeries and AreaSeries.\",\n {\n isOperational: true,\n }\n );\n }\n\n this._series = chartApi.addSeries(\n seriesMap[type as SeriesTypeWithoutCustom] as SeriesDefinition<T>,\n options,\n paneIndex\n );\n }\n\n this._series?.setData(data);\n if (seriesOrder !== undefined) {\n this._series?.setSeriesOrder(seriesOrder);\n }\n setIsReady(true);\n }\n\n return this._series;\n },\n clear() {\n if (this._series !== null) {\n chart?.api()?.removeSeries(this._series);\n this._series = null;\n setIsReady(false);\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n if (isInsidePane && !isPaneReady) {\n return;\n }\n\n seriesApiRef.current.init();\n }, [chartIsReady, isInsidePane, isPaneReady]);\n\n useLayoutEffect(() => {\n return () => {\n seriesApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (data && reactive) {\n const seriesApi = seriesApiRef.current.api();\n\n if (!seriesApi) {\n return;\n }\n\n const currentData = seriesApi.data();\n const shouldReplaceData =\n alwaysReplaceData || !canUseIncrementalUpdate(currentData, data);\n\n if (shouldReplaceData) {\n seriesApi.setData(data);\n return;\n }\n\n const lastDataPoint = data[data.length - 1];\n seriesApi.update(lastDataPoint);\n }\n }, [data, reactive, alwaysReplaceData]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (options) {\n seriesApiRef.current.api()?.applyOptions(options);\n }\n }, [options]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (seriesOrder !== undefined) {\n seriesApiRef.current.api()?.setSeriesOrder(seriesOrder);\n }\n }, [seriesOrder]);\n\n return { isReady, seriesApiRef };\n};\n\nconst seriesMap: Record<\n SeriesTypeWithoutCustom,\n SeriesDefinition<SeriesTypeWithoutCustom>\n> = {\n Line: LineSeries,\n Candlestick: CandlestickSeries,\n Histogram: HistogramSeries,\n Area: AreaSeries,\n Baseline: BaselineSeries,\n Bar: BarSeries,\n};\n\nconst canUseIncrementalUpdate = <T extends SeriesType, HorzScaleItem = Time>(\n currentData: readonly SeriesDataPoint<T, HorzScaleItem>[],\n nextData: readonly SeriesDataPoint<T, HorzScaleItem>[]\n) => {\n const dataLengthDifference = nextData.length - currentData.length;\n\n if (\n currentData.length === 0 ||\n nextData.length === 0 ||\n dataLengthDifference < 0 ||\n dataLengthDifference > 1\n ) {\n return false;\n }\n\n if (dataLengthDifference === 0) {\n return (\n hasSameDataPointRefs(currentData, nextData, currentData.length - 1) &&\n hasSameDataPointTime(\n currentData[currentData.length - 1],\n nextData[nextData.length - 1]\n )\n );\n }\n\n return (\n hasSameDataPointRefs(currentData, nextData, currentData.length) &&\n !hasSameDataPointTime(\n currentData[currentData.length - 1],\n nextData[nextData.length - 1]\n )\n );\n};\n\nconst hasSameDataPointRefs = <TData>(\n currentData: readonly TData[],\n nextData: readonly TData[],\n length: number\n) => {\n for (let index = 0; index < length; index += 1) {\n if (currentData[index] !== nextData[index]) {\n return false;\n }\n }\n\n return true;\n};\n\nconst hasSameDataPointTime = <TData extends { time: unknown }>(\n currentDataPoint: TData,\n nextDataPoint: TData\n) => {\n const currentTime = currentDataPoint.time;\n const nextTime = nextDataPoint.time;\n\n return (\n currentTime === nextTime ||\n (isBusinessDayTime(currentTime) &&\n isBusinessDayTime(nextTime) &&\n isSameBusinessDay(currentTime, nextTime))\n );\n};\n\nconst isBusinessDayTime = (time: unknown): time is BusinessDay =>\n isBusinessDay(time as Time);\n\nconst isSameBusinessDay = (\n currentBusinessDay: BusinessDay,\n nextBusinessDay: BusinessDay\n) =>\n currentBusinessDay.year === nextBusinessDay.year &&\n currentBusinessDay.month === nextBusinessDay.month &&\n currentBusinessDay.day === nextBusinessDay.day;\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { SeriesContext } from \"./SeriesContext\";\nimport { useSeries } from \"./useSeries\";\nimport type { SeriesTemplateProps, SeriesApiRef } from \"./types\";\nimport type { SeriesType, Time } from \"lightweight-charts\";\nimport type { ForwardedRef } from \"react\";\n\ntype GenericSeriesComponent = (<T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesTemplateProps<T, HorzScaleItem> & {\n ref?: ForwardedRef<SeriesApiRef<T, HorzScaleItem>>;\n }\n) => ReturnType<typeof SeriesTemplateRenderFunction>) & {\n displayName: string;\n};\n\nconst SeriesTemplateRenderFunction = <T extends SeriesType, HorzScaleItem = Time>(\n { children, ...rest }: SeriesTemplateProps<T, HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<T, HorzScaleItem>>\n) => {\n const {\n seriesApiRef: { current: seriesApiRef },\n isReady,\n } = useSeries(rest);\n useImperativeHandle(ref, () => seriesApiRef, [seriesApiRef]);\n\n return (\n <SeriesContext.Provider\n value={{\n seriesApiRef: seriesApiRef as never,\n isReady,\n }}\n >\n {children}\n </SeriesContext.Provider>\n );\n};\n\nconst SeriesTemplate = forwardRef(SeriesTemplateRenderFunction) as GenericSeriesComponent;\nSeriesTemplate.displayName = \"SeriesTemplate\";\nexport { SeriesTemplate };\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst LineSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Line\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Line\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Line\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * LineSeries component that can be used to create a line series in a chart.\n *\n * @param props - The properties for the line series.\n * @param ref - The ref to access the line series API.\n * @returns A React component that renders the line series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#line | TradingView documentation for line series}\n * @example\n * ```tsx\n * <LineSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const LineSeries = forwardRef(\n LineSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Line\">;\nLineSeries.displayName = \"LineSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst HistogramSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Histogram\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Histogram\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Histogram\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * HistogramSeries component that can be used to create a histogram series in a chart.\n *\n * @param props - The properties for the histogram series.\n * @param ref - The ref to access the histogram series API.\n * @returns A React component that renders the histogram series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#histogram | TradingView documentation for histogram series}\n * @example\n * ```tsx\n * <HistogramSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const HistogramSeries = forwardRef(\n HistogramSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Histogram\">;\nHistogramSeries.displayName = \"HistogramSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst CandlestickSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Candlestick\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Candlestick\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Candlestick\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * CandlestickSeries component that can be used to create a candlestick series in a chart.\n *\n * @param props - The properties for the candlestick series.\n * @param ref - The ref to access the candlestick series API.\n * @returns A React component that renders the candlestick series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#candlestick | TradingView documentation for candlestick series}\n * @example\n * ```tsx\n * <CandlestickSeries\n * data={[\n * { time: '2021-01-01', open: 100, high: 110, low: 90, close: 105 },\n * { time: '2021-01-02', open: 105, high: 115, low: 95, close: 110 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const CandlestickSeries = forwardRef(\n CandlestickSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Candlestick\">;\nCandlestickSeries.displayName = \"CandlestickSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst AreaSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Area\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Area\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Area\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * AreaSeries component that can be used to create an area series in a chart.\n *\n * @param props - The properties for the area series.\n * @param ref - The ref to access the area series API.\n * @returns A React component that renders the area series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#area | TradingView documentation for area series}\n * @example\n * ```tsx\n * <AreaSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const AreaSeries = forwardRef(\n AreaSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Area\">;\nAreaSeries.displayName = \"AreaSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst BaselineSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Baseline\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Baseline\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Baseline\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * BaselineSeries component that can be used to create a baseline series in a chart.\n *\n * @param props - The properties for the baseline series.\n * @param ref - The ref to access the baseline series API.\n * @returns A React component that renders the baseline series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#baseline | TradingView documentation for baseline series}\n * @example\n * ```tsx\n * <BaselineSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const BaselineSeries = forwardRef(\n BaselineSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Baseline\">;\nBaselineSeries.displayName = \"BaselineSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst BarSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Bar\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Bar\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Bar\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * BarSeries component that can be used to create a bar series in a chart.\n *\n * @param props - The properties for the bar series.\n * @param ref - The ref to access the bar series API.\n * @returns A React component that renders the bar series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#bar | TradingView documentation for bar series}\n * @example\n * ```tsx\n * <BarSeries\n * data={[\n * { time: '2021-01-01', open: 100, high: 110, low: 90, close: 105 },\n * { time: '2021-01-02', open: 105, high: 115, low: 95, close: 110 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const BarSeries = forwardRef(\n BarSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Bar\">;\nBarSeries.displayName = \"BarSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst CustomSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Custom\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Custom\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Custom\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * CustomSeries component that can be used to create a custom series in a chart.\n *\n * @param props - The properties for the custom series.\n * @param ref - The ref to access the custom series API.\n * @returns A React component that renders the custom series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#custom-series-plugins | TradingView documentation for custom series}\n * @example\n * ```tsx\n * <CustomSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * plugin={{}}\n * />\n * ```\n */\nexport const CustomSeries = forwardRef(\n CustomSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Custom\">;\nCustomSeries.displayName = \"CustomSeries\";\n","import { useLayoutEffect, useRef } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { SeriesContext } from \"@/series/SeriesContext\";\nimport type { PriceLineApiRef, PriceLineProps } from \"./types\";\n\nexport const usePriceLine = ({ options, price }: PriceLineProps) => {\n const { isReady: seriesIsReady, seriesApiRef: series } = useSafeContext(SeriesContext);\n\n const priceLineApiRef = useRef<PriceLineApiRef>({\n _priceLine: null,\n api() {\n return this._priceLine;\n },\n init() {\n if (!this._priceLine) {\n const seriesApi = series?.api();\n\n if (!seriesApi) {\n return null;\n }\n\n this._priceLine = seriesApi.createPriceLine({\n price,\n ...options,\n });\n }\n\n return this._priceLine;\n },\n clear() {\n if (this._priceLine !== null) {\n series?.api()?.removePriceLine(this._priceLine);\n this._priceLine = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!seriesIsReady) return;\n\n priceLineApiRef.current.init();\n }, [seriesIsReady]);\n\n useLayoutEffect(() => {\n return () => {\n priceLineApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!series) return;\n\n if (options) {\n priceLineApiRef.current.api()?.applyOptions(options);\n }\n }, [options]);\n\n useLayoutEffect(() => {\n if (!series) return;\n\n priceLineApiRef.current.api()?.applyOptions({ price });\n }, [price]);\n\n return priceLineApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { usePriceLine } from \"./usePriceLine\";\nimport type { PriceLineApiRef, PriceLineProps } from \"./types\";\nimport type { ForwardedRef, ForwardRefExoticComponent, JSX, RefAttributes } from \"react\";\n\nconst PriceLineRenderFunction = (\n props: PriceLineProps,\n ref: ForwardedRef<PriceLineApiRef>\n): JSX.Element | null => {\n const priceLineApiRef = usePriceLine(props);\n useImperativeHandle(ref, () => priceLineApiRef.current, [priceLineApiRef]);\n\n return null;\n};\n\n/**\n * PriceLine component that can be used to add a price line to a chart pane.\n *\n * @param props - The properties for the price line.\n * @param ref - The ref to access the price line API.\n * @returns A React component that renders the price line.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/price-lines | Price Lines documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/price-line | TradingView documentation for price lines}\n * @example\n * ```tsx\n * <PriceLine price={100} options={{}} />\n * ```\n */\nexport const PriceLine: ForwardRefExoticComponent<\n PriceLineProps & RefAttributes<PriceLineApiRef>\n> = forwardRef(PriceLineRenderFunction);\nPriceLine.displayName = \"PriceLine\";\n","import { createSeriesMarkers } from \"lightweight-charts\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { SeriesContext } from \"@/series/SeriesContext\";\nimport type { ISeriesContext } from \"@/series/types\";\nimport type { MarkersApiRef, MarkersProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\n\nexport const useMarkers = <HorzScaleItem = Time>({\n reactive = true,\n markers,\n options,\n}: MarkersProps<HorzScaleItem>) => {\n const { isReady: seriesIsReady, seriesApiRef: series } = useSafeContext(\n SeriesContext\n ) as ISeriesContext<HorzScaleItem>;\n\n const markersApiRef = useRef<MarkersApiRef<HorzScaleItem>>({\n _markers: null,\n api() {\n return this._markers;\n },\n init() {\n if (this._markers === null) {\n const seriesApi = series?.api();\n\n if (!seriesApi) {\n return null;\n }\n\n this._markers = createSeriesMarkers(seriesApi, markers, options);\n }\n\n return this._markers;\n },\n clear() {\n if (this._markers !== null) {\n this._markers.detach();\n this._markers = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!seriesIsReady) return;\n\n markersApiRef.current.init();\n }, [seriesIsReady]);\n\n useLayoutEffect(() => {\n return () => {\n markersApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!series) return;\n\n if (markers && reactive) {\n markersApiRef.current.api()?.setMarkers(markers);\n }\n }, [markers, reactive]);\n\n return markersApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { useMarkers } from \"./useMarkers\";\nimport type { MarkersApiRef, MarkersProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericMarkersComponent = (<HorzScaleItem = Time>(\n props: MarkersProps<HorzScaleItem> & {\n ref?: ForwardedRef<MarkersApiRef<HorzScaleItem>>;\n }\n) => JSX.Element | null) & {\n displayName: string;\n};\n\nconst MarkersRenderFunction = <HorzScaleItem = Time,>(\n { ...rest }: MarkersProps<HorzScaleItem>,\n ref: ForwardedRef<MarkersApiRef<HorzScaleItem>>\n): JSX.Element | null => {\n const markersApiRef = useMarkers(rest);\n useImperativeHandle(ref, () => markersApiRef.current, [markersApiRef]);\n\n return null;\n};\n\n/**\n * Markers component that can be used to add markers to a chart pane.\n *\n * @param props - The properties for the markers.\n * @param ref - The ref to access the markers API.\n * @returns A React component that renders the markers.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/markers | Documentation for Markers}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/series-markers | TradingView documentation for markers}\n * @example\n * ```tsx\n * <Markers\n * markers={[\n * { time: 1622548800, position: \"aboveBar\", color: \"red\", shape: \"arrowUp\" },\n * { time: 1622548800, position: \"belowBar\", color: \"green\", shape: \"arrowDown\" },\n * ]}\n * />\n * ```\n */\nexport const Markers = forwardRef(MarkersRenderFunction) as GenericMarkersComponent;\nMarkers.displayName = \"Markers\";\n","import { useRef } from \"react\";\nimport type { MutableRefObject } from \"react\";\n\nexport const useLatestRef = <T>(value: T): MutableRefObject<T> => {\n const ref = useRef(value);\n ref.current = value;\n\n return ref;\n};\n","import { createTextWatermark, createImageWatermark } from \"lightweight-charts\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useLatestRef } from \"@/_shared/useLatestRef\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport type {\n ImageWatermarkProps,\n TextWatermarkProps,\n WatermarkApiRef,\n WatermarkProps,\n WatermarkType,\n} from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\n\ntype WatermarkUpdateOptions<T extends WatermarkType> = T extends \"text\"\n ? TextWatermarkProps\n : Omit<ImageWatermarkProps, \"src\">;\n\nconst useWatermark = <T extends WatermarkType, HorzScaleItem = Time>(\n props: WatermarkProps<T>\n) => {\n const { isReady: chartIsReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isPaneReady, isInsidePane, paneApiRef } = usePaneContext<HorzScaleItem>();\n const propsRef = useLatestRef(props);\n const chartRef = useLatestRef(chart);\n const paneApiRefRef = useLatestRef(paneApiRef);\n const imageSrc = getImageWatermarkSrc(props);\n\n const watermarkApiRef = useRef<WatermarkApiRef<T, HorzScaleItem>>({\n _watermark: null,\n api() {\n return this._watermark;\n },\n init() {\n if (this._watermark === null) {\n const chartApi = chartRef.current?.api();\n\n const pane = paneApiRefRef.current?.api();\n const currentProps = propsRef.current;\n\n if (!chartApi || !pane) return null;\n\n if (isTextWatermark(currentProps)) {\n const { type: _, ...rest } = currentProps;\n this._watermark = createTextWatermark(pane, rest);\n } else {\n const { type: _, src, ...rest } = currentProps as WatermarkProps<\"image\">;\n this._watermark = createImageWatermark(pane, src, rest);\n }\n }\n\n return this._watermark;\n },\n clear() {\n if (this._watermark !== null) {\n this._watermark.detach();\n this._watermark = null;\n }\n },\n } as WatermarkApiRef<T, HorzScaleItem>);\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n if (!isInsidePane) {\n // TODO: Replace the empty docsPath with the published watermarks docs route.\n throw new BaseInternalError(\n \"Watermark must be used inside a pane. Please ensure that the component is wrapped in a pane component.\",\n {\n isOperational: true,\n docsPath: \"\",\n }\n );\n }\n\n if (!isPaneReady) {\n return;\n }\n\n watermarkApiRef.current.clear();\n watermarkApiRef.current.init();\n }, [chartIsReady, isPaneReady, isInsidePane, imageSrc]);\n\n useLayoutEffect(() => {\n return () => {\n watermarkApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!chart || !props) return;\n\n watermarkApiRef.current.api()?.applyOptions(getWatermarkUpdateOptions(props));\n }, [props]);\n\n return watermarkApiRef;\n};\n\nconst getWatermarkUpdateOptions = <T extends WatermarkType>(\n props: WatermarkProps<T>\n): WatermarkUpdateOptions<T> => {\n if (isTextWatermark(props)) {\n const { type: _, ...rest } = props;\n return rest as WatermarkUpdateOptions<T>;\n }\n\n const { type: _, src: __, ...rest } = props as WatermarkProps<\"image\">;\n return rest as WatermarkUpdateOptions<T>;\n};\n\nconst getImageWatermarkSrc = <T extends WatermarkType>(\n props: WatermarkProps<T>\n): string | undefined => {\n if (isTextWatermark(props)) {\n return undefined;\n }\n\n return (props as WatermarkProps<\"image\">).src;\n};\n\nconst isTextWatermark = (\n props: WatermarkProps<WatermarkType>\n): props is WatermarkProps<\"text\"> => {\n return props.type === \"text\";\n};\n\nexport { useWatermark };\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { useWatermark } from \"./useWatermark\";\nimport type {\n ImageWatermarkProps,\n TextWatermarkProps,\n WatermarkApiRef,\n WatermarkProps,\n WatermarkType,\n} from \"./types\";\nimport type { ForwardedRef, ForwardRefExoticComponent, RefAttributes } from \"react\";\n\nconst WatermarkRenderFunction = <T extends WatermarkType>(\n props: WatermarkProps<T>,\n ref: ForwardedRef<WatermarkApiRef<T>>\n) => {\n const watermarkApi = useWatermark(props);\n useImperativeHandle(ref, () => watermarkApi.current, [watermarkApi]);\n\n return null;\n};\n\n/**\n * Watermark component that can be used to add a text or image watermark to a chart pane.\n *\n * @param props - The properties for the watermark.\n * @param ref - The ref to access the watermark API.\n * @returns A React component that renders the watermark.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/watermarks | Watermarks documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/watermark | TradingView documentation for watermarks}\n * @example\n * ```tsx\n * <WatermarkText\n * lines={[\n * { text: \"Your chart name\", color: \"blue\", fontSize: 24 },\n * { text: \"Some other text\", color: \"pink\", fontSize: 16 },\n * ]}\n * horzAlign=\"center\"\n * />\n * ```\n */\nexport const WatermarkText: ForwardRefExoticComponent<\n TextWatermarkProps & RefAttributes<WatermarkApiRef<\"text\">>\n> = forwardRef<WatermarkApiRef<\"text\">, TextWatermarkProps>((props, ref) => {\n return WatermarkRenderFunction({ ...props, type: \"text\" }, ref);\n});\n\n/**\n * Watermark component that can be used to add an image watermark to a chart pane.\n *\n * @param props - The properties for the image watermark.\n * @param ref - The ref to access the watermark API.\n * @returns A React component that renders the image watermark.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/watermarks | Watermarks documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/watermark | TradingView documentation for watermarks}\n * @example\n * ```tsx\n * <WatermarkImage\n * src=\"data:image/svg+xml;base64,...\"\n * alpha={0.5}\n * padding={20}\n * />\n * ```\n */\nexport const WatermarkImage: ForwardRefExoticComponent<\n ImageWatermarkProps & RefAttributes<WatermarkApiRef<\"image\">>\n> = forwardRef<WatermarkApiRef<\"image\">, ImageWatermarkProps>((props, ref) => {\n return WatermarkRenderFunction({ ...props, type: \"image\" }, ref);\n});\n\nWatermarkText.displayName = \"WatermarkText\";\nWatermarkImage.displayName = \"WatermarkImage\";\n","import { useLayoutEffect, useRef } from \"react\";\n\ntype ReactivePrimitiveApiRef<TPrimitive> = {\n _primitive: TPrimitive | null;\n api(): TPrimitive | null;\n init(): TPrimitive | null;\n clear(): void;\n};\n\ntype PrimitiveAttachment<TPrimitive> = {\n primitive: TPrimitive;\n detach: () => void;\n};\n\ntype UseReactivePrimitiveOptions<TPrimitive, TProps> = {\n isReady: boolean;\n props: TProps;\n primitiveIdentity: unknown;\n mountPrimitive: (props: TProps) => PrimitiveAttachment<TPrimitive> | null;\n};\n\nexport const useReactivePrimitive = <TPrimitive, TProps>({\n isReady,\n props,\n primitiveIdentity,\n mountPrimitive,\n}: UseReactivePrimitiveOptions<TPrimitive, TProps>) => {\n const propsRef = useRef(props);\n const primitiveIdentityRef = useRef(primitiveIdentity);\n const mountPrimitiveRef = useRef(mountPrimitive);\n const detachCurrentPrimitiveRef = useRef<(() => void) | null>(null);\n\n propsRef.current = props;\n mountPrimitiveRef.current = mountPrimitive;\n\n const primitiveApiRef = useRef<ReactivePrimitiveApiRef<TPrimitive>>({\n _primitive: null,\n api() {\n return this._primitive;\n },\n init() {\n if (!this._primitive) {\n const attachment = mountPrimitiveRef.current(propsRef.current);\n\n if (!attachment) {\n return null;\n }\n\n detachCurrentPrimitiveRef.current = attachment.detach;\n this._primitive = attachment.primitive;\n }\n\n return this._primitive;\n },\n clear() {\n if (this._primitive !== null) {\n detachCurrentPrimitiveRef.current?.();\n detachCurrentPrimitiveRef.current = null;\n this._primitive = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!isReady) {\n return;\n }\n\n if (primitiveIdentityRef.current !== primitiveIdentity) {\n primitiveApiRef.current.clear();\n primitiveIdentityRef.current = primitiveIdentity;\n }\n\n primitiveApiRef.current.init();\n }, [isReady, primitiveIdentity]);\n\n useLayoutEffect(() => {\n return () => {\n primitiveApiRef.current.clear();\n };\n }, []);\n\n return primitiveApiRef;\n};\n","import { useLayoutEffect, useRef } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport { useReactivePrimitive } from \"./useReactivePrimitive\";\nimport type { PanePrimitiveApiRef, PanePrimitiveProps } from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\nimport type { RefObject } from \"react\";\n\nexport const usePanePrimitive = <HorzScaleItem = Time>(\n props: PanePrimitiveProps<HorzScaleItem>\n): RefObject<PanePrimitiveApiRef<HorzScaleItem>> => {\n const { isReady: isChartReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isInsidePane, isPaneReady, paneApiRef: pane } = usePaneContext<HorzScaleItem>();\n const chartApiRef = useRef(chart);\n const paneApiRef = useRef(pane);\n\n chartApiRef.current = chart;\n paneApiRef.current = pane;\n const panePrimitiveApiRef = useReactivePrimitive({\n isReady: isChartReady && isInsidePane && isPaneReady,\n props,\n primitiveIdentity: props.plugin ?? props.render,\n mountPrimitive(currentProps) {\n const chartApi = chartApiRef.current?.api();\n const paneApi = paneApiRef.current?.api();\n\n if (!chartApi || !paneApi) {\n return null;\n }\n\n const primitive =\n currentProps.plugin !== undefined\n ? currentProps.plugin\n : currentProps.render({\n chart: chartApi,\n pane: paneApi,\n });\n\n paneApi.attachPrimitive(primitive);\n\n return {\n primitive,\n detach: () => paneApi.detachPrimitive(primitive),\n };\n },\n });\n\n useLayoutEffect(() => {\n if (!isChartReady) {\n return;\n }\n\n if (!isInsidePane) {\n throw new BaseInternalError(\n \"PanePrimitive must be used inside a pane. Please ensure that the component is wrapped in a pane component.\",\n {\n isOperational: true,\n docsPath: \"pane-primitives\",\n }\n );\n }\n }, [isChartReady, isInsidePane]);\n\n return panePrimitiveApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { usePanePrimitive } from \"./usePanePrimitive\";\nimport type { PanePrimitiveApiRef, PanePrimitiveProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericPanePrimitiveComponent = (<HorzScaleItem = Time>(\n props: PanePrimitiveProps<HorzScaleItem> & {\n ref?: ForwardedRef<PanePrimitiveApiRef<HorzScaleItem>>;\n }\n) => ReturnType<typeof PanePrimitiveRenderFunction>) & {\n displayName: string;\n};\n\nconst PanePrimitiveRenderFunction = <HorzScaleItem = Time,>(\n props: PanePrimitiveProps<HorzScaleItem>,\n ref: ForwardedRef<PanePrimitiveApiRef<HorzScaleItem>>\n): JSX.Element | null => {\n const panePrimitiveApiRef = usePanePrimitive(props);\n useImperativeHandle(ref, () => panePrimitiveApiRef.current, [panePrimitiveApiRef]);\n\n return null;\n};\n\n/**\n * PanePrimitive component that can be used to create a primitive on a pane.\n *\n * @param props - The properties for the pane primitive.\n * @param ref - The ref to access the pane primitive API.\n * @returns A React component that renders the pane primitive.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/pane-primitives | Pane primitives documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/plugins/pane-primitives | TradingView documentation for pane primitive}\n * @example\n * ```tsx\n * <Pane>\n * <PanePrimitive render={({ chart, pane }) => new MyPanePrimitive(chart, pane)} />\n * </Pane>\n * ```\n */\nexport const PanePrimitive = forwardRef(\n PanePrimitiveRenderFunction\n) as GenericPanePrimitiveComponent;\nPanePrimitive.displayName = \"PanePrimitive\";\n","import { useRef } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { SeriesContext } from \"@/series/SeriesContext\";\nimport type { ISeriesContext } from \"@/series/types\";\nimport { useReactivePrimitive } from \"./useReactivePrimitive\";\nimport type { SeriesPrimitiveApiRef, SeriesPrimitiveProps } from \"./types\";\nimport type { IChartApiBase, SeriesType, Time } from \"lightweight-charts\";\nimport type { ISeriesApi } from \"lightweight-charts\";\nimport type { RefObject } from \"react\";\n\nexport const useSeriesPrimitive = <T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesPrimitiveProps<T, HorzScaleItem>\n): RefObject<SeriesPrimitiveApiRef<HorzScaleItem>> => {\n const { isReady: isChartReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isReady: seriesIsReady, seriesApiRef: series } = useSafeContext(\n SeriesContext\n ) as ISeriesContext<HorzScaleItem>;\n const chartApiRef = useRef(chart);\n const seriesApiRef = useRef(series);\n\n chartApiRef.current = chart;\n seriesApiRef.current = series;\n const seriesPrimitiveApiRef = useReactivePrimitive({\n isReady: isChartReady && seriesIsReady,\n props,\n primitiveIdentity: props.plugin ?? props.render,\n mountPrimitive(currentProps) {\n const seriesApi = seriesApiRef.current?.api();\n const chartApi = chartApiRef.current?.api();\n\n if (!chartApi || !seriesApi) {\n return null;\n }\n\n const primitive =\n currentProps.plugin !== undefined\n ? currentProps.plugin\n : currentProps.render({\n chart: chartApi,\n series: seriesApi as ISeriesApi<T, HorzScaleItem>,\n });\n\n seriesApi.attachPrimitive(primitive);\n\n return {\n primitive,\n detach: () => seriesApi.detachPrimitive(primitive),\n };\n },\n });\n\n return seriesPrimitiveApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { useSeriesPrimitive } from \"./useSeriesPrimitive\";\nimport type { SeriesPrimitiveApiRef, SeriesPrimitiveProps } from \"./types\";\nimport type { SeriesType, Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericSeriesPrimitiveComponent = (<T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesPrimitiveProps<T, HorzScaleItem> & {\n ref?: ForwardedRef<SeriesPrimitiveApiRef<HorzScaleItem>>;\n }\n) => ReturnType<typeof SeriesPrimitiveRenderFunction>) & {\n displayName: string;\n};\n\nconst SeriesPrimitiveRenderFunction = <T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesPrimitiveProps<T, HorzScaleItem>,\n ref: ForwardedRef<SeriesPrimitiveApiRef<HorzScaleItem>>\n): JSX.Element | null => {\n const seriesPrimitiveApiRef = useSeriesPrimitive(props);\n useImperativeHandle(ref, () => seriesPrimitiveApiRef.current, [seriesPrimitiveApiRef]);\n\n return null;\n};\n\n/**\n * SeriesPrimitive component that can be used to create a primitive on series.\n *\n * @param props - The properties for the series primitive.\n * @param ref - The ref to access the series primitive API.\n * @returns A React component that renders the series primitive.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series-primitives | Series primitives documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/plugins/series-primitives | TradingView documentation for series primitive}\n * @example\n * ```tsx\n * <SeriesPrimitive render={{}} />\n * <SeriesPrimitive plugin={{}} />\n * ```\n */\nexport const SeriesPrimitive = forwardRef(\n SeriesPrimitiveRenderFunction\n) as GenericSeriesPrimitiveComponent;\nSeriesPrimitive.displayName = \"SeriesPrimitive\";\n","import { useLayoutEffect, useRef, useState, useEffect } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport type { PaneApiRef, PaneProps } from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\n\nexport const usePane = <HorzScaleItem = Time>({\n stretchFactor,\n}: Omit<PaneProps, \"children\"> = {}) => {\n const { chartApiRef: chart, isReady: chartIsReady } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const [isReady, setIsReady] = useState(false);\n\n const paneApiRef = useRef<PaneApiRef<HorzScaleItem>>({\n _pane: null,\n api() {\n return this._pane;\n },\n init() {\n const chartApi = chart?.api();\n if (!chartApi) return null;\n\n const pane = chartApi.addPane(true);\n this._pane = pane;\n\n setIsReady(true);\n\n if (stretchFactor !== undefined) {\n this._pane.setStretchFactor(stretchFactor);\n }\n\n return this._pane;\n },\n clear() {\n if (this._pane !== null) {\n chart?.api()?.removePane(this._pane.paneIndex());\n setIsReady(false);\n\n this._pane = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n paneApiRef.current.init();\n }, [chartIsReady]);\n\n useEffect(() => {\n return () => {\n paneApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (stretchFactor === undefined) return;\n\n const pane = paneApiRef.current.api();\n if (pane) {\n pane.setStretchFactor(stretchFactor);\n }\n }, [stretchFactor]);\n\n return { paneApiRef, isReady };\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { PaneContext } from \"./PaneContext\";\nimport { usePane } from \"./usePane\";\nimport type { PaneProps, PaneApiRef } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericPaneComponent = (<HorzScaleItem = Time>(\n props: PaneProps & {\n ref?: ForwardedRef<PaneApiRef<HorzScaleItem>>;\n }\n) => JSX.Element) & {\n displayName: string;\n};\n\nconst PaneRenderFunction = <HorzScaleItem = Time,>(\n { children, stretchFactor }: PaneProps,\n ref: ForwardedRef<PaneApiRef<HorzScaleItem>>\n): JSX.Element => {\n const {\n paneApiRef: { current: paneApiRef },\n isReady,\n } = usePane<HorzScaleItem>({\n stretchFactor,\n });\n useImperativeHandle(ref, () => paneApiRef, [paneApiRef]);\n\n return (\n <PaneContext.Provider\n value={{\n paneApiRef: paneApiRef as never,\n isReady,\n }}\n >\n {children}\n </PaneContext.Provider>\n );\n};\n\n/**\n * Pane component that can be used to create a pane in a chart.\n *\n * @param props - The properties for the pane.\n * @param ref - The ref to access the pane API.\n * @returns A React component that renders the pane.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/panes | Panes documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/panes | TradingView documentation for panes}\n * @example\n * ```tsx\n * <Pane stretchFactor={2}>\n * ...\n * </Pane>\n * ```\n */\nexport const Pane = forwardRef(PaneRenderFunction) as GenericPaneComponent;\nPane.displayName = \"Pane\";\n"],"names":["assignRef","ref","value","ChartContext","createContext","defaultChartOptions","useChart","container","onClick","onCrosshairMove","options","onDblClick","createChartApi","createChart","isReady","setIsReady","useState","chartApiRef","useRef","chart","useLayoutEffect","_chartApiRef_current_api","ChartComponent","forwardRef","children","chartKind","useImperativeHandle","ChartWrapper","containerProps","containerRef","rest","setContainer","handleContainerRef","useCallback","node","undefined","OptionsChart","createOptionsChart","YieldCurveChart","createYieldCurveChart","CustomChart","horzScaleBehavior","createCustomChart","chartContainer","createChartEx","TimeScaleContext","version","BaseInternalError","Error","message","isOperational","cause","docsPath","docsBaseUrl","Object","useSafeContext","context","errorMessage","currentContextValue","useContext","ctxName","PaneContext","usePaneContext","paneContext","isInsidePane","isPaneReady","paneApiRef","useTimeScale","onVisibleTimeRangeChange","onVisibleLogicalRangeChange","onSizeChange","visibleRange","visibleLogicalRange","chartIsReady","timeScaleApiRef","chartApi","_timeScaleApiRef_current_api","timeScaleApi","TimeScale","props","usePriceScale","id","priceScaleApiRef","idToSet","_priceScaleApiRef_current","_priceScaleApiRef_current_api","PriceScale","useTimeScaleFitContentTrigger","deps","timeScale","queueMicrotask","TimeScaleFitContentTrigger","SeriesContext","useSeries","type","data","reactive","seriesOrder","alwaysReplaceData","seriesApiRef","_paneApiRef_api","_this__series","_this__series1","paneIndex","plugin","seriesMap","_chart_api","seriesApi","currentData","canUseIncrementalUpdate","lastDataPoint","_seriesApiRef_current_api","LineSeries","CandlestickSeries","HistogramSeries","AreaSeries","BaselineSeries","BarSeries","nextData","dataLengthDifference","hasSameDataPointRefs","hasSameDataPointTime","length","index","currentDataPoint","nextDataPoint","currentTime","nextTime","isBusinessDayTime","isSameBusinessDay","time","isBusinessDay","currentBusinessDay","nextBusinessDay","SeriesTemplate","CustomSeries","usePriceLine","price","seriesIsReady","series","priceLineApiRef","_series_api","_priceLineApiRef_current_api","PriceLine","useMarkers","markers","markersApiRef","createSeriesMarkers","_markersApiRef_current_api","Markers","useLatestRef","useWatermark","propsRef","chartRef","paneApiRefRef","imageSrc","getImageWatermarkSrc","watermarkApiRef","_chartRef_current","_paneApiRefRef_current","pane","currentProps","isTextWatermark","_","createTextWatermark","src","createImageWatermark","_watermarkApiRef_current_api","getWatermarkUpdateOptions","__","WatermarkRenderFunction","watermarkApi","WatermarkText","WatermarkImage","useReactivePrimitive","primitiveIdentity","mountPrimitive","primitiveIdentityRef","mountPrimitiveRef","detachCurrentPrimitiveRef","primitiveApiRef","attachment","usePanePrimitive","isChartReady","panePrimitiveApiRef","_chartApiRef_current","_paneApiRef_current","paneApi","primitive","PanePrimitive","useSeriesPrimitive","_seriesApiRef_current","SeriesPrimitive","seriesPrimitiveApiRef","usePane","stretchFactor","useEffect","Pane"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lightweight-charts-react-components.mjs","sources":["webpack://lightweight-charts-react-components/./src/_shared/assignRef.ts","webpack://lightweight-charts-react-components/./src/chart/ChartContext.ts","webpack://lightweight-charts-react-components/./src/chart/defaultChartOptions.ts","webpack://lightweight-charts-react-components/./src/chart/useChart.ts","webpack://lightweight-charts-react-components/./src/chart/ChartComponent.tsx","webpack://lightweight-charts-react-components/./src/chart/ChartWrapper.tsx","webpack://lightweight-charts-react-components/./src/chart/OptionsChart.tsx","webpack://lightweight-charts-react-components/./src/chart/YieldCurveChart.tsx","webpack://lightweight-charts-react-components/./src/chart/CustomChart.tsx","webpack://lightweight-charts-react-components/./src/scales/TimeScaleContext.ts","webpack://lightweight-charts-react-components/./src/version.ts","webpack://lightweight-charts-react-components/./src/_shared/InternalError.ts","webpack://lightweight-charts-react-components/./src/_shared/docsBaseUrl.ts","webpack://lightweight-charts-react-components/./src/_shared/useSafeContext.ts","webpack://lightweight-charts-react-components/./src/pane/PaneContext.ts","webpack://lightweight-charts-react-components/./src/pane/usePaneContext.ts","webpack://lightweight-charts-react-components/./src/scales/useTimeScale.ts","webpack://lightweight-charts-react-components/./src/scales/TimeScale.tsx","webpack://lightweight-charts-react-components/./src/_shared/useLatestRef.ts","webpack://lightweight-charts-react-components/./src/series/SeriesContext.ts","webpack://lightweight-charts-react-components/./src/scales/usePriceScale.ts","webpack://lightweight-charts-react-components/./src/scales/PriceScale.tsx","webpack://lightweight-charts-react-components/./src/scales/useTimeScaleFitContentTrigger.ts","webpack://lightweight-charts-react-components/./src/scales/TimeScaleFitContentTrigger.tsx","webpack://lightweight-charts-react-components/./src/series/useSeries.ts","webpack://lightweight-charts-react-components/./src/series/SeriesTemplate.tsx","webpack://lightweight-charts-react-components/./src/series/LineSeries.tsx","webpack://lightweight-charts-react-components/./src/series/HistogramSeries.tsx","webpack://lightweight-charts-react-components/./src/series/CandlestickSeries.tsx","webpack://lightweight-charts-react-components/./src/series/AreaSeries.tsx","webpack://lightweight-charts-react-components/./src/series/BaselineSeries.tsx","webpack://lightweight-charts-react-components/./src/series/BarSeries.tsx","webpack://lightweight-charts-react-components/./src/series/CustomSeries.tsx","webpack://lightweight-charts-react-components/./src/priceLine/usePriceLine.ts","webpack://lightweight-charts-react-components/./src/priceLine/PriceLine.tsx","webpack://lightweight-charts-react-components/./src/markers/useMarkers.ts","webpack://lightweight-charts-react-components/./src/markers/Markers.tsx","webpack://lightweight-charts-react-components/./src/watermark/useWatermark.ts","webpack://lightweight-charts-react-components/./src/watermark/Watermark.tsx","webpack://lightweight-charts-react-components/./src/primitives/useReactivePrimitive.ts","webpack://lightweight-charts-react-components/./src/primitives/usePanePrimitive.ts","webpack://lightweight-charts-react-components/./src/primitives/PanePrimitive.tsx","webpack://lightweight-charts-react-components/./src/primitives/useSeriesPrimitive.ts","webpack://lightweight-charts-react-components/./src/primitives/SeriesPrimitive.tsx","webpack://lightweight-charts-react-components/./src/pane/usePane.ts","webpack://lightweight-charts-react-components/./src/pane/Pane.tsx"],"sourcesContent":["import type { RefObject, Ref } from \"react\";\n\nexport const assignRef = <T>(ref: Ref<T> | undefined, value: T | null): void => {\n if (!ref) {\n return;\n }\n\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n\n (ref as RefObject<T | null>).current = value;\n};\n","import { createContext } from \"react\";\nimport { type IChartContext } from \"./types\";\nimport type { IChartApiBase } from \"lightweight-charts\";\n\nconst ChartContext = createContext<IChartContext<unknown, IChartApiBase<unknown>> | null>(\n null\n);\n\nChartContext.displayName = \"ChartContext\";\nexport { ChartContext };\n","import type { DefaultChartOptions } from \"./types\";\n\nconst defaultChartOptions: DefaultChartOptions = {\n addDefaultPane: false,\n};\n\nexport { defaultChartOptions };\n","import {\n createChart,\n type ChartOptionsImpl,\n type DeepPartial,\n type Time,\n} from \"lightweight-charts\";\nimport { useEffect, useLayoutEffect, useRef, useState } from \"react\";\nimport { defaultChartOptions } from \"./defaultChartOptions\";\nimport type {\n ChartApiInstance,\n ChartApiRef,\n CreateChartApi,\n UseChartOptions,\n} from \"./types\";\n\nexport const useChart = <\n HorzScaleItem = Time,\n TChartApi extends ChartApiInstance<HorzScaleItem> = ChartApiInstance<HorzScaleItem>,\n TOptions extends ChartOptionsImpl<HorzScaleItem> = ChartOptionsImpl<HorzScaleItem>,\n>({\n container,\n onClick,\n onCrosshairMove,\n options = {},\n onDblClick,\n createChartApi = createChart as unknown as CreateChartApi<\n HorzScaleItem,\n TChartApi,\n TOptions\n >,\n}: UseChartOptions<HorzScaleItem, TChartApi, TOptions>) => {\n const [isReady, setIsReady] = useState(false);\n\n const chartApiRef = useRef<ChartApiRef<HorzScaleItem, TChartApi>>({\n _chart: null,\n _isDisposing: false,\n api() {\n return this._chart;\n },\n init() {\n if (this._chart === null) {\n const chart = createChartApi(container, {\n ...defaultChartOptions,\n ...options,\n } as DeepPartial<TOptions>);\n this._chart = chart;\n }\n\n if (!isReady) {\n setIsReady(true);\n }\n\n return this._chart;\n },\n clear() {\n this._isDisposing = false;\n\n if (this._chart !== null) {\n setIsReady(false);\n this._chart.remove();\n this._chart = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n chartApiRef.current.init();\n\n // On deletion this runs before child cleanups, so series can skip native\n // removal: it would rebuild the timeline and fire user range handlers.\n return () => {\n chartApiRef.current._isDisposing = true;\n };\n }, []);\n\n // Children detach plugins in layout cleanup. Destroy the chart afterwards so\n // their invalidations cannot schedule drawing against disposed canvases.\n useEffect(() => {\n return () => {\n chartApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n if (onClick) {\n chartApiRef.current.api()?.subscribeClick(onClick);\n }\n\n return () => {\n if (onClick) {\n chartApiRef.current.api()?.unsubscribeClick(onClick);\n }\n };\n }, [onClick]);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n if (onCrosshairMove) {\n chartApiRef.current.api()?.subscribeCrosshairMove(onCrosshairMove);\n }\n\n return () => {\n if (onCrosshairMove) {\n chartApiRef.current.api()?.unsubscribeCrosshairMove(onCrosshairMove);\n }\n };\n }, [onCrosshairMove]);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n if (onDblClick) {\n chartApiRef.current.api()?.subscribeDblClick(onDblClick);\n }\n\n return () => {\n if (onDblClick) {\n chartApiRef.current.api()?.unsubscribeDblClick(onDblClick);\n }\n };\n }, [onDblClick]);\n\n useLayoutEffect(() => {\n if (!container) return;\n\n chartApiRef.current.api()?.applyOptions({\n ...defaultChartOptions,\n ...options,\n } as DeepPartial<TOptions>);\n }, [options]);\n\n return { chartApiRef, isReady };\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { ChartContext } from \"./ChartContext\";\nimport { useChart } from \"./useChart\";\nimport type { ChartApiInstance, ChartApiRef, ChartComponentProps } from \"./types\";\nimport type { ChartOptionsImpl } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericChartComponent = (<\n HorzScaleItem,\n TChartApi extends ChartApiInstance<HorzScaleItem> = ChartApiInstance<HorzScaleItem>,\n TOptions extends ChartOptionsImpl<HorzScaleItem> = ChartOptionsImpl<HorzScaleItem>,\n>(\n props: ChartComponentProps<HorzScaleItem, TChartApi, TOptions> & {\n ref?: ForwardedRef<ChartApiRef<HorzScaleItem, TChartApi>>;\n }\n) => JSX.Element) & {\n displayName?: string;\n};\n\nconst ChartComponentRenderFunction = <\n HorzScaleItem,\n TChartApi extends ChartApiInstance<HorzScaleItem> = ChartApiInstance<HorzScaleItem>,\n TOptions extends ChartOptionsImpl<HorzScaleItem> = ChartOptionsImpl<HorzScaleItem>,\n>(\n {\n children,\n container,\n onClick,\n onCrosshairMove,\n options,\n onDblClick,\n chartKind = \"time\",\n createChartApi,\n }: ChartComponentProps<HorzScaleItem, TChartApi, TOptions>,\n ref: ForwardedRef<ChartApiRef<HorzScaleItem, TChartApi>>\n) => {\n const {\n chartApiRef: { current: chartApiRef },\n isReady,\n } = useChart({\n container,\n onClick,\n onCrosshairMove,\n options,\n onDblClick,\n createChartApi,\n });\n useImperativeHandle(ref, () => chartApiRef, [chartApiRef]);\n\n return (\n <ChartContext.Provider\n value={{\n chartApiRef: chartApiRef as never,\n isReady,\n chartKind,\n }}\n >\n {children}\n </ChartContext.Provider>\n );\n};\n\nconst ChartComponent = forwardRef(ChartComponentRenderFunction) as GenericChartComponent;\nChartComponent.displayName = \"ChartComponent\";\n\nexport { ChartComponent };\n","import { createChart, type IChartApi, type Time } from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, ChartProps } from \"./types\";\nimport type {\n ForwardRefExoticComponent,\n ForwardRefRenderFunction,\n RefAttributes,\n} from \"react\";\n\nconst ChartRenderFunction: ForwardRefRenderFunction<\n ChartApiRef<Time, IChartApi>,\n ChartProps\n> = ({ children, containerProps, containerRef, ...rest }, ref) => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent\n ref={ref}\n container={container}\n createChartApi={createChart}\n chartKind=\"time\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * Chart component that can be used to create a chart.\n *\n * @param props - The properties for the chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types | TradingView documentation for charts}\n * @example\n * ```tsx\n * <Chart>\n * <Pane stretchFactor={2}>\n * ...\n * </Pane>\n * </Chart>\n * ```\n */\nexport const ChartWrapper: ForwardRefExoticComponent<\n ChartProps & RefAttributes<ChartApiRef<Time, IChartApi>>\n> = forwardRef(ChartRenderFunction);\nChartWrapper.displayName = \"ChartWrapper\";\n","import {\n createOptionsChart,\n type IChartApiBase,\n type PriceChartOptions,\n} from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, OptionsChartProps } from \"./types\";\nimport type {\n ForwardRefExoticComponent,\n ForwardRefRenderFunction,\n RefAttributes,\n} from \"react\";\n\nconst OptionsChartRenderFunction: ForwardRefRenderFunction<\n ChartApiRef<number, IChartApiBase<number>>,\n OptionsChartProps\n> = ({ children, containerProps, containerRef, ...rest }, ref) => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent<number, IChartApiBase<number>, PriceChartOptions>\n ref={ref}\n container={container}\n createChartApi={createOptionsChart}\n chartKind=\"options\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * OptionsChart component that can be used to create a price-based horizontal scale chart.\n *\n * @param props - The properties for the options chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the options chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types#options-chart-price-based | TradingView documentation for options charts}\n * @example\n * ```tsx\n * <OptionsChart>\n * <LineSeries data={[{ time: 95, value: 1.2 }, { time: 100, value: 2.8 }]} />\n * </OptionsChart>\n * ```\n */\nexport const OptionsChart: ForwardRefExoticComponent<\n OptionsChartProps & RefAttributes<ChartApiRef<number, IChartApiBase<number>>>\n> = forwardRef(OptionsChartRenderFunction);\nOptionsChart.displayName = \"OptionsChart\";\n","import {\n createYieldCurveChart,\n type IYieldCurveChartApi,\n type YieldCurveChartOptions,\n} from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, YieldCurveChartProps } from \"./types\";\nimport type {\n ForwardRefExoticComponent,\n ForwardRefRenderFunction,\n RefAttributes,\n} from \"react\";\n\nconst YieldCurveChartRenderFunction: ForwardRefRenderFunction<\n ChartApiRef<number, IYieldCurveChartApi>,\n YieldCurveChartProps\n> = ({ children, containerProps, containerRef, ...rest }, ref) => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent<number, IYieldCurveChartApi, YieldCurveChartOptions>\n ref={ref}\n container={container}\n createChartApi={createYieldCurveChart}\n chartKind=\"yield-curve\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * YieldCurveChart component that can be used to create a yield curve chart.\n *\n * @param props - The properties for the yield curve chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the yield curve chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types#yield-curve-chart | TradingView documentation for yield curve charts}\n * @example\n * ```tsx\n * <YieldCurveChart>\n * <LineSeries data={[{ time: 1, value: 5.2 }, { time: 12, value: 4.7 }]} />\n * </YieldCurveChart>\n * ```\n */\nexport const YieldCurveChart: ForwardRefExoticComponent<\n YieldCurveChartProps & RefAttributes<ChartApiRef<number, IYieldCurveChartApi>>\n> = forwardRef(YieldCurveChartRenderFunction);\nYieldCurveChart.displayName = \"YieldCurveChart\";\n","import {\n createChartEx,\n type DeepPartial,\n type IChartApiBase,\n type IHorzScaleBehavior,\n} from \"lightweight-charts\";\nimport { forwardRef, useCallback, useState } from \"react\";\nimport React from \"react\";\nimport { assignRef } from \"@/_shared/assignRef\";\nimport { ChartComponent } from \"./ChartComponent\";\nimport type { ChartApiRef, CustomChartProps } from \"./types\";\nimport type { ForwardedRef, JSX, RefAttributes } from \"react\";\n\ntype CustomChartForwardRefComponent = (<\n HorzScaleItem,\n THorzScaleBehavior extends IHorzScaleBehavior<HorzScaleItem>,\n>(\n props: CustomChartProps<HorzScaleItem, THorzScaleBehavior> &\n RefAttributes<ChartApiRef<HorzScaleItem, IChartApiBase<HorzScaleItem>>>\n) => JSX.Element) & {\n displayName: string;\n};\n\nconst CustomChartRenderFunction = <\n HorzScaleItem,\n THorzScaleBehavior extends IHorzScaleBehavior<HorzScaleItem>,\n>(\n {\n children,\n containerProps,\n containerRef,\n horzScaleBehavior,\n ...rest\n }: CustomChartProps<HorzScaleItem, THorzScaleBehavior>,\n ref: ForwardedRef<ChartApiRef<HorzScaleItem, IChartApiBase<HorzScaleItem>>>\n): JSX.Element => {\n const [container, setContainer] = useState<HTMLDivElement>();\n const handleContainerRef = useCallback(\n (node: HTMLDivElement | null) => {\n setContainer(node ?? undefined);\n assignRef(containerRef, node);\n },\n [containerRef]\n );\n\n const createCustomChart = useCallback(\n (\n chartContainer: HTMLElement,\n options?: DeepPartial<ReturnType<THorzScaleBehavior[\"options\"]>>\n ) => {\n return createChartEx<HorzScaleItem, THorzScaleBehavior>(\n chartContainer,\n horzScaleBehavior,\n options\n );\n },\n [horzScaleBehavior]\n );\n\n return (\n <div\n ref={handleContainerRef}\n aria-hidden={containerProps?.[\"aria-hidden\"] ?? true}\n {...containerProps}\n >\n {!!container && (\n <ChartComponent<\n HorzScaleItem,\n IChartApiBase<HorzScaleItem>,\n ReturnType<THorzScaleBehavior[\"options\"]>\n >\n ref={ref}\n container={container}\n createChartApi={createCustomChart}\n chartKind=\"custom\"\n {...rest}\n >\n {children}\n </ChartComponent>\n )}\n </div>\n );\n};\n\n/**\n * CustomChart component that can be used to create a chart with a custom horizontal scale behavior.\n *\n * @param props - The properties for the custom chart.\n * @param ref - The ref to access the chart API.\n * Use `containerRef` to access the wrapper div element.\n * @returns A React component that renders the custom chart.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/chart | Chart documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/chart-types#custom-horizontal-scale-chart | TradingView documentation for custom horizontal scale charts}\n * @example\n * ```tsx\n * <CustomChart horzScaleBehavior={new (defaultHorzScaleBehavior())()}>\n * <LineSeries data={[{ time: \"2025-01-01\", value: 100 }]} />\n * </CustomChart>\n * ```\n */\nexport const CustomChart = forwardRef(\n CustomChartRenderFunction\n) as CustomChartForwardRefComponent;\nCustomChart.displayName = \"CustomChart\";\n","import { createContext } from \"react\";\nimport { type ITimeScaleContext } from \"./types\";\n\nconst TimeScaleContext = createContext<ITimeScaleContext<unknown> | null>(null);\nTimeScaleContext.displayName = \"TimeScaleContext\";\nexport { TimeScaleContext };\n","export const version = \"2.7.0\";\n","import { version } from \"../version\";\nimport { docsBaseUrl } from \"./docsBaseUrl\";\n\ntype IBaseErrorParameters = {\n /**\n * An operational error refers to an error that occurs during normal program operation\n * due to external factors or expected failures, not due to bugs in the code itself.\n */\n isOperational?: boolean;\n /**\n * The cause of the error, if any.\n * This can be used to provide additional context or information about the error.\n */\n cause?: Error | BaseInternalError;\n /**\n * A path to the documentation that can help resolve the error.\n * This is useful for providing users with guidance on how to fix or understand the error.\n */\n docsPath?: string;\n};\n\nclass BaseInternalError extends Error {\n public isOperational: boolean;\n public override cause?: Error | BaseInternalError;\n\n constructor(\n message?: string,\n { isOperational = true, cause, docsPath }: IBaseErrorParameters = {}\n ) {\n super(message);\n\n this.name = this.constructor.name ?? \"InternalError\";\n this.isOperational = isOperational;\n this.cause = cause;\n\n this.message = `${message ?? \"An error occurred\"}`;\n\n if (docsPath) {\n this.message = `${this.message}\\n\\nDocs: see ${docsBaseUrl + docsPath}`;\n }\n\n if (version) {\n this.message = `${this.message}\\n\\nVersion: lightweight-charts-react-components@${version}`;\n }\n\n Object.setPrototypeOf(this, BaseInternalError.prototype);\n }\n}\n\nexport { BaseInternalError };\n","const docsBaseUrl = \"https://ukorvl.github.io/lightweight-charts-react-components/docs/\";\nexport { docsBaseUrl };\n","import { type Context, useContext } from \"react\";\nimport { BaseInternalError } from \"./InternalError\";\n\nconst useSafeContext = <T>(context: Context<T>, errorMessage?: string) => {\n const currentContextValue = useContext(context);\n\n if (!currentContextValue) {\n const ctxName = context.name ?? context.displayName ?? \"Context\";\n // TODO: Accept a docsPath so missing-context errors can link to the relevant docs.\n throw new BaseInternalError(errorMessage ?? `${ctxName} not found.`, {\n isOperational: true,\n });\n }\n\n return currentContextValue;\n};\n\nexport { useSafeContext };\n","import { createContext } from \"react\";\nimport { type IPaneContext } from \"./types\";\n\nconst PaneContext = createContext<IPaneContext<unknown> | null>(null);\n\nPaneContext.displayName = \"PaneContext\";\nexport { PaneContext };\n","import { useContext } from \"react\";\nimport { PaneContext } from \"./PaneContext\";\nimport type { IPaneContext } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\n\nconst usePaneContext = <HorzScaleItem = Time>() => {\n const paneContext = useContext(PaneContext) as IPaneContext<HorzScaleItem> | null;\n\n const isInsidePane = !!paneContext;\n const isPaneReady = !!paneContext?.isReady;\n const paneApiRef = paneContext?.paneApiRef;\n\n return { isInsidePane, isPaneReady, paneApiRef };\n};\n\nexport { usePaneContext };\n","import { useLayoutEffect, useRef, useState } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport type { TimeScaleApiRef, TimeScaleProps } from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\n\nexport const useTimeScale = <HorzScaleItem = Time>({\n onVisibleTimeRangeChange,\n onVisibleLogicalRangeChange,\n onSizeChange,\n visibleRange,\n visibleLogicalRange,\n options = {},\n}: Omit<TimeScaleProps<HorzScaleItem>, \"children\">) => {\n const { isReady: chartIsReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isPaneReady, isInsidePane } = usePaneContext<HorzScaleItem>();\n const [isReady, setIsReady] = useState(false);\n\n const timeScaleApiRef = useRef<TimeScaleApiRef<HorzScaleItem>>({\n _timeScale: null,\n api() {\n return this._timeScale;\n },\n init() {\n if (this._timeScale) {\n return this._timeScale;\n }\n\n const chartApi = chart?.api();\n\n if (!chartApi) {\n return null;\n }\n\n this._timeScale = chartApi.timeScale();\n\n this._timeScale.applyOptions(options);\n\n if (visibleRange) {\n this._timeScale.setVisibleRange(visibleRange);\n }\n\n if (visibleLogicalRange) {\n this._timeScale.setVisibleLogicalRange(visibleLogicalRange);\n }\n\n setIsReady(true);\n\n return this._timeScale;\n },\n clear() {\n this._timeScale = null;\n setIsReady(false);\n },\n });\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n if (isInsidePane && !isPaneReady) {\n return;\n }\n\n timeScaleApiRef.current.init();\n }, [chartIsReady, isInsidePane, isPaneReady]);\n\n useLayoutEffect(() => {\n return () => {\n timeScaleApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (options) {\n timeScaleApiRef.current?.api()?.applyOptions(options);\n }\n }, [options]);\n\n useLayoutEffect(() => {\n if (!chart || !isReady) return;\n\n const timeScaleApi = timeScaleApiRef.current.api();\n\n if (onSizeChange && timeScaleApi) {\n timeScaleApi.subscribeSizeChange(onSizeChange);\n }\n\n return () => {\n if (onSizeChange && timeScaleApi) {\n timeScaleApi.unsubscribeSizeChange(onSizeChange);\n }\n };\n }, [chart, isReady, onSizeChange]);\n\n useLayoutEffect(() => {\n if (!chart || !isReady) return;\n\n const timeScaleApi = timeScaleApiRef.current.api();\n\n if (onVisibleLogicalRangeChange && timeScaleApi) {\n timeScaleApi.subscribeVisibleLogicalRangeChange(onVisibleLogicalRangeChange);\n }\n\n return () => {\n if (onVisibleLogicalRangeChange && timeScaleApi) {\n timeScaleApi.unsubscribeVisibleLogicalRangeChange(onVisibleLogicalRangeChange);\n }\n };\n }, [chart, isReady, onVisibleLogicalRangeChange]);\n\n useLayoutEffect(() => {\n if (!chart || !isReady) return;\n\n const timeScaleApi = timeScaleApiRef.current.api();\n\n if (onVisibleTimeRangeChange && timeScaleApi) {\n timeScaleApi.subscribeVisibleTimeRangeChange(onVisibleTimeRangeChange);\n }\n\n return () => {\n if (onVisibleTimeRangeChange && timeScaleApi) {\n timeScaleApi.unsubscribeVisibleTimeRangeChange(onVisibleTimeRangeChange);\n }\n };\n }, [chart, isReady, onVisibleTimeRangeChange]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (visibleRange) {\n timeScaleApiRef.current?.api()?.setVisibleRange(visibleRange);\n }\n }, [visibleRange]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (visibleLogicalRange) {\n timeScaleApiRef.current?.api()?.setVisibleLogicalRange(visibleLogicalRange);\n }\n }, [visibleLogicalRange]);\n\n return { timeScaleApiRef, isReady };\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { TimeScaleContext } from \"./TimeScaleContext\";\nimport { useTimeScale } from \"./useTimeScale\";\nimport type { TimeScaleApiRef, TimeScaleProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericTimeScaleComponent = (<HorzScaleItem = Time>(\n props: TimeScaleProps<HorzScaleItem> & {\n ref?: ForwardedRef<TimeScaleApiRef<HorzScaleItem>>;\n }\n) => JSX.Element) & {\n displayName: string;\n};\n\nconst TimeScaleRenderFunction = <HorzScaleItem = Time,>(\n { children, ...props }: TimeScaleProps<HorzScaleItem>,\n ref: ForwardedRef<TimeScaleApiRef<HorzScaleItem>>\n): JSX.Element => {\n const {\n timeScaleApiRef: { current: timeScaleApiRef },\n isReady,\n } = useTimeScale(props);\n useImperativeHandle(ref, () => timeScaleApiRef, [timeScaleApiRef]);\n\n return (\n <TimeScaleContext.Provider\n value={{\n timeScaleApiRef: timeScaleApiRef as never,\n isReady,\n }}\n >\n {children}\n </TimeScaleContext.Provider>\n );\n};\n\n/**\n * TimeScale component that can be used to create/customize time scale in a chart.\n *\n * @param props - The properties for the time scale.\n * @param ref - The ref to access the time scale API.\n * @returns A React component that renders the time scale.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/time-scale | Time Scale documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/time-scale | TradingView documentation for time scale}\n * @example\n * ```tsx\n * <TimeScale\n * visibleRange={{ from: 0, to: 100 }}\n * onVisibleTimeRangeChange={() => {}}\n * />\n * ```\n */\nexport const TimeScale = forwardRef(TimeScaleRenderFunction) as GenericTimeScaleComponent;\nTimeScale.displayName = \"TimeScale\";\n","import { useRef } from \"react\";\nimport type { MutableRefObject } from \"react\";\n\nexport const useLatestRef = <T>(value: T): MutableRefObject<T> => {\n const ref = useRef(value);\n ref.current = value;\n\n return ref;\n};\n","import { createContext } from \"react\";\nimport { type ISeriesContext } from \"./types\";\n\nconst SeriesContext = createContext<ISeriesContext<unknown>>({\n seriesApiRef: null,\n isReady: false,\n});\nSeriesContext.displayName = \"SeriesContext\";\nexport { SeriesContext };\n","import { useContext, useEffect, useLayoutEffect, useRef } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useLatestRef } from \"@/_shared/useLatestRef\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport { SeriesContext } from \"@/series/SeriesContext\";\nimport type { PriceScaleProps, PriceScaleApiRef } from \"./types\";\n\nexport const usePriceScale = ({ options = {}, id }: PriceScaleProps) => {\n const { isReady: chartIsReady, chartApiRef: chart } = useSafeContext(ChartContext);\n const { isInsidePane, isPaneReady, paneApiRef } = usePaneContext();\n // Custom (overlay) price scales exist only after a series that uses them is added,\n // so a PriceScale nested inside a series waits for that series.\n const { seriesApiRef: series, isReady: seriesIsReady } = useContext(SeriesContext);\n const isParentSeriesReady = series === null || seriesIsReady;\n const optionsRef = useLatestRef(options);\n\n const priceScaleApiRef = useRef<PriceScaleApiRef>({\n _priceScale: null,\n api() {\n return this._priceScale;\n },\n init() {\n if (!this._priceScale) {\n const chartApi = chart?.api();\n\n if (!chartApi) {\n return null;\n }\n\n this._priceScale = chartApi.priceScale(id, paneApiRef?.api()?.paneIndex());\n\n this._priceScale.applyOptions(optionsRef.current);\n }\n\n return this._priceScale;\n },\n setId(idToSet) {\n if (this._priceScale === null || chart === null) {\n return;\n }\n\n this._priceScale = chart.api()!.priceScale(idToSet, paneApiRef?.api()?.paneIndex());\n this._priceScale.applyOptions(optionsRef.current);\n },\n clear() {\n this._priceScale = null;\n },\n });\n\n // Passive, so a series that switches to this custom priceScaleId while mounting it applies the switch first\n useEffect(() => {\n if (!chartIsReady) return;\n\n if (!isInsidePane) {\n // TODO: Replace the empty docsPath with the published price scale docs route.\n throw new BaseInternalError(\n \"PriceScale must be used inside a pane. Please ensure that the component is wrapped in a pane component.\",\n {\n isOperational: true,\n docsPath: \"\",\n }\n );\n }\n\n if (!isPaneReady || !isParentSeriesReady) {\n return;\n }\n\n priceScaleApiRef.current.init();\n }, [chartIsReady, isInsidePane, isPaneReady, isParentSeriesReady]);\n\n useLayoutEffect(() => {\n return () => {\n priceScaleApiRef.current.clear();\n };\n }, []);\n\n // Passive, so it runs after a parent series applies a new custom priceScaleId. Rebinding on\n // every update also picks up the current pane index, which shifts when a pane above is removed.\n // shortcut: api() keeps the old pane index until the next id or options update, re-resolve it in api() if imperative callers need it.\n useEffect(() => {\n if (!chart) return;\n\n priceScaleApiRef.current.setId(id);\n }, [id, options]);\n\n return priceScaleApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { usePriceScale } from \"./usePriceScale\";\nimport type { PriceScaleApiRef, PriceScaleProps } from \"./types\";\nimport type { ForwardedRef, ForwardRefExoticComponent, JSX, RefAttributes } from \"react\";\n\nconst PriceScaleRenderFunction = (\n props: PriceScaleProps,\n ref: ForwardedRef<PriceScaleApiRef>\n): JSX.Element | null => {\n const priceScaleApiRef = usePriceScale(props);\n useImperativeHandle(ref, () => priceScaleApiRef.current, [priceScaleApiRef]);\n\n return null;\n};\n\n/**\n * PriceScale component that can be used to customize a price scale of the pane it is rendered in.\n *\n * @param props - The properties for the price scale.\n * @param ref - The ref to access the price scale API.\n * @returns A React component that renders the price scale.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/price-scale | Price Scale documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/price-scale | TradingView documentation for price scale}\n * @example\n * ```tsx\n * <PriceScale id=\"right\" options={{}} />\n *\n * // Custom overlay price scale used by the parent series\n * <HistogramSeries data={volume} options={{ priceScaleId: \"volume\" }}>\n * <PriceScale id=\"volume\" options={{ scaleMargins: { top: 0.8, bottom: 0 } }} />\n * </HistogramSeries>\n * ```\n */\nexport const PriceScale: ForwardRefExoticComponent<\n PriceScaleProps & RefAttributes<PriceScaleApiRef>\n> = forwardRef(PriceScaleRenderFunction);\nPriceScale.displayName = \"PriceScale\";\n","import { useLayoutEffect } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { TimeScaleContext } from \"./TimeScaleContext\";\nimport type { TimeScaleFitContentTriggerProps } from \"./types\";\n\nconst useTimeScaleFitContentTrigger = ({ deps }: TimeScaleFitContentTriggerProps) => {\n const timeScaleContext = useSafeContext(TimeScaleContext);\n const { timeScaleApiRef, isReady } = timeScaleContext;\n\n useLayoutEffect(() => {\n if (!isReady || !timeScaleApiRef) {\n return;\n }\n\n const timeScale = timeScaleApiRef.api();\n queueMicrotask(() => {\n if (timeScale) {\n timeScale.fitContent();\n }\n });\n }, [...deps, isReady]);\n};\n\nexport { useTimeScaleFitContentTrigger };\n","import { useTimeScaleFitContentTrigger } from \"./useTimeScaleFitContentTrigger\";\nimport type { TimeScaleFitContentTriggerProps } from \"./types\";\nimport type { JSX } from \"react\";\n\n/**\n * TimeScaleFitContentTrigger component that triggers a fit content operation on the time scale.\n *\n * @param props - The properties for the time scale fit content trigger.\n * @returns A React component that triggers a fit content operation on the time scale.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/time-scale-fit-content-trigger | Time Scale Fit Content Trigger documentation}\n * @example\n * ```tsx\n * <TimeScaleFitContentTrigger deps={[...]} />\n * ```\n */\nexport const TimeScaleFitContentTrigger = ({\n deps,\n}: TimeScaleFitContentTriggerProps): JSX.Element | null => {\n useTimeScaleFitContentTrigger({ deps });\n\n return null;\n};\n","import {\n LineSeries,\n CandlestickSeries,\n HistogramSeries,\n AreaSeries,\n BaselineSeries,\n BarSeries,\n isBusinessDay,\n type BusinessDay,\n type IChartApiBase,\n type SeriesDataItemTypeMap,\n type Time,\n} from \"lightweight-charts\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport type { CustomSeriesUniqueProps, SeriesApiRef, SeriesTemplateProps } from \"./types\";\nimport type { SeriesDefinition, ISeriesApi, SeriesType } from \"lightweight-charts\";\n\ntype SeriesTypeWithoutCustom = Exclude<SeriesType, \"Custom\">;\ntype SeriesDataPoint<\n T extends SeriesType,\n HorzScaleItem = Time,\n> = SeriesDataItemTypeMap<HorzScaleItem>[T];\n\nexport const useSeries = <T extends SeriesType, HorzScaleItem = Time>({\n type,\n data,\n options = {},\n reactive = true,\n seriesOrder,\n alwaysReplaceData = false,\n ...rest\n}: Omit<SeriesTemplateProps<T, HorzScaleItem>, \"children\">) => {\n const {\n isReady: chartIsReady,\n chartApiRef: chart,\n chartKind,\n } = useSafeContext(ChartContext) as IChartContext<\n HorzScaleItem,\n IChartApiBase<HorzScaleItem>\n >;\n const { isPaneReady, isInsidePane, paneApiRef } = usePaneContext<HorzScaleItem>();\n const [isReady, setIsReady] = useState(false);\n\n const seriesApiRef = useRef<SeriesApiRef<T, HorzScaleItem>>({\n _series: null,\n api() {\n return this._series;\n },\n init() {\n if (!this._series) {\n const chartApi = chart?.api();\n\n if (!chartApi) {\n return null;\n }\n\n const paneIndex = isInsidePane ? paneApiRef?.api()?.paneIndex() : undefined;\n\n if (type === \"Custom\") {\n const plugin = (rest as CustomSeriesUniqueProps<HorzScaleItem>).plugin;\n if (!plugin) {\n // TODO: Link this error to docs covering custom series plugin requirements.\n throw new BaseInternalError(\"Custom series requires a plugin to be defined\");\n }\n\n // TODO: Fix this type cast and infer the correct type\n (this._series as unknown as ISeriesApi<\"Custom\", HorzScaleItem>) =\n chartApi.addCustomSeries(plugin, options, paneIndex);\n } else {\n if (chartKind === \"yield-curve\" && type !== \"Area\" && type !== \"Line\") {\n // TODO: Link this error to docs covering YieldCurveChart series constraints.\n throw new BaseInternalError(\n \"YieldCurveChart only supports LineSeries and AreaSeries.\",\n {\n isOperational: true,\n }\n );\n }\n\n this._series = chartApi.addSeries(\n seriesMap[type as SeriesTypeWithoutCustom] as SeriesDefinition<T>,\n options,\n paneIndex\n );\n }\n\n this._series?.setData(data);\n if (seriesOrder !== undefined) {\n this._series?.setSeriesOrder(seriesOrder);\n }\n setIsReady(true);\n }\n\n return this._series;\n },\n clear() {\n if (this._series !== null) {\n if (!chart?._isDisposing) {\n chart?.api()?.removeSeries(this._series);\n }\n this._series = null;\n setIsReady(false);\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n if (isInsidePane && !isPaneReady) {\n return;\n }\n\n seriesApiRef.current.init();\n }, [chartIsReady, isInsidePane, isPaneReady]);\n\n useLayoutEffect(() => {\n return () => {\n seriesApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (data && reactive) {\n const seriesApi = seriesApiRef.current.api();\n\n if (!seriesApi) {\n return;\n }\n\n const currentData = seriesApi.data();\n const shouldReplaceData =\n alwaysReplaceData || !canUseIncrementalUpdate(currentData, data);\n\n if (shouldReplaceData) {\n seriesApi.setData(data);\n return;\n }\n\n const lastDataPoint = data[data.length - 1];\n seriesApi.update(lastDataPoint);\n }\n }, [data, reactive, alwaysReplaceData]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (options) {\n seriesApiRef.current.api()?.applyOptions(options);\n }\n }, [options]);\n\n useLayoutEffect(() => {\n if (!chart) return;\n\n if (seriesOrder !== undefined) {\n seriesApiRef.current.api()?.setSeriesOrder(seriesOrder);\n }\n }, [seriesOrder]);\n\n return { isReady, seriesApiRef };\n};\n\nconst seriesMap: Record<\n SeriesTypeWithoutCustom,\n SeriesDefinition<SeriesTypeWithoutCustom>\n> = {\n Line: LineSeries,\n Candlestick: CandlestickSeries,\n Histogram: HistogramSeries,\n Area: AreaSeries,\n Baseline: BaselineSeries,\n Bar: BarSeries,\n};\n\nconst canUseIncrementalUpdate = <T extends SeriesType, HorzScaleItem = Time>(\n currentData: readonly SeriesDataPoint<T, HorzScaleItem>[],\n nextData: readonly SeriesDataPoint<T, HorzScaleItem>[]\n) => {\n const dataLengthDifference = nextData.length - currentData.length;\n\n if (\n currentData.length === 0 ||\n nextData.length === 0 ||\n dataLengthDifference < 0 ||\n dataLengthDifference > 1\n ) {\n return false;\n }\n\n if (dataLengthDifference === 0) {\n return (\n hasSameDataPointRefs(currentData, nextData, currentData.length - 1) &&\n hasSameDataPointTime(\n currentData[currentData.length - 1],\n nextData[nextData.length - 1]\n )\n );\n }\n\n return (\n hasSameDataPointRefs(currentData, nextData, currentData.length) &&\n !hasSameDataPointTime(\n currentData[currentData.length - 1],\n nextData[nextData.length - 1]\n )\n );\n};\n\nconst hasSameDataPointRefs = <TData>(\n currentData: readonly TData[],\n nextData: readonly TData[],\n length: number\n) => {\n for (let index = 0; index < length; index += 1) {\n if (currentData[index] !== nextData[index]) {\n return false;\n }\n }\n\n return true;\n};\n\nconst hasSameDataPointTime = <TData extends { time: unknown }>(\n currentDataPoint: TData,\n nextDataPoint: TData\n) => {\n const currentTime = currentDataPoint.time;\n const nextTime = nextDataPoint.time;\n\n return (\n currentTime === nextTime ||\n (isBusinessDayTime(currentTime) &&\n isBusinessDayTime(nextTime) &&\n isSameBusinessDay(currentTime, nextTime))\n );\n};\n\nconst isBusinessDayTime = (time: unknown): time is BusinessDay =>\n isBusinessDay(time as Time);\n\nconst isSameBusinessDay = (\n currentBusinessDay: BusinessDay,\n nextBusinessDay: BusinessDay\n) =>\n currentBusinessDay.year === nextBusinessDay.year &&\n currentBusinessDay.month === nextBusinessDay.month &&\n currentBusinessDay.day === nextBusinessDay.day;\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { SeriesContext } from \"./SeriesContext\";\nimport { useSeries } from \"./useSeries\";\nimport type { SeriesTemplateProps, SeriesApiRef } from \"./types\";\nimport type { SeriesType, Time } from \"lightweight-charts\";\nimport type { ForwardedRef } from \"react\";\n\ntype GenericSeriesComponent = (<T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesTemplateProps<T, HorzScaleItem> & {\n ref?: ForwardedRef<SeriesApiRef<T, HorzScaleItem>>;\n }\n) => ReturnType<typeof SeriesTemplateRenderFunction>) & {\n displayName: string;\n};\n\nconst SeriesTemplateRenderFunction = <T extends SeriesType, HorzScaleItem = Time>(\n { children, ...rest }: SeriesTemplateProps<T, HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<T, HorzScaleItem>>\n) => {\n const {\n seriesApiRef: { current: seriesApiRef },\n isReady,\n } = useSeries(rest);\n useImperativeHandle(ref, () => seriesApiRef, [seriesApiRef]);\n\n return (\n <SeriesContext.Provider\n value={{\n seriesApiRef: seriesApiRef as never,\n isReady,\n }}\n >\n {children}\n </SeriesContext.Provider>\n );\n};\n\nconst SeriesTemplate = forwardRef(SeriesTemplateRenderFunction) as GenericSeriesComponent;\nSeriesTemplate.displayName = \"SeriesTemplate\";\nexport { SeriesTemplate };\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst LineSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Line\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Line\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Line\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * LineSeries component that can be used to create a line series in a chart.\n *\n * @param props - The properties for the line series.\n * @param ref - The ref to access the line series API.\n * @returns A React component that renders the line series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#line | TradingView documentation for line series}\n * @example\n * ```tsx\n * <LineSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const LineSeries = forwardRef(\n LineSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Line\">;\nLineSeries.displayName = \"LineSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst HistogramSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Histogram\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Histogram\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Histogram\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * HistogramSeries component that can be used to create a histogram series in a chart.\n *\n * @param props - The properties for the histogram series.\n * @param ref - The ref to access the histogram series API.\n * @returns A React component that renders the histogram series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#histogram | TradingView documentation for histogram series}\n * @example\n * ```tsx\n * <HistogramSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const HistogramSeries = forwardRef(\n HistogramSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Histogram\">;\nHistogramSeries.displayName = \"HistogramSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst CandlestickSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Candlestick\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Candlestick\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Candlestick\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * CandlestickSeries component that can be used to create a candlestick series in a chart.\n *\n * @param props - The properties for the candlestick series.\n * @param ref - The ref to access the candlestick series API.\n * @returns A React component that renders the candlestick series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#candlestick | TradingView documentation for candlestick series}\n * @example\n * ```tsx\n * <CandlestickSeries\n * data={[\n * { time: '2021-01-01', open: 100, high: 110, low: 90, close: 105 },\n * { time: '2021-01-02', open: 105, high: 115, low: 95, close: 110 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const CandlestickSeries = forwardRef(\n CandlestickSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Candlestick\">;\nCandlestickSeries.displayName = \"CandlestickSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst AreaSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Area\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Area\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Area\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * AreaSeries component that can be used to create an area series in a chart.\n *\n * @param props - The properties for the area series.\n * @param ref - The ref to access the area series API.\n * @returns A React component that renders the area series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#area | TradingView documentation for area series}\n * @example\n * ```tsx\n * <AreaSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const AreaSeries = forwardRef(\n AreaSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Area\">;\nAreaSeries.displayName = \"AreaSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst BaselineSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Baseline\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Baseline\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Baseline\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * BaselineSeries component that can be used to create a baseline series in a chart.\n *\n * @param props - The properties for the baseline series.\n * @param ref - The ref to access the baseline series API.\n * @returns A React component that renders the baseline series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#baseline | TradingView documentation for baseline series}\n * @example\n * ```tsx\n * <BaselineSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const BaselineSeries = forwardRef(\n BaselineSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Baseline\">;\nBaselineSeries.displayName = \"BaselineSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst BarSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Bar\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Bar\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Bar\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * BarSeries component that can be used to create a bar series in a chart.\n *\n * @param props - The properties for the bar series.\n * @param ref - The ref to access the bar series API.\n * @returns A React component that renders the bar series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#bar | TradingView documentation for bar series}\n * @example\n * ```tsx\n * <BarSeries\n * data={[\n * { time: '2021-01-01', open: 100, high: 110, low: 90, close: 105 },\n * { time: '2021-01-02', open: 105, high: 115, low: 95, close: 110 }\n * ]}\n * options={{}}\n * />\n * ```\n */\nexport const BarSeries = forwardRef(\n BarSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Bar\">;\nBarSeries.displayName = \"BarSeries\";\n","import { forwardRef } from \"react\";\nimport React from \"react\";\nimport { SeriesTemplate } from \"./SeriesTemplate\";\nimport type { SeriesApiRef, SeriesForwardRefComponent, SeriesProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\nconst CustomSeriesRenderFunction = <HorzScaleItem = Time,>(\n { children, ...rest }: SeriesProps<\"Custom\", HorzScaleItem>,\n ref: ForwardedRef<SeriesApiRef<\"Custom\", HorzScaleItem>>\n): JSX.Element => {\n return (\n <SeriesTemplate type=\"Custom\" ref={ref} {...rest}>\n {children}\n </SeriesTemplate>\n );\n};\n\n/**\n * CustomSeries component that can be used to create a custom series in a chart.\n *\n * @param props - The properties for the custom series.\n * @param ref - The ref to access the custom series API.\n * @returns A React component that renders the custom series.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series | Series documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/series-types#custom-series-plugins | TradingView documentation for custom series}\n * @example\n * ```tsx\n * <CustomSeries\n * data={[\n * { time: '2021-01-01', value: 100 },\n * { time: '2021-01-02', value: 200 }\n * ]}\n * options={{}}\n * plugin={{}}\n * />\n * ```\n */\nexport const CustomSeries = forwardRef(\n CustomSeriesRenderFunction\n) as SeriesForwardRefComponent<\"Custom\">;\nCustomSeries.displayName = \"CustomSeries\";\n","import { useLayoutEffect, useRef } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { SeriesContext } from \"@/series/SeriesContext\";\nimport type { PriceLineApiRef, PriceLineProps } from \"./types\";\n\nexport const usePriceLine = ({ options, price }: PriceLineProps) => {\n const { isReady: seriesIsReady, seriesApiRef: series } = useSafeContext(SeriesContext);\n\n const priceLineApiRef = useRef<PriceLineApiRef>({\n _priceLine: null,\n api() {\n return this._priceLine;\n },\n init() {\n if (!this._priceLine) {\n const seriesApi = series?.api();\n\n if (!seriesApi) {\n return null;\n }\n\n this._priceLine = seriesApi.createPriceLine({\n price,\n ...options,\n });\n }\n\n return this._priceLine;\n },\n clear() {\n if (this._priceLine !== null) {\n series?.api()?.removePriceLine(this._priceLine);\n this._priceLine = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!seriesIsReady) return;\n\n priceLineApiRef.current.init();\n }, [seriesIsReady]);\n\n useLayoutEffect(() => {\n return () => {\n priceLineApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!series) return;\n\n if (options) {\n priceLineApiRef.current.api()?.applyOptions(options);\n }\n }, [options]);\n\n useLayoutEffect(() => {\n if (!series) return;\n\n priceLineApiRef.current.api()?.applyOptions({ price });\n }, [price]);\n\n return priceLineApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { usePriceLine } from \"./usePriceLine\";\nimport type { PriceLineApiRef, PriceLineProps } from \"./types\";\nimport type { ForwardedRef, ForwardRefExoticComponent, JSX, RefAttributes } from \"react\";\n\nconst PriceLineRenderFunction = (\n props: PriceLineProps,\n ref: ForwardedRef<PriceLineApiRef>\n): JSX.Element | null => {\n const priceLineApiRef = usePriceLine(props);\n useImperativeHandle(ref, () => priceLineApiRef.current, [priceLineApiRef]);\n\n return null;\n};\n\n/**\n * PriceLine component that can be used to add a price line to a chart pane.\n *\n * @param props - The properties for the price line.\n * @param ref - The ref to access the price line API.\n * @returns A React component that renders the price line.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/price-lines | Price Lines documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/price-line | TradingView documentation for price lines}\n * @example\n * ```tsx\n * <PriceLine price={100} options={{}} />\n * ```\n */\nexport const PriceLine: ForwardRefExoticComponent<\n PriceLineProps & RefAttributes<PriceLineApiRef>\n> = forwardRef(PriceLineRenderFunction);\nPriceLine.displayName = \"PriceLine\";\n","import { createSeriesMarkers } from \"lightweight-charts\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { SeriesContext } from \"@/series/SeriesContext\";\nimport type { ISeriesContext } from \"@/series/types\";\nimport type { MarkersApiRef, MarkersProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\n\nexport const useMarkers = <HorzScaleItem = Time>({\n reactive = true,\n markers,\n options,\n}: MarkersProps<HorzScaleItem>) => {\n const { isReady: seriesIsReady, seriesApiRef: series } = useSafeContext(\n SeriesContext\n ) as ISeriesContext<HorzScaleItem>;\n\n const markersApiRef = useRef<MarkersApiRef<HorzScaleItem>>({\n _markers: null,\n api() {\n return this._markers;\n },\n init() {\n if (this._markers === null) {\n const seriesApi = series?.api();\n\n if (!seriesApi) {\n return null;\n }\n\n this._markers = createSeriesMarkers(seriesApi, markers, options);\n }\n\n return this._markers;\n },\n clear() {\n if (this._markers !== null) {\n this._markers.detach();\n this._markers = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!seriesIsReady) return;\n\n markersApiRef.current.init();\n }, [seriesIsReady]);\n\n useLayoutEffect(() => {\n return () => {\n markersApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!series) return;\n\n if (markers && reactive) {\n markersApiRef.current.api()?.setMarkers(markers);\n }\n }, [markers, reactive]);\n\n return markersApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { useMarkers } from \"./useMarkers\";\nimport type { MarkersApiRef, MarkersProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericMarkersComponent = (<HorzScaleItem = Time>(\n props: MarkersProps<HorzScaleItem> & {\n ref?: ForwardedRef<MarkersApiRef<HorzScaleItem>>;\n }\n) => JSX.Element | null) & {\n displayName: string;\n};\n\nconst MarkersRenderFunction = <HorzScaleItem = Time,>(\n { ...rest }: MarkersProps<HorzScaleItem>,\n ref: ForwardedRef<MarkersApiRef<HorzScaleItem>>\n): JSX.Element | null => {\n const markersApiRef = useMarkers(rest);\n useImperativeHandle(ref, () => markersApiRef.current, [markersApiRef]);\n\n return null;\n};\n\n/**\n * Markers component that can be used to add markers to a chart pane.\n *\n * @param props - The properties for the markers.\n * @param ref - The ref to access the markers API.\n * @returns A React component that renders the markers.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/markers | Documentation for Markers}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/series-markers | TradingView documentation for markers}\n * @example\n * ```tsx\n * <Markers\n * markers={[\n * { time: 1622548800, position: \"aboveBar\", color: \"red\", shape: \"arrowUp\" },\n * { time: 1622548800, position: \"belowBar\", color: \"green\", shape: \"arrowDown\" },\n * ]}\n * />\n * ```\n */\nexport const Markers = forwardRef(MarkersRenderFunction) as GenericMarkersComponent;\nMarkers.displayName = \"Markers\";\n","import { createTextWatermark, createImageWatermark } from \"lightweight-charts\";\nimport { useLayoutEffect, useRef } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useLatestRef } from \"@/_shared/useLatestRef\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport type {\n ImageWatermarkProps,\n TextWatermarkProps,\n WatermarkApiRef,\n WatermarkProps,\n WatermarkType,\n} from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\n\ntype WatermarkUpdateOptions<T extends WatermarkType> = T extends \"text\"\n ? TextWatermarkProps\n : Omit<ImageWatermarkProps, \"src\">;\n\nconst useWatermark = <T extends WatermarkType, HorzScaleItem = Time>(\n props: WatermarkProps<T>\n) => {\n const { isReady: chartIsReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isPaneReady, isInsidePane, paneApiRef } = usePaneContext<HorzScaleItem>();\n const propsRef = useLatestRef(props);\n const chartRef = useLatestRef(chart);\n const paneApiRefRef = useLatestRef(paneApiRef);\n const imageSrc = getImageWatermarkSrc(props);\n\n const watermarkApiRef = useRef<WatermarkApiRef<T, HorzScaleItem>>({\n _watermark: null,\n api() {\n return this._watermark;\n },\n init() {\n if (this._watermark === null) {\n const chartApi = chartRef.current?.api();\n\n const pane = paneApiRefRef.current?.api();\n const currentProps = propsRef.current;\n\n if (!chartApi || !pane) return null;\n\n if (isTextWatermark(currentProps)) {\n const { type: _, ...rest } = currentProps;\n this._watermark = createTextWatermark(pane, rest);\n } else {\n const { type: _, src, ...rest } = currentProps as WatermarkProps<\"image\">;\n this._watermark = createImageWatermark(pane, src, rest);\n }\n }\n\n return this._watermark;\n },\n clear() {\n if (this._watermark !== null) {\n this._watermark.detach();\n this._watermark = null;\n }\n },\n } as WatermarkApiRef<T, HorzScaleItem>);\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n if (!isInsidePane) {\n // TODO: Replace the empty docsPath with the published watermarks docs route.\n throw new BaseInternalError(\n \"Watermark must be used inside a pane. Please ensure that the component is wrapped in a pane component.\",\n {\n isOperational: true,\n docsPath: \"\",\n }\n );\n }\n\n if (!isPaneReady) {\n return;\n }\n\n watermarkApiRef.current.clear();\n watermarkApiRef.current.init();\n }, [chartIsReady, isPaneReady, isInsidePane, imageSrc]);\n\n useLayoutEffect(() => {\n return () => {\n watermarkApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (!chart || !props) return;\n\n watermarkApiRef.current.api()?.applyOptions(getWatermarkUpdateOptions(props));\n }, [props]);\n\n return watermarkApiRef;\n};\n\nconst getWatermarkUpdateOptions = <T extends WatermarkType>(\n props: WatermarkProps<T>\n): WatermarkUpdateOptions<T> => {\n if (isTextWatermark(props)) {\n const { type: _, ...rest } = props;\n return rest as WatermarkUpdateOptions<T>;\n }\n\n const { type: _, src: __, ...rest } = props as WatermarkProps<\"image\">;\n return rest as WatermarkUpdateOptions<T>;\n};\n\nconst getImageWatermarkSrc = <T extends WatermarkType>(\n props: WatermarkProps<T>\n): string | undefined => {\n if (isTextWatermark(props)) {\n return undefined;\n }\n\n return (props as WatermarkProps<\"image\">).src;\n};\n\nconst isTextWatermark = (\n props: WatermarkProps<WatermarkType>\n): props is WatermarkProps<\"text\"> => {\n return props.type === \"text\";\n};\n\nexport { useWatermark };\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { useWatermark } from \"./useWatermark\";\nimport type {\n ImageWatermarkProps,\n TextWatermarkProps,\n WatermarkApiRef,\n WatermarkProps,\n WatermarkType,\n} from \"./types\";\nimport type { ForwardedRef, ForwardRefExoticComponent, RefAttributes } from \"react\";\n\nconst WatermarkRenderFunction = <T extends WatermarkType>(\n props: WatermarkProps<T>,\n ref: ForwardedRef<WatermarkApiRef<T>>\n) => {\n const watermarkApi = useWatermark(props);\n useImperativeHandle(ref, () => watermarkApi.current, [watermarkApi]);\n\n return null;\n};\n\n/**\n * Watermark component that can be used to add a text or image watermark to a chart pane.\n *\n * @param props - The properties for the watermark.\n * @param ref - The ref to access the watermark API.\n * @returns A React component that renders the watermark.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/watermarks | Watermarks documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/watermark | TradingView documentation for watermarks}\n * @example\n * ```tsx\n * <WatermarkText\n * lines={[\n * { text: \"Your chart name\", color: \"blue\", fontSize: 24 },\n * { text: \"Some other text\", color: \"pink\", fontSize: 16 },\n * ]}\n * horzAlign=\"center\"\n * />\n * ```\n */\nexport const WatermarkText: ForwardRefExoticComponent<\n TextWatermarkProps & RefAttributes<WatermarkApiRef<\"text\">>\n> = forwardRef<WatermarkApiRef<\"text\">, TextWatermarkProps>((props, ref) => {\n return WatermarkRenderFunction({ ...props, type: \"text\" }, ref);\n});\n\n/**\n * Watermark component that can be used to add an image watermark to a chart pane.\n *\n * @param props - The properties for the image watermark.\n * @param ref - The ref to access the watermark API.\n * @returns A React component that renders the image watermark.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/watermarks | Watermarks documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/tutorials/how_to/watermark | TradingView documentation for watermarks}\n * @example\n * ```tsx\n * <WatermarkImage\n * src=\"data:image/svg+xml;base64,...\"\n * alpha={0.5}\n * padding={20}\n * />\n * ```\n */\nexport const WatermarkImage: ForwardRefExoticComponent<\n ImageWatermarkProps & RefAttributes<WatermarkApiRef<\"image\">>\n> = forwardRef<WatermarkApiRef<\"image\">, ImageWatermarkProps>((props, ref) => {\n return WatermarkRenderFunction({ ...props, type: \"image\" }, ref);\n});\n\nWatermarkText.displayName = \"WatermarkText\";\nWatermarkImage.displayName = \"WatermarkImage\";\n","import { useLayoutEffect, useRef } from \"react\";\n\ntype ReactivePrimitiveApiRef<TPrimitive> = {\n _primitive: TPrimitive | null;\n api(): TPrimitive | null;\n init(): TPrimitive | null;\n clear(): void;\n};\n\ntype PrimitiveAttachment<TPrimitive> = {\n primitive: TPrimitive;\n detach: () => void;\n};\n\ntype UseReactivePrimitiveOptions<TPrimitive, TProps> = {\n isReady: boolean;\n props: TProps;\n primitiveIdentity: unknown;\n mountPrimitive: (props: TProps) => PrimitiveAttachment<TPrimitive> | null;\n};\n\nexport const useReactivePrimitive = <TPrimitive, TProps>({\n isReady,\n props,\n primitiveIdentity,\n mountPrimitive,\n}: UseReactivePrimitiveOptions<TPrimitive, TProps>) => {\n const propsRef = useRef(props);\n const primitiveIdentityRef = useRef(primitiveIdentity);\n const mountPrimitiveRef = useRef(mountPrimitive);\n const detachCurrentPrimitiveRef = useRef<(() => void) | null>(null);\n\n propsRef.current = props;\n mountPrimitiveRef.current = mountPrimitive;\n\n const primitiveApiRef = useRef<ReactivePrimitiveApiRef<TPrimitive>>({\n _primitive: null,\n api() {\n return this._primitive;\n },\n init() {\n if (!this._primitive) {\n const attachment = mountPrimitiveRef.current(propsRef.current);\n\n if (!attachment) {\n return null;\n }\n\n detachCurrentPrimitiveRef.current = attachment.detach;\n this._primitive = attachment.primitive;\n }\n\n return this._primitive;\n },\n clear() {\n if (this._primitive !== null) {\n detachCurrentPrimitiveRef.current?.();\n detachCurrentPrimitiveRef.current = null;\n this._primitive = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!isReady) {\n return;\n }\n\n if (primitiveIdentityRef.current !== primitiveIdentity) {\n primitiveApiRef.current.clear();\n primitiveIdentityRef.current = primitiveIdentity;\n }\n\n primitiveApiRef.current.init();\n }, [isReady, primitiveIdentity]);\n\n useLayoutEffect(() => {\n return () => {\n primitiveApiRef.current.clear();\n };\n }, []);\n\n return primitiveApiRef;\n};\n","import { useLayoutEffect, useRef } from \"react\";\nimport { BaseInternalError } from \"@/_shared/InternalError\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { usePaneContext } from \"@/pane/usePaneContext\";\nimport { useReactivePrimitive } from \"./useReactivePrimitive\";\nimport type { PanePrimitiveApiRef, PanePrimitiveProps } from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\nimport type { RefObject } from \"react\";\n\nexport const usePanePrimitive = <HorzScaleItem = Time>(\n props: PanePrimitiveProps<HorzScaleItem>\n): RefObject<PanePrimitiveApiRef<HorzScaleItem>> => {\n const { isReady: isChartReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isInsidePane, isPaneReady, paneApiRef: pane } = usePaneContext<HorzScaleItem>();\n const chartApiRef = useRef(chart);\n const paneApiRef = useRef(pane);\n\n chartApiRef.current = chart;\n paneApiRef.current = pane;\n const panePrimitiveApiRef = useReactivePrimitive({\n isReady: isChartReady && isInsidePane && isPaneReady,\n props,\n primitiveIdentity: props.plugin ?? props.render,\n mountPrimitive(currentProps) {\n const chartApi = chartApiRef.current?.api();\n const paneApi = paneApiRef.current?.api();\n\n if (!chartApi || !paneApi) {\n return null;\n }\n\n const primitive =\n currentProps.plugin !== undefined\n ? currentProps.plugin\n : currentProps.render({\n chart: chartApi,\n pane: paneApi,\n });\n\n paneApi.attachPrimitive(primitive);\n\n return {\n primitive,\n detach: () => paneApi.detachPrimitive(primitive),\n };\n },\n });\n\n useLayoutEffect(() => {\n if (!isChartReady) {\n return;\n }\n\n if (!isInsidePane) {\n throw new BaseInternalError(\n \"PanePrimitive must be used inside a pane. Please ensure that the component is wrapped in a pane component.\",\n {\n isOperational: true,\n docsPath: \"pane-primitives\",\n }\n );\n }\n }, [isChartReady, isInsidePane]);\n\n return panePrimitiveApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { usePanePrimitive } from \"./usePanePrimitive\";\nimport type { PanePrimitiveApiRef, PanePrimitiveProps } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericPanePrimitiveComponent = (<HorzScaleItem = Time>(\n props: PanePrimitiveProps<HorzScaleItem> & {\n ref?: ForwardedRef<PanePrimitiveApiRef<HorzScaleItem>>;\n }\n) => ReturnType<typeof PanePrimitiveRenderFunction>) & {\n displayName: string;\n};\n\nconst PanePrimitiveRenderFunction = <HorzScaleItem = Time,>(\n props: PanePrimitiveProps<HorzScaleItem>,\n ref: ForwardedRef<PanePrimitiveApiRef<HorzScaleItem>>\n): JSX.Element | null => {\n const panePrimitiveApiRef = usePanePrimitive(props);\n useImperativeHandle(ref, () => panePrimitiveApiRef.current, [panePrimitiveApiRef]);\n\n return null;\n};\n\n/**\n * PanePrimitive component that can be used to create a primitive on a pane.\n *\n * @param props - The properties for the pane primitive.\n * @param ref - The ref to access the pane primitive API.\n * @returns A React component that renders the pane primitive.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/pane-primitives | Pane primitives documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/plugins/pane-primitives | TradingView documentation for pane primitive}\n * @example\n * ```tsx\n * <Pane>\n * <PanePrimitive render={({ chart, pane }) => new MyPanePrimitive(chart, pane)} />\n * </Pane>\n * ```\n */\nexport const PanePrimitive = forwardRef(\n PanePrimitiveRenderFunction\n) as GenericPanePrimitiveComponent;\nPanePrimitive.displayName = \"PanePrimitive\";\n","import { useRef } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport { SeriesContext } from \"@/series/SeriesContext\";\nimport type { ISeriesContext } from \"@/series/types\";\nimport { useReactivePrimitive } from \"./useReactivePrimitive\";\nimport type { SeriesPrimitiveApiRef, SeriesPrimitiveProps } from \"./types\";\nimport type { IChartApiBase, SeriesType, Time } from \"lightweight-charts\";\nimport type { ISeriesApi } from \"lightweight-charts\";\nimport type { RefObject } from \"react\";\n\nexport const useSeriesPrimitive = <T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesPrimitiveProps<T, HorzScaleItem>\n): RefObject<SeriesPrimitiveApiRef<HorzScaleItem>> => {\n const { isReady: isChartReady, chartApiRef: chart } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const { isReady: seriesIsReady, seriesApiRef: series } = useSafeContext(\n SeriesContext\n ) as ISeriesContext<HorzScaleItem>;\n const chartApiRef = useRef(chart);\n const seriesApiRef = useRef(series);\n\n chartApiRef.current = chart;\n seriesApiRef.current = series;\n const seriesPrimitiveApiRef = useReactivePrimitive({\n isReady: isChartReady && seriesIsReady,\n props,\n primitiveIdentity: props.plugin ?? props.render,\n mountPrimitive(currentProps) {\n const seriesApi = seriesApiRef.current?.api();\n const chartApi = chartApiRef.current?.api();\n\n if (!chartApi || !seriesApi) {\n return null;\n }\n\n const primitive =\n currentProps.plugin !== undefined\n ? currentProps.plugin\n : currentProps.render({\n chart: chartApi,\n series: seriesApi as ISeriesApi<T, HorzScaleItem>,\n });\n\n seriesApi.attachPrimitive(primitive);\n\n return {\n primitive,\n detach: () => seriesApi.detachPrimitive(primitive),\n };\n },\n });\n\n return seriesPrimitiveApiRef;\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport { useSeriesPrimitive } from \"./useSeriesPrimitive\";\nimport type { SeriesPrimitiveApiRef, SeriesPrimitiveProps } from \"./types\";\nimport type { SeriesType, Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericSeriesPrimitiveComponent = (<T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesPrimitiveProps<T, HorzScaleItem> & {\n ref?: ForwardedRef<SeriesPrimitiveApiRef<HorzScaleItem>>;\n }\n) => ReturnType<typeof SeriesPrimitiveRenderFunction>) & {\n displayName: string;\n};\n\nconst SeriesPrimitiveRenderFunction = <T extends SeriesType, HorzScaleItem = Time>(\n props: SeriesPrimitiveProps<T, HorzScaleItem>,\n ref: ForwardedRef<SeriesPrimitiveApiRef<HorzScaleItem>>\n): JSX.Element | null => {\n const seriesPrimitiveApiRef = useSeriesPrimitive(props);\n useImperativeHandle(ref, () => seriesPrimitiveApiRef.current, [seriesPrimitiveApiRef]);\n\n return null;\n};\n\n/**\n * SeriesPrimitive component that can be used to create a primitive on series.\n *\n * @param props - The properties for the series primitive.\n * @param ref - The ref to access the series primitive API.\n * @returns A React component that renders the series primitive.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/series-primitives | Series primitives documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/plugins/series-primitives | TradingView documentation for series primitive}\n * @example\n * ```tsx\n * <SeriesPrimitive render={{}} />\n * <SeriesPrimitive plugin={{}} />\n * ```\n */\nexport const SeriesPrimitive = forwardRef(\n SeriesPrimitiveRenderFunction\n) as GenericSeriesPrimitiveComponent;\nSeriesPrimitive.displayName = \"SeriesPrimitive\";\n","import { useLayoutEffect, useRef, useState, useEffect } from \"react\";\nimport { useSafeContext } from \"@/_shared/useSafeContext\";\nimport { ChartContext } from \"@/chart/ChartContext\";\nimport type { IChartContext } from \"@/chart/types\";\nimport type { PaneApiRef, PaneProps } from \"./types\";\nimport type { IChartApiBase, Time } from \"lightweight-charts\";\n\nexport const usePane = <HorzScaleItem = Time>({\n stretchFactor,\n}: Omit<PaneProps, \"children\"> = {}) => {\n const { chartApiRef: chart, isReady: chartIsReady } = useSafeContext(\n ChartContext\n ) as IChartContext<HorzScaleItem, IChartApiBase<HorzScaleItem>>;\n const [isReady, setIsReady] = useState(false);\n\n const paneApiRef = useRef<PaneApiRef<HorzScaleItem>>({\n _pane: null,\n api() {\n return this._pane;\n },\n init() {\n const chartApi = chart?.api();\n if (!chartApi) return null;\n\n const pane = chartApi.addPane(true);\n this._pane = pane;\n\n setIsReady(true);\n\n if (stretchFactor !== undefined) {\n this._pane.setStretchFactor(stretchFactor);\n }\n\n return this._pane;\n },\n clear() {\n if (this._pane !== null) {\n chart?.api()?.removePane(this._pane.paneIndex());\n setIsReady(false);\n\n this._pane = null;\n }\n },\n });\n\n useLayoutEffect(() => {\n if (!chartIsReady) return;\n\n paneApiRef.current.init();\n }, [chartIsReady]);\n\n useEffect(() => {\n return () => {\n paneApiRef.current.clear();\n };\n }, []);\n\n useLayoutEffect(() => {\n if (stretchFactor === undefined) return;\n\n const pane = paneApiRef.current.api();\n if (pane) {\n pane.setStretchFactor(stretchFactor);\n }\n }, [stretchFactor]);\n\n return { paneApiRef, isReady };\n};\n","import { forwardRef, useImperativeHandle } from \"react\";\nimport React from \"react\";\nimport { PaneContext } from \"./PaneContext\";\nimport { usePane } from \"./usePane\";\nimport type { PaneProps, PaneApiRef } from \"./types\";\nimport type { Time } from \"lightweight-charts\";\nimport type { ForwardedRef, JSX } from \"react\";\n\ntype GenericPaneComponent = (<HorzScaleItem = Time>(\n props: PaneProps & {\n ref?: ForwardedRef<PaneApiRef<HorzScaleItem>>;\n }\n) => JSX.Element) & {\n displayName: string;\n};\n\nconst PaneRenderFunction = <HorzScaleItem = Time,>(\n { children, stretchFactor }: PaneProps,\n ref: ForwardedRef<PaneApiRef<HorzScaleItem>>\n): JSX.Element => {\n const {\n paneApiRef: { current: paneApiRef },\n isReady,\n } = usePane<HorzScaleItem>({\n stretchFactor,\n });\n useImperativeHandle(ref, () => paneApiRef, [paneApiRef]);\n\n return (\n <PaneContext.Provider\n value={{\n paneApiRef: paneApiRef as never,\n isReady,\n }}\n >\n {children}\n </PaneContext.Provider>\n );\n};\n\n/**\n * Pane component that can be used to create a pane in a chart.\n *\n * @param props - The properties for the pane.\n * @param ref - The ref to access the pane API.\n * @returns A React component that renders the pane.\n * @see {@link https://ukorvl.github.io/lightweight-charts-react-components/docs/panes | Panes documentation}\n * @see {@link https://tradingview.github.io/lightweight-charts/docs/panes | TradingView documentation for panes}\n * @example\n * ```tsx\n * <Pane stretchFactor={2}>\n * ...\n * </Pane>\n * ```\n */\nexport const Pane = forwardRef(PaneRenderFunction) as GenericPaneComponent;\nPane.displayName = \"Pane\";\n"],"names":["assignRef","ref","value","ChartContext","createContext","defaultChartOptions","useChart","container","onClick","onCrosshairMove","options","onDblClick","createChartApi","createChart","isReady","setIsReady","useState","chartApiRef","useRef","chart","useLayoutEffect","useEffect","_chartApiRef_current_api","ChartComponent","forwardRef","children","chartKind","useImperativeHandle","ChartWrapper","containerProps","containerRef","rest","setContainer","handleContainerRef","useCallback","node","undefined","OptionsChart","createOptionsChart","YieldCurveChart","createYieldCurveChart","CustomChart","horzScaleBehavior","createCustomChart","chartContainer","createChartEx","TimeScaleContext","version","BaseInternalError","Error","message","isOperational","cause","docsPath","docsBaseUrl","Object","useSafeContext","context","errorMessage","currentContextValue","useContext","ctxName","PaneContext","usePaneContext","paneContext","isInsidePane","isPaneReady","paneApiRef","useTimeScale","onVisibleTimeRangeChange","onVisibleLogicalRangeChange","onSizeChange","visibleRange","visibleLogicalRange","chartIsReady","timeScaleApiRef","chartApi","_timeScaleApiRef_current_api","timeScaleApi","TimeScale","props","useLatestRef","SeriesContext","usePriceScale","id","series","seriesIsReady","isParentSeriesReady","optionsRef","priceScaleApiRef","_paneApiRef_api","idToSet","PriceScale","useTimeScaleFitContentTrigger","deps","timeScale","queueMicrotask","TimeScaleFitContentTrigger","useSeries","type","data","reactive","seriesOrder","alwaysReplaceData","seriesApiRef","_this__series","_this__series1","paneIndex","plugin","seriesMap","_chart_api","seriesApi","currentData","canUseIncrementalUpdate","lastDataPoint","_seriesApiRef_current_api","LineSeries","CandlestickSeries","HistogramSeries","AreaSeries","BaselineSeries","BarSeries","nextData","dataLengthDifference","hasSameDataPointRefs","hasSameDataPointTime","length","index","currentDataPoint","nextDataPoint","currentTime","nextTime","isBusinessDayTime","isSameBusinessDay","time","isBusinessDay","currentBusinessDay","nextBusinessDay","SeriesTemplate","CustomSeries","usePriceLine","price","priceLineApiRef","_series_api","_priceLineApiRef_current_api","PriceLine","useMarkers","markers","markersApiRef","createSeriesMarkers","_markersApiRef_current_api","Markers","useWatermark","propsRef","chartRef","paneApiRefRef","imageSrc","getImageWatermarkSrc","watermarkApiRef","_chartRef_current","_paneApiRefRef_current","pane","currentProps","isTextWatermark","_","createTextWatermark","src","createImageWatermark","_watermarkApiRef_current_api","getWatermarkUpdateOptions","__","WatermarkRenderFunction","watermarkApi","WatermarkText","WatermarkImage","useReactivePrimitive","primitiveIdentity","mountPrimitive","primitiveIdentityRef","mountPrimitiveRef","detachCurrentPrimitiveRef","primitiveApiRef","attachment","usePanePrimitive","isChartReady","panePrimitiveApiRef","_chartApiRef_current","_paneApiRef_current","paneApi","primitive","PanePrimitive","useSeriesPrimitive","_seriesApiRef_current","SeriesPrimitive","seriesPrimitiveApiRef","usePane","stretchFactor","Pane"],"mappings":";;;;;;;;;;6DAEO,IAAMA,EAAY,CAAIC,EAAyBC,KACpD,GAAKD,GAIL,GAAI,AAAe,YAAf,OAAOA,EAAoB,YAC7BA,EAAIC,EAILD,CAAAA,EAA4B,OAAO,CAAGC,EACzC,ECTMC,EAAeC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EACnB,KAGFD,CAAAA,EAAa,WAAW,CAAG,eCN3B,IAAME,EAA2C,CAC/C,eAAgB,EAClB,ECWaC,EAAW,CAItB,CACAC,UAAAA,CAAS,CACTC,QAAAA,CAAO,CACPC,gBAAAA,CAAe,CACfC,QAAAA,EAAU,CAAC,CAAC,CACZC,WAAAA,CAAU,CACVC,eAAAA,EAAiBC,EAAAA,WAIhB,CACmD,IACpD,GAAM,CAACC,EAASC,EAAW,CAAGC,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,IAEjCC,EAAcC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAA8C,CAChE,OAAQ,KACR,aAAc,GACd,MACE,OAAO,IAAI,CAAC,MAAM,AACpB,EACA,OACE,GAAI,AAAgB,OAAhB,IAAI,CAAC,MAAM,CAAW,CACxB,IAAMC,EAAQP,EAAeL,EAAW,CACtC,GAAGF,CAAmB,CACtB,GAAGK,CAAO,AACZ,EACA,KAAI,CAAC,MAAM,CAAGS,CAChB,CAMA,OAJI,AAACL,GACHC,EAAW,IAGN,IAAI,CAAC,MAAM,AACpB,EACA,QACE,IAAI,CAAC,YAAY,CAAG,GAEA,OAAhB,IAAI,CAAC,MAAM,GACbA,EAAW,IACX,IAAI,CAAC,MAAM,CAAC,MAAM,GAClB,IAAI,CAAC,MAAM,CAAG,KAElB,CACF,GAuEA,MArEAK,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACdH,EAAY,OAAO,CAAC,IAAI,GAIjB,KACLA,EAAY,OAAO,CAAC,YAAY,CAAG,EACrC,GACC,EAAE,EAILI,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,IACD,KACLJ,EAAY,OAAO,CAAC,KAAK,EAC3B,EACC,EAAE,EAELG,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKb,GAEL,GAAIC,EAAS,KACXc,QAAAA,CAAAA,EAAAA,EAAY,OAAO,CAAC,GAAG,EAAC,GAAxBA,EAA2B,cAAc,CAACd,EAC5C,CAEA,MAAO,KACL,GAAIA,EAAS,KACXc,QAAAA,CAAAA,EAAAA,EAAY,OAAO,CAAC,GAAG,EAAC,GAAxBA,EAA2B,gBAAgB,CAACd,EAC9C,CACF,EACF,EAAG,CAACA,EAAQ,EAEZY,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKb,GAEL,GAAIE,EAAiB,KACnBa,QAAAA,CAAAA,EAAAA,EAAY,OAAO,CAAC,GAAG,EAAC,GAAxBA,EAA2B,sBAAsB,CAACb,EACpD,CAEA,MAAO,KACL,GAAIA,EAAiB,KACnBa,QAAAA,CAAAA,EAAAA,EAAY,OAAO,CAAC,GAAG,EAAC,GAAxBA,EAA2B,wBAAwB,CAACb,EACtD,CACF,EACF,EAAG,CAACA,EAAgB,EAEpBW,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKb,GAEL,GAAII,EAAY,KACdW,QAAAA,CAAAA,EAAAA,EAAY,OAAO,CAAC,GAAG,EAAC,GAAxBA,EAA2B,iBAAiB,CAACX,EAC/C,CAEA,MAAO,KACL,GAAIA,EAAY,KACdW,QAAAA,CAAAA,EAAAA,EAAY,OAAO,CAAC,GAAG,EAAC,GAAxBA,EAA2B,mBAAmB,CAACX,EACjD,CACF,EACF,EAAG,CAACA,EAAW,EAEfS,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,SAGdE,EAFKf,UAELe,CAAAA,EAAAA,EAAY,OAAO,CAAC,GAAG,EAAC,GAAxBA,EAA2B,YAAY,CAAC,CACtC,GAAGjB,CAAmB,CACtB,GAAGK,CAAO,AACZ,EAAC,CACH,EAAG,CAACA,EAAQ,EAEL,CAAEO,YAAAA,EAAaH,QAAAA,CAAQ,CAChC,ECxEMS,EAAiBC,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA3Cc,CAKnC,CACEC,SAAAA,CAAQ,CACRlB,UAAAA,CAAS,CACTC,QAAAA,CAAO,CACPC,gBAAAA,CAAe,CACfC,QAAAA,CAAO,CACPC,WAAAA,CAAU,CACVe,UAAAA,EAAY,MAAM,CAClBd,eAAAA,CAAc,CAC0C,CAC1DX,KAEA,GAAM,CACJ,YAAa,CAAE,QAASgB,CAAW,CAAE,CACrCH,QAAAA,CAAO,CACR,CAAGR,EAAS,CACXC,UAAAA,EACAC,QAAAA,EACAC,gBAAAA,EACAC,QAAAA,EACAC,WAAAA,EACAC,eAAAA,CACF,GAGA,MAFAe,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAMgB,EAAa,CAACA,EAAY,EAGvD,wBAACd,EAAa,QAAQ,EACpB,MAAO,CACL,YAAac,EACbH,QAAAA,EACAY,UAAAA,CACF,GAECD,EAGP,EAGAF,CAAAA,EAAe,WAAW,CAAG,iBCAtB,IAAMK,EAETJ,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAnDA,CAAC,CAAEC,SAAAA,CAAQ,CAAEI,eAAAA,CAAc,CAAEC,aAAAA,CAAY,CAAE,GAAGC,EAAM,CAAE9B,KACxD,GAAM,CAACM,EAAWyB,EAAa,CAAGhB,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,IAC5BiB,EAAqBC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACzB,AAACC,IACCH,EAAaG,GAAQC,QACrBpC,EAAU8B,EAAcK,EAC1B,EACA,CAACL,EAAa,EAGhB,OACE,wBAAC,OACC,IAAKG,EACL,cAAaJ,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,CAAgB,CAAC,cAAc,AAAD,GAAK,GAC/C,GAAGA,CAAc,EAEjB,CAAC,CAACtB,GACD,wBAACgB,EAAcA,CACb,IAAKtB,EACL,UAAWM,EACX,eAAgBM,EAAAA,WAAWA,CAC3B,UAAU,OACT,GAAGkB,CAAI,EAEPN,GAKX,EAuBAG,CAAAA,EAAa,WAAW,CAAG,eCDpB,IAAMS,EAETb,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAjDA,CAAC,CAAEC,SAAAA,CAAQ,CAAEI,eAAAA,CAAc,CAAEC,aAAAA,CAAY,CAAE,GAAGC,EAAM,CAAE9B,KACxD,GAAM,CAACM,EAAWyB,EAAa,CAAGhB,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,IAC5BiB,EAAqBC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACzB,AAACC,IACCH,EAAaG,GAAQC,QACrBpC,EAAU8B,EAAcK,EAC1B,EACA,CAACL,EAAa,EAGhB,OACE,wBAAC,OACC,IAAKG,EACL,cAAaJ,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,CAAgB,CAAC,cAAc,AAAD,GAAK,GAC/C,GAAGA,CAAc,EAEjB,CAAC,CAACtB,GACD,wBAACgB,EAAcA,CACb,IAAKtB,EACL,UAAWM,EACX,eAAgB+B,EAAAA,kBAAkBA,CAClC,UAAU,UACT,GAAGP,CAAI,EAEPN,GAKX,EAqBAY,CAAAA,EAAa,WAAW,CAAG,eCHpB,IAAME,EAETf,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAjDA,CAAC,CAAEC,SAAAA,CAAQ,CAAEI,eAAAA,CAAc,CAAEC,aAAAA,CAAY,CAAE,GAAGC,EAAM,CAAE9B,KACxD,GAAM,CAACM,EAAWyB,EAAa,CAAGhB,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,IAC5BiB,EAAqBC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACzB,AAACC,IACCH,EAAaG,GAAQC,QACrBpC,EAAU8B,EAAcK,EAC1B,EACA,CAACL,EAAa,EAGhB,OACE,wBAAC,OACC,IAAKG,EACL,cAAaJ,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,CAAgB,CAAC,cAAc,AAAD,GAAK,GAC/C,GAAGA,CAAc,EAEjB,CAAC,CAACtB,GACD,wBAACgB,EAAcA,CACb,IAAKtB,EACL,UAAWM,EACX,eAAgBiC,EAAAA,qBAAqBA,CACrC,UAAU,cACT,GAAGT,CAAI,EAEPN,GAKX,EAqBAc,CAAAA,EAAgB,WAAW,CAAG,kBC+BvB,IAAME,EAAcjB,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA7EO,CAIhC,CACEC,SAAAA,CAAQ,CACRI,eAAAA,CAAc,CACdC,aAAAA,CAAY,CACZY,kBAAAA,CAAiB,CACjB,GAAGX,EACiD,CACtD9B,KAEA,GAAM,CAACM,EAAWyB,EAAa,CAAGhB,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,IAC5BiB,EAAqBC,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACzB,AAACC,IACCH,EAAaG,GAAQC,QACrBpC,EAAU8B,EAAcK,EAC1B,EACA,CAACL,EAAa,EAGVa,EAAoBT,AAAAA,GAAAA,EAAAA,WAAAA,AAAAA,EACxB,CACEU,EACAlC,IAEOmC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EACLD,EACAF,EACAhC,GAGJ,CAACgC,EAAkB,EAGrB,OACE,wBAAC,OACC,IAAKT,EACL,cAAaJ,AAAAA,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,CAAgB,CAAC,cAAc,AAAD,GAAK,GAC/C,GAAGA,CAAc,EAEjB,CAAC,CAACtB,GACD,wBAACgB,EAAcA,CAKb,IAAKtB,EACL,UAAWM,EACX,eAAgBoC,EAChB,UAAU,SACT,GAAGZ,CAAI,EAEPN,GAKX,EAqBAgB,CAAAA,EAAY,WAAW,CAAG,cCpG1B,IAAMK,EAAmB1C,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAAiD,KAC1E0C,CAAAA,EAAiB,WAAW,CAAG,mBCJxB,IAAMC,EAAU,gICqBvB,MAAMC,UAA0BC,MAI9B,YACEC,CAAgB,CAChB,CAAEC,cAAAA,EAAgB,EAAI,CAAEC,MAAAA,CAAK,CAAEC,SAAAA,CAAQ,CAAwB,CAAG,CAAC,CAAC,CACpE,CACA,KAAK,CAACH,GAPR,OAAO,gBAAP,QACA,OAAgB,QAAhB,QAQE,IAAI,CAAC,IAAI,CAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAI,gBACrC,IAAI,CAAC,aAAa,CAAGC,EACrB,IAAI,CAAC,KAAK,CAAGC,EAEb,IAAI,CAAC,OAAO,CAAG,CAAC,EAAEF,GAAW,oBAAoB,CAAC,CAE9CG,GACF,KAAI,CAAC,OAAO,CAAG,CAAC,EAAE,IAAI,CAAC,OAAO;AAAG;AAAE,UAAU,EAAEC,ACtCjC,qEDsC+CD,EAAS,CAAC,AAAD,EAGpEN,GACF,KAAI,CAAC,OAAO,CAAG,CAAC,EAAE,IAAI,CAAC,OAAO;AAAG;AAAE,6CAA6C,EAAEA,EAAQ,CAAC,AAAD,EAG5FQ,OAAO,cAAc,CAAC,IAAI,CAAEP,EAAkB,SAAS,CACzD,CACF,CE5CA,IAAMQ,EAAiB,CAAIC,EAAqBC,KAC9C,IAAMC,EAAsBC,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAWH,GAEvC,GAAI,CAACE,EAAqB,CACxB,IAAME,EAAUJ,EAAQ,IAAI,EAAIA,EAAQ,WAAW,EAAI,SAEvD,OAAM,IAAIT,EAAkBU,GAAgB,CAAC,EAAEG,EAAQ,WAAW,CAAC,CAAE,CACnE,cAAe,EACjB,EACF,CAEA,OAAOF,CACT,ECZMG,EAAc1D,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAA4C,KAEhE0D,CAAAA,EAAY,WAAW,CAAG,cCA1B,IAAMC,EAAiB,KACrB,IAAMC,EAAcJ,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAWE,GAEzBG,EAAe,CAAC,CAACD,EAIvB,MAAO,CAAEC,aAAAA,EAAcC,YAHH,CAAC,CAACF,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAa,OAAO,AAAD,EAGLG,WAFjBH,MAAAA,EAAAA,KAAAA,EAAAA,EAAa,UAAU,AAEK,CACjD,ECLaI,EAAe,CAAuB,CACjDC,yBAAAA,CAAwB,CACxBC,4BAAAA,CAA2B,CAC3BC,aAAAA,CAAY,CACZC,aAAAA,CAAY,CACZC,oBAAAA,CAAmB,CACnB/D,QAAAA,EAAU,CAAC,CAAC,CACoC,IAChD,GAAM,CAAE,QAASgE,CAAY,CAAE,YAAavD,CAAK,CAAE,CAAGqC,EACpDrD,GAEI,CAAE+D,YAAAA,CAAW,CAAED,aAAAA,CAAY,CAAE,CAAGF,IAChC,CAACjD,EAASC,EAAW,CAAGC,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,IAEjC2D,EAAkBzD,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAuC,CAC7D,WAAY,KACZ,MACE,OAAO,IAAI,CAAC,UAAU,AACxB,EACA,OACE,GAAI,IAAI,CAAC,UAAU,CACjB,OAAO,IAAI,CAAC,UAAU,CAGxB,IAAM0D,EAAWzD,MAAAA,EAAAA,KAAAA,EAAAA,EAAO,GAAG,UAE3B,AAAKyD,GAIL,IAAI,CAAC,UAAU,CAAGA,EAAS,SAAS,GAEpC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAClE,GAEzB8D,GACF,IAAI,CAAC,UAAU,CAAC,eAAe,CAACA,GAG9BC,GACF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAACA,GAGzC1D,EAAW,IAEJ,IAAI,CAAC,UAAU,EAjBb,IAkBX,EACA,QACE,IAAI,CAAC,UAAU,CAAG,KAClBA,EAAW,GACb,CACF,GA0FA,MAxFAK,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACTsD,GAEDT,CAAAA,CAAAA,GAAiBC,CAAU,GAI/BS,EAAgB,OAAO,CAAC,IAAI,EAC9B,EAAG,CAACD,EAAcT,EAAcC,EAAY,EAE5C9C,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,IACP,KACLuD,EAAgB,OAAO,CAAC,KAAK,EAC/B,EACC,EAAE,EAELvD,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKD,GAEDT,EAAS,KACXmE,EAAAA,QAAAA,CAAAA,EAAAA,EAAgB,OAAO,AAAD,GAAtBA,MAAAA,CAAAA,EAAAA,EAAyB,GAAG,EAAC,GAA7BA,EAAgC,YAAY,CAACnE,EAC/C,CACF,EAAG,CAACA,EAAQ,EAEZU,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAI,CAACD,GAAS,CAACL,EAAS,OAExB,IAAMgE,EAAeH,EAAgB,OAAO,CAAC,GAAG,GAMhD,OAJIJ,GAAgBO,GAClBA,EAAa,mBAAmB,CAACP,GAG5B,KACDA,GAAgBO,GAClBA,EAAa,qBAAqB,CAACP,EAEvC,CACF,EAAG,CAACpD,EAAOL,EAASyD,EAAa,EAEjCnD,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAI,CAACD,GAAS,CAACL,EAAS,OAExB,IAAMgE,EAAeH,EAAgB,OAAO,CAAC,GAAG,GAMhD,OAJIL,GAA+BQ,GACjCA,EAAa,kCAAkC,CAACR,GAG3C,KACDA,GAA+BQ,GACjCA,EAAa,oCAAoC,CAACR,EAEtD,CACF,EAAG,CAACnD,EAAOL,EAASwD,EAA4B,EAEhDlD,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAI,CAACD,GAAS,CAACL,EAAS,OAExB,IAAMgE,EAAeH,EAAgB,OAAO,CAAC,GAAG,GAMhD,OAJIN,GAA4BS,GAC9BA,EAAa,+BAA+B,CAACT,GAGxC,KACDA,GAA4BS,GAC9BA,EAAa,iCAAiC,CAACT,EAEnD,CACF,EAAG,CAAClD,EAAOL,EAASuD,EAAyB,EAE7CjD,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKD,GAEDqD,EAAc,KAChBK,EAAAA,QAAAA,CAAAA,EAAAA,EAAgB,OAAO,AAAD,GAAtBA,MAAAA,CAAAA,EAAAA,EAAyB,GAAG,EAAC,GAA7BA,EAAgC,eAAe,CAACL,EAClD,CACF,EAAG,CAACA,EAAa,EAEjBpD,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKD,GAEDsD,EAAqB,KACvBI,EAAAA,QAAAA,CAAAA,EAAAA,EAAgB,OAAO,AAAD,GAAtBA,MAAAA,CAAAA,EAAAA,EAAyB,GAAG,EAAC,GAA7BA,EAAgC,sBAAsB,CAACJ,EACzD,CACF,EAAG,CAACA,EAAoB,EAEjB,CAAEE,gBAAAA,EAAiB7D,QAAAA,CAAQ,CACpC,EC/FaiE,EAAYvD,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAtCO,CAC9B,CAAEC,SAAAA,CAAQ,CAAE,GAAGuD,EAAsC,CACrD/E,KAEA,GAAM,CACJ,gBAAiB,CAAE,QAAS0E,CAAe,CAAE,CAC7C7D,QAAAA,CAAO,CACR,CAAGsD,EAAaY,GAGjB,MAFArD,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAM0E,EAAiB,CAACA,EAAgB,EAG/D,wBAAC7B,EAAiB,QAAQ,EACxB,MAAO,CACL,gBAAiB6B,EACjB7D,QAAAA,CACF,GAECW,EAGP,EAmBAsD,CAAAA,EAAU,WAAW,CAAG,YCpDjB,IAAME,EAAe,AAAI/E,IAC9B,IAAMD,EAAMiB,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAOhB,GAGnB,OAFAD,EAAI,OAAO,CAAGC,EAEPD,CACT,ECLMiF,EAAgB9E,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAAuC,CAC3D,aAAc,KACd,QAAS,EACX,EACA8E,CAAAA,EAAc,WAAW,CAAG,gBCErB,IAAMC,EAAgB,CAAC,CAAEzE,QAAAA,EAAU,CAAC,CAAC,CAAE0E,GAAAA,CAAE,CAAmB,IACjE,GAAM,CAAE,QAASV,CAAY,CAAE,YAAavD,CAAK,CAAE,CAAGqC,EAAerD,GAC/D,CAAE8D,aAAAA,CAAY,CAAEC,YAAAA,CAAW,CAAEC,WAAAA,CAAU,CAAE,CAAGJ,IAG5C,CAAE,aAAcsB,CAAM,CAAE,QAASC,CAAa,CAAE,CAAG1B,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAWsB,GAC9DK,EAAsBF,AAAW,OAAXA,GAAmBC,EACzCE,EAAaP,EAAavE,GAE1B+E,EAAmBvE,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAyB,CAChD,YAAa,KACb,MACE,OAAO,IAAI,CAAC,WAAW,AACzB,EACA,OACE,GAAI,CAAC,IAAI,CAAC,WAAW,CAAE,KAOsBwE,EAN3C,IAAMd,EAAWzD,MAAAA,EAAAA,KAAAA,EAAAA,EAAO,GAAG,GAE3B,GAAI,CAACyD,EACH,OAAO,IAGT,KAAI,CAAC,WAAW,CAAGA,EAAS,UAAU,CAACQ,QAAIM,GAAAA,MAAAA,CAAAA,EAAAA,EAAY,GAAG,EAAC,EAAhBA,KAAAA,EAAAA,EAAmB,SAAS,IAEvE,IAAI,CAAC,WAAW,CAAC,YAAY,CAACF,EAAW,OAAO,CAClD,CAEA,OAAO,IAAI,CAAC,WAAW,AACzB,EACA,MAAMG,CAAO,MAKyCD,CAJ3B,QAArB,IAAI,CAAC,WAAW,EAAavE,AAAU,OAAVA,IAIjC,IAAI,CAAC,WAAW,CAAGA,EAAM,GAAG,GAAI,UAAU,CAACwE,QAASD,GAAAA,MAAAA,CAAAA,EAAAA,EAAY,GAAG,EAAC,EAAhBA,KAAAA,EAAAA,EAAmB,SAAS,IAChF,IAAI,CAAC,WAAW,CAAC,YAAY,CAACF,EAAW,OAAO,EAClD,EACA,QACE,IAAI,CAAC,WAAW,CAAG,IACrB,CACF,GAuCA,MApCAnE,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,KACR,GAAKqD,GAEL,GAAI,CAACT,EAEH,MAAM,IAAIjB,EACR,0GACA,CACE,cAAe,GACf,SAAU,EACZ,GAICkB,GAAgBqB,GAIrBE,EAAiB,OAAO,CAAC,IAAI,GAC/B,EAAG,CAACf,EAAcT,EAAcC,EAAaqB,EAAoB,EAEjEnE,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,IACP,KACLqE,EAAiB,OAAO,CAAC,KAAK,EAChC,EACC,EAAE,EAKLpE,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,KACHF,GAELsE,EAAiB,OAAO,CAAC,KAAK,CAACL,EACjC,EAAG,CAACA,EAAI1E,EAAQ,EAET+E,CACT,ECxDaG,EAETpE,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA9B6B,CAC/BwD,EACA/E,KAEA,IAAMwF,EAAmBN,EAAcH,GAGvC,MAFArD,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAMwF,EAAiB,OAAO,CAAE,CAACA,EAAiB,EAEpE,IACT,EAuBAG,CAAAA,EAAW,WAAW,CAAG,aC/BzB,IAAMC,EAAgC,CAAC,CAAEC,KAAAA,CAAI,CAAmC,IAE9E,GAAM,CAAEnB,gBAAAA,CAAe,CAAE7D,QAAAA,CAAO,CAAE,CADT0C,EAAeV,GAGxC1B,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAI,CAACN,GAAW,CAAC6D,EACf,OAGF,IAAMoB,EAAYpB,EAAgB,GAAG,GACrCqB,eAAe,KACTD,GACFA,EAAU,UAAU,EAExB,EACF,EAAG,IAAID,EAAMhF,EAAQ,CACvB,ECNamF,EAA6B,CAAC,CACzCH,KAAAA,CAAI,CAC4B,IAChCD,EAA8B,CAAEC,KAAAA,CAAK,GAE9B,MCQII,EAAY,CAA6C,CACpEC,KAAAA,CAAI,CACJC,KAAAA,CAAI,CACJ1F,QAAAA,EAAU,CAAC,CAAC,CACZ2F,SAAAA,EAAW,EAAI,CACfC,YAAAA,CAAW,CACXC,kBAAAA,EAAoB,EAAK,CACzB,GAAGxE,EACqD,IACxD,GAAM,CACJ,QAAS2C,CAAY,CACrB,YAAavD,CAAK,CAClBO,UAAAA,CAAS,CACV,CAAG8B,EAAerD,GAIb,CAAE+D,YAAAA,CAAW,CAAED,aAAAA,CAAY,CAAEE,WAAAA,CAAU,CAAE,CAAGJ,IAC5C,CAACjD,EAASC,EAAW,CAAGC,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,IAEjCwF,EAAetF,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAuC,CAC1D,QAAS,KACT,MACE,OAAO,IAAI,CAAC,OAAO,AACrB,EACA,OACE,GAAI,CAAC,IAAI,CAAC,OAAO,CAAE,KAOgBwE,EA8BjCe,EAEEC,EAtCF,IAAM9B,EAAWzD,MAAAA,EAAAA,KAAAA,EAAAA,EAAO,GAAG,GAE3B,GAAI,CAACyD,EACH,OAAO,KAGT,IAAM+B,EAAY1C,QAAeyB,GAAAA,MAAAA,CAAAA,EAAAA,EAAY,GAAG,EAAC,EAAhBA,KAAAA,EAAAA,EAAmB,SAAS,GAAKtD,OAElE,GAAI+D,AAAS,WAATA,EAAmB,CACrB,IAAMS,EAAU7E,EAAgD,MAAM,CACtE,GAAI,CAAC6E,EAEH,MAAM,IAAI5D,EAAkB,gDAI7B,KAAI,CAAC,OAAO,CACX4B,EAAS,eAAe,CAACgC,EAAQlG,EAASiG,EAC9C,KAAO,CACL,GAAIjF,AAAc,gBAAdA,GAA+ByE,AAAS,SAATA,GAAmBA,AAAS,SAATA,EAEpD,MAAM,IAAInD,EACR,2DACA,CACE,cAAe,EACjB,EAIJ,KAAI,CAAC,OAAO,CAAG4B,EAAS,SAAS,CAC/BiC,CAAS,CAACV,EAAgC,CAC1CzF,EACAiG,EAEJ,OAEAF,CAAAA,EAAAA,IAAI,CAAC,OAAO,AAAD,GAAXA,EAAc,OAAO,CAACL,GACFhE,SAAhBkE,UACFI,CAAAA,EAAAA,IAAI,CAAC,OAAO,AAAD,GAAXA,EAAc,cAAc,CAACJ,EAAW,EAE1CvF,EAAW,GACb,CAEA,OAAO,IAAI,CAAC,OAAO,AACrB,EACA,QACE,GAAI,AAAiB,OAAjB,IAAI,CAAC,OAAO,CAAW,CACzB,GAAI,CAACI,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAO,YAAY,AAAD,EAAG,KACxB2F,CAAAA,OAAAA,GAAAA,MAAAA,CAAAA,EAAAA,EAAO,GAAG,EAAC,GAAXA,EAAc,YAAY,CAAC,IAAI,CAAC,OAAO,CACzC,CACA,IAAI,CAAC,OAAO,CAAG,KACf/F,EAAW,GACb,CACF,CACF,GA0DA,MAxDAK,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACTsD,GAEDT,CAAAA,CAAAA,GAAiBC,CAAU,GAI/BsC,EAAa,OAAO,CAAC,IAAI,EAC3B,EAAG,CAAC9B,EAAcT,EAAcC,EAAY,EAE5C9C,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,IACP,KACLoF,EAAa,OAAO,CAAC,KAAK,EAC5B,EACC,EAAE,EAELpF,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKD,GAEDiF,GAAQC,EAAU,CACpB,IAAMU,EAAYP,EAAa,OAAO,CAAC,GAAG,GAE1C,GAAI,CAACO,EACH,OAGF,IAAMC,EAAcD,EAAU,IAAI,GAIlC,GAFER,GAAqB,CAACU,EAAwBD,EAAaZ,GAEtC,YACrBW,EAAU,OAAO,CAACX,GAIpB,IAAMc,EAAgBd,CAAI,CAACA,EAAK,MAAM,CAAG,EAAE,CAC3CW,EAAU,MAAM,CAACG,EACnB,CACF,EAAG,CAACd,EAAMC,EAAUE,EAAkB,EAEtCnF,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKD,GAEDT,EAAS,KACXyG,QAAAA,CAAAA,EAAAA,EAAa,OAAO,CAAC,GAAG,EAAC,GAAzBA,EAA4B,YAAY,CAACzG,EAC3C,CACF,EAAG,CAACA,EAAQ,EAEZU,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKD,GAEDmF,AAAgBlE,SAAhBkE,EAA2B,KAC7Ba,QAAAA,CAAAA,EAAAA,EAAa,OAAO,CAAC,GAAG,EAAC,GAAzBA,EAA4B,cAAc,CAACb,EAC7C,CACF,EAAG,CAACA,EAAY,EAET,CAAExF,QAAAA,EAAS0F,aAAAA,CAAa,CACjC,EAEMK,EAGF,CACF,KAAMO,EAAAA,UAAUA,CAChB,YAAaC,EAAAA,iBAAiBA,CAC9B,UAAWC,EAAAA,eAAeA,CAC1B,KAAMC,EAAAA,UAAUA,CAChB,SAAUC,EAAAA,cAAcA,CACxB,IAAKC,EAAAA,SAASA,AAChB,EAEMR,EAA0B,CAC9BD,EACAU,KAEA,IAAMC,EAAuBD,EAAS,MAAM,CAAGV,EAAY,MAAM,QAEjE,AACyB,IAAvBA,EAAY,MAAM,EAClBU,AAAoB,IAApBA,EAAS,MAAM,GACfC,CAAAA,EAAuB,KACvBA,CAAAA,EAAuB,KAKrBA,AAAyB,IAAzBA,EAEAC,EAAqBZ,EAAaU,EAAUV,EAAY,MAAM,CAAG,IACjEa,EACEb,CAAW,CAACA,EAAY,MAAM,CAAG,EAAE,CACnCU,CAAQ,CAACA,EAAS,MAAM,CAAG,EAAE,EAMjCE,EAAqBZ,EAAaU,EAAUV,EAAY,MAAM,GAC9D,CAACa,EACCb,CAAW,CAACA,EAAY,MAAM,CAAG,EAAE,CACnCU,CAAQ,CAACA,EAAS,MAAM,CAAG,EAAE,EAGnC,EAEME,EAAuB,CAC3BZ,EACAU,EACAI,KAEA,IAAK,IAAIC,EAAQ,EAAGA,EAAQD,EAAQC,GAAS,EAC3C,GAAIf,CAAW,CAACe,EAAM,GAAKL,CAAQ,CAACK,EAAM,CACxC,MAAO,GAIX,MAAO,EACT,EAEMF,EAAuB,CAC3BG,EACAC,KAEA,IAAMC,EAAcF,EAAiB,IAAI,CACnCG,EAAWF,EAAc,IAAI,CAEnC,OACEC,IAAgBC,GACfC,EAAkBF,IACjBE,EAAkBD,IAClBE,EAAkBH,EAAaC,EAErC,EAEMC,EAAoB,AAACE,GACzBC,AAAAA,GAAAA,EAAAA,aAAAA,AAAAA,EAAcD,GAEVD,EAAoB,CACxBG,EACAC,IAEAD,EAAmB,IAAI,GAAKC,EAAgB,IAAI,EAChDD,EAAmB,KAAK,GAAKC,EAAgB,KAAK,EAClDD,EAAmB,GAAG,GAAKC,EAAgB,GAAG,CCxN1CC,EAAiBlH,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAtBc,CACnC,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAA6C,CAC5D9B,KAEA,GAAM,CACJ,aAAc,CAAE,QAASuG,CAAY,CAAE,CACvC1F,QAAAA,CAAO,CACR,CAAGoF,EAAUnE,GAGd,MAFAJ,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAMuG,EAAc,CAACA,EAAa,EAGzD,wBAACtB,EAAc,QAAQ,EACrB,MAAO,CACL,aAAcsB,EACd1F,QAAAA,CACF,GAECW,EAGP,EAGAiH,CAAAA,EAAe,WAAW,CAAG,iBCFtB,IAAMtB,EAAa5F,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA9BO,CAC/B,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAA0C,CACzD9B,IAGE,wBAACyI,EAAcA,CAAC,KAAK,OAAO,IAAKzI,EAAM,GAAG8B,CAAI,EAC3CN,GA2BP2F,CAAAA,EAAW,WAAW,CAAG,aCHlB,IAAME,EAAkB9F,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA9BO,CACpC,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAA+C,CAC9D9B,IAGE,wBAACyI,EAAcA,CAAC,KAAK,YAAY,IAAKzI,EAAM,GAAG8B,CAAI,EAChDN,GA2BP6F,CAAAA,EAAgB,WAAW,CAAG,kBCHvB,IAAMD,EAAoB7F,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA9BO,CACtC,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAAiD,CAChE9B,IAGE,wBAACyI,EAAcA,CAAC,KAAK,cAAc,IAAKzI,EAAM,GAAG8B,CAAI,EAClDN,GA2BP4F,CAAAA,EAAkB,WAAW,CAAG,oBCHzB,IAAME,EAAa/F,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA9BO,CAC/B,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAA0C,CACzD9B,IAGE,wBAACyI,EAAcA,CAAC,KAAK,OAAO,IAAKzI,EAAM,GAAG8B,CAAI,EAC3CN,GA2BP8F,CAAAA,EAAW,WAAW,CAAG,aCHlB,IAAMC,EAAiBhG,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA9BO,CACnC,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAA8C,CAC7D9B,IAGE,wBAACyI,EAAcA,CAAC,KAAK,WAAW,IAAKzI,EAAM,GAAG8B,CAAI,EAC/CN,GA2BP+F,CAAAA,EAAe,WAAW,CAAG,iBCHtB,IAAMC,EAAYjG,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA9BO,CAC9B,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAAyC,CACxD9B,IAGE,wBAACyI,EAAcA,CAAC,KAAK,MAAM,IAAKzI,EAAM,GAAG8B,CAAI,EAC1CN,GA2BPgG,CAAAA,EAAU,WAAW,CAAG,YCFjB,IAAMkB,EAAenH,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA/BO,CACjC,CAAEC,SAAAA,CAAQ,CAAE,GAAGM,EAA4C,CAC3D9B,IAGE,wBAACyI,EAAcA,CAAC,KAAK,SAAS,IAAKzI,EAAM,GAAG8B,CAAI,EAC7CN,GA4BPkH,CAAAA,EAAa,WAAW,CAAG,eCpCpB,IAAMC,EAAe,CAAC,CAAElI,QAAAA,CAAO,CAAEmI,MAAAA,CAAK,CAAkB,IAC7D,GAAM,CAAE,QAASvD,CAAa,CAAE,aAAcD,CAAM,CAAE,CAAG7B,EAAe0B,GAElE4D,EAAkB5H,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAwB,CAC9C,WAAY,KACZ,MACE,OAAO,IAAI,CAAC,UAAU,AACxB,EACA,OACE,GAAI,CAAC,IAAI,CAAC,UAAU,CAAE,CACpB,IAAM6F,EAAY1B,MAAAA,EAAAA,KAAAA,EAAAA,EAAQ,GAAG,GAE7B,GAAI,CAAC0B,EACH,OAAO,IAGT,KAAI,CAAC,UAAU,CAAGA,EAAU,eAAe,CAAC,CAC1C8B,MAAAA,EACA,GAAGnI,CAAO,AACZ,EACF,CAEA,OAAO,IAAI,CAAC,UAAU,AACxB,EACA,QACE,GAAI,AAAoB,OAApB,IAAI,CAAC,UAAU,CAAW,KAC5BqI,CAAAA,OAAAA,GAAAA,MAAAA,CAAAA,EAAAA,EAAQ,GAAG,EAAC,GAAZA,EAAe,eAAe,CAAC,IAAI,CAAC,UAAU,EAC9C,IAAI,CAAC,UAAU,CAAG,IACpB,CACF,CACF,GA4BA,MA1BA3H,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACTkE,GAELwD,EAAgB,OAAO,CAAC,IAAI,EAC9B,EAAG,CAACxD,EAAc,EAElBlE,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,IACP,KACL0H,EAAgB,OAAO,CAAC,KAAK,EAC/B,EACC,EAAE,EAEL1H,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKiE,GAED3E,EAAS,KACXsI,QAAAA,CAAAA,EAAAA,EAAgB,OAAO,CAAC,GAAG,EAAC,GAA5BA,EAA+B,YAAY,CAACtI,EAC9C,CACF,EAAG,CAACA,EAAQ,EAEZU,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,SAGd4H,EAFK3D,UAEL2D,CAAAA,EAAAA,EAAgB,OAAO,CAAC,GAAG,EAAC,GAA5BA,EAA+B,YAAY,CAAC,CAAEH,MAAAA,CAAM,EAAC,CACvD,EAAG,CAACA,EAAM,EAEHC,CACT,ECpCaG,EAETzH,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAzB4B,CAC9BwD,EACA/E,KAEA,IAAM6I,EAAkBF,EAAa5D,GAGrC,MAFArD,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAM6I,EAAgB,OAAO,CAAE,CAACA,EAAgB,EAElE,IACT,EAkBAG,CAAAA,EAAU,WAAW,CAAG,YCvBjB,IAAMC,EAAa,CAAuB,CAC/C7C,SAAAA,EAAW,EAAI,CACf8C,QAAAA,CAAO,CACPzI,QAAAA,CAAO,CACqB,IAC5B,GAAM,CAAE,QAAS4E,CAAa,CAAE,aAAcD,CAAM,CAAE,CAAG7B,EACvD0B,GAGIkE,EAAgBlI,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAqC,CACzD,SAAU,KACV,MACE,OAAO,IAAI,CAAC,QAAQ,AACtB,EACA,OACE,GAAI,AAAkB,OAAlB,IAAI,CAAC,QAAQ,CAAW,CAC1B,IAAM6F,EAAY1B,MAAAA,EAAAA,KAAAA,EAAAA,EAAQ,GAAG,GAE7B,GAAI,CAAC0B,EACH,OAAO,IAGT,KAAI,CAAC,QAAQ,CAAGsC,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoBtC,EAAWoC,EAASzI,EAC1D,CAEA,OAAO,IAAI,CAAC,QAAQ,AACtB,EACA,QACwB,OAAlB,IAAI,CAAC,QAAQ,GACf,IAAI,CAAC,QAAQ,CAAC,MAAM,GACpB,IAAI,CAAC,QAAQ,CAAG,KAEpB,CACF,GAsBA,MApBAU,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACTkE,GAEL8D,EAAc,OAAO,CAAC,IAAI,EAC5B,EAAG,CAAC9D,EAAc,EAElBlE,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,IACP,KACLgI,EAAc,OAAO,CAAC,KAAK,EAC7B,EACC,EAAE,EAELhI,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKiE,GAED8D,GAAW9C,EAAU,KACvBiD,QAAAA,CAAAA,EAAAA,EAAc,OAAO,CAAC,GAAG,EAAC,GAA1BA,EAA6B,UAAU,CAACH,EAC1C,CACF,EAAG,CAACA,EAAS9C,EAAS,EAEf+C,CACT,ECtBaG,EAAU/H,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EA5BO,CAC5B,CAAE,GAAGO,EAAmC,CACxC9B,KAEA,IAAMmJ,EAAgBF,EAAWnH,GAGjC,MAFAJ,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAMmJ,EAAc,OAAO,CAAE,CAACA,EAAc,EAE9D,IACT,EAqBAG,CAAAA,EAAQ,WAAW,CAAG,UCtBtB,IAAMC,EAAe,AACnBxE,IAEA,GAAM,CAAE,QAASN,CAAY,CAAE,YAAavD,CAAK,CAAE,CAAGqC,EACpDrD,GAEI,CAAE+D,YAAAA,CAAW,CAAED,aAAAA,CAAY,CAAEE,WAAAA,CAAU,CAAE,CAAGJ,IAC5C0F,EAAWxE,EAAaD,GACxB0E,EAAWzE,EAAa9D,GACxBwI,EAAgB1E,EAAad,GAC7ByF,EAAWC,EAAqB7E,GAEhC8E,EAAkB5I,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAA0C,CAChE,WAAY,KACZ,MACE,OAAO,IAAI,CAAC,UAAU,AACxB,EACA,OACE,GAAI,AAAoB,OAApB,IAAI,CAAC,UAAU,CAAW,KACX6I,EAEJC,EAFb,IAAMpF,EAAW,MAAAmF,CAAAA,EAAAA,EAAS,OAAO,AAAD,EAAfA,KAAAA,EAAAA,EAAkB,GAAG,GAEhCE,EAAO,MAAAD,CAAAA,EAAAA,EAAc,OAAO,AAAD,EAApBA,KAAAA,EAAAA,EAAuB,GAAG,GACjCE,EAAeT,EAAS,OAAO,CAErC,GAAI,CAAC7E,GAAY,CAACqF,EAAM,OAAO,KAE/B,GAAIE,EAAgBD,GAAe,CACjC,GAAM,CAAE,KAAME,CAAC,CAAE,GAAGrI,EAAM,CAAGmI,CAC7B,KAAI,CAAC,UAAU,CAAGG,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoBJ,EAAMlI,EAC9C,KAAO,CACL,GAAM,CAAE,KAAMqI,CAAC,CAAEE,IAAAA,CAAG,CAAE,GAAGvI,EAAM,CAAGmI,CAClC,KAAI,CAAC,UAAU,CAAGK,AAAAA,GAAAA,EAAAA,oBAAAA,AAAAA,EAAqBN,EAAMK,EAAKvI,EACpD,CACF,CAEA,OAAO,IAAI,CAAC,UAAU,AACxB,EACA,QAC0B,OAApB,IAAI,CAAC,UAAU,GACjB,IAAI,CAAC,UAAU,CAAC,MAAM,GACtB,IAAI,CAAC,UAAU,CAAG,KAEtB,CACF,GAoCA,MAlCAX,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKsD,GAEL,GAAI,CAACT,EAEH,MAAM,IAAIjB,EACR,yGACA,CACE,cAAe,GACf,SAAU,EACZ,GAICkB,IAIL4F,EAAgB,OAAO,CAAC,KAAK,GAC7BA,EAAgB,OAAO,CAAC,IAAI,IAC9B,EAAG,CAACpF,EAAcR,EAAaD,EAAc2F,EAAS,EAEtDxI,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,IACP,KACL0I,EAAgB,OAAO,CAAC,KAAK,EAC/B,EACC,EAAE,EAEL1I,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,SAGdoJ,EAFKrJ,GAAU6D,UAEfwF,CAAAA,EAAAA,EAAgB,OAAO,CAAC,GAAG,EAAC,GAA5BA,EAA+B,YAAY,CAACC,EAA0BzF,GAAM,CAC9E,EAAG,CAACA,EAAM,EAEH8E,CACT,EAEMW,EAA4B,AAChCzF,IAEA,GAAImF,EAAgBnF,GAAQ,CAC1B,GAAM,CAAE,KAAMoF,CAAC,CAAE,GAAGrI,EAAM,CAAGiD,EAC7B,OAAOjD,CACT,CAEA,GAAM,CAAE,KAAMqI,CAAC,CAAE,IAAKM,CAAE,CAAE,GAAG3I,EAAM,CAAGiD,EACtC,OAAOjD,CACT,EAEM8H,EAAuB,AAC3B7E,IAEA,IAAImF,EAAgBnF,GAIpB,OAAQA,EAAkC,GAAG,AAC/C,EAEMmF,EAAkB,AACtBnF,GAEOA,AAAe,SAAfA,EAAM,IAAI,CCrHb2F,EAA0B,CAC9B3F,EACA/E,KAEA,IAAM2K,EAAepB,EAAaxE,GAGlC,MAFArD,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAM2K,EAAa,OAAO,CAAE,CAACA,EAAa,EAE5D,IACT,EAqBaC,EAETrJ,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAAwD,CAACwD,EAAO/E,IAC3D0K,EAAwB,CAAE,GAAG3F,CAAK,CAAE,KAAM,MAAO,EAAG/E,IAoBhD6K,EAETtJ,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAA0D,CAACwD,EAAO/E,IAC7D0K,EAAwB,CAAE,GAAG3F,CAAK,CAAE,KAAM,OAAQ,EAAG/E,GAG9D4K,CAAAA,EAAc,WAAW,CAAG,gBAC5BC,EAAe,WAAW,CAAG,iBCjDtB,IAAMC,EAAuB,CAAqB,CACvDjK,QAAAA,CAAO,CACPkE,MAAAA,CAAK,CACLgG,kBAAAA,CAAiB,CACjBC,eAAAA,CAAc,CACkC,IAChD,IAAMxB,EAAWvI,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO8D,GAClBkG,EAAuBhK,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO8J,GAC9BG,EAAoBjK,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO+J,GAC3BG,EAA4BlK,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAA4B,KAE9DuI,CAAAA,EAAS,OAAO,CAAGzE,EACnBmG,EAAkB,OAAO,CAAGF,EAE5B,IAAMI,EAAkBnK,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAA4C,CAClE,WAAY,KACZ,MACE,OAAO,IAAI,CAAC,UAAU,AACxB,EACA,OACE,GAAI,CAAC,IAAI,CAAC,UAAU,CAAE,CACpB,IAAMoK,EAAaH,EAAkB,OAAO,CAAC1B,EAAS,OAAO,EAE7D,GAAI,CAAC6B,EACH,OAAO,IAGTF,CAAAA,EAA0B,OAAO,CAAGE,EAAW,MAAM,CACrD,IAAI,CAAC,UAAU,CAAGA,EAAW,SAAS,AACxC,CAEA,OAAO,IAAI,CAAC,UAAU,AACxB,EACA,QACE,GAAI,AAAoB,OAApB,IAAI,CAAC,UAAU,CAAW,KAC5BF,QAAAA,CAAAA,EAAAA,EAA0B,OAAO,AAAD,GAAhCA,EAAAA,IAAAA,CAAAA,GACAA,EAA0B,OAAO,CAAG,KACpC,IAAI,CAAC,UAAU,CAAG,IACpB,CACF,CACF,GAqBA,MAnBAhK,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACTN,IAIDoK,EAAqB,OAAO,GAAKF,IACnCK,EAAgB,OAAO,CAAC,KAAK,GAC7BH,EAAqB,OAAO,CAAGF,GAGjCK,EAAgB,OAAO,CAAC,IAAI,GAC9B,EAAG,CAACvK,EAASkK,EAAkB,EAE/B5J,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,IACP,KACLiK,EAAgB,OAAO,CAAC,KAAK,EAC/B,EACC,EAAE,EAEEA,CACT,ECxEaE,EAAmB,AAC9BvG,IAEA,GAAM,CAAE,QAASwG,CAAY,CAAE,YAAarK,CAAK,CAAE,CAAGqC,EACpDrD,GAEI,CAAE8D,aAAAA,CAAY,CAAEC,YAAAA,CAAW,CAAE,WAAY+F,CAAI,CAAE,CAAGlG,IAClD9C,EAAcC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAOC,GACrBgD,EAAajD,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAO+I,EAE1BhJ,CAAAA,EAAY,OAAO,CAAGE,EACtBgD,EAAW,OAAO,CAAG8F,EACrB,IAAMwB,EAAsBV,EAAqB,CAC/C,QAASS,GAAgBvH,GAAgBC,EACzCc,MAAAA,EACA,kBAAmBA,EAAM,MAAM,EAAIA,EAAM,MAAM,CAC/C,eAAekF,CAAY,MACRwB,EACDC,EADhB,IAAM/G,EAAW,MAAA8G,CAAAA,EAAAA,EAAY,OAAO,AAAD,EAAlBA,KAAAA,EAAAA,EAAqB,GAAG,GACnCE,EAAU,MAAAD,CAAAA,EAAAA,EAAW,OAAO,AAAD,EAAjBA,KAAAA,EAAAA,EAAoB,GAAG,GAEvC,GAAI,CAAC/G,GAAY,CAACgH,EAChB,OAAO,KAGT,IAAMC,EACJ3B,AAAwB9H,SAAxB8H,EAAa,MAAM,CACfA,EAAa,MAAM,CACnBA,EAAa,MAAM,CAAC,CAClB,MAAOtF,EACP,KAAMgH,CACR,GAIN,OAFAA,EAAQ,eAAe,CAACC,GAEjB,CACLA,UAAAA,EACA,OAAQ,IAAMD,EAAQ,eAAe,CAACC,EACxC,CACF,CACF,GAkBA,MAhBAzK,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAKoK,GAID,CAACvH,EACH,MAAM,IAAIjB,EACR,6GACA,CACE,cAAe,GACf,SAAU,iBACZ,EAGN,EAAG,CAACwI,EAAcvH,EAAa,EAExBwH,CACT,EC9BaK,GAAgBtK,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAzBO,CAClCwD,EACA/E,KAEA,IAAMwL,EAAsBF,EAAiBvG,GAG7C,MAFArD,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAMwL,EAAoB,OAAO,CAAE,CAACA,EAAoB,EAE1E,IACT,EAoBAK,CAAAA,GAAc,WAAW,CAAG,gBC9BrB,IAAMC,GAAqB,AAChC/G,IAEA,GAAM,CAAE,QAASwG,CAAY,CAAE,YAAarK,CAAK,CAAE,CAAGqC,EACpDrD,GAEI,CAAE,QAASmF,CAAa,CAAE,aAAcD,CAAM,CAAE,CAAG7B,EACvD0B,GAEIjE,EAAcC,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAOC,GACrBqF,EAAetF,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAOmE,GAiC5B,OA/BApE,EAAY,OAAO,CAAGE,EACtBqF,EAAa,OAAO,CAAGnB,EACO0F,EAAqB,CACjD,QAASS,GAAgBlG,EACzBN,MAAAA,EACA,kBAAmBA,EAAM,MAAM,EAAIA,EAAM,MAAM,CAC/C,eAAekF,CAAY,MACP8B,EACDN,EADjB,IAAM3E,EAAY,MAAAiF,CAAAA,EAAAA,EAAa,OAAO,AAAD,EAAnBA,KAAAA,EAAAA,EAAsB,GAAG,GACrCpH,EAAW,MAAA8G,CAAAA,EAAAA,EAAY,OAAO,AAAD,EAAlBA,KAAAA,EAAAA,EAAqB,GAAG,GAEzC,GAAI,CAAC9G,GAAY,CAACmC,EAChB,OAAO,KAGT,IAAM8E,EACJ3B,AAAwB9H,SAAxB8H,EAAa,MAAM,CACfA,EAAa,MAAM,CACnBA,EAAa,MAAM,CAAC,CAClB,MAAOtF,EACP,OAAQmC,CACV,GAIN,OAFAA,EAAU,eAAe,CAAC8E,GAEnB,CACLA,UAAAA,EACA,OAAQ,IAAM9E,EAAU,eAAe,CAAC8E,EAC1C,CACF,CACF,EAGF,EClBaI,GAAkBzK,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAxBO,CACpCwD,EACA/E,KAEA,IAAMiM,EAAwBH,GAAmB/G,GAGjD,MAFArD,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAMiM,EAAsB,OAAO,CAAE,CAACA,EAAsB,EAE9E,IACT,EAmBAD,CAAAA,GAAgB,WAAW,CAAG,kBClCvB,IAAME,GAAU,CAAuB,CAC5CC,cAAAA,CAAa,CACe,CAAG,CAAC,CAAC,IACjC,GAAM,CAAE,YAAajL,CAAK,CAAE,QAASuD,CAAY,CAAE,CAAGlB,EACpDrD,GAEI,CAACW,EAASC,EAAW,CAAGC,AAAAA,GAAAA,EAAAA,QAAAA,AAAAA,EAAS,IAEjCmD,EAAajD,AAAAA,GAAAA,EAAAA,MAAAA,AAAAA,EAAkC,CACnD,MAAO,KACP,MACE,OAAO,IAAI,CAAC,KAAK,AACnB,EACA,OACE,IAAM0D,EAAWzD,MAAAA,EAAAA,KAAAA,EAAAA,EAAO,GAAG,GAC3B,GAAI,CAACyD,EAAU,OAAO,KAEtB,IAAMqF,EAAOrF,EAAS,OAAO,CAAC,IAS9B,OARA,IAAI,CAAC,KAAK,CAAGqF,EAEblJ,EAAW,IAEPqL,AAAkBhK,SAAlBgK,GACF,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAACA,GAGvB,IAAI,CAAC,KAAK,AACnB,EACA,QACE,GAAI,AAAe,OAAf,IAAI,CAAC,KAAK,CAAW,KACvBtF,CAAAA,OAAAA,GAAAA,MAAAA,CAAAA,EAAAA,EAAO,GAAG,EAAC,GAAXA,EAAc,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,IAC7C/F,EAAW,IAEX,IAAI,CAAC,KAAK,CAAG,IACf,CACF,CACF,GAuBA,MArBAK,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACTsD,GAELP,EAAW,OAAO,CAAC,IAAI,EACzB,EAAG,CAACO,EAAa,EAEjBrD,AAAAA,GAAAA,EAAAA,SAAAA,AAAAA,EAAU,IACD,KACL8C,EAAW,OAAO,CAAC,KAAK,EAC1B,EACC,EAAE,EAEL/C,AAAAA,GAAAA,EAAAA,eAAAA,AAAAA,EAAgB,KACd,GAAIgL,AAAkBhK,SAAlBgK,EAA6B,OAEjC,IAAMnC,EAAO9F,EAAW,OAAO,CAAC,GAAG,EAC/B8F,CAAAA,GACFA,EAAK,gBAAgB,CAACmC,EAE1B,EAAG,CAACA,EAAc,EAEX,CAAEjI,WAAAA,EAAYrD,QAAAA,CAAQ,CAC/B,ECZauL,GAAO7K,AAAAA,GAAAA,EAAAA,UAAAA,AAAAA,EAvCO,CACzB,CAAEC,SAAAA,CAAQ,CAAE2K,cAAAA,CAAa,CAAa,CACtCnM,KAEA,GAAM,CACJ,WAAY,CAAE,QAASkE,CAAU,CAAE,CACnCrD,QAAAA,CAAO,CACR,CAAGqL,GAAuB,CACzBC,cAAAA,CACF,GAGA,MAFAzK,AAAAA,GAAAA,EAAAA,mBAAAA,AAAAA,EAAoB1B,EAAK,IAAMkE,EAAY,CAACA,EAAW,EAGrD,wBAACL,EAAY,QAAQ,EACnB,MAAO,CACL,WAAYK,EACZrD,QAAAA,CACF,GAECW,EAGP,EAkBA4K,CAAAA,GAAK,WAAW,CAAG"}
|