@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":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAG5E,YAAY,EACV,OAAO,EACP,UAAU,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,UAAU,EACV,SAAS,EACT,KAAK,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,yBAAyB,EACzB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,eAAe,EACf,SAAS,EACT,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,MAAM,EACN,aAAa,EACb,YAAY,EACZ,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,gBAAgB,EAChB,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,OAAO,EACP,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,SAAS,EACT,eAAe,EACf,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EACL,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,gBAAgB,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EACxJ,mBAAmB,EAAE,gBAAgB,EACrC,qBAAqB,EAAE,sBAAsB,EAC7C,oBAAoB,EAAE,wBAAwB,EAC9C,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,2BAA2B,GACnF,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACpH,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAGxD,OAAO,EACL,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,oBAAoB,EAAE,YAAY,EAAE,iBAAiB,EACjG,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAE,SAAS,GACxD,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGvL,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACvF,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC5G,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACvG,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAGnE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACxH,YAAY,EACV,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG1I,OAAO,EACL,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAChG,UAAU,EAAE,UAAU,EAAE,gBAAgB,EACxC,aAAa,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EACvF,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAC7F,WAAW,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,GACtF,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGzE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC3I,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGxI,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACpb,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7H,YAAY,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,aAAa,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtN,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAClK,YAAY,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAG7G,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC9G,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGtI,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACpE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3I,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC/H,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGtF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGpE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACzF,YAAY,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3F,YAAY,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9E,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC/F,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGxF,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,oBAAoB,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACrP,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACvH,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,qBAAqB,EACrB,cAAc,GACf,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,aAAa,GACd,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,MAAM,EACN,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,oBAAoB,EACpB,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { C as e, D as t, E as n, S as r, T as i, _ as a, a as o, b as s, c, g as l, h as u, i as ee, l as te, m as ne, n as re, o as ie, p as ae, r as oe, s as se, t as ce, u as le, v as ue, w as de, x as fe, y as pe } from "./LayoutSession-BOQCN6yY.js";
1
+ import { C as e, D as t, E as n, S as r, T as i, _ as a, a as o, b as s, c, g as l, h as u, i as ee, l as te, m as ne, n as re, o as ie, p as ae, r as oe, s as se, t as ce, u as le, v as ue, w as de, x as fe, y as pe } from "./LayoutSession-qRYG8GTD.js";
2
2
  import { CHART_STYLE_KEYS as me, DARK_PRICE_LIMITS as he, DARK_TERMINAL as ge, DARK_THEME as _e, DARK_THEME as ve, DEFAULT_DRAWING_STYLE as ye, DEFAULT_FONT_FAMILY as be, DEFAULT_RECONNECT as xe, DEFAULT_SIGNAL_STYLE as Se, DEFAULT_STREAM_CONFIG as Ce, DEFAULT_TIMEFRAME_FAVORITES as we, DEFAULT_TRADE_ZONE_STYLE as Te, DEFAULT_TRADING_CONFIG as Ee, HNX_SESSIONS as d, HOSE_SESSIONS as f, KRX_SESSIONS as p, KR_COLORS as m, LIGHT_PRICE_LIMITS as h, LIGHT_THEME as g, LIGHT_THEME as _, MARKET_CRYPTO as v, MARKET_HNX as y, MARKET_HOSE as b, MARKET_HOSE_ETF as x, MARKET_KRX as S, MARKET_NXT as C, MARKET_NYSE as w, MARKET_UPBIT_KRW as T, MARKET_UPCOM as E, MARKET_VN30F as D, MS_TIME_THRESHOLD as De, NXT_SESSIONS as Oe, PRICE_SOURCES as ke, SANS_FONT_FAMILY as Ae, TC_PALETTE as je, TC_SERIES_COLORS as Me, TIMEFRAMES_CRYPTO as Ne, TIMEFRAMES_FOREX as Pe, TIMEFRAMES_STOCK as Fe, UPCOM_SESSIONS as Ie, VN30F_SESSIONS as Le, VN_COLORS as Re, VOLUME_ALPHA as ze, barTimeUnit as Be, barsAreDaily as Ve, computePriceLimits as He, contrastRatio as Ue, createMarketTheme as We, createVNTheme as Ge, formatFraction as Ke, formatNumber as qe, formatVND as Je, formatVolumeLoc as Ye, fractionTick as Xe, getCurrentSession as Ze, getLocale as Qe, indicatorSource as $e, inkOn as et, isPriceSource as tt, isTimeFrame as nt, isValidTimeZone as rt, marketStatus as it, normalizeBar as at, normalizeBarTime as ot, offsetAt as st, parseIndicatorSource as ct, parseTimeframe as lt, pickBaseTimeframe as ut, priceFormatterFor as dt, priceStepAt as ft, rankSymbols as pt, readNews as mt, readQuote as ht, readableOn as gt, registerLocale as _t, resampleBars as vt, roundToPriceStep as yt, scaleMarketPrices as bt, setLocale as xt, sourcePrice as St, stepDecimals as Ct, symbolTimeZone as wt, t as Tt, tickBarCount as Et, timeframeBucketStart as Dt, timeframeBucketStart as Ot, timeframeToMs as kt, usesKoreanUnits as At, vn30fContracts as jt, vn30fLastTradingDay as Mt, volumeColor as Nt, wallToUtc as Pt, zoneOffsetMinutes as Ft } from "@tradecanvas/commons";
3
3
  import { AlertManager as It, Animator as Lt, BarCountdown as Rt, BaseFinanceChart as O, BinanceAdapter as zt, BybitAdapter as Bt, CANDLE_PATTERNS as Vt, ChartLegend as Ht, ChartStateManager as Ut, CoinbaseAdapter as Wt, CompareRenderer as Gt, CrosshairTooltip as Kt, CurrentPriceLine as qt, DEFAULT_LEGEND_CONFIG as Jt, DEFAULT_MAX_WEBGL_CHARTS as Yt, DEFAULT_SESSION_HOURS as Xt, DataExporter as Zt, DrawingBase as Qt, Easing as $t, FinanceCrosshair as k, GROUP_HEADER as en, INDICATOR_CATEGORIES as tn, IndicatorBase as nn, IndicatorValueMap as rn, KEPT_BUCKETS as an, KeyboardHandler as on, KrakenAdapter as sn, MAX_ALERT_BARS as cn, MIN_ALERT_BARS as ln, ManualFeed as un, MockAdapter as dn, PaperExecutionAdapter as fn, PollingAdapter as pn, RANGE_PRESETS as mn, ReconnectManager as hn, ReplayController as gn, ReplayManager as _n, ResamplingAdapter as vn, ReshapeMemo as yn, Screenshot as bn, SessionBreaks as xn, SessionShading as Sn, SignalMarkerManager as A, StreamManager as Cn, TickAggregator as wn, TickBarAdapter as Tn, TickBarBuilder as En, TradeZoneManager as Dn, UndoRedoManager as On, UpbitAdapter as kn, VolumeRenderer as An, Watermark as jn, WebSocketAdapter as Mn, adapterFromFeed as Nn, axisTimes as Pn, barIndexToTime as Fn, barIndexToX as In, barIndexToX as j, canvasMeasure as Ln, computeBarLayout as Rn, computeCalendarLayout as zn, computeCounterClockLayout as Bn, computeDonutLayout as Vn, computeHistogramLayout as Hn, computeMatrixLayout as Un, computeScatterLayout as Wn, correlationMatrix as Gn, counterClockPhase as Kn, counterClockPhase as qn, counterClockPoints as Jn, counterClockPoints as Yn, describeInputs as Xn, detectCandlePatterns as Zn, feedFromAdapter as Qn, formatTooltipTime as $n, histogramBins as er, hitBar as M, hitDay as N, hitMatrixCell as P, hitSlice as F, indicatorCategory as tr, isDataFeed as nr, isDataFeed as rr, isPriceLevelAlert as ir, layoutGroupedTreemap as ar, layoutSquarifiedTreemap as or, layoutUniformGrid as sr, lttbDownsample as cr, lttbVisibleIndices as lr, nearestCounterClockPoint as I, nearestPoint as L, niceScale as ur, priceToY as dr, priceToYMapper as fr, priceToYMapper as pr, rangePresetStart as mr, renderBarChart as hr, renderCalendar as gr, renderCounterClock as _r, renderDepthChart as vr, renderDonut as yr, renderEquityCurve as br, renderGauge as xr, renderHeatmap as Sr, renderHistogram as Cr, renderMatrix as wr, renderScatter as Tr, renderSparkline as Er, renderWaterfall as Dr, servesTimeframe as Or, setMaxWebGLCharts as kr, shownCount as Ar, timeToX as jr, timestampToBarIndex as Mr, timestampToBarIndex as Nr, toHeikinAshi as Pr, toKagi as Fr, toLineBreak as Ir, toPointAndFigure as Lr, toRangeBars as Rr, toRenko as zr, withResampling as Br, withTickBars as Vr, xToBarIndex as Hr, xToBarIndex as R, xToTime as Ur, yToPrice as Wr, yToPrice as Gr } from "@tradecanvas/core";
4
4
  //#region src/frameworks/syncIndicators.ts
