openalgo-charts 2.5.9 → 2.5.10

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.
Files changed (34) hide show
  1. package/README.md +46 -38
  2. package/dist/draw/index.d.ts +46 -2
  3. package/dist/index.d.ts +1058 -718
  4. package/dist/indicators/index.d.ts +1 -1
  5. package/dist/openalgo-charts.draw.mjs +1 -1
  6. package/dist/openalgo-charts.draw.mjs.map +1 -1
  7. package/dist/openalgo-charts.indicators.mjs +1 -1
  8. package/dist/openalgo-charts.indicators.mjs.map +1 -1
  9. package/dist/openalgo-charts.mjs +1 -1
  10. package/dist/openalgo-charts.mjs.map +1 -1
  11. package/dist/openalgo-charts.profile.mjs +1 -1
  12. package/dist/openalgo-charts.standalone.js +1 -1
  13. package/dist/openalgo-charts.standalone.js.map +1 -1
  14. package/dist/openalgo-charts.widget.chart-data-export-dialog-CQgCMbsq.mjs +2 -0
  15. package/dist/openalgo-charts.widget.chart-data-export-dialog-CQgCMbsq.mjs.map +1 -0
  16. package/dist/openalgo-charts.widget.grid-bar-CqdczCgG.mjs +2 -0
  17. package/dist/openalgo-charts.widget.grid-bar-CqdczCgG.mjs.map +1 -0
  18. package/dist/openalgo-charts.widget.grid-menus--16fPxvz.mjs +2 -0
  19. package/dist/openalgo-charts.widget.grid-menus--16fPxvz.mjs.map +1 -0
  20. package/dist/openalgo-charts.widget.keymap-editor-Uozy6qFE.mjs +2 -0
  21. package/dist/openalgo-charts.widget.keymap-editor-Uozy6qFE.mjs.map +1 -0
  22. package/dist/openalgo-charts.widget.layouts-menu-Can1iJqQ.mjs +2 -0
  23. package/dist/openalgo-charts.widget.layouts-menu-Can1iJqQ.mjs.map +1 -0
  24. package/dist/openalgo-charts.widget.layouts-templates-menu-D-ia3TEX.mjs +2 -0
  25. package/dist/openalgo-charts.widget.layouts-templates-menu-D-ia3TEX.mjs.map +1 -0
  26. package/dist/openalgo-charts.widget.mjs +1 -1
  27. package/dist/openalgo-charts.widget.mjs.map +1 -1
  28. package/dist/openalgo-charts.widget.storage-idb-CT2jXJA9.mjs +2 -0
  29. package/dist/openalgo-charts.widget.storage-idb-CT2jXJA9.mjs.map +1 -0
  30. package/dist/openalgo-charts.workspace.mjs +1 -1
  31. package/dist/openalgo-charts.workspace.mjs.map +1 -1
  32. package/dist/widget/index.d.ts +1253 -194
  33. package/dist/workspace/index.d.ts +175 -70
  34. package/package.json +2 -2
