@tradecanvas/chart 1.71.0 → 1.72.1

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 (177) hide show
  1. package/dist/LayoutSession-DO4bYkUi.cjs +2 -0
  2. package/dist/LayoutSession-DO4bYkUi.cjs.map +1 -0
  3. package/dist/{LayoutSession-BOQCN6yY.js → LayoutSession-qRYG8GTD.js} +539 -552
  4. package/dist/LayoutSession-qRYG8GTD.js.map +1 -0
  5. package/dist/WidgetCommandPalette-CeCLHPy1.js +177 -0
  6. package/dist/WidgetCommandPalette-CeCLHPy1.js.map +1 -0
  7. package/dist/WidgetCommandPalette-ZZNbWwCZ.cjs +2 -0
  8. package/dist/WidgetCommandPalette-ZZNbWwCZ.cjs.map +1 -0
  9. package/dist/WidgetDrawingSettings-BeW8fX7r.js +474 -0
  10. package/dist/WidgetDrawingSettings-BeW8fX7r.js.map +1 -0
  11. package/dist/WidgetDrawingSettings-Cyl2u_u8.cjs +2 -0
  12. package/dist/WidgetDrawingSettings-Cyl2u_u8.cjs.map +1 -0
  13. package/dist/WidgetGoToDate-BNdngHlg.cjs +2 -0
  14. package/dist/WidgetGoToDate-BNdngHlg.cjs.map +1 -0
  15. package/dist/WidgetGoToDate-hcDtezRm.js +191 -0
  16. package/dist/WidgetGoToDate-hcDtezRm.js.map +1 -0
  17. package/dist/WidgetHotkeySheet-1lRFSdvt.js +416 -0
  18. package/dist/WidgetHotkeySheet-1lRFSdvt.js.map +1 -0
  19. package/dist/WidgetHotkeySheet-y5LWKSG6.cjs +2 -0
  20. package/dist/WidgetHotkeySheet-y5LWKSG6.cjs.map +1 -0
  21. package/dist/WidgetIndicatorPicker-CGvZ5kYd.js +245 -0
  22. package/dist/WidgetIndicatorPicker-CGvZ5kYd.js.map +1 -0
  23. package/dist/WidgetIndicatorPicker-DuKJFPRC.cjs +2 -0
  24. package/dist/WidgetIndicatorPicker-DuKJFPRC.cjs.map +1 -0
  25. package/dist/WidgetIndicatorSettings-C7vpco6e.cjs +2 -0
  26. package/dist/WidgetIndicatorSettings-C7vpco6e.cjs.map +1 -0
  27. package/dist/WidgetIndicatorSettings-dDkqzzYo.js +326 -0
  28. package/dist/WidgetIndicatorSettings-dDkqzzYo.js.map +1 -0
  29. package/dist/WidgetSettings-D7Pq42zW.cjs +2 -0
  30. package/dist/WidgetSettings-D7Pq42zW.cjs.map +1 -0
  31. package/dist/WidgetSettings-eOo93L7Z.js +546 -0
  32. package/dist/WidgetSettings-eOo93L7Z.js.map +1 -0
  33. package/dist/WidgetSymbolSearch-C4OR42nZ.cjs +2 -0
  34. package/dist/WidgetSymbolSearch-C4OR42nZ.cjs.map +1 -0
  35. package/dist/WidgetSymbolSearch-CvPpjIwa.js +580 -0
  36. package/dist/WidgetSymbolSearch-CvPpjIwa.js.map +1 -0
  37. package/dist/focusTrap-Br9Zfje0.js +27 -0
  38. package/dist/focusTrap-Br9Zfje0.js.map +1 -0
  39. package/dist/focusTrap-DrhhmG0V.cjs +2 -0
  40. package/dist/focusTrap-DrhhmG0V.cjs.map +1 -0
  41. package/dist/i18n-C2nQBZTY.cjs +2 -0
  42. package/dist/i18n-C2nQBZTY.cjs.map +1 -0
  43. package/dist/{i18n-DUmd4Z_r.js → i18n-C5v6Tzp1.js} +3 -1
  44. package/dist/i18n-C5v6Tzp1.js.map +1 -0
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +1 -1
  49. package/dist/indicatorInputWords-Bd9Pt6qp.js +25 -0
  50. package/dist/indicatorInputWords-Bd9Pt6qp.js.map +1 -0
  51. package/dist/indicatorInputWords-CTA4IcJR.cjs +2 -0
  52. package/dist/indicatorInputWords-CTA4IcJR.cjs.map +1 -0
  53. package/dist/indicatorLabel-BNZvaOcl.cjs +2 -0
  54. package/dist/indicatorLabel-BNZvaOcl.cjs.map +1 -0
  55. package/dist/indicatorLabel-Sbegyhp2.js +17 -0
  56. package/dist/indicatorLabel-Sbegyhp2.js.map +1 -0
  57. package/dist/indicatorSettingsTabs-B0liE3ST.cjs +2 -0
  58. package/dist/indicatorSettingsTabs-B0liE3ST.cjs.map +1 -0
  59. package/dist/indicatorSettingsTabs-XcgMdbLp.js +161 -0
  60. package/dist/indicatorSettingsTabs-XcgMdbLp.js.map +1 -0
  61. package/dist/monthView-B-CieFDJ.cjs +2 -0
  62. package/dist/monthView-B-CieFDJ.cjs.map +1 -0
  63. package/dist/monthView-N8yDaTqZ.js +198 -0
  64. package/dist/monthView-N8yDaTqZ.js.map +1 -0
  65. package/dist/platformKeys-B82-j1Fs.cjs +2 -0
  66. package/dist/platformKeys-B82-j1Fs.cjs.map +1 -0
  67. package/dist/platformKeys-Dd1qOCjF.js +5 -0
  68. package/dist/platformKeys-Dd1qOCjF.js.map +1 -0
  69. package/dist/settingsControls-DIjzCFHI.js +379 -0
  70. package/dist/settingsControls-DIjzCFHI.js.map +1 -0
  71. package/dist/settingsControls-Tn8_vJJv.cjs +2 -0
  72. package/dist/settingsControls-Tn8_vJJv.cjs.map +1 -0
  73. package/dist/symbolCatalog-CA1fpz3s.js +90 -0
  74. package/dist/symbolCatalog-CA1fpz3s.js.map +1 -0
  75. package/dist/symbolCatalog-Dx1YnZgm.cjs +2 -0
  76. package/dist/symbolCatalog-Dx1YnZgm.cjs.map +1 -0
  77. package/dist/widget/ChartWidget.d.ts +102 -582
  78. package/dist/widget/ChartWidget.d.ts.map +1 -1
  79. package/dist/widget/WidgetAlerts.d.ts +35 -0
  80. package/dist/widget/WidgetAlerts.d.ts.map +1 -0
  81. package/dist/widget/WidgetChartSettings.d.ts +194 -0
  82. package/dist/widget/WidgetChartSettings.d.ts.map +1 -0
  83. package/dist/widget/WidgetCommands.d.ts +54 -0
  84. package/dist/widget/WidgetCommands.d.ts.map +1 -0
  85. package/dist/widget/WidgetCompares.d.ts +140 -0
  86. package/dist/widget/WidgetCompares.d.ts.map +1 -0
  87. package/dist/widget/WidgetDockArea.d.ts +89 -0
  88. package/dist/widget/WidgetDockArea.d.ts.map +1 -0
  89. package/dist/widget/WidgetDrawingEdit.d.ts +73 -0
  90. package/dist/widget/WidgetDrawingEdit.d.ts.map +1 -0
  91. package/dist/widget/WidgetGoToDate.d.ts +1 -14
  92. package/dist/widget/WidgetGoToDate.d.ts.map +1 -1
  93. package/dist/widget/WidgetIndicatorSettings.d.ts.map +1 -1
  94. package/dist/widget/WidgetIntervals.d.ts +66 -0
  95. package/dist/widget/WidgetIntervals.d.ts.map +1 -0
  96. package/dist/widget/WidgetLayouts.d.ts +85 -0
  97. package/dist/widget/WidgetLayouts.d.ts.map +1 -0
  98. package/dist/widget/WidgetLegendView.d.ts +54 -0
  99. package/dist/widget/WidgetLegendView.d.ts.map +1 -0
  100. package/dist/widget/WidgetMenus.d.ts +79 -0
  101. package/dist/widget/WidgetMenus.d.ts.map +1 -0
  102. package/dist/widget/WidgetReplay.d.ts +199 -0
  103. package/dist/widget/WidgetReplay.d.ts.map +1 -0
  104. package/dist/widget/WidgetTrading.d.ts +48 -0
  105. package/dist/widget/WidgetTrading.d.ts.map +1 -0
  106. package/dist/widget/WidgetWatchlists.d.ts +77 -0
  107. package/dist/widget/WidgetWatchlists.d.ts.map +1 -0
  108. package/dist/widget/drawingSettingsTabs.d.ts +2 -19
  109. package/dist/widget/drawingSettingsTabs.d.ts.map +1 -1
  110. package/dist/widget/drawingText.d.ts +24 -0
  111. package/dist/widget/drawingText.d.ts.map +1 -0
  112. package/dist/widget/index.cjs +22 -23
  113. package/dist/widget/index.cjs.map +1 -1
  114. package/dist/widget/index.js +6193 -9868
  115. package/dist/widget/index.js.map +1 -1
  116. package/dist/widget/keyTarget.d.ts +4 -0
  117. package/dist/widget/keyTarget.d.ts.map +1 -1
  118. package/dist/widget/lazyPart.d.ts +47 -0
  119. package/dist/widget/lazyPart.d.ts.map +1 -0
  120. package/dist/widget/locales/ar.d.ts.map +1 -1
  121. package/dist/widget/locales/cs.d.ts.map +1 -1
  122. package/dist/widget/locales/da.d.ts.map +1 -1
  123. package/dist/widget/locales/de.d.ts.map +1 -1
  124. package/dist/widget/locales/el.d.ts.map +1 -1
  125. package/dist/widget/locales/en.d.ts +1 -0
  126. package/dist/widget/locales/en.d.ts.map +1 -1
  127. package/dist/widget/locales/es.d.ts.map +1 -1
  128. package/dist/widget/locales/et.d.ts.map +1 -1
  129. package/dist/widget/locales/fa.d.ts.map +1 -1
  130. package/dist/widget/locales/fr.d.ts.map +1 -1
  131. package/dist/widget/locales/he.d.ts.map +1 -1
  132. package/dist/widget/locales/hu.d.ts.map +1 -1
  133. package/dist/widget/locales/id.d.ts.map +1 -1
  134. package/dist/widget/locales/index.cjs +1 -1
  135. package/dist/widget/locales/index.cjs.map +1 -1
  136. package/dist/widget/locales/index.js +29 -1
  137. package/dist/widget/locales/index.js.map +1 -1
  138. package/dist/widget/locales/it.d.ts.map +1 -1
  139. package/dist/widget/locales/ja.d.ts.map +1 -1
  140. package/dist/widget/locales/ko.d.ts.map +1 -1
  141. package/dist/widget/locales/ms.d.ts.map +1 -1
  142. package/dist/widget/locales/nb.d.ts.map +1 -1
  143. package/dist/widget/locales/nl.d.ts.map +1 -1
  144. package/dist/widget/locales/pl.d.ts.map +1 -1
  145. package/dist/widget/locales/pt.d.ts.map +1 -1
  146. package/dist/widget/locales/ro.d.ts.map +1 -1
  147. package/dist/widget/locales/ru.d.ts.map +1 -1
  148. package/dist/widget/locales/sk.d.ts.map +1 -1
  149. package/dist/widget/locales/sv.d.ts.map +1 -1
  150. package/dist/widget/locales/th.d.ts.map +1 -1
  151. package/dist/widget/locales/tr.d.ts.map +1 -1
  152. package/dist/widget/locales/vi.d.ts.map +1 -1
  153. package/dist/widget/locales/zh.d.ts.map +1 -1
  154. package/dist/widget/locales/zhHant.d.ts.map +1 -1
  155. package/dist/widget/pageEnv.d.ts +5 -0
  156. package/dist/widget/pageEnv.d.ts.map +1 -0
  157. package/dist/widget/signals.d.ts +41 -0
  158. package/dist/widget/signals.d.ts.map +1 -0
  159. package/dist/widget/wallTime.d.ts +15 -0
  160. package/dist/widget/wallTime.d.ts.map +1 -0
  161. package/dist/widget/widgetDialogs.d.ts +17 -0
  162. package/dist/widget/widgetDialogs.d.ts.map +1 -0
  163. package/dist/widgetFeatures-BM6u0u74.js +186 -0
  164. package/dist/widgetFeatures-BM6u0u74.js.map +1 -0
  165. package/dist/widgetFeatures-BZ8OVPN2.cjs +3 -0
  166. package/dist/widgetFeatures-BZ8OVPN2.cjs.map +1 -0
  167. package/dist/widgetLocales-BPK5i0Ok.cjs +2 -0
  168. package/dist/widgetLocales-BPK5i0Ok.cjs.map +1 -0
  169. package/dist/widgetLocales-DgTR8JSu.js +838 -0
  170. package/dist/widgetLocales-DgTR8JSu.js.map +1 -0
  171. package/package.json +3 -3
  172. package/dist/LayoutSession-BOQCN6yY.js.map +0 -1
  173. package/dist/LayoutSession-RF8OqOXy.cjs +0 -2
  174. package/dist/LayoutSession-RF8OqOXy.cjs.map +0 -1
  175. package/dist/i18n-BsstZ9md.cjs +0 -2
  176. package/dist/i18n-BsstZ9md.cjs.map +0 -1
  177. package/dist/i18n-DUmd4Z_r.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"it.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/it.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAe;AACf,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"it.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/it.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,eAAe;AACf,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ja.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ja.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,UAAU;AACV,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"ja.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ja.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,UAAU;AACV,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ko.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,UAAU;AACV,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"ko.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ko.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,UAAU;AACV,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ms.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,cA07BzB,CAAC"}
