@tradecanvas/chart 1.74.0 → 1.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Chart.d.ts +2 -1
- package/dist/Chart.d.ts.map +1 -1
- package/dist/LayoutSession-Di5_gC6i.cjs +2 -0
- package/dist/LayoutSession-Di5_gC6i.cjs.map +1 -0
- package/dist/{LayoutSession-DbJAOYso.js → LayoutSession-k8eo2c64.js} +8 -6
- package/dist/LayoutSession-k8eo2c64.js.map +1 -0
- package/dist/WidgetDrawingSettings-B_mi8DUh.cjs +2 -0
- package/dist/WidgetDrawingSettings-B_mi8DUh.cjs.map +1 -0
- package/dist/{WidgetDrawingSettings-BeW8fX7r.js → WidgetDrawingSettings-CJsNm1Bf.js} +78 -79
- package/dist/WidgetDrawingSettings-CJsNm1Bf.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/widget/ChartWidget.d.ts.map +1 -1
- package/dist/widget/WidgetSelectionToolbar.d.ts.map +1 -1
- package/dist/widget/drawingSettingsTabs.d.ts.map +1 -1
- package/dist/widget/drawingText.d.ts +1 -1
- package/dist/widget/drawingText.d.ts.map +1 -1
- package/dist/widget/index.cjs +3 -3
- package/dist/widget/index.cjs.map +1 -1
- package/dist/widget/index.js +989 -988
- package/dist/widget/index.js.map +1 -1
- package/package.json +3 -3
- package/dist/LayoutSession-DbJAOYso.js.map +0 -1
- package/dist/LayoutSession-WcHEheSo.cjs +0 -2
- package/dist/LayoutSession-WcHEheSo.cjs.map +0 -1
- package/dist/WidgetDrawingSettings-BeW8fX7r.js.map +0 -1
- package/dist/WidgetDrawingSettings-Cyl2u_u8.cjs +0 -2
- package/dist/WidgetDrawingSettings-Cyl2u_u8.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WidgetDrawingSettings-CJsNm1Bf.js","names":[],"sources":["../src/widget/drawingSettingsTabs.ts","../src/widget/WidgetDrawingSettings.ts"],"sourcesContent":["import type { AnchorPoint, DrawingLevel, DrawingOptionDef, DrawingOptionDefs, DrawingOptions, DrawingStyle } from '@tradecanvas/commons';\nimport { ownFillColor } from '@tradecanvas/commons';\nimport { createIcon } from './icons.js';\nimport { fill, type MessageKey, type Translator } from './i18n.js';\nimport type { TextLayout } from './drawingText.js';\nimport { checkRow, colorAlpha, colorInput, numberInput, selectInput, settingsRow, toHex, withAlpha } from './settingsControls.js';\n\nexport type { TextLayout };\n\nconst LINE_WIDTHS = [1, 2, 3, 4];\nconst LINE_STYLES: DrawingStyle['lineStyle'][] = ['solid', 'dashed', 'dotted'];\n/**\n * The sizes offered for a drawing's text. Not 12: drawings saved with the old default\n * all carry it, so the chart reads it as no size of their own and draws its default.\n */\nconst FONT_SIZES = [10, 11, 13, 14, 16, 18, 20, 24, 28, 32];\n/** The size a text tool without a layout of its own draws at (a price label, an arrow's label). */\nconst DEFAULT_FONT_SIZE = 14;\n/** The old default every drawing was saved with: the chart draws its own default for it. */\nconst LEGACY_FONT_SIZE = 12;\n/** Most levels the editor offers to add, like the chart keeps. */\nconst MAX_LEVELS = 48;\n/** A new level sits this far past the last one. */\nconst LEVEL_STEP = 0.5;\n/** The fill's opacity a drawing without one starts from. */\nconst DEFAULT_FILL_ALPHA = 0.12;\n/** Options set in the line's own row, not listed with the tool's others. */\nconst END_KEYS = ['leftEnd', 'rightEnd'] as const;\n\n/** What the Style tab shows. */\nexport interface StyleTabModel {\n /** The style and the options as they are now (a row edits what the last edit left). */\n style: () => DrawingStyle;\n options: () => DrawingOptions;\n defs: DrawingOptionDefs;\n /** Whether the tool fills an area (the Fill row). */\n fill: boolean;\n}\n\n/** What the Style tab changes. */\nexport interface StyleTabActions {\n style(patch: Partial<DrawingStyle>): void;\n options(patch: DrawingOptions): void;\n /** Draw the tab again (a level added or removed), the keyboard on the first of `focus` there is. */\n redraw(focus?: readonly string[]): void;\n}\n\n/** Told the line's new colour: what takes it while it has none of its own (the fill, a level). */\ntype ColorFollower = (color: string) => void;\n\n/** A label from the widget's strings (`drawingOption.<key>`), else the tool's own. */\nfunction optionLabel(t: Translator, key: string, fallback: string): string {\n const messageKey = `drawingOption.${key}` as MessageKey;\n const text = t(messageKey);\n return text === messageKey ? fallback : text;\n}\n\nfunction section(): HTMLDivElement {\n const el = document.createElement('div');\n el.className = 'tcw-settings-section';\n return el;\n}\n\n/** A row of several controls after a label (a `<label>` would only reach the first). */\nfunction controlsRow(label: string, ...controls: HTMLElement[]): HTMLDivElement {\n const row = document.createElement('div');\n row.className = 'tcw-settings-row';\n const text = document.createElement('span');\n text.className = 'tcw-settings-label';\n text.textContent = label;\n const box = document.createElement('span');\n box.className = 'tcw-indi-plot-controls';\n box.append(...controls);\n row.append(text, box);\n return row;\n}\n\nfunction named<T extends HTMLElement>(el: T, label: string): T {\n el.setAttribute('aria-label', label);\n return el;\n}\n\n/**\n * The Style tab: the line (colour, width, dash), its ends, the fill, then\n * the tool's own switches and choices, and its levels last.\n */\nexport function renderStyleTab(body: HTMLElement, model: StyleTabModel, actions: StyleTabActions, t: Translator): void {\n const followers: ColorFollower[] = [];\n const look = section();\n look.appendChild(lineRow(model.style(), actions, followers, t));\n // A tool's ends only when they are the choice of plain or arrow; another option of that name is listed with the rest.\n const ends: string[] = END_KEYS.filter((key) => model.defs[key]?.kind === 'choice');\n if (ends.length > 0) {\n look.appendChild(controlsRow(t('drawingSettings.lineEnds'), ...ends.map((key) => named(selectInput(\n [{ value: 'normal', label: t('drawingSettings.lineEnd.normal') }, { value: 'arrow', label: t('drawingSettings.lineEnd.arrow') }],\n String(model.options()[key] ?? 'normal'),\n (v) => actions.options({ [key]: v }),\n ), optionLabel(t, key, model.defs[key].label)))));\n }\n if (model.fill) look.appendChild(fillRow(model.style(), actions, followers, t));\n body.appendChild(look);\n\n const rest = Object.entries(model.defs).filter(([key, def]) => def.kind !== 'levels' && !ends.includes(key));\n if (rest.length > 0) {\n const own = section();\n for (const [key, def] of rest) own.appendChild(optionRow(key, def as Exclude<DrawingOptionDef, { kind: 'levels' }>, model.options(), actions, t));\n body.appendChild(own);\n }\n for (const [key, def] of Object.entries(model.defs)) {\n if (def.kind === 'levels') body.appendChild(levelsEditor(key, def, model, actions, followers, t));\n }\n}\n\nfunction lineRow(style: DrawingStyle, actions: StyleTabActions, followers: readonly ColorFollower[], t: Translator): HTMLDivElement {\n const color = named(colorInput(style.color, (v) => {\n actions.style({ color: v });\n for (const follow of followers) follow(v);\n }), t('drawingSettings.color'));\n const width = named(selectInput(\n LINE_WIDTHS.map((w) => ({ value: String(w), label: `${w} px` })),\n String(style.lineWidth),\n (v) => actions.style({ lineWidth: Number(v) }),\n ), t('drawingSettings.lineWidth'));\n const dash = named(selectInput(\n LINE_STYLES.map((s) => ({ value: s, label: t(`drawingSettings.lineStyle.${s}`) })),\n style.lineStyle,\n (v) => actions.style({ lineStyle: v as DrawingStyle['lineStyle'] }),\n ), t('drawingSettings.lineStyle'));\n return controlsRow(t('drawingSettings.line'), color, width, dash);\n}\n\nfunction fillRow(style: DrawingStyle, actions: StyleTabActions, followers: ColorFollower[], t: Translator): HTMLDivElement {\n const current = ownFillColor(style) ?? withAlpha(style.color, DEFAULT_FILL_ALPHA);\n let hex = toHex(current);\n let alpha = colorAlpha(current);\n // Without a fill of its own the drawing fills in its line's colour, until one is set here.\n let own = ownFillColor(style) !== undefined;\n const apply = () => {\n own = true;\n actions.style({ fillColor: withAlpha(hex, alpha), fillOpacity: alpha });\n };\n const color = named(colorInput(hex, (v) => {\n hex = v;\n apply();\n }), t('drawingSettings.fill'));\n followers.push((line) => {\n if (own) return;\n hex = toHex(line);\n color.value = hex;\n });\n const opacity = named(numberInput(Math.round(alpha * 100), { min: 0, max: 100, step: 5 }, (v) => {\n alpha = v / 100;\n apply();\n }), t('drawingSettings.opacity'));\n const percent = document.createElement('span');\n percent.className = 'tcw-unit';\n percent.setAttribute('aria-hidden', 'true');\n percent.textContent = '%';\n return controlsRow(t('drawingSettings.fill'), color, opacity, percent);\n}\n\nfunction optionRow(\n key: string,\n def: Exclude<DrawingOptionDef, { kind: 'levels' }>,\n options: DrawingOptions,\n actions: StyleTabActions,\n t: Translator,\n): HTMLElement {\n const label = optionLabel(t, key, def.label);\n const value = options[key];\n switch (def.kind) {\n case 'boolean':\n return checkRow(label, Boolean(value), (v) => actions.options({ [key]: v }));\n case 'number':\n return settingsRow(label, numberInput(Number(value), { min: def.min, max: def.max, step: def.step }, (v) => actions.options({ [key]: v })));\n case 'choice':\n return settingsRow(label, selectInput(\n def.choices.map((c) => ({ value: c.value, label: optionLabel(t, `${key}.${c.value}`, c.label) })),\n String(value),\n (v) => actions.options({ [key]: v }),\n ));\n case 'text': {\n const input = document.createElement('input');\n input.type = 'text';\n input.className = 'tcw-indi-input';\n input.value = String(value ?? '');\n input.addEventListener('change', () => actions.options({ [key]: input.value }));\n return settingsRow(label, input);\n }\n }\n}\n\n/** One row per level: shown or not, its ratio, its colour, remove; and a button to add one. */\nfunction levelsEditor(\n key: string,\n def: Extract<DrawingOptionDef, { kind: 'levels' }>,\n model: StyleTabModel,\n actions: StyleTabActions,\n followers: ColorFollower[],\n t: Translator,\n): HTMLElement {\n const wrap = document.createElement('div');\n wrap.className = 'tcw-settings-section tcw-levels-editor';\n const head = document.createElement('div');\n head.className = 'tcw-settings-section-title';\n head.textContent = optionLabel(t, key, def.label);\n wrap.appendChild(head);\n\n const levels = (): DrawingLevel[] => {\n const value = model.options()[key];\n return Array.isArray(value) ? (value as DrawingLevel[]) : [];\n };\n const commit = (next: DrawingLevel[]) => actions.options({ [key]: next });\n const grid = document.createElement('div');\n grid.className = 'tcw-levels-grid';\n levels().forEach((level, index) => {\n const row = document.createElement('div');\n row.className = 'tcw-level-row';\n const nth = ` ${index + 1}`; // rows share labels; the number tells them apart\n const visible = document.createElement('input');\n visible.type = 'checkbox';\n visible.checked = level.visible;\n visible.setAttribute('aria-label', t('drawingSettings.levelVisible') + nth);\n visible.addEventListener('change', () => commit(levels().map((l, i) => (i === index ? { ...l, visible: visible.checked } : l))));\n const value = named(numberInput(level.value, { step: 0.001 }, (v) => commit(levels().map((l, i) => (i === index ? { ...l, value: v } : l)))), t('drawingSettings.levelValue') + nth);\n const color = named(colorInput(level.color ?? model.style().color, (v) => commit(levels().map((l, i) => (i === index ? { ...l, color: v } : l)))), t('drawingSettings.levelColor') + nth);\n // A level without a colour of its own is drawn in the line's.\n followers.push((line) => {\n if (levels()[index]?.color === undefined) color.value = toHex(line);\n });\n const remove = document.createElement('button');\n remove.type = 'button';\n remove.className = 'tcw-level-remove';\n remove.setAttribute('aria-label', t('drawingSettings.removeLevel') + nth);\n remove.innerHTML = createIcon('x', 12);\n remove.addEventListener('click', () => {\n commit(levels().filter((_, i) => i !== index));\n // The keyboard stays where it was: on the next level's remove button, else the last one's, else Add.\n actions.redraw([\n `.tcw-level-row:nth-child(${index + 1}) .tcw-level-remove`,\n '.tcw-level-row:last-child .tcw-level-remove',\n '.tcw-level-add',\n ]);\n });\n row.append(visible, value, color, remove);\n grid.appendChild(row);\n });\n wrap.appendChild(grid);\n\n const add = document.createElement('button');\n add.type = 'button';\n add.className = 'tcw-reset-link tcw-level-add';\n add.textContent = t('drawingSettings.addLevel');\n add.disabled = levels().length >= MAX_LEVELS;\n add.addEventListener('click', () => {\n const last = levels().at(-1)?.value ?? 0;\n commit([...levels(), { value: Math.round((last + LEVEL_STEP) * 1000) / 1000, visible: true }]);\n actions.redraw(['.tcw-level-row:last-child input[type=\"number\"]']);\n });\n wrap.appendChild(add);\n return wrap;\n}\n\n/** The width a text wraps at when wrapping is turned on and it has none of its own. */\nconst DEFAULT_WRAP = 240;\nconst MIN_WRAP = 40;\nconst MAX_WRAP = 4000;\nconst WRAP_STEP = 10;\nconst ALIGNS = ['left', 'center', 'right'] as const;\nconst VALIGNS = ['top', 'middle', 'bottom'] as const;\n\n/**\n * A box ticked or not inside a row of controls, its name written after it\n * unless the row already says it (`said`): a screen reader hears it either way.\n */\nfunction inlineCheck(label: string, value: boolean, onChange: (value: boolean) => void, said = false): HTMLLabelElement {\n const wrap = document.createElement('label');\n wrap.className = 'tcw-inline-check';\n const box = document.createElement('input');\n box.type = 'checkbox';\n box.checked = value;\n box.setAttribute('aria-label', label);\n box.addEventListener('change', () => onChange(box.checked));\n wrap.append(box);\n if (!said) {\n const text = document.createElement('span');\n text.textContent = label;\n wrap.append(text);\n }\n return wrap;\n}\n\n/**\n * The Text tab: what the drawing writes, its size, bold and italics, and its\n * colour; for a text box (`layout`), its alignment, background, border and\n * the width it wraps at; for a line's or a box's text (`place`), where it sits.\n */\nexport function renderTextTab(\n body: HTMLElement,\n style: DrawingStyle,\n onStyle: (patch: Partial<DrawingStyle>) => void,\n t: Translator,\n layout?: TextLayout,\n textColor?: string,\n place = false,\n): void {\n const block = section();\n const text = document.createElement('textarea');\n text.className = 'tcw-indi-input tcw-drawing-text';\n text.rows = 3;\n text.value = style.text ?? '';\n text.addEventListener('input', () => onStyle({ text: text.value }));\n const textRow = settingsRow(t('drawingSettings.text'), text);\n textRow.classList.add('tcw-text-row');\n block.appendChild(textRow);\n const size = named(selectInput(\n FONT_SIZES.map((s) => ({ value: String(s), label: `${s} px` })),\n String((style.fontSize !== LEGACY_FONT_SIZE ? style.fontSize : undefined) ?? layout?.fontSize ?? DEFAULT_FONT_SIZE),\n (v) => onStyle({ fontSize: Number(v) }),\n ), t('drawingSettings.fontSize'));\n block.appendChild(controlsRow(\n t('drawingSettings.fontSize'),\n size,\n inlineCheck(t('drawingSettings.bold'), style.bold === true, (on) => onStyle({ bold: on })),\n inlineCheck(t('drawingSettings.italic'), style.italic === true, (on) => onStyle({ italic: on })),\n ));\n block.appendChild(controlsRow(t('drawingSettings.textColor'), named(\n colorInput(style.textColor ?? textColor ?? style.color, (v) => onStyle({ textColor: v })),\n t('drawingSettings.textColor'),\n )));\n body.appendChild(block);\n if (layout) body.appendChild(textBoxSection(style, onStyle, t, layout));\n if (place) body.appendChild(textPlaceSection(style, onStyle, t));\n}\n\n/** Where a line's or a box's text sits: at an end or the middle, and above, on or under (at the top, middle or bottom). */\nfunction textPlaceSection(style: DrawingStyle, onStyle: (patch: Partial<DrawingStyle>) => void, t: Translator): HTMLElement {\n const place = section();\n place.appendChild(controlsRow(t('drawingSettings.align'), named(selectInput(\n ALIGNS.map((a) => ({ value: a, label: t(`drawingSettings.align.${a}`) })),\n style.textAlign ?? 'center',\n (v) => onStyle({ textAlign: v as DrawingStyle['textAlign'] }),\n ), t('drawingSettings.align'))));\n place.appendChild(controlsRow(t('drawingSettings.vAlign'), named(selectInput(\n VALIGNS.map((a) => ({ value: a, label: t(`drawingSettings.vAlign.${a}`) })),\n style.textVAlign ?? 'top',\n (v) => onStyle({ textVAlign: v as DrawingStyle['textVAlign'] }),\n ), t('drawingSettings.vAlign'))));\n return place;\n}\n\n/** A text box's rows: alignment, background, border, and the width it wraps at. */\nfunction textBoxSection(style: DrawingStyle, onStyle: (patch: Partial<DrawingStyle>) => void, t: Translator, layout: TextLayout): HTMLElement {\n const box = section();\n box.appendChild(controlsRow(t('drawingSettings.align'), named(selectInput(\n ALIGNS.map((a) => ({ value: a, label: t(`drawingSettings.align.${a}`) })),\n style.textAlign ?? 'left',\n (v) => onStyle({ textAlign: v as DrawingStyle['textAlign'] }),\n ), t('drawingSettings.align'))));\n\n const background = ownFillColor(style) ?? withAlpha(style.color, DEFAULT_FILL_ALPHA);\n box.appendChild(controlsRow(\n t('drawingSettings.background'),\n inlineCheck(t('drawingSettings.background'), style.textBackground ?? layout.box, (on) => onStyle({ textBackground: on }), true),\n named(colorInput(background, (v) => onStyle({ fillColor: withAlpha(v, colorAlpha(background)) })), t('drawingSettings.backgroundColor')),\n ));\n box.appendChild(controlsRow(\n t('drawingSettings.border'),\n inlineCheck(t('drawingSettings.border'), style.textBorder ?? layout.border, (on) => onStyle({ textBorder: on }), true),\n named(colorInput(style.borderColor ?? style.color, (v) => onStyle({ borderColor: v })), t('drawingSettings.borderColor')),\n ));\n\n // The width shows what wrapping on would use: the text's own, else the tool's, else a default.\n const own = style.textWrap ?? layout.wrap;\n let width = own > 0 ? own : layout.wrap > 0 ? layout.wrap : DEFAULT_WRAP;\n let wrapping = own > 0;\n const widthInput = named(numberInput(width, { min: MIN_WRAP, max: MAX_WRAP, step: WRAP_STEP }, (v) => {\n width = v;\n if (wrapping) onStyle({ textWrap: v });\n }), t('drawingSettings.wrapWidth'));\n // A width means something only while the text wraps.\n widthInput.disabled = !wrapping;\n box.appendChild(controlsRow(\n t('drawingSettings.wrap'),\n inlineCheck(t('drawingSettings.wrap'), wrapping, (on) => {\n wrapping = on;\n widthInput.disabled = !on;\n onStyle({ textWrap: on ? width : 0 });\n }, true),\n widthInput,\n ));\n return box;\n}\n\n/** What the Coordinates tab reads and changes. */\nexport interface CoordinatesTabActions {\n /** An anchor's time as the date and time fields show it (the chart's zone), and back. */\n toWallTime(time: number): { date: string; time: string };\n fromWallTime(date: string, time: string): number | null;\n /** A price on the market's grid. */\n roundPrice?(price: number): number;\n /** The market's smallest price step, for the price fields' arrows. */\n priceStep?(): number;\n move(index: number, patch: Partial<AnchorPoint>): void;\n}\n\n/** The Coordinates tab: a row per point, its price, date and time. */\nexport function renderCoordinatesTab(body: HTMLElement, anchors: readonly AnchorPoint[], actions: CoordinatesTabActions, t: Translator): void {\n const block = section();\n anchors.forEach((anchor, index) => {\n const point = fill(t('drawingSettings.point'), { n: index + 1 });\n const wall = actions.toWallTime(anchor.time);\n const date = document.createElement('input');\n date.type = 'date';\n date.className = 'tcw-indi-input';\n date.value = wall.date;\n const time = document.createElement('input');\n time.type = 'time';\n time.className = 'tcw-indi-input';\n time.value = wall.time;\n const onTime = () => {\n const at = actions.fromWallTime(date.value, time.value);\n if (at !== null) actions.move(index, { time: at });\n };\n date.addEventListener('change', onTime);\n time.addEventListener('change', onTime);\n const price = priceInput(anchor.price, actions, (p) => actions.move(index, { price: p }));\n const row = controlsRow(point,\n named(price, `${point}: ${t('drawingSettings.price')}`),\n named(date, `${point}: ${t('drawingSettings.date')}`),\n named(time, `${point}: ${t('drawingSettings.time')}`));\n row.classList.add('tcw-draw-point');\n block.appendChild(row);\n });\n body.appendChild(block);\n}\n\n/**\n * A price field on the market's grid. It shows the price rounded, and leaves\n * the point where it is until the field is edited.\n */\nfunction priceInput(price: number, actions: CoordinatesTabActions, onChange: (price: number) => void): HTMLInputElement {\n const round = actions.roundPrice ?? ((p: number) => p);\n const step = actions.priceStep?.();\n const input = numberInput(round(price), { step: step !== undefined && step > 0 ? step : 'any' }, (typed) => {\n const onGrid = round(typed);\n input.value = String(onGrid);\n onChange(onGrid);\n });\n return input;\n}\n","import type {\n AnchorPoint,\n DrawingOptionDefs,\n DrawingOptions,\n DrawingStyle,\n DrawingToolType,\n IndicatorIntervals,\n} from '@tradecanvas/commons';\nimport { sanitizeDrawingOptions } from '@tradecanvas/commons';\nimport { createIcon } from './icons.js';\nimport { keepTabInside } from './focusTrap.js';\nimport { EN_TRANSLATOR, fill, type Translator } from './i18n.js';\nimport { WidgetContextMenu, type ContextMenuEntry } from './WidgetContextMenu.js';\nimport type { DrawingStyleTemplate } from './DrawingTemplateStore.js';\nimport { renderCoordinatesTab, renderStyleTab, renderTextTab, type TextLayout } from './drawingSettingsTabs.js';\nimport { renderVisibilityTab } from './indicatorSettingsTabs.js';\n\n/** The drawing a settings dialog edits. */\nexport interface DrawingSettingsTarget {\n id: string;\n type: DrawingToolType;\n /** The tool's name in the widget's language. */\n name: string;\n style: DrawingStyle;\n /** Every option, defaults filled in. */\n options: DrawingOptions;\n defs: DrawingOptionDefs;\n anchors: AnchorPoint[];\n /** Whether the tool fills an area and draws text (the Fill row, the Text tab). */\n fill: boolean;\n text: boolean;\n /** How the tool lays its text out in a box (the Text tab's alignment, background, border and wrap rows); unset: font rows only. */\n textLayout?: TextLayout;\n /** The colour the tool writes in without one of its own, when it isn't the line's. */\n textColor?: string;\n /** It writes its text along a line or in a box: the Text tab offers where (`textAlign`, `textVAlign`). */\n textPlace?: boolean;\n /** False for a drawing kept to the screen: its points are places on the plot, not times and prices to edit. */\n coordinates?: boolean;\n /** The intervals it shows on; unset or null: all of them. */\n intervals?: IndicatorIntervals | null;\n}\n\nexport interface DrawingSettingsPatch {\n anchors?: AnchorPoint[];\n style?: Partial<DrawingStyle>;\n options?: DrawingOptions;\n /** Null: every interval. */\n intervals?: IndicatorIntervals | null;\n}\n\n/** A drawing's look as a template keeps it: its style, and its tool's options. */\nexport interface DrawingTemplateLook {\n type: DrawingToolType;\n style: Partial<DrawingStyle>;\n options: DrawingOptions;\n}\n\nexport interface DrawingSettingsCallbacks {\n /** The dialog opened on a drawing: edits until `onEnd` are one undo step. */\n onBegin: (id: string) => void;\n /** An edit, shown on the chart at once. */\n onChange: (id: string, patch: DrawingSettingsPatch) => void;\n /** OK keeps the edits; Cancel, Escape or the close button put the drawing back. */\n onEnd: (id: string, cancel: boolean) => void;\n /** An anchor's time as the date and time fields show it (the chart's zone), and back. */\n toWallTime: (time: number) => { date: string; time: string };\n fromWallTime: (date: string, time: string) => number | null;\n /** A price on the market's grid; the Coordinates tab shows and takes prices on it. */\n roundPrice?: (price: number) => number;\n /** The market's smallest price step, for the price fields' arrows. */\n priceStep?: () => number;\n /** Make these the options new drawings of the tool start with. */\n onSaveDefault?: (type: DrawingToolType, options: DrawingOptions) => void;\n /** Saved templates: listed and deleted in the Template menu, and \"Save as template…\" (which asks for a name). */\n templates?: {\n list: (type: DrawingToolType) => DrawingStyleTemplate[];\n save: (look: DrawingTemplateLook) => void;\n remove: (name: string, type?: DrawingToolType) => void;\n };\n}\n\ntype Tab = 'style' | 'text' | 'coordinates' | 'visibility';\n\n/** Most points the Coordinates tab lists. */\nconst MAX_COORDINATE_ROWS = 12;\n/** A saved template's entry in the Template menu, by its place in the list. */\nconst TEMPLATE_ID = 't:';\n\nlet nextDialogId = 1;\n\n/**\n * A drawing's settings, in tabs: Style (the line, its ends, the fill, the\n * tool's own switches and levels), Text, Coordinates (its points by price,\n * date and time) and Visibility (the intervals it shows on). Edits show on\n * the chart at once; OK keeps them as one undo step, Cancel puts it back.\n * The Template menu applies, saves and deletes templates, keeps the options\n * as the tool's default, or resets them.\n */\nexport class WidgetDrawingSettings {\n private backdrop: HTMLDivElement;\n private modal: HTMLDivElement;\n private titleEl: HTMLHeadingElement;\n private tabsEl: HTMLDivElement;\n private bodyEl: HTMLDivElement;\n private templateBtn: HTMLButtonElement;\n private menu: WidgetContextMenu | null = null;\n private tabButtons: HTMLButtonElement[] = [];\n private target: DrawingSettingsTarget | null = null;\n private style!: DrawingStyle;\n private options: DrawingOptions = {};\n private anchors: AnchorPoint[] = [];\n private intervals: IndicatorIntervals | null = null;\n private tab: Tab = 'style';\n private returnFocus: HTMLElement | null = null;\n private readonly uid = nextDialogId++;\n\n constructor(\n host: HTMLElement,\n private readonly callbacks: DrawingSettingsCallbacks,\n private readonly t: Translator = EN_TRANSLATOR,\n ) {\n this.backdrop = document.createElement('div');\n this.backdrop.className = 'tcw-modal-backdrop';\n this.backdrop.hidden = true;\n // A press that starts in the dialog (selecting text, say) and ends on the\n // backdrop doesn't close it.\n let pressedBackdrop = false;\n this.backdrop.addEventListener('pointerdown', (e) => {\n pressedBackdrop = e.target === this.backdrop;\n });\n this.backdrop.addEventListener('click', (e) => {\n if (e.target === this.backdrop && pressedBackdrop) this.close(true);\n pressedBackdrop = false;\n });\n\n this.modal = document.createElement('div');\n this.modal.className = 'tcw-modal tcw-modal-narrow tcw-drawing-settings';\n this.modal.setAttribute('role', 'dialog');\n this.modal.setAttribute('aria-modal', 'true');\n this.modal.setAttribute('aria-labelledby', `tcw-draw-title-${this.uid}`);\n this.modal.tabIndex = -1;\n this.modal.addEventListener('keydown', (e) => this.onKeyDown(e));\n\n const header = document.createElement('div');\n header.className = 'tcw-modal-header';\n this.titleEl = document.createElement('h3');\n this.titleEl.id = `tcw-draw-title-${this.uid}`;\n const closeBtn = document.createElement('button');\n closeBtn.type = 'button';\n closeBtn.className = 'tcw-modal-close';\n closeBtn.setAttribute('aria-label', this.t('common.close'));\n closeBtn.innerHTML = createIcon('x', 16);\n closeBtn.addEventListener('click', () => this.close(true));\n header.append(this.titleEl, closeBtn);\n\n this.tabsEl = document.createElement('div');\n this.tabsEl.className = 'tcw-modal-tabs';\n this.tabsEl.setAttribute('role', 'tablist');\n this.tabsEl.addEventListener('keydown', (e) => this.onTabKey(e));\n\n this.bodyEl = document.createElement('div');\n this.bodyEl.className = 'tcw-modal-body';\n this.bodyEl.id = `tcw-draw-panel-${this.uid}`;\n this.bodyEl.setAttribute('role', 'tabpanel');\n\n this.templateBtn = this.footerButton('template', 'tcw-footer-menu', () => this.openTemplates());\n this.modal.append(header, this.tabsEl, this.bodyEl, this.buildFooter());\n this.backdrop.appendChild(this.modal);\n host.appendChild(this.backdrop);\n }\n\n /** Template on the left; Cancel and OK on the right. */\n private buildFooter(): HTMLDivElement {\n this.templateBtn.setAttribute('aria-haspopup', 'menu');\n this.templateBtn.setAttribute('aria-expanded', 'false');\n this.templateBtn.innerHTML = `<span></span>${createIcon('chevronDown', 12)}`;\n this.templateBtn.querySelector('span')!.textContent = this.t('settings.template');\n const end = document.createElement('div');\n end.className = 'tcw-footer-end';\n end.append(\n this.footerButton('cancel', 'tcw-footer-cancel', () => this.close(true), this.t('common.cancel')),\n this.footerButton('ok', 'tcw-done-btn', () => this.close(false), this.t('drawingSettings.ok')),\n );\n const footer = document.createElement('div');\n footer.className = 'tcw-modal-footer';\n footer.append(this.templateBtn, end);\n return footer;\n }\n\n /**\n * Open on `target`. With `tab: 'text'` it opens on the Text tab (a tool\n * that writes), the text selected so typing replaces it.\n */\n open(target: DrawingSettingsTarget, how: { tab?: 'text' } = {}): void {\n if (this.target) this.close(false);\n this.returnFocus = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n this.target = target;\n this.style = { ...target.style };\n this.options = structuredClone(target.options);\n this.anchors = target.anchors.map((a) => ({ ...a }));\n this.intervals = target.intervals ?? null;\n this.titleEl.textContent = target.name;\n this.tab = how.tab === 'text' && target.text ? 'text' : 'style';\n this.callbacks.onBegin(target.id);\n try {\n this.renderTabs();\n this.renderBody();\n } catch (err) {\n // A drawing the dialog can't show: end the edit it began.\n this.target = null;\n this.callbacks.onEnd(target.id, true);\n throw err;\n }\n this.backdrop.hidden = false;\n const text = this.tab === 'text' ? this.bodyEl.querySelector<HTMLTextAreaElement>('textarea') : null;\n if (text) {\n text.focus();\n text.select();\n } else {\n (this.tabButtons[0] ?? this.modal).focus();\n }\n }\n\n /** Close the dialog, keeping the edits or (with `cancel`) putting the drawing back. */\n close(cancel: boolean): void {\n const target = this.target;\n if (!target) return;\n // A value typed but not yet committed still applies on OK.\n const active = document.activeElement;\n if (!cancel && (active instanceof HTMLInputElement || active instanceof HTMLTextAreaElement) && this.modal.contains(active)) {\n active.dispatchEvent(new Event('change'));\n }\n this.target = null;\n this.menu?.close();\n this.backdrop.hidden = true;\n this.callbacks.onEnd(target.id, cancel);\n if (this.returnFocus?.isConnected) this.returnFocus.focus();\n this.returnFocus = null;\n }\n\n isOpen(): boolean {\n return this.target !== null;\n }\n\n /** The drawing being edited, if any. */\n editing(): string | null {\n return this.target?.id ?? null;\n }\n\n destroy(): void {\n this.close(true);\n this.menu?.destroy();\n this.backdrop.remove();\n }\n\n // --- Tabs ---\n\n private tabs(): Tab[] {\n const target = this.target;\n if (!target) return [];\n return [\n 'style',\n ...(target.text ? ['text' as const] : []),\n // A freehand stroke has hundreds of points: no table of them.\n ...(target.coordinates !== false && target.anchors.length <= MAX_COORDINATE_ROWS ? ['coordinates' as const] : []),\n 'visibility',\n ];\n }\n\n private renderTabs(): void {\n this.tabButtons = this.tabs().map((tab) => {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = 'tcw-modal-tab';\n btn.id = `tcw-draw-tab-${this.uid}-${tab}`;\n btn.setAttribute('role', 'tab');\n btn.setAttribute('aria-controls', this.bodyEl.id);\n btn.dataset.tab = tab;\n btn.textContent = this.t(`drawingSettings.tab.${tab}`);\n btn.addEventListener('click', () => this.selectTab(tab));\n return btn;\n });\n this.tabsEl.replaceChildren(...this.tabButtons);\n this.markTabs();\n }\n\n private markTabs(): void {\n for (const btn of this.tabButtons) {\n const selected = btn.dataset.tab === this.tab;\n btn.classList.toggle('tcw-active', selected);\n btn.setAttribute('aria-selected', String(selected));\n btn.tabIndex = selected ? 0 : -1;\n if (selected) this.bodyEl.setAttribute('aria-labelledby', btn.id);\n }\n }\n\n private selectTab(tab: Tab, focus = false): void {\n this.tab = tab;\n this.markTabs();\n this.renderBody();\n if (focus) this.tabButtons.find((b) => b.dataset.tab === tab)?.focus();\n }\n\n /** Arrow keys (the other way right to left), Home and End move between tabs. */\n private onTabKey(e: KeyboardEvent): void {\n const tabs = this.tabButtons.map((b) => b.dataset.tab as Tab);\n const at = tabs.indexOf(this.tab);\n const rtl = this.modal.closest('[dir]')?.getAttribute('dir') === 'rtl';\n const [forward, back] = rtl ? ['ArrowLeft', 'ArrowRight'] : ['ArrowRight', 'ArrowLeft'];\n const next = e.key === forward ? (at + 1) % tabs.length\n : e.key === back ? (at - 1 + tabs.length) % tabs.length\n : e.key === 'Home' ? 0\n : e.key === 'End' ? tabs.length - 1\n : -1;\n if (next < 0) return;\n e.preventDefault();\n this.selectTab(tabs[next], true);\n }\n\n /** Escape cancels; Tab stays inside the dialog. */\n private onKeyDown(e: KeyboardEvent): void {\n if (e.key === 'Escape') {\n e.preventDefault();\n e.stopPropagation();\n this.close(true);\n return;\n }\n keepTabInside(e, this.modal);\n }\n\n private renderBody(): void {\n this.bodyEl.replaceChildren();\n const target = this.target;\n if (!target) return;\n switch (this.tab) {\n case 'text':\n renderTextTab(this.bodyEl, this.style, (patch) => this.setStyle(patch), this.t, target.textLayout, target.textColor, target.textPlace);\n break;\n case 'coordinates':\n renderCoordinatesTab(this.bodyEl, this.anchors, {\n toWallTime: this.callbacks.toWallTime,\n fromWallTime: this.callbacks.fromWallTime,\n roundPrice: this.callbacks.roundPrice,\n priceStep: this.callbacks.priceStep,\n move: (index, patch) => this.setAnchor(index, patch),\n }, this.t);\n break;\n case 'visibility':\n renderVisibilityTab(this.bodyEl, this.intervals, (next) => this.setIntervals(next), this.t);\n break;\n default:\n renderStyleTab(this.bodyEl, { style: () => this.style, options: () => this.options, defs: target.defs, fill: target.fill }, {\n style: (patch) => this.setStyle(patch),\n options: (patch) => this.setOptions(patch),\n redraw: (focus = []) => {\n this.renderBody();\n for (const selector of focus) {\n const el = this.bodyEl.querySelector<HTMLElement>(selector);\n if (el) {\n el.focus();\n break;\n }\n }\n },\n }, this.t);\n }\n }\n\n // --- Edits ---\n\n private change(patch: DrawingSettingsPatch): void {\n if (this.target) this.callbacks.onChange(this.target.id, patch);\n }\n\n private setStyle(style: Partial<DrawingStyle>): void {\n if (!this.target) return;\n this.style = { ...this.style, ...style };\n this.change({ style });\n }\n\n private setOptions(options: DrawingOptions): void {\n if (!this.target) return;\n this.options = { ...this.options, ...structuredClone(options) };\n this.change({ options });\n }\n\n private setAnchor(index: number, patch: Partial<AnchorPoint>): void {\n if (!this.target) return;\n this.anchors = this.anchors.map((a, i) => (i === index ? { ...a, ...patch } : a));\n this.change({ anchors: this.anchors.map((a) => ({ ...a })) });\n }\n\n private setIntervals(intervals: IndicatorIntervals | null): void {\n if (!this.target) return;\n this.intervals = intervals;\n this.change({ intervals });\n }\n\n // --- Template ---\n\n /** The Template menu: the saved templates (each removable), Save as template, Save as default, Reset to defaults. */\n private openTemplates(): void {\n const target = this.target;\n if (!target) return;\n if (this.menu?.isOpen()) {\n this.menu.close();\n return;\n }\n const store = this.callbacks.templates;\n const saved = store?.list(target.type) ?? [];\n const entries: ContextMenuEntry[] = [\n ...saved.map((template, i): ContextMenuEntry => ({\n id: `${TEMPLATE_ID}${i}`, label: template.name, icon: 'layers', remove: fill(this.t('templates.delete'), { name: template.name }),\n })),\n ...(saved.length > 0 ? ['separator' as const] : []),\n ...(store ? [{ id: 'save', label: this.t('settings.saveTemplate'), icon: 'save' }] : []),\n ...(this.callbacks.onSaveDefault ? [{ id: 'default', label: this.t('drawingSettings.saveDefault'), icon: 'pin' }] : []),\n { id: 'reset', label: this.t('settings.resetToDefaults'), icon: 'reset' },\n ];\n const savedAt = (id: string) => saved[Number(id.slice(TEMPLATE_ID.length))];\n this.menu ??= new WidgetContextMenu(this.modal, this.t('settings.template'));\n const at = this.templateBtn.getBoundingClientRect();\n const box = this.modal.getBoundingClientRect();\n // From the button's top: in the footer there is no room below, so it opens above the button.\n this.menu.open(entries, at.left - box.left, at.top - box.top, (id) => {\n if (id === 'save') store?.save({ type: target.type, style: { ...this.style }, options: structuredClone(this.options) });\n else if (id === 'default') this.callbacks.onSaveDefault?.(target.type, structuredClone(this.options));\n else if (id === 'reset') this.resetOptions();\n else if (id.startsWith(TEMPLATE_ID)) this.applyTemplate(savedAt(id));\n }, this.templateBtn, (id) => {\n const template = savedAt(id);\n if (template) store?.remove(template.name, template.type);\n });\n }\n\n private applyTemplate(template: DrawingStyleTemplate | undefined): void {\n const target = this.target;\n if (!template || !target) return;\n if (Object.keys(template.style).length > 0) this.setStyle(template.style);\n // Templates come from storage: only options the tool takes apply.\n if (template.options) this.setOptions(sanitizeDrawingOptions(target.defs, template.options));\n this.renderBody();\n }\n\n /** The tool's options back to its defaults. */\n private resetOptions(): void {\n const target = this.target;\n if (!target) return;\n const defaults: DrawingOptions = {};\n for (const [key, def] of Object.entries(target.defs)) defaults[key] = structuredClone(def.default) as DrawingOptions[string];\n this.setOptions(defaults);\n this.renderBody();\n }\n\n private footerButton(act: string, className: string, onClick: () => void, text?: string): HTMLButtonElement {\n const btn = document.createElement('button');\n btn.type = 'button';\n btn.className = className;\n btn.dataset.act = act;\n if (text) btn.textContent = text;\n btn.addEventListener('click', onClick);\n return btn;\n }\n}\n"],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./LayoutSession-WcHEheSo.cjs`);let t=require(`@tradecanvas/commons`),n=require(`@tradecanvas/core`);function r(e){let{id:t,params:n={},position:r=null}=typeof e==`string`?{id:e}:e;return JSON.stringify([t,Object.keys(n).sort().map(e=>[e,n[e]]),r])}function i(e,t,n){let i=new Map,a=t.map(e=>{let t=r(e),n=i.get(t)??0;return i.set(t,n+1),{spec:e,key:`${t}#${n}`}}),o=new Set(a.map(e=>e.key));for(let[t,r]of[...n])o.has(t)||(e.removeIndicator(r),n.delete(t));for(let{spec:t,key:r}of a){if(n.has(r))continue;let i=typeof t==`string`?e.addIndicator(t):t.position===void 0?e.addIndicator(t.id,t.params??{}):e.addIndicator(t.id,t.params??{},t.position);i&&n.set(r,i)}}var a=3,o=e=>({time:e.time,open:e.open,high:e.high,low:e.low,close:e.close,volume:e.volume}),s=e=>e.length>0?e[e.length-1]:null;function c(t,n,r){for(let i=0;i<r;i++)if(!e.D(t[i],n[i]))return!1;return!0}function l(e,t){if(e.isReplayActive())return!0;let n=s(e.getData());return t.inReplay?n?.time===t.last?.time:n===t.shownBar?n?.time===t.last?.time||!e.isExtendedHoursVisible():!1}function u(t,n,r){let i=[];for(let a=0;a<n.length;a++){let s=t[r+a];if(!e.D(s,n[a])){if(s.time!==n[a].time||!e.E(s))return null;i.push(o(s))}}return i}function d(e,t){if(t.length===0)return!0;if(!e.updateBar)return!1;for(let n of t)if(!e.updateBar(n))return!1;return!0}function f(e){return e.slice(Math.max(1,e.length-1-3),-1).map(o)}function p(t,n){let r=[];for(let i=n;i<t.length;i++){if(!e.E(t[i])||!(t[i].time>t[i-1].time))return null;r.push(o(t[i]))}return r}function m(t,n,r){let i=r.length;if(i===0||!r.last||!e.E(r.last)||n.length<i||!l(t,r))return!1;let a=r.recent??[],s=i-1-a.length;if(n!==r.source&&(r.source.length!==i||!c(r.source,n,s)))return!1;let f=n[i-1];if(f.time!==r.last.time||!e.E(f))return!1;let m=u(n,a,s),h=p(n,i);return!m||!h||!d(t,m)?!1:(e.D(f,r.last)||t.updateLastBar(o(f)),h.length===1?t.appendBar(h[0]):h.length>1&&t.appendBars(h),!0)}function h(e,t,n){(!n||!m(e,t,n))&&e.setData(t.map(o));let r=t.length>0?o(t[t.length-1]):null,i=e.isReplayActive();return{source:t,length:t.length,last:r,recent:f(t),shownBar:i?null:s(e.getData()),inReplay:i}}function g(e){let{viewport:t,data:r}=e,i=(0,n.priceToYMapper)(t),a=r.length-1,o=Math.max(0,Math.floor(t.visibleRange.from)),s=Math.min(a,Math.ceil(t.visibleRange.to)),c=e=>r.length>0?(0,n.timestampToBarIndex)(e,r):e;return{timeToX:e=>(0,n.barIndexToX)(c(e),t),xToTime:e=>{let i=(0,n.xToBarIndex)(e,t);return r.length>0?(0,n.barIndexToTime)(i,r):i},indexToX:e=>(0,n.barIndexToX)(e,t),xToIndex:e=>(0,n.xToBarIndex)(e,t),priceToY:i,yToPrice:e=>(0,n.yToPrice)(e,t),barWidth:t.barWidth,visible:s<o?{from:0,to:-1}:{from:o,to:s}}}var _={"1x1":{cols:1,rows:1},"1x2":{cols:2,rows:1},"2x1":{cols:1,rows:2},"2x2":{cols:2,rows:2},"1x3":{cols:3,rows:1},"3x1":{cols:1,rows:3},"2x3":{cols:3,rows:2},"3x2":{cols:2,rows:3}},v=class{root;cells=[];layout;options;destroyed=!1;syncing=!1;constructor(e,t={}){this.options=t,this.layout=t.layout??`2x2`,this.root=document.createElement(`div`),this.root.style.cssText=`display:grid;width:100%;height:100%;overflow:hidden;`,e.appendChild(this.root),this.applyLayout(),this.createCells()}applyLayout(){let{cols:e,rows:t}=_[this.layout],n=this.options.gap??1;this.root.style.gridTemplateColumns=`repeat(${e}, 1fr)`,this.root.style.gridTemplateRows=`repeat(${t}, 1fr)`,this.root.style.gap=`${n}px`}createCells(){let{cols:e,rows:t}=_[this.layout],n=e*t;for(let e=0;e<n;e++)this.cells.push(this.createCell(e))}createCell(t){let n=this.options.cells?.[t]??{},r=document.createElement(`div`);r.style.cssText=`position:relative;overflow:hidden;min-width:0;min-height:0;`,this.root.appendChild(r);let i=new e.c(r,{chartType:`candlestick`,autoScale:!0,features:{crosshair:!0,keyboard:!0,volume:!0,legend:!0,priceAxis:!0,timeAxis:!0,grid:!0},...this.options.chartOptions,...n.chartOptions,theme:this.options.theme}),a={container:r,chart:i,symbol:n.symbol??`Chart ${t+1}`,timeframe:n.timeframe??`5m`};return this.options.syncCrosshair!==!1&&(i.on(`crosshairMove`,e=>{let t=e.payload.bar?.time;if(t!==void 0)for(let e of this.cells)e.chart!==i&&e.chart.setCrosshairTime(t)}),i.on(`crosshairLeave`,()=>{for(let e of this.cells)e.chart!==i&&e.chart.setCrosshairTime(null)})),this.options.syncTimeAxis!==!1&&i.on(`visibleRangeChange`,e=>{if(this.syncing)return;this.syncing=!0;let{from:t,to:n}=e.payload,r=i.getData();if(r.length>0&&t>=0&&n<r.length){let e=r[t]?.time,a=r[n]?.time;if(e&&a)for(let t of this.cells)t.chart!==i&&t.chart.setVisibleRange(e,a)}this.syncing=!1}),a}setLayout(e){if(e===this.layout)return;let t=this.cells.length,{cols:n,rows:r}=_[e],i=n*r;if(i<t)for(let e=t-1;e>=i;e--){let t=this.cells[e];t.chart.destroy(),t.container.remove(),this.cells.pop()}this.layout=e,this.applyLayout();for(let e=t;e<i;e++)this.cells.push(this.createCell(e))}getChart(e){return this.cells[e]?.chart??null}getCharts(){return this.cells.map(e=>e.chart)}getCellCount(){return this.cells.length}setData(e,t){this.cells[e]?.chart.setData(t)}setAllData(e){for(let t of this.cells)t.chart.setData(e)}async connectCell(e,t){let n=this.cells[e];n&&(n.symbol=t.symbol,n.timeframe=t.timeframe,await n.chart.connect(t))}async connectAll(e,t,r,i=500){let a=[];for(let o=0;o<this.cells.length&&o<t.length;o++)a.push(this.connectCell(o,{...typeof e==`function`?{adapter:e(t[o],o)}:(0,n.isDataFeed)(e)?{feed:e}:{adapter:e},symbol:t[o],timeframe:r,historyLimit:i}));await Promise.all(a)}setTheme(e){for(let t of this.cells)t.chart.setTheme(e)}destroy(){if(!this.destroyed){this.destroyed=!0;for(let e of this.cells)e.chart.destroy(),e.container.remove();this.cells=[],this.root.remove()}}},y=class extends n.BaseFinanceChart{options;constructor(e,t){super(e,t.theme),this.options=t,this.requestRender()}renderChart(e,t,r,i){(0,n.renderSparkline)(e,t,r,this.options,i)}update(e){this.options={...this.options,data:e},this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}},b=class extends n.BaseFinanceChart{options;crosshair=null;constructor(e,t){super(e,t.theme),this.options=t,t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),this.requestRender()}renderChart(e,t,r,i){let a=this.crosshair?.getPosition()??null;(0,n.renderDepthChart)(e,t,r,this.options,i,a)}update(e){this.options={...this.options,data:e},this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}destroy(){this.crosshair?.destroy(),super.destroy()}},x=class extends n.BaseFinanceChart{options;crosshair=null;constructor(e,t){super(e,t.theme),this.options=t,t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),this.requestRender()}renderChart(e,t,r,i){let a=this.crosshair?.getPosition()??null;(0,n.renderEquityCurve)(e,t,r,this.options,i,a)}update(e,t){this.options={...this.options,data:e},t!==void 0&&(this.options={...this.options,benchmark:t}),this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}destroy(){this.crosshair?.destroy(),super.destroy()}},S=class extends n.BaseFinanceChart{options;crosshair=null;cachedRects=[];cachedGroups=[];currentData=[];lastLayoutWidth=0;lastLayoutHeight=0;handleClick=null;constructor(e,t){super(e,t.theme),this.options=t,this.currentData=t.data??[],t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),t.onCellClick&&(this.handleClick=e=>{let t=this.canvas.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;this.onCanvasClick(n,r)},this.canvas.addEventListener(`click`,this.handleClick)),this.applyLabel(),this.recomputeLayout(),this.requestRender()}applyLabel(){let e=new Set(this.currentData.map(e=>e.group).filter(Boolean)).size,t=this.options.grouped&&e>0?`Market map of ${this.currentData.length} cells in ${e} groups`:`Heatmap of ${this.currentData.length} cells`;this.setLabel(this.options.ariaLabel??t)}recomputeLayout(){let e={x:0,y:0,width:this.width,height:this.height},t=this.options.cellPadding??2;if(this.lastLayoutWidth=this.width,this.lastLayoutHeight=this.height,this.cachedGroups=[],this.options.grouped){let{groups:r,cells:i}=(0,n.layoutGroupedTreemap)(this.currentData.map(e=>({id:e.id,weight:e.weight??(Math.abs(e.value)||1),group:e.group,value:e.value})),e,t,n.GROUP_HEADER);this.cachedRects=i,this.cachedGroups=r}else if(this.options.weighted){let r=this.currentData.map(e=>({id:e.id,weight:e.weight??(Math.abs(e.value)||1)}));this.cachedRects=(0,n.layoutSquarifiedTreemap)(r,e,t)}else this.cachedRects=(0,n.layoutUniformGrid)(this.currentData.map(e=>({id:e.id})),e,t)}onCanvasClick(e,t){if(this.options.onCellClick)for(let n of this.cachedRects){let r=n.rect;if(e>=r.x&&e<=r.x+r.width&&t>=r.y&&t<=r.y+r.height){let e=this.currentData.find(e=>e.id===n.id);e&&this.options.onCellClick(e);return}}}renderChart(e,t,r,i){(t!==this.lastLayoutWidth||r!==this.lastLayoutHeight)&&this.recomputeLayout();let a=this.crosshair?.getPosition()??null;(0,n.renderHeatmap)(e,t,r,this.currentData,this.cachedRects,this.options,i,a,this.cachedGroups)}update(e){this.currentData=e,this.options={...this.options,data:e},this.applyLabel(),this.recomputeLayout(),this.requestRender()}setOptions(e){this.options={...this.options,...e},e.data&&(this.currentData=e.data),this.applyLabel(),this.recomputeLayout(),this.requestRender()}destroy(){this.crosshair?.destroy(),this.handleClick&&this.canvas.removeEventListener(`click`,this.handleClick),super.destroy()}},C=class extends n.BaseFinanceChart{options;crosshair=null;constructor(e,t){super(e,t.theme),this.options=t,t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),this.requestRender()}renderChart(e,t,r,i){let a=this.crosshair?.getPosition()??null;(0,n.renderWaterfall)(e,t,r,this.options,i,a)}update(e){this.options={...this.options,data:e},this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}destroy(){this.crosshair?.destroy(),super.destroy()}},w=500;function T(e){let t=1-e;return 1-t*t*t}var E=class extends n.BaseFinanceChart{options;currentValue;targetValue;animationStart=null;animationFrom=0;animationFrameId=null;constructor(e,t){super(e,t.theme),this.options=t,this.currentValue=t.value,this.targetValue=t.value,this.requestRender()}renderChart(e,t,r,i){(0,n.renderGauge)(e,t,r,this.options,i,this.currentValue)}setValue(e){if(this.options.animate===!1){this.cancelAnimation(),this.currentValue=e,this.targetValue=e,this.options={...this.options,value:e},this.requestRender();return}this.targetValue=e,this.animationFrom=this.currentValue,this.animationStart=performance.now(),this.options={...this.options,value:e},this.startAnimationLoop()}setOptions(e){let t={...this.options,...e};if(e.value!==void 0&&e.value!==this.targetValue){this.options=t,this.setValue(e.value);return}this.options=t,this.requestRender()}startAnimationLoop(){if(this.animationFrameId!==null)return;let e=()=>{if(this.animationFrameId=null,this.animationStart===null)return;let t=this.options.animationDuration??w,n=performance.now()-this.animationStart,r=Math.min(1,n/Math.max(1,t)),i=T(r);this.currentValue=this.animationFrom+(this.targetValue-this.animationFrom)*i,this.requestRender(),r<1?this.animationFrameId=requestAnimationFrame(e):(this.currentValue=this.targetValue,this.animationStart=null)};this.animationFrameId=requestAnimationFrame(e)}cancelAnimation(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.animationStart=null}destroy(){this.cancelAnimation(),super.destroy()}},D=class extends n.BaseFinanceChart{options;layout=null;layoutFor=null;crosshair;onClick=e=>{let t=this.canvas.getBoundingClientRect();this.layout&&this.clickAt(this.layout,e.clientX-t.left,e.clientY-t.top)};onMove=e=>{if(!this.layout||!this.clickable())return;let t=this.canvas.getBoundingClientRect();this.canvas.style.cursor=this.hits(this.layout,e.clientX-t.left,e.clientY-t.top)?`pointer`:``};constructor(e,t){super(e,t.theme),this.options=t,this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender()),this.canvas.addEventListener(`click`,this.onClick),this.canvas.addEventListener(`pointermove`,this.onMove),this.applyLabel(),this.requestRender()}renderChart(e,t,r,i){let a=this.options.crosshair===!1?null:this.crosshair.getPosition(),o=this.layoutFor;(!this.layout||!o||o.options!==this.options||o.width!==t||o.height!==r||o.theme!==i)&&(this.layout=this.compute(t,r,i,(0,n.canvasMeasure)(e,i)),this.layoutFor={options:this.options,width:t,height:r,theme:i}),this.draw(e,t,r,i,a,this.layout)}setOptions(e){this.options={...this.options,...e},`theme`in e&&this.setTheme(e.theme??`dark`),this.applyLabel(),this.requestRender()}applyLabel(){this.setLabel(this.options.ariaLabel??this.describe())}destroy(){this.crosshair.destroy(),this.canvas.removeEventListener(`click`,this.onClick),this.canvas.removeEventListener(`pointermove`,this.onMove),super.destroy()}},O=class extends D{compute(e,t,r,i){return(0,n.computeBarLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderBarChart)(e,t,r,this.options,i,a,o)}describe(){return`Bar chart of ${this.options.series.map(e=>e.name).join(`, `)}, ${this.options.categories.length} categories`}clickable(){return this.options.onBarClick!==void 0}hits(e,t,r){return(0,n.hitBar)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.hitBar)(e,t,r);i&&this.options.onBarClick?.({category:i.category,series:i.series,value:i.value,index:i.index})}update(e,t){this.setOptions({categories:e,series:t})}},k=class extends D{compute(e,t,r,i){return(0,n.computeDonutLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderDonut)(e,t,r,this.options,i,a,o)}describe(){let e=this.options.data.filter(e=>Number.isFinite(e.value)&&e.value>0).map(e=>e.label).join(`, `);return`${(this.options.innerRadius??.6)>0?`Donut`:`Pie`} chart of ${e}`}clickable(){return this.options.onSliceClick!==void 0}hits(e,t,r){return(0,n.hitSlice)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.hitSlice)(e,t,r);i&&this.options.onSliceClick?.(i.slice)}update(e){this.setOptions({data:e})}},A=class extends D{compute(e,t,r,i){return(0,n.computeScatterLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderScatter)(e,t,r,this.options,i,a,o)}describe(){let e=this.options.series.reduce((e,t)=>e+t.points.length,0);return`Scatter chart${this.options.xLabel&&this.options.yLabel?` of ${this.options.yLabel} against ${this.options.xLabel}`:``}, ${e} points`}clickable(){return this.options.onPointClick!==void 0}hits(e,t,r){return(0,n.nearestPoint)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.nearestPoint)(e,t,r);i&&this.options.onPointClick?.(i.point,i.series)}update(e){this.setOptions({series:e})}},j=class extends D{compute(e,t,r,i){return(0,n.computeHistogramLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderHistogram)(e,t,r,this.options,i,a,o)}describe(){return`Histogram of ${this.options.values.length} values`}clickable(){return!1}hits(){return!1}clickAt(){}update(e){this.setOptions({values:e})}},M=class extends D{compute(e,t,r,i){return(0,n.computeCalendarLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderCalendar)(e,t,r,this.options,i,a,o)}describe(){let e=this.options.data.map(e=>e.date).filter(e=>/^\d{4}-\d{2}-\d{2}$/.test(e)).sort(),t=this.options.from??e[0],n=this.options.to??e[e.length-1];return t&&n?`Calendar of daily values from ${t} to ${n}`:`Calendar of daily values`}clickable(){return this.options.onDayClick!==void 0}hits(e,t,r){return(0,n.hitDay)(e,t,r)?.day!==void 0}clickAt(e,t,r){let i=(0,n.hitDay)(e,t,r)?.day;i&&this.options.onDayClick?.(i)}update(e){this.setOptions({data:e})}},N=12,P=class extends D{compute(e,t,r,i){return(0,n.computeMatrixLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderMatrix)(e,t,r,this.options,i,a,o)}describe(){let{rows:e,columns:t}=this.options;return t?e.length+t.length<=N?`Matrix of ${e.join(`, `)} by ${t.join(`, `)}`:`Matrix of ${e.length} rows by ${t.length} columns`:e.length<=N?`Matrix of ${e.join(`, `)}`:`Matrix of ${e.length} rows`}clickable(){return this.options.onCellClick!==void 0}hits(e,t,r){return(0,n.hitMatrixCell)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.hitMatrixCell)(e,t,r);i&&this.options.onCellClick?.(i.cell)}update(e){this.setOptions({values:e})}},F=class extends D{compute(e,t,r,i){return(0,n.computeCounterClockLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderCounterClock)(e,t,r,this.options,i,a,o)}describe(){return`Counter-clock chart of price against volume, ${this.options.period??25}-bar averages`}clickable(){return this.options.onPointClick!==void 0}hits(e,t,r){return(0,n.nearestCounterClockPoint)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.nearestCounterClockPoint)(e,t,r);i&&this.options.onPointClick?.(i.point)}getPhase(){return(0,n.counterClockPhase)((0,n.counterClockPoints)(this.options.data,this.options.period??25,(0,n.shownCount)(this.options)))}update(e){this.setOptions({data:e})}},I=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function L(e){return e.map(e=>({time:e.time,value:e.equity}))}function R(e){let t=-1/0;return e.map(e=>{e.equity>t&&(t=e.equity);let n=t>0?(e.equity/t-1)*100:0;return{time:e.time,value:n}})}function z(e){if(e.length===0)return[];let n=[];for(let r of e){let e=(0,t.timeframeBucketStart)(r.time,`1M`),i=n[n.length-1];i&&i.key===e?i.close=r.equity:n.push({key:e,close:r.equity})}let r=e[0].equity,i=[];for(let e of n){let t=r===0?1:r,n=(e.close/t-1)*100;r=e.close;let a=new Date(e.key),o=a.getUTCFullYear(),s=a.getUTCMonth();i.push({id:`${o}-${String(s+1).padStart(2,`0`)}`,label:I[s],group:String(o),value:n})}return i}var B=100;function V(e){return`${e>0?`+`:``}${e.toFixed(2)}%`}function H(e){return e>0?`positive`:e<0?`negative`:`neutral`}function U(e){return[{label:`Total Return`,value:V(e.totalReturnPct*B),tone:H(e.totalReturnPct)},{label:`CAGR`,value:V(e.cagr*B),tone:H(e.cagr)},{label:`Sharpe`,value:e.sharpe.toFixed(2),tone:H(e.sharpe)},{label:`Sortino`,value:e.sortino.toFixed(2),tone:H(e.sortino)},{label:`Max Drawdown`,value:V(-Math.abs(e.maxDrawdownPct)*B),tone:`negative`},{label:`Win Rate`,value:`${(e.winRate*B).toFixed(1)}%`,tone:`neutral`},{label:`Profit Factor`,value:Number.isFinite(e.profitFactor)?e.profitFactor.toFixed(2):`∞`,tone:H(e.profitFactor-1)},{label:`Trades`,value:String(e.trades),tone:`neutral`}]}function W(e){return!e||e===`dark`?t.DARK_THEME:e===`light`?t.LIGHT_THEME:e}var G=class{options;theme;root;equityChart=null;drawdownChart=null;heatmap=null;constructor(e,t){this.options=t,this.theme=W(t.theme),this.root=document.createElement(`div`),this.build(),e.appendChild(this.root)}build(){let e=this.theme,{result:t,title:n,subtitle:r}=this.options,i=this.panelBackground(),a=e.grid;if(this.root.style.cssText=[`display:flex`,`flex-direction:column`,`gap:14px`,`width:100%`,`box-sizing:border-box`,`padding:16px`,`background:${e.background}`,`color:${e.text}`,`font-family:${e.font.family}`].join(`;`),n||r){let t=document.createElement(`div`);if(n){let r=document.createElement(`div`);r.textContent=n,r.style.cssText=`font-size:${e.font.sizeLarge}px;font-weight:600;letter-spacing:-0.01em;`,t.appendChild(r)}if(r){let n=document.createElement(`div`);n.textContent=r,n.style.cssText=`font-size:${e.font.sizeSmall}px;color:${e.textSecondary};margin-top:2px;`,t.appendChild(n)}this.root.appendChild(t)}this.root.appendChild(this.buildStatsStrip(U(t.metrics),i,a));let o=document.createElement(`div`);o.style.cssText=[`display:grid`,`grid-template-columns:repeat(auto-fit, minmax(280px, 1fr))`,`grid-auto-rows:220px`,`gap:14px`].join(`;`),this.root.appendChild(o);let s=this.buildPanel(`Equity Curve`,i,a);s.wrap.style.gridColumn=`1 / -1`,o.appendChild(s.wrap),this.equityChart=new x(s.body,{data:L(t.equityCurve),theme:e,lineColor:e.candleUp,fillArea:!0,crosshair:!0});let c=this.buildPanel(`Drawdown`,i,a);o.appendChild(c.wrap),this.drawdownChart=new x(c.body,{data:R(t.equityCurve),theme:e,lineColor:e.candleDown,fillArea:!0,crosshair:!0,valueFormat:e=>`${e.toFixed(1)}%`});let l=z(t.equityCurve),u=this.buildPanel(`Monthly Returns`,i,a);o.appendChild(u.wrap),this.heatmap=new S(u.body,{data:l,theme:e,showValues:!0,valueFormat:e=>`${e>=0?`+`:``}${e.toFixed(1)}`,colorScale:{negative:e.candleDown,zero:i,positive:e.candleUp}})}buildStatsStrip(e,t,n){let r=document.createElement(`div`);r.style.cssText=[`display:grid`,`grid-template-columns:repeat(auto-fit, minmax(120px, 1fr))`,`gap:10px`].join(`;`);let i=this.theme;for(let a of e){let e=document.createElement(`div`);e.style.cssText=[`background:${t}`,`border:1px solid ${n}`,`border-radius:10px`,`padding:10px 12px`,`display:flex`,`flex-direction:column`,`gap:4px`].join(`;`);let o=document.createElement(`div`);o.textContent=a.label,o.style.cssText=`font-size:${i.font.sizeSmall}px;color:${i.textSecondary};text-transform:uppercase;letter-spacing:0.04em;`;let s=document.createElement(`div`);s.textContent=a.value;let c=a.tone===`positive`?i.candleUp:a.tone===`negative`?i.candleDown:i.text;s.style.cssText=`font-size:${i.font.sizeLarge}px;font-weight:600;color:${c};font-variant-numeric:tabular-nums;`,e.appendChild(o),e.appendChild(s),r.appendChild(e)}return r}buildPanel(e,t,n){let r=this.theme,i=document.createElement(`div`);i.style.cssText=[`background:${t}`,`border:1px solid ${n}`,`border-radius:10px`,`overflow:hidden`,`display:flex`,`flex-direction:column`].join(`;`);let a=document.createElement(`div`);a.textContent=e,a.style.cssText=[`font-size:${r.font.sizeSmall}px`,`font-weight:600`,`color:${r.textSecondary}`,`padding:8px 12px`,`border-bottom:1px solid ${n}`,`text-transform:uppercase`,`letter-spacing:0.04em`].join(`;`);let o=document.createElement(`div`);return o.style.cssText=`flex:1;min-height:0;position:relative;`,i.appendChild(a),i.appendChild(o),{wrap:i,body:o}}panelBackground(){return this.theme.name===`light`?`rgba(0,0,0,0.02)`:`rgba(255,255,255,0.03)`}update(e){this.options={...this.options,result:e},this.destroyCharts(),this.root.replaceChildren(),this.build()}setTheme(e){this.theme=W(e),this.options={...this.options,theme:e},this.destroyCharts(),this.root.replaceChildren(),this.build()}destroyCharts(){this.equityChart?.destroy(),this.drawdownChart?.destroy(),this.heatmap?.destroy(),this.equityChart=null,this.drawdownChart=null,this.heatmap=null}destroy(){this.destroyCharts(),this.root.remove()}};Object.defineProperty(exports,`AlertManager`,{enumerable:!0,get:function(){return n.AlertManager}}),Object.defineProperty(exports,`Animator`,{enumerable:!0,get:function(){return n.Animator}}),exports.BarChart=O,Object.defineProperty(exports,`BarCountdown`,{enumerable:!0,get:function(){return n.BarCountdown}}),Object.defineProperty(exports,`BinanceAdapter`,{enumerable:!0,get:function(){return n.BinanceAdapter}}),Object.defineProperty(exports,`BybitAdapter`,{enumerable:!0,get:function(){return n.BybitAdapter}}),Object.defineProperty(exports,`CANDLE_PATTERNS`,{enumerable:!0,get:function(){return n.CANDLE_PATTERNS}}),Object.defineProperty(exports,`CHART_STYLE_KEYS`,{enumerable:!0,get:function(){return t.CHART_STYLE_KEYS}}),exports.CORRECTABLE_BARS=a,exports.CalendarChart=M,exports.Chart=e.c,exports.ChartGrid=v,Object.defineProperty(exports,`ChartLegend`,{enumerable:!0,get:function(){return n.ChartLegend}}),Object.defineProperty(exports,`ChartStateManager`,{enumerable:!0,get:function(){return n.ChartStateManager}}),Object.defineProperty(exports,`CoinbaseAdapter`,{enumerable:!0,get:function(){return n.CoinbaseAdapter}}),Object.defineProperty(exports,`CompareRenderer`,{enumerable:!0,get:function(){return n.CompareRenderer}}),exports.CounterClockChart=F,Object.defineProperty(exports,`CrosshairTooltip`,{enumerable:!0,get:function(){return n.CrosshairTooltip}}),Object.defineProperty(exports,`CurrentPriceLine`,{enumerable:!0,get:function(){return n.CurrentPriceLine}}),Object.defineProperty(exports,`DARK_PRICE_LIMITS`,{enumerable:!0,get:function(){return t.DARK_PRICE_LIMITS}}),Object.defineProperty(exports,`DARK_TERMINAL`,{enumerable:!0,get:function(){return t.DARK_TERMINAL}}),Object.defineProperty(exports,`DARK_THEME`,{enumerable:!0,get:function(){return t.DARK_THEME}}),Object.defineProperty(exports,`DEFAULT_DRAWING_STYLE`,{enumerable:!0,get:function(){return t.DEFAULT_DRAWING_STYLE}}),Object.defineProperty(exports,`DEFAULT_FONT_FAMILY`,{enumerable:!0,get:function(){return t.DEFAULT_FONT_FAMILY}}),exports.DEFAULT_HISTORY_PAGE_SIZE=e.C,Object.defineProperty(exports,`DEFAULT_LEGEND_CONFIG`,{enumerable:!0,get:function(){return n.DEFAULT_LEGEND_CONFIG}}),Object.defineProperty(exports,`DEFAULT_MAX_WEBGL_CHARTS`,{enumerable:!0,get:function(){return n.DEFAULT_MAX_WEBGL_CHARTS}}),Object.defineProperty(exports,`DEFAULT_RECONNECT`,{enumerable:!0,get:function(){return t.DEFAULT_RECONNECT}}),Object.defineProperty(exports,`DEFAULT_SESSION_HOURS`,{enumerable:!0,get:function(){return n.DEFAULT_SESSION_HOURS}}),Object.defineProperty(exports,`DEFAULT_SIGNAL_STYLE`,{enumerable:!0,get:function(){return t.DEFAULT_SIGNAL_STYLE}}),Object.defineProperty(exports,`DEFAULT_STREAM_CONFIG`,{enumerable:!0,get:function(){return t.DEFAULT_STREAM_CONFIG}}),Object.defineProperty(exports,`DEFAULT_TIMEFRAME_FAVORITES`,{enumerable:!0,get:function(){return t.DEFAULT_TIMEFRAME_FAVORITES}}),Object.defineProperty(exports,`DEFAULT_TRADE_ZONE_STYLE`,{enumerable:!0,get:function(){return t.DEFAULT_TRADE_ZONE_STYLE}}),Object.defineProperty(exports,`DEFAULT_TRADING_CONFIG`,{enumerable:!0,get:function(){return t.DEFAULT_TRADING_CONFIG}}),Object.defineProperty(exports,`DataExporter`,{enumerable:!0,get:function(){return n.DataExporter}}),exports.DataManager=e.T,exports.DepthChart=b,exports.DonutChart=k,exports.DragDropImporter=e.o,Object.defineProperty(exports,`DrawingBase`,{enumerable:!0,get:function(){return n.DrawingBase}}),exports.EXCHANGE_TIMEZONE=e.l,exports.EXCHANGE_TIME_ZONE=e.u,Object.defineProperty(exports,`Easing`,{enumerable:!0,get:function(){return n.Easing}}),exports.EquityCurveChart=x,exports.GaugeChart=E,exports.HISTORY_RETRY_MS=e.w,Object.defineProperty(exports,`HNX_SESSIONS`,{enumerable:!0,get:function(){return t.HNX_SESSIONS}}),Object.defineProperty(exports,`HOSE_SESSIONS`,{enumerable:!0,get:function(){return t.HOSE_SESSIONS}}),exports.HeatmapChart=S,exports.HistogramChart=j,Object.defineProperty(exports,`INDICATOR_CATEGORIES`,{enumerable:!0,get:function(){return n.INDICATOR_CATEGORIES}}),Object.defineProperty(exports,`IndicatorBase`,{enumerable:!0,get:function(){return n.IndicatorBase}}),Object.defineProperty(exports,`IndicatorValueMap`,{enumerable:!0,get:function(){return n.IndicatorValueMap}}),Object.defineProperty(exports,`KEPT_BUCKETS`,{enumerable:!0,get:function(){return n.KEPT_BUCKETS}}),Object.defineProperty(exports,`KRX_SESSIONS`,{enumerable:!0,get:function(){return t.KRX_SESSIONS}}),Object.defineProperty(exports,`KR_COLORS`,{enumerable:!0,get:function(){return t.KR_COLORS}}),Object.defineProperty(exports,`KeyboardHandler`,{enumerable:!0,get:function(){return n.KeyboardHandler}}),Object.defineProperty(exports,`KrakenAdapter`,{enumerable:!0,get:function(){return n.KrakenAdapter}}),Object.defineProperty(exports,`LIGHT_PRICE_LIMITS`,{enumerable:!0,get:function(){return t.LIGHT_PRICE_LIMITS}}),Object.defineProperty(exports,`LIGHT_THEME`,{enumerable:!0,get:function(){return t.LIGHT_THEME}}),exports.LayoutManager=e.x,exports.LayoutSession=e.t,Object.defineProperty(exports,`MARKET_CRYPTO`,{enumerable:!0,get:function(){return t.MARKET_CRYPTO}}),Object.defineProperty(exports,`MARKET_HNX`,{enumerable:!0,get:function(){return t.MARKET_HNX}}),Object.defineProperty(exports,`MARKET_HOSE`,{enumerable:!0,get:function(){return t.MARKET_HOSE}}),Object.defineProperty(exports,`MARKET_HOSE_ETF`,{enumerable:!0,get:function(){return t.MARKET_HOSE_ETF}}),Object.defineProperty(exports,`MARKET_KRX`,{enumerable:!0,get:function(){return t.MARKET_KRX}}),Object.defineProperty(exports,`MARKET_NXT`,{enumerable:!0,get:function(){return t.MARKET_NXT}}),Object.defineProperty(exports,`MARKET_NYSE`,{enumerable:!0,get:function(){return t.MARKET_NYSE}}),Object.defineProperty(exports,`MARKET_UPBIT_KRW`,{enumerable:!0,get:function(){return t.MARKET_UPBIT_KRW}}),Object.defineProperty(exports,`MARKET_UPCOM`,{enumerable:!0,get:function(){return t.MARKET_UPCOM}}),Object.defineProperty(exports,`MARKET_VN30F`,{enumerable:!0,get:function(){return t.MARKET_VN30F}}),Object.defineProperty(exports,`MAX_ALERT_BARS`,{enumerable:!0,get:function(){return n.MAX_ALERT_BARS}}),exports.MAX_LAYOUT_NAME=e.n,Object.defineProperty(exports,`MIN_ALERT_BARS`,{enumerable:!0,get:function(){return n.MIN_ALERT_BARS}}),Object.defineProperty(exports,`MS_TIME_THRESHOLD`,{enumerable:!0,get:function(){return t.MS_TIME_THRESHOLD}}),Object.defineProperty(exports,`ManualFeed`,{enumerable:!0,get:function(){return n.ManualFeed}}),exports.MatrixChart=P,Object.defineProperty(exports,`MockAdapter`,{enumerable:!0,get:function(){return n.MockAdapter}}),Object.defineProperty(exports,`NXT_SESSIONS`,{enumerable:!0,get:function(){return t.NXT_SESSIONS}}),exports.PLUGIN_API_VERSION=e.v,Object.defineProperty(exports,`PRICE_SOURCES`,{enumerable:!0,get:function(){return t.PRICE_SOURCES}}),Object.defineProperty(exports,`PaperExecutionAdapter`,{enumerable:!0,get:function(){return n.PaperExecutionAdapter}}),exports.PerformanceDashboard=G,exports.PluginManager=e.p,Object.defineProperty(exports,`PollingAdapter`,{enumerable:!0,get:function(){return n.PollingAdapter}}),Object.defineProperty(exports,`RANGE_PRESETS`,{enumerable:!0,get:function(){return n.RANGE_PRESETS}}),Object.defineProperty(exports,`ReconnectManager`,{enumerable:!0,get:function(){return n.ReconnectManager}}),Object.defineProperty(exports,`ReplayController`,{enumerable:!0,get:function(){return n.ReplayController}}),Object.defineProperty(exports,`ReplayManager`,{enumerable:!0,get:function(){return n.ReplayManager}}),Object.defineProperty(exports,`ResamplingAdapter`,{enumerable:!0,get:function(){return n.ResamplingAdapter}}),Object.defineProperty(exports,`ReshapeMemo`,{enumerable:!0,get:function(){return n.ReshapeMemo}}),Object.defineProperty(exports,`SANS_FONT_FAMILY`,{enumerable:!0,get:function(){return t.SANS_FONT_FAMILY}}),exports.ScatterChart=A,Object.defineProperty(exports,`Screenshot`,{enumerable:!0,get:function(){return n.Screenshot}}),Object.defineProperty(exports,`SessionBreaks`,{enumerable:!0,get:function(){return n.SessionBreaks}}),Object.defineProperty(exports,`SessionShading`,{enumerable:!0,get:function(){return n.SessionShading}}),Object.defineProperty(exports,`SignalMarkerManager`,{enumerable:!0,get:function(){return n.SignalMarkerManager}}),exports.SparklineChart=y,Object.defineProperty(exports,`StreamManager`,{enumerable:!0,get:function(){return n.StreamManager}}),Object.defineProperty(exports,`TC_PALETTE`,{enumerable:!0,get:function(){return t.TC_PALETTE}}),Object.defineProperty(exports,`TC_SERIES_COLORS`,{enumerable:!0,get:function(){return t.TC_SERIES_COLORS}}),Object.defineProperty(exports,`TIMEFRAMES_CRYPTO`,{enumerable:!0,get:function(){return t.TIMEFRAMES_CRYPTO}}),Object.defineProperty(exports,`TIMEFRAMES_FOREX`,{enumerable:!0,get:function(){return t.TIMEFRAMES_FOREX}}),Object.defineProperty(exports,`TIMEFRAMES_STOCK`,{enumerable:!0,get:function(){return t.TIMEFRAMES_STOCK}}),exports.ThemeManager=e.S,Object.defineProperty(exports,`TickAggregator`,{enumerable:!0,get:function(){return n.TickAggregator}}),Object.defineProperty(exports,`TickBarAdapter`,{enumerable:!0,get:function(){return n.TickBarAdapter}}),Object.defineProperty(exports,`TickBarBuilder`,{enumerable:!0,get:function(){return n.TickBarBuilder}}),Object.defineProperty(exports,`TradeZoneManager`,{enumerable:!0,get:function(){return n.TradeZoneManager}}),Object.defineProperty(exports,`UPCOM_SESSIONS`,{enumerable:!0,get:function(){return t.UPCOM_SESSIONS}}),Object.defineProperty(exports,`UndoRedoManager`,{enumerable:!0,get:function(){return n.UndoRedoManager}}),Object.defineProperty(exports,`UpbitAdapter`,{enumerable:!0,get:function(){return n.UpbitAdapter}}),Object.defineProperty(exports,`VN30F_SESSIONS`,{enumerable:!0,get:function(){return t.VN30F_SESSIONS}}),Object.defineProperty(exports,`VN_COLORS`,{enumerable:!0,get:function(){return t.VN_COLORS}}),Object.defineProperty(exports,`VOLUME_ALPHA`,{enumerable:!0,get:function(){return t.VOLUME_ALPHA}}),Object.defineProperty(exports,`VolumeRenderer`,{enumerable:!0,get:function(){return n.VolumeRenderer}}),exports.WaterfallChart=C,Object.defineProperty(exports,`Watermark`,{enumerable:!0,get:function(){return n.Watermark}}),Object.defineProperty(exports,`WebSocketAdapter`,{enumerable:!0,get:function(){return n.WebSocketAdapter}}),Object.defineProperty(exports,`adapterFromFeed`,{enumerable:!0,get:function(){return n.adapterFromFeed}}),Object.defineProperty(exports,`axisTimes`,{enumerable:!0,get:function(){return n.axisTimes}}),Object.defineProperty(exports,`barIndexToX`,{enumerable:!0,get:function(){return n.barIndexToX}}),Object.defineProperty(exports,`barTimeUnit`,{enumerable:!0,get:function(){return t.barTimeUnit}}),Object.defineProperty(exports,`barsAreDaily`,{enumerable:!0,get:function(){return t.barsAreDaily}}),exports.cleanLayoutName=e.r,exports.clearGlobalPlugins=e.m,exports.computeDrawdownCurve=R,exports.computeMonthlyReturns=z,Object.defineProperty(exports,`computePriceLimits`,{enumerable:!0,get:function(){return t.computePriceLimits}}),Object.defineProperty(exports,`contrastRatio`,{enumerable:!0,get:function(){return t.contrastRatio}}),Object.defineProperty(exports,`correlationMatrix`,{enumerable:!0,get:function(){return n.correlationMatrix}}),Object.defineProperty(exports,`counterClockPhase`,{enumerable:!0,get:function(){return n.counterClockPhase}}),Object.defineProperty(exports,`counterClockPoints`,{enumerable:!0,get:function(){return n.counterClockPoints}}),Object.defineProperty(exports,`createMarketTheme`,{enumerable:!0,get:function(){return t.createMarketTheme}}),Object.defineProperty(exports,`createVNTheme`,{enumerable:!0,get:function(){return t.createVNTheme}}),Object.defineProperty(exports,`describeInputs`,{enumerable:!0,get:function(){return n.describeInputs}}),Object.defineProperty(exports,`detectCandlePatterns`,{enumerable:!0,get:function(){return n.detectCandlePatterns}}),exports.feedBars=h,Object.defineProperty(exports,`feedFromAdapter`,{enumerable:!0,get:function(){return n.feedFromAdapter}}),Object.defineProperty(exports,`formatFraction`,{enumerable:!0,get:function(){return t.formatFraction}}),Object.defineProperty(exports,`formatNumber`,{enumerable:!0,get:function(){return t.formatNumber}}),Object.defineProperty(exports,`formatTooltipTime`,{enumerable:!0,get:function(){return n.formatTooltipTime}}),Object.defineProperty(exports,`formatVND`,{enumerable:!0,get:function(){return t.formatVND}}),Object.defineProperty(exports,`formatVolumeLoc`,{enumerable:!0,get:function(){return t.formatVolumeLoc}}),Object.defineProperty(exports,`fractionTick`,{enumerable:!0,get:function(){return t.fractionTick}}),Object.defineProperty(exports,`getCurrentSession`,{enumerable:!0,get:function(){return t.getCurrentSession}}),exports.getGlobalPlugins=e.h,Object.defineProperty(exports,`getLocale`,{enumerable:!0,get:function(){return t.getLocale}}),Object.defineProperty(exports,`histogramBins`,{enumerable:!0,get:function(){return n.histogramBins}}),Object.defineProperty(exports,`indicatorCategory`,{enumerable:!0,get:function(){return n.indicatorCategory}}),Object.defineProperty(exports,`indicatorSource`,{enumerable:!0,get:function(){return t.indicatorSource}}),Object.defineProperty(exports,`inkOn`,{enumerable:!0,get:function(){return t.inkOn}}),Object.defineProperty(exports,`isDataFeed`,{enumerable:!0,get:function(){return n.isDataFeed}}),Object.defineProperty(exports,`isPriceLevelAlert`,{enumerable:!0,get:function(){return n.isPriceLevelAlert}}),Object.defineProperty(exports,`isPriceSource`,{enumerable:!0,get:function(){return t.isPriceSource}}),Object.defineProperty(exports,`isTimeFrame`,{enumerable:!0,get:function(){return t.isTimeFrame}}),Object.defineProperty(exports,`isValidTimeZone`,{enumerable:!0,get:function(){return t.isValidTimeZone}}),exports.localStorageLayouts=e.i,Object.defineProperty(exports,`lttbDownsample`,{enumerable:!0,get:function(){return n.lttbDownsample}}),Object.defineProperty(exports,`lttbVisibleIndices`,{enumerable:!0,get:function(){return n.lttbVisibleIndices}}),Object.defineProperty(exports,`marketStatus`,{enumerable:!0,get:function(){return t.marketStatus}}),exports.memoryLayouts=e.a,Object.defineProperty(exports,`niceScale`,{enumerable:!0,get:function(){return n.niceScale}}),Object.defineProperty(exports,`normalizeBar`,{enumerable:!0,get:function(){return t.normalizeBar}}),Object.defineProperty(exports,`normalizeBarTime`,{enumerable:!0,get:function(){return t.normalizeBarTime}}),Object.defineProperty(exports,`offsetAt`,{enumerable:!0,get:function(){return t.offsetAt}}),exports.overlayScale=g,exports.overlaysForLayer=e.y,Object.defineProperty(exports,`parseIndicatorSource`,{enumerable:!0,get:function(){return t.parseIndicatorSource}}),exports.parseOHLCV=e.s,Object.defineProperty(exports,`parseTimeframe`,{enumerable:!0,get:function(){return t.parseTimeframe}}),Object.defineProperty(exports,`pickBaseTimeframe`,{enumerable:!0,get:function(){return t.pickBaseTimeframe}}),exports.pluginKey=e.b,Object.defineProperty(exports,`priceFormatterFor`,{enumerable:!0,get:function(){return t.priceFormatterFor}}),Object.defineProperty(exports,`priceStepAt`,{enumerable:!0,get:function(){return t.priceStepAt}}),Object.defineProperty(exports,`priceToY`,{enumerable:!0,get:function(){return n.priceToY}}),Object.defineProperty(exports,`priceToYMapper`,{enumerable:!0,get:function(){return n.priceToYMapper}}),Object.defineProperty(exports,`rangePresetStart`,{enumerable:!0,get:function(){return n.rangePresetStart}}),Object.defineProperty(exports,`rankSymbols`,{enumerable:!0,get:function(){return t.rankSymbols}}),Object.defineProperty(exports,`readNews`,{enumerable:!0,get:function(){return t.readNews}}),Object.defineProperty(exports,`readQuote`,{enumerable:!0,get:function(){return t.readQuote}}),Object.defineProperty(exports,`readableOn`,{enumerable:!0,get:function(){return t.readableOn}}),Object.defineProperty(exports,`registerLocale`,{enumerable:!0,get:function(){return t.registerLocale}}),exports.registerPlugin=e.g,Object.defineProperty(exports,`resampleBars`,{enumerable:!0,get:function(){return t.resampleBars}}),Object.defineProperty(exports,`roundToPriceStep`,{enumerable:!0,get:function(){return t.roundToPriceStep}}),Object.defineProperty(exports,`scaleMarketPrices`,{enumerable:!0,get:function(){return t.scaleMarketPrices}}),exports.selectKeyStats=U,Object.defineProperty(exports,`servesTimeframe`,{enumerable:!0,get:function(){return n.servesTimeframe}}),Object.defineProperty(exports,`setLocale`,{enumerable:!0,get:function(){return t.setLocale}}),Object.defineProperty(exports,`setMaxWebGLCharts`,{enumerable:!0,get:function(){return n.setMaxWebGLCharts}}),Object.defineProperty(exports,`sourcePrice`,{enumerable:!0,get:function(){return t.sourcePrice}}),Object.defineProperty(exports,`stepDecimals`,{enumerable:!0,get:function(){return t.stepDecimals}}),Object.defineProperty(exports,`symbolTimeZone`,{enumerable:!0,get:function(){return t.symbolTimeZone}}),exports.syncIndicators=i,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t.t}}),Object.defineProperty(exports,`tickBarCount`,{enumerable:!0,get:function(){return t.tickBarCount}}),Object.defineProperty(exports,`timeToX`,{enumerable:!0,get:function(){return n.timeToX}}),Object.defineProperty(exports,`timeframeBucketStart`,{enumerable:!0,get:function(){return t.timeframeBucketStart}}),Object.defineProperty(exports,`timeframeToMs`,{enumerable:!0,get:function(){return t.timeframeToMs}}),Object.defineProperty(exports,`timestampToBarIndex`,{enumerable:!0,get:function(){return n.timestampToBarIndex}}),exports.toEquityPoints=L,Object.defineProperty(exports,`toHeikinAshi`,{enumerable:!0,get:function(){return n.toHeikinAshi}}),Object.defineProperty(exports,`toKagi`,{enumerable:!0,get:function(){return n.toKagi}}),Object.defineProperty(exports,`toLineBreak`,{enumerable:!0,get:function(){return n.toLineBreak}}),Object.defineProperty(exports,`toPointAndFigure`,{enumerable:!0,get:function(){return n.toPointAndFigure}}),Object.defineProperty(exports,`toRangeBars`,{enumerable:!0,get:function(){return n.toRangeBars}}),Object.defineProperty(exports,`toRenko`,{enumerable:!0,get:function(){return n.toRenko}}),exports.unregisterPlugin=e._,Object.defineProperty(exports,`usesKoreanUnits`,{enumerable:!0,get:function(){return t.usesKoreanUnits}}),Object.defineProperty(exports,`vn30fContracts`,{enumerable:!0,get:function(){return t.vn30fContracts}}),Object.defineProperty(exports,`vn30fLastTradingDay`,{enumerable:!0,get:function(){return t.vn30fLastTradingDay}}),Object.defineProperty(exports,`volumeColor`,{enumerable:!0,get:function(){return t.volumeColor}}),Object.defineProperty(exports,`wallToUtc`,{enumerable:!0,get:function(){return t.wallToUtc}}),Object.defineProperty(exports,`withResampling`,{enumerable:!0,get:function(){return n.withResampling}}),Object.defineProperty(exports,`withTickBars`,{enumerable:!0,get:function(){return n.withTickBars}}),Object.defineProperty(exports,`xToBarIndex`,{enumerable:!0,get:function(){return n.xToBarIndex}}),Object.defineProperty(exports,`xToTime`,{enumerable:!0,get:function(){return n.xToTime}}),Object.defineProperty(exports,`yToPrice`,{enumerable:!0,get:function(){return n.yToPrice}}),Object.defineProperty(exports,`zoneOffsetMinutes`,{enumerable:!0,get:function(){return t.zoneOffsetMinutes}});
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./LayoutSession-Di5_gC6i.cjs`);let t=require(`@tradecanvas/commons`),n=require(`@tradecanvas/core`);function r(e){let{id:t,params:n={},position:r=null}=typeof e==`string`?{id:e}:e;return JSON.stringify([t,Object.keys(n).sort().map(e=>[e,n[e]]),r])}function i(e,t,n){let i=new Map,a=t.map(e=>{let t=r(e),n=i.get(t)??0;return i.set(t,n+1),{spec:e,key:`${t}#${n}`}}),o=new Set(a.map(e=>e.key));for(let[t,r]of[...n])o.has(t)||(e.removeIndicator(r),n.delete(t));for(let{spec:t,key:r}of a){if(n.has(r))continue;let i=typeof t==`string`?e.addIndicator(t):t.position===void 0?e.addIndicator(t.id,t.params??{}):e.addIndicator(t.id,t.params??{},t.position);i&&n.set(r,i)}}var a=3,o=e=>({time:e.time,open:e.open,high:e.high,low:e.low,close:e.close,volume:e.volume}),s=e=>e.length>0?e[e.length-1]:null;function c(t,n,r){for(let i=0;i<r;i++)if(!e.D(t[i],n[i]))return!1;return!0}function l(e,t){if(e.isReplayActive())return!0;let n=s(e.getData());return t.inReplay?n?.time===t.last?.time:n===t.shownBar?n?.time===t.last?.time||!e.isExtendedHoursVisible():!1}function u(t,n,r){let i=[];for(let a=0;a<n.length;a++){let s=t[r+a];if(!e.D(s,n[a])){if(s.time!==n[a].time||!e.E(s))return null;i.push(o(s))}}return i}function d(e,t){if(t.length===0)return!0;if(!e.updateBar)return!1;for(let n of t)if(!e.updateBar(n))return!1;return!0}function f(e){return e.slice(Math.max(1,e.length-1-3),-1).map(o)}function p(t,n){let r=[];for(let i=n;i<t.length;i++){if(!e.E(t[i])||!(t[i].time>t[i-1].time))return null;r.push(o(t[i]))}return r}function m(t,n,r){let i=r.length;if(i===0||!r.last||!e.E(r.last)||n.length<i||!l(t,r))return!1;let a=r.recent??[],s=i-1-a.length;if(n!==r.source&&(r.source.length!==i||!c(r.source,n,s)))return!1;let f=n[i-1];if(f.time!==r.last.time||!e.E(f))return!1;let m=u(n,a,s),h=p(n,i);return!m||!h||!d(t,m)?!1:(e.D(f,r.last)||t.updateLastBar(o(f)),h.length===1?t.appendBar(h[0]):h.length>1&&t.appendBars(h),!0)}function h(e,t,n){(!n||!m(e,t,n))&&e.setData(t.map(o));let r=t.length>0?o(t[t.length-1]):null,i=e.isReplayActive();return{source:t,length:t.length,last:r,recent:f(t),shownBar:i?null:s(e.getData()),inReplay:i}}function g(e){let{viewport:t,data:r}=e,i=(0,n.priceToYMapper)(t),a=r.length-1,o=Math.max(0,Math.floor(t.visibleRange.from)),s=Math.min(a,Math.ceil(t.visibleRange.to)),c=e=>r.length>0?(0,n.timestampToBarIndex)(e,r):e;return{timeToX:e=>(0,n.barIndexToX)(c(e),t),xToTime:e=>{let i=(0,n.xToBarIndex)(e,t);return r.length>0?(0,n.barIndexToTime)(i,r):i},indexToX:e=>(0,n.barIndexToX)(e,t),xToIndex:e=>(0,n.xToBarIndex)(e,t),priceToY:i,yToPrice:e=>(0,n.yToPrice)(e,t),barWidth:t.barWidth,visible:s<o?{from:0,to:-1}:{from:o,to:s}}}var _={"1x1":{cols:1,rows:1},"1x2":{cols:2,rows:1},"2x1":{cols:1,rows:2},"2x2":{cols:2,rows:2},"1x3":{cols:3,rows:1},"3x1":{cols:1,rows:3},"2x3":{cols:3,rows:2},"3x2":{cols:2,rows:3}},v=class{root;cells=[];layout;options;destroyed=!1;syncing=!1;constructor(e,t={}){this.options=t,this.layout=t.layout??`2x2`,this.root=document.createElement(`div`),this.root.style.cssText=`display:grid;width:100%;height:100%;overflow:hidden;`,e.appendChild(this.root),this.applyLayout(),this.createCells()}applyLayout(){let{cols:e,rows:t}=_[this.layout],n=this.options.gap??1;this.root.style.gridTemplateColumns=`repeat(${e}, 1fr)`,this.root.style.gridTemplateRows=`repeat(${t}, 1fr)`,this.root.style.gap=`${n}px`}createCells(){let{cols:e,rows:t}=_[this.layout],n=e*t;for(let e=0;e<n;e++)this.cells.push(this.createCell(e))}createCell(t){let n=this.options.cells?.[t]??{},r=document.createElement(`div`);r.style.cssText=`position:relative;overflow:hidden;min-width:0;min-height:0;`,this.root.appendChild(r);let i=new e.c(r,{chartType:`candlestick`,autoScale:!0,features:{crosshair:!0,keyboard:!0,volume:!0,legend:!0,priceAxis:!0,timeAxis:!0,grid:!0},...this.options.chartOptions,...n.chartOptions,theme:this.options.theme}),a={container:r,chart:i,symbol:n.symbol??`Chart ${t+1}`,timeframe:n.timeframe??`5m`};return this.options.syncCrosshair!==!1&&(i.on(`crosshairMove`,e=>{let t=e.payload.bar?.time;if(t!==void 0)for(let e of this.cells)e.chart!==i&&e.chart.setCrosshairTime(t)}),i.on(`crosshairLeave`,()=>{for(let e of this.cells)e.chart!==i&&e.chart.setCrosshairTime(null)})),this.options.syncTimeAxis!==!1&&i.on(`visibleRangeChange`,e=>{if(this.syncing)return;this.syncing=!0;let{from:t,to:n}=e.payload,r=i.getData();if(r.length>0&&t>=0&&n<r.length){let e=r[t]?.time,a=r[n]?.time;if(e&&a)for(let t of this.cells)t.chart!==i&&t.chart.setVisibleRange(e,a)}this.syncing=!1}),a}setLayout(e){if(e===this.layout)return;let t=this.cells.length,{cols:n,rows:r}=_[e],i=n*r;if(i<t)for(let e=t-1;e>=i;e--){let t=this.cells[e];t.chart.destroy(),t.container.remove(),this.cells.pop()}this.layout=e,this.applyLayout();for(let e=t;e<i;e++)this.cells.push(this.createCell(e))}getChart(e){return this.cells[e]?.chart??null}getCharts(){return this.cells.map(e=>e.chart)}getCellCount(){return this.cells.length}setData(e,t){this.cells[e]?.chart.setData(t)}setAllData(e){for(let t of this.cells)t.chart.setData(e)}async connectCell(e,t){let n=this.cells[e];n&&(n.symbol=t.symbol,n.timeframe=t.timeframe,await n.chart.connect(t))}async connectAll(e,t,r,i=500){let a=[];for(let o=0;o<this.cells.length&&o<t.length;o++)a.push(this.connectCell(o,{...typeof e==`function`?{adapter:e(t[o],o)}:(0,n.isDataFeed)(e)?{feed:e}:{adapter:e},symbol:t[o],timeframe:r,historyLimit:i}));await Promise.all(a)}setTheme(e){for(let t of this.cells)t.chart.setTheme(e)}destroy(){if(!this.destroyed){this.destroyed=!0;for(let e of this.cells)e.chart.destroy(),e.container.remove();this.cells=[],this.root.remove()}}},y=class extends n.BaseFinanceChart{options;constructor(e,t){super(e,t.theme),this.options=t,this.requestRender()}renderChart(e,t,r,i){(0,n.renderSparkline)(e,t,r,this.options,i)}update(e){this.options={...this.options,data:e},this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}},b=class extends n.BaseFinanceChart{options;crosshair=null;constructor(e,t){super(e,t.theme),this.options=t,t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),this.requestRender()}renderChart(e,t,r,i){let a=this.crosshair?.getPosition()??null;(0,n.renderDepthChart)(e,t,r,this.options,i,a)}update(e){this.options={...this.options,data:e},this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}destroy(){this.crosshair?.destroy(),super.destroy()}},x=class extends n.BaseFinanceChart{options;crosshair=null;constructor(e,t){super(e,t.theme),this.options=t,t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),this.requestRender()}renderChart(e,t,r,i){let a=this.crosshair?.getPosition()??null;(0,n.renderEquityCurve)(e,t,r,this.options,i,a)}update(e,t){this.options={...this.options,data:e},t!==void 0&&(this.options={...this.options,benchmark:t}),this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}destroy(){this.crosshair?.destroy(),super.destroy()}},S=class extends n.BaseFinanceChart{options;crosshair=null;cachedRects=[];cachedGroups=[];currentData=[];lastLayoutWidth=0;lastLayoutHeight=0;handleClick=null;constructor(e,t){super(e,t.theme),this.options=t,this.currentData=t.data??[],t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),t.onCellClick&&(this.handleClick=e=>{let t=this.canvas.getBoundingClientRect(),n=e.clientX-t.left,r=e.clientY-t.top;this.onCanvasClick(n,r)},this.canvas.addEventListener(`click`,this.handleClick)),this.applyLabel(),this.recomputeLayout(),this.requestRender()}applyLabel(){let e=new Set(this.currentData.map(e=>e.group).filter(Boolean)).size,t=this.options.grouped&&e>0?`Market map of ${this.currentData.length} cells in ${e} groups`:`Heatmap of ${this.currentData.length} cells`;this.setLabel(this.options.ariaLabel??t)}recomputeLayout(){let e={x:0,y:0,width:this.width,height:this.height},t=this.options.cellPadding??2;if(this.lastLayoutWidth=this.width,this.lastLayoutHeight=this.height,this.cachedGroups=[],this.options.grouped){let{groups:r,cells:i}=(0,n.layoutGroupedTreemap)(this.currentData.map(e=>({id:e.id,weight:e.weight??(Math.abs(e.value)||1),group:e.group,value:e.value})),e,t,n.GROUP_HEADER);this.cachedRects=i,this.cachedGroups=r}else if(this.options.weighted){let r=this.currentData.map(e=>({id:e.id,weight:e.weight??(Math.abs(e.value)||1)}));this.cachedRects=(0,n.layoutSquarifiedTreemap)(r,e,t)}else this.cachedRects=(0,n.layoutUniformGrid)(this.currentData.map(e=>({id:e.id})),e,t)}onCanvasClick(e,t){if(this.options.onCellClick)for(let n of this.cachedRects){let r=n.rect;if(e>=r.x&&e<=r.x+r.width&&t>=r.y&&t<=r.y+r.height){let e=this.currentData.find(e=>e.id===n.id);e&&this.options.onCellClick(e);return}}}renderChart(e,t,r,i){(t!==this.lastLayoutWidth||r!==this.lastLayoutHeight)&&this.recomputeLayout();let a=this.crosshair?.getPosition()??null;(0,n.renderHeatmap)(e,t,r,this.currentData,this.cachedRects,this.options,i,a,this.cachedGroups)}update(e){this.currentData=e,this.options={...this.options,data:e},this.applyLabel(),this.recomputeLayout(),this.requestRender()}setOptions(e){this.options={...this.options,...e},e.data&&(this.currentData=e.data),this.applyLabel(),this.recomputeLayout(),this.requestRender()}destroy(){this.crosshair?.destroy(),this.handleClick&&this.canvas.removeEventListener(`click`,this.handleClick),super.destroy()}},C=class extends n.BaseFinanceChart{options;crosshair=null;constructor(e,t){super(e,t.theme),this.options=t,t.crosshair!==!1&&(this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender())),this.requestRender()}renderChart(e,t,r,i){let a=this.crosshair?.getPosition()??null;(0,n.renderWaterfall)(e,t,r,this.options,i,a)}update(e){this.options={...this.options,data:e},this.requestRender()}setOptions(e){this.options={...this.options,...e},this.requestRender()}destroy(){this.crosshair?.destroy(),super.destroy()}},w=500;function T(e){let t=1-e;return 1-t*t*t}var E=class extends n.BaseFinanceChart{options;currentValue;targetValue;animationStart=null;animationFrom=0;animationFrameId=null;constructor(e,t){super(e,t.theme),this.options=t,this.currentValue=t.value,this.targetValue=t.value,this.requestRender()}renderChart(e,t,r,i){(0,n.renderGauge)(e,t,r,this.options,i,this.currentValue)}setValue(e){if(this.options.animate===!1){this.cancelAnimation(),this.currentValue=e,this.targetValue=e,this.options={...this.options,value:e},this.requestRender();return}this.targetValue=e,this.animationFrom=this.currentValue,this.animationStart=performance.now(),this.options={...this.options,value:e},this.startAnimationLoop()}setOptions(e){let t={...this.options,...e};if(e.value!==void 0&&e.value!==this.targetValue){this.options=t,this.setValue(e.value);return}this.options=t,this.requestRender()}startAnimationLoop(){if(this.animationFrameId!==null)return;let e=()=>{if(this.animationFrameId=null,this.animationStart===null)return;let t=this.options.animationDuration??w,n=performance.now()-this.animationStart,r=Math.min(1,n/Math.max(1,t)),i=T(r);this.currentValue=this.animationFrom+(this.targetValue-this.animationFrom)*i,this.requestRender(),r<1?this.animationFrameId=requestAnimationFrame(e):(this.currentValue=this.targetValue,this.animationStart=null)};this.animationFrameId=requestAnimationFrame(e)}cancelAnimation(){this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.animationStart=null}destroy(){this.cancelAnimation(),super.destroy()}},D=class extends n.BaseFinanceChart{options;layout=null;layoutFor=null;crosshair;onClick=e=>{let t=this.canvas.getBoundingClientRect();this.layout&&this.clickAt(this.layout,e.clientX-t.left,e.clientY-t.top)};onMove=e=>{if(!this.layout||!this.clickable())return;let t=this.canvas.getBoundingClientRect();this.canvas.style.cursor=this.hits(this.layout,e.clientX-t.left,e.clientY-t.top)?`pointer`:``};constructor(e,t){super(e,t.theme),this.options=t,this.crosshair=new n.FinanceCrosshair(this.canvas,()=>this.requestRender()),this.canvas.addEventListener(`click`,this.onClick),this.canvas.addEventListener(`pointermove`,this.onMove),this.applyLabel(),this.requestRender()}renderChart(e,t,r,i){let a=this.options.crosshair===!1?null:this.crosshair.getPosition(),o=this.layoutFor;(!this.layout||!o||o.options!==this.options||o.width!==t||o.height!==r||o.theme!==i)&&(this.layout=this.compute(t,r,i,(0,n.canvasMeasure)(e,i)),this.layoutFor={options:this.options,width:t,height:r,theme:i}),this.draw(e,t,r,i,a,this.layout)}setOptions(e){this.options={...this.options,...e},`theme`in e&&this.setTheme(e.theme??`dark`),this.applyLabel(),this.requestRender()}applyLabel(){this.setLabel(this.options.ariaLabel??this.describe())}destroy(){this.crosshair.destroy(),this.canvas.removeEventListener(`click`,this.onClick),this.canvas.removeEventListener(`pointermove`,this.onMove),super.destroy()}},O=class extends D{compute(e,t,r,i){return(0,n.computeBarLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderBarChart)(e,t,r,this.options,i,a,o)}describe(){return`Bar chart of ${this.options.series.map(e=>e.name).join(`, `)}, ${this.options.categories.length} categories`}clickable(){return this.options.onBarClick!==void 0}hits(e,t,r){return(0,n.hitBar)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.hitBar)(e,t,r);i&&this.options.onBarClick?.({category:i.category,series:i.series,value:i.value,index:i.index})}update(e,t){this.setOptions({categories:e,series:t})}},k=class extends D{compute(e,t,r,i){return(0,n.computeDonutLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderDonut)(e,t,r,this.options,i,a,o)}describe(){let e=this.options.data.filter(e=>Number.isFinite(e.value)&&e.value>0).map(e=>e.label).join(`, `);return`${(this.options.innerRadius??.6)>0?`Donut`:`Pie`} chart of ${e}`}clickable(){return this.options.onSliceClick!==void 0}hits(e,t,r){return(0,n.hitSlice)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.hitSlice)(e,t,r);i&&this.options.onSliceClick?.(i.slice)}update(e){this.setOptions({data:e})}},A=class extends D{compute(e,t,r,i){return(0,n.computeScatterLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderScatter)(e,t,r,this.options,i,a,o)}describe(){let e=this.options.series.reduce((e,t)=>e+t.points.length,0);return`Scatter chart${this.options.xLabel&&this.options.yLabel?` of ${this.options.yLabel} against ${this.options.xLabel}`:``}, ${e} points`}clickable(){return this.options.onPointClick!==void 0}hits(e,t,r){return(0,n.nearestPoint)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.nearestPoint)(e,t,r);i&&this.options.onPointClick?.(i.point,i.series)}update(e){this.setOptions({series:e})}},j=class extends D{compute(e,t,r,i){return(0,n.computeHistogramLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderHistogram)(e,t,r,this.options,i,a,o)}describe(){return`Histogram of ${this.options.values.length} values`}clickable(){return!1}hits(){return!1}clickAt(){}update(e){this.setOptions({values:e})}},M=class extends D{compute(e,t,r,i){return(0,n.computeCalendarLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderCalendar)(e,t,r,this.options,i,a,o)}describe(){let e=this.options.data.map(e=>e.date).filter(e=>/^\d{4}-\d{2}-\d{2}$/.test(e)).sort(),t=this.options.from??e[0],n=this.options.to??e[e.length-1];return t&&n?`Calendar of daily values from ${t} to ${n}`:`Calendar of daily values`}clickable(){return this.options.onDayClick!==void 0}hits(e,t,r){return(0,n.hitDay)(e,t,r)?.day!==void 0}clickAt(e,t,r){let i=(0,n.hitDay)(e,t,r)?.day;i&&this.options.onDayClick?.(i)}update(e){this.setOptions({data:e})}},N=12,P=class extends D{compute(e,t,r,i){return(0,n.computeMatrixLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderMatrix)(e,t,r,this.options,i,a,o)}describe(){let{rows:e,columns:t}=this.options;return t?e.length+t.length<=N?`Matrix of ${e.join(`, `)} by ${t.join(`, `)}`:`Matrix of ${e.length} rows by ${t.length} columns`:e.length<=N?`Matrix of ${e.join(`, `)}`:`Matrix of ${e.length} rows`}clickable(){return this.options.onCellClick!==void 0}hits(e,t,r){return(0,n.hitMatrixCell)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.hitMatrixCell)(e,t,r);i&&this.options.onCellClick?.(i.cell)}update(e){this.setOptions({values:e})}},F=class extends D{compute(e,t,r,i){return(0,n.computeCounterClockLayout)(this.options,e,t,r,i)}draw(e,t,r,i,a,o){(0,n.renderCounterClock)(e,t,r,this.options,i,a,o)}describe(){return`Counter-clock chart of price against volume, ${this.options.period??25}-bar averages`}clickable(){return this.options.onPointClick!==void 0}hits(e,t,r){return(0,n.nearestCounterClockPoint)(e,t,r)!==null}clickAt(e,t,r){let i=(0,n.nearestCounterClockPoint)(e,t,r);i&&this.options.onPointClick?.(i.point)}getPhase(){return(0,n.counterClockPhase)((0,n.counterClockPoints)(this.options.data,this.options.period??25,(0,n.shownCount)(this.options)))}update(e){this.setOptions({data:e})}},I=[`Jan`,`Feb`,`Mar`,`Apr`,`May`,`Jun`,`Jul`,`Aug`,`Sep`,`Oct`,`Nov`,`Dec`];function L(e){return e.map(e=>({time:e.time,value:e.equity}))}function R(e){let t=-1/0;return e.map(e=>{e.equity>t&&(t=e.equity);let n=t>0?(e.equity/t-1)*100:0;return{time:e.time,value:n}})}function z(e){if(e.length===0)return[];let n=[];for(let r of e){let e=(0,t.timeframeBucketStart)(r.time,`1M`),i=n[n.length-1];i&&i.key===e?i.close=r.equity:n.push({key:e,close:r.equity})}let r=e[0].equity,i=[];for(let e of n){let t=r===0?1:r,n=(e.close/t-1)*100;r=e.close;let a=new Date(e.key),o=a.getUTCFullYear(),s=a.getUTCMonth();i.push({id:`${o}-${String(s+1).padStart(2,`0`)}`,label:I[s],group:String(o),value:n})}return i}var B=100;function V(e){return`${e>0?`+`:``}${e.toFixed(2)}%`}function H(e){return e>0?`positive`:e<0?`negative`:`neutral`}function U(e){return[{label:`Total Return`,value:V(e.totalReturnPct*B),tone:H(e.totalReturnPct)},{label:`CAGR`,value:V(e.cagr*B),tone:H(e.cagr)},{label:`Sharpe`,value:e.sharpe.toFixed(2),tone:H(e.sharpe)},{label:`Sortino`,value:e.sortino.toFixed(2),tone:H(e.sortino)},{label:`Max Drawdown`,value:V(-Math.abs(e.maxDrawdownPct)*B),tone:`negative`},{label:`Win Rate`,value:`${(e.winRate*B).toFixed(1)}%`,tone:`neutral`},{label:`Profit Factor`,value:Number.isFinite(e.profitFactor)?e.profitFactor.toFixed(2):`∞`,tone:H(e.profitFactor-1)},{label:`Trades`,value:String(e.trades),tone:`neutral`}]}function W(e){return!e||e===`dark`?t.DARK_THEME:e===`light`?t.LIGHT_THEME:e}var G=class{options;theme;root;equityChart=null;drawdownChart=null;heatmap=null;constructor(e,t){this.options=t,this.theme=W(t.theme),this.root=document.createElement(`div`),this.build(),e.appendChild(this.root)}build(){let e=this.theme,{result:t,title:n,subtitle:r}=this.options,i=this.panelBackground(),a=e.grid;if(this.root.style.cssText=[`display:flex`,`flex-direction:column`,`gap:14px`,`width:100%`,`box-sizing:border-box`,`padding:16px`,`background:${e.background}`,`color:${e.text}`,`font-family:${e.font.family}`].join(`;`),n||r){let t=document.createElement(`div`);if(n){let r=document.createElement(`div`);r.textContent=n,r.style.cssText=`font-size:${e.font.sizeLarge}px;font-weight:600;letter-spacing:-0.01em;`,t.appendChild(r)}if(r){let n=document.createElement(`div`);n.textContent=r,n.style.cssText=`font-size:${e.font.sizeSmall}px;color:${e.textSecondary};margin-top:2px;`,t.appendChild(n)}this.root.appendChild(t)}this.root.appendChild(this.buildStatsStrip(U(t.metrics),i,a));let o=document.createElement(`div`);o.style.cssText=[`display:grid`,`grid-template-columns:repeat(auto-fit, minmax(280px, 1fr))`,`grid-auto-rows:220px`,`gap:14px`].join(`;`),this.root.appendChild(o);let s=this.buildPanel(`Equity Curve`,i,a);s.wrap.style.gridColumn=`1 / -1`,o.appendChild(s.wrap),this.equityChart=new x(s.body,{data:L(t.equityCurve),theme:e,lineColor:e.candleUp,fillArea:!0,crosshair:!0});let c=this.buildPanel(`Drawdown`,i,a);o.appendChild(c.wrap),this.drawdownChart=new x(c.body,{data:R(t.equityCurve),theme:e,lineColor:e.candleDown,fillArea:!0,crosshair:!0,valueFormat:e=>`${e.toFixed(1)}%`});let l=z(t.equityCurve),u=this.buildPanel(`Monthly Returns`,i,a);o.appendChild(u.wrap),this.heatmap=new S(u.body,{data:l,theme:e,showValues:!0,valueFormat:e=>`${e>=0?`+`:``}${e.toFixed(1)}`,colorScale:{negative:e.candleDown,zero:i,positive:e.candleUp}})}buildStatsStrip(e,t,n){let r=document.createElement(`div`);r.style.cssText=[`display:grid`,`grid-template-columns:repeat(auto-fit, minmax(120px, 1fr))`,`gap:10px`].join(`;`);let i=this.theme;for(let a of e){let e=document.createElement(`div`);e.style.cssText=[`background:${t}`,`border:1px solid ${n}`,`border-radius:10px`,`padding:10px 12px`,`display:flex`,`flex-direction:column`,`gap:4px`].join(`;`);let o=document.createElement(`div`);o.textContent=a.label,o.style.cssText=`font-size:${i.font.sizeSmall}px;color:${i.textSecondary};text-transform:uppercase;letter-spacing:0.04em;`;let s=document.createElement(`div`);s.textContent=a.value;let c=a.tone===`positive`?i.candleUp:a.tone===`negative`?i.candleDown:i.text;s.style.cssText=`font-size:${i.font.sizeLarge}px;font-weight:600;color:${c};font-variant-numeric:tabular-nums;`,e.appendChild(o),e.appendChild(s),r.appendChild(e)}return r}buildPanel(e,t,n){let r=this.theme,i=document.createElement(`div`);i.style.cssText=[`background:${t}`,`border:1px solid ${n}`,`border-radius:10px`,`overflow:hidden`,`display:flex`,`flex-direction:column`].join(`;`);let a=document.createElement(`div`);a.textContent=e,a.style.cssText=[`font-size:${r.font.sizeSmall}px`,`font-weight:600`,`color:${r.textSecondary}`,`padding:8px 12px`,`border-bottom:1px solid ${n}`,`text-transform:uppercase`,`letter-spacing:0.04em`].join(`;`);let o=document.createElement(`div`);return o.style.cssText=`flex:1;min-height:0;position:relative;`,i.appendChild(a),i.appendChild(o),{wrap:i,body:o}}panelBackground(){return this.theme.name===`light`?`rgba(0,0,0,0.02)`:`rgba(255,255,255,0.03)`}update(e){this.options={...this.options,result:e},this.destroyCharts(),this.root.replaceChildren(),this.build()}setTheme(e){this.theme=W(e),this.options={...this.options,theme:e},this.destroyCharts(),this.root.replaceChildren(),this.build()}destroyCharts(){this.equityChart?.destroy(),this.drawdownChart?.destroy(),this.heatmap?.destroy(),this.equityChart=null,this.drawdownChart=null,this.heatmap=null}destroy(){this.destroyCharts(),this.root.remove()}};Object.defineProperty(exports,`AlertManager`,{enumerable:!0,get:function(){return n.AlertManager}}),Object.defineProperty(exports,`Animator`,{enumerable:!0,get:function(){return n.Animator}}),exports.BarChart=O,Object.defineProperty(exports,`BarCountdown`,{enumerable:!0,get:function(){return n.BarCountdown}}),Object.defineProperty(exports,`BinanceAdapter`,{enumerable:!0,get:function(){return n.BinanceAdapter}}),Object.defineProperty(exports,`BybitAdapter`,{enumerable:!0,get:function(){return n.BybitAdapter}}),Object.defineProperty(exports,`CANDLE_PATTERNS`,{enumerable:!0,get:function(){return n.CANDLE_PATTERNS}}),Object.defineProperty(exports,`CHART_STYLE_KEYS`,{enumerable:!0,get:function(){return t.CHART_STYLE_KEYS}}),exports.CORRECTABLE_BARS=a,exports.CalendarChart=M,exports.Chart=e.c,exports.ChartGrid=v,Object.defineProperty(exports,`ChartLegend`,{enumerable:!0,get:function(){return n.ChartLegend}}),Object.defineProperty(exports,`ChartStateManager`,{enumerable:!0,get:function(){return n.ChartStateManager}}),Object.defineProperty(exports,`CoinbaseAdapter`,{enumerable:!0,get:function(){return n.CoinbaseAdapter}}),Object.defineProperty(exports,`CompareRenderer`,{enumerable:!0,get:function(){return n.CompareRenderer}}),exports.CounterClockChart=F,Object.defineProperty(exports,`CrosshairTooltip`,{enumerable:!0,get:function(){return n.CrosshairTooltip}}),Object.defineProperty(exports,`CurrentPriceLine`,{enumerable:!0,get:function(){return n.CurrentPriceLine}}),Object.defineProperty(exports,`DARK_PRICE_LIMITS`,{enumerable:!0,get:function(){return t.DARK_PRICE_LIMITS}}),Object.defineProperty(exports,`DARK_TERMINAL`,{enumerable:!0,get:function(){return t.DARK_TERMINAL}}),Object.defineProperty(exports,`DARK_THEME`,{enumerable:!0,get:function(){return t.DARK_THEME}}),Object.defineProperty(exports,`DEFAULT_DRAWING_STYLE`,{enumerable:!0,get:function(){return t.DEFAULT_DRAWING_STYLE}}),Object.defineProperty(exports,`DEFAULT_FONT_FAMILY`,{enumerable:!0,get:function(){return t.DEFAULT_FONT_FAMILY}}),exports.DEFAULT_HISTORY_PAGE_SIZE=e.C,Object.defineProperty(exports,`DEFAULT_LEGEND_CONFIG`,{enumerable:!0,get:function(){return n.DEFAULT_LEGEND_CONFIG}}),Object.defineProperty(exports,`DEFAULT_MAX_WEBGL_CHARTS`,{enumerable:!0,get:function(){return n.DEFAULT_MAX_WEBGL_CHARTS}}),Object.defineProperty(exports,`DEFAULT_RECONNECT`,{enumerable:!0,get:function(){return t.DEFAULT_RECONNECT}}),Object.defineProperty(exports,`DEFAULT_SESSION_HOURS`,{enumerable:!0,get:function(){return n.DEFAULT_SESSION_HOURS}}),Object.defineProperty(exports,`DEFAULT_SIGNAL_STYLE`,{enumerable:!0,get:function(){return t.DEFAULT_SIGNAL_STYLE}}),Object.defineProperty(exports,`DEFAULT_STREAM_CONFIG`,{enumerable:!0,get:function(){return t.DEFAULT_STREAM_CONFIG}}),Object.defineProperty(exports,`DEFAULT_TIMEFRAME_FAVORITES`,{enumerable:!0,get:function(){return t.DEFAULT_TIMEFRAME_FAVORITES}}),Object.defineProperty(exports,`DEFAULT_TRADE_ZONE_STYLE`,{enumerable:!0,get:function(){return t.DEFAULT_TRADE_ZONE_STYLE}}),Object.defineProperty(exports,`DEFAULT_TRADING_CONFIG`,{enumerable:!0,get:function(){return t.DEFAULT_TRADING_CONFIG}}),Object.defineProperty(exports,`DataExporter`,{enumerable:!0,get:function(){return n.DataExporter}}),exports.DataManager=e.T,exports.DepthChart=b,exports.DonutChart=k,exports.DragDropImporter=e.o,Object.defineProperty(exports,`DrawingBase`,{enumerable:!0,get:function(){return n.DrawingBase}}),exports.EXCHANGE_TIMEZONE=e.l,exports.EXCHANGE_TIME_ZONE=e.u,Object.defineProperty(exports,`Easing`,{enumerable:!0,get:function(){return n.Easing}}),exports.EquityCurveChart=x,exports.GaugeChart=E,exports.HISTORY_RETRY_MS=e.w,Object.defineProperty(exports,`HNX_SESSIONS`,{enumerable:!0,get:function(){return t.HNX_SESSIONS}}),Object.defineProperty(exports,`HOSE_SESSIONS`,{enumerable:!0,get:function(){return t.HOSE_SESSIONS}}),exports.HeatmapChart=S,exports.HistogramChart=j,Object.defineProperty(exports,`INDICATOR_CATEGORIES`,{enumerable:!0,get:function(){return n.INDICATOR_CATEGORIES}}),Object.defineProperty(exports,`IndicatorBase`,{enumerable:!0,get:function(){return n.IndicatorBase}}),Object.defineProperty(exports,`IndicatorValueMap`,{enumerable:!0,get:function(){return n.IndicatorValueMap}}),Object.defineProperty(exports,`KEPT_BUCKETS`,{enumerable:!0,get:function(){return n.KEPT_BUCKETS}}),Object.defineProperty(exports,`KRX_SESSIONS`,{enumerable:!0,get:function(){return t.KRX_SESSIONS}}),Object.defineProperty(exports,`KR_COLORS`,{enumerable:!0,get:function(){return t.KR_COLORS}}),Object.defineProperty(exports,`KeyboardHandler`,{enumerable:!0,get:function(){return n.KeyboardHandler}}),Object.defineProperty(exports,`KrakenAdapter`,{enumerable:!0,get:function(){return n.KrakenAdapter}}),Object.defineProperty(exports,`LIGHT_PRICE_LIMITS`,{enumerable:!0,get:function(){return t.LIGHT_PRICE_LIMITS}}),Object.defineProperty(exports,`LIGHT_THEME`,{enumerable:!0,get:function(){return t.LIGHT_THEME}}),exports.LayoutManager=e.x,exports.LayoutSession=e.t,Object.defineProperty(exports,`MARKET_CRYPTO`,{enumerable:!0,get:function(){return t.MARKET_CRYPTO}}),Object.defineProperty(exports,`MARKET_HNX`,{enumerable:!0,get:function(){return t.MARKET_HNX}}),Object.defineProperty(exports,`MARKET_HOSE`,{enumerable:!0,get:function(){return t.MARKET_HOSE}}),Object.defineProperty(exports,`MARKET_HOSE_ETF`,{enumerable:!0,get:function(){return t.MARKET_HOSE_ETF}}),Object.defineProperty(exports,`MARKET_KRX`,{enumerable:!0,get:function(){return t.MARKET_KRX}}),Object.defineProperty(exports,`MARKET_NXT`,{enumerable:!0,get:function(){return t.MARKET_NXT}}),Object.defineProperty(exports,`MARKET_NYSE`,{enumerable:!0,get:function(){return t.MARKET_NYSE}}),Object.defineProperty(exports,`MARKET_UPBIT_KRW`,{enumerable:!0,get:function(){return t.MARKET_UPBIT_KRW}}),Object.defineProperty(exports,`MARKET_UPCOM`,{enumerable:!0,get:function(){return t.MARKET_UPCOM}}),Object.defineProperty(exports,`MARKET_VN30F`,{enumerable:!0,get:function(){return t.MARKET_VN30F}}),Object.defineProperty(exports,`MAX_ALERT_BARS`,{enumerable:!0,get:function(){return n.MAX_ALERT_BARS}}),exports.MAX_LAYOUT_NAME=e.n,Object.defineProperty(exports,`MIN_ALERT_BARS`,{enumerable:!0,get:function(){return n.MIN_ALERT_BARS}}),Object.defineProperty(exports,`MS_TIME_THRESHOLD`,{enumerable:!0,get:function(){return t.MS_TIME_THRESHOLD}}),Object.defineProperty(exports,`ManualFeed`,{enumerable:!0,get:function(){return n.ManualFeed}}),exports.MatrixChart=P,Object.defineProperty(exports,`MockAdapter`,{enumerable:!0,get:function(){return n.MockAdapter}}),Object.defineProperty(exports,`NXT_SESSIONS`,{enumerable:!0,get:function(){return t.NXT_SESSIONS}}),exports.PLUGIN_API_VERSION=e.v,Object.defineProperty(exports,`PRICE_SOURCES`,{enumerable:!0,get:function(){return t.PRICE_SOURCES}}),Object.defineProperty(exports,`PaperExecutionAdapter`,{enumerable:!0,get:function(){return n.PaperExecutionAdapter}}),exports.PerformanceDashboard=G,exports.PluginManager=e.p,Object.defineProperty(exports,`PollingAdapter`,{enumerable:!0,get:function(){return n.PollingAdapter}}),Object.defineProperty(exports,`RANGE_PRESETS`,{enumerable:!0,get:function(){return n.RANGE_PRESETS}}),Object.defineProperty(exports,`ReconnectManager`,{enumerable:!0,get:function(){return n.ReconnectManager}}),Object.defineProperty(exports,`ReplayController`,{enumerable:!0,get:function(){return n.ReplayController}}),Object.defineProperty(exports,`ReplayManager`,{enumerable:!0,get:function(){return n.ReplayManager}}),Object.defineProperty(exports,`ResamplingAdapter`,{enumerable:!0,get:function(){return n.ResamplingAdapter}}),Object.defineProperty(exports,`ReshapeMemo`,{enumerable:!0,get:function(){return n.ReshapeMemo}}),Object.defineProperty(exports,`SANS_FONT_FAMILY`,{enumerable:!0,get:function(){return t.SANS_FONT_FAMILY}}),exports.ScatterChart=A,Object.defineProperty(exports,`Screenshot`,{enumerable:!0,get:function(){return n.Screenshot}}),Object.defineProperty(exports,`SessionBreaks`,{enumerable:!0,get:function(){return n.SessionBreaks}}),Object.defineProperty(exports,`SessionShading`,{enumerable:!0,get:function(){return n.SessionShading}}),Object.defineProperty(exports,`SignalMarkerManager`,{enumerable:!0,get:function(){return n.SignalMarkerManager}}),exports.SparklineChart=y,Object.defineProperty(exports,`StreamManager`,{enumerable:!0,get:function(){return n.StreamManager}}),Object.defineProperty(exports,`TC_PALETTE`,{enumerable:!0,get:function(){return t.TC_PALETTE}}),Object.defineProperty(exports,`TC_SERIES_COLORS`,{enumerable:!0,get:function(){return t.TC_SERIES_COLORS}}),Object.defineProperty(exports,`TIMEFRAMES_CRYPTO`,{enumerable:!0,get:function(){return t.TIMEFRAMES_CRYPTO}}),Object.defineProperty(exports,`TIMEFRAMES_FOREX`,{enumerable:!0,get:function(){return t.TIMEFRAMES_FOREX}}),Object.defineProperty(exports,`TIMEFRAMES_STOCK`,{enumerable:!0,get:function(){return t.TIMEFRAMES_STOCK}}),exports.ThemeManager=e.S,Object.defineProperty(exports,`TickAggregator`,{enumerable:!0,get:function(){return n.TickAggregator}}),Object.defineProperty(exports,`TickBarAdapter`,{enumerable:!0,get:function(){return n.TickBarAdapter}}),Object.defineProperty(exports,`TickBarBuilder`,{enumerable:!0,get:function(){return n.TickBarBuilder}}),Object.defineProperty(exports,`TradeZoneManager`,{enumerable:!0,get:function(){return n.TradeZoneManager}}),Object.defineProperty(exports,`UPCOM_SESSIONS`,{enumerable:!0,get:function(){return t.UPCOM_SESSIONS}}),Object.defineProperty(exports,`UndoRedoManager`,{enumerable:!0,get:function(){return n.UndoRedoManager}}),Object.defineProperty(exports,`UpbitAdapter`,{enumerable:!0,get:function(){return n.UpbitAdapter}}),Object.defineProperty(exports,`VN30F_SESSIONS`,{enumerable:!0,get:function(){return t.VN30F_SESSIONS}}),Object.defineProperty(exports,`VN_COLORS`,{enumerable:!0,get:function(){return t.VN_COLORS}}),Object.defineProperty(exports,`VOLUME_ALPHA`,{enumerable:!0,get:function(){return t.VOLUME_ALPHA}}),Object.defineProperty(exports,`VolumeRenderer`,{enumerable:!0,get:function(){return n.VolumeRenderer}}),exports.WaterfallChart=C,Object.defineProperty(exports,`Watermark`,{enumerable:!0,get:function(){return n.Watermark}}),Object.defineProperty(exports,`WebSocketAdapter`,{enumerable:!0,get:function(){return n.WebSocketAdapter}}),Object.defineProperty(exports,`adapterFromFeed`,{enumerable:!0,get:function(){return n.adapterFromFeed}}),Object.defineProperty(exports,`axisTimes`,{enumerable:!0,get:function(){return n.axisTimes}}),Object.defineProperty(exports,`barIndexToX`,{enumerable:!0,get:function(){return n.barIndexToX}}),Object.defineProperty(exports,`barTimeUnit`,{enumerable:!0,get:function(){return t.barTimeUnit}}),Object.defineProperty(exports,`barsAreDaily`,{enumerable:!0,get:function(){return t.barsAreDaily}}),exports.cleanLayoutName=e.r,exports.clearGlobalPlugins=e.m,exports.computeDrawdownCurve=R,exports.computeMonthlyReturns=z,Object.defineProperty(exports,`computePriceLimits`,{enumerable:!0,get:function(){return t.computePriceLimits}}),Object.defineProperty(exports,`contrastRatio`,{enumerable:!0,get:function(){return t.contrastRatio}}),Object.defineProperty(exports,`correlationMatrix`,{enumerable:!0,get:function(){return n.correlationMatrix}}),Object.defineProperty(exports,`counterClockPhase`,{enumerable:!0,get:function(){return n.counterClockPhase}}),Object.defineProperty(exports,`counterClockPoints`,{enumerable:!0,get:function(){return n.counterClockPoints}}),Object.defineProperty(exports,`createMarketTheme`,{enumerable:!0,get:function(){return t.createMarketTheme}}),Object.defineProperty(exports,`createVNTheme`,{enumerable:!0,get:function(){return t.createVNTheme}}),Object.defineProperty(exports,`describeInputs`,{enumerable:!0,get:function(){return n.describeInputs}}),Object.defineProperty(exports,`detectCandlePatterns`,{enumerable:!0,get:function(){return n.detectCandlePatterns}}),exports.feedBars=h,Object.defineProperty(exports,`feedFromAdapter`,{enumerable:!0,get:function(){return n.feedFromAdapter}}),Object.defineProperty(exports,`formatFraction`,{enumerable:!0,get:function(){return t.formatFraction}}),Object.defineProperty(exports,`formatNumber`,{enumerable:!0,get:function(){return t.formatNumber}}),Object.defineProperty(exports,`formatTooltipTime`,{enumerable:!0,get:function(){return n.formatTooltipTime}}),Object.defineProperty(exports,`formatVND`,{enumerable:!0,get:function(){return t.formatVND}}),Object.defineProperty(exports,`formatVolumeLoc`,{enumerable:!0,get:function(){return t.formatVolumeLoc}}),Object.defineProperty(exports,`fractionTick`,{enumerable:!0,get:function(){return t.fractionTick}}),Object.defineProperty(exports,`getCurrentSession`,{enumerable:!0,get:function(){return t.getCurrentSession}}),exports.getGlobalPlugins=e.h,Object.defineProperty(exports,`getLocale`,{enumerable:!0,get:function(){return t.getLocale}}),Object.defineProperty(exports,`histogramBins`,{enumerable:!0,get:function(){return n.histogramBins}}),Object.defineProperty(exports,`indicatorCategory`,{enumerable:!0,get:function(){return n.indicatorCategory}}),Object.defineProperty(exports,`indicatorSource`,{enumerable:!0,get:function(){return t.indicatorSource}}),Object.defineProperty(exports,`inkOn`,{enumerable:!0,get:function(){return t.inkOn}}),Object.defineProperty(exports,`isDataFeed`,{enumerable:!0,get:function(){return n.isDataFeed}}),Object.defineProperty(exports,`isPriceLevelAlert`,{enumerable:!0,get:function(){return n.isPriceLevelAlert}}),Object.defineProperty(exports,`isPriceSource`,{enumerable:!0,get:function(){return t.isPriceSource}}),Object.defineProperty(exports,`isTimeFrame`,{enumerable:!0,get:function(){return t.isTimeFrame}}),Object.defineProperty(exports,`isValidTimeZone`,{enumerable:!0,get:function(){return t.isValidTimeZone}}),exports.localStorageLayouts=e.i,Object.defineProperty(exports,`lttbDownsample`,{enumerable:!0,get:function(){return n.lttbDownsample}}),Object.defineProperty(exports,`lttbVisibleIndices`,{enumerable:!0,get:function(){return n.lttbVisibleIndices}}),Object.defineProperty(exports,`marketStatus`,{enumerable:!0,get:function(){return t.marketStatus}}),exports.memoryLayouts=e.a,Object.defineProperty(exports,`niceScale`,{enumerable:!0,get:function(){return n.niceScale}}),Object.defineProperty(exports,`normalizeBar`,{enumerable:!0,get:function(){return t.normalizeBar}}),Object.defineProperty(exports,`normalizeBarTime`,{enumerable:!0,get:function(){return t.normalizeBarTime}}),Object.defineProperty(exports,`offsetAt`,{enumerable:!0,get:function(){return t.offsetAt}}),exports.overlayScale=g,exports.overlaysForLayer=e.y,Object.defineProperty(exports,`parseIndicatorSource`,{enumerable:!0,get:function(){return t.parseIndicatorSource}}),exports.parseOHLCV=e.s,Object.defineProperty(exports,`parseTimeframe`,{enumerable:!0,get:function(){return t.parseTimeframe}}),Object.defineProperty(exports,`pickBaseTimeframe`,{enumerable:!0,get:function(){return t.pickBaseTimeframe}}),exports.pluginKey=e.b,Object.defineProperty(exports,`priceFormatterFor`,{enumerable:!0,get:function(){return t.priceFormatterFor}}),Object.defineProperty(exports,`priceStepAt`,{enumerable:!0,get:function(){return t.priceStepAt}}),Object.defineProperty(exports,`priceToY`,{enumerable:!0,get:function(){return n.priceToY}}),Object.defineProperty(exports,`priceToYMapper`,{enumerable:!0,get:function(){return n.priceToYMapper}}),Object.defineProperty(exports,`rangePresetStart`,{enumerable:!0,get:function(){return n.rangePresetStart}}),Object.defineProperty(exports,`rankSymbols`,{enumerable:!0,get:function(){return t.rankSymbols}}),Object.defineProperty(exports,`readNews`,{enumerable:!0,get:function(){return t.readNews}}),Object.defineProperty(exports,`readQuote`,{enumerable:!0,get:function(){return t.readQuote}}),Object.defineProperty(exports,`readableOn`,{enumerable:!0,get:function(){return t.readableOn}}),Object.defineProperty(exports,`registerLocale`,{enumerable:!0,get:function(){return t.registerLocale}}),exports.registerPlugin=e.g,Object.defineProperty(exports,`resampleBars`,{enumerable:!0,get:function(){return t.resampleBars}}),Object.defineProperty(exports,`roundToPriceStep`,{enumerable:!0,get:function(){return t.roundToPriceStep}}),Object.defineProperty(exports,`scaleMarketPrices`,{enumerable:!0,get:function(){return t.scaleMarketPrices}}),exports.selectKeyStats=U,Object.defineProperty(exports,`servesTimeframe`,{enumerable:!0,get:function(){return n.servesTimeframe}}),Object.defineProperty(exports,`setLocale`,{enumerable:!0,get:function(){return t.setLocale}}),Object.defineProperty(exports,`setMaxWebGLCharts`,{enumerable:!0,get:function(){return n.setMaxWebGLCharts}}),Object.defineProperty(exports,`sourcePrice`,{enumerable:!0,get:function(){return t.sourcePrice}}),Object.defineProperty(exports,`stepDecimals`,{enumerable:!0,get:function(){return t.stepDecimals}}),Object.defineProperty(exports,`symbolTimeZone`,{enumerable:!0,get:function(){return t.symbolTimeZone}}),exports.syncIndicators=i,Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return t.t}}),Object.defineProperty(exports,`tickBarCount`,{enumerable:!0,get:function(){return t.tickBarCount}}),Object.defineProperty(exports,`timeToX`,{enumerable:!0,get:function(){return n.timeToX}}),Object.defineProperty(exports,`timeframeBucketStart`,{enumerable:!0,get:function(){return t.timeframeBucketStart}}),Object.defineProperty(exports,`timeframeToMs`,{enumerable:!0,get:function(){return t.timeframeToMs}}),Object.defineProperty(exports,`timestampToBarIndex`,{enumerable:!0,get:function(){return n.timestampToBarIndex}}),exports.toEquityPoints=L,Object.defineProperty(exports,`toHeikinAshi`,{enumerable:!0,get:function(){return n.toHeikinAshi}}),Object.defineProperty(exports,`toKagi`,{enumerable:!0,get:function(){return n.toKagi}}),Object.defineProperty(exports,`toLineBreak`,{enumerable:!0,get:function(){return n.toLineBreak}}),Object.defineProperty(exports,`toPointAndFigure`,{enumerable:!0,get:function(){return n.toPointAndFigure}}),Object.defineProperty(exports,`toRangeBars`,{enumerable:!0,get:function(){return n.toRangeBars}}),Object.defineProperty(exports,`toRenko`,{enumerable:!0,get:function(){return n.toRenko}}),exports.unregisterPlugin=e._,Object.defineProperty(exports,`usesKoreanUnits`,{enumerable:!0,get:function(){return t.usesKoreanUnits}}),Object.defineProperty(exports,`vn30fContracts`,{enumerable:!0,get:function(){return t.vn30fContracts}}),Object.defineProperty(exports,`vn30fLastTradingDay`,{enumerable:!0,get:function(){return t.vn30fLastTradingDay}}),Object.defineProperty(exports,`volumeColor`,{enumerable:!0,get:function(){return t.volumeColor}}),Object.defineProperty(exports,`wallToUtc`,{enumerable:!0,get:function(){return t.wallToUtc}}),Object.defineProperty(exports,`withResampling`,{enumerable:!0,get:function(){return n.withResampling}}),Object.defineProperty(exports,`withTickBars`,{enumerable:!0,get:function(){return n.withTickBars}}),Object.defineProperty(exports,`xToBarIndex`,{enumerable:!0,get:function(){return n.xToBarIndex}}),Object.defineProperty(exports,`xToTime`,{enumerable:!0,get:function(){return n.xToTime}}),Object.defineProperty(exports,`yToPrice`,{enumerable:!0,get:function(){return n.yToPrice}}),Object.defineProperty(exports,`zoneOffsetMinutes`,{enumerable:!0,get:function(){return t.zoneOffsetMinutes}});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C as e, D as t, E as n, S as r, T as i, _ as a, a as o, b as s, c, g as l, h as u, i as ee, l as te, m as ne, n as re, o as ie, p as ae, r as oe, s as se, t as ce, u as le, v as ue, w as de, x as fe, y as pe } from "./LayoutSession-
|
|
1
|
+
import { C as e, D as t, E as n, S as r, T as i, _ as a, a as o, b as s, c, g as l, h as u, i as ee, l as te, m as ne, n as re, o as ie, p as ae, r as oe, s as se, t as ce, u as le, v as ue, w as de, x as fe, y as pe } from "./LayoutSession-k8eo2c64.js";
|
|
2
2
|
import { CHART_STYLE_KEYS as me, DARK_PRICE_LIMITS as he, DARK_TERMINAL as ge, DARK_THEME as _e, DARK_THEME as ve, DEFAULT_DRAWING_STYLE as ye, DEFAULT_FONT_FAMILY as be, DEFAULT_RECONNECT as xe, DEFAULT_SIGNAL_STYLE as Se, DEFAULT_STREAM_CONFIG as Ce, DEFAULT_TIMEFRAME_FAVORITES as we, DEFAULT_TRADE_ZONE_STYLE as Te, DEFAULT_TRADING_CONFIG as Ee, HNX_SESSIONS as d, HOSE_SESSIONS as f, KRX_SESSIONS as p, KR_COLORS as m, LIGHT_PRICE_LIMITS as h, LIGHT_THEME as g, LIGHT_THEME as _, MARKET_CRYPTO as v, MARKET_HNX as y, MARKET_HOSE as b, MARKET_HOSE_ETF as x, MARKET_KRX as S, MARKET_NXT as C, MARKET_NYSE as w, MARKET_UPBIT_KRW as T, MARKET_UPCOM as E, MARKET_VN30F as D, MS_TIME_THRESHOLD as De, NXT_SESSIONS as Oe, PRICE_SOURCES as ke, SANS_FONT_FAMILY as Ae, TC_PALETTE as je, TC_SERIES_COLORS as Me, TIMEFRAMES_CRYPTO as Ne, TIMEFRAMES_FOREX as Pe, TIMEFRAMES_STOCK as Fe, UPCOM_SESSIONS as Ie, VN30F_SESSIONS as Le, VN_COLORS as Re, VOLUME_ALPHA as ze, barTimeUnit as Be, barsAreDaily as Ve, computePriceLimits as He, contrastRatio as Ue, createMarketTheme as We, createVNTheme as Ge, formatFraction as Ke, formatNumber as qe, formatVND as Je, formatVolumeLoc as Ye, fractionTick as Xe, getCurrentSession as Ze, getLocale as Qe, indicatorSource as $e, inkOn as et, isPriceSource as tt, isTimeFrame as nt, isValidTimeZone as rt, marketStatus as it, normalizeBar as at, normalizeBarTime as ot, offsetAt as st, parseIndicatorSource as ct, parseTimeframe as lt, pickBaseTimeframe as ut, priceFormatterFor as dt, priceStepAt as ft, rankSymbols as pt, readNews as mt, readQuote as ht, readableOn as gt, registerLocale as _t, resampleBars as vt, roundToPriceStep as yt, scaleMarketPrices as bt, setLocale as xt, sourcePrice as St, stepDecimals as Ct, symbolTimeZone as wt, t as Tt, tickBarCount as Et, timeframeBucketStart as Dt, timeframeBucketStart as Ot, timeframeToMs as kt, usesKoreanUnits as At, vn30fContracts as jt, vn30fLastTradingDay as Mt, volumeColor as Nt, wallToUtc as Pt, zoneOffsetMinutes as Ft } from "@tradecanvas/commons";
|
|
3
3
|
import { AlertManager as It, Animator as Lt, BarCountdown as Rt, BaseFinanceChart as O, BinanceAdapter as zt, BybitAdapter as Bt, CANDLE_PATTERNS as Vt, ChartLegend as Ht, ChartStateManager as Ut, CoinbaseAdapter as Wt, CompareRenderer as Gt, CrosshairTooltip as Kt, CurrentPriceLine as qt, DEFAULT_LEGEND_CONFIG as Jt, DEFAULT_MAX_WEBGL_CHARTS as Yt, DEFAULT_SESSION_HOURS as Xt, DataExporter as Zt, DrawingBase as Qt, Easing as $t, FinanceCrosshair as k, GROUP_HEADER as en, INDICATOR_CATEGORIES as tn, IndicatorBase as nn, IndicatorValueMap as rn, KEPT_BUCKETS as an, KeyboardHandler as on, KrakenAdapter as sn, MAX_ALERT_BARS as cn, MIN_ALERT_BARS as ln, ManualFeed as un, MockAdapter as dn, PaperExecutionAdapter as fn, PollingAdapter as pn, RANGE_PRESETS as mn, ReconnectManager as hn, ReplayController as gn, ReplayManager as _n, ResamplingAdapter as vn, ReshapeMemo as yn, Screenshot as bn, SessionBreaks as xn, SessionShading as Sn, SignalMarkerManager as A, StreamManager as Cn, TickAggregator as wn, TickBarAdapter as Tn, TickBarBuilder as En, TradeZoneManager as Dn, UndoRedoManager as On, UpbitAdapter as kn, VolumeRenderer as An, Watermark as jn, WebSocketAdapter as Mn, adapterFromFeed as Nn, axisTimes as Pn, barIndexToTime as Fn, barIndexToX as In, barIndexToX as j, canvasMeasure as Ln, computeBarLayout as Rn, computeCalendarLayout as zn, computeCounterClockLayout as Bn, computeDonutLayout as Vn, computeHistogramLayout as Hn, computeMatrixLayout as Un, computeScatterLayout as Wn, correlationMatrix as Gn, counterClockPhase as Kn, counterClockPhase as qn, counterClockPoints as Jn, counterClockPoints as Yn, describeInputs as Xn, detectCandlePatterns as Zn, feedFromAdapter as Qn, formatTooltipTime as $n, histogramBins as er, hitBar as M, hitDay as N, hitMatrixCell as P, hitSlice as F, indicatorCategory as tr, isDataFeed as nr, isDataFeed as rr, isPriceLevelAlert as ir, layoutGroupedTreemap as ar, layoutSquarifiedTreemap as or, layoutUniformGrid as sr, lttbDownsample as cr, lttbVisibleIndices as lr, nearestCounterClockPoint as I, nearestPoint as L, niceScale as ur, priceToY as dr, priceToYMapper as fr, priceToYMapper as pr, rangePresetStart as mr, renderBarChart as hr, renderCalendar as gr, renderCounterClock as _r, renderDepthChart as vr, renderDonut as yr, renderEquityCurve as br, renderGauge as xr, renderHeatmap as Sr, renderHistogram as Cr, renderMatrix as wr, renderScatter as Tr, renderSparkline as Er, renderWaterfall as Dr, servesTimeframe as Or, setMaxWebGLCharts as kr, shownCount as Ar, timeToX as jr, timestampToBarIndex as Mr, timestampToBarIndex as Nr, toHeikinAshi as Pr, toKagi as Fr, toLineBreak as Ir, toPointAndFigure as Lr, toRangeBars as Rr, toRenko as zr, withResampling as Br, withTickBars as Vr, xToBarIndex as Hr, xToBarIndex as R, xToTime as Ur, yToPrice as Wr, yToPrice as Gr } from "@tradecanvas/core";
|
|
4
4
|
//#region src/frameworks/syncIndicators.ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartWidget.d.ts","sourceRoot":"","sources":["../../src/widget/ChartWidget.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ChartWidget.d.ts","sourceRoot":"","sources":["../../src/widget/ChartWidget.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetSelectionToolbar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSelectionToolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"WidgetSelectionToolbar.d.ts","sourceRoot":"","sources":["../../src/widget/WidgetSelectionToolbar.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAiB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAI3D,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACrC,kEAAkE;IAClE,IAAI,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,iEAAiE;IACjE,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,yDAAyD;IACzD,KAAK,EAAE,YAAY,CAAC;IACpB,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAC;IAChB,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC,KAAK,IAAI,CAAC;IACvH,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAClC,qEAAqE;IACrE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAgCD;;;;GAIG;AACH,qBAAa,sBAAsB;IA4B/B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,CAAC;IA7BpB,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,GAAG,CAAiB;IAC5B,OAAO,CAAC,MAAM,CAAuC;IACrD,6CAA6C;IAC7C,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,IAAI,CAAyC;IACrD,OAAO,CAAC,OAAO,CAAoB;IACnC,yHAAyH;IACzH,OAAO,CAAC,MAAM,CAA8C;IAC5D,OAAO,CAAC,IAAI,CAAgF;IAC5F,OAAO,CAAC,QAAQ,CAAC,UAAU,CAIzB;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAMxB;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAExB;gBAGiB,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,yBAAyB,EACpC,CAAC,GAAE,UAA0B;IAsChD,MAAM,IAAI,OAAO;IAIjB,IAAI,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI;IAiB1C,IAAI,IAAI,IAAI;IAMZ,OAAO,IAAI,IAAI;IAOf,OAAO,CAAC,MAAM;IAiCd,OAAO,CAAC,OAAO;IAIf,wEAAwE;IACxE,OAAO,CAAC,IAAI;IAKZ,wHAAwH;IACxH,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,OAAO;IAsBf,8EAA8E;IAC9E,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,WAAW;IA4BnB,sGAAsG;IACtG,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,QAAQ;CAQjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawingSettingsTabs.d.ts","sourceRoot":"","sources":["../../src/widget/drawingSettingsTabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAkC,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"drawingSettingsTabs.d.ts","sourceRoot":"","sources":["../../src/widget/drawingSettingsTabs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAkC,iBAAiB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzI,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,YAAY,EAAE,UAAU,EAAE,CAAC;AAsB3B,gCAAgC;AAChC,MAAM,WAAW,aAAa;IAC5B,uFAAuF;IACvF,KAAK,EAAE,MAAM,YAAY,CAAC;IAC1B,OAAO,EAAE,MAAM,cAAc,CAAC;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,qDAAqD;IACrD,IAAI,EAAE,OAAO,CAAC;CACf;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC1C,OAAO,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAAC;IACrC,oGAAoG;IACpG,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACzC;AAqCD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,GAAG,IAAI,CAyBrH;AAqLD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,KAAK,IAAI,EAC/C,CAAC,EAAE,UAAU,EACb,MAAM,CAAC,EAAE,UAAU,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,UAAQ,GACZ,IAAI,CA4BN;AA6DD,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,yFAAyF;IACzF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACxD,oCAAoC;IACpC,UAAU,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACnC,sEAAsE;IACtE,SAAS,CAAC,IAAI,MAAM,CAAC;IACrB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CACxD;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,qBAAqB,EAAE,CAAC,EAAE,UAAU,GAAG,IAAI,CA4B5I"}
|
|
@@ -12,7 +12,7 @@ export interface TextLayout {
|
|
|
12
12
|
box: boolean;
|
|
13
13
|
border: boolean;
|
|
14
14
|
wrap: number;
|
|
15
|
-
/** The size it draws at without one of its own. */
|
|
15
|
+
/** The size it draws at without one of its own: the drawings' text size at the chart's default type. */
|
|
16
16
|
fontSize: number;
|
|
17
17
|
}
|
|
18
18
|
/** The tools that write in a box, and how: a text has no box and runs on; a note and a callout have one and wrap at 240 px. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drawingText.d.ts","sourceRoot":"","sources":["../../src/widget/drawingText.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,
|
|
1
|
+
{"version":3,"file":"drawingText.d.ts","sourceRoot":"","sources":["../../src/widget/drawingText.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,OAAO,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,wGAAwG;IACxG,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,+HAA+H;AAC/H,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAQtE,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,WAAW,EAAE,WAAW,CAAC,MAAM,CAG1C,CAAC;AAEH,4HAA4H;AAC5H,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAEjE,CAAC"}
|