package/README.md CHANGED
@@ -12,7 +12,7 @@ with no runtime dependencies.
12
12
  [![npm version](https://img.shields.io/npm/v/openalgo-charts.svg?color=cb3837&label=npm)](https://www.npmjs.com/package/openalgo-charts)
13
13
  [![license](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](./LICENSE)
14
14
  [![npm downloads](https://img.shields.io/npm/dm/openalgo-charts.svg?color=0ea5e9&label=npm%20downloads)](https://www.npmjs.com/package/openalgo-charts)
15
- [![tests](https://img.shields.io/badge/engine%20tests-9382%20passing-brightgreen.svg)](#develop)
15
+ [![tests](https://img.shields.io/badge/engine%20tests-11118%20passing-brightgreen.svg)](#develop)
16
16
  [![dependencies](https://img.shields.io/badge/runtime%20deps-0-brightgreen.svg)](#principles)
17
17
 
18
18
  [**Documentation**](https://marketcalls.github.io/openalgo-charts/)  ·  [**Live examples**](https://marketcalls.github.io/openalgo-charts/examples)  ·  [**Getting started**](./docs/getting-started.md)  ·  [**Migrating to 2.0**](./docs/migrating-to-2.md)  ·  [**Architecture**](./ARCHITECTURE.md)
@@ -25,7 +25,7 @@ with no runtime dependencies.
25
25
  npm install openalgo-charts
26
26
  ```
27
27
 
28
- Current version: **2.5.9**, drawing interaction and replay: drawings belong to the instrument they were drawn on, the magnet works on every pane and in every drag, box select, drag to copy, an eraser, a temporary measure and visibility per interval join the drawing controller, the widget adds a floating drawing toolbar, style templates and a coordinates tab, replay's forming bar stays inside the bar it closes on (and can form over simulated steps where no finer data exists), and lines reach the edges of the view. 2.5.8 was the rendering performance release.
28
+ Current version: **2.5.10**, persistence, saved layouts and the chart grid: the widget keeps its state in IndexedDB and says when it has landed (`widget.ready`), saves and reopens named layouts and indicator templates, and lets a user move any shortcut from the ? panel; a bottom bar carries preset ranges sized in trading sessions, Go to, the market status and a clock; calendars know pre-open, post-close and extended hours, and a chart can shade them; the chart grid lays out one to sixteen charts with a grid bar, maximize and swap, and named link groups that can share the chart type and drawings; and a label pass makes every control say what it is. 2.5.9 was the drawing interaction and replay release.
29
29
  See the [changelog](./CHANGELOG.md) for release notes.
30
30
 
31
31
  ## Quick start
@@ -56,14 +56,17 @@ for live data, or [the widget example](#the-whole-terminal-in-one-call) for char
56
56
 
57
57
  In a framework, create the chart when the component mounts and call `chart.destroy()`
58
58
  when it unmounts. [Framework integration](https://marketcalls.github.io/openalgo-charts/docs/frameworks/)
59
- covers React, Next.js, Angular and Svelte. The [Vue 3 guide](https://marketcalls.github.io/openalgo-charts/docs/vue/)
60
- has a composable and a component tested in Chromium, Firefox and WebKit, with a
61
- no-build example in [`examples/vue`](./examples/vue). In Vue, hold the chart in a
62
- `shallowRef`, never in `ref()` or `reactive()`.
59
+ covers plain JavaScript and the CDN build, React, Next.js, Vue 3, Angular and Svelte
60
+ with the same parts for each: lifecycle, reactivity, resize and theme, live data, the
61
+ widget, cached views and server rendering. Its
62
+ [Vue 3 section](https://marketcalls.github.io/openalgo-charts/docs/frameworks/#vue-3)
63
+ is backed by a no-build example in [`examples/vue`](./examples/vue) tested in Chromium,
64
+ Firefox and WebKit. In Vue, hold the chart in a `shallowRef`, never in `ref()` or
65
+ `reactive()`.
63
66
 
64
67
  ## Architecture
65
68
 
66
- <a href="docs/architecture-diagram.svg"><img src="docs/architecture-diagram.svg" alt="OpenAlgo Charts 2.5.9 architecture: host responsibilities, the base data-to-rendering pipeline with alerts and shared replay, and eight optional tiers including workspace storage, trading tools and the widget" width="920" /></a>
69
+ <a href="docs/architecture-diagram.svg"><img src="docs/architecture-diagram.svg" alt="OpenAlgo Charts 2.5.10 architecture: host responsibilities, the base data-to-rendering pipeline with alerts and shared replay, and eight optional tiers including workspace storage, trading tools and the widget" width="920" /></a>
67
70
 
68
71
  How data reaches the chart, what your app owns, and which features you can import.
69
72
  [Open the full-size diagram](docs/architecture-diagram.svg).
@@ -114,7 +117,7 @@ You can also load the library from a CDN in a plain HTML page:
114
117
  ```html
115
118
  <div id="chart" style="width:100vw;height:100vh"></div>
116
119
  <script type="module">
117
- import { createChart, generateBars } from 'https://unpkg.com/openalgo-charts@2.5.9/dist/openalgo-charts.mjs';
120
+ import { createChart, generateBars } from 'https://unpkg.com/openalgo-charts@2.5.10/dist/openalgo-charts.mjs';
118
121
  const chart = createChart(document.getElementById('chart'), { timezone: 'Asia/Kolkata' });
119
122
  chart.addSeries('candlestick').setData(generateBars(1700000000, 200, 3600));
120
123
  chart.fitContent();
@@ -138,7 +141,7 @@ const widget = createWidget('#terminal', {
138
141
  feed: new OpenAlgoDataFeed({ baseUrl: 'http://127.0.0.1:5000', apiKey: 'YOUR_KEY' }),
139
142
  symbol: 'RELIANCE', exchange: 'NSE', interval: '5m',
140
143
  theme: 'dark',
141
- mobile: 'auto', // compact controls at 640 CSS px or less, or on a coarse pointer
144
+ mobile: 'auto', // compact controls up to 640 CSS px wide, or a phone on its side (coarse pointer, up to 960 px wide and under 600 px tall)
142
145
  persist: true,
143
146
  onOrder: (order) => broker.place(order), // the right-click menu offers order entry only when this is set
144
147
  });
@@ -149,12 +152,16 @@ widget.draw; // the DrawingController the rail drives
149
152
 
150
153
  The optional widget adds symbol search, interval and chart-type controls, a drawing
151
154
  toolbar, settings, indicators, a status line, mobile controls and layout persistence.
152
- Its dialogs use the chart's settings schemas and follow the active theme. **Go to**
153
- jumps to a date or a range, loading older history first (`widget.goTo`), and
154
- `createChartGrid` lays out one widget per cell, from `1x1` to `2x2`, with splitters,
155
- linked charts and portable workspace documents. The panel dock also holds named
156
- **Watchlists** with live quote rows and a **News** reader when the host supplies a
157
- quote or news feed, and an account summary when its broker declares accounts.
155
+ Its dialogs use the chart's settings schemas and follow the active theme. A bottom bar
156
+ under the chart carries preset ranges, the market status, a clock and the scale toggles,
157
+ and its **Go to** (in the top bar with `bottombar: false`) jumps to a date or a range,
158
+ loading older history first (`widget.goTo`), and `createChartGrid` lays out one widget
159
+ per cell, from one chart to sixteen in uniform and uneven layouts, with splitters, a
160
+ grid bar, maximize and swap, named link groups, one bottom bar for the active chart,
161
+ saved desks, one picture of every chart and portable workspace documents. The panel
162
+ dock also holds named **Watchlists** with live quote rows and a **News** reader when the
163
+ host supplies a quote or news feed, and an account summary when its broker declares
164
+ accounts.
158
165
  Undo and Redo walk one timeline for the whole chart (`widget.history`): studies
159
166
  added, removed or edited, scale and pane changes, chart settings and drawings, in
160
167
  the order they were made.
@@ -172,17 +179,17 @@ Unused optional tiers stay out of the base chart download.
172
179
 
173
180
  | Import | Contents | Brotli |
174
181
  |---|---|---|
175
- | `openalgo-charts` | Engine, 13 chart types, panes and scales, custom indicator registry, primitives, alerts, replay, comparisons, chart linking, state, feeds, bar cache, trading overlays, CSV and SVG export | 131.68 kB |
176
- | `openalgo-charts/indicators` | 105 built-in indicators, calculation helpers and helpers for studies that use external data | 40.38 kB |
177
- | `openalgo-charts/draw` | 87 drawing tools + a headless drawing controller, clipboard, settings schema, level palette, freehand geometry and SVG icons | 55.61 kB |
178
- | `openalgo-charts/transform` | Heikin Ashi, Renko, Range bars, Line Break, Point &amp; Figure, Kagi, and symbol arithmetic (`AAPL/MSFT`) | 4.56 kB |
179
- | `openalgo-charts/profile` | Volume Profile, Market Profile (TPO) with compact pixel letters, Footprint, order flow | 14.96 kB |
182
+ | `openalgo-charts` | Engine, 13 chart types, panes and scales, custom indicator registry, primitives, alerts, replay, comparisons, chart linking, state, feeds, bar cache, trading overlays, CSV and SVG export | 134.69 kB |
183
+ | `openalgo-charts/indicators` | 105 built-in indicators, calculation helpers and helpers for studies that use external data | 40.43 kB |
184
+ | `openalgo-charts/draw` | 87 drawing tools + a headless drawing controller, clipboard, settings schema, level palette, freehand geometry and SVG icons | 57.98 kB |
185
+ | `openalgo-charts/transform` | Heikin Ashi, Renko, Range bars, Line Break, Point &amp; Figure, Kagi, and symbol arithmetic (`AAPL/MSFT`) | 4.55 kB |
186
+ | `openalgo-charts/profile` | Volume Profile, Market Profile (TPO) with compact pixel letters, Footprint, order flow | 14.97 kB |
180
187
  | `openalgo-charts/trade` | Order, position and bracket tools, account state, order preview and position commands, plus a depth-of-market ladder | 16.69 kB |
181
188
  | `openalgo-charts/webgl` | GPU drawing for supported series, with Canvas 2D fallback | 6.93 kB |
182
- | `openalgo-charts/widget` | `createWidget`: toolbar, Data, Objects, Watchlist and News dock, account summary, symbol search, dialogs, mobile controls, shortcuts and optional layout persistence | 99.64 kB |
183
- | `openalgo-charts/workspace` | Validated workspace and indicator-template documents, named watchlists, named catalogs with revision checks, asynchronous storage and an IndexedDB adapter; no DOM | 11.33 kB |
189
+ | `openalgo-charts/widget` | `createWidget`: toolbar, bottom bar, Data, Objects, Watchlist and News dock, account summary, symbol search, dialogs, mobile controls, a shortcuts editor, saved layouts, the chart grid (`createChartGrid`) and optional persistence in IndexedDB | 121.36 kB |
190
+ | `openalgo-charts/workspace` | Validated workspace and indicator-template documents, named watchlists, named catalogs with revision checks, asynchronous storage and an IndexedDB adapter; no DOM | 11.53 kB |
184
191
 
185
- Everything together is **381.78 kB Brotli**; a widget terminal with built-in indicators (base + draw + indicators + widget) is 327.32 kB. Figures are measured from the 2.5.9 release build. The trade tier is 16.69 kB on its own; base + trade costs 148.36 kB. Sizes use decimal kB.
192
+ Everything together is **409.13 kB Brotli**; a widget terminal with built-in indicators (base + draw + indicators + widget) is 354.46 kB. The widget's seven first-use parts (the shortcuts editor, the Layouts menu, the templates list, the chart data dialog, the grid bar and its menus, and the IndexedDB store) add 18.19 kB in files of their own, fetched only when a widget first uses one. Figures are measured from the 2.5.10 release build. The trade tier is 16.69 kB on its own; base + trade costs 151.38 kB. Sizes use decimal kB.
186
193
 
187
194
  ## What's built
188
195
 
@@ -500,7 +507,7 @@ chart.on('renderer:fallback', ({ from, to, reason }) => log(reason));
500
507
  The series pass on each pane goes through a render backend port. The shipped Canvas2D backend was pixel-identical to 1.9.2 when the port landed in 2.0.0, and the render-parity spec holds later changes to zero differing pixels against a baseline build from `npm run baseline` (it skips when no baseline is present). The `openalgo-charts/webgl` tier registers a WebGL2 backend that batches every standard chart type into one shared offscreen surface per page with analytic anti-aliasing and composites it into the pane's own canvas, so screenshots, the SVG export and the DOM are unchanged and a dashboard of panes never opens more than one GL context. `'webgl2'` throws until the tier is imported and falls back to the 2D path with one warning on a device without WebGL2; `'auto'` is the silent form. A lost context moves the chart to `canvas2d` for the session and emits `renderer:fallback`. Text, dashed lines, gradients, drawings and custom types stay on the 2D context, which already does them well.
501
508
 
502
509
  ### Data
503
- OpenAlgo REST history + WebSocket ticks with auto-reconnect and resubscribe, live candle aggregation, tick/volume bars, a unified `chart.on(...)` event bus, markers and signals, earnings/dividend/expiry event markers, an IANA chart timezone, and custom price/time formatters. Regular and extended hours, adjusted and raw prices, and a quote currency or unit are each their own provider series (`BarsRequest.variant`, `DataFeed.dataVariants`): nothing is converted locally, and a variant the feed does not declare is reported rather than made up. A session calendar (`chart.setSessionCalendar`, `Instrument.applyTo`) lays the space past the last bar out in the venue's hours, so a drawing placed there lands on a real session time.
510
+ OpenAlgo REST history + WebSocket ticks with auto-reconnect and resubscribe, live candle aggregation, tick/volume bars, a unified `chart.on(...)` event bus, markers and signals, earnings/dividend/expiry event markers, an IANA chart timezone, and custom price/time formatters. Regular and extended hours, adjusted and raw prices, and a quote currency or unit are each their own provider series (`BarsRequest.variant`, `DataFeed.dataVariants`): nothing is converted locally, and a variant the feed does not declare is reported rather than made up. A session calendar (`chart.setSessionCalendar`, `Instrument.applyTo`) lays the space past the last bar out in the venue's hours, so a drawing placed there lands on a real session time. The same calendar answers which part of the trading day an instant falls in (pre-open, regular, post-close, extended, closed or holiday) and a market status for now (`marketStatusAt`), and `attachSessionShading` washes the pre-open, post-close and extended-hours bars when a host asks for it.
504
511
 
505
512
  ## Size budget
506
513
 
@@ -508,17 +515,18 @@ Enforced in CI by [`size-limit`](./.size-limit.json). Nothing is excluded, becau
508
515
 
509
516
  | Bundle | Limit | Actual |
510
517
  |---|---|---|
511
- | Base engine | 131.68 kB | 131.68 kB |
512
- | Base + trade | 148.37 kB | 148.36 kB |
513
- | Indicators tier | 40.39 kB | 40.38 kB |
514
- | Draw tier | 55.62 kB | 55.61 kB |
515
- | Transform tier | 6 kB | 4.56 kB |
516
- | Profile tier | 15 kB | 14.96 kB |
517
- | WebGL2 tier | 7 kB | 6.93 kB |
518
- | Widget tier | 99.65 kB | 99.64 kB |
519
- | Widget terminal (base + draw + indicators + widget) | 327.32 kB | 327.32 kB |
520
- | Workspace tier | 11.34 kB | 11.33 kB |
521
- | **Everything** | 381.79 kB | 381.78 kB |
518
+ | Base engine | 134.69 kB | 134.69 kB |
519
+ | Base + trade | 151.38 kB | 151.38 kB |
520
+ | Indicators tier | 40.43 kB | 40.43 kB |
521
+ | Draw tier | 57.99 kB | 57.98 kB |
522
+ | Transform tier | 4.56 kB | 4.55 kB |
523
+ | Profile tier | 14.98 kB | 14.97 kB |
524
+ | WebGL2 tier | 6.94 kB | 6.93 kB |
525
+ | Widget tier | 121.36 kB | 121.36 kB |
526
+ | Widget first-use parts (seven files beside the widget tier) | 18.19 kB | 18.19 kB |
527
+ | Widget terminal (base + draw + indicators + widget) | 354.46 kB | 354.46 kB |
528
+ | Workspace tier | 11.53 kB | 11.53 kB |
529
+ | **Everything** | 409.14 kB | 409.13 kB |
522
530
 
523
531
  ## Documentation
524
532
 
@@ -569,8 +577,8 @@ See [Contributing](./CONTRIBUTING.md) for setup, targeted checks, documentation
569
577
  ```bash
570
578
  npm install # install dev toolchain
571
579
  npm run typecheck # strict TypeScript check
572
- npm test # engine unit tests (Vitest): 9803 across 442 files
573
- npm run test:demo # reference-host tests: 668 across 63 files
580
+ npm test # engine unit tests (Vitest): 11118 across 469 files
581
+ npm run test:demo # reference-host tests: 683 across 64 files
574
582
  npm run test:endurance # node endurance-harness tests: 7 cases
575
583
  npm run build # Rollup -> dist/ (minified ESM per tier + types)
576
584
  npm run size # size-limit (Brotli) against the budget
@@ -590,7 +598,7 @@ npm run verify # lint + types + unit + endurance harness + build + demo + dt
590
598
 
591
599
  ## Status &amp; limitations
592
600
 
593
- Version **2.5.9**. All engine build phases are implemented. Upgrading a 1.9.x host: [Migrating to 2.0](./docs/migrating-to-2.md).
601
+ Version **2.5.10**. All engine build phases are implemented. Upgrading a 1.9.x host: [Migrating to 2.0](./docs/migrating-to-2.md).
594
602
 
595
603
  Known gaps, stated plainly:
596
604
 
@@ -2137,6 +2137,8 @@ declare function registeredDrawingTools(): DrawingTool[];
2137
2137
  /** Keyboard event fields a shortcut is matched against. */
2138
2138
  interface ShortcutEvent {
2139
2139
  key: string;
2140
+ /** The physical key (`KeyT`): under Alt it names the letter when `key` is not one, as macOS Option types a symbol. Since 2.5.10. */
2141
+ code?: string;
2140
2142
  altKey?: boolean;
2141
2143
  ctrlKey?: boolean;
2142
2144
  metaKey?: boolean;
@@ -2567,13 +2569,18 @@ declare const CHROME_ICON_ATTRS: {
2567
2569
  * They are drawn twice on purpose: a rail button and a toolbar button are
2568
2570
  * different sizes, and the whole point of a second grid is not scaling one
2569
2571
  * drawing to both.
2572
+ *
2573
+ * The tier also carries a glyph for each chart type and transform, under
2574
+ * `chart-<id>` (see `chartTypeIcon`), so a chart-type menu reads from the
2575
+ * same set as the buttons around it. A layout picker's tiles are derived
2576
+ * rather than listed (`layoutIconPath`).
2570
2577
  */
2571
2578
  declare const CHROME_ICONS: Readonly<Record<string, string>>;
2572
2579
  /**
2573
2580
  * The fills of the chrome glyphs' marks, as `DRAWING_TOOL_ACCENTS` is for the
2574
2581
  * tools: each mark is outlined in the glyph's path, and this paints it solid.
2575
2582
  * At 16px a ring of a 2px line is mostly line already, so the fill matters
2576
- * most for the slider knobs.
2583
+ * most for the rings of radius 2: the slider knobs, a head, a line's markers.
2577
2584
  */
2578
2585
  declare const CHROME_ICON_ACCENTS: Readonly<Record<string, string>>;
2579
2586
  /**
@@ -2588,6 +2595,43 @@ declare function chromeIcon(id: string): string | undefined;
2588
2595
  declare function chromeIconAccent(id: string): string | undefined;
2589
2596
  /** Every id the chrome tier covers. */
2590
2597
  declare function chromeIconIds(): string[];
2598
+ /**
2599
+ * The chrome glyph for a chart type or a transform, by its id: a registered
2600
+ * type (`candlestick`, `point-figure`) or one of the transforms that render
2601
+ * as candles (`heikin-ashi`, `renko`, `range-bars`, `line-break`). It is the
2602
+ * `chart-<id>` entry of `CHROME_ICONS`, so `chromeIconSvg('chart-' + id)`
2603
+ * draws the same picture. `undefined` for a type a host registered itself,
2604
+ * which has no glyph until the host draws one.
2605
+ */
2606
+ declare function chartTypeIcon(type: string): string | undefined;
2607
+ /** One chart's place in a layout glyph: a cell, and how many rows and columns it spans. */
2608
+ interface LayoutIconSlot {
2609
+ readonly row: number;
2610
+ readonly column: number;
2611
+ /** Default 1. */
2612
+ readonly rowSpan?: number;
2613
+ /** Default 1. */
2614
+ readonly columnSpan?: number;
2615
+ }
2616
+ /**
2617
+ * A chrome glyph for a grid of charts: the frame, split into `rows` by
2618
+ * `columns` cells, with the dividers inside a spanning slot left out, so a
2619
+ * chart that spans two cells reads as one pane. Cells no slot claims are
2620
+ * drawn as their own panes. Without `slots`, every cell is one chart.
2621
+ *
2622
+ * Derived rather than drawn per layout, so a host's layout picker gets a
2623
+ * tile for every layout it offers, uneven ones included, without an entry in
2624
+ * this registry for each. The path is on the chrome grid and to its rules
2625
+ * (whole units, the 2..14 live area, no presentation attributes), and draws
2626
+ * through the chrome attribute bag like any `CHROME_ICONS` value.
2627
+ *
2628
+ * One to four a side: twelve units split four ways leaves a pixel of clear
2629
+ * between two lines of the 2px stroke, and five would close it up. Throws a
2630
+ * `RangeError` for anything else, and for a slot outside the grid or over
2631
+ * another. A chart grid takes up to eight a side, so a caller that draws the
2632
+ * current layout falls back to the `layout` glyph past four.
2633
+ */
2634
+ declare function layoutIconPath(rows: number, columns: number, slots?: readonly LayoutIconSlot[]): string;
2591
2635
 
2592
2636
  /** Prefix of every `<symbol id>` in the sprite, and of every `<use href>`. */
2593
2637
  declare const ICON_SYMBOL_PREFIX = "oac-icon-";
@@ -3048,4 +3092,4 @@ declare const PATTERN_DRAWING_TOOLS: readonly DrawingTool[];
3048
3092
 
3049
3093
  declare const DRAW_TIER: "draw";
3050
3094
 
3051
- export { ADVANCED_GEOMETRY_TOOLS, ADVANCED_LINE_TOOLS, ALIGN_OPTIONS, ANCHORED_VWAP, ARC, ARROW, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, type AnalysisProfileRow, type AnalysisStatus, type AnchoredVwapOptions, type AnchoredVwapPoint, type AnchoredVwapResult, type AnchoredVwapSource, BALLOON, BRUSH, BUILTIN_DRAWING_TOOLS, CALLOUT, CHROME_ICONS, CHROME_ICON_ACCENTS, CHROME_ICON_ATTRS, CHROME_ICON_FILLED, CHROME_ICON_STROKE, CHROME_ICON_VIEWBOX, CIRCLE, COLOR_FIELD, COMMENT, CROSS_LINE, CURVE, CYCLE_PALETTE, CYCLIC_LINES, type ClipboardPort, DATE_RANGE, DEFAULT_FIB, DEFAULT_FIB_FAN, DEFAULT_FIB_TIME_ZONE, DEFAULT_GANN_BOX, DEFAULT_GANN_FAN, DOUBLE_CURVE, DRAWING_CLIPBOARD_KEY, DRAWING_CLIPBOARD_VERSION, DRAWING_STATE_VERSION, DRAWING_TOOL_ACCENTS, DRAWING_TOOL_ICONS, DRAW_TIER, type DrawContext, type Drawing, type DrawingChangeEvent, type DrawingChangeKind, type DrawingChartHost, DrawingClipboard, type DrawingClipboardOptions, DrawingController, type DrawingControllerOptions, type DrawingDocumentStore, type DrawingEditOptions, type DrawingGestureOptions, type DrawingGroup, type DrawingInput, type DrawingInstrument, type DrawingIntervalRange, type DrawingKeyAction, type DrawingKeyContext, type DrawingKeyEvent, DrawingLayer, type DrawingLayerOrder, type DrawingLinkChart, type DrawingLinkContext, type DrawingLinkContextSource, DrawingLinkGroup, type DrawingLinkOptions, type DrawingPatch, type DrawingPlacementOptions, type DrawingPoint, type DrawingPointerKind, type DrawingPolicy, type DrawingSpace, type DrawingStackTarget, type DrawingStyle, type DrawingText, type DrawingTextStorage, type DrawingTool, type DrawingValueContext, type DrawingsDocument, ELLIPSE, EXTENDED_LINE, EXTEND_FIELDS, type ExpandContext, FIB_CHANNEL, FIB_EXTENSION, FIB_FAN, FIB_RETRACEMENT, FIB_TIME_ZONE, FILL_FIELDS, FIXED_RANGE_VOLUME_PROFILE, FLAG_MARK, FONT_FIELDS, FONT_OPTIONS, FORECAST, type FibLevel, type FieldGroup, type FieldKind, type FixedRangeVolumeProfileOptions, type FixedRangeVolumeProfileResult, GANN_BOX, GANN_FAN, HIGHLIGHTER, HORIZONTAL_LINE, HORIZONTAL_RAY, type HitContext, ICON_ATTRS, ICON_STROKE, ICON_SYMBOL_PREFIX, ICON_VIEWBOX, INTERVAL_FIELDS, type IconAttrs, type IconSvgOptions, type InputAnchorStep, InstrumentDrawings, type InstrumentDrawingsChart, type InstrumentDrawingsError, type InstrumentDrawingsOptions, LEVEL_FIELDS, LEVEL_NEUTRAL, LINE_FIELDS, LINE_STYLE_FIELD, LINE_STYLE_OPTIONS, LINE_WIDTH_FIELD, LONG_POSITION, MEASURE, type MagnetMode, NOTE, NUDGE_STEP_PX, NUDGE_STEP_SHIFT_PX, PARALLEL_CHANNEL, PATH, PATTERN_DRAWING_TOOLS, PLATE_TEXT_FIELDS, POLYLINE, PRICE_LABEL, PRICE_NOTE, PRICE_RANGE, RAY, RECTANGLE, ROTATED_RECTANGLE, SHAPE_TEXT_FIELDS, SHORT_POSITION, SHOW_LABELS_FIELD, SIGNPOST, SINE_LINE, SPACE_FIELD, SPACE_OPTIONS, type ScreenPoint, type SettingsField, type SettingsSchema, type ShortcutEvent, type StudyInputTarget, TABLE, TEXT, TEXT_FIELDS, TEXT_POSITION_OPTIONS, TEXT_VALUE_FIELD, TIME_CYCLES, TREND_LINE, TRIANGLE, type ToolCursorOptions, VALIGN_OPTIONS, VERTICAL_LINE, type ViewportPoint, anchoredVwapAnalysis, applyDrawingSettings, boundsOf, catmullRom, chromeIcon, chromeIconAccent, chromeIconIds, chromeIconSvg, clearMemoryClipboard, cloneDrawing, cloneLevels, coerceSettingValue, composeSettings, createDrawingLinkGroup, createInstrumentDrawings, cycleColor, decodeClipboardPayload, distToEllipse, distToLine, distToPolyline, distToRect, distToSegment, drawingSettingsSchema, drawingShortcuts, drawingShownOnInterval, drawingToolAccent, drawingToolIcon, drawingToolIconIds, encodeClipboardPayload, extendSegment, fixedRangeVolumeProfileAnalysis, formatRatio, gannLabel, getDrawingTool, hasDrawingTool, iconSprite, iconSvg, iconUse, instrumentDrawingsKey, keyToDrawingAction, levelColor, matchDrawingShortcut, memoryDrawingStore, migrateDrawings, migrateUnscopedDrawings, pressureWidth, rdpSimplify, readDrawingSetting, readDrawingSettings, rectOf, registerBuiltinDrawingTools, registerDrawingTool, registeredDrawingTools, sanitizeDrawing, sortByZIndex, studyInputTarget, systemClipboard, toolCursor, webStorageDrawingStore };
3095
+ export { ADVANCED_GEOMETRY_TOOLS, ADVANCED_LINE_TOOLS, ALIGN_OPTIONS, ANCHORED_VWAP, ARC, ARROW, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, ARROW_UP, type AnalysisProfileRow, type AnalysisStatus, type AnchoredVwapOptions, type AnchoredVwapPoint, type AnchoredVwapResult, type AnchoredVwapSource, BALLOON, BRUSH, BUILTIN_DRAWING_TOOLS, CALLOUT, CHROME_ICONS, CHROME_ICON_ACCENTS, CHROME_ICON_ATTRS, CHROME_ICON_FILLED, CHROME_ICON_STROKE, CHROME_ICON_VIEWBOX, CIRCLE, COLOR_FIELD, COMMENT, CROSS_LINE, CURVE, CYCLE_PALETTE, CYCLIC_LINES, type ClipboardPort, DATE_RANGE, DEFAULT_FIB, DEFAULT_FIB_FAN, DEFAULT_FIB_TIME_ZONE, DEFAULT_GANN_BOX, DEFAULT_GANN_FAN, DOUBLE_CURVE, DRAWING_CLIPBOARD_KEY, DRAWING_CLIPBOARD_VERSION, DRAWING_STATE_VERSION, DRAWING_TOOL_ACCENTS, DRAWING_TOOL_ICONS, DRAW_TIER, type DrawContext, type Drawing, type DrawingChangeEvent, type DrawingChangeKind, type DrawingChartHost, DrawingClipboard, type DrawingClipboardOptions, DrawingController, type DrawingControllerOptions, type DrawingDocumentStore, type DrawingEditOptions, type DrawingGestureOptions, type DrawingGroup, type DrawingInput, type DrawingInstrument, type DrawingIntervalRange, type DrawingKeyAction, type DrawingKeyContext, type DrawingKeyEvent, DrawingLayer, type DrawingLayerOrder, type DrawingLinkChart, type DrawingLinkContext, type DrawingLinkContextSource, DrawingLinkGroup, type DrawingLinkOptions, type DrawingPatch, type DrawingPlacementOptions, type DrawingPoint, type DrawingPointerKind, type DrawingPolicy, type DrawingSpace, type DrawingStackTarget, type DrawingStyle, type DrawingText, type DrawingTextStorage, type DrawingTool, type DrawingValueContext, type DrawingsDocument, ELLIPSE, EXTENDED_LINE, EXTEND_FIELDS, type ExpandContext, FIB_CHANNEL, FIB_EXTENSION, FIB_FAN, FIB_RETRACEMENT, FIB_TIME_ZONE, FILL_FIELDS, FIXED_RANGE_VOLUME_PROFILE, FLAG_MARK, FONT_FIELDS, FONT_OPTIONS, FORECAST, type FibLevel, type FieldGroup, type FieldKind, type FixedRangeVolumeProfileOptions, type FixedRangeVolumeProfileResult, GANN_BOX, GANN_FAN, HIGHLIGHTER, HORIZONTAL_LINE, HORIZONTAL_RAY, type HitContext, ICON_ATTRS, ICON_STROKE, ICON_SYMBOL_PREFIX, ICON_VIEWBOX, INTERVAL_FIELDS, type IconAttrs, type IconSvgOptions, type InputAnchorStep, InstrumentDrawings, type InstrumentDrawingsChart, type InstrumentDrawingsError, type InstrumentDrawingsOptions, LEVEL_FIELDS, LEVEL_NEUTRAL, LINE_FIELDS, LINE_STYLE_FIELD, LINE_STYLE_OPTIONS, LINE_WIDTH_FIELD, LONG_POSITION, type LayoutIconSlot, MEASURE, type MagnetMode, NOTE, NUDGE_STEP_PX, NUDGE_STEP_SHIFT_PX, PARALLEL_CHANNEL, PATH, PATTERN_DRAWING_TOOLS, PLATE_TEXT_FIELDS, POLYLINE, PRICE_LABEL, PRICE_NOTE, PRICE_RANGE, RAY, RECTANGLE, ROTATED_RECTANGLE, SHAPE_TEXT_FIELDS, SHORT_POSITION, SHOW_LABELS_FIELD, SIGNPOST, SINE_LINE, SPACE_FIELD, SPACE_OPTIONS, type ScreenPoint, type SettingsField, type SettingsSchema, type ShortcutEvent, type StudyInputTarget, TABLE, TEXT, TEXT_FIELDS, TEXT_POSITION_OPTIONS, TEXT_VALUE_FIELD, TIME_CYCLES, TREND_LINE, TRIANGLE, type ToolCursorOptions, VALIGN_OPTIONS, VERTICAL_LINE, type ViewportPoint, anchoredVwapAnalysis, applyDrawingSettings, boundsOf, catmullRom, chartTypeIcon, chromeIcon, chromeIconAccent, chromeIconIds, chromeIconSvg, clearMemoryClipboard, cloneDrawing, cloneLevels, coerceSettingValue, composeSettings, createDrawingLinkGroup, createInstrumentDrawings, cycleColor, decodeClipboardPayload, distToEllipse, distToLine, distToPolyline, distToRect, distToSegment, drawingSettingsSchema, drawingShortcuts, drawingShownOnInterval, drawingToolAccent, drawingToolIcon, drawingToolIconIds, encodeClipboardPayload, extendSegment, fixedRangeVolumeProfileAnalysis, formatRatio, gannLabel, getDrawingTool, hasDrawingTool, iconSprite, iconSvg, iconUse, instrumentDrawingsKey, keyToDrawingAction, layoutIconPath, levelColor, matchDrawingShortcut, memoryDrawingStore, migrateDrawings, migrateUnscopedDrawings, pressureWidth, rdpSimplify, readDrawingSetting, readDrawingSettings, rectOf, registerBuiltinDrawingTools, registerDrawingTool, registeredDrawingTools, sanitizeDrawing, sortByZIndex, studyInputTarget, systemClipboard, toolCursor, webStorageDrawingStore };