@@ -0,0 +1,25 @@
1
+ import { t as e } from "./indicatorLabel-Sbegyhp2.js";
2
+ import { c as t } from "./i18n-C5v6Tzp1.js";
3
+ //#region src/widget/indicatorInputWords.ts
4
+ function n(e) {
5
+ return Object.prototype.hasOwnProperty.call(t, e);
6
+ }
7
+ function r(e, t) {
8
+ let r = `indicatorInput.${e}`;
9
+ return n(r) ? t(r) : null;
10
+ }
11
+ function i(e, t, r) {
12
+ let i = `indicatorInput.${e}.${t}`;
13
+ return n(i) ? r(i) : null;
14
+ }
15
+ function a(t, n) {
16
+ let { defaultConfig: r, shortName: a, inputs: o } = t.descriptor, s = Object.entries(o ?? {}).flatMap(([e, a]) => {
17
+ let o = t.params[e];
18
+ return !a.options || typeof o != "string" && typeof o != "number" || o === r[e] ? [] : i(e, o, n) ?? [];
19
+ });
20
+ return [e(t.id, t.params, r, a), ...s].join(" ");
21
+ }
22
+ //#endregion
23
+ export { r as n, a as r, i as t };
24
+
25
+ //# sourceMappingURL=indicatorInputWords-Bd9Pt6qp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorInputWords-Bd9Pt6qp.js","names":[],"sources":["../src/widget/indicatorInputWords.ts"],"sourcesContent":["import type { IndicatorDescriptor } from '@tradecanvas/commons';\nimport { indicatorChipLabel } from '../indicatorLabel.js';\nimport { EN_MESSAGES, type MessageKey, type Translator } from './i18n.js';\n\n/**\n * Words for an indicator's inputs in the widget's language: an input named\n * `anchor` is `indicatorInput.anchor`, its choice `'week'` is\n * `indicatorInput.anchor.week`. Only inputs the widget has words for; any\n * other keeps its own label and its values as they are.\n */\n\n/** Whether the widget has a message under `key`, one built from an input's name. */\nfunction isMessageKey(key: string): key is MessageKey {\n return Object.prototype.hasOwnProperty.call(EN_MESSAGES, key);\n}\n\n/** An input's label in the widget's language, or null for one it has no word for. */\nexport function inputLabel(name: string, t: Translator): string | null {\n const key = `indicatorInput.${name}`;\n return isMessageKey(key) ? t(key) : null;\n}\n\n/** A choice of an input in the widget's language, or null for one it has no word for. */\nexport function choiceLabel(name: string, choice: string | number, t: Translator): string | null {\n const key = `indicatorInput.${name}.${choice}`;\n return isMessageKey(key) ? t(key) : null;\n}\n\n/** An indicator on the chart, as the widget names it. */\nexport interface NamedIndicator {\n id: string;\n params: Record<string, unknown>;\n descriptor: Pick<IndicatorDescriptor, 'defaultConfig' | 'shortName' | 'inputs'>;\n}\n\n/**\n * The indicator's name in the legend, the chips and the Objects panel: its\n * chip label ('EMA 21'), then the word for each choice off its default, so\n * two read apart ('VWAP', 'VWAP Week'). The CSV column keeps the chip label.\n */\nexport function widgetIndicatorLabel(ind: NamedIndicator, t: Translator): string {\n const { defaultConfig, shortName, inputs } = ind.descriptor;\n const words = Object.entries(inputs ?? {}).flatMap(([name, spec]) => {\n const value = ind.params[name];\n if (!spec.options || (typeof value !== 'string' && typeof value !== 'number') || value === defaultConfig[name]) return [];\n return choiceLabel(name, value, t) ?? [];\n });\n return [indicatorChipLabel(ind.id, ind.params, defaultConfig, shortName), ...words].join(' ');\n}\n"],"mappings":";;;AAYA,SAAS,EAAa,GAAgC;AACpD,QAAO,OAAO,UAAU,eAAe,KAAK,GAAa,EAAI;;AAI/D,SAAgB,EAAW,GAAc,GAA8B;CACrE,IAAM,IAAM,kBAAkB;AAC9B,QAAO,EAAa,EAAI,GAAG,EAAE,EAAI,GAAG;;AAItC,SAAgB,EAAY,GAAc,GAAyB,GAA8B;CAC/F,IAAM,IAAM,kBAAkB,EAAK,GAAG;AACtC,QAAO,EAAa,EAAI,GAAG,EAAE,EAAI,GAAG;;AAetC,SAAgB,EAAqB,GAAqB,GAAuB;CAC/E,IAAM,EAAE,kBAAe,cAAW,cAAW,EAAI,YAC3C,IAAQ,OAAO,QAAQ,KAAU,EAAE,CAAC,CAAC,SAAS,CAAC,GAAM,OAAU;EACnE,IAAM,IAAQ,EAAI,OAAO;AAEzB,SADI,CAAC,EAAK,WAAY,OAAO,KAAU,YAAY,OAAO,KAAU,YAAa,MAAU,EAAc,KAAc,EAAE,GAClH,EAAY,GAAM,GAAO,EAAE,IAAI,EAAE;GACxC;AACF,QAAO,CAAC,EAAmB,EAAI,IAAI,EAAI,QAAQ,GAAe,EAAU,EAAE,GAAG,EAAM,CAAC,KAAK,IAAI"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./indicatorLabel-BNZvaOcl.cjs`),t=require(`./i18n-C2nQBZTY.cjs`);function n(e){return Object.prototype.hasOwnProperty.call(t.c,e)}function r(e,t){let r=`indicatorInput.${e}`;return n(r)?t(r):null}function i(e,t,r){let i=`indicatorInput.${e}.${t}`;return n(i)?r(i):null}function a(t,n){let{defaultConfig:r,shortName:a,inputs:o}=t.descriptor,s=Object.entries(o??{}).flatMap(([e,a])=>{let o=t.params[e];return!a.options||typeof o!=`string`&&typeof o!=`number`||o===r[e]?[]:i(e,o,n)??[]});return[e.t(t.id,t.params,r,a),...s].join(` `)}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return i}});
2
+ //# sourceMappingURL=indicatorInputWords-CTA4IcJR.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorInputWords-CTA4IcJR.cjs","names":[],"sources":["../src/widget/indicatorInputWords.ts"],"sourcesContent":["import type { IndicatorDescriptor } from '@tradecanvas/commons';\nimport { indicatorChipLabel } from '../indicatorLabel.js';\nimport { EN_MESSAGES, type MessageKey, type Translator } from './i18n.js';\n\n/**\n * Words for an indicator's inputs in the widget's language: an input named\n * `anchor` is `indicatorInput.anchor`, its choice `'week'` is\n * `indicatorInput.anchor.week`. Only inputs the widget has words for; any\n * other keeps its own label and its values as they are.\n */\n\n/** Whether the widget has a message under `key`, one built from an input's name. */\nfunction isMessageKey(key: string): key is MessageKey {\n return Object.prototype.hasOwnProperty.call(EN_MESSAGES, key);\n}\n\n/** An input's label in the widget's language, or null for one it has no word for. */\nexport function inputLabel(name: string, t: Translator): string | null {\n const key = `indicatorInput.${name}`;\n return isMessageKey(key) ? t(key) : null;\n}\n\n/** A choice of an input in the widget's language, or null for one it has no word for. */\nexport function choiceLabel(name: string, choice: string | number, t: Translator): string | null {\n const key = `indicatorInput.${name}.${choice}`;\n return isMessageKey(key) ? t(key) : null;\n}\n\n/** An indicator on the chart, as the widget names it. */\nexport interface NamedIndicator {\n id: string;\n params: Record<string, unknown>;\n descriptor: Pick<IndicatorDescriptor, 'defaultConfig' | 'shortName' | 'inputs'>;\n}\n\n/**\n * The indicator's name in the legend, the chips and the Objects panel: its\n * chip label ('EMA 21'), then the word for each choice off its default, so\n * two read apart ('VWAP', 'VWAP Week'). The CSV column keeps the chip label.\n */\nexport function widgetIndicatorLabel(ind: NamedIndicator, t: Translator): string {\n const { defaultConfig, shortName, inputs } = ind.descriptor;\n const words = Object.entries(inputs ?? {}).flatMap(([name, spec]) => {\n const value = ind.params[name];\n if (!spec.options || (typeof value !== 'string' && typeof value !== 'number') || value === defaultConfig[name]) return [];\n return choiceLabel(name, value, t) ?? [];\n });\n return [indicatorChipLabel(ind.id, ind.params, defaultConfig, shortName), ...words].join(' ');\n}\n"],"mappings":"kFAYA,SAAS,EAAa,EAAgC,CACpD,OAAO,OAAO,UAAU,eAAe,KAAK,EAAA,EAAa,EAAI,CAI/D,SAAgB,EAAW,EAAc,EAA8B,CACrE,IAAM,EAAM,kBAAkB,IAC9B,OAAO,EAAa,EAAI,CAAG,EAAE,EAAI,CAAG,KAItC,SAAgB,EAAY,EAAc,EAAyB,EAA8B,CAC/F,IAAM,EAAM,kBAAkB,EAAK,GAAG,IACtC,OAAO,EAAa,EAAI,CAAG,EAAE,EAAI,CAAG,KAetC,SAAgB,EAAqB,EAAqB,EAAuB,CAC/E,GAAM,CAAE,gBAAe,YAAW,UAAW,EAAI,WAC3C,EAAQ,OAAO,QAAQ,GAAU,EAAE,CAAC,CAAC,SAAS,CAAC,EAAM,KAAU,CACnE,IAAM,EAAQ,EAAI,OAAO,GAEzB,MADI,CAAC,EAAK,SAAY,OAAO,GAAU,UAAY,OAAO,GAAU,UAAa,IAAU,EAAc,GAAc,EAAE,CAClH,EAAY,EAAM,EAAO,EAAE,EAAI,EAAE,EACxC,CACF,MAAO,CAAC,EAAA,EAAmB,EAAI,GAAI,EAAI,OAAQ,EAAe,EAAU,CAAE,GAAG,EAAM,CAAC,KAAK,IAAI"}
@@ -0,0 +1,2 @@
1
+ var e=3,t={stochrsi:4,ichimoku:4};function n(n,r,i,a){let o=Object.keys(i||r).map(e=>r[e]).filter(e=>typeof e==`number`&&Number.isFinite(e)).slice(0,t[n]??e).map(e=>String(Number(e.toFixed(4)))),s=typeof r.symbol==`string`&&r.symbol?[r.symbol]:[];return[n===`spread`&&r.mode===`ratio`?`Ratio`:a??n.toUpperCase(),...s,...o].join(` `)}Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return n}});
2
+ //# sourceMappingURL=indicatorLabel-BNZvaOcl.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorLabel-BNZvaOcl.cjs","names":[],"sources":["../src/indicatorLabel.ts"],"sourcesContent":["/** How many numeric parameters a label shows, so a long list stays short. */\nconst LABEL_NUMBERS = 3;\n\n/**\n * Indicators whose label shows more than that, because every one of the\n * lengths named tells two instances apart: Stochastic RSI's %D smoothing is\n * its fourth, and without it a 3/3 and a 3/5 read the same; Ichimoku's\n * displacement is its fourth.\n */\nconst LABEL_NUMBERS_BY_ID: Readonly<Record<string, number>> = { stochrsi: 4, ichimoku: 4 };\n\n/**\n * \"EMA 20\", \"BB 20 2\", \"MACD 12 26 9\": the short name (`shortName`, else the\n * id in capitals) plus up to three numeric parameters (four for Stochastic\n * RSI and Ichimoku), in the indicator's own order, so two instances of the same indicator\n * can be told apart.\n */\nexport function indicatorChipLabel(\n id: string,\n params: Record<string, unknown>,\n defaults?: Record<string, unknown>,\n shortName?: string,\n): string {\n const order = defaults ? Object.keys(defaults) : Object.keys(params);\n const numbers = order\n .map((k) => params[k])\n .filter((v): v is number => typeof v === 'number' && Number.isFinite(v))\n .slice(0, LABEL_NUMBERS_BY_ID[id] ?? LABEL_NUMBERS)\n .map((v) => String(Number(v.toFixed(4))));\n // An indicator on another symbol is named after it (\"Compare ETHUSDT\", \"Ratio ETHUSDT\").\n const symbol = typeof params.symbol === 'string' && params.symbol ? [params.symbol] : [];\n const name = id === 'spread' && params.mode === 'ratio' ? 'Ratio' : shortName ?? id.toUpperCase();\n return [name, ...symbol, ...numbers].join(' ');\n}\n"],"mappings":"AACA,IAAM,EAAgB,EAQhB,EAAwD,CAAE,SAAU,EAAG,SAAU,EAAG,CAQ1F,SAAgB,EACd,EACA,EACA,EACA,EACQ,CAER,IAAM,EADmB,OAAO,KAAlB,GAA+C,EAAO,CAEjE,IAAK,GAAM,EAAO,GAAG,CACrB,OAAQ,GAAmB,OAAO,GAAM,UAAY,OAAO,SAAS,EAAE,CAAC,CACvE,MAAM,EAAG,EAAoB,IAAO,EAAc,CAClD,IAAK,GAAM,OAAO,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAErC,EAAS,OAAO,EAAO,QAAW,UAAY,EAAO,OAAS,CAAC,EAAO,OAAO,CAAG,EAAE,CAExF,MAAO,CADM,IAAO,UAAY,EAAO,OAAS,QAAU,QAAU,GAAa,EAAG,aAAa,CACnF,GAAG,EAAQ,GAAG,EAAQ,CAAC,KAAK,IAAI"}
@@ -0,0 +1,17 @@
1
+ //#region src/indicatorLabel.ts
2
+ var e = 3, t = {
3
+ stochrsi: 4,
4
+ ichimoku: 4
5
+ };
6
+ function n(n, r, i, a) {
7
+ let o = Object.keys(i || r).map((e) => r[e]).filter((e) => typeof e == "number" && Number.isFinite(e)).slice(0, t[n] ?? e).map((e) => String(Number(e.toFixed(4)))), s = typeof r.symbol == "string" && r.symbol ? [r.symbol] : [];
8
+ return [
9
+ n === "spread" && r.mode === "ratio" ? "Ratio" : a ?? n.toUpperCase(),
10
+ ...s,
11
+ ...o
12
+ ].join(" ");
13
+ }
14
+ //#endregion
15
+ export { n as t };
16
+
17
+ //# sourceMappingURL=indicatorLabel-Sbegyhp2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorLabel-Sbegyhp2.js","names":[],"sources":["../src/indicatorLabel.ts"],"sourcesContent":["/** How many numeric parameters a label shows, so a long list stays short. */\nconst LABEL_NUMBERS = 3;\n\n/**\n * Indicators whose label shows more than that, because every one of the\n * lengths named tells two instances apart: Stochastic RSI's %D smoothing is\n * its fourth, and without it a 3/3 and a 3/5 read the same; Ichimoku's\n * displacement is its fourth.\n */\nconst LABEL_NUMBERS_BY_ID: Readonly<Record<string, number>> = { stochrsi: 4, ichimoku: 4 };\n\n/**\n * \"EMA 20\", \"BB 20 2\", \"MACD 12 26 9\": the short name (`shortName`, else the\n * id in capitals) plus up to three numeric parameters (four for Stochastic\n * RSI and Ichimoku), in the indicator's own order, so two instances of the same indicator\n * can be told apart.\n */\nexport function indicatorChipLabel(\n id: string,\n params: Record<string, unknown>,\n defaults?: Record<string, unknown>,\n shortName?: string,\n): string {\n const order = defaults ? Object.keys(defaults) : Object.keys(params);\n const numbers = order\n .map((k) => params[k])\n .filter((v): v is number => typeof v === 'number' && Number.isFinite(v))\n .slice(0, LABEL_NUMBERS_BY_ID[id] ?? LABEL_NUMBERS)\n .map((v) => String(Number(v.toFixed(4))));\n // An indicator on another symbol is named after it (\"Compare ETHUSDT\", \"Ratio ETHUSDT\").\n const symbol = typeof params.symbol === 'string' && params.symbol ? [params.symbol] : [];\n const name = id === 'spread' && params.mode === 'ratio' ? 'Ratio' : shortName ?? id.toUpperCase();\n return [name, ...symbol, ...numbers].join(' ');\n}\n"],"mappings":";AACA,IAAM,IAAgB,GAQhB,IAAwD;CAAE,UAAU;CAAG,UAAU;CAAG;AAQ1F,SAAgB,EACd,GACA,GACA,GACA,GACQ;CAER,IAAM,IADmB,OAAO,KAAlB,KAA+C,EAAO,CAEjE,KAAK,MAAM,EAAO,GAAG,CACrB,QAAQ,MAAmB,OAAO,KAAM,YAAY,OAAO,SAAS,EAAE,CAAC,CACvE,MAAM,GAAG,EAAoB,MAAO,EAAc,CAClD,KAAK,MAAM,OAAO,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAErC,IAAS,OAAO,EAAO,UAAW,YAAY,EAAO,SAAS,CAAC,EAAO,OAAO,GAAG,EAAE;AAExF,QAAO;EADM,MAAO,YAAY,EAAO,SAAS,UAAU,UAAU,KAAa,EAAG,aAAa;EACnF,GAAG;EAAQ,GAAG;EAAQ,CAAC,KAAK,IAAI"}
@@ -0,0 +1,2 @@
1
+ const e=require(`./focusTrap-DrhhmG0V.cjs`),t=require(`./settingsControls-Tn8_vJJv.cjs`);let n=require(`@tradecanvas/core`);var r=[1,1.5,2,3,4],i=[`solid`,`dashed`,`dotted`],a=`#4c8dff`,o=10,s={ticks:`toolbar.timeframes.ticks`,seconds:`toolbar.timeframes.seconds`,minutes:`toolbar.timeframes.minutes`,hours:`toolbar.timeframes.hours`,days:`toolbar.timeframes.days`,weeks:`toolbar.timeframes.weeks`,months:`toolbar.timeframes.months`};function c(e,n,i,a,o){let s=p();for(let e of[...n.plots].sort((e,t)=>e.color-t.color))s.appendChild(l(e,n,i,a));let c=t.o(r.map(e=>({value:String(e),label:`${e} px`})),String(n.lineWidth),e=>i.lineWidth(Number(e)));if(c.dataset.role=`line-width`,s.appendChild(t.s(a(`indicatorSettings.lineWidth`),c)),n.scale&&i.scale){let e=t.o([{value:`right`,label:a(`indicatorSettings.scale.right`)},{value:`left`,label:a(`indicatorSettings.scale.left`)}],n.scale,e=>i.scale?.(e===`left`?`left`:`right`));e.dataset.role=`scale`,s.appendChild(t.s(a(`indicatorSettings.scale`),e))}e.appendChild(s),n.levels&&i.levels&&e.appendChild(u([...n.levels],i.levels,a,o))}function l(e,n,r,o){let s=n.plotStyles[e.key]??{},c=document.createElement(`div`);c.className=`tcw-settings-row tcw-indi-plot`,c.dataset.plot=e.key;let l=document.createElement(`label`);l.className=`tcw-indi-plot-name`;let u=document.createElement(`input`);u.type=`checkbox`,u.checked=s.visible!==!1,u.addEventListener(`change`,()=>r.plot(e.key,{visible:u.checked}));let d=document.createElement(`span`);d.className=`tcw-settings-label`,d.textContent=e.title,l.append(u,d);let f=document.createElement(`span`);f.className=`tcw-indi-plot-controls`;let p=(e,i)=>{let o=t.r(n.colors[e]??n.colors[0]??a,t=>r.color(e,t));return o.setAttribute(`aria-label`,i),o};if(e.tone!==void 0&&e.downColor!==void 0?f.append(p(e.color,`${e.title} ${o(`indicatorSettings.up`)}`),p(e.downColor,`${e.title} ${o(`indicatorSettings.down`)}`)):f.appendChild(p(e.color,e.title)),(e.kind??`line`)===`line`||e.kind===`step`){let n=t.o(i.map(e=>({value:e,label:o(`drawingSettings.lineStyle.${e}`)})),s.lineStyle??e.lineStyle??`solid`,t=>r.plot(e.key,{lineStyle:t}));n.setAttribute(`aria-label`,`${e.title}: ${o(`drawingSettings.lineStyle`)}`),f.appendChild(n)}return c.append(l,f),c}function u(n,r,i,a){let s=p(),c=n,l=()=>{let e=document.createElement(`div`);e.className=`tcw-settings-section-title`,e.textContent=i(`indicatorSettings.tab.levels`);let t=c.map((e,t)=>d(e,t)),n=document.createElement(`button`);n.type=`button`,n.className=`tcw-reset-link tcw-indi-add`,n.textContent=`+ ${i(`indicatorSettings.addLevel`)}`,n.addEventListener(`click`,()=>{let e=c[c.length-1];u([...c,e===void 0?0:e+o]);let t=s.querySelectorAll(`.tcw-indi-level input`);t[t.length-1]?.focus()}),s.replaceChildren(e,...c.length===0?[m(i(`indicatorSettings.noLevels`))]:t,n)},u=e=>{c=e,r([...e]),l()},d=(n,o)=>{let l=t.i(n,{step:`any`},e=>{c=c.map((t,n)=>n===o?e:t),r([...c])});l.id=`tcw-indi-level-${a}-${o}`;let d=document.createElement(`button`);d.type=`button`,d.className=`tcw-indi-remove`,d.innerHTML=e.i(`x`,12);let f=i(`indicatorSettings.removeLevel`);d.title=f,d.setAttribute(`aria-label`,`${f} ${o+1}`),d.addEventListener(`click`,()=>{u(c.filter((e,t)=>t!==o)),(s.querySelectorAll(`.tcw-indi-remove`)[o]??s.querySelector(`.tcw-indi-add`))?.focus()});let p=document.createElement(`span`);p.className=`tcw-indi-level`,p.append(l,d);let m=document.createElement(`div`);m.className=`tcw-settings-row`;let h=document.createElement(`label`);return h.className=`tcw-settings-label`,h.htmlFor=l.id,h.textContent=`${i(`indicatorSettings.level`)} ${o+1}`,m.append(h,p),m};return l(),s}function d(e,t,r,i){let a=new Map(n.INTERVAL_UNITS.map(e=>{let r=t?.[e],i=Array.isArray(r)?r:[1,n.INTERVAL_LIMITS[e]];return[e,{on:r!==!1,from:i[0],to:i[1]}]})),o=()=>{let e={};for(let[t,{on:r,from:i,to:o}]of a){let[a,s]=[Math.min(i,o),Math.max(i,o)];r?(a>1||s<n.INTERVAL_LIMITS[t])&&(e[t]=[a,s]):e[t]=!1}r(Object.keys(e).length>0?e:null)},s=p();for(let e of n.INTERVAL_UNITS)s.appendChild(f(e,a.get(e),o,i));e.appendChild(s)}function f(e,r,i,a){let o=document.createElement(`div`);o.className=`tcw-settings-row tcw-indi-unit`,o.dataset.unit=e;let c=document.createElement(`label`);c.className=`tcw-indi-plot-name`;let l=document.createElement(`input`);l.type=`checkbox`,l.checked=r.on;let u=document.createElement(`span`);u.className=`tcw-settings-label`,u.textContent=a(s[e]),c.append(l,u),o.appendChild(c);let d=[];if(e!==`ticks`){let c=(o,c)=>{let l=t.i(r[o],{min:1,max:n.INTERVAL_LIMITS[e],step:1},e=>{r[o]=Math.round(e),l.value=String(r[o]),i()});return l.setAttribute(`aria-label`,`${a(s[e])}: ${a(c)}`),l.disabled=!r.on,d.push(l),l},l=document.createElement(`span`);l.className=`tcw-indi-range`;let u=document.createElement(`span`);u.setAttribute(`aria-hidden`,`true`),u.textContent=`–`,l.append(c(`from`,`indicatorSettings.rangeFrom`),u,c(`to`,`indicatorSettings.rangeTo`)),o.appendChild(l)}return l.addEventListener(`change`,()=>{r.on=l.checked;for(let e of d)e.disabled=!l.checked;i()}),o}function p(){let e=document.createElement(`div`);return e.className=`tcw-settings-section`,e}function m(e){let t=document.createElement(`div`);return t.className=`tcw-settings-label`,t.textContent=e,t}Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return c}});
2
+ //# sourceMappingURL=indicatorSettingsTabs-B0liE3ST.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorSettingsTabs-B0liE3ST.cjs","names":[],"sources":["../src/widget/indicatorSettingsTabs.ts"],"sourcesContent":["import type { IndicatorIntervals, IndicatorPlot, IndicatorPlotStyle, IntervalUnit, LineStyle } from '@tradecanvas/commons';\nimport { INTERVAL_LIMITS, INTERVAL_UNITS } from '@tradecanvas/core';\nimport { createIcon } from './icons.js';\nimport { colorInput, numberInput, selectInput, settingsRow } from './settingsControls.js';\nimport type { MessageKey, Translator } from './i18n.js';\n\nconst LINE_WIDTHS = [1, 1.5, 2, 3, 4];\nconst LINE_STYLES: readonly LineStyle[] = ['solid', 'dashed', 'dotted'];\n/** A line's colour where the indicator gives none (a colour field needs one; not a token, which it can't read). */\nconst FALLBACK_COLOR = '#4c8dff';\n/** A new level sits this far above the last one. */\nconst LEVEL_STEP = 10;\n\nconst UNIT_LABELS: Record<IntervalUnit, MessageKey> = {\n ticks: 'toolbar.timeframes.ticks',\n seconds: 'toolbar.timeframes.seconds',\n minutes: 'toolbar.timeframes.minutes',\n hours: 'toolbar.timeframes.hours',\n days: 'toolbar.timeframes.days',\n weeks: 'toolbar.timeframes.weeks',\n months: 'toolbar.timeframes.months',\n};\n\n/** What the Style tab shows. */\nexport interface StyleTabState {\n plots: readonly IndicatorPlot[];\n colors: readonly string[];\n plotStyles: Readonly<Record<string, IndicatorPlotStyle>>;\n lineWidth: number;\n /** The price scale of a price-pane overlay; unset for the rest. */\n scale?: 'right' | 'left';\n /** Its levels; unset: it has none to edit. */\n levels?: readonly number[];\n}\n\n/** What the Style tab changes. */\nexport interface StyleTabActions {\n color(index: number, value: string): void;\n plot(key: string, patch: IndicatorPlotStyle): void;\n lineWidth(width: number): void;\n scale?(scale: 'right' | 'left'): void;\n levels?(levels: number[]): void;\n}\n\n/**\n * The Style tab: a row per line (shown or not, its colours, its dash), the\n * line width, the price scale of an overlay, and the levels under them.\n */\nexport function renderStyleTab(body: HTMLElement, state: StyleTabState, actions: StyleTabActions, t: Translator, uid: number): void {\n const lines = section();\n // In the order of their colours: a two-tone plot's up and down sit together.\n for (const plot of [...state.plots].sort((a, b) => a.color - b.color)) lines.appendChild(plotRow(plot, state, actions, t));\n const width = selectInput(LINE_WIDTHS.map((w) => ({ value: String(w), label: `${w} px` })), String(state.lineWidth), (v) => actions.lineWidth(Number(v)));\n width.dataset.role = 'line-width';\n lines.appendChild(settingsRow(t('indicatorSettings.lineWidth'), width));\n if (state.scale && actions.scale) {\n const scale = selectInput([\n { value: 'right', label: t('indicatorSettings.scale.right') },\n { value: 'left', label: t('indicatorSettings.scale.left') },\n ], state.scale, (v) => actions.scale?.(v === 'left' ? 'left' : 'right'));\n scale.dataset.role = 'scale';\n lines.appendChild(settingsRow(t('indicatorSettings.scale'), scale));\n }\n body.appendChild(lines);\n if (state.levels && actions.levels) body.appendChild(levelsSection([...state.levels], actions.levels, t, uid));\n}\n\nfunction plotRow(plot: IndicatorPlot, state: StyleTabState, actions: StyleTabActions, t: Translator): HTMLDivElement {\n const own = state.plotStyles[plot.key] ?? {};\n const row = document.createElement('div');\n row.className = 'tcw-settings-row tcw-indi-plot';\n row.dataset.plot = plot.key;\n const name = document.createElement('label');\n name.className = 'tcw-indi-plot-name';\n const shown = document.createElement('input');\n shown.type = 'checkbox';\n shown.checked = own.visible !== false;\n shown.addEventListener('change', () => actions.plot(plot.key, { visible: shown.checked }));\n const text = document.createElement('span');\n text.className = 'tcw-settings-label';\n text.textContent = plot.title;\n name.append(shown, text);\n\n const controls = document.createElement('span');\n controls.className = 'tcw-indi-plot-controls';\n const swatch = (index: number, label: string) => {\n const input = colorInput(state.colors[index] ?? state.colors[0] ?? FALLBACK_COLOR, (v) => actions.color(index, v));\n input.setAttribute('aria-label', label);\n return input;\n };\n const twoTone = plot.tone !== undefined && plot.downColor !== undefined;\n if (twoTone) {\n controls.append(\n swatch(plot.color, `${plot.title} ${t('indicatorSettings.up')}`),\n swatch(plot.downColor!, `${plot.title} ${t('indicatorSettings.down')}`),\n );\n } else {\n controls.appendChild(swatch(plot.color, plot.title));\n }\n // Bars and dots have no dash.\n if ((plot.kind ?? 'line') === 'line' || plot.kind === 'step') {\n const dash = selectInput(\n LINE_STYLES.map((s) => ({ value: s, label: t(`drawingSettings.lineStyle.${s}`) })),\n own.lineStyle ?? plot.lineStyle ?? 'solid',\n (v) => actions.plot(plot.key, { lineStyle: v as LineStyle }),\n );\n dash.setAttribute('aria-label', `${plot.title}: ${t('drawingSettings.lineStyle')}`);\n controls.appendChild(dash);\n }\n row.append(name, controls);\n return row;\n}\n\n/** The levels, each with its remove button, and Add; it redraws itself and keeps the keyboard nearby. */\nfunction levelsSection(start: number[], onChange: (levels: number[]) => void, t: Translator, uid: number): HTMLElement {\n const block = section();\n let levels = start;\n const draw = () => {\n const title = document.createElement('div');\n title.className = 'tcw-settings-section-title';\n title.textContent = t('indicatorSettings.tab.levels');\n const rows = levels.map((level, i) => levelRow(level, i));\n const add = document.createElement('button');\n add.type = 'button';\n add.className = 'tcw-reset-link tcw-indi-add';\n add.textContent = `+ ${t('indicatorSettings.addLevel')}`;\n add.addEventListener('click', () => {\n const last = levels[levels.length - 1];\n set([...levels, last === undefined ? 0 : last + LEVEL_STEP]);\n const inputs = block.querySelectorAll<HTMLInputElement>('.tcw-indi-level input');\n inputs[inputs.length - 1]?.focus();\n });\n block.replaceChildren(title, ...(levels.length === 0 ? [note(t('indicatorSettings.noLevels'))] : rows), add);\n };\n const set = (next: number[]) => {\n levels = next;\n onChange([...next]);\n draw();\n };\n const levelRow = (level: number, i: number): HTMLElement => {\n const input = numberInput(level, { step: 'any' }, (n) => {\n levels = levels.map((v, j) => (j === i ? n : v));\n onChange([...levels]);\n });\n input.id = `tcw-indi-level-${uid}-${i}`;\n const remove = document.createElement('button');\n remove.type = 'button';\n remove.className = 'tcw-indi-remove';\n remove.innerHTML = createIcon('x', 12);\n const label = t('indicatorSettings.removeLevel');\n remove.title = label;\n remove.setAttribute('aria-label', `${label} ${i + 1}`);\n remove.addEventListener('click', () => {\n set(levels.filter((_, j) => j !== i));\n (block.querySelectorAll<HTMLElement>('.tcw-indi-remove')[i] ?? block.querySelector<HTMLElement>('.tcw-indi-add'))?.focus();\n });\n const controls = document.createElement('span');\n controls.className = 'tcw-indi-level';\n controls.append(input, remove);\n const row = document.createElement('div');\n row.className = 'tcw-settings-row';\n const text = document.createElement('label');\n text.className = 'tcw-settings-label';\n text.htmlFor = input.id;\n text.textContent = `${t('indicatorSettings.level')} ${i + 1}`;\n row.append(text, controls);\n return row;\n };\n draw();\n return block;\n}\n\n/** One kind of interval as the Visibility tab edits it: shown at all, and from which count to which. */\ninterface UnitState {\n on: boolean;\n from: number;\n to: number;\n}\n\n/**\n * The Visibility tab: a row per kind of interval, ticked where the indicator\n * shows, with the range of counts it shows on (ticks: on or off).\n */\nexport function renderVisibilityTab(body: HTMLElement, start: IndicatorIntervals | null, onChange: (intervals: IndicatorIntervals | null) => void, t: Translator): void {\n const state = new Map<IntervalUnit, UnitState>(INTERVAL_UNITS.map((unit) => {\n const rule = start?.[unit];\n const range = Array.isArray(rule) ? rule : [1, INTERVAL_LIMITS[unit]];\n return [unit, { on: rule !== false, from: range[0], to: range[1] }];\n }));\n const commit = () => {\n const rules: { -readonly [U in IntervalUnit]?: false | readonly [number, number] } = {};\n for (const [unit, { on, from, to }] of state) {\n const [lo, hi] = [Math.min(from, to), Math.max(from, to)];\n if (!on) rules[unit] = false;\n else if (lo > 1 || hi < INTERVAL_LIMITS[unit]) rules[unit] = [lo, hi];\n }\n onChange(Object.keys(rules).length > 0 ? rules : null);\n };\n const block = section();\n for (const unit of INTERVAL_UNITS) block.appendChild(unitRow(unit, state.get(unit)!, commit, t));\n body.appendChild(block);\n}\n\nfunction unitRow(unit: IntervalUnit, unitState: UnitState, commit: () => void, t: Translator): HTMLDivElement {\n const row = document.createElement('div');\n row.className = 'tcw-settings-row tcw-indi-unit';\n row.dataset.unit = unit;\n const name = document.createElement('label');\n name.className = 'tcw-indi-plot-name';\n const box = document.createElement('input');\n box.type = 'checkbox';\n box.checked = unitState.on;\n const text = document.createElement('span');\n text.className = 'tcw-settings-label';\n text.textContent = t(UNIT_LABELS[unit]);\n name.append(box, text);\n row.appendChild(name);\n const fields: HTMLInputElement[] = [];\n if (unit !== 'ticks') {\n const field = (key: 'from' | 'to', label: MessageKey) => {\n const input: HTMLInputElement = numberInput(unitState[key], { min: 1, max: INTERVAL_LIMITS[unit], step: 1 }, (n) => {\n // A count of intervals is whole: 2.5 hours reads 3.\n unitState[key] = Math.round(n);\n input.value = String(unitState[key]);\n commit();\n });\n input.setAttribute('aria-label', `${t(UNIT_LABELS[unit])}: ${t(label)}`);\n input.disabled = !unitState.on;\n fields.push(input);\n return input;\n };\n const range = document.createElement('span');\n range.className = 'tcw-indi-range';\n const dash = document.createElement('span');\n dash.setAttribute('aria-hidden', 'true');\n dash.textContent = '–';\n range.append(field('from', 'indicatorSettings.rangeFrom'), dash, field('to', 'indicatorSettings.rangeTo'));\n row.appendChild(range);\n }\n box.addEventListener('change', () => {\n unitState.on = box.checked;\n for (const input of fields) input.disabled = !box.checked;\n commit();\n });\n return row;\n}\n\nfunction section(): HTMLDivElement {\n const el = document.createElement('div');\n el.className = 'tcw-settings-section';\n return el;\n}\n\nfunction note(text: string): HTMLDivElement {\n const el = document.createElement('div');\n el.className = 'tcw-settings-label';\n el.textContent = text;\n return el;\n}\n"],"mappings":"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"}
@@ -0,0 +1,161 @@
1
+ import { i as e } from "./focusTrap-Br9Zfje0.js";
2
+ import { i as t, o as n, r, s as i } from "./settingsControls-DIjzCFHI.js";
3
+ import { INTERVAL_LIMITS as a, INTERVAL_UNITS as o } from "@tradecanvas/core";
4
+ //#region src/widget/indicatorSettingsTabs.ts
5
+ var s = [
6
+ 1,
7
+ 1.5,
8
+ 2,
9
+ 3,
10
+ 4
11
+ ], c = [
12
+ "solid",
13
+ "dashed",
14
+ "dotted"
15
+ ], l = "#4c8dff", u = 10, d = {
16
+ ticks: "toolbar.timeframes.ticks",
17
+ seconds: "toolbar.timeframes.seconds",
18
+ minutes: "toolbar.timeframes.minutes",
19
+ hours: "toolbar.timeframes.hours",
20
+ days: "toolbar.timeframes.days",
21
+ weeks: "toolbar.timeframes.weeks",
22
+ months: "toolbar.timeframes.months"
23
+ };
24
+ function f(e, t, r, a, o) {
25
+ let c = _();
26
+ for (let e of [...t.plots].sort((e, t) => e.color - t.color)) c.appendChild(p(e, t, r, a));
27
+ let l = n(s.map((e) => ({
28
+ value: String(e),
29
+ label: `${e} px`
30
+ })), String(t.lineWidth), (e) => r.lineWidth(Number(e)));
31
+ if (l.dataset.role = "line-width", c.appendChild(i(a("indicatorSettings.lineWidth"), l)), t.scale && r.scale) {
32
+ let e = n([{
33
+ value: "right",
34
+ label: a("indicatorSettings.scale.right")
35
+ }, {
36
+ value: "left",
37
+ label: a("indicatorSettings.scale.left")
38
+ }], t.scale, (e) => r.scale?.(e === "left" ? "left" : "right"));
39
+ e.dataset.role = "scale", c.appendChild(i(a("indicatorSettings.scale"), e));
40
+ }
41
+ e.appendChild(c), t.levels && r.levels && e.appendChild(m([...t.levels], r.levels, a, o));
42
+ }
43
+ function p(e, t, i, a) {
44
+ let o = t.plotStyles[e.key] ?? {}, s = document.createElement("div");
45
+ s.className = "tcw-settings-row tcw-indi-plot", s.dataset.plot = e.key;
46
+ let u = document.createElement("label");
47
+ u.className = "tcw-indi-plot-name";
48
+ let d = document.createElement("input");
49
+ d.type = "checkbox", d.checked = o.visible !== !1, d.addEventListener("change", () => i.plot(e.key, { visible: d.checked }));
50
+ let f = document.createElement("span");
51
+ f.className = "tcw-settings-label", f.textContent = e.title, u.append(d, f);
52
+ let p = document.createElement("span");
53
+ p.className = "tcw-indi-plot-controls";
54
+ let m = (e, n) => {
55
+ let a = r(t.colors[e] ?? t.colors[0] ?? l, (t) => i.color(e, t));
56
+ return a.setAttribute("aria-label", n), a;
57
+ };
58
+ if (e.tone !== void 0 && e.downColor !== void 0 ? p.append(m(e.color, `${e.title} ${a("indicatorSettings.up")}`), m(e.downColor, `${e.title} ${a("indicatorSettings.down")}`)) : p.appendChild(m(e.color, e.title)), (e.kind ?? "line") === "line" || e.kind === "step") {
59
+ let t = n(c.map((e) => ({
60
+ value: e,
61
+ label: a(`drawingSettings.lineStyle.${e}`)
62
+ })), o.lineStyle ?? e.lineStyle ?? "solid", (t) => i.plot(e.key, { lineStyle: t }));
63
+ t.setAttribute("aria-label", `${e.title}: ${a("drawingSettings.lineStyle")}`), p.appendChild(t);
64
+ }
65
+ return s.append(u, p), s;
66
+ }
67
+ function m(n, r, i, a) {
68
+ let o = _(), s = n, c = () => {
69
+ let e = document.createElement("div");
70
+ e.className = "tcw-settings-section-title", e.textContent = i("indicatorSettings.tab.levels");
71
+ let t = s.map((e, t) => d(e, t)), n = document.createElement("button");
72
+ n.type = "button", n.className = "tcw-reset-link tcw-indi-add", n.textContent = `+ ${i("indicatorSettings.addLevel")}`, n.addEventListener("click", () => {
73
+ let e = s[s.length - 1];
74
+ l([...s, e === void 0 ? 0 : e + u]);
75
+ let t = o.querySelectorAll(".tcw-indi-level input");
76
+ t[t.length - 1]?.focus();
77
+ }), o.replaceChildren(e, ...s.length === 0 ? [v(i("indicatorSettings.noLevels"))] : t, n);
78
+ }, l = (e) => {
79
+ s = e, r([...e]), c();
80
+ }, d = (n, c) => {
81
+ let u = t(n, { step: "any" }, (e) => {
82
+ s = s.map((t, n) => n === c ? e : t), r([...s]);
83
+ });
84
+ u.id = `tcw-indi-level-${a}-${c}`;
85
+ let d = document.createElement("button");
86
+ d.type = "button", d.className = "tcw-indi-remove", d.innerHTML = e("x", 12);
87
+ let f = i("indicatorSettings.removeLevel");
88
+ d.title = f, d.setAttribute("aria-label", `${f} ${c + 1}`), d.addEventListener("click", () => {
89
+ l(s.filter((e, t) => t !== c)), (o.querySelectorAll(".tcw-indi-remove")[c] ?? o.querySelector(".tcw-indi-add"))?.focus();
90
+ });
91
+ let p = document.createElement("span");
92
+ p.className = "tcw-indi-level", p.append(u, d);
93
+ let m = document.createElement("div");
94
+ m.className = "tcw-settings-row";
95
+ let h = document.createElement("label");
96
+ return h.className = "tcw-settings-label", h.htmlFor = u.id, h.textContent = `${i("indicatorSettings.level")} ${c + 1}`, m.append(h, p), m;
97
+ };
98
+ return c(), o;
99
+ }
100
+ function h(e, t, n, r) {
101
+ let i = new Map(o.map((e) => {
102
+ let n = t?.[e], r = Array.isArray(n) ? n : [1, a[e]];
103
+ return [e, {
104
+ on: n !== !1,
105
+ from: r[0],
106
+ to: r[1]
107
+ }];
108
+ })), s = () => {
109
+ let e = {};
110
+ for (let [t, { on: n, from: r, to: o }] of i) {
111
+ let [i, s] = [Math.min(r, o), Math.max(r, o)];
112
+ n ? (i > 1 || s < a[t]) && (e[t] = [i, s]) : e[t] = !1;
113
+ }
114
+ n(Object.keys(e).length > 0 ? e : null);
115
+ }, c = _();
116
+ for (let e of o) c.appendChild(g(e, i.get(e), s, r));
117
+ e.appendChild(c);
118
+ }
119
+ function g(e, n, r, i) {
120
+ let o = document.createElement("div");
121
+ o.className = "tcw-settings-row tcw-indi-unit", o.dataset.unit = e;
122
+ let s = document.createElement("label");
123
+ s.className = "tcw-indi-plot-name";
124
+ let c = document.createElement("input");
125
+ c.type = "checkbox", c.checked = n.on;
126
+ let l = document.createElement("span");
127
+ l.className = "tcw-settings-label", l.textContent = i(d[e]), s.append(c, l), o.appendChild(s);
128
+ let u = [];
129
+ if (e !== "ticks") {
130
+ let s = (o, s) => {
131
+ let c = t(n[o], {
132
+ min: 1,
133
+ max: a[e],
134
+ step: 1
135
+ }, (e) => {
136
+ n[o] = Math.round(e), c.value = String(n[o]), r();
137
+ });
138
+ return c.setAttribute("aria-label", `${i(d[e])}: ${i(s)}`), c.disabled = !n.on, u.push(c), c;
139
+ }, c = document.createElement("span");
140
+ c.className = "tcw-indi-range";
141
+ let l = document.createElement("span");
142
+ l.setAttribute("aria-hidden", "true"), l.textContent = "–", c.append(s("from", "indicatorSettings.rangeFrom"), l, s("to", "indicatorSettings.rangeTo")), o.appendChild(c);
143
+ }
144
+ return c.addEventListener("change", () => {
145
+ n.on = c.checked;
146
+ for (let e of u) e.disabled = !c.checked;
147
+ r();
148
+ }), o;
149
+ }
150
+ function _() {
151
+ let e = document.createElement("div");
152
+ return e.className = "tcw-settings-section", e;
153
+ }
154
+ function v(e) {
155
+ let t = document.createElement("div");
156
+ return t.className = "tcw-settings-label", t.textContent = e, t;
157
+ }
158
+ //#endregion
159
+ export { h as n, f as t };
160
+
161
+ //# sourceMappingURL=indicatorSettingsTabs-XcgMdbLp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorSettingsTabs-XcgMdbLp.js","names":[],"sources":["../src/widget/indicatorSettingsTabs.ts"],"sourcesContent":["import type { IndicatorIntervals, IndicatorPlot, IndicatorPlotStyle, IntervalUnit, LineStyle } from '@tradecanvas/commons';\nimport { INTERVAL_LIMITS, INTERVAL_UNITS } from '@tradecanvas/core';\nimport { createIcon } from './icons.js';\nimport { colorInput, numberInput, selectInput, settingsRow } from './settingsControls.js';\nimport type { MessageKey, Translator } from './i18n.js';\n\nconst LINE_WIDTHS = [1, 1.5, 2, 3, 4];\nconst LINE_STYLES: readonly LineStyle[] = ['solid', 'dashed', 'dotted'];\n/** A line's colour where the indicator gives none (a colour field needs one; not a token, which it can't read). */\nconst FALLBACK_COLOR = '#4c8dff';\n/** A new level sits this far above the last one. */\nconst LEVEL_STEP = 10;\n\nconst UNIT_LABELS: Record<IntervalUnit, MessageKey> = {\n ticks: 'toolbar.timeframes.ticks',\n seconds: 'toolbar.timeframes.seconds',\n minutes: 'toolbar.timeframes.minutes',\n hours: 'toolbar.timeframes.hours',\n days: 'toolbar.timeframes.days',\n weeks: 'toolbar.timeframes.weeks',\n months: 'toolbar.timeframes.months',\n};\n\n/** What the Style tab shows. */\nexport interface StyleTabState {\n plots: readonly IndicatorPlot[];\n colors: readonly string[];\n plotStyles: Readonly<Record<string, IndicatorPlotStyle>>;\n lineWidth: number;\n /** The price scale of a price-pane overlay; unset for the rest. */\n scale?: 'right' | 'left';\n /** Its levels; unset: it has none to edit. */\n levels?: readonly number[];\n}\n\n/** What the Style tab changes. */\nexport interface StyleTabActions {\n color(index: number, value: string): void;\n plot(key: string, patch: IndicatorPlotStyle): void;\n lineWidth(width: number): void;\n scale?(scale: 'right' | 'left'): void;\n levels?(levels: number[]): void;\n}\n\n/**\n * The Style tab: a row per line (shown or not, its colours, its dash), the\n * line width, the price scale of an overlay, and the levels under them.\n */\nexport function renderStyleTab(body: HTMLElement, state: StyleTabState, actions: StyleTabActions, t: Translator, uid: number): void {\n const lines = section();\n // In the order of their colours: a two-tone plot's up and down sit together.\n for (const plot of [...state.plots].sort((a, b) => a.color - b.color)) lines.appendChild(plotRow(plot, state, actions, t));\n const width = selectInput(LINE_WIDTHS.map((w) => ({ value: String(w), label: `${w} px` })), String(state.lineWidth), (v) => actions.lineWidth(Number(v)));\n width.dataset.role = 'line-width';\n lines.appendChild(settingsRow(t('indicatorSettings.lineWidth'), width));\n if (state.scale && actions.scale) {\n const scale = selectInput([\n { value: 'right', label: t('indicatorSettings.scale.right') },\n { value: 'left', label: t('indicatorSettings.scale.left') },\n ], state.scale, (v) => actions.scale?.(v === 'left' ? 'left' : 'right'));\n scale.dataset.role = 'scale';\n lines.appendChild(settingsRow(t('indicatorSettings.scale'), scale));\n }\n body.appendChild(lines);\n if (state.levels && actions.levels) body.appendChild(levelsSection([...state.levels], actions.levels, t, uid));\n}\n\nfunction plotRow(plot: IndicatorPlot, state: StyleTabState, actions: StyleTabActions, t: Translator): HTMLDivElement {\n const own = state.plotStyles[plot.key] ?? {};\n const row = document.createElement('div');\n row.className = 'tcw-settings-row tcw-indi-plot';\n row.dataset.plot = plot.key;\n const name = document.createElement('label');\n name.className = 'tcw-indi-plot-name';\n const shown = document.createElement('input');\n shown.type = 'checkbox';\n shown.checked = own.visible !== false;\n shown.addEventListener('change', () => actions.plot(plot.key, { visible: shown.checked }));\n const text = document.createElement('span');\n text.className = 'tcw-settings-label';\n text.textContent = plot.title;\n name.append(shown, text);\n\n const controls = document.createElement('span');\n controls.className = 'tcw-indi-plot-controls';\n const swatch = (index: number, label: string) => {\n const input = colorInput(state.colors[index] ?? state.colors[0] ?? FALLBACK_COLOR, (v) => actions.color(index, v));\n input.setAttribute('aria-label', label);\n return input;\n };\n const twoTone = plot.tone !== undefined && plot.downColor !== undefined;\n if (twoTone) {\n controls.append(\n swatch(plot.color, `${plot.title} ${t('indicatorSettings.up')}`),\n swatch(plot.downColor!, `${plot.title} ${t('indicatorSettings.down')}`),\n );\n } else {\n controls.appendChild(swatch(plot.color, plot.title));\n }\n // Bars and dots have no dash.\n if ((plot.kind ?? 'line') === 'line' || plot.kind === 'step') {\n const dash = selectInput(\n LINE_STYLES.map((s) => ({ value: s, label: t(`drawingSettings.lineStyle.${s}`) })),\n own.lineStyle ?? plot.lineStyle ?? 'solid',\n (v) => actions.plot(plot.key, { lineStyle: v as LineStyle }),\n );\n dash.setAttribute('aria-label', `${plot.title}: ${t('drawingSettings.lineStyle')}`);\n controls.appendChild(dash);\n }\n row.append(name, controls);\n return row;\n}\n\n/** The levels, each with its remove button, and Add; it redraws itself and keeps the keyboard nearby. */\nfunction levelsSection(start: number[], onChange: (levels: number[]) => void, t: Translator, uid: number): HTMLElement {\n const block = section();\n let levels = start;\n const draw = () => {\n const title = document.createElement('div');\n title.className = 'tcw-settings-section-title';\n title.textContent = t('indicatorSettings.tab.levels');\n const rows = levels.map((level, i) => levelRow(level, i));\n const add = document.createElement('button');\n add.type = 'button';\n add.className = 'tcw-reset-link tcw-indi-add';\n add.textContent = `+ ${t('indicatorSettings.addLevel')}`;\n add.addEventListener('click', () => {\n const last = levels[levels.length - 1];\n set([...levels, last === undefined ? 0 : last + LEVEL_STEP]);\n const inputs = block.querySelectorAll<HTMLInputElement>('.tcw-indi-level input');\n inputs[inputs.length - 1]?.focus();\n });\n block.replaceChildren(title, ...(levels.length === 0 ? [note(t('indicatorSettings.noLevels'))] : rows), add);\n };\n const set = (next: number[]) => {\n levels = next;\n onChange([...next]);\n draw();\n };\n const levelRow = (level: number, i: number): HTMLElement => {\n const input = numberInput(level, { step: 'any' }, (n) => {\n levels = levels.map((v, j) => (j === i ? n : v));\n onChange([...levels]);\n });\n input.id = `tcw-indi-level-${uid}-${i}`;\n const remove = document.createElement('button');\n remove.type = 'button';\n remove.className = 'tcw-indi-remove';\n remove.innerHTML = createIcon('x', 12);\n const label = t('indicatorSettings.removeLevel');\n remove.title = label;\n remove.setAttribute('aria-label', `${label} ${i + 1}`);\n remove.addEventListener('click', () => {\n set(levels.filter((_, j) => j !== i));\n (block.querySelectorAll<HTMLElement>('.tcw-indi-remove')[i] ?? block.querySelector<HTMLElement>('.tcw-indi-add'))?.focus();\n });\n const controls = document.createElement('span');\n controls.className = 'tcw-indi-level';\n controls.append(input, remove);\n const row = document.createElement('div');\n row.className = 'tcw-settings-row';\n const text = document.createElement('label');\n text.className = 'tcw-settings-label';\n text.htmlFor = input.id;\n text.textContent = `${t('indicatorSettings.level')} ${i + 1}`;\n row.append(text, controls);\n return row;\n };\n draw();\n return block;\n}\n\n/** One kind of interval as the Visibility tab edits it: shown at all, and from which count to which. */\ninterface UnitState {\n on: boolean;\n from: number;\n to: number;\n}\n\n/**\n * The Visibility tab: a row per kind of interval, ticked where the indicator\n * shows, with the range of counts it shows on (ticks: on or off).\n */\nexport function renderVisibilityTab(body: HTMLElement, start: IndicatorIntervals | null, onChange: (intervals: IndicatorIntervals | null) => void, t: Translator): void {\n const state = new Map<IntervalUnit, UnitState>(INTERVAL_UNITS.map((unit) => {\n const rule = start?.[unit];\n const range = Array.isArray(rule) ? rule : [1, INTERVAL_LIMITS[unit]];\n return [unit, { on: rule !== false, from: range[0], to: range[1] }];\n }));\n const commit = () => {\n const rules: { -readonly [U in IntervalUnit]?: false | readonly [number, number] } = {};\n for (const [unit, { on, from, to }] of state) {\n const [lo, hi] = [Math.min(from, to), Math.max(from, to)];\n if (!on) rules[unit] = false;\n else if (lo > 1 || hi < INTERVAL_LIMITS[unit]) rules[unit] = [lo, hi];\n }\n onChange(Object.keys(rules).length > 0 ? rules : null);\n };\n const block = section();\n for (const unit of INTERVAL_UNITS) block.appendChild(unitRow(unit, state.get(unit)!, commit, t));\n body.appendChild(block);\n}\n\nfunction unitRow(unit: IntervalUnit, unitState: UnitState, commit: () => void, t: Translator): HTMLDivElement {\n const row = document.createElement('div');\n row.className = 'tcw-settings-row tcw-indi-unit';\n row.dataset.unit = unit;\n const name = document.createElement('label');\n name.className = 'tcw-indi-plot-name';\n const box = document.createElement('input');\n box.type = 'checkbox';\n box.checked = unitState.on;\n const text = document.createElement('span');\n text.className = 'tcw-settings-label';\n text.textContent = t(UNIT_LABELS[unit]);\n name.append(box, text);\n row.appendChild(name);\n const fields: HTMLInputElement[] = [];\n if (unit !== 'ticks') {\n const field = (key: 'from' | 'to', label: MessageKey) => {\n const input: HTMLInputElement = numberInput(unitState[key], { min: 1, max: INTERVAL_LIMITS[unit], step: 1 }, (n) => {\n // A count of intervals is whole: 2.5 hours reads 3.\n unitState[key] = Math.round(n);\n input.value = String(unitState[key]);\n commit();\n });\n input.setAttribute('aria-label', `${t(UNIT_LABELS[unit])}: ${t(label)}`);\n input.disabled = !unitState.on;\n fields.push(input);\n return input;\n };\n const range = document.createElement('span');\n range.className = 'tcw-indi-range';\n const dash = document.createElement('span');\n dash.setAttribute('aria-hidden', 'true');\n dash.textContent = '–';\n range.append(field('from', 'indicatorSettings.rangeFrom'), dash, field('to', 'indicatorSettings.rangeTo'));\n row.appendChild(range);\n }\n box.addEventListener('change', () => {\n unitState.on = box.checked;\n for (const input of fields) input.disabled = !box.checked;\n commit();\n });\n return row;\n}\n\nfunction section(): HTMLDivElement {\n const el = document.createElement('div');\n el.className = 'tcw-settings-section';\n return el;\n}\n\nfunction note(text: string): HTMLDivElement {\n const el = document.createElement('div');\n el.className = 'tcw-settings-label';\n el.textContent = text;\n return el;\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var e=42,t=7,n=new Set([`US`,`CA`,`MX`,`BR`,`JP`,`KR`,`TW`,`HK`,`IL`,`PH`,`IN`,`ZA`,`AU`,`TH`,`SA`,`PE`,`CO`]);function r(e){try{let t=new Intl.Locale(e),r=t.getWeekInfo?.()??t.weekInfo;return r?r.firstDay===7?0:1:+!n.has(t.maximize().region??``)}catch{return 1}}function i(n,r,i){let a=(new Date(Date.UTC(n,r,1)).getUTCDay()-i+t)%t,o=[];for(let t=0;t<e;t++){let e=new Date(Date.UTC(n,r,1-a+t));o.push({year:e.getUTCFullYear(),month:e.getUTCMonth(),day:e.getUTCDate()})}return o}var a=e=>String(e).padStart(2,`0`),o=e=>`${String(e.year).padStart(4,`0`)}-${a(e.month+1)}-${a(e.day)}`;function s(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e??``);return t?{year:Number(t[1]),month:Number(t[2])-1,day:Number(t[3])}:null}function c(){let e=new Date;return{year:e.getFullYear(),month:e.getMonth(),day:e.getDate()}}function l(e,t){let n=new Date(Date.UTC(e.year,e.month,e.day+t));return{year:n.getUTCFullYear(),month:n.getUTCMonth(),day:n.getUTCDate()}}var u=class{element;grid;titleEl;chosen=``;limits={};today=o(c());view={year:0,month:0};focusDay=c();constructor(e,n,i){this.locale=n,this.onPick=i;let a=document.createElement(`div`);a.className=`tcw-calendar`;let o=document.createElement(`div`);o.className=`tcw-calendar-head`;let s=document.createElement(`div`);s.className=`tcw-calendar-title`,s.setAttribute(`aria-live`,`polite`),o.append(this.navButton(e.prevMonth,-1),s,this.navButton(e.nextMonth,1));let c=document.createElement(`div`);c.className=`tcw-calendar-weekdays`,c.setAttribute(`aria-hidden`,`true`);let l=r(n),u=new Intl.DateTimeFormat(n,{weekday:`narrow`,timeZone:`UTC`});for(let e=0;e<t;e++){let n=document.createElement(`span`);n.className=`tcw-calendar-weekday`,n.textContent=u.format(new Date(Date.UTC(2023,0,1+(l+e)%t))),c.appendChild(n)}let d=document.createElement(`div`);d.className=`tcw-calendar-grid`,d.setAttribute(`role`,`grid`),d.addEventListener(`keydown`,e=>this.onKey(e)),d.addEventListener(`click`,e=>{let t=e.target.closest(`.tcw-calendar-day`);t&&!t.disabled&&t.dataset.date&&this.pick(t.dataset.date)});let f=document.createElement(`div`);f.className=`tcw-calendar-foot`;let p=document.createElement(`button`);p.type=`button`,p.className=`tcw-calendar-today`,p.textContent=e.today,p.addEventListener(`click`,()=>this.pick(this.today)),f.appendChild(p),a.append(o,c,d,f),this.element=a,this.grid=d,this.titleEl=s}show(e,t={}){this.chosen=e,this.limits=t,this.today=s(t.today)?t.today:o(c());let n=this.clamp(s(e)??s(this.today));this.focusDay=n,this.view={year:n.year,month:n.month},this.render()}focusGrid(){this.grid.querySelector(`[tabindex="0"]`)?.focus()}navButton(e,t){let n=document.createElement(`button`);return n.type=`button`,n.className=`tcw-calendar-nav`,n.setAttribute(`aria-label`,e),n.innerHTML=t<0?`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M10 3.5L5.5 8l4.5 4.5"/></svg>`:`<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M6 3.5L10.5 8 6 12.5"/></svg>`,n.addEventListener(`click`,()=>this.turn(t)),n}turn(e){let t=new Date(Date.UTC(this.view.year,this.view.month+e,1));this.view={year:t.getUTCFullYear(),month:t.getUTCMonth()};let n=new Date(Date.UTC(this.view.year,this.view.month+1,0)).getUTCDate();this.focusDay=this.clamp({...this.view,day:Math.min(this.focusDay.day,n)}),this.view={year:this.focusDay.year,month:this.focusDay.month},this.render()}clamp(e){let t=o(e),n=s(this.limits.min),r=s(this.limits.max);return n&&t<o(n)?n:r&&t>o(r)?r:e}allowed(e){let{min:t,max:n}=this.limits;return!(t&&e<t)&&!(n&&e>n)}render(){let e=this.locale;this.titleEl.textContent=new Intl.DateTimeFormat(e,{month:`long`,year:`numeric`,timeZone:`UTC`}).format(new Date(Date.UTC(this.view.year,this.view.month,1)));let n=this.today,a=o(this.focusDay),s=new Intl.DateTimeFormat(e,{dateStyle:`full`,timeZone:`UTC`});this.grid.textContent=``;let c=null;for(let[l,u]of i(this.view.year,this.view.month,r(e)).entries()){l%t===0&&(c=document.createElement(`div`),c.className=`tcw-calendar-week`,c.setAttribute(`role`,`row`),this.grid.appendChild(c));let e=o(u),r=document.createElement(`button`);r.type=`button`,r.className=`tcw-calendar-day`,r.dataset.date=e,r.setAttribute(`role`,`gridcell`),r.textContent=String(u.day),r.setAttribute(`aria-label`,s.format(new Date(Date.UTC(u.year,u.month,u.day)))),r.setAttribute(`aria-selected`,String(e===this.chosen)),r.tabIndex=e===a?0:-1,u.month!==this.view.month&&r.classList.add(`tcw-outside`),e===n&&r.classList.add(`tcw-today`),this.allowed(e)||(r.disabled=!0),c?.appendChild(r)}}onKey(e){let n={ArrowLeft:-1,ArrowRight:1,ArrowUp:-t,ArrowDown:t},r=this.element.isConnected&&getComputedStyle(this.element).direction===`rtl`;if(e.key in n){let t=r&&(e.key===`ArrowLeft`||e.key===`ArrowRight`)?-n[e.key]:n[e.key];this.moveFocus(l(this.focusDay,t))}else if(e.key===`PageUp`||e.key===`PageDown`)this.turn(e.key===`PageUp`?-1:1),this.focusGrid();else if(e.key===`Home`||e.key===`End`){let t=new Date(Date.UTC(this.view.year,this.view.month+1,0)).getUTCDate();this.moveFocus({...this.view,day:e.key===`Home`?1:t})}else if(e.key===`Enter`||e.key===` `)this.pick(o(this.focusDay));else return;e.preventDefault()}moveFocus(e){let t=this.clamp(e);this.focusDay=t,(t.year!==this.view.year||t.month!==this.view.month)&&(this.view={year:t.year,month:t.month}),this.render(),this.focusGrid()}pick(e){this.allowed(e)&&this.onPick(e)}};Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}});
2
+ //# sourceMappingURL=monthView-B-CieFDJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monthView-B-CieFDJ.cjs","names":[],"sources":["../src/widget/monthView.ts"],"sourcesContent":["export interface CalendarLabels {\n prevMonth: string;\n nextMonth: string;\n today: string;\n}\n\nexport interface CalendarDay {\n year: number;\n /** 0–11. */\n month: number;\n day: number;\n}\n\n/** The first and last day that can be picked, and today, YYYY-MM-DD; each may be left out. */\nexport interface DayLimits {\n min?: string;\n max?: string;\n /** Today where the dates are read (the chart's time zone); the browser's when left out. */\n today?: string;\n}\n\nconst DAYS_SHOWN = 42;\nconst DAYS_IN_WEEK = 7;\n\n/** Regions whose weeks start on Sunday, for engines without week data. */\nconst SUNDAY_REGIONS = new Set(['US', 'CA', 'MX', 'BR', 'JP', 'KR', 'TW', 'HK', 'IL', 'PH', 'IN', 'ZA', 'AU', 'TH', 'SA', 'PE', 'CO']);\n\n/** The first day of the week where `locale` is spoken: 0 Sunday, 1 Monday. */\nexport function weekStart(locale: string): 0 | 1 {\n try {\n const loc = new Intl.Locale(locale) as Intl.Locale & {\n getWeekInfo?: () => { firstDay: number };\n weekInfo?: { firstDay: number };\n };\n const info = loc.getWeekInfo?.() ?? loc.weekInfo;\n if (info) return info.firstDay === 7 ? 0 : 1;\n return SUNDAY_REGIONS.has(loc.maximize().region ?? '') ? 0 : 1;\n } catch {\n return 1;\n }\n}\n\n/** Six whole weeks around month `month` of `year`, from `firstDay` (0 Sunday, 1 Monday). */\nexport function monthGrid(year: number, month: number, firstDay: 0 | 1): CalendarDay[] {\n const first = new Date(Date.UTC(year, month, 1));\n const lead = (first.getUTCDay() - firstDay + DAYS_IN_WEEK) % DAYS_IN_WEEK;\n const days: CalendarDay[] = [];\n for (let i = 0; i < DAYS_SHOWN; i++) {\n const d = new Date(Date.UTC(year, month, 1 - lead + i));\n days.push({ year: d.getUTCFullYear(), month: d.getUTCMonth(), day: d.getUTCDate() });\n }\n return days;\n}\n\nconst pad = (n: number) => String(n).padStart(2, '0');\nconst iso = (d: CalendarDay) => `${String(d.year).padStart(4, '0')}-${pad(d.month + 1)}-${pad(d.day)}`;\n\nfunction parseIso(value: string | undefined): CalendarDay | null {\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(value ?? '');\n if (!m) return null;\n return { year: Number(m[1]), month: Number(m[2]) - 1, day: Number(m[3]) };\n}\n\nfunction todayDay(): CalendarDay {\n const now = new Date();\n return { year: now.getFullYear(), month: now.getMonth(), day: now.getDate() };\n}\n\n/** `d` moved by `days` (any sign), across months and years. */\nfunction addDays(d: CalendarDay, days: number): CalendarDay {\n const t = new Date(Date.UTC(d.year, d.month, d.day + days));\n return { year: t.getUTCFullYear(), month: t.getUTCMonth(), day: t.getUTCDate() };\n}\n\n/**\n * A month of days drawn by the widget: arrows to turn it, today marked, the\n * chosen day marked, a button for today, and the keys a date grid takes. It\n * only tells which day was picked; what that day goes into is its owner's\n * business (a date field's calendar, the Go to dialog).\n */\nexport class MonthView {\n readonly element: HTMLDivElement;\n private readonly grid: HTMLDivElement;\n private readonly titleEl: HTMLDivElement;\n private chosen = '';\n private limits: DayLimits = {};\n private today = iso(todayDay());\n /** The month shown and the day the keys are on. */\n private view = { year: 0, month: 0 };\n private focusDay: CalendarDay = todayDay();\n\n constructor(\n labels: CalendarLabels,\n private readonly locale: string,\n private readonly onPick: (value: string) => void,\n ) {\n const element = document.createElement('div');\n element.className = 'tcw-calendar';\n\n const head = document.createElement('div');\n head.className = 'tcw-calendar-head';\n const title = document.createElement('div');\n title.className = 'tcw-calendar-title';\n title.setAttribute('aria-live', 'polite');\n head.append(this.navButton(labels.prevMonth, -1), title, this.navButton(labels.nextMonth, 1));\n\n const weekdays = document.createElement('div');\n weekdays.className = 'tcw-calendar-weekdays';\n weekdays.setAttribute('aria-hidden', 'true');\n const firstDay = weekStart(locale);\n const dayName = new Intl.DateTimeFormat(locale, { weekday: 'narrow', timeZone: 'UTC' });\n for (let i = 0; i < DAYS_IN_WEEK; i++) {\n // 2023-01-01 was a Sunday.\n const cell = document.createElement('span');\n cell.className = 'tcw-calendar-weekday';\n cell.textContent = dayName.format(new Date(Date.UTC(2023, 0, 1 + ((firstDay + i) % DAYS_IN_WEEK))));\n weekdays.appendChild(cell);\n }\n\n const grid = document.createElement('div');\n grid.className = 'tcw-calendar-grid';\n grid.setAttribute('role', 'grid');\n grid.addEventListener('keydown', (e) => this.onKey(e));\n grid.addEventListener('click', (e) => {\n const day = (e.target as Element).closest<HTMLButtonElement>('.tcw-calendar-day');\n if (day && !day.disabled && day.dataset.date) this.pick(day.dataset.date);\n });\n\n const foot = document.createElement('div');\n foot.className = 'tcw-calendar-foot';\n const today = document.createElement('button');\n today.type = 'button';\n today.className = 'tcw-calendar-today';\n today.textContent = labels.today;\n today.addEventListener('click', () => this.pick(this.today));\n foot.appendChild(today);\n\n element.append(head, weekdays, grid, foot);\n this.element = element;\n this.grid = grid;\n this.titleEl = title;\n }\n\n /** Show the month of `value` (today's when it is no date), that day marked, days outside `limits` greyed. */\n show(value: string, limits: DayLimits = {}): void {\n this.chosen = value;\n this.limits = limits;\n this.today = parseIso(limits.today) ? limits.today! : iso(todayDay());\n const start = this.clamp(parseIso(value) ?? parseIso(this.today)!);\n this.focusDay = start;\n this.view = { year: start.year, month: start.month };\n this.render();\n }\n\n /** Moves keyboard focus onto the days. */\n focusGrid(): void {\n this.grid.querySelector<HTMLButtonElement>('[tabindex=\"0\"]')?.focus();\n }\n\n private navButton(label: string, by: -1 | 1): HTMLButtonElement {\n const b = document.createElement('button');\n b.type = 'button';\n b.className = 'tcw-calendar-nav';\n b.setAttribute('aria-label', label);\n b.innerHTML = by < 0\n ? '<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M10 3.5L5.5 8l4.5 4.5\"/></svg>'\n : '<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M6 3.5L10.5 8 6 12.5\"/></svg>';\n b.addEventListener('click', () => this.turn(by));\n return b;\n }\n\n private turn(by: number): void {\n const t = new Date(Date.UTC(this.view.year, this.view.month + by, 1));\n this.view = { year: t.getUTCFullYear(), month: t.getUTCMonth() };\n // The keys' day follows into the new month, on the same date where it has one.\n const last = new Date(Date.UTC(this.view.year, this.view.month + 1, 0)).getUTCDate();\n this.focusDay = this.clamp({ ...this.view, day: Math.min(this.focusDay.day, last) });\n this.view = { year: this.focusDay.year, month: this.focusDay.month };\n this.render();\n }\n\n /** `day` moved inside the limits, so the keys never rest on a greyed day. */\n private clamp(day: CalendarDay): CalendarDay {\n const value = iso(day);\n const min = parseIso(this.limits.min);\n const max = parseIso(this.limits.max);\n if (min && value < iso(min)) return min;\n if (max && value > iso(max)) return max;\n return day;\n }\n\n private allowed(value: string): boolean {\n const { min, max } = this.limits;\n return !(min && value < min) && !(max && value > max);\n }\n\n private render(): void {\n const locale = this.locale;\n this.titleEl.textContent = new Intl.DateTimeFormat(locale, { month: 'long', year: 'numeric', timeZone: 'UTC' })\n .format(new Date(Date.UTC(this.view.year, this.view.month, 1)));\n const today = this.today;\n const focus = iso(this.focusDay);\n const fullDate = new Intl.DateTimeFormat(locale, { dateStyle: 'full', timeZone: 'UTC' });\n this.grid.textContent = '';\n let row: HTMLElement | null = null;\n for (const [i, day] of monthGrid(this.view.year, this.view.month, weekStart(locale)).entries()) {\n if (i % DAYS_IN_WEEK === 0) {\n row = document.createElement('div');\n row.className = 'tcw-calendar-week';\n row.setAttribute('role', 'row');\n this.grid.appendChild(row);\n }\n const value = iso(day);\n const b = document.createElement('button');\n b.type = 'button';\n b.className = 'tcw-calendar-day';\n b.dataset.date = value;\n b.setAttribute('role', 'gridcell');\n b.textContent = String(day.day);\n b.setAttribute('aria-label', fullDate.format(new Date(Date.UTC(day.year, day.month, day.day))));\n b.setAttribute('aria-selected', String(value === this.chosen));\n b.tabIndex = value === focus ? 0 : -1;\n if (day.month !== this.view.month) b.classList.add('tcw-outside');\n if (value === today) b.classList.add('tcw-today');\n if (!this.allowed(value)) b.disabled = true;\n row?.appendChild(b);\n }\n }\n\n private onKey(e: KeyboardEvent): void {\n const moves: Record<string, number> = { ArrowLeft: -1, ArrowRight: 1, ArrowUp: -DAYS_IN_WEEK, ArrowDown: DAYS_IN_WEEK };\n const rtl = this.element.isConnected && getComputedStyle(this.element).direction === 'rtl';\n if (e.key in moves) {\n const by = rtl && (e.key === 'ArrowLeft' || e.key === 'ArrowRight') ? -moves[e.key] : moves[e.key];\n this.moveFocus(addDays(this.focusDay, by));\n } else if (e.key === 'PageUp' || e.key === 'PageDown') {\n this.turn(e.key === 'PageUp' ? -1 : 1);\n this.focusGrid();\n } else if (e.key === 'Home' || e.key === 'End') {\n const last = new Date(Date.UTC(this.view.year, this.view.month + 1, 0)).getUTCDate();\n this.moveFocus({ ...this.view, day: e.key === 'Home' ? 1 : last });\n } else if (e.key === 'Enter' || e.key === ' ') {\n this.pick(iso(this.focusDay));\n } else {\n return;\n }\n e.preventDefault();\n }\n\n private moveFocus(target: CalendarDay): void {\n const day = this.clamp(target);\n this.focusDay = day;\n if (day.year !== this.view.year || day.month !== this.view.month) {\n this.view = { year: day.year, month: day.month };\n }\n this.render();\n this.focusGrid();\n }\n\n private pick(value: string): void {\n if (this.allowed(value)) this.onPick(value);\n }\n}\n"],"mappings":"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"}