@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,234 @@
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
+ export const lightTheme = {
22
+ name: 'light',
23
+ colors: {
24
+ background: '#FAFAFA',
25
+ foreground: '#1F1F1F',
26
+ chartBackground: '#FFFFFF',
27
+ candleUpBody: '#0F8B5C',
28
+ candleUpBorder: '#0F8B5C',
29
+ candleUpWick: '#0F8B5C',
30
+ candleDownBody: '#C2363B',
31
+ candleDownBorder: '#C2363B',
32
+ candleDownWick: '#C2363B',
33
+ candleDojiBorder: '#6E6E6E',
34
+ volumeUp: '#0F8B5C66', // 40% alpha — paired with candleUp
35
+ volumeDown: '#C2363B66',
36
+ axisText: '#5A5A5A',
37
+ axisLine: '#D0D0D0',
38
+ axisTick: '#D0D0D0',
39
+ gridMajor: '#E5E5E5',
40
+ gridMinor: '#F0F0F0',
41
+ crosshairLine: '#8C8C8C',
42
+ crosshairLabelBg: '#1F1F1F',
43
+ crosshairLabelText: '#FAFAFA',
44
+ selectionFill: '#2D7FF933',
45
+ selectionStroke: '#2D7FF9',
46
+ tooltipBg: '#FFFFFFEE',
47
+ tooltipText: '#1F1F1F',
48
+ tooltipBorder: '#D0D0D0',
49
+ heatmapColdest: '#F0F4F8',
50
+ heatmapHottest: '#1F3A5F',
51
+ volumeProfileFill: '#9CA3AF66',
52
+ volumeProfilePoc: '#F97316',
53
+ volumeProfileValueArea: '#2D7FF933',
54
+ footprintAsk: '#0F8B5C80',
55
+ footprintBid: '#C2363B80',
56
+ footprintImbalance: '#F97316',
57
+ alertActive: '#2D7FF9',
58
+ // alertTriggered: orange #F97316 was 2.69:1 on white (fails AA
59
+ // non-text). Darkened to #C2410C → 4.13:1.
60
+ alertTriggered: '#C2410C',
61
+ alertMuted: '#9CA3AF',
62
+ avwapLine: '#7C3AED',
63
+ avwapBand: '#7C3AED33',
64
+ // mtfOverlay: sky #0EA5E9 was 2.66:1 on white. Darkened to
65
+ // #0369A1 → 4.59:1.
66
+ mtfOverlay: '#0369A1',
67
+ palette: {
68
+ // Okabe-Ito-derived qualitative scale, AA on #FAFAFA
69
+ i1: '#0072B2', // strong blue
70
+ i2: '#E69F00', // amber
71
+ i3: '#009E73', // teal-green
72
+ i4: '#CC79A7', // pink
73
+ i5: '#D55E00', // burnt orange
74
+ i6: '#56B4E9', // sky
75
+ i7: '#F0E442', // yellow (use sparingly — low contrast)
76
+ i8: '#7C3AED', // purple
77
+ i9: '#2D7FF9', // blue
78
+ i10: '#6E6E6E', // neutral gray
79
+ indicatorAtr: '#d97706',
80
+ },
81
+ // ── Legacy indicator colours (from engine/theme/colors) ──
82
+ text: {
83
+ primary: 'hsl(210, 9%, 31%)',
84
+ secondary: 'hsl(210, 9%, 35%)',
85
+ tertiary: 'hsl(210, 8%, 50%)',
86
+ weak: 'hsl(210, 7%, 65%)',
87
+ white: 'rgba(255, 255, 255, 0.92)',
88
+ },
89
+ price: {
90
+ upLight: 'rgba(214, 10, 34, 0.92)',
91
+ upTick: 'hsl(0, 60%, 50%)',
92
+ downLight: 'rgba(3, 123, 102, 0.92)',
93
+ downTick: 'hsl(150, 30%, 60%)',
94
+ lastPrice: 'rgba(196, 74, 86, 0.95)',
95
+ },
96
+ tagBg: {
97
+ white: 'rgb(255, 255, 255)',
98
+ lightGray: 'rgba(255, 255, 255, 0.92)',
99
+ pureWhite: '#ffffff',
100
+ transparent: 'transparent',
101
+ active: '#1890ff',
102
+ activeHover: '#40a9ff',
103
+ hover: '#f0f0f0',
104
+ },
105
+ border: {
106
+ dark: 'rgba(0, 0, 0, 0.12)',
107
+ medium: 'rgba(0, 0, 0, 0.10)',
108
+ light: 'rgba(0, 0, 0, 0.08)',
109
+ separator: 'rgba(0, 0, 0, 0.10)',
110
+ button: '#d0d0d0',
111
+ chart: '#e5e5e5',
112
+ },
113
+ ma: {
114
+ ma5: 'rgba(255, 193, 37, 1)',
115
+ ma10: 'rgba(190, 131, 12, 1)',
116
+ ma20: 'rgba(69, 112, 249, 1)',
117
+ ma30: 'rgba(76, 175, 80, 1)',
118
+ ma60: 'rgba(156, 39, 176, 1)',
119
+ },
120
+ boll: {
121
+ upper: 'rgba(178, 34, 34, 1)',
122
+ middle: 'rgba(69, 112, 249, 1)',
123
+ lower: 'rgba(34, 139, 34, 1)',
124
+ bandFill: 'rgba(100, 149, 237, 0.1)',
125
+ },
126
+ macd: {
127
+ dif: 'rgba(69, 112, 249, 1)',
128
+ dea: 'rgba(255, 152, 0, 1)',
129
+ barUp: '#ff5252',
130
+ barUpLight: '#fccbcd',
131
+ barDown: '#22ab94',
132
+ barDownLight: '#ace5dc',
133
+ },
134
+ rsi: {
135
+ rsi1: 'rgba(69, 112, 249, 1)',
136
+ rsi2: 'rgba(255, 152, 0, 1)',
137
+ rsi3: 'rgba(156, 39, 176, 1)',
138
+ },
139
+ cci: {
140
+ cci: 'rgba(69, 112, 249, 1)',
141
+ overbought: 'rgba(214, 10, 34, 0.5)',
142
+ oversold: 'rgba(3, 123, 102, 0.5)',
143
+ },
144
+ kdj: {
145
+ k: 'rgba(69, 112, 249, 1)',
146
+ d: 'rgba(255, 152, 0, 1)',
147
+ j: 'rgba(156, 39, 176, 1)',
148
+ },
149
+ mom: {
150
+ mom: 'rgba(69, 112, 249, 1)',
151
+ zero: 'rgba(0, 0, 0, 0.2)',
152
+ },
153
+ wmsr: {
154
+ wmsr: 'rgba(69, 112, 249, 1)',
155
+ overbought: 'rgba(214, 10, 34, 0.5)',
156
+ oversold: 'rgba(3, 123, 102, 0.5)',
157
+ },
158
+ kst: {
159
+ kst: 'rgba(69, 112, 249, 1)',
160
+ signal: 'rgba(255, 152, 0, 1)',
161
+ },
162
+ expma: {
163
+ fast: 'rgba(255, 152, 0, 1)',
164
+ slow: 'rgba(69, 112, 249, 1)',
165
+ },
166
+ ene: {
167
+ upper: 'rgba(214, 10, 34, 1)',
168
+ middle: 'rgba(69, 112, 249, 1)',
169
+ lower: 'rgba(3, 123, 102, 1)',
170
+ bandFill: 'rgba(69, 112, 249, 0.08)',
171
+ },
172
+ label: {
173
+ bg: 'rgba(0, 0, 0, 0.8)',
174
+ text: '#ffffff',
175
+ },
176
+ lastPriceLabel: {
177
+ bg: 'rgba(255, 247, 248, 0.98)',
178
+ },
179
+ volumePrice: {
180
+ riseWith: '#FF4444',
181
+ riseWithout: '#00C853',
182
+ fallWith: '#FF4444',
183
+ fallWithout: '#00C853',
184
+ },
185
+ structure: {
186
+ hh: '#16a34a',
187
+ hl: '#22c55e',
188
+ lh: '#dc2626',
189
+ ll: '#ef4444',
190
+ choch: '#8b5cf6',
191
+ bos: '#f59e0b',
192
+ },
193
+ zones: {
194
+ fvgBullFill: 'rgba(34, 197, 94, 0.15)',
195
+ fvgBearFill: 'rgba(239, 68, 68, 0.15)',
196
+ fvgBullBorder: 'rgba(34, 197, 94, 0.6)',
197
+ fvgBearBorder: 'rgba(239, 68, 68, 0.6)',
198
+ obBullFill: 'rgba(34, 197, 94, 0.25)',
199
+ obBearFill: 'rgba(239, 68, 68, 0.25)',
200
+ },
201
+ wmsrGrid: 'rgba(0, 0, 0, 0.1)',
202
+ },
203
+ spacing: {
204
+ none: '0',
205
+ xxs: '2px',
206
+ xs: '4px',
207
+ sm: '8px',
208
+ md: '12px',
209
+ lg: '16px',
210
+ xl: '24px',
211
+ xxl: '32px',
212
+ xxxl: '64px',
213
+ },
214
+ typography: {
215
+ fontFamily: "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
216
+ fontFamilyMono: "ui-monospace, SFMono-Regular, Menlo, Consolas, 'Liberation Mono', monospace",
217
+ fontSizeSm: '10px',
218
+ fontSizeMd: '12px',
219
+ fontSizeLg: '14px',
220
+ fontWeightRegular: 400,
221
+ fontWeightMedium: 500,
222
+ fontWeightBold: 700,
223
+ lineHeightTight: 1.2,
224
+ lineHeightStandard: 1.4,
225
+ },
226
+ motion: {
227
+ durationInstant: '0ms',
228
+ durationFast: '120ms',
229
+ durationModerate: '200ms',
230
+ easingStandard: 'cubic-bezier(0.4, 0, 0.2, 1)',
231
+ easingDecelerate: 'cubic-bezier(0, 0, 0.2, 1)',
232
+ },
233
+ };
234
+ //# sourceMappingURL=theme-light.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-light.js","sourceRoot":"","sources":["../../src/tokens/theme-light.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Theme → CSS custom-property emitter.
3
+ *
4
+ * Bridges the typed tokens in `theme-light.ts` / `theme-dark.ts` to the
5
+ * actual stylesheet, so any framework can apply a theme by inserting a
6
+ * `:root { ... }` block or attaching a `style="..."` attribute.
7
+ *
8
+ * Naming convention (kebab-case, dot-paths flattened with `-`):
9
+ *
10
+ * Theme key CSS variable
11
+ * ─────────────────────────────────────── ────────────────────────────
12
+ * colors.background `--klc-color-background`
13
+ * colors.candleUpBody `--klc-color-candle-up-body`
14
+ * colors.palette.i1 `--klc-color-palette-i1`
15
+ * spacing.md `--klc-spacing-md`
16
+ * typography.fontFamily `--klc-typography-font-family`
17
+ * typography.fontWeightRegular `--klc-typography-font-weight-regular`
18
+ * motion.durationFast `--klc-motion-duration-fast`
19
+ *
20
+ * Numeric tokens (font weights, line heights) emit as strings — CSS doesn't
21
+ * care, and consumers consume them through `var(...)` so the type tag is
22
+ * lost in the round-trip anyway.
23
+ *
24
+ * Prefix is configurable. Default `--klc-` (KLineChart Quant) is short
25
+ * enough to type and unique enough to coexist with other token systems
26
+ * (Tailwind, MUI, Radix) on the same page.
27
+ */
28
+ import type { Theme } from './types';
29
+ export interface ThemeToCssVarsOptions {
30
+ /**
31
+ * CSS custom-property prefix. Default `'--klc-'`. Must start with `--`.
32
+ * Including the trailing dash is recommended (kebab-case continues
33
+ * cleanly from there).
34
+ */
35
+ readonly prefix?: string;
36
+ }
37
+ /**
38
+ * camelCase → kebab-case.
39
+ *
40
+ * 'candleUpBody' → 'candle-up-body'
41
+ * 'fontWeightRegular' → 'font-weight-regular'
42
+ * 'i1' → 'i1' (already kebab-safe)
43
+ */
44
+ export declare function camelToKebab(s: string): string;
45
+ /**
46
+ * Emit a `{ [cssVarName]: value }` map for the given theme.
47
+ *
48
+ * Hand the result to:
49
+ *
50
+ * - React: `<div style={vars as React.CSSProperties}>...`
51
+ * - Vue: `:style="vars"`
52
+ * - Angular: `[ngStyle]="vars"`
53
+ * - Vanilla: `Object.assign(el.style, vars)` or emit
54
+ * `':root { ... }'` directly via {@link toCssDeclarationBlock}.
55
+ *
56
+ * The shape is stable: the same theme produces the same map across calls,
57
+ * and `mergeTheme(base, override)` produces a superset emit (keys are the
58
+ * same; values may differ).
59
+ */
60
+ export declare function themeToCssVars(theme: Theme, opts?: ThemeToCssVarsOptions): Record<string, string>;
61
+ /**
62
+ * Render the emitted map as a `:root { ... }` CSS declaration block.
63
+ * Useful for SSR scenarios where you want to inject a `<style>` element
64
+ * server-side so the first paint already carries the theme.
65
+ *
66
+ * const css = toCssDeclarationBlock(themeToCssVars(darkTheme))
67
+ * // → ":root {\n --klc-color-background: #0E1116;\n ...\n}"
68
+ *
69
+ * The selector defaults to `:root` but can be overridden — common
70
+ * alternatives are `[data-theme="dark"]` for runtime theme switching
71
+ * or `.klc-theme-dark` for scoped overrides.
72
+ */
73
+ export declare function toCssDeclarationBlock(vars: Record<string, string>, selector?: string): string;
74
+ //# sourceMappingURL=themeToCssVars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeToCssVars.d.ts","sourceRoot":"","sources":["../../src/tokens/themeToCssVars.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,MAAM,WAAW,qBAAqB;IAClC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAC3B;AAID;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C;AAgCD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC1B,KAAK,EAAE,KAAK,EACZ,IAAI,CAAC,EAAE,qBAAqB,GAC7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,QAAQ,GAAE,MAAgB,GAC3B,MAAM,CAKR"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Theme → CSS custom-property emitter.
3
+ *
4
+ * Bridges the typed tokens in `theme-light.ts` / `theme-dark.ts` to the
5
+ * actual stylesheet, so any framework can apply a theme by inserting a
6
+ * `:root { ... }` block or attaching a `style="..."` attribute.
7
+ *
8
+ * Naming convention (kebab-case, dot-paths flattened with `-`):
9
+ *
10
+ * Theme key CSS variable
11
+ * ─────────────────────────────────────── ────────────────────────────
12
+ * colors.background `--klc-color-background`
13
+ * colors.candleUpBody `--klc-color-candle-up-body`
14
+ * colors.palette.i1 `--klc-color-palette-i1`
15
+ * spacing.md `--klc-spacing-md`
16
+ * typography.fontFamily `--klc-typography-font-family`
17
+ * typography.fontWeightRegular `--klc-typography-font-weight-regular`
18
+ * motion.durationFast `--klc-motion-duration-fast`
19
+ *
20
+ * Numeric tokens (font weights, line heights) emit as strings — CSS doesn't
21
+ * care, and consumers consume them through `var(...)` so the type tag is
22
+ * lost in the round-trip anyway.
23
+ *
24
+ * Prefix is configurable. Default `--klc-` (KLineChart Quant) is short
25
+ * enough to type and unique enough to coexist with other token systems
26
+ * (Tailwind, MUI, Radix) on the same page.
27
+ */
28
+ const DEFAULT_PREFIX = '--klc-';
29
+ /**
30
+ * camelCase → kebab-case.
31
+ *
32
+ * 'candleUpBody' → 'candle-up-body'
33
+ * 'fontWeightRegular' → 'font-weight-regular'
34
+ * 'i1' → 'i1' (already kebab-safe)
35
+ */
36
+ export function camelToKebab(s) {
37
+ return s.replace(/[A-Z]/g, (m, i) => (i === 0 ? m.toLowerCase() : '-' + m.toLowerCase()));
38
+ }
39
+ function flattenColors(colors, prefix) {
40
+ const out = {};
41
+ for (const [k, v] of Object.entries(colors)) {
42
+ if (typeof v === 'object' && v !== null) {
43
+ const ns = camelToKebab(k);
44
+ for (const [nk, nv] of Object.entries(v)) {
45
+ out[`${prefix}color-${ns}-${camelToKebab(nk)}`] = nv;
46
+ }
47
+ }
48
+ else {
49
+ out[`${prefix}color-${camelToKebab(k)}`] = v;
50
+ }
51
+ }
52
+ return out;
53
+ }
54
+ function flattenFamily(family, prefix, namespace) {
55
+ const out = {};
56
+ for (const [k, v] of Object.entries(family)) {
57
+ out[`${prefix}${namespace}-${camelToKebab(k)}`] = String(v);
58
+ }
59
+ return out;
60
+ }
61
+ /**
62
+ * Emit a `{ [cssVarName]: value }` map for the given theme.
63
+ *
64
+ * Hand the result to:
65
+ *
66
+ * - React: `<div style={vars as React.CSSProperties}>...`
67
+ * - Vue: `:style="vars"`
68
+ * - Angular: `[ngStyle]="vars"`
69
+ * - Vanilla: `Object.assign(el.style, vars)` or emit
70
+ * `':root { ... }'` directly via {@link toCssDeclarationBlock}.
71
+ *
72
+ * The shape is stable: the same theme produces the same map across calls,
73
+ * and `mergeTheme(base, override)` produces a superset emit (keys are the
74
+ * same; values may differ).
75
+ */
76
+ export function themeToCssVars(theme, opts) {
77
+ const prefix = opts?.prefix ?? DEFAULT_PREFIX;
78
+ if (!prefix.startsWith('--')) {
79
+ // Misuse caught here is much friendlier than the silent no-op CSS
80
+ // would give downstream.
81
+ throw new Error(`themeToCssVars: prefix must start with '--', got ${JSON.stringify(prefix)}`);
82
+ }
83
+ return {
84
+ ...flattenColors(theme.colors, prefix),
85
+ ...flattenFamily(theme.spacing, prefix, 'spacing'),
86
+ ...flattenFamily(theme.typography, prefix, 'typography'),
87
+ ...flattenFamily(theme.motion, prefix, 'motion'),
88
+ };
89
+ }
90
+ /**
91
+ * Render the emitted map as a `:root { ... }` CSS declaration block.
92
+ * Useful for SSR scenarios where you want to inject a `<style>` element
93
+ * server-side so the first paint already carries the theme.
94
+ *
95
+ * const css = toCssDeclarationBlock(themeToCssVars(darkTheme))
96
+ * // → ":root {\n --klc-color-background: #0E1116;\n ...\n}"
97
+ *
98
+ * The selector defaults to `:root` but can be overridden — common
99
+ * alternatives are `[data-theme="dark"]` for runtime theme switching
100
+ * or `.klc-theme-dark` for scoped overrides.
101
+ */
102
+ export function toCssDeclarationBlock(vars, selector = ':root') {
103
+ const decls = Object.entries(vars)
104
+ .map(([k, v]) => ` ${k}: ${v};`)
105
+ .join('\n');
106
+ return `${selector} {\n${decls}\n}`;
107
+ }
108
+ //# sourceMappingURL=themeToCssVars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"themeToCssVars.js","sourceRoot":"","sources":["../../src/tokens/themeToCssVars.ts"],"names":[],"mappings":"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"}