1
+ {"version":3,"file":"ms.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ms.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,oBAAoB;AACpB,eAAO,MAAM,WAAW,EAAE,cA27BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nb.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/nb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,mBAAmB;AACnB,eAAO,MAAM,WAAW,EAAE,cA07BzB,CAAC"}
1
+ {"version":3,"file":"nb.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/nb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,mBAAmB;AACnB,eAAO,MAAM,WAAW,EAAE,cA27BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"nl.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/nl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,iBAAiB;AACjB,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"nl.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/nl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,iBAAiB;AACjB,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,aAAa;AACb,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,aAAa;AACb,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pt.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/pt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,yBAAyB;AACzB,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"pt.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/pt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,yBAAyB;AACzB,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ro.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,aAAa;AACb,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"ro.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,aAAa;AACb,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc;AACd,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc;AACd,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sk.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/sk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,iBAAiB;AACjB,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"sk.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/sk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,iBAAiB;AACjB,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sv.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/sv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc;AACd,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"sv.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/sv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc;AACd,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"th.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/th.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc;AACd,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"th.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/th.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,cAAc;AACd,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/tr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,aAAa;AACb,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/tr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,aAAa;AACb,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"vi.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/vi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,kBAAkB;AAClB,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"vi.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/vi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,kBAAkB;AAClB,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"zh.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/zh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,WAAW;AACX,eAAO,MAAM,WAAW,EAAE,cAu6BzB,CAAC"}
1
+ {"version":3,"file":"zh.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/zh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,WAAW;AACX,eAAO,MAAM,WAAW,EAAE,cAy6BzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"zhHant.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/zhHant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,WAAW;AACX,eAAO,MAAM,gBAAgB,EAAE,cAu6B9B,CAAC"}
1
+ {"version":3,"file":"zhHant.d.ts","sourceRoot":"","sources":["../../../src/widget/locales/zhHant.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,WAAW;AACX,eAAO,MAAM,gBAAgB,EAAE,cAy6B9B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Whether the page is hidden: another tab, the app in the background. */
2
+ export declare const pageHidden: () => boolean;
3
+ /** The page's local storage, or null where there is none or it is refused (a private window, a sandbox). */
4
+ export declare function browserStorage(): Storage | null;
5
+ //# sourceMappingURL=pageEnv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageEnv.d.ts","sourceRoot":"","sources":["../../src/widget/pageEnv.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,eAAO,MAAM,UAAU,QAAO,OAA6D,CAAC;AAE5F,4GAA4G;AAC5G,wBAAgB,cAAc,IAAI,OAAO,GAAG,IAAI,CAM/C"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * A few lines of fine-grained reactivity for the widget: a piece of its state is a signal, and
3
+ * whatever shows it is an effect that runs again when, and only when, what it read changed. One
4
+ * effect per piece of UI replaces the calls a writer had to remember to make after each change.
5
+ *
6
+ * Effects run synchronously: a write returns with the UI already showing it, as the widget's
7
+ * tests and its hosts expect. `batch` holds them until a group of writes is done.
8
+ */
9
+ /** A value that can be read and followed. */
10
+ export interface Readable<T> {
11
+ /** The value, followed by the effect or computed reading it. */
12
+ get(): T;
13
+ /** The value, not followed. */
14
+ peek(): T;
15
+ }
16
+ /** A value that can be read, followed and written. */
17
+ export interface Signal<T> extends Readable<T> {
18
+ set(value: T): void;
19
+ update(change: (value: T) => T): void;
20
+ }
21
+ /** Disposes what made it. */
22
+ export type Dispose = () => void;
23
+ /** Runs effects made inside `run` and disposes them all at once. */
24
+ export interface Scope {
25
+ run<T>(fn: () => T): T;
26
+ dispose(): void;
27
+ }
28
+ /** A value whose writes run the effects that read it. */
29
+ export declare function signal<T>(value: T): Signal<T>;
30
+ /** A value worked out from others, again only when one of them changed and it is read. */
31
+ export declare function computed<T>(fn: () => T): Readable<T>;
32
+ /**
33
+ * Runs `fn` now and again each time a signal it read changes. What `fn` returns is run before
34
+ * the next run and on dispose. Made inside a scope, the scope disposes it.
35
+ */
36
+ export declare function effect(fn: () => void | (() => void)): Dispose;
37
+ /** Runs the writes in `fn`, then each effect they touched once. */
38
+ export declare function batch<T>(fn: () => T): T;
39
+ /** A scope to make effects in, disposed together: one per widget. */
40
+ export declare function createScope(): Scope;
41
+ //# sourceMappingURL=signals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.d.ts","sourceRoot":"","sources":["../../src/widget/signals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,6CAA6C;AAC7C,MAAM,WAAW,QAAQ,CAAC,CAAC;IACzB,gEAAgE;IAChE,GAAG,IAAI,CAAC,CAAC;IACT,+BAA+B;IAC/B,IAAI,IAAI,CAAC,CAAC;CACX;AAED,sDAAsD;AACtD,MAAM,WAAW,MAAM,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,CAAC,CAAC;IAC5C,GAAG,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IACpB,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;CACvC;AAED,6BAA6B;AAC7B,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC;AAEjC,oEAAoE;AACpE,MAAM,WAAW,KAAK;IACpB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,IAAI,IAAI,CAAC;CACjB;AA2LD,yDAAyD;AACzD,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAE7C;AAED,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAEpD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAM7D;AAED,mEAAmE;AACnE,wBAAgB,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CASvC;AAED,qEAAqE;AACrE,wBAAgB,WAAW,IAAI,KAAK,CAgBnC"}
@@ -0,0 +1,15 @@
1
+ import { TimeZoneSetting } from '@tradecanvas/commons';
2
+ /**
3
+ * A wall-clock date ("2026-03-01") and time ("14:30", empty = midnight) in the
4
+ * display timezone (an IANA zone, minutes east of UTC, or null for the
5
+ * browser's) as a UTC timestamp. Null when the date or time is not valid.
6
+ */
7
+ export declare function wallTimeToUtc(date: string, time: string, tz: TimeZoneSetting): number | null;
8
+ /** The date and time fields' values for `ts` in the display timezone. */
9
+ export declare function utcToWallTime(ts: number, tz: TimeZoneSetting): WallTime;
10
+ /** A date (YYYY-MM-DD) and a time (HH:MM, or empty for the day's start) on the wall clock. */
11
+ export interface WallTime {
12
+ date: string;
13
+ time: string;
14
+ }
15
+ //# sourceMappingURL=wallTime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallTime.d.ts","sourceRoot":"","sources":["../../src/widget/wallTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAOlF;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAS5F;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,GAAG,QAAQ,CAOvE;AAED,8FAA8F;AAC9F,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * The widget's dialogs whose code loads when one is first opened, or when the page has a moment
3
+ * to spare once the chart is up. Shared by every widget on the page: loaded once, built per widget.
4
+ */
5
+ export declare const DIALOGS: {
6
+ settings: import('./lazyPart.js').ModuleRef<typeof import("./WidgetSettings.js")>;
7
+ indicatorSettings: import('./lazyPart.js').ModuleRef<typeof import("./WidgetIndicatorSettings.js")>;
8
+ drawingSettings: import('./lazyPart.js').ModuleRef<typeof import("./WidgetDrawingSettings.js")>;
9
+ goToDate: import('./lazyPart.js').ModuleRef<typeof import("./WidgetGoToDate.js")>;
10
+ hotkeySheet: import('./lazyPart.js').ModuleRef<typeof import("./WidgetHotkeySheet.js")>;
11
+ indicatorPicker: import('./lazyPart.js').ModuleRef<typeof import("./WidgetIndicatorPicker.js")>;
12
+ commandPalette: import('./lazyPart.js').ModuleRef<typeof import("./WidgetCommandPalette.js")>;
13
+ symbolSearch: import('./lazyPart.js').ModuleRef<typeof import("./WidgetSymbolSearch.js")>;
14
+ };
15
+ /** Loads every dialog's code; a failure is left for the dialog to report when it is opened. */
16
+ export declare function preloadDialogs(): Promise<void>;
17
+ //# sourceMappingURL=widgetDialogs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgetDialogs.d.ts","sourceRoot":"","sources":["../../src/widget/widgetDialogs.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,OAAO;;;;;;;;;CASnB,CAAC;AAEF,+FAA+F;AAC/F,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAEpD"}
@@ -0,0 +1,186 @@
1
+ //#region src/widget/widgetFeatures.ts
2
+ var e = /* @__PURE__ */ "toolbar,sidebar,statusBar,dock,alerts,objectTree,symbolInfo,symbolSearch,settings,indicatorSettings,drawingSettings,dataWindow,commandPalette,hotkeySheet,goToDate,replay,screenshot,copyImage,shareView,autoFib,themeToggle,fullscreen,accountPanel,orderTicket,bracketOrders,depthLadder,layouts,indicatorTemplates,compare,indicatorLegend,navigation,customTimeframes,intervalTyping,symbolTyping,dragDropImport,hotkeys,toasts,toolbar.symbol,toolbar.symbolInfo,toolbar.timeframes,toolbar.timeframeMenu,toolbar.chartType,toolbar.indicators,toolbar.layouts,toolbar.replay,toolbar.bracketOrders,toolbar.depthLadder,toolbar.accountPanel,toolbar.objectTree,toolbar.alerts,toolbar.screenshot,toolbar.settings,toolbar.themeToggle,toolbar.fullscreen,toolbar.compare,toolbar.undo,toolbar.redo,toolbar.trade,sidebar.cursor,sidebar.favorites,sidebar.lines,sidebar.fibonacci,sidebar.patterns,sidebar.forecasting,sidebar.annotation,sidebar.style,sidebar.magnet,sidebar.eraser,sidebar.zoomArea,sidebar.stayInDrawing,sidebar.undo,sidebar.redo,sidebar.clear,sidebar.lockAll,sidebar.hideAll,dock.watchlist,dock.alerts,dock.objectTree,dock.dataWindow,dock.symbolInfo,dock.depthLadder,statusBar.range,statusBar.goToDate,statusBar.market,statusBar.connection,statusBar.symbol,statusBar.clock,statusBar.scale,statusBar.rangeTimeframe,indicatorLegend.values,indicatorLegend.visibility,indicatorLegend.settings,indicatorLegend.remove,indicatorLegend.more,pane.move,pane.collapse,pane.maximize,navigation.zoom,navigation.scroll,navigation.reset,menu.chart,menu.chart.alert,menu.chart.order,menu.chart.orderTicket,menu.chart.horizontalLine,menu.chart.resetView,menu.chart.drawings,menu.chart.exportData,menu.chart.settings,menu.chart.scale,menu.chart.goToDate,menu.chart.paneScale,menu.priceAxisAdd,menu.chart.indicators,menu.chart.timezone,menu.drawing,menu.drawing.settings,menu.drawing.alert,menu.drawing.order,menu.drawing.group,menu.drawing.lock,menu.drawing.hide,menu.drawing.duplicate,menu.drawing.delete,selectionToolbar,hotkeys.commandPalette,hotkeys.symbolSearch,hotkeys.save,hotkeys.tools,hotkeys.invertScale,hotkeys.goToDate,hotkeys.help,hotkeys.resetView".split(","), t = new Set(e), n = {
3
+ toolbar: ["toolbar"],
4
+ drawingTools: [
5
+ "sidebar",
6
+ "drawingSettings",
7
+ "hotkeys.tools",
8
+ "menu.chart.horizontalLine"
9
+ ],
10
+ settings: ["settings"],
11
+ statusBar: ["statusBar", "goToDate"],
12
+ rangeBar: [
13
+ "statusBar.range",
14
+ "statusBar.rangeTimeframe",
15
+ "goToDate"
16
+ ],
17
+ indicatorLegend: ["indicatorLegend"],
18
+ fullscreen: ["fullscreen"],
19
+ alerts: ["alerts"],
20
+ objectTree: ["objectTree"],
21
+ accountPanel: ["accountPanel", "orderTicket"],
22
+ indicatorTemplates: ["indicatorTemplates"],
23
+ intervalTyping: ["intervalTyping"],
24
+ symbolInfo: ["symbolInfo"],
25
+ navigation: ["navigation"],
26
+ dragDropImport: ["dragDropImport"],
27
+ customTimeframes: ["customTimeframes"]
28
+ }, r = {
29
+ alert: ["alerts", "menu.chart.alert"],
30
+ buyLimit: ["menu.chart.order"],
31
+ buyStop: ["menu.chart.order"],
32
+ sellLimit: ["menu.chart.order"],
33
+ sellStop: ["menu.chart.order"],
34
+ orderTicket: ["orderTicket", "menu.chart.orderTicket"],
35
+ horizontalLine: ["menu.chart.horizontalLine"],
36
+ resetView: ["menu.chart.resetView"],
37
+ paste: ["menu.chart.drawings"],
38
+ hideDrawings: ["menu.chart.drawings"],
39
+ showDrawings: ["menu.chart.drawings"],
40
+ removeDrawings: ["menu.chart.drawings"],
41
+ removeIndicators: ["menu.chart.indicators"],
42
+ settings: ["settings", "menu.chart.settings"],
43
+ exportData: ["menu.chart.exportData"],
44
+ resetPriceScale: ["menu.chart.scale"],
45
+ autoScale: ["menu.chart.scale"],
46
+ invertScale: ["menu.chart.scale"],
47
+ leftScale: ["menu.chart.scale"],
48
+ regularScale: ["menu.chart.scale"],
49
+ logScale: ["menu.chart.scale"],
50
+ percentScale: ["menu.chart.scale"],
51
+ indexedScale: ["menu.chart.scale"],
52
+ labels: ["menu.chart.scale"],
53
+ indicatorValueLabels: ["menu.chart.scale"],
54
+ alignAxisLabels: ["menu.chart.scale"],
55
+ barCountdown: ["menu.chart.scale"],
56
+ lines: ["menu.chart.scale"],
57
+ highLowLines: ["menu.chart.scale"],
58
+ lastPriceLine: ["menu.chart.scale"],
59
+ goToDate: ["goToDate", "menu.chart.goToDate"],
60
+ timezone: ["menu.chart.timezone"],
61
+ paneLog: ["menu.chart.paneScale"],
62
+ paneInvert: ["menu.chart.paneScale"],
63
+ panePercent: ["menu.chart.paneScale"]
64
+ }, i = {
65
+ settings: ["drawingSettings", "menu.drawing.settings"],
66
+ alert: ["alerts", "menu.drawing.alert"],
67
+ front: ["menu.drawing.order"],
68
+ forward: ["menu.drawing.order"],
69
+ backward: ["menu.drawing.order"],
70
+ back: ["menu.drawing.order"],
71
+ group: ["menu.drawing.group"],
72
+ ungroup: ["menu.drawing.group"],
73
+ lock: ["menu.drawing.lock"],
74
+ unlock: ["menu.drawing.lock"],
75
+ hide: ["menu.drawing.hide"],
76
+ duplicate: ["menu.drawing.duplicate"],
77
+ delete: ["menu.drawing.delete"]
78
+ }, a = {
79
+ symbolSearch: "symbolSearch",
80
+ compare: "compare",
81
+ goToDate: "goToDate",
82
+ saveLayout: "layouts",
83
+ alerts: "alerts",
84
+ objectTree: "objectTree",
85
+ hotkeys: "hotkeySheet",
86
+ screenshot: "screenshot",
87
+ copyImage: "copyImage",
88
+ toggleTheme: "themeToggle",
89
+ settings: "settings",
90
+ shareView: "shareView",
91
+ autoFib: "autoFib",
92
+ dataWindow: "dataWindow",
93
+ symbolInfo: "symbolInfo"
94
+ };
95
+ function o(e) {
96
+ if (typeof e != "object" || !e || Array.isArray(e)) return {};
97
+ let n = {}, r = [];
98
+ for (let [i, a] of Object.entries(e)) t.has(i) && typeof a == "boolean" ? n[i] = a : r.push(i);
99
+ return r.length > 0 && console.warn(`[ChartWidget] Unknown or non-boolean feature switches left out: ${r.join(", ")}.`), n;
100
+ }
101
+ function s(t) {
102
+ let r = Object.fromEntries(e.map((e) => [e, !0]));
103
+ for (let [e, i] of Object.entries(n)) if (t[e] === !1) for (let e of i) r[e] = !1;
104
+ return {
105
+ ...r,
106
+ ...o(t.features)
107
+ };
108
+ }
109
+ function c(t) {
110
+ return e.filter((e) => !t[e]).join(" ");
111
+ }
112
+ var l = "tcw-divider-off", u = [
113
+ {
114
+ names: [
115
+ "navigation.zoom",
116
+ "navigation.scroll",
117
+ "navigation.reset"
118
+ ],
119
+ selector: ".tcw-nav"
120
+ },
121
+ {
122
+ names: [
123
+ "pane.move",
124
+ "pane.collapse",
125
+ "pane.maximize"
126
+ ],
127
+ selector: ".tcw-pane-controls"
128
+ },
129
+ {
130
+ names: [
131
+ "indicatorLegend.visibility",
132
+ "indicatorLegend.settings",
133
+ "indicatorLegend.more",
134
+ "indicatorLegend.remove"
135
+ ],
136
+ selector: ".tcw-ind-legend-actions"
137
+ }
138
+ ];
139
+ function d() {
140
+ return [
141
+ ...e.map((e) => `.tcw-root[data-tcw-off~="${e}"] [data-tcw-part~="${e}"]{display:none!important}`),
142
+ ...u.map(({ names: e, selector: t }) => `.tcw-root${e.map((e) => `[data-tcw-off~="${e}"]`).join("")} ${t}{display:none!important}`),
143
+ `.${l}{display:none!important}`
144
+ ].join("\n");
145
+ }
146
+ function f(e, ...t) {
147
+ e.dataset.tcwPart = t.join(" ");
148
+ }
149
+ function p(...e) {
150
+ return `data-tcw-part="${e.join(" ")}"`;
151
+ }
152
+ function m(e) {
153
+ return Object.prototype.hasOwnProperty.call(a, e) ? a[e] : void 0;
154
+ }
155
+ function h(e, t, n) {
156
+ let r = [...e.children], i = (e) => e.classList.contains(t);
157
+ for (let e of r) i(e) && e.classList.remove(l);
158
+ let a = (e) => !e.hidden && getComputedStyle(e).display !== "none", o = (e) => a(e) && (e instanceof HTMLButtonElement || e.childElementCount > 0 || e.textContent !== ""), s = !1, c = null;
159
+ for (let e of r) if (n !== void 0 && e.classList.contains(n)) c?.classList.add(l), c = null, s = !1;
160
+ else if (i(e)) {
161
+ if (!a(e)) continue;
162
+ s ? (c = e, s = !1) : e.classList.add(l);
163
+ } else o(e) && (s = !0, c = null);
164
+ c?.classList.add(l);
165
+ }
166
+ function g(e, t, n) {
167
+ let r = e.flatMap((e) => {
168
+ if (e === "separator") return [e];
169
+ if (!(t[e.id] ?? []).every((e) => n[e])) return [];
170
+ if (!e.submenu) return [e];
171
+ let r = g(e.submenu, t, n);
172
+ return r.length > 0 ? [{
173
+ ...e,
174
+ submenu: r
175
+ }] : [];
176
+ });
177
+ return r.filter((e, t) => {
178
+ if (e !== "separator") return !0;
179
+ let n = r.slice(0, t).some((e) => e !== "separator"), i = r[t + 1];
180
+ return n && i !== void 0 && i !== "separator";
181
+ });
182
+ }
183
+ //#endregion
184
+ export { g as a, p as c, h as d, d as f, m as i, o as l, i as n, f as o, e as r, c as s, r as t, s as u };
185
+
186
+ //# sourceMappingURL=widgetFeatures-BM6u0u74.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgetFeatures-BM6u0u74.js","names":[],"sources":["../src/widget/widgetFeatures.ts"],"sourcesContent":["import type { ContextMenuEntry } from './WidgetContextMenu.js';\nimport type { ChartMenuAction } from './chartMenu.js';\nimport type { DrawingMenuAction } from './drawingMenu.js';\n\n/**\n * The widget's switches, by name; every one is on until turned off. A name\n * without a dot is a whole capability, off wherever it shows (its button,\n * its menu entries, its command, its keys); a dotted name is one place.\n * A switch hides; it never adds a part that is off until its option asks\n * for it (`depthLadder: true`, `watchlist: true`).\n * The names are a contract: new ones are added, none is renamed.\n */\nexport const WIDGET_FEATURES = [\n // The bars.\n 'toolbar', 'sidebar', 'statusBar', 'dock',\n // Capabilities, wherever they show.\n 'alerts', 'objectTree', 'symbolInfo', 'symbolSearch', 'settings', 'indicatorSettings', 'drawingSettings',\n 'dataWindow', 'commandPalette', 'hotkeySheet', 'goToDate', 'replay', 'screenshot', 'copyImage', 'shareView',\n 'autoFib', 'themeToggle', 'fullscreen', 'accountPanel', 'orderTicket', 'bracketOrders', 'depthLadder',\n 'layouts', 'indicatorTemplates', 'compare', 'indicatorLegend', 'navigation', 'customTimeframes',\n 'intervalTyping', 'symbolTyping', 'dragDropImport', 'hotkeys', 'toasts',\n // The toolbar's buttons.\n 'toolbar.symbol', 'toolbar.symbolInfo', 'toolbar.timeframes', 'toolbar.timeframeMenu', 'toolbar.chartType',\n 'toolbar.indicators', 'toolbar.layouts', 'toolbar.replay', 'toolbar.bracketOrders', 'toolbar.depthLadder',\n 'toolbar.accountPanel', 'toolbar.objectTree', 'toolbar.alerts', 'toolbar.screenshot', 'toolbar.settings',\n 'toolbar.themeToggle', 'toolbar.fullscreen', 'toolbar.compare', 'toolbar.undo', 'toolbar.redo', 'toolbar.trade',\n // The drawing sidebar: its tools by section, then its buttons.\n 'sidebar.cursor', 'sidebar.favorites', 'sidebar.lines', 'sidebar.fibonacci', 'sidebar.patterns',\n 'sidebar.forecasting', 'sidebar.annotation', 'sidebar.style', 'sidebar.magnet', 'sidebar.eraser',\n 'sidebar.zoomArea', 'sidebar.stayInDrawing', 'sidebar.undo', 'sidebar.redo', 'sidebar.clear',\n 'sidebar.lockAll', 'sidebar.hideAll',\n // The dock's rail: a button for each panel.\n 'dock.watchlist', 'dock.alerts', 'dock.objectTree', 'dock.dataWindow', 'dock.symbolInfo', 'dock.depthLadder',\n // The status bar.\n 'statusBar.range', 'statusBar.goToDate', 'statusBar.market', 'statusBar.connection', 'statusBar.symbol',\n 'statusBar.clock', 'statusBar.scale',\n // A long range on the range bar switches to weeks or months, a short one back.\n 'statusBar.rangeTimeframe',\n // On the chart: the indicators' rows, the panes' buttons, the navigation.\n 'indicatorLegend.values', 'indicatorLegend.visibility', 'indicatorLegend.settings', 'indicatorLegend.remove',\n 'indicatorLegend.more', 'pane.move', 'pane.collapse', 'pane.maximize',\n 'navigation.zoom', 'navigation.scroll', 'navigation.reset',\n // Menus: a right-click on the chart (and the \"+\" by the price axis), and on a drawing.\n 'menu.chart', 'menu.chart.alert', 'menu.chart.order', 'menu.chart.orderTicket', 'menu.chart.horizontalLine',\n 'menu.chart.resetView', 'menu.chart.drawings', 'menu.chart.exportData', 'menu.chart.settings',\n 'menu.chart.scale', 'menu.chart.goToDate', 'menu.chart.paneScale', 'menu.priceAxisAdd',\n 'menu.chart.indicators', 'menu.chart.timezone',\n 'menu.drawing', 'menu.drawing.settings', 'menu.drawing.alert', 'menu.drawing.order', 'menu.drawing.group',\n 'menu.drawing.lock', 'menu.drawing.hide', 'menu.drawing.duplicate', 'menu.drawing.delete',\n // The toolbar that appears over a selected drawing.\n 'selectionToolbar',\n // Keys.\n 'hotkeys.commandPalette', 'hotkeys.symbolSearch', 'hotkeys.save', 'hotkeys.tools', 'hotkeys.invertScale',\n 'hotkeys.goToDate', 'hotkeys.help', 'hotkeys.resetView',\n] as const;\n\nexport type WidgetFeature = (typeof WIDGET_FEATURES)[number];\n/** Switches to turn on (`true`) or off (`false`), by name. */\nexport type WidgetFeatures = Partial<Record<WidgetFeature, boolean>>;\n/** Every switch, on or off. */\nexport type WidgetFeatureState = Readonly<Record<WidgetFeature, boolean>>;\n\nconst KNOWN: ReadonlySet<string> = new Set(WIDGET_FEATURES);\n\n/** The widget's older on/off options, each the switches it stands for. */\nexport const LEGACY_FEATURE_OPTIONS = {\n toolbar: ['toolbar'],\n drawingTools: ['sidebar', 'drawingSettings', 'hotkeys.tools', 'menu.chart.horizontalLine'],\n settings: ['settings'],\n statusBar: ['statusBar', 'goToDate'],\n rangeBar: ['statusBar.range', 'statusBar.rangeTimeframe', 'goToDate'],\n indicatorLegend: ['indicatorLegend'],\n fullscreen: ['fullscreen'],\n alerts: ['alerts'],\n objectTree: ['objectTree'],\n accountPanel: ['accountPanel', 'orderTicket'],\n indicatorTemplates: ['indicatorTemplates'],\n intervalTyping: ['intervalTyping'],\n symbolInfo: ['symbolInfo'],\n navigation: ['navigation'],\n dragDropImport: ['dragDropImport'],\n customTimeframes: ['customTimeframes'],\n} as const satisfies Record<string, readonly WidgetFeature[]>;\n\ntype LegacyOptions = { readonly [K in keyof typeof LEGACY_FEATURE_OPTIONS]?: unknown };\n\n/** The switches each chart menu entry needs on (the right-click menu and the \"+\" by the price axis). */\nexport const CHART_MENU_FEATURES: Readonly<Record<ChartMenuAction, readonly WidgetFeature[]>> = {\n alert: ['alerts', 'menu.chart.alert'],\n buyLimit: ['menu.chart.order'],\n buyStop: ['menu.chart.order'],\n sellLimit: ['menu.chart.order'],\n sellStop: ['menu.chart.order'],\n orderTicket: ['orderTicket', 'menu.chart.orderTicket'],\n horizontalLine: ['menu.chart.horizontalLine'],\n resetView: ['menu.chart.resetView'],\n paste: ['menu.chart.drawings'],\n hideDrawings: ['menu.chart.drawings'],\n showDrawings: ['menu.chart.drawings'],\n removeDrawings: ['menu.chart.drawings'],\n removeIndicators: ['menu.chart.indicators'],\n settings: ['settings', 'menu.chart.settings'],\n exportData: ['menu.chart.exportData'],\n resetPriceScale: ['menu.chart.scale'],\n autoScale: ['menu.chart.scale'],\n invertScale: ['menu.chart.scale'],\n leftScale: ['menu.chart.scale'],\n regularScale: ['menu.chart.scale'],\n logScale: ['menu.chart.scale'],\n percentScale: ['menu.chart.scale'],\n indexedScale: ['menu.chart.scale'],\n labels: ['menu.chart.scale'],\n indicatorValueLabels: ['menu.chart.scale'],\n alignAxisLabels: ['menu.chart.scale'],\n barCountdown: ['menu.chart.scale'],\n lines: ['menu.chart.scale'],\n highLowLines: ['menu.chart.scale'],\n lastPriceLine: ['menu.chart.scale'],\n goToDate: ['goToDate', 'menu.chart.goToDate'],\n timezone: ['menu.chart.timezone'],\n paneLog: ['menu.chart.paneScale'],\n paneInvert: ['menu.chart.paneScale'],\n panePercent: ['menu.chart.paneScale'],\n};\n\n/** The switches each entry of a drawing's menu needs on. */\nexport const DRAWING_MENU_FEATURES: Readonly<Record<DrawingMenuAction, readonly WidgetFeature[]>> = {\n settings: ['drawingSettings', 'menu.drawing.settings'],\n alert: ['alerts', 'menu.drawing.alert'],\n front: ['menu.drawing.order'],\n forward: ['menu.drawing.order'],\n backward: ['menu.drawing.order'],\n back: ['menu.drawing.order'],\n group: ['menu.drawing.group'],\n ungroup: ['menu.drawing.group'],\n lock: ['menu.drawing.lock'],\n unlock: ['menu.drawing.lock'],\n hide: ['menu.drawing.hide'],\n duplicate: ['menu.drawing.duplicate'],\n delete: ['menu.drawing.delete'],\n};\n\n/** The switch each command of the command palette needs on (by its action id). */\nexport const COMMAND_FEATURES: Readonly<Record<string, WidgetFeature>> = {\n symbolSearch: 'symbolSearch',\n compare: 'compare',\n goToDate: 'goToDate',\n saveLayout: 'layouts',\n alerts: 'alerts',\n objectTree: 'objectTree',\n hotkeys: 'hotkeySheet',\n screenshot: 'screenshot',\n copyImage: 'copyImage',\n toggleTheme: 'themeToggle',\n settings: 'settings',\n shareView: 'shareView',\n autoFib: 'autoFib',\n dataWindow: 'dataWindow',\n symbolInfo: 'symbolInfo',\n};\n\n/**\n * Switches as given (an option, a `setFeatures` call): known names set to\n * `true` or `false`. Anything else is dropped, with a warning.\n */\nexport function readWidgetFeatures(value: unknown): WidgetFeatures {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n const out: WidgetFeatures = {};\n const dropped: string[] = [];\n for (const [name, on] of Object.entries(value)) {\n if (KNOWN.has(name) && typeof on === 'boolean') out[name as WidgetFeature] = on;\n else dropped.push(name);\n }\n if (dropped.length > 0) {\n console.warn(`[ChartWidget] Unknown or non-boolean feature switches left out: ${dropped.join(', ')}.`);\n }\n return out;\n}\n\n/** Every switch at the start: on, then off where an older option says `false`, then as `features` says. */\nexport function resolveWidgetFeatures(options: LegacyOptions & { readonly features?: unknown }): WidgetFeatureState {\n const state = Object.fromEntries(WIDGET_FEATURES.map((name) => [name, true])) as Record<WidgetFeature, boolean>;\n for (const [option, names] of Object.entries(LEGACY_FEATURE_OPTIONS)) {\n if (options[option as keyof LegacyOptions] !== false) continue;\n for (const name of names) state[name] = false;\n }\n return { ...state, ...readWidgetFeatures(options.features) };\n}\n\n/** The switches that are off, space apart (the root's `data-tcw-off`). */\nexport function offFeatures(state: WidgetFeatureState): string {\n return WIDGET_FEATURES.filter((name) => !state[name]).join(' ');\n}\n\n/** A divider with nothing shown on one side of it. */\nconst DIVIDER_OFF = 'tcw-divider-off';\n\n/** Holders whose every part can be switched off: they go too, rather than show empty. */\nconst GROUPED_PARTS: readonly { names: readonly WidgetFeature[]; selector: string }[] = [\n { names: ['navigation.zoom', 'navigation.scroll', 'navigation.reset'], selector: '.tcw-nav' },\n { names: ['pane.move', 'pane.collapse', 'pane.maximize'], selector: '.tcw-pane-controls' },\n {\n names: ['indicatorLegend.visibility', 'indicatorLegend.settings', 'indicatorLegend.more', 'indicatorLegend.remove'],\n selector: '.tcw-ind-legend-actions',\n },\n];\n\n/** Hides every part (`data-tcw-part`) whose switch is off on its widget, and the dividers left with nothing to divide. */\nexport function widgetFeatureCss(): string {\n return [\n ...WIDGET_FEATURES.map((name) => `.tcw-root[data-tcw-off~=\"${name}\"] [data-tcw-part~=\"${name}\"]{display:none!important}`),\n ...GROUPED_PARTS.map(({ names, selector }) =>\n `.tcw-root${names.map((name) => `[data-tcw-off~=\"${name}\"]`).join('')} ${selector}{display:none!important}`),\n `.${DIVIDER_OFF}{display:none!important}`,\n ].join('\\n');\n}\n\n/** Marks an element as a part of the switches named: it is hidden while any of them is off. */\nexport function markPart(el: HTMLElement, ...names: WidgetFeature[]): void {\n el.dataset.tcwPart = names.join(' ');\n}\n\n/** The same mark as an attribute, for markup built as text. */\nexport function partAttr(...names: WidgetFeature[]): string {\n return `data-tcw-part=\"${names.join(' ')}\"`;\n}\n\n/** The switch a command of the command palette needs on, if it has one. */\nexport function commandFeature(id: string): WidgetFeature | undefined {\n return Object.prototype.hasOwnProperty.call(COMMAND_FEATURES, id) ? COMMAND_FEATURES[id] : undefined;\n}\n\n/**\n * Hides each divider among `container`'s children with nothing shown between\n * it and the edge, a boundary (a spacer) or the divider before it.\n */\nexport function tidyDividers(container: HTMLElement, dividerClass: string, boundaryClass?: string): void {\n const children = [...container.children] as HTMLElement[];\n const isDivider = (el: HTMLElement) => el.classList.contains(dividerClass);\n for (const el of children) if (isDivider(el)) el.classList.remove(DIVIDER_OFF);\n const shown = (el: HTMLElement) => !el.hidden && getComputedStyle(el).display !== 'none';\n // An empty holder (for a host's buttons, say) shows nothing.\n const isItem = (el: HTMLElement) => shown(el) && (el instanceof HTMLButtonElement || el.childElementCount > 0 || el.textContent !== '');\n let itemSince = false;\n let pending: HTMLElement | null = null;\n for (const el of children) {\n if (boundaryClass !== undefined && el.classList.contains(boundaryClass)) {\n pending?.classList.add(DIVIDER_OFF);\n pending = null;\n itemSince = false;\n } else if (isDivider(el)) {\n if (!shown(el)) continue;\n if (!itemSince) {\n el.classList.add(DIVIDER_OFF);\n } else {\n pending = el;\n itemSince = false;\n }\n } else if (isItem(el)) {\n itemSince = true;\n pending = null;\n }\n }\n pending?.classList.add(DIVIDER_OFF);\n}\n\n/**\n * A menu's entries with those whose switches are off left out, in its\n * submenus too (a submenu with nothing left goes), and no separator at\n * either end or next to another.\n */\nexport function filterMenuEntries<Id extends string>(\n entries: readonly ContextMenuEntry[],\n featuresOf: Readonly<Record<Id, readonly WidgetFeature[]>>,\n state: WidgetFeatureState,\n): ContextMenuEntry[] {\n const kept = entries.flatMap((entry): ContextMenuEntry[] => {\n if (entry === 'separator') return [entry];\n const names = (featuresOf as Readonly<Record<string, readonly WidgetFeature[]>>)[entry.id] ?? [];\n if (!names.every((name) => state[name])) return [];\n if (!entry.submenu) return [entry];\n const submenu = filterMenuEntries(entry.submenu, featuresOf, state);\n return submenu.length > 0 ? [{ ...entry, submenu }] : [];\n });\n return kept.filter((entry, i) => {\n if (entry !== 'separator') return true;\n const before = kept.slice(0, i).some((e) => e !== 'separator');\n const next = kept[i + 1];\n return before && next !== undefined && next !== 'separator';\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ var e=`toolbar,sidebar,statusBar,dock,alerts,objectTree,symbolInfo,symbolSearch,settings,indicatorSettings,drawingSettings,dataWindow,commandPalette,hotkeySheet,goToDate,replay,screenshot,copyImage,shareView,autoFib,themeToggle,fullscreen,accountPanel,orderTicket,bracketOrders,depthLadder,layouts,indicatorTemplates,compare,indicatorLegend,navigation,customTimeframes,intervalTyping,symbolTyping,dragDropImport,hotkeys,toasts,toolbar.symbol,toolbar.symbolInfo,toolbar.timeframes,toolbar.timeframeMenu,toolbar.chartType,toolbar.indicators,toolbar.layouts,toolbar.replay,toolbar.bracketOrders,toolbar.depthLadder,toolbar.accountPanel,toolbar.objectTree,toolbar.alerts,toolbar.screenshot,toolbar.settings,toolbar.themeToggle,toolbar.fullscreen,toolbar.compare,toolbar.undo,toolbar.redo,toolbar.trade,sidebar.cursor,sidebar.favorites,sidebar.lines,sidebar.fibonacci,sidebar.patterns,sidebar.forecasting,sidebar.annotation,sidebar.style,sidebar.magnet,sidebar.eraser,sidebar.zoomArea,sidebar.stayInDrawing,sidebar.undo,sidebar.redo,sidebar.clear,sidebar.lockAll,sidebar.hideAll,dock.watchlist,dock.alerts,dock.objectTree,dock.dataWindow,dock.symbolInfo,dock.depthLadder,statusBar.range,statusBar.goToDate,statusBar.market,statusBar.connection,statusBar.symbol,statusBar.clock,statusBar.scale,statusBar.rangeTimeframe,indicatorLegend.values,indicatorLegend.visibility,indicatorLegend.settings,indicatorLegend.remove,indicatorLegend.more,pane.move,pane.collapse,pane.maximize,navigation.zoom,navigation.scroll,navigation.reset,menu.chart,menu.chart.alert,menu.chart.order,menu.chart.orderTicket,menu.chart.horizontalLine,menu.chart.resetView,menu.chart.drawings,menu.chart.exportData,menu.chart.settings,menu.chart.scale,menu.chart.goToDate,menu.chart.paneScale,menu.priceAxisAdd,menu.chart.indicators,menu.chart.timezone,menu.drawing,menu.drawing.settings,menu.drawing.alert,menu.drawing.order,menu.drawing.group,menu.drawing.lock,menu.drawing.hide,menu.drawing.duplicate,menu.drawing.delete,selectionToolbar,hotkeys.commandPalette,hotkeys.symbolSearch,hotkeys.save,hotkeys.tools,hotkeys.invertScale,hotkeys.goToDate,hotkeys.help,hotkeys.resetView`.split(`,`),t=new Set(e),n={toolbar:[`toolbar`],drawingTools:[`sidebar`,`drawingSettings`,`hotkeys.tools`,`menu.chart.horizontalLine`],settings:[`settings`],statusBar:[`statusBar`,`goToDate`],rangeBar:[`statusBar.range`,`statusBar.rangeTimeframe`,`goToDate`],indicatorLegend:[`indicatorLegend`],fullscreen:[`fullscreen`],alerts:[`alerts`],objectTree:[`objectTree`],accountPanel:[`accountPanel`,`orderTicket`],indicatorTemplates:[`indicatorTemplates`],intervalTyping:[`intervalTyping`],symbolInfo:[`symbolInfo`],navigation:[`navigation`],dragDropImport:[`dragDropImport`],customTimeframes:[`customTimeframes`]},r={alert:[`alerts`,`menu.chart.alert`],buyLimit:[`menu.chart.order`],buyStop:[`menu.chart.order`],sellLimit:[`menu.chart.order`],sellStop:[`menu.chart.order`],orderTicket:[`orderTicket`,`menu.chart.orderTicket`],horizontalLine:[`menu.chart.horizontalLine`],resetView:[`menu.chart.resetView`],paste:[`menu.chart.drawings`],hideDrawings:[`menu.chart.drawings`],showDrawings:[`menu.chart.drawings`],removeDrawings:[`menu.chart.drawings`],removeIndicators:[`menu.chart.indicators`],settings:[`settings`,`menu.chart.settings`],exportData:[`menu.chart.exportData`],resetPriceScale:[`menu.chart.scale`],autoScale:[`menu.chart.scale`],invertScale:[`menu.chart.scale`],leftScale:[`menu.chart.scale`],regularScale:[`menu.chart.scale`],logScale:[`menu.chart.scale`],percentScale:[`menu.chart.scale`],indexedScale:[`menu.chart.scale`],labels:[`menu.chart.scale`],indicatorValueLabels:[`menu.chart.scale`],alignAxisLabels:[`menu.chart.scale`],barCountdown:[`menu.chart.scale`],lines:[`menu.chart.scale`],highLowLines:[`menu.chart.scale`],lastPriceLine:[`menu.chart.scale`],goToDate:[`goToDate`,`menu.chart.goToDate`],timezone:[`menu.chart.timezone`],paneLog:[`menu.chart.paneScale`],paneInvert:[`menu.chart.paneScale`],panePercent:[`menu.chart.paneScale`]},i={settings:[`drawingSettings`,`menu.drawing.settings`],alert:[`alerts`,`menu.drawing.alert`],front:[`menu.drawing.order`],forward:[`menu.drawing.order`],backward:[`menu.drawing.order`],back:[`menu.drawing.order`],group:[`menu.drawing.group`],ungroup:[`menu.drawing.group`],lock:[`menu.drawing.lock`],unlock:[`menu.drawing.lock`],hide:[`menu.drawing.hide`],duplicate:[`menu.drawing.duplicate`],delete:[`menu.drawing.delete`]},a={symbolSearch:`symbolSearch`,compare:`compare`,goToDate:`goToDate`,saveLayout:`layouts`,alerts:`alerts`,objectTree:`objectTree`,hotkeys:`hotkeySheet`,screenshot:`screenshot`,copyImage:`copyImage`,toggleTheme:`themeToggle`,settings:`settings`,shareView:`shareView`,autoFib:`autoFib`,dataWindow:`dataWindow`,symbolInfo:`symbolInfo`};function o(e){if(typeof e!=`object`||!e||Array.isArray(e))return{};let n={},r=[];for(let[i,a]of Object.entries(e))t.has(i)&&typeof a==`boolean`?n[i]=a:r.push(i);return r.length>0&&console.warn(`[ChartWidget] Unknown or non-boolean feature switches left out: ${r.join(`, `)}.`),n}function s(t){let r=Object.fromEntries(e.map(e=>[e,!0]));for(let[e,i]of Object.entries(n))if(t[e]===!1)for(let e of i)r[e]=!1;return{...r,...o(t.features)}}function c(t){return e.filter(e=>!t[e]).join(` `)}var l=`tcw-divider-off`,u=[{names:[`navigation.zoom`,`navigation.scroll`,`navigation.reset`],selector:`.tcw-nav`},{names:[`pane.move`,`pane.collapse`,`pane.maximize`],selector:`.tcw-pane-controls`},{names:[`indicatorLegend.visibility`,`indicatorLegend.settings`,`indicatorLegend.more`,`indicatorLegend.remove`],selector:`.tcw-ind-legend-actions`}];function d(){return[...e.map(e=>`.tcw-root[data-tcw-off~="${e}"] [data-tcw-part~="${e}"]{display:none!important}`),...u.map(({names:e,selector:t})=>`.tcw-root${e.map(e=>`[data-tcw-off~="${e}"]`).join(``)} ${t}{display:none!important}`),`.${l}{display:none!important}`].join(`
2
+ `)}function f(e,...t){e.dataset.tcwPart=t.join(` `)}function p(...e){return`data-tcw-part="${e.join(` `)}"`}function m(e){return Object.prototype.hasOwnProperty.call(a,e)?a[e]:void 0}function h(e,t,n){let r=[...e.children],i=e=>e.classList.contains(t);for(let e of r)i(e)&&e.classList.remove(l);let a=e=>!e.hidden&&getComputedStyle(e).display!==`none`,o=e=>a(e)&&(e instanceof HTMLButtonElement||e.childElementCount>0||e.textContent!==``),s=!1,c=null;for(let e of r)if(n!==void 0&&e.classList.contains(n))c?.classList.add(l),c=null,s=!1;else if(i(e)){if(!a(e))continue;s?(c=e,s=!1):e.classList.add(l)}else o(e)&&(s=!0,c=null);c?.classList.add(l)}function g(e,t,n){let r=e.flatMap(e=>{if(e===`separator`)return[e];if(!(t[e.id]??[]).every(e=>n[e]))return[];if(!e.submenu)return[e];let r=g(e.submenu,t,n);return r.length>0?[{...e,submenu:r}]:[]});return r.filter((e,t)=>{if(e!==`separator`)return!0;let n=r.slice(0,t).some(e=>e!==`separator`),i=r[t+1];return n&&i!==void 0&&i!==`separator`})}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return e}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return s}});
3
+ //# sourceMappingURL=widgetFeatures-BZ8OVPN2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgetFeatures-BZ8OVPN2.cjs","names":[],"sources":["../src/widget/widgetFeatures.ts"],"sourcesContent":["import type { ContextMenuEntry } from './WidgetContextMenu.js';\nimport type { ChartMenuAction } from './chartMenu.js';\nimport type { DrawingMenuAction } from './drawingMenu.js';\n\n/**\n * The widget's switches, by name; every one is on until turned off. A name\n * without a dot is a whole capability, off wherever it shows (its button,\n * its menu entries, its command, its keys); a dotted name is one place.\n * A switch hides; it never adds a part that is off until its option asks\n * for it (`depthLadder: true`, `watchlist: true`).\n * The names are a contract: new ones are added, none is renamed.\n */\nexport const WIDGET_FEATURES = [\n // The bars.\n 'toolbar', 'sidebar', 'statusBar', 'dock',\n // Capabilities, wherever they show.\n 'alerts', 'objectTree', 'symbolInfo', 'symbolSearch', 'settings', 'indicatorSettings', 'drawingSettings',\n 'dataWindow', 'commandPalette', 'hotkeySheet', 'goToDate', 'replay', 'screenshot', 'copyImage', 'shareView',\n 'autoFib', 'themeToggle', 'fullscreen', 'accountPanel', 'orderTicket', 'bracketOrders', 'depthLadder',\n 'layouts', 'indicatorTemplates', 'compare', 'indicatorLegend', 'navigation', 'customTimeframes',\n 'intervalTyping', 'symbolTyping', 'dragDropImport', 'hotkeys', 'toasts',\n // The toolbar's buttons.\n 'toolbar.symbol', 'toolbar.symbolInfo', 'toolbar.timeframes', 'toolbar.timeframeMenu', 'toolbar.chartType',\n 'toolbar.indicators', 'toolbar.layouts', 'toolbar.replay', 'toolbar.bracketOrders', 'toolbar.depthLadder',\n 'toolbar.accountPanel', 'toolbar.objectTree', 'toolbar.alerts', 'toolbar.screenshot', 'toolbar.settings',\n 'toolbar.themeToggle', 'toolbar.fullscreen', 'toolbar.compare', 'toolbar.undo', 'toolbar.redo', 'toolbar.trade',\n // The drawing sidebar: its tools by section, then its buttons.\n 'sidebar.cursor', 'sidebar.favorites', 'sidebar.lines', 'sidebar.fibonacci', 'sidebar.patterns',\n 'sidebar.forecasting', 'sidebar.annotation', 'sidebar.style', 'sidebar.magnet', 'sidebar.eraser',\n 'sidebar.zoomArea', 'sidebar.stayInDrawing', 'sidebar.undo', 'sidebar.redo', 'sidebar.clear',\n 'sidebar.lockAll', 'sidebar.hideAll',\n // The dock's rail: a button for each panel.\n 'dock.watchlist', 'dock.alerts', 'dock.objectTree', 'dock.dataWindow', 'dock.symbolInfo', 'dock.depthLadder',\n // The status bar.\n 'statusBar.range', 'statusBar.goToDate', 'statusBar.market', 'statusBar.connection', 'statusBar.symbol',\n 'statusBar.clock', 'statusBar.scale',\n // A long range on the range bar switches to weeks or months, a short one back.\n 'statusBar.rangeTimeframe',\n // On the chart: the indicators' rows, the panes' buttons, the navigation.\n 'indicatorLegend.values', 'indicatorLegend.visibility', 'indicatorLegend.settings', 'indicatorLegend.remove',\n 'indicatorLegend.more', 'pane.move', 'pane.collapse', 'pane.maximize',\n 'navigation.zoom', 'navigation.scroll', 'navigation.reset',\n // Menus: a right-click on the chart (and the \"+\" by the price axis), and on a drawing.\n 'menu.chart', 'menu.chart.alert', 'menu.chart.order', 'menu.chart.orderTicket', 'menu.chart.horizontalLine',\n 'menu.chart.resetView', 'menu.chart.drawings', 'menu.chart.exportData', 'menu.chart.settings',\n 'menu.chart.scale', 'menu.chart.goToDate', 'menu.chart.paneScale', 'menu.priceAxisAdd',\n 'menu.chart.indicators', 'menu.chart.timezone',\n 'menu.drawing', 'menu.drawing.settings', 'menu.drawing.alert', 'menu.drawing.order', 'menu.drawing.group',\n 'menu.drawing.lock', 'menu.drawing.hide', 'menu.drawing.duplicate', 'menu.drawing.delete',\n // The toolbar that appears over a selected drawing.\n 'selectionToolbar',\n // Keys.\n 'hotkeys.commandPalette', 'hotkeys.symbolSearch', 'hotkeys.save', 'hotkeys.tools', 'hotkeys.invertScale',\n 'hotkeys.goToDate', 'hotkeys.help', 'hotkeys.resetView',\n] as const;\n\nexport type WidgetFeature = (typeof WIDGET_FEATURES)[number];\n/** Switches to turn on (`true`) or off (`false`), by name. */\nexport type WidgetFeatures = Partial<Record<WidgetFeature, boolean>>;\n/** Every switch, on or off. */\nexport type WidgetFeatureState = Readonly<Record<WidgetFeature, boolean>>;\n\nconst KNOWN: ReadonlySet<string> = new Set(WIDGET_FEATURES);\n\n/** The widget's older on/off options, each the switches it stands for. */\nexport const LEGACY_FEATURE_OPTIONS = {\n toolbar: ['toolbar'],\n drawingTools: ['sidebar', 'drawingSettings', 'hotkeys.tools', 'menu.chart.horizontalLine'],\n settings: ['settings'],\n statusBar: ['statusBar', 'goToDate'],\n rangeBar: ['statusBar.range', 'statusBar.rangeTimeframe', 'goToDate'],\n indicatorLegend: ['indicatorLegend'],\n fullscreen: ['fullscreen'],\n alerts: ['alerts'],\n objectTree: ['objectTree'],\n accountPanel: ['accountPanel', 'orderTicket'],\n indicatorTemplates: ['indicatorTemplates'],\n intervalTyping: ['intervalTyping'],\n symbolInfo: ['symbolInfo'],\n navigation: ['navigation'],\n dragDropImport: ['dragDropImport'],\n customTimeframes: ['customTimeframes'],\n} as const satisfies Record<string, readonly WidgetFeature[]>;\n\ntype LegacyOptions = { readonly [K in keyof typeof LEGACY_FEATURE_OPTIONS]?: unknown };\n\n/** The switches each chart menu entry needs on (the right-click menu and the \"+\" by the price axis). */\nexport const CHART_MENU_FEATURES: Readonly<Record<ChartMenuAction, readonly WidgetFeature[]>> = {\n alert: ['alerts', 'menu.chart.alert'],\n buyLimit: ['menu.chart.order'],\n buyStop: ['menu.chart.order'],\n sellLimit: ['menu.chart.order'],\n sellStop: ['menu.chart.order'],\n orderTicket: ['orderTicket', 'menu.chart.orderTicket'],\n horizontalLine: ['menu.chart.horizontalLine'],\n resetView: ['menu.chart.resetView'],\n paste: ['menu.chart.drawings'],\n hideDrawings: ['menu.chart.drawings'],\n showDrawings: ['menu.chart.drawings'],\n removeDrawings: ['menu.chart.drawings'],\n removeIndicators: ['menu.chart.indicators'],\n settings: ['settings', 'menu.chart.settings'],\n exportData: ['menu.chart.exportData'],\n resetPriceScale: ['menu.chart.scale'],\n autoScale: ['menu.chart.scale'],\n invertScale: ['menu.chart.scale'],\n leftScale: ['menu.chart.scale'],\n regularScale: ['menu.chart.scale'],\n logScale: ['menu.chart.scale'],\n percentScale: ['menu.chart.scale'],\n indexedScale: ['menu.chart.scale'],\n labels: ['menu.chart.scale'],\n indicatorValueLabels: ['menu.chart.scale'],\n alignAxisLabels: ['menu.chart.scale'],\n barCountdown: ['menu.chart.scale'],\n lines: ['menu.chart.scale'],\n highLowLines: ['menu.chart.scale'],\n lastPriceLine: ['menu.chart.scale'],\n goToDate: ['goToDate', 'menu.chart.goToDate'],\n timezone: ['menu.chart.timezone'],\n paneLog: ['menu.chart.paneScale'],\n paneInvert: ['menu.chart.paneScale'],\n panePercent: ['menu.chart.paneScale'],\n};\n\n/** The switches each entry of a drawing's menu needs on. */\nexport const DRAWING_MENU_FEATURES: Readonly<Record<DrawingMenuAction, readonly WidgetFeature[]>> = {\n settings: ['drawingSettings', 'menu.drawing.settings'],\n alert: ['alerts', 'menu.drawing.alert'],\n front: ['menu.drawing.order'],\n forward: ['menu.drawing.order'],\n backward: ['menu.drawing.order'],\n back: ['menu.drawing.order'],\n group: ['menu.drawing.group'],\n ungroup: ['menu.drawing.group'],\n lock: ['menu.drawing.lock'],\n unlock: ['menu.drawing.lock'],\n hide: ['menu.drawing.hide'],\n duplicate: ['menu.drawing.duplicate'],\n delete: ['menu.drawing.delete'],\n};\n\n/** The switch each command of the command palette needs on (by its action id). */\nexport const COMMAND_FEATURES: Readonly<Record<string, WidgetFeature>> = {\n symbolSearch: 'symbolSearch',\n compare: 'compare',\n goToDate: 'goToDate',\n saveLayout: 'layouts',\n alerts: 'alerts',\n objectTree: 'objectTree',\n hotkeys: 'hotkeySheet',\n screenshot: 'screenshot',\n copyImage: 'copyImage',\n toggleTheme: 'themeToggle',\n settings: 'settings',\n shareView: 'shareView',\n autoFib: 'autoFib',\n dataWindow: 'dataWindow',\n symbolInfo: 'symbolInfo',\n};\n\n/**\n * Switches as given (an option, a `setFeatures` call): known names set to\n * `true` or `false`. Anything else is dropped, with a warning.\n */\nexport function readWidgetFeatures(value: unknown): WidgetFeatures {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n const out: WidgetFeatures = {};\n const dropped: string[] = [];\n for (const [name, on] of Object.entries(value)) {\n if (KNOWN.has(name) && typeof on === 'boolean') out[name as WidgetFeature] = on;\n else dropped.push(name);\n }\n if (dropped.length > 0) {\n console.warn(`[ChartWidget] Unknown or non-boolean feature switches left out: ${dropped.join(', ')}.`);\n }\n return out;\n}\n\n/** Every switch at the start: on, then off where an older option says `false`, then as `features` says. */\nexport function resolveWidgetFeatures(options: LegacyOptions & { readonly features?: unknown }): WidgetFeatureState {\n const state = Object.fromEntries(WIDGET_FEATURES.map((name) => [name, true])) as Record<WidgetFeature, boolean>;\n for (const [option, names] of Object.entries(LEGACY_FEATURE_OPTIONS)) {\n if (options[option as keyof LegacyOptions] !== false) continue;\n for (const name of names) state[name] = false;\n }\n return { ...state, ...readWidgetFeatures(options.features) };\n}\n\n/** The switches that are off, space apart (the root's `data-tcw-off`). */\nexport function offFeatures(state: WidgetFeatureState): string {\n return WIDGET_FEATURES.filter((name) => !state[name]).join(' ');\n}\n\n/** A divider with nothing shown on one side of it. */\nconst DIVIDER_OFF = 'tcw-divider-off';\n\n/** Holders whose every part can be switched off: they go too, rather than show empty. */\nconst GROUPED_PARTS: readonly { names: readonly WidgetFeature[]; selector: string }[] = [\n { names: ['navigation.zoom', 'navigation.scroll', 'navigation.reset'], selector: '.tcw-nav' },\n { names: ['pane.move', 'pane.collapse', 'pane.maximize'], selector: '.tcw-pane-controls' },\n {\n names: ['indicatorLegend.visibility', 'indicatorLegend.settings', 'indicatorLegend.more', 'indicatorLegend.remove'],\n selector: '.tcw-ind-legend-actions',\n },\n];\n\n/** Hides every part (`data-tcw-part`) whose switch is off on its widget, and the dividers left with nothing to divide. */\nexport function widgetFeatureCss(): string {\n return [\n ...WIDGET_FEATURES.map((name) => `.tcw-root[data-tcw-off~=\"${name}\"] [data-tcw-part~=\"${name}\"]{display:none!important}`),\n ...GROUPED_PARTS.map(({ names, selector }) =>\n `.tcw-root${names.map((name) => `[data-tcw-off~=\"${name}\"]`).join('')} ${selector}{display:none!important}`),\n `.${DIVIDER_OFF}{display:none!important}`,\n ].join('\\n');\n}\n\n/** Marks an element as a part of the switches named: it is hidden while any of them is off. */\nexport function markPart(el: HTMLElement, ...names: WidgetFeature[]): void {\n el.dataset.tcwPart = names.join(' ');\n}\n\n/** The same mark as an attribute, for markup built as text. */\nexport function partAttr(...names: WidgetFeature[]): string {\n return `data-tcw-part=\"${names.join(' ')}\"`;\n}\n\n/** The switch a command of the command palette needs on, if it has one. */\nexport function commandFeature(id: string): WidgetFeature | undefined {\n return Object.prototype.hasOwnProperty.call(COMMAND_FEATURES, id) ? COMMAND_FEATURES[id] : undefined;\n}\n\n/**\n * Hides each divider among `container`'s children with nothing shown between\n * it and the edge, a boundary (a spacer) or the divider before it.\n */\nexport function tidyDividers(container: HTMLElement, dividerClass: string, boundaryClass?: string): void {\n const children = [...container.children] as HTMLElement[];\n const isDivider = (el: HTMLElement) => el.classList.contains(dividerClass);\n for (const el of children) if (isDivider(el)) el.classList.remove(DIVIDER_OFF);\n const shown = (el: HTMLElement) => !el.hidden && getComputedStyle(el).display !== 'none';\n // An empty holder (for a host's buttons, say) shows nothing.\n const isItem = (el: HTMLElement) => shown(el) && (el instanceof HTMLButtonElement || el.childElementCount > 0 || el.textContent !== '');\n let itemSince = false;\n let pending: HTMLElement | null = null;\n for (const el of children) {\n if (boundaryClass !== undefined && el.classList.contains(boundaryClass)) {\n pending?.classList.add(DIVIDER_OFF);\n pending = null;\n itemSince = false;\n } else if (isDivider(el)) {\n if (!shown(el)) continue;\n if (!itemSince) {\n el.classList.add(DIVIDER_OFF);\n } else {\n pending = el;\n itemSince = false;\n }\n } else if (isItem(el)) {\n itemSince = true;\n pending = null;\n }\n }\n pending?.classList.add(DIVIDER_OFF);\n}\n\n/**\n * A menu's entries with those whose switches are off left out, in its\n * submenus too (a submenu with nothing left goes), and no separator at\n * either end or next to another.\n */\nexport function filterMenuEntries<Id extends string>(\n entries: readonly ContextMenuEntry[],\n featuresOf: Readonly<Record<Id, readonly WidgetFeature[]>>,\n state: WidgetFeatureState,\n): ContextMenuEntry[] {\n const kept = entries.flatMap((entry): ContextMenuEntry[] => {\n if (entry === 'separator') return [entry];\n const names = (featuresOf as Readonly<Record<string, readonly WidgetFeature[]>>)[entry.id] ?? [];\n if (!names.every((name) => state[name])) return [];\n if (!entry.submenu) return [entry];\n const submenu = filterMenuEntries(entry.submenu, featuresOf, state);\n return submenu.length > 0 ? [{ ...entry, submenu }] : [];\n });\n return kept.filter((entry, i) => {\n if (entry !== 'separator') return true;\n const before = kept.slice(0, i).some((e) => e !== 'separator');\n const next = kept[i + 1];\n return before && next !== undefined && next !== 'separator';\n });\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ let e=require(`@tradecanvas/commons`);var t=[{zone:`Pacific/Honolulu`,city:`Honolulu`},{zone:`America/Los_Angeles`,city:`Los Angeles`},{zone:`America/Denver`,city:`Denver`},{zone:`America/Chicago`,city:`Chicago`},{zone:`America/New_York`,city:`New York`},{zone:`America/Toronto`,city:`Toronto`},{zone:`America/Sao_Paulo`,city:`São Paulo`},{zone:`UTC`,city:`UTC`},{zone:`Europe/London`,city:`London`},{zone:`Europe/Berlin`,city:`Frankfurt`},{zone:`Europe/Paris`,city:`Paris`},{zone:`Europe/Zurich`,city:`Zurich`},{zone:`Africa/Johannesburg`,city:`Johannesburg`},{zone:`Europe/Istanbul`,city:`Istanbul`},{zone:`Europe/Moscow`,city:`Moscow`},{zone:`Asia/Dubai`,city:`Dubai`},{zone:`Asia/Kolkata`,city:`Mumbai`},{zone:`Asia/Bangkok`,city:`Bangkok`},{zone:`Asia/Ho_Chi_Minh`,city:`Ho Chi Minh City`},{zone:`Asia/Jakarta`,city:`Jakarta`},{zone:`Asia/Singapore`,city:`Singapore`},{zone:`Asia/Hong_Kong`,city:`Hong Kong`},{zone:`Asia/Shanghai`,city:`Shanghai`},{zone:`Asia/Taipei`,city:`Taipei`},{zone:`Asia/Seoul`,city:`Seoul`},{zone:`Asia/Tokyo`,city:`Tokyo`},{zone:`Australia/Sydney`,city:`Sydney`},{zone:`Pacific/Auckland`,city:`Auckland`}],n=/^-?\d+$/,r=840;function i(e){if(!n.test(e))return null;let t=Number(e);return Math.abs(t)<=r?t:null}function a(t){return!t||t===`local`?null:t===`exchange`?`exchange`:n.test(t)?i(t):(0,e.isValidTimeZone)(t)?t:null}function o(e){return e===null?`local`:String(e)}function s(n,r,i,o){let s=(0,e.offsetAt)(null,r),c=t.filter(({zone:t})=>(0,e.isValidTimeZone)(t)).map(({zone:t,city:n})=>{let i=(0,e.offsetAt)(t,r);return{value:t,label:t===`UTC`?`UTC`:`(${(0,e.tzLabel)(i)}) ${n}`,offset:i}}),l=a(n);typeof l==`number`&&c.push({value:n,label:(0,e.tzLabel)(l),offset:l}),c.sort((e,t)=>e.offset-t.offset);let u=[{value:`local`,label:`${i} (${(0,e.tzLabel)(s)})`,offset:s}];if(o){let t=(0,e.offsetAt)(o.zone&&(0,e.isValidTimeZone)(o.zone)?o.zone:`UTC`,r);u.push({value:`exchange`,label:`${o.label} (${(0,e.tzLabel)(t)})`,offset:t})}return[...u,...c]}var c=[{label:`Candlestick`,value:`candlestick`},{label:`Line`,value:`line`},{label:`Area`,value:`area`},{label:`Bar`,value:`bar`},{label:`Heikin-Ashi`,value:`heikinAshi`},{label:`Hollow Candle`,value:`hollowCandle`},{label:`Baseline`,value:`baseline`},{label:`Volume Candles`,value:`volumeCandles`},{label:`Equivolume`,value:`equivolume`},{label:`HLC Area`,value:`hlcArea`},{label:`Step Line`,value:`stepLine`},{label:`Line + Markers`,value:`lineWithMarkers`},{label:`High-Low`,value:`hiLo`},{label:`Renko`,value:`renko`},{label:`Line Break`,value:`lineBreak`},{label:`Kagi`,value:`kagi`},{label:`Point & Figure`,value:`pointAndFigure`},{label:`Range Bars`,value:`rangeBars`}],l=[{label:`Lines`,section:`lines`,tools:[{label:`Trend Line`,value:`trendLine`},{label:`Ray`,value:`ray`},{label:`Extended Line`,value:`extendedLine`},{label:`Info Line`,value:`infoLine`},{label:`Trend Angle`,value:`trendAngle`}]},{label:`Horizontal/Vertical`,section:`lines`,tools:[{label:`Horizontal Line`,value:`horizontalLine`},{label:`Horizontal Ray`,value:`horizontalRay`},{label:`Vertical Line`,value:`verticalLine`},{label:`Cross Line`,value:`crossLine`}]},{label:`Channels`,section:`lines`,tools:[{label:`Parallel Channel`,value:`parallelChannel`},{label:`Regression Channel`,value:`regressionChannel`}]},{label:`Fibonacci`,section:`fibonacci`,tools:[{label:`Fib Retracement`,value:`fibRetracement`},{label:`Fib Extension`,value:`fibExtension`},{label:`Fib Channel`,value:`fibChannel`},{label:`Fib Time Zones`,value:`fibTimeZones`},{label:`Fib Speed Resistance Fan`,value:`fibSpeedResistanceFan`},{label:`Fib Speed Resistance Arcs`,value:`fibArcs`},{label:`Fib Circles`,value:`fibCircles`},{label:`Fib Spiral`,value:`fibSpiral`},{label:`Fib Wedge`,value:`fibWedge`}]},{label:`Gann & Pitchforks`,section:`fibonacci`,tools:[{label:`Pitchfork`,value:`pitchfork`},{label:`Schiff Pitchfork`,value:`schiffPitchfork`},{label:`Modified Schiff Pitchfork`,value:`modifiedSchiffPitchfork`},{label:`Gann Fan`,value:`gannFan`},{label:`Gann Box`,value:`gannBox`},{label:`Gann Square`,value:`gannSquare`},{label:`Pitchfan`,value:`pitchfan`}]},{label:`Cycles`,section:`fibonacci`,tools:[{label:`Cyclic Lines`,value:`cyclicLines`},{label:`Time Cycles`,value:`timeCycles`},{label:`Sine Line`,value:`sineLine`}]},{label:`Patterns`,section:`patterns`,tools:[{label:`XABCD Pattern`,value:`xabcdPattern`},{label:`ABCD Pattern`,value:`abcdPattern`},{label:`Head and Shoulders`,value:`headAndShoulders`},{label:`Cypher Pattern`,value:`cypherPattern`},{label:`Three Drives Pattern`,value:`threeDrives`}]},{label:`Elliott Waves`,section:`patterns`,tools:[{label:`Elliott Wave`,value:`elliottWave`},{label:`Elliott Impulse Wave`,value:`elliottImpulse`},{label:`Elliott Correction Wave`,value:`elliottCorrection`},{label:`Elliott Triangle Wave`,value:`elliottTriangle`},{label:`Elliott Double Combo Wave`,value:`elliottDoubleCombo`},{label:`Elliott Triple Combo Wave`,value:`elliottTripleCombo`}]},{label:`Forecasting`,section:`forecasting`,tools:[{label:`Long/Short Position`,value:`riskReward`},{label:`Anchored VWAP`,value:`anchoredVWAP`},{label:`Fixed Range Volume Profile`,value:`volumeProfileRange`},{label:`Forecast`,value:`forecast`},{label:`Projection`,value:`projection`},{label:`Bars Pattern`,value:`barsPattern`}]},{label:`Measure`,section:`forecasting`,tools:[{label:`Price Range`,value:`priceRange`},{label:`Date Range`,value:`dateRange`},{label:`Date and Price Range`,value:`dateAndPriceRange`},{label:`Measure`,value:`measure`}]},{label:`Shapes`,section:`annotation`,tools:[{label:`Rectangle`,value:`rectangle`},{label:`Circle`,value:`circle`},{label:`Ellipse`,value:`ellipse`},{label:`Triangle`,value:`triangle`},{label:`Polyline`,value:`polyline`},{label:`Curve`,value:`curve`},{label:`Arc`,value:`arc`}]},{label:`Brushes`,section:`annotation`,tools:[{label:`Brush`,value:`brush`},{label:`Highlighter`,value:`highlighter`},{label:`Path`,value:`path`}]},{label:`Annotation`,section:`annotation`,tools:[{label:`Text`,value:`text`},{label:`Price Label`,value:`priceLabel`},{label:`Arrow`,value:`arrow`},{label:`Note`,value:`note`},{label:`Callout`,value:`callout`},{label:`Flag Mark`,value:`flag`},{label:`Arrow Mark`,value:`arrowMark`},{label:`Icon`,value:`icon`},{label:`Signpost`,value:`signpost`},{label:`Balloon`,value:`balloon`},{label:`Anchored Text`,value:`anchoredText`},{label:`Anchored Note`,value:`anchoredNote`}]}],u=[`BTCUSDT`,`ETHUSDT`,`SOLUSDT`,`BNBUSDT`],d={gridVisible:!0,volumeVisible:!0,volumeProfileVisible:!1,marketProfileVisible:!1,marketProfileSplit:!1,marketProfileLetters:!1,marketProfileBuckets:48,marketProfileOpacity:.32,depthHeatmapVisible:!1,depthHeatmapOpacity:.7,sessionShadingVisible:!1,pivotMarkersVisible:!1,pivotStrength:5,pivotStructureLabels:!1,periodLevelsVisible:!1,periodLevelsPeriod:`day`,legendVisible:!0,barCountdown:!0,indicatorValueLabels:!1,alignAxisLabels:!0,logScale:!1,scaleMode:`regular`,autoScale:!0,invertScale:!1,leftPriceScale:!1,crosshairMode:`magnet`,numberLocale:`en-US`,timezone:`local`,highLowLines:!1,mainSeriesVisible:!0,extendedHours:!0,chartTypeOptions:{}},f=(e,...t)=>({label:e,keys:t}),p=(e,t,n={})=>({label:e,keys:[t],auto:n}),m=e=>({hint:e}),h={from:`panes.titleColor`},g={title:`settings.section.lastPrice`,rows:[f(`settings.priceLine`,`lastPrice.visible`),f(`settings.up`,`lastPrice.upColor`),f(`settings.down`,`lastPrice.downColor`),f(`drawingSettings.lineStyle`,`lastPrice.style`),f(`drawingSettings.lineWidth`,`lastPrice.width`)]},_={title:`settings.volume`,rows:[f(`settings.up`,`volume.upColor`),f(`settings.down`,`volume.downColor`)]},v={title:`settings.highLowLines`,rows:[p(`drawingSettings.color`,`highLow.color`,h)]},y=[g,_,v],b=[f(`settings.legendText`,`legend.textColor`),f(`settings.legendLabels`,`legend.labelColor`)],x=[...b,f(`settings.paneTitles`,`panes.titleColor`)],S=[f(`drawingSettings.text`,`axis.price.textColor`,`axis.time.textColor`),f(`settings.scaleLines`,`axis.price.lineColor`,`axis.time.lineColor`)],C=[{title:`settings.section.background`,rows:[f(`settings.background`,`background.color`),f(`settings.paneBackground`,`panes.background`),f(`settings.paneSeparator`,`panes.separatorColor`),p(`settings.watermark`,`watermark.color`,h)]},{title:`settings.gridLines`,rows:[f(`settings.horizontal`,`grid.horizontal.visible`),f(`settings.vertical`,`grid.vertical.visible`),f(`drawingSettings.color`,`grid.horizontal.color`,`grid.vertical.color`),f(`drawingSettings.lineStyle`,`grid.horizontal.style`,`grid.vertical.style`),f(`drawingSettings.lineWidth`,`grid.horizontal.width`,`grid.vertical.width`)]},{title:`settings.crosshairMode`,rows:[f(`settings.horizontal`,`crosshair.horizontal.visible`),f(`settings.vertical`,`crosshair.vertical.visible`),f(`drawingSettings.color`,`crosshair.horizontal.color`,`crosshair.vertical.color`),f(`drawingSettings.lineStyle`,`crosshair.horizontal.style`,`crosshair.vertical.style`),f(`drawingSettings.lineWidth`,`crosshair.horizontal.width`,`crosshair.vertical.width`),f(`settings.labelBackground`,`crosshair.labelBackground`),f(`settings.labelText`,`crosshair.labelTextColor`)]},{title:`settings.sessionBreaks`,rows:[p(`drawingSettings.color`,`sessionBreaks.color`,{from:`axis.price.lineColor`}),p(`drawingSettings.lineStyle`,`sessionBreaks.style`),p(`drawingSettings.lineWidth`,`sessionBreaks.width`)]},{title:`objects.drawings`,rows:[p(`settings.handles`,`drawings.handleColor`,m(`#ffffff`))]}],w=[{title:`settings.section.orders`,trading:!0,rows:[p(`ticket.buy`,`trading.buyColor`,m(e.DEFAULT_TRADING_CONFIG.orderColors?.buy)),p(`ticket.sell`,`trading.sellColor`,m(e.DEFAULT_TRADING_CONFIG.orderColors?.sell)),p(`settings.profit`,`trading.profitColor`,m(e.DEFAULT_TRADING_CONFIG.positionColors?.profit)),p(`settings.loss`,`trading.lossColor`,m(e.DEFAULT_TRADING_CONFIG.positionColors?.loss)),p(`account.entry`,`trading.entryColor`,m(e.DEFAULT_TRADING_CONFIG.positionColors?.entry))]},{title:`settings.section.signals`,rows:[p(`account.long`,`markers.longColor`,m(e.DEFAULT_SIGNAL_STYLE.longColor)),p(`account.short`,`markers.shortColor`,m(e.DEFAULT_SIGNAL_STYLE.shortColor)),p(`markers.neutral`,`markers.neutralColor`,m(e.DEFAULT_SIGNAL_STYLE.neutralColor))]},{title:`settings.section.tradeZones`,rows:[p(`settings.profit`,`tradeZones.profitColor`,m(e.DEFAULT_TRADE_ZONE_STYLE.profitColor)),p(`settings.loss`,`tradeZones.lossColor`,m(e.DEFAULT_TRADE_ZONE_STYLE.lossColor)),p(`settings.openTrade`,`tradeZones.activeColor`,m(e.DEFAULT_TRADE_ZONE_STYLE.activeColor))]}],T={upColor:`settings.up`,downColor:`settings.down`,wickUpColor:`settings.upWick`,wickDownColor:`settings.downWick`,color:`drawingSettings.color`,lineColor:`drawingSettings.color`,lineWidth:`drawingSettings.lineWidth`,topColor:`settings.areaTop`,bottomColor:`settings.areaBottom`},E=new Set([`candlestick`,`heikinAshi`,`volumeCandles`,`equivolume`]);function D(t){let n=`series.${t}.`;return Object.keys(e.CHART_STYLE_KEYS).filter(e=>e.startsWith(n)).map(e=>{let r=e.slice(n.length),i=T[r]??`drawingSettings.color`;return E.has(t)&&r===`upColor`&&(i=`settings.upBody`),E.has(t)&&r===`downColor`&&(i=`settings.downBody`),t===`baseline`&&r===`upColor`&&(i=`settings.aboveBase`),t===`baseline`&&r===`downColor`&&(i=`settings.belowBase`),f(i,e)})}var O=[...new Set([...Object.keys(e.CHART_STYLE_KEYS).filter(e=>e.startsWith(`series.`)),...[...y,...C,...w].flatMap(e=>e.rows.flatMap(e=>e.keys)),...[...x,...S].flatMap(e=>e.keys)])],k=[`en-US`,`en-GB`,`en-IN`,`de-DE`,`fr-FR`,`es-ES`,`it-IT`,`pt-BR`,`ru-RU`,`tr-TR`,`vi-VN`,`id-ID`,`th-TH`,`zh-CN`,`zh-TW`,`ja-JP`,`ko-KR`],A=65234;function j(e){return(e&&!k.includes(e)?[e,...k]:k).map(e=>{let t;try{t=new Intl.NumberFormat(e,{minimumFractionDigits:2,maximumFractionDigits:2}).format(A)}catch{t=``}return{value:e,label:t?`${e} (${t})`:e}})}var M={Lines:`toolGroup.lines`,"Horizontal/Vertical":`toolGroup.horizontalVertical`,Channels:`toolGroup.channels`,Fibonacci:`toolGroup.fibonacci`,Shapes:`toolGroup.shapes`,"Gann & Pitchforks":`toolGroup.gannPitchforks`,Patterns:`toolGroup.patterns`,Measure:`toolGroup.measure`,Annotation:`toolGroup.annotation`,Forecasting:`toolGroup.forecasting`,Brushes:`toolGroup.brushes`,Cycles:`toolGroup.cycles`,"Elliott Waves":`toolGroup.elliott`};function N(e,t){let n=`chartType.${e.value}`,r=t(n);return r===n?e.label:r}function P(e,t){return e.map(e=>({...e,label:M[e.label]?t(M[e.label]):e.label,tools:e.tools.map(e=>{let n=`tool.${e.value}`,r=t(n);return{...e,label:r===n?e.label:r}})}))}Object.defineProperty(exports,`_`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`b`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return w}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`g`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return O}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return P}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return D}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return j}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return N}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`v`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`y`,{enumerable:!0,get:function(){return s}});
2
+ //# sourceMappingURL=widgetLocales-BPK5i0Ok.cjs.map