@363045841yyt/klinechart-core 0.7.6 → 0.7.7

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 (191) hide show
  1. package/dist/config/chartSettings.d.ts +27 -2
  2. package/dist/config/chartSettings.d.ts.map +1 -1
  3. package/dist/config/chartSettings.js +6 -0
  4. package/dist/config/chartSettings.js.map +1 -1
  5. package/dist/engine/chart.d.ts.map +1 -1
  6. package/dist/engine/chart.js +4 -0
  7. package/dist/engine/chart.js.map +1 -1
  8. package/dist/engine/draw/pixelAlign.d.ts.map +1 -1
  9. package/dist/engine/draw/pixelAlign.js.map +1 -1
  10. package/dist/engine/drawing/plugin.js +1 -1
  11. package/dist/engine/drawing/plugin.js.map +1 -1
  12. package/dist/engine/renderers/Indicator/atr.d.ts.map +1 -1
  13. package/dist/engine/renderers/Indicator/atr.js +7 -4
  14. package/dist/engine/renderers/Indicator/atr.js.map +1 -1
  15. package/dist/engine/renderers/Indicator/boll.js +12 -12
  16. package/dist/engine/renderers/Indicator/boll.js.map +1 -1
  17. package/dist/engine/renderers/Indicator/cci.d.ts +1 -2
  18. package/dist/engine/renderers/Indicator/cci.d.ts.map +1 -1
  19. package/dist/engine/renderers/Indicator/cci.js +9 -9
  20. package/dist/engine/renderers/Indicator/cci.js.map +1 -1
  21. package/dist/engine/renderers/Indicator/ene.js +12 -12
  22. package/dist/engine/renderers/Indicator/ene.js.map +1 -1
  23. package/dist/engine/renderers/Indicator/expma.js +6 -6
  24. package/dist/engine/renderers/Indicator/expma.js.map +1 -1
  25. package/dist/engine/renderers/Indicator/fastk.d.ts +1 -2
  26. package/dist/engine/renderers/Indicator/fastk.d.ts.map +1 -1
  27. package/dist/engine/renderers/Indicator/fastk.js +7 -7
  28. package/dist/engine/renderers/Indicator/fastk.js.map +1 -1
  29. package/dist/engine/renderers/Indicator/kst.d.ts +1 -2
  30. package/dist/engine/renderers/Indicator/kst.d.ts.map +1 -1
  31. package/dist/engine/renderers/Indicator/kst.js +10 -10
  32. package/dist/engine/renderers/Indicator/kst.js.map +1 -1
  33. package/dist/engine/renderers/Indicator/ma.js +5 -5
  34. package/dist/engine/renderers/Indicator/ma.js.map +1 -1
  35. package/dist/engine/renderers/Indicator/macd.d.ts +1 -2
  36. package/dist/engine/renderers/Indicator/macd.d.ts.map +1 -1
  37. package/dist/engine/renderers/Indicator/macd.js +24 -24
  38. package/dist/engine/renderers/Indicator/macd.js.map +1 -1
  39. package/dist/engine/renderers/Indicator/macdLegend.js +6 -6
  40. package/dist/engine/renderers/Indicator/macdLegend.js.map +1 -1
  41. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js +16 -16
  42. package/dist/engine/renderers/Indicator/mainIndicatorLegend.js.map +1 -1
  43. package/dist/engine/renderers/Indicator/mom.d.ts +1 -2
  44. package/dist/engine/renderers/Indicator/mom.d.ts.map +1 -1
  45. package/dist/engine/renderers/Indicator/mom.js +8 -8
  46. package/dist/engine/renderers/Indicator/mom.js.map +1 -1
  47. package/dist/engine/renderers/Indicator/rsi.d.ts +2 -3
  48. package/dist/engine/renderers/Indicator/rsi.d.ts.map +1 -1
  49. package/dist/engine/renderers/Indicator/rsi.js +15 -15
  50. package/dist/engine/renderers/Indicator/rsi.js.map +1 -1
  51. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts +1 -2
  52. package/dist/engine/renderers/Indicator/scale/indicator_scale.d.ts.map +1 -1
  53. package/dist/engine/renderers/Indicator/scale/indicator_scale.js +5 -5
  54. package/dist/engine/renderers/Indicator/scale/indicator_scale.js.map +1 -1
  55. package/dist/engine/renderers/Indicator/stoch.d.ts +1 -2
  56. package/dist/engine/renderers/Indicator/stoch.d.ts.map +1 -1
  57. package/dist/engine/renderers/Indicator/stoch.js +10 -10
  58. package/dist/engine/renderers/Indicator/stoch.js.map +1 -1
  59. package/dist/engine/renderers/Indicator/structure.js +5 -5
  60. package/dist/engine/renderers/Indicator/structure.js.map +1 -1
  61. package/dist/engine/renderers/Indicator/wmsr.d.ts +1 -2
  62. package/dist/engine/renderers/Indicator/wmsr.d.ts.map +1 -1
  63. package/dist/engine/renderers/Indicator/wmsr.js +10 -10
  64. package/dist/engine/renderers/Indicator/wmsr.js.map +1 -1
  65. package/dist/engine/renderers/Indicator/zones.js +6 -6
  66. package/dist/engine/renderers/Indicator/zones.js.map +1 -1
  67. package/dist/engine/renderers/candle.d.ts +1 -1
  68. package/dist/engine/renderers/candle.d.ts.map +1 -1
  69. package/dist/engine/renderers/candle.js +21 -21
  70. package/dist/engine/renderers/candle.js.map +1 -1
  71. package/dist/engine/renderers/crosshair.js +3 -3
  72. package/dist/engine/renderers/crosshair.js.map +1 -1
  73. package/dist/engine/renderers/extremaMarkers.d.ts.map +1 -1
  74. package/dist/engine/renderers/extremaMarkers.js +12 -12
  75. package/dist/engine/renderers/extremaMarkers.js.map +1 -1
  76. package/dist/engine/renderers/gridLines.js +3 -3
  77. package/dist/engine/renderers/gridLines.js.map +1 -1
  78. package/dist/engine/renderers/lastPrice.js +7 -7
  79. package/dist/engine/renderers/lastPrice.js.map +1 -1
  80. package/dist/engine/renderers/paneTitle.js +6 -6
  81. package/dist/engine/renderers/paneTitle.js.map +1 -1
  82. package/dist/engine/renderers/subVolume.d.ts.map +1 -1
  83. package/dist/engine/renderers/subVolume.js +23 -20
  84. package/dist/engine/renderers/subVolume.js.map +1 -1
  85. package/dist/engine/renderers/timeAxis.js +9 -9
  86. package/dist/engine/renderers/timeAxis.js.map +1 -1
  87. package/dist/engine/renderers/webgl/candleSurface.d.ts.map +1 -1
  88. package/dist/engine/renderers/webgl/candleSurface.js +39 -7
  89. package/dist/engine/renderers/webgl/candleSurface.js.map +1 -1
  90. package/dist/engine/renderers/yAxis.d.ts.map +1 -1
  91. package/dist/engine/renderers/yAxis.js +5 -5
  92. package/dist/engine/renderers/yAxis.js.map +1 -1
  93. package/dist/index.d.ts +1 -0
  94. package/dist/index.d.ts.map +1 -1
  95. package/dist/index.js +1 -0
  96. package/dist/index.js.map +1 -1
  97. package/dist/plugin/types.d.ts +5 -1
  98. package/dist/plugin/types.d.ts.map +1 -1
  99. package/dist/plugin/types.js.map +1 -1
  100. package/dist/tokens/colorPresetSettings.d.ts +15 -0
  101. package/dist/tokens/colorPresetSettings.d.ts.map +1 -0
  102. package/dist/tokens/colorPresetSettings.js +65 -0
  103. package/dist/tokens/colorPresetSettings.js.map +1 -0
  104. package/dist/tokens/index.d.ts +17 -0
  105. package/dist/tokens/index.d.ts.map +1 -0
  106. package/dist/tokens/index.js +16 -0
  107. package/dist/tokens/index.js.map +1 -0
  108. package/dist/tokens/mergeTheme.d.ts +17 -0
  109. package/dist/tokens/mergeTheme.d.ts.map +1 -0
  110. package/dist/tokens/mergeTheme.js +43 -0
  111. package/dist/tokens/mergeTheme.js.map +1 -0
  112. package/dist/tokens/theme-china.d.ts +45 -0
  113. package/dist/tokens/theme-china.d.ts.map +1 -0
  114. package/dist/tokens/theme-china.js +116 -0
  115. package/dist/tokens/theme-china.js.map +1 -0
  116. package/dist/tokens/theme-dark.d.ts +21 -0
  117. package/dist/tokens/theme-dark.d.ts.map +1 -0
  118. package/dist/tokens/theme-dark.js +228 -0
  119. package/dist/tokens/theme-dark.js.map +1 -0
  120. package/dist/tokens/theme-light.d.ts +23 -0
  121. package/dist/tokens/theme-light.d.ts.map +1 -0
  122. package/dist/tokens/theme-light.js +234 -0
  123. package/dist/tokens/theme-light.js.map +1 -0
  124. package/dist/tokens/themeToCssVars.d.ts +74 -0
  125. package/dist/tokens/themeToCssVars.d.ts.map +1 -0
  126. package/dist/tokens/themeToCssVars.js +108 -0
  127. package/dist/tokens/themeToCssVars.js.map +1 -0
  128. package/dist/tokens/types.d.ts +335 -0
  129. package/dist/tokens/types.d.ts.map +1 -0
  130. package/dist/tokens/types.js +20 -0
  131. package/dist/tokens/types.js.map +1 -0
  132. package/dist/utils/kLineDraw/axis.d.ts +8 -7
  133. package/dist/utils/kLineDraw/axis.d.ts.map +1 -1
  134. package/dist/utils/kLineDraw/axis.js +24 -24
  135. package/dist/utils/kLineDraw/axis.js.map +1 -1
  136. package/dist/version.d.ts +1 -1
  137. package/dist/version.js +1 -1
  138. package/package.json +1 -1
  139. package/src/config/chartSettings.ts +11 -2
  140. package/src/engine/chart.ts +4 -0
  141. package/src/engine/draw/pixelAlign.ts +0 -2
  142. package/src/engine/drawing/plugin.ts +1 -1
  143. package/src/engine/renderers/Indicator/atr.ts +7 -3
  144. package/src/engine/renderers/Indicator/boll.ts +12 -12
  145. package/src/engine/renderers/Indicator/cci.ts +11 -10
  146. package/src/engine/renderers/Indicator/ene.ts +12 -12
  147. package/src/engine/renderers/Indicator/expma.ts +6 -6
  148. package/src/engine/renderers/Indicator/fastk.ts +9 -8
  149. package/src/engine/renderers/Indicator/kst.ts +12 -11
  150. package/src/engine/renderers/Indicator/ma.ts +5 -5
  151. package/src/engine/renderers/Indicator/macd.ts +27 -25
  152. package/src/engine/renderers/Indicator/macdLegend.ts +6 -6
  153. package/src/engine/renderers/Indicator/mainIndicatorLegend.ts +16 -16
  154. package/src/engine/renderers/Indicator/mom.ts +11 -10
  155. package/src/engine/renderers/Indicator/rsi.ts +18 -15
  156. package/src/engine/renderers/Indicator/scale/indicator_scale.ts +6 -6
  157. package/src/engine/renderers/Indicator/stoch.ts +12 -11
  158. package/src/engine/renderers/Indicator/structure.ts +5 -5
  159. package/src/engine/renderers/Indicator/wmsr.ts +13 -12
  160. package/src/engine/renderers/Indicator/zones.ts +7 -7
  161. package/src/engine/renderers/candle.ts +21 -21
  162. package/src/engine/renderers/crosshair.ts +3 -3
  163. package/src/engine/renderers/extremaMarkers.ts +13 -12
  164. package/src/engine/renderers/gridLines.ts +3 -3
  165. package/src/engine/renderers/lastPrice.ts +7 -7
  166. package/src/engine/renderers/paneTitle.ts +6 -6
  167. package/src/engine/renderers/subVolume.ts +23 -20
  168. package/src/engine/renderers/timeAxis.ts +9 -9
  169. package/src/engine/renderers/webgl/candleSurface.ts +43 -7
  170. package/src/engine/renderers/yAxis.ts +6 -5
  171. package/src/index.ts +1 -0
  172. package/src/plugin/types.ts +5 -1
  173. package/src/tokens/__tests__/__snapshots__/baseline.test.ts.snap +393 -0
  174. package/src/tokens/__tests__/baseline.test.ts +183 -0
  175. package/src/tokens/__tests__/themeToCssVars.test.ts +175 -0
  176. package/src/tokens/__tests__/tokens.test.ts +215 -0
  177. package/src/tokens/colorPresetSettings.ts +128 -0
  178. package/src/tokens/index.ts +65 -0
  179. package/src/tokens/mergeTheme.ts +48 -0
  180. package/src/tokens/theme-china.ts +132 -0
  181. package/src/tokens/theme-dark.ts +244 -0
  182. package/src/tokens/theme-light.ts +250 -0
  183. package/src/tokens/themeToCssVars.ts +138 -0
  184. package/src/tokens/types.ts +394 -0
  185. package/src/utils/kLineDraw/axis.ts +31 -30
  186. package/src/version.ts +1 -1
  187. package/dist/engine/theme/colors.d.ts +0 -223
  188. package/dist/engine/theme/colors.d.ts.map +0 -1
  189. package/dist/engine/theme/colors.js +0 -375
  190. package/dist/engine/theme/colors.js.map +0 -1
  191. package/src/engine/theme/colors.ts +0 -642
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Theme override / merge helper.
3
+ *
4
+ * const myTheme = mergeTheme(lightTheme, {
5
+ * name: 'my-light',
6
+ * colors: { candleUpBody: '#00C896' },
7
+ * })
8
+ *
9
+ * Shallow-merges each top-level token family. Within a family, the
10
+ * override wins for any key it specifies; missing keys fall back to the
11
+ * base. The override's `name` (if provided) wins.
12
+ *
13
+ * Strictly immutable: returns a new theme; the inputs are untouched.
14
+ */
15
+ import type { Theme, ThemeOverride } from './types';
16
+ export declare function mergeTheme(base: Theme, override: ThemeOverride): Theme;
17
+ //# sourceMappingURL=mergeTheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeTheme.d.ts","sourceRoot":"","sources":["../../src/tokens/mergeTheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAwBnD,wBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,KAAK,CAQtE"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Theme override / merge helper.
3
+ *
4
+ * const myTheme = mergeTheme(lightTheme, {
5
+ * name: 'my-light',
6
+ * colors: { candleUpBody: '#00C896' },
7
+ * })
8
+ *
9
+ * Shallow-merges each top-level token family. Within a family, the
10
+ * override wins for any key it specifies; missing keys fall back to the
11
+ * base. The override's `name` (if provided) wins.
12
+ *
13
+ * Strictly immutable: returns a new theme; the inputs are untouched.
14
+ */
15
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
16
+ function isRecord(v) {
17
+ return v !== null && typeof v === 'object';
18
+ }
19
+ function deepMergeColors(base, override) {
20
+ const merged = { ...base };
21
+ if (!override)
22
+ return merged;
23
+ for (const [k, v] of Object.entries(override)) {
24
+ const baseVal = base[k];
25
+ if (isRecord(v) && isRecord(baseVal)) {
26
+ merged[k] = { ...baseVal, ...v };
27
+ }
28
+ else if (v !== undefined) {
29
+ merged[k] = v;
30
+ }
31
+ }
32
+ return merged;
33
+ }
34
+ export function mergeTheme(base, override) {
35
+ return {
36
+ name: override.name ?? base.name,
37
+ colors: deepMergeColors(base.colors, override.colors),
38
+ spacing: { ...base.spacing, ...(override.spacing ?? {}) },
39
+ typography: { ...base.typography, ...(override.typography ?? {}) },
40
+ motion: { ...base.motion, ...(override.motion ?? {}) },
41
+ };
42
+ }
43
+ //# sourceMappingURL=mergeTheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeTheme.js","sourceRoot":"","sources":["../../src/tokens/mergeTheme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,8DAA8D;AAC9D,SAAS,QAAQ,CAAC,CAAU;IACxB,OAAO,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAA;AAC9C,CAAC;AAED,SAAS,eAAe,CACpB,IAAqB,EACrB,QAA8C;IAE9C,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,EAAwC,CAAA;IAChE,IAAI,CAAC,QAAQ;QAAE,OAAO,MAAoC,CAAA;IAC1D,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,OAAO,GAAI,IAA2C,CAAC,CAAC,CAAC,CAAA;QAC/D,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,EAAE,CAAA;QACpC,CAAC;aAAM,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACjB,CAAC;IACL,CAAC;IACD,OAAO,MAAoC,CAAA;AAC/C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAW,EAAE,QAAuB;IAC3D,OAAO;QACH,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;QAChC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;QACrD,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QACzD,UAAU,EAAE,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,QAAQ,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE;QAClE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE;KACzD,CAAA;AACL,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Asia-market (Chinese) colour convention helper.
3
+ *
4
+ * Asian markets traditionally use **red for "up"** (bull) and **green
5
+ * for "down"** (bear) — the reverse of the Western convention.
6
+ *
7
+ * {@link withAsiaMarketColors} takes any {@link Theme} and returns a new
8
+ * Theme with all bull/bear colour pairs swapped, so the caller only needs
9
+ * a single boolean (`isAsiaMarket`) to switch conventions at runtime.
10
+ *
11
+ * {@link resolveThemeColors} is a convenience for renderers that currently
12
+ * hard-code `theme === 'dark' ? darkTheme.colors : lightTheme.colors`.
13
+ *
14
+ * Usage:
15
+ * ```ts
16
+ * import { resolveThemeColors } from '../../tokens'
17
+ *
18
+ * const colors = resolveThemeColors(context.theme, context.isAsiaMarket)
19
+ * ```
20
+ */
21
+ import type { ColorTokens, Theme } from './types';
22
+ import { type ColorPresetSettings } from './colorPresetSettings';
23
+ /**
24
+ * Swap all bull/bear colour pairs in a Theme so that "up" (bull) uses
25
+ * the formerly "down" (bear) colour and vice versa.
26
+ *
27
+ * @param theme — the base Theme (Western convention)
28
+ * @returns a **new** Theme object; the original is not mutated.
29
+ */
30
+ export declare function withAsiaMarketColors(theme: Theme): Theme;
31
+ /**
32
+ * Resolve a theme name + optional Asia-market flag into concrete
33
+ * {@link ColorTokens}.
34
+ *
35
+ * Renderers replace this pattern:
36
+ * ```ts
37
+ * const colors = theme === 'dark' ? darkTheme.colors : lightTheme.colors
38
+ * ```
39
+ * with:
40
+ * ```ts
41
+ * const colors = resolveThemeColors(theme, isAsiaMarket)
42
+ * ```
43
+ */
44
+ export declare function resolveThemeColors(themeName: 'light' | 'dark', isAsiaMarket?: boolean, colorPresetSettings?: ColorPresetSettings): ColorTokens;
45
+ //# sourceMappingURL=theme-china.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-china.d.ts","sourceRoot":"","sources":["../../src/tokens/theme-china.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAGjD,OAAO,EAA6B,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAE3F;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CA2ExD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAC9B,SAAS,EAAE,OAAO,GAAG,MAAM,EAC3B,YAAY,CAAC,EAAE,OAAO,EACtB,mBAAmB,CAAC,EAAE,mBAAmB,GAC1C,WAAW,CAIb"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Asia-market (Chinese) colour convention helper.
3
+ *
4
+ * Asian markets traditionally use **red for "up"** (bull) and **green
5
+ * for "down"** (bear) — the reverse of the Western convention.
6
+ *
7
+ * {@link withAsiaMarketColors} takes any {@link Theme} and returns a new
8
+ * Theme with all bull/bear colour pairs swapped, so the caller only needs
9
+ * a single boolean (`isAsiaMarket`) to switch conventions at runtime.
10
+ *
11
+ * {@link resolveThemeColors} is a convenience for renderers that currently
12
+ * hard-code `theme === 'dark' ? darkTheme.colors : lightTheme.colors`.
13
+ *
14
+ * Usage:
15
+ * ```ts
16
+ * import { resolveThemeColors } from '../../tokens'
17
+ *
18
+ * const colors = resolveThemeColors(context.theme, context.isAsiaMarket)
19
+ * ```
20
+ */
21
+ import { lightTheme } from './theme-light';
22
+ import { darkTheme } from './theme-dark';
23
+ import { applyColorPresetOverrides } from './colorPresetSettings';
24
+ /**
25
+ * Swap all bull/bear colour pairs in a Theme so that "up" (bull) uses
26
+ * the formerly "down" (bear) colour and vice versa.
27
+ *
28
+ * @param theme — the base Theme (Western convention)
29
+ * @returns a **new** Theme object; the original is not mutated.
30
+ */
31
+ export function withAsiaMarketColors(theme) {
32
+ return {
33
+ ...theme,
34
+ colors: {
35
+ ...theme.colors,
36
+ // ── Candle / OHLC ──
37
+ candleUpBody: theme.colors.candleDownBody,
38
+ candleDownBody: theme.colors.candleUpBody,
39
+ candleUpBorder: theme.colors.candleDownBorder,
40
+ candleDownBorder: theme.colors.candleUpBorder,
41
+ candleUpWick: theme.colors.candleDownWick,
42
+ candleDownWick: theme.colors.candleUpWick,
43
+ // ── Volume bars ──
44
+ volumeUp: theme.colors.volumeDown,
45
+ volumeDown: theme.colors.volumeUp,
46
+ // ── Footprint (ask = buy = bull, bid = sell = bear) ──
47
+ footprintAsk: theme.colors.footprintBid,
48
+ footprintBid: theme.colors.footprintAsk,
49
+ // ── Nested: price accents ──
50
+ price: {
51
+ ...theme.colors.price,
52
+ upLight: theme.colors.price.downLight,
53
+ downLight: theme.colors.price.upLight,
54
+ upTick: theme.colors.price.downTick,
55
+ downTick: theme.colors.price.upTick,
56
+ },
57
+ // ── Nested: MACD histogram bars ──
58
+ macd: {
59
+ ...theme.colors.macd,
60
+ barUp: theme.colors.macd.barDown,
61
+ barDown: theme.colors.macd.barUp,
62
+ barUpLight: theme.colors.macd.barDownLight,
63
+ barDownLight: theme.colors.macd.barUpLight,
64
+ },
65
+ // ── Nested: SMC structure (HH/HL = bull, LH/LL = bear) ──
66
+ structure: {
67
+ ...theme.colors.structure,
68
+ hh: theme.colors.structure.ll,
69
+ ll: theme.colors.structure.hh,
70
+ hl: theme.colors.structure.lh,
71
+ lh: theme.colors.structure.hl,
72
+ },
73
+ // ── Nested: Zones / FVG / Order Block ──
74
+ zones: {
75
+ ...theme.colors.zones,
76
+ fvgBullFill: theme.colors.zones.fvgBearFill,
77
+ fvgBearFill: theme.colors.zones.fvgBullFill,
78
+ fvgBullBorder: theme.colors.zones.fvgBearBorder,
79
+ fvgBearBorder: theme.colors.zones.fvgBullBorder,
80
+ obBullFill: theme.colors.zones.obBearFill,
81
+ obBearFill: theme.colors.zones.obBullFill,
82
+ },
83
+ // ── Nested: CCI overbought (bull) / oversold (bear) ──
84
+ cci: {
85
+ ...theme.colors.cci,
86
+ overbought: theme.colors.cci.oversold,
87
+ oversold: theme.colors.cci.overbought,
88
+ },
89
+ // ── Nested: WMSR overbought / oversold ──
90
+ wmsr: {
91
+ ...theme.colors.wmsr,
92
+ overbought: theme.colors.wmsr.oversold,
93
+ oversold: theme.colors.wmsr.overbought,
94
+ },
95
+ },
96
+ };
97
+ }
98
+ /**
99
+ * Resolve a theme name + optional Asia-market flag into concrete
100
+ * {@link ColorTokens}.
101
+ *
102
+ * Renderers replace this pattern:
103
+ * ```ts
104
+ * const colors = theme === 'dark' ? darkTheme.colors : lightTheme.colors
105
+ * ```
106
+ * with:
107
+ * ```ts
108
+ * const colors = resolveThemeColors(theme, isAsiaMarket)
109
+ * ```
110
+ */
111
+ export function resolveThemeColors(themeName, isAsiaMarket, colorPresetSettings) {
112
+ const base = themeName === 'dark' ? darkTheme : lightTheme;
113
+ const active = isAsiaMarket ? withAsiaMarketColors(base) : base;
114
+ return applyColorPresetOverrides(active.colors, themeName, colorPresetSettings);
115
+ }
116
+ //# sourceMappingURL=theme-china.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-china.js","sourceRoot":"","sources":["../../src/tokens/theme-china.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Dark theme — paired with {@link lightTheme}.
3
+ *
4
+ * Color choices:
5
+ *
6
+ * - Background = #0E1116 (deep but not pure black — pure black creates
7
+ * halation around bright lines on OLED).
8
+ * - Bull = brighter green (#22D69B) — needed on dark background for
9
+ * 7.5:1 contrast (passes WCAG AAA for non-text).
10
+ * - Bear = brighter red (#FF6464) — 6.2:1 contrast.
11
+ * - Grid is barely visible (1.2:1 over background) so it never competes
12
+ * with the data.
13
+ * - Indicator palette is the same Okabe-Ito set but with the few hues
14
+ * that need a brightness bump on dark background pre-tuned.
15
+ *
16
+ * Same shape as light — only values change. The parity test in
17
+ * `__tests__/themes.test.ts` enforces this.
18
+ */
19
+ import type { Theme } from './types';
20
+ export declare const darkTheme: Theme;
21
+ //# sourceMappingURL=theme-dark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-dark.d.ts","sourceRoot":"","sources":["../../src/tokens/theme-dark.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,eAAO,MAAM,SAAS,EAAE,KA8NvB,CAAA"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Dark theme — paired with {@link lightTheme}.
3
+ *
4
+ * Color choices:
5
+ *
6
+ * - Background = #0E1116 (deep but not pure black — pure black creates
7
+ * halation around bright lines on OLED).
8
+ * - Bull = brighter green (#22D69B) — needed on dark background for
9
+ * 7.5:1 contrast (passes WCAG AAA for non-text).
10
+ * - Bear = brighter red (#FF6464) — 6.2:1 contrast.
11
+ * - Grid is barely visible (1.2:1 over background) so it never competes
12
+ * with the data.
13
+ * - Indicator palette is the same Okabe-Ito set but with the few hues
14
+ * that need a brightness bump on dark background pre-tuned.
15
+ *
16
+ * Same shape as light — only values change. The parity test in
17
+ * `__tests__/themes.test.ts` enforces this.
18
+ */
19
+ export const darkTheme = {
20
+ name: 'dark',
21
+ colors: {
22
+ background: '#111827',
23
+ foreground: '#E8EAED',
24
+ chartBackground: '#111827',
25
+ candleUpBody: '#22D69B',
26
+ candleUpBorder: '#22D69B',
27
+ candleUpWick: '#22D69B',
28
+ candleDownBody: '#FF6464',
29
+ candleDownBorder: '#FF6464',
30
+ candleDownWick: '#FF6464',
31
+ candleDojiBorder: '#8A8F98',
32
+ volumeUp: '#22D69B66',
33
+ volumeDown: '#FF646466',
34
+ axisText: '#9AA0A6',
35
+ axisLine: '#2A2F36',
36
+ axisTick: '#2A2F36',
37
+ gridMajor: '#1B1F26',
38
+ gridMinor: '#161A20',
39
+ crosshairLine: '#5F6368',
40
+ crosshairLabelBg: '#E8EAED',
41
+ crosshairLabelText: '#0E1116',
42
+ selectionFill: '#4A9EFF33',
43
+ selectionStroke: '#4A9EFF',
44
+ tooltipBg: '#1B1F26EE',
45
+ tooltipText: '#E8EAED',
46
+ tooltipBorder: '#2A2F36',
47
+ heatmapColdest: '#0E1116',
48
+ heatmapHottest: '#80B7FF',
49
+ volumeProfileFill: '#6B727A66',
50
+ volumeProfilePoc: '#FFA94D',
51
+ volumeProfileValueArea: '#4A9EFF33',
52
+ footprintAsk: '#22D69B80',
53
+ footprintBid: '#FF646480',
54
+ footprintImbalance: '#FFA94D',
55
+ alertActive: '#4A9EFF',
56
+ alertTriggered: '#FFA94D',
57
+ alertMuted: '#6B727A',
58
+ avwapLine: '#A78BFA',
59
+ avwapBand: '#A78BFA33',
60
+ mtfOverlay: '#38BDF8',
61
+ palette: {
62
+ // Same hue ordering as light theme; values tuned for dark BG.
63
+ i1: '#4A9EFF', // blue (brightened)
64
+ i2: '#FFB95A', // amber
65
+ i3: '#22D69B', // teal-green
66
+ i4: '#E879BA', // pink
67
+ i5: '#FF8848', // burnt orange
68
+ i6: '#7DD3FC', // sky
69
+ i7: '#FCE96A', // yellow
70
+ i8: '#A78BFA', // purple
71
+ i9: '#60A5FA', // blue
72
+ i10: '#9AA0A6', // neutral gray
73
+ indicatorAtr: '#F59E0B',
74
+ },
75
+ // ── Legacy indicator colours (from engine/theme/colors) ──
76
+ text: {
77
+ primary: 'hsl(210, 10%, 85%)',
78
+ secondary: 'hsl(210, 8%, 75%)',
79
+ tertiary: 'hsl(210, 6%, 60%)',
80
+ weak: 'hsl(210, 5%, 45%)',
81
+ white: 'rgba(255, 255, 255, 0.95)',
82
+ },
83
+ price: {
84
+ upLight: 'rgba(255, 80, 100, 0.85)',
85
+ upTick: 'hsl(0, 70%, 60%)',
86
+ downLight: 'rgba(60, 200, 160, 0.85)',
87
+ downTick: 'hsl(150, 50%, 65%)',
88
+ lastPrice: 'rgba(230, 100, 115, 0.95)',
89
+ },
90
+ tagBg: {
91
+ white: 'rgb(40, 40, 55)',
92
+ lightGray: 'rgba(50, 50, 65, 0.92)',
93
+ pureWhite: '#282837',
94
+ transparent: 'transparent',
95
+ active: '#1890ff',
96
+ activeHover: '#40a9ff',
97
+ hover: '#3a3a4a',
98
+ },
99
+ border: {
100
+ dark: 'rgba(255, 255, 255, 0.15)',
101
+ medium: 'rgba(255, 255, 255, 0.12)',
102
+ light: 'rgba(255, 255, 255, 0.08)',
103
+ separator: 'rgba(255, 255, 255, 0.10)',
104
+ button: '#505060',
105
+ chart: '#3A4048',
106
+ },
107
+ ma: {
108
+ ma5: 'rgba(255, 200, 50, 1)',
109
+ ma10: 'rgba(200, 150, 30, 1)',
110
+ ma20: 'rgba(90, 140, 255, 1)',
111
+ ma30: 'rgba(90, 190, 95, 1)',
112
+ ma60: 'rgba(170, 60, 195, 1)',
113
+ },
114
+ boll: {
115
+ upper: 'rgba(200, 60, 60, 1)',
116
+ middle: 'rgba(90, 140, 255, 1)',
117
+ lower: 'rgba(50, 170, 60, 1)',
118
+ bandFill: 'rgba(120, 170, 255, 0.15)',
119
+ },
120
+ macd: {
121
+ dif: 'rgba(90, 140, 255, 1)',
122
+ dea: 'rgba(255, 170, 50, 1)',
123
+ barUp: '#ff6b6b',
124
+ barUpLight: '#ffb3b3',
125
+ barDown: '#4ecdc4',
126
+ barDownLight: '#a8e6e1',
127
+ },
128
+ rsi: {
129
+ rsi1: 'rgba(90, 140, 255, 1)',
130
+ rsi2: 'rgba(255, 170, 50, 1)',
131
+ rsi3: 'rgba(180, 70, 205, 1)',
132
+ },
133
+ cci: {
134
+ cci: 'rgba(90, 140, 255, 1)',
135
+ overbought: 'rgba(255, 80, 100, 0.6)',
136
+ oversold: 'rgba(60, 200, 160, 0.6)',
137
+ },
138
+ kdj: {
139
+ k: 'rgba(90, 140, 255, 1)',
140
+ d: 'rgba(255, 170, 50, 1)',
141
+ j: 'rgba(180, 70, 205, 1)',
142
+ },
143
+ mom: {
144
+ mom: 'rgba(90, 140, 255, 1)',
145
+ zero: 'rgba(255, 255, 255, 0.2)',
146
+ },
147
+ wmsr: {
148
+ wmsr: 'rgba(90, 140, 255, 1)',
149
+ overbought: 'rgba(255, 80, 100, 0.6)',
150
+ oversold: 'rgba(60, 200, 160, 0.6)',
151
+ },
152
+ kst: {
153
+ kst: 'rgba(90, 140, 255, 1)',
154
+ signal: 'rgba(255, 170, 50, 1)',
155
+ },
156
+ expma: {
157
+ fast: 'rgba(255, 170, 50, 1)',
158
+ slow: 'rgba(90, 140, 255, 1)',
159
+ },
160
+ ene: {
161
+ upper: 'rgba(255, 80, 100, 1)',
162
+ middle: 'rgba(90, 140, 255, 1)',
163
+ lower: 'rgba(60, 200, 160, 1)',
164
+ bandFill: 'rgba(90, 140, 255, 0.12)',
165
+ },
166
+ label: {
167
+ bg: 'rgba(30, 30, 40, 0.9)',
168
+ text: '#ffffff',
169
+ },
170
+ lastPriceLabel: {
171
+ bg: 'rgba(60, 50, 55, 0.98)',
172
+ },
173
+ volumePrice: {
174
+ riseWith: '#FF6666',
175
+ riseWithout: '#66FF99',
176
+ fallWith: '#FF6666',
177
+ fallWithout: '#66FF99',
178
+ },
179
+ structure: {
180
+ hh: '#4ade80',
181
+ hl: '#22c55e',
182
+ lh: '#f87171',
183
+ ll: '#ef4444',
184
+ choch: '#a78bfa',
185
+ bos: '#fbbf24',
186
+ },
187
+ zones: {
188
+ fvgBullFill: 'rgba(74, 222, 128, 0.20)',
189
+ fvgBearFill: 'rgba(248, 113, 113, 0.20)',
190
+ fvgBullBorder: 'rgba(74, 222, 128, 0.8)',
191
+ fvgBearBorder: 'rgba(248, 113, 113, 0.8)',
192
+ obBullFill: 'rgba(74, 222, 128, 0.35)',
193
+ obBearFill: 'rgba(248, 113, 113, 0.35)',
194
+ },
195
+ wmsrGrid: 'rgba(255, 255, 255, 0.1)',
196
+ },
197
+ spacing: {
198
+ none: '0',
199
+ xxs: '2px',
200
+ xs: '4px',
201
+ sm: '8px',
202
+ md: '12px',
203
+ lg: '16px',
204
+ xl: '24px',
205
+ xxl: '32px',
206
+ xxxl: '64px',
207
+ },
208
+ typography: {
209
+ fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
210
+ fontFamilyMono: "ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
211
+ fontSizeSm: '10px',
212
+ fontSizeMd: '12px',
213
+ fontSizeLg: '14px',
214
+ fontWeightRegular: 400,
215
+ fontWeightMedium: 500,
216
+ fontWeightBold: 700,
217
+ lineHeightTight: 1.2,
218
+ lineHeightStandard: 1.4,
219
+ },
220
+ motion: {
221
+ durationInstant: '0ms',
222
+ durationFast: '120ms',
223
+ durationModerate: '200ms',
224
+ easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
225
+ easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
226
+ },
227
+ };
228
+ //# sourceMappingURL=theme-dark.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-dark.js","sourceRoot":"","sources":["../../src/tokens/theme-dark.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Light theme — concrete token values.
3
+ *
4
+ * Color choices:
5
+ *
6
+ * - Bull (up) = a dark saturated green (#0F8B5C). Picked to clear the
7
+ * WCAG AA non-text threshold (≥ 3:1) against #FAFAFA. The lighter
8
+ * industry-standard greens like #26A69A fail that bar by ~25 %.
9
+ * - Bear (down) = a dark saturated red (#C2363B). Same rationale —
10
+ * the common #EE4D4D fails AA at ~2.6:1.
11
+ * - Background = #FAFAFA (slightly off-white, kinder to eyes than pure
12
+ * #FFFFFF for long sessions).
13
+ * - Grid major / minor split: major lines for round-number price tiers,
14
+ * minor for between-tier rhythm. Both very low contrast (1.3:1, 1.1:1)
15
+ * so they don't dominate.
16
+ *
17
+ * Indicator palette: ten qualitatively distinct hues using the Okabe-Ito
18
+ * colorblind-safe set (extended to ten by adding three desaturated mids).
19
+ * Each WCAG AA against the background (>= 3:1 for non-text).
20
+ */
21
+ import type { Theme } from './types';
22
+ export declare const lightTheme: Theme;
23
+ //# sourceMappingURL=theme-light.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-light.d.ts","sourceRoot":"","sources":["../../src/tokens/theme-light.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,eAAO,MAAM,UAAU,EAAE,KAkOxB,CAAA"}