@refinitiv-ui/elements 5.3.3 → 5.7.0
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.
- package/CHANGELOG.md +70 -0
- package/lib/accordion/custom-elements.json +49 -0
- package/lib/accordion/custom-elements.md +18 -0
- package/lib/accordion/index.d.ts +76 -0
- package/lib/accordion/index.js +136 -0
- package/lib/accordion/themes/halo/dark/index.js +3 -0
- package/lib/accordion/themes/halo/light/index.js +3 -0
- package/lib/accordion/themes/solar/charcoal/index.js +3 -0
- package/lib/accordion/themes/solar/pearl/index.js +3 -0
- package/lib/appstate-bar/custom-elements.json +49 -0
- package/lib/appstate-bar/custom-elements.md +22 -0
- package/lib/appstate-bar/index.d.ts +65 -0
- package/lib/appstate-bar/index.js +100 -0
- package/lib/appstate-bar/themes/halo/dark/index.js +3 -0
- package/lib/appstate-bar/themes/halo/light/index.js +3 -0
- package/lib/appstate-bar/themes/solar/charcoal/index.js +3 -0
- package/lib/appstate-bar/themes/solar/pearl/index.js +3 -0
- package/lib/autosuggest/custom-elements.json +233 -0
- package/lib/autosuggest/custom-elements.md +47 -0
- package/lib/autosuggest/helpers/types.d.ts +54 -0
- package/lib/autosuggest/helpers/types.js +1 -0
- package/lib/autosuggest/helpers/utils.d.ts +39 -0
- package/lib/autosuggest/helpers/utils.js +75 -0
- package/lib/autosuggest/index.d.ts +534 -0
- package/lib/autosuggest/index.js +1251 -0
- package/lib/autosuggest/themes/halo/dark/index.js +5 -0
- package/lib/autosuggest/themes/halo/light/index.js +5 -0
- package/lib/autosuggest/themes/solar/charcoal/index.js +5 -0
- package/lib/autosuggest/themes/solar/pearl/index.js +5 -0
- package/lib/button/custom-elements.json +119 -0
- package/lib/button/custom-elements.md +23 -0
- package/lib/button/index.d.ts +132 -0
- package/lib/button/index.js +223 -0
- package/lib/button/themes/halo/dark/index.js +3 -0
- package/lib/button/themes/halo/light/index.js +3 -0
- package/lib/button/themes/solar/charcoal/index.js +3 -0
- package/lib/button/themes/solar/pearl/index.js +3 -0
- package/lib/button-bar/custom-elements.json +26 -0
- package/lib/button-bar/custom-elements.md +9 -0
- package/lib/button-bar/index.d.ts +76 -0
- package/lib/button-bar/index.js +155 -0
- package/lib/button-bar/themes/halo/dark/index.js +3 -0
- package/lib/button-bar/themes/halo/light/index.js +3 -0
- package/lib/button-bar/themes/solar/charcoal/index.js +3 -0
- package/lib/button-bar/themes/solar/pearl/index.js +3 -0
- package/lib/calendar/constants.d.ts +22 -0
- package/lib/calendar/constants.js +23 -0
- package/lib/calendar/custom-elements.json +199 -0
- package/lib/calendar/custom-elements.md +35 -0
- package/lib/calendar/index.d.ts +321 -0
- package/lib/calendar/index.js +906 -0
- package/lib/calendar/locales.d.ts +1 -0
- package/lib/calendar/locales.js +40 -0
- package/lib/calendar/themes/halo/dark/index.js +3 -0
- package/lib/calendar/themes/halo/light/index.js +3 -0
- package/lib/calendar/themes/solar/charcoal/index.js +3 -0
- package/lib/calendar/themes/solar/pearl/index.js +3 -0
- package/lib/calendar/types.d.ts +29 -0
- package/lib/calendar/types.js +1 -0
- package/lib/calendar/utils.d.ts +42 -0
- package/lib/calendar/utils.js +119 -0
- package/lib/canvas/custom-elements.json +69 -0
- package/lib/canvas/custom-elements.md +27 -0
- package/lib/canvas/index.d.ts +100 -0
- package/lib/canvas/index.js +172 -0
- package/lib/canvas/themes/halo/dark/index.js +2 -0
- package/lib/canvas/themes/halo/light/index.js +2 -0
- package/lib/canvas/themes/solar/charcoal/index.js +2 -0
- package/lib/canvas/themes/solar/pearl/index.js +2 -0
- package/lib/card/custom-elements.json +59 -0
- package/lib/card/custom-elements.md +24 -0
- package/lib/card/helpers/types.d.ts +12 -0
- package/lib/card/helpers/types.js +1 -0
- package/lib/card/index.d.ts +140 -0
- package/lib/card/index.js +246 -0
- package/lib/card/themes/halo/dark/index.js +5 -0
- package/lib/card/themes/halo/light/index.js +5 -0
- package/lib/card/themes/solar/charcoal/index.js +5 -0
- package/lib/card/themes/solar/pearl/index.js +5 -0
- package/lib/chart/custom-elements.json +42 -0
- package/lib/chart/custom-elements.md +16 -0
- package/lib/chart/helpers/index.d.ts +2 -0
- package/lib/chart/helpers/index.js +2 -0
- package/lib/chart/helpers/legend.d.ts +5 -0
- package/lib/chart/helpers/legend.js +78 -0
- package/lib/chart/helpers/merge.d.ts +15 -0
- package/lib/chart/helpers/merge.js +28 -0
- package/lib/chart/helpers/types.d.ts +69 -0
- package/lib/chart/helpers/types.js +1 -0
- package/lib/chart/index.d.ts +187 -0
- package/lib/chart/index.js +491 -0
- package/lib/chart/plugins/doughnut-center-label.d.ts +3 -0
- package/lib/chart/plugins/doughnut-center-label.js +196 -0
- package/lib/chart/themes/halo/dark/index.js +4 -0
- package/lib/chart/themes/halo/light/index.js +4 -0
- package/lib/chart/themes/solar/charcoal/index.js +4 -0
- package/lib/chart/themes/solar/pearl/index.js +4 -0
- package/lib/checkbox/custom-elements.json +67 -0
- package/lib/checkbox/custom-elements.md +18 -0
- package/lib/checkbox/index.d.ts +95 -0
- package/lib/checkbox/index.js +193 -0
- package/lib/checkbox/themes/halo/dark/index.js +4 -0
- package/lib/checkbox/themes/halo/light/index.js +4 -0
- package/lib/checkbox/themes/solar/charcoal/index.js +4 -0
- package/lib/checkbox/themes/solar/pearl/index.js +4 -0
- package/lib/clock/custom-elements.json +121 -0
- package/lib/clock/custom-elements.md +28 -0
- package/lib/clock/index.d.ts +319 -0
- package/lib/clock/index.js +581 -0
- package/lib/clock/themes/halo/dark/index.js +2 -0
- package/lib/clock/themes/halo/light/index.js +2 -0
- package/lib/clock/themes/solar/charcoal/index.js +2 -0
- package/lib/clock/themes/solar/pearl/index.js +2 -0
- package/lib/clock/utils/TickManager.d.ts +14 -0
- package/lib/clock/utils/TickManager.js +66 -0
- package/lib/clock/utils/timestamps.d.ts +6 -0
- package/lib/clock/utils/timestamps.js +6 -0
- package/lib/collapse/custom-elements.json +79 -0
- package/lib/collapse/custom-elements.md +27 -0
- package/lib/collapse/index.d.ts +119 -0
- package/lib/collapse/index.js +197 -0
- package/lib/collapse/themes/halo/dark/index.js +5 -0
- package/lib/collapse/themes/halo/light/index.js +5 -0
- package/lib/collapse/themes/solar/charcoal/index.js +5 -0
- package/lib/collapse/themes/solar/pearl/index.js +5 -0
- package/lib/color-dialog/custom-elements.json +193 -0
- package/lib/color-dialog/custom-elements.md +39 -0
- package/lib/color-dialog/elements/color-palettes.d.ts +52 -0
- package/lib/color-dialog/elements/color-palettes.js +101 -0
- package/lib/color-dialog/elements/grayscale-palettes.d.ts +67 -0
- package/lib/color-dialog/elements/grayscale-palettes.js +161 -0
- package/lib/color-dialog/elements/palettes.d.ts +65 -0
- package/lib/color-dialog/elements/palettes.js +132 -0
- package/lib/color-dialog/helpers/color-helpers.d.ts +16 -0
- package/lib/color-dialog/helpers/color-helpers.js +161 -0
- package/lib/color-dialog/helpers/value-model.d.ts +75 -0
- package/lib/color-dialog/helpers/value-model.js +141 -0
- package/lib/color-dialog/index.d.ts +232 -0
- package/lib/color-dialog/index.js +459 -0
- package/lib/color-dialog/themes/halo/dark/index.js +7 -0
- package/lib/color-dialog/themes/halo/light/index.js +7 -0
- package/lib/color-dialog/themes/solar/charcoal/index.js +7 -0
- package/lib/color-dialog/themes/solar/pearl/index.js +7 -0
- package/lib/combo-box/custom-elements.json +210 -0
- package/lib/combo-box/custom-elements.md +35 -0
- package/lib/combo-box/helpers/filter.d.ts +10 -0
- package/lib/combo-box/helpers/filter.js +29 -0
- package/lib/combo-box/helpers/keyboard-event.d.ts +17 -0
- package/lib/combo-box/helpers/keyboard-event.js +19 -0
- package/lib/combo-box/helpers/types.d.ts +11 -0
- package/lib/combo-box/helpers/types.js +1 -0
- package/lib/combo-box/index.d.ts +523 -0
- package/lib/combo-box/index.js +1146 -0
- package/lib/combo-box/themes/halo/dark/index.js +8 -0
- package/lib/combo-box/themes/halo/light/index.js +8 -0
- package/lib/combo-box/themes/solar/charcoal/index.js +8 -0
- package/lib/combo-box/themes/solar/pearl/index.js +8 -0
- package/lib/counter/custom-elements.json +35 -0
- package/lib/counter/custom-elements.md +11 -0
- package/lib/counter/index.d.ts +89 -0
- package/lib/counter/index.js +152 -0
- package/lib/counter/themes/halo/dark/index.js +3 -0
- package/lib/counter/themes/halo/light/index.js +3 -0
- package/lib/counter/themes/solar/charcoal/index.js +3 -0
- package/lib/counter/themes/solar/pearl/index.js +3 -0
- package/lib/counter/utils.d.ts +13 -0
- package/lib/counter/utils.js +52 -0
- package/lib/datetime-picker/custom-elements.json +333 -0
- package/lib/datetime-picker/custom-elements.md +49 -0
- package/lib/datetime-picker/index.d.ts +498 -0
- package/lib/datetime-picker/index.js +1164 -0
- package/lib/datetime-picker/locales.d.ts +8 -0
- package/lib/datetime-picker/locales.js +57 -0
- package/lib/datetime-picker/themes/halo/dark/index.js +7 -0
- package/lib/datetime-picker/themes/halo/light/index.js +7 -0
- package/lib/datetime-picker/themes/solar/charcoal/index.js +7 -0
- package/lib/datetime-picker/themes/solar/pearl/index.js +7 -0
- package/lib/datetime-picker/types.d.ts +3 -0
- package/lib/datetime-picker/types.js +1 -0
- package/lib/datetime-picker/utils.d.ts +55 -0
- package/lib/datetime-picker/utils.js +92 -0
- package/lib/dialog/custom-elements.json +136 -0
- package/lib/dialog/custom-elements.md +47 -0
- package/lib/dialog/draggable-element.d.ts +14 -0
- package/lib/dialog/draggable-element.js +221 -0
- package/lib/dialog/index.d.ts +199 -0
- package/lib/dialog/index.js +331 -0
- package/lib/dialog/themes/halo/dark/index.js +7 -0
- package/lib/dialog/themes/halo/light/index.js +7 -0
- package/lib/dialog/themes/solar/charcoal/index.js +7 -0
- package/lib/dialog/themes/solar/pearl/index.js +7 -0
- package/lib/email-field/custom-elements.json +199 -0
- package/lib/email-field/custom-elements.md +35 -0
- package/lib/email-field/index.d.ts +152 -0
- package/lib/email-field/index.js +286 -0
- package/lib/email-field/themes/halo/dark/index.js +3 -0
- package/lib/email-field/themes/halo/light/index.js +3 -0
- package/lib/email-field/themes/solar/charcoal/index.js +3 -0
- package/lib/email-field/themes/solar/pearl/index.js +3 -0
- package/lib/events.d.ts +121 -0
- package/lib/events.js +1 -0
- package/lib/flag/custom-elements.json +35 -0
- package/lib/flag/custom-elements.md +10 -0
- package/lib/flag/index.d.ts +94 -0
- package/lib/flag/index.js +166 -0
- package/lib/flag/themes/halo/dark/index.js +2 -0
- package/lib/flag/themes/halo/light/index.js +2 -0
- package/lib/flag/themes/solar/charcoal/index.js +2 -0
- package/lib/flag/themes/solar/pearl/index.js +2 -0
- package/lib/flag/utils/FlagLoader.d.ts +47 -0
- package/lib/flag/utils/FlagLoader.js +86 -0
- package/lib/header/custom-elements.json +36 -0
- package/lib/header/custom-elements.md +18 -0
- package/lib/header/index.d.ts +46 -0
- package/lib/header/index.js +73 -0
- package/lib/header/themes/halo/dark/index.js +2 -0
- package/lib/header/themes/halo/light/index.js +2 -0
- package/lib/header/themes/solar/charcoal/index.js +2 -0
- package/lib/header/themes/solar/pearl/index.js +2 -0
- package/lib/heatmap/custom-elements.json +151 -0
- package/lib/heatmap/custom-elements.md +26 -0
- package/lib/heatmap/helpers/color.d.ts +30 -0
- package/lib/heatmap/helpers/color.js +68 -0
- package/lib/heatmap/helpers/text.d.ts +26 -0
- package/lib/heatmap/helpers/text.js +91 -0
- package/lib/heatmap/helpers/track.d.ts +102 -0
- package/lib/heatmap/helpers/track.js +160 -0
- package/lib/heatmap/helpers/types.d.ts +40 -0
- package/lib/heatmap/helpers/types.js +1 -0
- package/lib/heatmap/index.d.ts +453 -0
- package/lib/heatmap/index.js +1103 -0
- package/lib/heatmap/themes/halo/dark/index.js +4 -0
- package/lib/heatmap/themes/halo/light/index.js +4 -0
- package/lib/heatmap/themes/solar/charcoal/index.js +4 -0
- package/lib/heatmap/themes/solar/pearl/index.js +4 -0
- package/lib/icon/custom-elements.json +36 -0
- package/lib/icon/custom-elements.md +8 -0
- package/lib/icon/index.d.ts +88 -0
- package/lib/icon/index.js +169 -0
- package/lib/icon/themes/halo/dark/index.js +2 -0
- package/lib/icon/themes/halo/light/index.js +2 -0
- package/lib/icon/themes/solar/charcoal/index.js +2 -0
- package/lib/icon/themes/solar/pearl/index.js +2 -0
- package/lib/icon/utils/IconLoader.d.ts +52 -0
- package/lib/icon/utils/IconLoader.js +93 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +3 -0
- package/lib/interactive-chart/custom-elements.json +86 -0
- package/lib/interactive-chart/custom-elements.md +32 -0
- package/lib/interactive-chart/helpers/merge.d.ts +15 -0
- package/lib/interactive-chart/helpers/merge.js +28 -0
- package/lib/interactive-chart/helpers/types.d.ts +45 -0
- package/lib/interactive-chart/helpers/types.js +6 -0
- package/lib/interactive-chart/index.d.ts +380 -0
- package/lib/interactive-chart/index.js +1090 -0
- package/lib/interactive-chart/themes/halo/dark/index.js +3 -0
- package/lib/interactive-chart/themes/halo/light/index.js +3 -0
- package/lib/interactive-chart/themes/solar/charcoal/index.js +3 -0
- package/lib/interactive-chart/themes/solar/pearl/index.js +3 -0
- package/lib/item/custom-elements.json +151 -0
- package/lib/item/custom-elements.md +29 -0
- package/lib/item/helpers/types.d.ts +57 -0
- package/lib/item/helpers/types.js +1 -0
- package/lib/item/index.d.ts +158 -0
- package/lib/item/index.js +271 -0
- package/lib/item/themes/halo/dark/index.js +4 -0
- package/lib/item/themes/halo/light/index.js +4 -0
- package/lib/item/themes/solar/charcoal/index.js +4 -0
- package/lib/item/themes/solar/pearl/index.js +4 -0
- package/lib/jsx.d.ts +223 -0
- package/lib/label/custom-elements.json +52 -0
- package/lib/label/custom-elements.md +11 -0
- package/lib/label/index.d.ts +102 -0
- package/lib/label/index.js +244 -0
- package/lib/label/themes/halo/dark/index.js +3 -0
- package/lib/label/themes/halo/light/index.js +3 -0
- package/lib/label/themes/solar/charcoal/index.js +3 -0
- package/lib/label/themes/solar/pearl/index.js +3 -0
- package/lib/layout/custom-elements.json +163 -0
- package/lib/layout/custom-elements.md +26 -0
- package/lib/layout/index.d.ts +107 -0
- package/lib/layout/index.js +212 -0
- package/lib/layout/themes/halo/dark/index.js +2 -0
- package/lib/layout/themes/halo/light/index.js +2 -0
- package/lib/layout/themes/solar/charcoal/index.js +2 -0
- package/lib/layout/themes/solar/pearl/index.js +2 -0
- package/lib/led-gauge/custom-elements.json +113 -0
- package/lib/led-gauge/custom-elements.md +17 -0
- package/lib/led-gauge/index.d.ts +143 -0
- package/lib/led-gauge/index.js +437 -0
- package/lib/led-gauge/themes/halo/dark/index.js +3 -0
- package/lib/led-gauge/themes/halo/light/index.js +3 -0
- package/lib/led-gauge/themes/solar/charcoal/index.js +3 -0
- package/lib/led-gauge/themes/solar/pearl/index.js +3 -0
- package/lib/list/custom-elements.json +111 -0
- package/lib/list/custom-elements.md +30 -0
- package/lib/list/extensible-function.d.ts +8 -0
- package/lib/list/extensible-function.js +13 -0
- package/lib/list/helpers/list-renderer.d.ts +9 -0
- package/lib/list/helpers/list-renderer.js +35 -0
- package/lib/list/helpers/types.d.ts +3 -0
- package/lib/list/helpers/types.js +1 -0
- package/lib/list/index.d.ts +292 -0
- package/lib/list/index.js +600 -0
- package/lib/list/renderer.d.ts +36 -0
- package/lib/list/renderer.js +9 -0
- package/lib/list/themes/halo/dark/index.js +3 -0
- package/lib/list/themes/halo/light/index.js +3 -0
- package/lib/list/themes/solar/charcoal/index.js +3 -0
- package/lib/list/themes/solar/pearl/index.js +3 -0
- package/lib/loader/custom-elements.json +9 -0
- package/lib/loader/custom-elements.md +5 -0
- package/lib/loader/index.d.ts +41 -0
- package/lib/loader/index.js +61 -0
- package/lib/loader/themes/halo/dark/index.js +2 -0
- package/lib/loader/themes/halo/light/index.js +2 -0
- package/lib/loader/themes/solar/charcoal/index.js +2 -0
- package/lib/loader/themes/solar/pearl/index.js +2 -0
- package/lib/multi-input/custom-elements.json +238 -0
- package/lib/multi-input/custom-elements.md +43 -0
- package/lib/multi-input/helpers/types.d.ts +11 -0
- package/lib/multi-input/helpers/types.js +1 -0
- package/lib/multi-input/index.d.ts +297 -0
- package/lib/multi-input/index.js +590 -0
- package/lib/multi-input/themes/halo/dark/index.js +4 -0
- package/lib/multi-input/themes/halo/light/index.js +4 -0
- package/lib/multi-input/themes/solar/charcoal/index.js +4 -0
- package/lib/multi-input/themes/solar/pearl/index.js +4 -0
- package/lib/notification/custom-elements.json +95 -0
- package/lib/notification/custom-elements.md +26 -0
- package/lib/notification/elements/notification-tray.d.ts +97 -0
- package/lib/notification/elements/notification-tray.js +167 -0
- package/lib/notification/elements/notification.d.ts +90 -0
- package/lib/notification/elements/notification.js +154 -0
- package/lib/notification/helpers/status.d.ts +30 -0
- package/lib/notification/helpers/status.js +130 -0
- package/lib/notification/helpers/types.d.ts +10 -0
- package/lib/notification/helpers/types.js +1 -0
- package/lib/notification/index.d.ts +2 -0
- package/lib/notification/index.js +2 -0
- package/lib/notification/themes/halo/dark/index.js +5 -0
- package/lib/notification/themes/halo/light/index.js +5 -0
- package/lib/notification/themes/solar/charcoal/index.js +5 -0
- package/lib/notification/themes/solar/pearl/index.js +5 -0
- package/lib/number-field/custom-elements.json +200 -0
- package/lib/number-field/custom-elements.md +37 -0
- package/lib/number-field/index.d.ts +294 -0
- package/lib/number-field/index.js +707 -0
- package/lib/number-field/themes/halo/dark/index.js +3 -0
- package/lib/number-field/themes/halo/light/index.js +3 -0
- package/lib/number-field/themes/solar/charcoal/index.js +3 -0
- package/lib/number-field/themes/solar/pearl/index.js +3 -0
- package/lib/overlay/custom-elements.json +345 -0
- package/lib/overlay/custom-elements.md +54 -0
- package/lib/overlay/elements/overlay-backdrop.d.ts +46 -0
- package/lib/overlay/elements/overlay-backdrop.js +64 -0
- package/lib/overlay/elements/overlay-viewport.d.ts +40 -0
- package/lib/overlay/elements/overlay-viewport.js +52 -0
- package/lib/overlay/elements/overlay.d.ts +403 -0
- package/lib/overlay/elements/overlay.js +1426 -0
- package/lib/overlay/helpers/functions.d.ts +13 -0
- package/lib/overlay/helpers/functions.js +16 -0
- package/lib/overlay/helpers/types.d.ts +97 -0
- package/lib/overlay/helpers/types.js +16 -0
- package/lib/overlay/index.d.ts +2 -0
- package/lib/overlay/index.js +1 -0
- package/lib/overlay/managers/backdrop-manager.d.ts +45 -0
- package/lib/overlay/managers/backdrop-manager.js +96 -0
- package/lib/overlay/managers/close-manager.d.ts +54 -0
- package/lib/overlay/managers/close-manager.js +138 -0
- package/lib/overlay/managers/focus-manager.d.ts +71 -0
- package/lib/overlay/managers/focus-manager.js +228 -0
- package/lib/overlay/managers/interaction-lock-manager.d.ts +138 -0
- package/lib/overlay/managers/interaction-lock-manager.js +375 -0
- package/lib/overlay/managers/viewport-manager.d.ts +93 -0
- package/lib/overlay/managers/viewport-manager.js +211 -0
- package/lib/overlay/managers/zindex-manager.d.ts +80 -0
- package/lib/overlay/managers/zindex-manager.js +195 -0
- package/lib/overlay/themes/halo/dark/index.js +4 -0
- package/lib/overlay/themes/halo/light/index.js +4 -0
- package/lib/overlay/themes/solar/charcoal/index.js +4 -0
- package/lib/overlay/themes/solar/pearl/index.js +4 -0
- package/lib/overlay-menu/custom-elements.json +194 -0
- package/lib/overlay-menu/custom-elements.md +44 -0
- package/lib/overlay-menu/helpers/types.d.ts +8 -0
- package/lib/overlay-menu/helpers/types.js +1 -0
- package/lib/overlay-menu/index.d.ts +385 -0
- package/lib/overlay-menu/index.js +933 -0
- package/lib/overlay-menu/managers/menu-manager.d.ts +98 -0
- package/lib/overlay-menu/managers/menu-manager.js +240 -0
- package/lib/overlay-menu/themes/halo/dark/index.js +5 -0
- package/lib/overlay-menu/themes/halo/light/index.js +5 -0
- package/lib/overlay-menu/themes/solar/charcoal/index.js +5 -0
- package/lib/overlay-menu/themes/solar/pearl/index.js +5 -0
- package/lib/pagination/custom-elements.json +93 -0
- package/lib/pagination/custom-elements.md +27 -0
- package/lib/pagination/helpers/types.d.ts +9 -0
- package/lib/pagination/helpers/types.js +1 -0
- package/lib/pagination/index.d.ts +207 -0
- package/lib/pagination/index.js +398 -0
- package/lib/pagination/themes/halo/dark/index.js +6 -0
- package/lib/pagination/themes/halo/light/index.js +6 -0
- package/lib/pagination/themes/solar/charcoal/index.js +6 -0
- package/lib/pagination/themes/solar/pearl/index.js +6 -0
- package/lib/panel/custom-elements.json +39 -0
- package/lib/panel/custom-elements.md +11 -0
- package/lib/panel/index.d.ts +48 -0
- package/lib/panel/index.js +74 -0
- package/lib/panel/themes/halo/dark/index.js +2 -0
- package/lib/panel/themes/halo/light/index.js +2 -0
- package/lib/panel/themes/solar/charcoal/index.js +2 -0
- package/lib/panel/themes/solar/pearl/index.js +2 -0
- package/lib/password-field/custom-elements.json +156 -0
- package/lib/password-field/custom-elements.md +31 -0
- package/lib/password-field/index.d.ts +141 -0
- package/lib/password-field/index.js +258 -0
- package/lib/password-field/themes/halo/dark/index.js +3 -0
- package/lib/password-field/themes/halo/light/index.js +3 -0
- package/lib/password-field/themes/solar/charcoal/index.js +3 -0
- package/lib/password-field/themes/solar/pearl/index.js +3 -0
- package/lib/pill/custom-elements.json +95 -0
- package/lib/pill/custom-elements.md +22 -0
- package/lib/pill/index.d.ts +97 -0
- package/lib/pill/index.js +160 -0
- package/lib/pill/themes/halo/dark/index.js +3 -0
- package/lib/pill/themes/halo/light/index.js +3 -0
- package/lib/pill/themes/solar/charcoal/index.js +3 -0
- package/lib/pill/themes/solar/pearl/index.js +3 -0
- package/lib/progress-bar/custom-elements.json +58 -0
- package/lib/progress-bar/custom-elements.md +18 -0
- package/lib/progress-bar/index.d.ts +82 -0
- package/lib/progress-bar/index.js +157 -0
- package/lib/progress-bar/themes/halo/dark/index.js +2 -0
- package/lib/progress-bar/themes/halo/light/index.js +2 -0
- package/lib/progress-bar/themes/solar/charcoal/index.js +2 -0
- package/lib/progress-bar/themes/solar/pearl/index.js +2 -0
- package/lib/radio-button/custom-elements.json +82 -0
- package/lib/radio-button/custom-elements.md +19 -0
- package/lib/radio-button/index.d.ts +122 -0
- package/lib/radio-button/index.js +257 -0
- package/lib/radio-button/radio-button-registry.d.ts +22 -0
- package/lib/radio-button/radio-button-registry.js +93 -0
- package/lib/radio-button/themes/halo/dark/index.js +3 -0
- package/lib/radio-button/themes/halo/light/index.js +3 -0
- package/lib/radio-button/themes/solar/charcoal/index.js +3 -0
- package/lib/radio-button/themes/solar/pearl/index.js +3 -0
- package/lib/rating/custom-elements.json +58 -0
- package/lib/rating/custom-elements.md +17 -0
- package/lib/rating/index.d.ts +91 -0
- package/lib/rating/index.js +157 -0
- package/lib/rating/themes/halo/dark/index.js +2 -0
- package/lib/rating/themes/halo/light/index.js +2 -0
- package/lib/rating/themes/solar/charcoal/index.js +2 -0
- package/lib/rating/themes/solar/pearl/index.js +2 -0
- package/lib/search-field/custom-elements.json +173 -0
- package/lib/search-field/custom-elements.md +33 -0
- package/lib/search-field/index.d.ts +134 -0
- package/lib/search-field/index.js +253 -0
- package/lib/search-field/themes/halo/dark/index.js +3 -0
- package/lib/search-field/themes/halo/light/index.js +3 -0
- package/lib/search-field/themes/solar/charcoal/index.js +3 -0
- package/lib/search-field/themes/solar/pearl/index.js +3 -0
- package/lib/select/custom-elements.json +103 -0
- package/lib/select/custom-elements.md +24 -0
- package/lib/select/helpers/types.d.ts +3 -0
- package/lib/select/helpers/types.js +1 -0
- package/lib/select/index.d.ts +388 -0
- package/lib/select/index.js +942 -0
- package/lib/select/themes/halo/dark/index.js +5 -0
- package/lib/select/themes/halo/light/index.js +5 -0
- package/lib/select/themes/solar/charcoal/index.js +5 -0
- package/lib/select/themes/solar/pearl/index.js +5 -0
- package/lib/sidebar-layout/custom-elements.json +72 -0
- package/lib/sidebar-layout/custom-elements.md +22 -0
- package/lib/sidebar-layout/index.d.ts +69 -0
- package/lib/sidebar-layout/index.js +134 -0
- package/lib/sidebar-layout/themes/halo/dark/index.js +3 -0
- package/lib/sidebar-layout/themes/halo/light/index.js +3 -0
- package/lib/sidebar-layout/themes/solar/charcoal/index.js +3 -0
- package/lib/sidebar-layout/themes/solar/pearl/index.js +3 -0
- package/lib/slider/custom-elements.json +181 -0
- package/lib/slider/custom-elements.md +28 -0
- package/lib/slider/index.d.ts +409 -0
- package/lib/slider/index.js +1187 -0
- package/lib/slider/themes/halo/dark/index.js +3 -0
- package/lib/slider/themes/halo/light/index.js +3 -0
- package/lib/slider/themes/solar/charcoal/index.js +3 -0
- package/lib/slider/themes/solar/pearl/index.js +3 -0
- package/lib/sparkline/custom-elements.json +59 -0
- package/lib/sparkline/custom-elements.md +16 -0
- package/lib/sparkline/index.d.ts +107 -0
- package/lib/sparkline/index.js +186 -0
- package/lib/sparkline/themes/halo/dark/index.js +2 -0
- package/lib/sparkline/themes/halo/light/index.js +2 -0
- package/lib/sparkline/themes/solar/charcoal/index.js +2 -0
- package/lib/sparkline/themes/solar/pearl/index.js +2 -0
- package/lib/swing-gauge/const.d.ts +22 -0
- package/lib/swing-gauge/const.js +26 -0
- package/lib/swing-gauge/custom-elements.json +109 -0
- package/lib/swing-gauge/custom-elements.md +17 -0
- package/lib/swing-gauge/helpers.d.ts +8 -0
- package/lib/swing-gauge/helpers.js +105 -0
- package/lib/swing-gauge/index.d.ts +294 -0
- package/lib/swing-gauge/index.js +762 -0
- package/lib/swing-gauge/themes/halo/dark/index.js +3 -0
- package/lib/swing-gauge/themes/halo/light/index.js +3 -0
- package/lib/swing-gauge/themes/solar/charcoal/index.js +3 -0
- package/lib/swing-gauge/themes/solar/pearl/index.js +3 -0
- package/lib/swing-gauge/types.d.ts +34 -0
- package/lib/swing-gauge/types.js +1 -0
- package/lib/tab/custom-elements.json +123 -0
- package/lib/tab/custom-elements.md +22 -0
- package/lib/tab/index.d.ts +118 -0
- package/lib/tab/index.js +208 -0
- package/lib/tab/themes/halo/dark/index.js +4 -0
- package/lib/tab/themes/halo/light/index.js +4 -0
- package/lib/tab/themes/solar/charcoal/index.js +4 -0
- package/lib/tab/themes/solar/pearl/index.js +4 -0
- package/lib/tab-bar/custom-elements.json +52 -0
- package/lib/tab-bar/custom-elements.md +11 -0
- package/lib/tab-bar/helpers/animate.d.ts +16 -0
- package/lib/tab-bar/helpers/animate.js +53 -0
- package/lib/tab-bar/index.d.ts +108 -0
- package/lib/tab-bar/index.js +218 -0
- package/lib/tab-bar/themes/halo/dark/index.js +4 -0
- package/lib/tab-bar/themes/halo/light/index.js +4 -0
- package/lib/tab-bar/themes/solar/charcoal/index.js +4 -0
- package/lib/tab-bar/themes/solar/pearl/index.js +4 -0
- package/lib/text-field/custom-elements.json +210 -0
- package/lib/text-field/custom-elements.md +37 -0
- package/lib/text-field/index.d.ts +193 -0
- package/lib/text-field/index.js +409 -0
- package/lib/text-field/themes/halo/dark/index.js +3 -0
- package/lib/text-field/themes/halo/light/index.js +3 -0
- package/lib/text-field/themes/solar/charcoal/index.js +3 -0
- package/lib/text-field/themes/solar/pearl/index.js +3 -0
- package/lib/time-picker/custom-elements.json +124 -0
- package/lib/time-picker/custom-elements.md +28 -0
- package/lib/time-picker/index.d.ts +379 -0
- package/lib/time-picker/index.js +775 -0
- package/lib/time-picker/themes/halo/dark/index.js +4 -0
- package/lib/time-picker/themes/halo/light/index.js +4 -0
- package/lib/time-picker/themes/solar/charcoal/index.js +4 -0
- package/lib/time-picker/themes/solar/pearl/index.js +4 -0
- package/lib/toggle/custom-elements.json +82 -0
- package/lib/toggle/custom-elements.md +19 -0
- package/lib/toggle/index.d.ts +86 -0
- package/lib/toggle/index.js +152 -0
- package/lib/toggle/themes/halo/dark/index.js +2 -0
- package/lib/toggle/themes/halo/light/index.js +2 -0
- package/lib/toggle/themes/solar/charcoal/index.js +2 -0
- package/lib/toggle/themes/solar/pearl/index.js +2 -0
- package/lib/tooltip/custom-elements.json +62 -0
- package/lib/tooltip/custom-elements.md +14 -0
- package/lib/tooltip/elements/title-tooltip.d.ts +1 -0
- package/lib/tooltip/elements/title-tooltip.js +18 -0
- package/lib/tooltip/elements/tooltip-element.d.ts +21 -0
- package/lib/tooltip/elements/tooltip-element.js +54 -0
- package/lib/tooltip/helpers/overflow-tooltip.d.ts +9 -0
- package/lib/tooltip/helpers/overflow-tooltip.js +19 -0
- package/lib/tooltip/helpers/renderer.d.ts +8 -0
- package/lib/tooltip/helpers/renderer.js +11 -0
- package/lib/tooltip/helpers/types.d.ts +23 -0
- package/lib/tooltip/helpers/types.js +1 -0
- package/lib/tooltip/index.d.ts +232 -0
- package/lib/tooltip/index.js +477 -0
- package/lib/tooltip/managers/tooltip-manager.d.ts +15 -0
- package/lib/tooltip/managers/tooltip-manager.js +140 -0
- package/lib/tooltip/themes/halo/dark/index.js +3 -0
- package/lib/tooltip/themes/halo/light/index.js +3 -0
- package/lib/tooltip/themes/solar/charcoal/index.js +3 -0
- package/lib/tooltip/themes/solar/pearl/index.js +3 -0
- package/lib/tornado-chart/custom-elements.json +45 -0
- package/lib/tornado-chart/custom-elements.md +18 -0
- package/lib/tornado-chart/elements/tornado-chart.d.ts +78 -0
- package/lib/tornado-chart/elements/tornado-chart.js +122 -0
- package/lib/tornado-chart/elements/tornado-item.d.ts +110 -0
- package/lib/tornado-chart/elements/tornado-item.js +207 -0
- package/lib/tornado-chart/index.d.ts +2 -0
- package/lib/tornado-chart/index.js +2 -0
- package/lib/tornado-chart/themes/halo/dark/index.js +6 -0
- package/lib/tornado-chart/themes/halo/light/index.js +6 -0
- package/lib/tornado-chart/themes/solar/charcoal/index.js +6 -0
- package/lib/tornado-chart/themes/solar/pearl/index.js +6 -0
- package/lib/tree/custom-elements.json +113 -0
- package/lib/tree/custom-elements.md +32 -0
- package/lib/tree/elements/tree-item.d.ts +96 -0
- package/lib/tree/elements/tree-item.js +179 -0
- package/lib/tree/elements/tree.d.ts +201 -0
- package/lib/tree/elements/tree.js +412 -0
- package/lib/tree/helpers/filter.d.ts +8 -0
- package/lib/tree/helpers/filter.js +33 -0
- package/lib/tree/helpers/renderer.d.ts +5 -0
- package/lib/tree/helpers/renderer.js +33 -0
- package/lib/tree/helpers/types.d.ts +25 -0
- package/lib/tree/helpers/types.js +1 -0
- package/lib/tree/index.d.ts +4 -0
- package/lib/tree/index.js +3 -0
- package/lib/tree/managers/tree-manager.d.ts +248 -0
- package/lib/tree/managers/tree-manager.js +395 -0
- package/lib/tree/themes/halo/dark/index.js +7 -0
- package/lib/tree/themes/halo/light/index.js +7 -0
- package/lib/tree/themes/solar/charcoal/index.js +7 -0
- package/lib/tree/themes/solar/pearl/index.js +7 -0
- package/lib/tree-select/custom-elements.json +107 -0
- package/lib/tree-select/custom-elements.md +26 -0
- package/lib/tree-select/helpers/types.d.ts +4 -0
- package/lib/tree-select/helpers/types.js +1 -0
- package/lib/tree-select/index.d.ts +402 -0
- package/lib/tree-select/index.js +890 -0
- package/lib/tree-select/themes/halo/dark/index.js +12 -0
- package/lib/tree-select/themes/halo/light/index.js +12 -0
- package/lib/tree-select/themes/solar/charcoal/index.js +12 -0
- package/lib/tree-select/themes/solar/pearl/index.js +12 -0
- package/lib/version.d.ts +1 -0
- package/lib/version.js +1 -0
- package/package.json +298 -15
|
@@ -0,0 +1,1090 @@
|
|
|
1
|
+
var InteractiveChart_1;
|
|
2
|
+
import { __decorate } from "tslib";
|
|
3
|
+
import { ResponsiveElement, html, css, DeprecationNotice } from '@refinitiv-ui/core';
|
|
4
|
+
import { customElement } from '@refinitiv-ui/core/lib/decorators/custom-element.js';
|
|
5
|
+
import { property } from '@refinitiv-ui/core/lib/decorators/property.js';
|
|
6
|
+
import { query } from '@refinitiv-ui/core/lib/decorators/query.js';
|
|
7
|
+
import { VERSION } from '../version.js';
|
|
8
|
+
import { color as parseColor } from '@refinitiv-ui/utils/lib/color.js';
|
|
9
|
+
import { createChart as chart } from 'lightweight-charts';
|
|
10
|
+
import '../tooltip/index.js';
|
|
11
|
+
import { LegendStyle } from './helpers/types.js';
|
|
12
|
+
import { merge } from './helpers/merge.js';
|
|
13
|
+
const NOT_AVAILABLE_DATA = 'N/A';
|
|
14
|
+
const NO_DATA_POINT = '--';
|
|
15
|
+
/**
|
|
16
|
+
* A charting component that allows you to create several use cases of financial chart.
|
|
17
|
+
* By lightweight-charts library.
|
|
18
|
+
* @slot legend - Slot to use for implementing custom legend.
|
|
19
|
+
* @fires initialized - Dispatched when chart is initialized
|
|
20
|
+
*/
|
|
21
|
+
let InteractiveChart = InteractiveChart_1 = class InteractiveChart extends ResponsiveElement {
|
|
22
|
+
constructor() {
|
|
23
|
+
super(...arguments);
|
|
24
|
+
/**
|
|
25
|
+
* Chart configurations for init chart
|
|
26
|
+
* @type {InteractiveChartConfig}
|
|
27
|
+
*/
|
|
28
|
+
this.config = null;
|
|
29
|
+
/**
|
|
30
|
+
* Hide legend
|
|
31
|
+
*/
|
|
32
|
+
this.disabledLegend = false;
|
|
33
|
+
/**
|
|
34
|
+
* Hide jump to latest data button
|
|
35
|
+
*/
|
|
36
|
+
this.disabledJumpButton = false;
|
|
37
|
+
/**
|
|
38
|
+
* Deprecation noticed, used to display a warning message
|
|
39
|
+
* when deprecated features are used.
|
|
40
|
+
*/
|
|
41
|
+
this.deprecationNotice = new DeprecationNotice('`legendstyle` attribute and property are deprecated. Use `legend-style` for attribute and `legendStyle` property instead.');
|
|
42
|
+
/** Array of series instances in chart */
|
|
43
|
+
this.seriesList = [];
|
|
44
|
+
this.jumpButtonInitialized = false;
|
|
45
|
+
this.legendInitialized = false;
|
|
46
|
+
this.isCrosshairVisible = false;
|
|
47
|
+
this.chart = null;
|
|
48
|
+
this.rowLegend = null;
|
|
49
|
+
this.timeScale = null;
|
|
50
|
+
this.width = 0;
|
|
51
|
+
this.height = 0;
|
|
52
|
+
this.theme = null;
|
|
53
|
+
this.themeColors = [];
|
|
54
|
+
this.hasDataPoint = false;
|
|
55
|
+
/**
|
|
56
|
+
* Set opacity of color
|
|
57
|
+
* @param color color value
|
|
58
|
+
* @param opacity opacity value
|
|
59
|
+
* @returns color parse
|
|
60
|
+
*/
|
|
61
|
+
this.setOpacity = (color, opacity) => {
|
|
62
|
+
const colorParse = parseColor(color);
|
|
63
|
+
if (colorParse && opacity !== null) {
|
|
64
|
+
colorParse.opacity = Number(opacity);
|
|
65
|
+
}
|
|
66
|
+
return colorParse;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Handle MouseEventHandler
|
|
70
|
+
* on event subscribeCrosshairMove
|
|
71
|
+
* for create row legend
|
|
72
|
+
* @param param MouseEventParams
|
|
73
|
+
* @returns {void} return undefined has out of boundary chart
|
|
74
|
+
*/
|
|
75
|
+
/* istanbul ignore next */
|
|
76
|
+
this.handleCrosshairMoved = (param) => {
|
|
77
|
+
if (!param) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
this.createRowLegend(this.rowLegend, param);
|
|
81
|
+
};
|
|
82
|
+
/**
|
|
83
|
+
* Handle TimeRangeChangeEventHandler
|
|
84
|
+
* on event subscribeVisibleTimeRangeChange
|
|
85
|
+
* for create jump last button
|
|
86
|
+
* @returns {void}
|
|
87
|
+
*/
|
|
88
|
+
this.handleTimeRangeChange = () => {
|
|
89
|
+
let buttonVisible = false;
|
|
90
|
+
if (this.timeScale) {
|
|
91
|
+
buttonVisible = this.timeScale.scrollPosition() < 0;
|
|
92
|
+
}
|
|
93
|
+
this.jumpButtonContainer.style.display = buttonVisible ? 'block' : 'none';
|
|
94
|
+
// when update data in series then should always show last value
|
|
95
|
+
if (this.internalConfig.series.length === this.seriesList.length) {
|
|
96
|
+
// update legend only when chart already created
|
|
97
|
+
this.updateLegendWithLatestData();
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
/**
|
|
101
|
+
* Handle event clicked scroll to realtime
|
|
102
|
+
* @returns {void}
|
|
103
|
+
*/
|
|
104
|
+
this.handleScrollToRealTime = () => {
|
|
105
|
+
if (this.timeScale !== null) {
|
|
106
|
+
this.timeScale.scrollToRealTime();
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Element version number
|
|
112
|
+
* @returns version number
|
|
113
|
+
*/
|
|
114
|
+
static get version() {
|
|
115
|
+
return VERSION;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Set legend style i.e. `horizontal`, `vertical`.
|
|
119
|
+
* Default is `vertical`.
|
|
120
|
+
* @param {LegendStyle} value legend style value
|
|
121
|
+
* @type {"vertical" | "horizontal"} type of legend style
|
|
122
|
+
**/
|
|
123
|
+
set legendStyle(value) {
|
|
124
|
+
const oldValue = this.legendStyle;
|
|
125
|
+
if (oldValue !== value) {
|
|
126
|
+
this._legendStyle = value;
|
|
127
|
+
this.requestUpdate('legend-style', oldValue);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
get legendStyle() {
|
|
131
|
+
return this._legendStyle || this.deprecatedLegendStyle || LegendStyle.vertical;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* @returns return config of property component
|
|
135
|
+
*/
|
|
136
|
+
get internalConfig() {
|
|
137
|
+
// Check config is available
|
|
138
|
+
return this.config === null ? { series: [] } : this.config;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* On Updated Lifecycle
|
|
142
|
+
* @param changedProperties changed properties
|
|
143
|
+
* @returns {void}
|
|
144
|
+
*/
|
|
145
|
+
updated(changedProperties) {
|
|
146
|
+
super.updated(changedProperties);
|
|
147
|
+
if (changedProperties.has('config')) {
|
|
148
|
+
if (this.width && this.height && this.config) {
|
|
149
|
+
this.createChart(this.width, this.height, this.config);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (changedProperties.has('disabledLegend')) {
|
|
153
|
+
this.onLegendChange(this.disabledLegend);
|
|
154
|
+
}
|
|
155
|
+
if (changedProperties.has('disabledJumpButton')) {
|
|
156
|
+
this.onJumpButtonChange(this.disabledJumpButton);
|
|
157
|
+
}
|
|
158
|
+
if (changedProperties.has('deprecatedLegendStyle') || changedProperties.has('legend-style')) {
|
|
159
|
+
if (changedProperties.has('deprecatedLegendStyle')) {
|
|
160
|
+
this.deprecationNotice.show();
|
|
161
|
+
}
|
|
162
|
+
const oldLegendStyle = (changedProperties.get('legend-style') || changedProperties.get('deprecatedLegendStyle'));
|
|
163
|
+
this.onLegendStyleChange(this.legendStyle, oldLegendStyle);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Change chart size or re-create chart
|
|
168
|
+
* when window size changed
|
|
169
|
+
* @ignore
|
|
170
|
+
* @param size new size
|
|
171
|
+
* @returns {void}
|
|
172
|
+
*/
|
|
173
|
+
resizedCallback(size) {
|
|
174
|
+
super.resizedCallback(size);
|
|
175
|
+
this.width = size.width;
|
|
176
|
+
this.height = size.height;
|
|
177
|
+
if (this.chart) {
|
|
178
|
+
this.applyChartOptionSize(this.width, this.height);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
this.createChart(this.width, this.height, this.config);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Legend value observer
|
|
186
|
+
* @param value Legend value
|
|
187
|
+
* @returns {void}
|
|
188
|
+
*/
|
|
189
|
+
onLegendChange(value) {
|
|
190
|
+
if (!value) {
|
|
191
|
+
this.createLegend();
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
this.removeLegend();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Legend style observer
|
|
199
|
+
* @param value Legend style value
|
|
200
|
+
* @param previousValue Previous legend style value
|
|
201
|
+
* @returns {void}
|
|
202
|
+
*/
|
|
203
|
+
onLegendStyleChange(value, previousValue) {
|
|
204
|
+
if (value === 'horizontal') {
|
|
205
|
+
if (previousValue) {
|
|
206
|
+
this.legendContainer.classList.remove(previousValue);
|
|
207
|
+
}
|
|
208
|
+
this.legendContainer.classList.add(value);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
this.legendContainer.classList.remove(previousValue);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Jump last value observer
|
|
216
|
+
* @param value jump last value
|
|
217
|
+
* @returns {void}
|
|
218
|
+
*/
|
|
219
|
+
onJumpButtonChange(value) {
|
|
220
|
+
if (!value) {
|
|
221
|
+
this.createJumpButton(this.width, this.height);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
this.removeJumpButton();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* update width and height of chart
|
|
229
|
+
* @param width width of element
|
|
230
|
+
* @param height height of element
|
|
231
|
+
* @returns {void}
|
|
232
|
+
*/
|
|
233
|
+
applyChartOptionSize(width, height) {
|
|
234
|
+
if (this.chart) {
|
|
235
|
+
// Resize chart after rendered.
|
|
236
|
+
this.chart.applyOptions({
|
|
237
|
+
width: width,
|
|
238
|
+
height: height
|
|
239
|
+
});
|
|
240
|
+
// Render jump last button
|
|
241
|
+
if (!this.disabledJumpButton) {
|
|
242
|
+
this.createJumpButton(width, height);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Create chart from user config
|
|
248
|
+
* @param width Width component size
|
|
249
|
+
* @param height Height component size
|
|
250
|
+
* @param config data config
|
|
251
|
+
* @returns {void}
|
|
252
|
+
*/
|
|
253
|
+
createChart(width, height, config) {
|
|
254
|
+
this.destroyChart();
|
|
255
|
+
if (config && width && height) {
|
|
256
|
+
// init css variables
|
|
257
|
+
this.themeColors = this.colors();
|
|
258
|
+
this.theme = {
|
|
259
|
+
backgroundColor: this.getComputedVariable('--background-color'),
|
|
260
|
+
textColor: this.getComputedVariable('--text-color'),
|
|
261
|
+
scalePriceBorderColor: this.getComputedVariable('--scale-price-border-color'),
|
|
262
|
+
scaleTimesBorderColor: this.getComputedVariable('--scale-times-border-color'),
|
|
263
|
+
gridVertLineColor: this.getComputedVariable('--grid-vert-line-color'),
|
|
264
|
+
gridHorzLineColor: this.getComputedVariable('--grid-horz-line-color'),
|
|
265
|
+
crossHairColor: this.getComputedVariable('--cross-hair-color'),
|
|
266
|
+
chartUpColor: this.getComputedVariable('--chart-up-color'),
|
|
267
|
+
chartDownColor: this.getComputedVariable('--chart-down-color'),
|
|
268
|
+
fillOpacity: this.cssVarAsNumber('--fill-opacity', InteractiveChart_1.DEFAULT_FILL_OPACITY),
|
|
269
|
+
lineWidth: this.cssVarAsNumber('--line-width', InteractiveChart_1.DEFAULT_LINE_WIDTH)
|
|
270
|
+
};
|
|
271
|
+
this.chart = chart(this.chartContainer);
|
|
272
|
+
this.mergeConfig(config);
|
|
273
|
+
this.applyChartOptionSize(width, height);
|
|
274
|
+
if (!this.disabledLegend) {
|
|
275
|
+
this.createLegend();
|
|
276
|
+
}
|
|
277
|
+
if (this.legendStyle === 'horizontal') {
|
|
278
|
+
this.legendContainer.classList.add(this.legendStyle);
|
|
279
|
+
}
|
|
280
|
+
this.chart.timeScale().fitContent();
|
|
281
|
+
/*
|
|
282
|
+
* Fired when chart initialized
|
|
283
|
+
*/
|
|
284
|
+
this.dispatchEvent(new CustomEvent('initialized'));
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Destroy chart
|
|
289
|
+
* @returns {void}
|
|
290
|
+
*/
|
|
291
|
+
destroyChart() {
|
|
292
|
+
if (this.chart) {
|
|
293
|
+
this.removeLegend();
|
|
294
|
+
this.removeJumpButton();
|
|
295
|
+
this.destroySeries();
|
|
296
|
+
this.chartContainer.textContent = '';
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Remove jump button
|
|
301
|
+
* @returns {void}
|
|
302
|
+
*/
|
|
303
|
+
removeJumpButton() {
|
|
304
|
+
if (this.chart) {
|
|
305
|
+
this.jumpButtonContainer.style.display = 'none';
|
|
306
|
+
this.chart.timeScale().unsubscribeVisibleTimeRangeChange(this.handleTimeRangeChange);
|
|
307
|
+
this.jumpButtonContainer.removeEventListener('tap', this.handleScrollToRealTime);
|
|
308
|
+
this.jumpButtonInitialized = false;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Remove legend element
|
|
313
|
+
* @returns {void}
|
|
314
|
+
*/
|
|
315
|
+
removeLegend() {
|
|
316
|
+
if (this.chart) {
|
|
317
|
+
this.legendContainer.textContent = '';
|
|
318
|
+
this.chart.unsubscribeCrosshairMove(this.handleCrosshairMoved);
|
|
319
|
+
this.legendInitialized = false;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Customize config and create chart by theme
|
|
324
|
+
* @param config data configuration for create chart
|
|
325
|
+
* @returns {void}
|
|
326
|
+
*/
|
|
327
|
+
mergeConfig(config) {
|
|
328
|
+
if (config && config.hasOwnProperty('series')) {
|
|
329
|
+
this.createSeriesOptions();
|
|
330
|
+
this.createSeries();
|
|
331
|
+
}
|
|
332
|
+
this.applyTheme(config);
|
|
333
|
+
this.applyLegendTextColor();
|
|
334
|
+
this.applyStylesBranding();
|
|
335
|
+
this.applyStyleLegend();
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Create series
|
|
339
|
+
* @returns {void}
|
|
340
|
+
*/
|
|
341
|
+
createSeries() {
|
|
342
|
+
// Loop for add multiple series
|
|
343
|
+
for (let index = 0; index < this.internalConfig.series.length; index++) {
|
|
344
|
+
const config = this.internalConfig.series[index];
|
|
345
|
+
const series = this.addSeriesConfig(config);
|
|
346
|
+
this.seriesList.push(series);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Destroy Series
|
|
351
|
+
* @returns {void}
|
|
352
|
+
*/
|
|
353
|
+
destroySeries() {
|
|
354
|
+
if (this.chart && this.seriesList && this.seriesList.length > 0) {
|
|
355
|
+
for (let i = 0; i < this.seriesList.length; i++) {
|
|
356
|
+
this.chart.removeSeries(this.seriesList[i]);
|
|
357
|
+
}
|
|
358
|
+
this.seriesList = [];
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Add series to chart from config
|
|
363
|
+
* @param config data configuration for add series
|
|
364
|
+
* @returns series data
|
|
365
|
+
*/
|
|
366
|
+
addSeriesConfig(config) {
|
|
367
|
+
let series = null;
|
|
368
|
+
if (this.chart) {
|
|
369
|
+
const { type, data, seriesOptions } = config;
|
|
370
|
+
// Create instance series
|
|
371
|
+
if (type === 'line') {
|
|
372
|
+
series = this.chart.addLineSeries(seriesOptions);
|
|
373
|
+
}
|
|
374
|
+
else if (type === 'area') {
|
|
375
|
+
series = this.chart.addAreaSeries(seriesOptions);
|
|
376
|
+
}
|
|
377
|
+
else if (type === 'bar') {
|
|
378
|
+
series = this.chart.addBarSeries(seriesOptions);
|
|
379
|
+
}
|
|
380
|
+
else if (type === 'candlestick') {
|
|
381
|
+
series = this.chart.addCandlestickSeries(seriesOptions);
|
|
382
|
+
}
|
|
383
|
+
else if (type === 'volume') {
|
|
384
|
+
series = this.chart.addHistogramSeries(seriesOptions);
|
|
385
|
+
}
|
|
386
|
+
if (data && series) {
|
|
387
|
+
series.setData(data);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return series;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Convert color to string
|
|
394
|
+
* @param fn function for parse color
|
|
395
|
+
* @param param value color
|
|
396
|
+
* @returns color parse
|
|
397
|
+
*/
|
|
398
|
+
convertColorToString(fn, param, ...args) {
|
|
399
|
+
let color = null;
|
|
400
|
+
if (param) {
|
|
401
|
+
color = fn(param, ...args);
|
|
402
|
+
if (color) {
|
|
403
|
+
color = color.toString();
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
color = {};
|
|
408
|
+
}
|
|
409
|
+
return color || {};
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Create data configuration from theme
|
|
413
|
+
* @returns {void}
|
|
414
|
+
*/
|
|
415
|
+
createSeriesOptions() {
|
|
416
|
+
if (this.theme) {
|
|
417
|
+
let colorIndex = 0;
|
|
418
|
+
for (let index = 0; index < this.internalConfig.series.length; index++) {
|
|
419
|
+
// Get seriesOptions and type
|
|
420
|
+
const seriesOptions = this.internalConfig.series[index].seriesOptions || {};
|
|
421
|
+
const type = this.internalConfig.series[index].type;
|
|
422
|
+
let seriesThemeOptions = {};
|
|
423
|
+
const colorCycle = this.convertColorToString(parseColor, this.themeColors[colorIndex]);
|
|
424
|
+
if (type === 'line') {
|
|
425
|
+
seriesThemeOptions = {
|
|
426
|
+
lineWidth: this.theme.lineWidth,
|
|
427
|
+
color: colorCycle
|
|
428
|
+
};
|
|
429
|
+
// Update color index
|
|
430
|
+
if (!seriesOptions.color) {
|
|
431
|
+
colorIndex++;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
else if (type === 'area') {
|
|
435
|
+
seriesThemeOptions = {
|
|
436
|
+
lineWidth: this.theme.lineWidth,
|
|
437
|
+
lineColor: this.convertColorToString(parseColor, this.themeColors[colorIndex]),
|
|
438
|
+
topColor: this.convertColorToString(this.setOpacity, this.themeColors[colorIndex], this.theme.fillOpacity),
|
|
439
|
+
bottomColor: this.convertColorToString(this.setOpacity, this.themeColors[colorIndex], '0')
|
|
440
|
+
};
|
|
441
|
+
// Update color index
|
|
442
|
+
if (!seriesOptions.lineColor || !seriesOptions.topColor || !seriesOptions.bottomColor) {
|
|
443
|
+
colorIndex++;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
else if (type === 'bar') {
|
|
447
|
+
seriesThemeOptions = {
|
|
448
|
+
upColor: colorCycle,
|
|
449
|
+
downColor: colorCycle
|
|
450
|
+
};
|
|
451
|
+
// Update color index
|
|
452
|
+
if (!seriesOptions.upColor || !seriesOptions.downColor) {
|
|
453
|
+
colorIndex++;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
else if (type === 'candlestick') {
|
|
457
|
+
seriesThemeOptions = {
|
|
458
|
+
upColor: this.theme.chartUpColor,
|
|
459
|
+
downColor: this.theme.chartDownColor,
|
|
460
|
+
borderUpColor: this.theme.chartUpColor,
|
|
461
|
+
borderDownColor: this.theme.chartDownColor,
|
|
462
|
+
wickUpColor: this.theme.chartUpColor,
|
|
463
|
+
wickDownColor: this.theme.chartDownColor
|
|
464
|
+
};
|
|
465
|
+
// Update color index
|
|
466
|
+
if (!seriesOptions.upColor
|
|
467
|
+
|| !seriesOptions.downColor
|
|
468
|
+
|| !seriesOptions.borderUpColor
|
|
469
|
+
|| !seriesOptions.borderDownColor
|
|
470
|
+
|| !seriesOptions.wickUpColor
|
|
471
|
+
|| !seriesOptions.wickDownColor) {
|
|
472
|
+
colorIndex++;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
else if (type === 'volume') {
|
|
476
|
+
seriesThemeOptions = {
|
|
477
|
+
color: colorCycle
|
|
478
|
+
};
|
|
479
|
+
// Update color index
|
|
480
|
+
if (!seriesOptions.color) {
|
|
481
|
+
colorIndex++;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
// Update config seriesOptions not have seriesOptions
|
|
485
|
+
if (!this.internalConfig.series[index].seriesOptions) {
|
|
486
|
+
this.internalConfig.series[index].seriesOptions = seriesThemeOptions;
|
|
487
|
+
}
|
|
488
|
+
else {
|
|
489
|
+
merge(seriesOptions, seriesThemeOptions);
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Apply Theme to chart
|
|
496
|
+
* @param config value config
|
|
497
|
+
* @returns {void}
|
|
498
|
+
*/
|
|
499
|
+
applyTheme(config) {
|
|
500
|
+
if (this.chart && this.theme) {
|
|
501
|
+
const style = getComputedStyle(this);
|
|
502
|
+
const defaultFontFamily = style.getPropertyValue('font-family');
|
|
503
|
+
// Create object has a property object before comparing config the theme
|
|
504
|
+
const chartOptions = config.options || {};
|
|
505
|
+
// Create object same as the theme
|
|
506
|
+
const chartThemeOptions = {
|
|
507
|
+
layout: {
|
|
508
|
+
backgroundColor: this.theme.backgroundColor,
|
|
509
|
+
textColor: this.theme.textColor,
|
|
510
|
+
fontFamily: defaultFontFamily
|
|
511
|
+
},
|
|
512
|
+
priceScale: {
|
|
513
|
+
borderColor: this.theme.scalePriceBorderColor
|
|
514
|
+
},
|
|
515
|
+
timeScale: {
|
|
516
|
+
borderColor: this.theme.scaleTimesBorderColor,
|
|
517
|
+
rightOffset: 1
|
|
518
|
+
},
|
|
519
|
+
grid: {
|
|
520
|
+
vertLines: {
|
|
521
|
+
color: this.theme.gridVertLineColor,
|
|
522
|
+
style: InteractiveChart_1.LINE_STYLES.SOLID
|
|
523
|
+
},
|
|
524
|
+
horzLines: {
|
|
525
|
+
color: this.theme.gridHorzLineColor,
|
|
526
|
+
style: InteractiveChart_1.LINE_STYLES.SOLID
|
|
527
|
+
}
|
|
528
|
+
},
|
|
529
|
+
crosshair: {
|
|
530
|
+
vertLine: {
|
|
531
|
+
color: this.theme.crossHairColor
|
|
532
|
+
},
|
|
533
|
+
horzLine: {
|
|
534
|
+
color: this.theme.crossHairColor
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
};
|
|
538
|
+
merge(chartOptions, chartThemeOptions);
|
|
539
|
+
if (!config.options) {
|
|
540
|
+
this.chart.applyOptions(chartThemeOptions);
|
|
541
|
+
}
|
|
542
|
+
else {
|
|
543
|
+
// Apply config when has option for custom
|
|
544
|
+
this.applyLegendTextColor();
|
|
545
|
+
this.chart.applyOptions(config.options);
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
/**
|
|
550
|
+
* Apply text color legend from chart options
|
|
551
|
+
* @returns {void}
|
|
552
|
+
*/
|
|
553
|
+
applyLegendTextColor() {
|
|
554
|
+
if (this.chart) {
|
|
555
|
+
const options = this.chart.options();
|
|
556
|
+
if (options && options.hasOwnProperty('layout') && options.layout.hasOwnProperty('textColor')) {
|
|
557
|
+
this.legendContainer.style.color = options.layout.textColor;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
/**
|
|
562
|
+
* Get position config for set position legend
|
|
563
|
+
* @returns {void}
|
|
564
|
+
*/
|
|
565
|
+
applyStyleLegend() {
|
|
566
|
+
if (this.chart) {
|
|
567
|
+
// Get position config for set position legend
|
|
568
|
+
const position = this.getPriceScalePosition();
|
|
569
|
+
if (position === 'left' || position === 'two-price') {
|
|
570
|
+
this.legendContainer.className = 'yaxis-left';
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
this.legendContainer.className = 'yaxis-right';
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
/**
|
|
578
|
+
* Get position config for set position logo trading view on chart
|
|
579
|
+
* @returns {void}
|
|
580
|
+
*/
|
|
581
|
+
applyStylesBranding() {
|
|
582
|
+
if (this.chart) {
|
|
583
|
+
const position = this.getPriceScalePosition();
|
|
584
|
+
this.brandingContainer.className = position === 'two-price' ? 'right' : position;
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
/**
|
|
588
|
+
* Get price scale position
|
|
589
|
+
* @return position
|
|
590
|
+
*/
|
|
591
|
+
getPriceScalePosition() {
|
|
592
|
+
var _a;
|
|
593
|
+
const priceScale = (_a = this.chart) === null || _a === void 0 ? void 0 : _a.options();
|
|
594
|
+
if (priceScale.leftPriceScale.visible && priceScale.rightPriceScale.visible) {
|
|
595
|
+
return 'two-price';
|
|
596
|
+
}
|
|
597
|
+
else if (priceScale.leftPriceScale.visible) {
|
|
598
|
+
return 'left';
|
|
599
|
+
}
|
|
600
|
+
else if (priceScale.rightPriceScale.visible) {
|
|
601
|
+
return 'right';
|
|
602
|
+
}
|
|
603
|
+
else {
|
|
604
|
+
return 'none';
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Create legend element
|
|
609
|
+
* @returns {void}
|
|
610
|
+
*/
|
|
611
|
+
createLegend() {
|
|
612
|
+
if (this.chart && !this.legendInitialized && this.internalConfig.hasOwnProperty('series')) {
|
|
613
|
+
this.createRowLegend();
|
|
614
|
+
if (this.shadowRoot) {
|
|
615
|
+
this.rowLegend = this.shadowRoot.querySelectorAll('.row');
|
|
616
|
+
}
|
|
617
|
+
this.chart.subscribeCrosshairMove(this.handleCrosshairMoved);
|
|
618
|
+
this.legendInitialized = true;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* Create legend element or update value in legend element
|
|
623
|
+
* @param rowLegend Legend element
|
|
624
|
+
* @param eventMove Event mouse move on chart
|
|
625
|
+
* @return {void}
|
|
626
|
+
*/
|
|
627
|
+
createRowLegend(rowLegend, eventMove) {
|
|
628
|
+
let rowLegendElem;
|
|
629
|
+
for (let idx = 0; idx < this.internalConfig.series.length; idx++) {
|
|
630
|
+
const chartType = this.internalConfig.series[idx].type;
|
|
631
|
+
const dataSet = this.internalConfig.series[idx].data || [];
|
|
632
|
+
const symbol = (this.internalConfig.series[idx].symbolName || this.internalConfig.series[idx].symbol) || '';
|
|
633
|
+
// Create row legend element
|
|
634
|
+
if (!rowLegend) {
|
|
635
|
+
rowLegendElem = document.createElement('div');
|
|
636
|
+
rowLegendElem.setAttribute('class', 'row');
|
|
637
|
+
this.createTextSymbol(rowLegendElem, symbol);
|
|
638
|
+
if (dataSet.length) {
|
|
639
|
+
this.hasDataPoint = true;
|
|
640
|
+
const lastData = dataSet[dataSet.length - 1];
|
|
641
|
+
const priceColor = this.getColorInSeries(lastData, chartType, idx);
|
|
642
|
+
const lastDataValue = chartType === 'bar' || chartType === 'candlestick' ? lastData : lastData.value;
|
|
643
|
+
this.renderTextLegend(chartType, rowLegendElem, lastDataValue, priceColor, idx);
|
|
644
|
+
}
|
|
645
|
+
else {
|
|
646
|
+
const span = document.createElement('span');
|
|
647
|
+
span.className = 'price';
|
|
648
|
+
span.textContent = NOT_AVAILABLE_DATA;
|
|
649
|
+
rowLegendElem.appendChild(span);
|
|
650
|
+
}
|
|
651
|
+
this.legendContainer.appendChild(rowLegendElem);
|
|
652
|
+
}
|
|
653
|
+
/* Update value legend element on subscribeCrosshairMove.
|
|
654
|
+
* Don't need to be updated if chart has no data.
|
|
655
|
+
*/
|
|
656
|
+
/* istanbul ignore next */
|
|
657
|
+
else if (rowLegend && dataSet.length) {
|
|
658
|
+
let value;
|
|
659
|
+
let priceColor = '';
|
|
660
|
+
// When have price on event moved on the crosshair
|
|
661
|
+
if ((eventMove === null || eventMove === void 0 ? void 0 : eventMove.seriesPrices.get(this.seriesList[idx])) && eventMove.time) {
|
|
662
|
+
value = eventMove.seriesPrices.get(this.seriesList[idx]);
|
|
663
|
+
priceColor = this.getColorInSeries(eventMove, chartType, idx);
|
|
664
|
+
this.isCrosshairVisible = true;
|
|
665
|
+
this.hasDataPoint = true;
|
|
666
|
+
}
|
|
667
|
+
// when there's no data point in the series object.
|
|
668
|
+
else if (!(eventMove === null || eventMove === void 0 ? void 0 : eventMove.seriesPrices.get(this.seriesList[idx])) && (eventMove === null || eventMove === void 0 ? void 0 : eventMove.time)) {
|
|
669
|
+
value = NO_DATA_POINT;
|
|
670
|
+
this.isCrosshairVisible = true;
|
|
671
|
+
this.hasDataPoint = false;
|
|
672
|
+
}
|
|
673
|
+
// Get latest value when mouse move out of scope
|
|
674
|
+
else {
|
|
675
|
+
const latestData = dataSet[dataSet.length - 1];
|
|
676
|
+
if (latestData) {
|
|
677
|
+
priceColor = this.getColorInSeries(latestData, chartType, idx);
|
|
678
|
+
value = chartType === 'bar' || chartType === 'candlestick' ? latestData : latestData.value;
|
|
679
|
+
this.isCrosshairVisible = false;
|
|
680
|
+
this.hasDataPoint = true;
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
// Render legend by series type
|
|
684
|
+
this.renderTextLegend(chartType, rowLegend, value, priceColor, idx);
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
}
|
|
688
|
+
/**
|
|
689
|
+
* Render text legend in row legend
|
|
690
|
+
* @param chartType chart type of series
|
|
691
|
+
* @param rowLegendElem row legend div element
|
|
692
|
+
* @param value value of series
|
|
693
|
+
* @param priceColor price color of series
|
|
694
|
+
* @param index index of series
|
|
695
|
+
* @returns {void}
|
|
696
|
+
*/
|
|
697
|
+
renderTextLegend(chartType, rowLegendElem, value, priceColor, index) {
|
|
698
|
+
if (chartType === 'bar' || chartType === 'candlestick') {
|
|
699
|
+
if (!this.hasDataPoint && this.isNodeListElement(rowLegendElem)) {
|
|
700
|
+
const spanElem = rowLegendElem[index].querySelectorAll('span.price,span.ohlc');
|
|
701
|
+
spanElem.forEach(span => rowLegendElem[index].removeChild(span));
|
|
702
|
+
const span = document.createElement('span');
|
|
703
|
+
span.className = 'price';
|
|
704
|
+
span.textContent = value;
|
|
705
|
+
rowLegendElem[index].appendChild(span);
|
|
706
|
+
}
|
|
707
|
+
else {
|
|
708
|
+
this.createTextOHLC(rowLegendElem, value, priceColor, index);
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
else {
|
|
712
|
+
this.createTextPrice(rowLegendElem, value, priceColor, index);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Check `node` inside row legend and case type to HTMLElement
|
|
717
|
+
* @param rowLegend Legend element
|
|
718
|
+
* @returns true if not have `node` inside row legend
|
|
719
|
+
*/
|
|
720
|
+
isHTMLElement(rowLegend) {
|
|
721
|
+
return rowLegend.length === undefined;
|
|
722
|
+
}
|
|
723
|
+
/**
|
|
724
|
+
* Check `node` inside row legend and case type to NodeListOf<Element>
|
|
725
|
+
* @param rowLegend Legend element
|
|
726
|
+
* @returns true if have `node` inside row legend
|
|
727
|
+
*/
|
|
728
|
+
isNodeListElement(rowLegend) {
|
|
729
|
+
return rowLegend !== undefined;
|
|
730
|
+
}
|
|
731
|
+
/**
|
|
732
|
+
* Create span OHLC in row legend used by several series types such as bars or candlesticks
|
|
733
|
+
* @param rowLegend Legend element
|
|
734
|
+
* @param rowData Value of series
|
|
735
|
+
* @param priceColor Color of series
|
|
736
|
+
* @returns {void}
|
|
737
|
+
*/
|
|
738
|
+
createSpanOHLC(rowLegend, rowData, priceColor) {
|
|
739
|
+
if (this.isHTMLElement(rowLegend)) {
|
|
740
|
+
rowLegend.setAttribute('data-color', priceColor);
|
|
741
|
+
this.createSpan(rowLegend, 'O', rowData.open, 'H', rowData.high, 'L', rowData.low, 'C', rowData.close);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
/**
|
|
745
|
+
* Create text used by several series types such as bars or candlesticks
|
|
746
|
+
* @param rowLegend Legend element
|
|
747
|
+
* @param rowData Value of series
|
|
748
|
+
* @param priceColor color of series
|
|
749
|
+
* @param index Series index
|
|
750
|
+
* @returns {void}
|
|
751
|
+
*/
|
|
752
|
+
createTextOHLC(rowLegend, rowData, priceColor, index) {
|
|
753
|
+
// Uses price formatter if provided
|
|
754
|
+
const formatter = this.internalConfig.series[index].hasOwnProperty('legendPriceFormatter') ? this.internalConfig.series[index].legendPriceFormatter : null;
|
|
755
|
+
if (formatter) {
|
|
756
|
+
rowData = {
|
|
757
|
+
open: formatter(rowData.open),
|
|
758
|
+
high: formatter(rowData.high),
|
|
759
|
+
low: formatter(rowData.low),
|
|
760
|
+
close: formatter(rowData.close)
|
|
761
|
+
};
|
|
762
|
+
}
|
|
763
|
+
// Create text price after chart has rendered
|
|
764
|
+
if (this.isHTMLElement(rowLegend)) {
|
|
765
|
+
this.createSpanOHLC(rowLegend, rowData, priceColor);
|
|
766
|
+
}
|
|
767
|
+
// Handle update text price when mouse crosshairMove in chart
|
|
768
|
+
else if (this.isNodeListElement(rowLegend)) {
|
|
769
|
+
const rowSpanLength = rowLegend[index].children.length;
|
|
770
|
+
let countElmPrice = 0;
|
|
771
|
+
for (let spanIndex = 0; spanIndex < rowSpanLength; spanIndex++) {
|
|
772
|
+
const spanElem = rowLegend[index].children[spanIndex];
|
|
773
|
+
/**
|
|
774
|
+
* Create a new span OHLC after displaying (--) or (N/A)
|
|
775
|
+
*/
|
|
776
|
+
if (spanElem.textContent === NOT_AVAILABLE_DATA || spanElem.textContent === NO_DATA_POINT) {
|
|
777
|
+
rowLegend[index].removeChild(spanElem);
|
|
778
|
+
this.createSpanOHLC(rowLegend[index], rowData, priceColor);
|
|
779
|
+
}
|
|
780
|
+
else if (spanElem.getAttribute('class') === 'price') {
|
|
781
|
+
// Set price color
|
|
782
|
+
spanElem.style.color = priceColor;
|
|
783
|
+
// Set value OHLC BY price
|
|
784
|
+
if (countElmPrice === 0) {
|
|
785
|
+
spanElem.textContent = `${rowData.open}`;
|
|
786
|
+
}
|
|
787
|
+
else if (countElmPrice === 1) {
|
|
788
|
+
spanElem.textContent = `${rowData.high}`;
|
|
789
|
+
}
|
|
790
|
+
else if (countElmPrice === 2) {
|
|
791
|
+
spanElem.textContent = `${rowData.low}`;
|
|
792
|
+
}
|
|
793
|
+
else if (countElmPrice === 3) {
|
|
794
|
+
spanElem.textContent = `${rowData.close}`;
|
|
795
|
+
}
|
|
796
|
+
// Update next span by price
|
|
797
|
+
countElmPrice++;
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
/**
|
|
803
|
+
* Create text price used by several series types
|
|
804
|
+
* @param rowLegend Legend element
|
|
805
|
+
* @param price Value of series
|
|
806
|
+
* @param priceColor color of series
|
|
807
|
+
* @param index Series index
|
|
808
|
+
* @returns {void}
|
|
809
|
+
*/
|
|
810
|
+
createTextPrice(rowLegend, price, priceColor, index) {
|
|
811
|
+
var _a;
|
|
812
|
+
const formatter = this.internalConfig.series[index].legendPriceFormatter;
|
|
813
|
+
// Formats legend only when formatter and data point are provided
|
|
814
|
+
const formattedPrice = !!formatter && price !== NO_DATA_POINT ? formatter(price) : price;
|
|
815
|
+
// Create text price after chart has rendered
|
|
816
|
+
if (this.isHTMLElement(rowLegend)) {
|
|
817
|
+
rowLegend.setAttribute('data-color', priceColor);
|
|
818
|
+
this.createSpan(rowLegend, formattedPrice);
|
|
819
|
+
}
|
|
820
|
+
// Handle update text price when mouse crosshairMove in chart
|
|
821
|
+
else if (this.isNodeListElement(rowLegend)) {
|
|
822
|
+
const symbolElem = rowLegend[index].children[0];
|
|
823
|
+
const spanIndex = ((_a = symbolElem.getAttribute('class')) === null || _a === void 0 ? void 0 : _a.indexOf('symbol')) === 0 ? 1 : 0;
|
|
824
|
+
const rowLegendElem = rowLegend[index];
|
|
825
|
+
rowLegendElem.children[spanIndex].textContent = `${formattedPrice}`;
|
|
826
|
+
rowLegendElem.children[spanIndex].style.color = `${priceColor}`;
|
|
827
|
+
}
|
|
828
|
+
}
|
|
829
|
+
/**
|
|
830
|
+
* Create span in legend element by several series types
|
|
831
|
+
* @param rowLegend Legend element
|
|
832
|
+
* @param args text value
|
|
833
|
+
* @returns {void}
|
|
834
|
+
*/
|
|
835
|
+
createSpan(rowLegend, ...args) {
|
|
836
|
+
const div = rowLegend; // rowLegend
|
|
837
|
+
const arg = args;
|
|
838
|
+
const len = args.length;
|
|
839
|
+
const color = div.getAttribute('data-color');
|
|
840
|
+
for (let idx = 0; idx < len; idx++) {
|
|
841
|
+
const span = document.createElement('span');
|
|
842
|
+
const textContent = `${arg[idx]}`;
|
|
843
|
+
span.textContent = textContent;
|
|
844
|
+
// Set class by Text O H L C
|
|
845
|
+
if (['O', 'H', 'L', 'C'].includes(textContent)) {
|
|
846
|
+
span.setAttribute('class', 'ohlc');
|
|
847
|
+
}
|
|
848
|
+
else {
|
|
849
|
+
span.setAttribute('class', 'price');
|
|
850
|
+
span.style.color = color;
|
|
851
|
+
}
|
|
852
|
+
div.appendChild(span);
|
|
853
|
+
}
|
|
854
|
+
}
|
|
855
|
+
/**
|
|
856
|
+
* Create span in legend element by several series types
|
|
857
|
+
* @param rowLegend Legend element
|
|
858
|
+
* @param symbol Value naming for show
|
|
859
|
+
* @returns {void}
|
|
860
|
+
*/
|
|
861
|
+
createTextSymbol(rowLegend, symbol) {
|
|
862
|
+
if (rowLegend.children && symbol) {
|
|
863
|
+
const symbolElem = document.createElement('span');
|
|
864
|
+
symbolElem.setAttribute('class', 'symbol');
|
|
865
|
+
symbolElem.textContent = symbol + ' : ';
|
|
866
|
+
rowLegend.appendChild(symbolElem);
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
/**
|
|
870
|
+
* Get legend price color
|
|
871
|
+
* @param color color code
|
|
872
|
+
* @returns rgba or hex color
|
|
873
|
+
*/
|
|
874
|
+
getLegendPriceColor(color) {
|
|
875
|
+
// check color is does not blend with the background
|
|
876
|
+
if (color === 'rgba(0,0,0,0)' || color === 'transparent') {
|
|
877
|
+
return this.getComputedVariable('--text-color');
|
|
878
|
+
}
|
|
879
|
+
return color;
|
|
880
|
+
}
|
|
881
|
+
/**
|
|
882
|
+
* Get Color in series
|
|
883
|
+
* @param seriesData series data or event mouse move on chart
|
|
884
|
+
* @param chartType type of chart
|
|
885
|
+
* @param index index of list series
|
|
886
|
+
* @returns color value
|
|
887
|
+
*/
|
|
888
|
+
getColorInSeries(seriesData, chartType, index) {
|
|
889
|
+
var _a;
|
|
890
|
+
if (chartType === 'line') {
|
|
891
|
+
return this.getLegendPriceColor(this.seriesList[index].options().color);
|
|
892
|
+
}
|
|
893
|
+
else if (chartType === 'candlestick') {
|
|
894
|
+
const value = seriesData.hasOwnProperty('seriesPrices') ? (_a = seriesData) === null || _a === void 0 ? void 0 : _a.seriesPrices.get(this.seriesList[index]) : seriesData;
|
|
895
|
+
const barStyle = this.seriesList[index].options();
|
|
896
|
+
const colorBar = value.close > value.open ? barStyle.borderUpColor : barStyle.borderDownColor;
|
|
897
|
+
return colorBar;
|
|
898
|
+
}
|
|
899
|
+
else if (chartType === 'bar') {
|
|
900
|
+
return this.getLegendPriceColor(this.seriesList[index].options().upColor);
|
|
901
|
+
}
|
|
902
|
+
else if (chartType === 'area') {
|
|
903
|
+
return this.getLegendPriceColor(this.seriesList[index].options().lineColor);
|
|
904
|
+
}
|
|
905
|
+
else if (chartType === 'volume') {
|
|
906
|
+
const priceValue = seriesData.hasOwnProperty('seriesPrices') ? seriesData.seriesPrices.get(this.seriesList[index]) : seriesData.value;
|
|
907
|
+
let dataItem = {};
|
|
908
|
+
this.internalConfig.series[index].data.forEach((dataConfig) => {
|
|
909
|
+
const data = dataConfig;
|
|
910
|
+
const time = data.time;
|
|
911
|
+
const timeSeriesData = seriesData.time;
|
|
912
|
+
// if via time point data string format 'yyyy-mm-dd' or object '{ year: 2019, month: 6, day: 1 }'
|
|
913
|
+
if (time.hasOwnProperty('day') && time.hasOwnProperty('month') && time.hasOwnProperty('year')) {
|
|
914
|
+
if (time.day === timeSeriesData.day
|
|
915
|
+
&& time.month === timeSeriesData.month
|
|
916
|
+
&& time.year === timeSeriesData.year
|
|
917
|
+
&& data.value === priceValue) {
|
|
918
|
+
dataItem = dataConfig;
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
// if via config time uses a UNIX Timestamp format for time point data.
|
|
922
|
+
else if (time === seriesData.time) {
|
|
923
|
+
dataItem = data;
|
|
924
|
+
}
|
|
925
|
+
});
|
|
926
|
+
// check when each color is added, the item comes from the configuration
|
|
927
|
+
if (dataItem.hasOwnProperty('color')) {
|
|
928
|
+
const data = dataItem;
|
|
929
|
+
return this.getLegendPriceColor(data.color);
|
|
930
|
+
}
|
|
931
|
+
else {
|
|
932
|
+
return this.getLegendPriceColor(this.seriesList[index].options().color);
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
return '';
|
|
936
|
+
}
|
|
937
|
+
/**
|
|
938
|
+
* Create button that will make window scroll to the last data
|
|
939
|
+
* in the chart when clicked
|
|
940
|
+
* @param width Width component size
|
|
941
|
+
* @param height Hight component size
|
|
942
|
+
* @returns {void}
|
|
943
|
+
*/
|
|
944
|
+
createJumpButton(width, height) {
|
|
945
|
+
if (this.chart && this.jumpButtonContainer) {
|
|
946
|
+
this.timeScale = this.chart.timeScale();
|
|
947
|
+
// Get position config for set position jump last button
|
|
948
|
+
const position = this.getPriceScalePosition();
|
|
949
|
+
const pricePosition = position === 'left' ? 30 : 0;
|
|
950
|
+
const buttonTop = `${height - 70}px`;
|
|
951
|
+
const buttonLeft = `${(width + pricePosition) - 100}px`;
|
|
952
|
+
this.jumpButtonContainer.style.top = buttonTop;
|
|
953
|
+
this.jumpButtonContainer.style.left = buttonLeft;
|
|
954
|
+
// Create subscribeVisibleTimeRangeChange
|
|
955
|
+
if (!this.jumpButtonInitialized) {
|
|
956
|
+
this.chart.timeScale().subscribeVisibleTimeRangeChange(this.handleTimeRangeChange);
|
|
957
|
+
this.jumpButtonContainer.addEventListener('tap', this.handleScrollToRealTime);
|
|
958
|
+
this.jumpButtonInitialized = true;
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
}
|
|
962
|
+
/**
|
|
963
|
+
* Update Legend with latest data on update data in series
|
|
964
|
+
* @returns {void}
|
|
965
|
+
*/
|
|
966
|
+
updateLegendWithLatestData() {
|
|
967
|
+
var _a;
|
|
968
|
+
if (this.rowLegend && !this.isCrosshairVisible && ((_a = this.config) === null || _a === void 0 ? void 0 : _a.hasOwnProperty('series'))) {
|
|
969
|
+
for (let idx = 0; idx < this.internalConfig.series.length; idx++) {
|
|
970
|
+
const chartType = this.internalConfig.series[idx].type;
|
|
971
|
+
const series = this.internalConfig.series[idx];
|
|
972
|
+
const dataSet = series.data || [];
|
|
973
|
+
const latestData = dataSet[dataSet.length - 1];
|
|
974
|
+
if (latestData) {
|
|
975
|
+
const value = chartType === 'bar' || chartType === 'candlestick' ? latestData : latestData.value; // latestData
|
|
976
|
+
const priceColor = this.getColorInSeries(latestData, chartType, idx);
|
|
977
|
+
// Render legend by series type
|
|
978
|
+
this.renderTextLegend(chartType, this.rowLegend, value, priceColor, idx);
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
/**
|
|
984
|
+
* Get as CSS variable and tries to convert it into a usable number
|
|
985
|
+
* @param args param css variable
|
|
986
|
+
* @returns The value as a number, or, undefined if NaN.
|
|
987
|
+
*/
|
|
988
|
+
cssVarAsNumber(...args) {
|
|
989
|
+
args[args.length] = '';
|
|
990
|
+
const cssComputeVar = this.getComputedVariable(...args);
|
|
991
|
+
const result = parseFloat(cssComputeVar.replace(/\D+$/, ''));
|
|
992
|
+
return cssComputeVar && !isNaN(result) ? result : undefined;
|
|
993
|
+
}
|
|
994
|
+
/**
|
|
995
|
+
* List of available chart colors from the theme.
|
|
996
|
+
* @returns list of available chart colors from the theme.
|
|
997
|
+
*/
|
|
998
|
+
colors() {
|
|
999
|
+
let color;
|
|
1000
|
+
let index = 0;
|
|
1001
|
+
const colors = [];
|
|
1002
|
+
while ((color = this.getComputedVariable(`${InteractiveChart_1.CSS_COLOR_PREFIX}${(index += 1)}`))) {
|
|
1003
|
+
const parseColorCode = parseColor(color);
|
|
1004
|
+
if (parseColorCode !== null) {
|
|
1005
|
+
colors.push(parseColorCode.toString());
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
return colors;
|
|
1009
|
+
}
|
|
1010
|
+
/**
|
|
1011
|
+
* A `CSSResultGroup` that will be used
|
|
1012
|
+
* to style the host, slotted children
|
|
1013
|
+
* and the internal template of the element.
|
|
1014
|
+
* @return CSS template
|
|
1015
|
+
*/
|
|
1016
|
+
static get styles() {
|
|
1017
|
+
return css `
|
|
1018
|
+
:host {
|
|
1019
|
+
display: block;
|
|
1020
|
+
position: relative;
|
|
1021
|
+
height: 300px;
|
|
1022
|
+
z-index: 0;
|
|
1023
|
+
}
|
|
1024
|
+
`;
|
|
1025
|
+
}
|
|
1026
|
+
/**
|
|
1027
|
+
* A `TemplateResult` that will be used
|
|
1028
|
+
* to render the updated internal template.
|
|
1029
|
+
* @return Render template
|
|
1030
|
+
*/
|
|
1031
|
+
render() {
|
|
1032
|
+
return html `
|
|
1033
|
+
<slot name="legend">
|
|
1034
|
+
<div part="legend"></div>
|
|
1035
|
+
</slot>
|
|
1036
|
+
<div part="jump-button-container">
|
|
1037
|
+
<div part="jump-button"></div>
|
|
1038
|
+
</div>
|
|
1039
|
+
<div part="branding-container" title="" tooltip="Powered by Trading View">
|
|
1040
|
+
<svg width="33" height="19" viewBox="0 0 611 314" part="branding">
|
|
1041
|
+
<path fill-rule="evenodd" clip-rule="evenodd" d="M341 124C375.242 124 403 96.2417 403 62C403 27.7583 375.242 0 341 0C306.758 0 279 27.7583 279 62C279 96.2417 306.758 124 341 124ZM481 314H337L467 4H611L481 314ZM124 4H248V128V314H124V128H0V4H124Z"/>
|
|
1042
|
+
</svg>
|
|
1043
|
+
</div>
|
|
1044
|
+
<div part="chart"></div>
|
|
1045
|
+
`;
|
|
1046
|
+
}
|
|
1047
|
+
};
|
|
1048
|
+
InteractiveChart.CSS_COLOR_PREFIX = '--chart-color-';
|
|
1049
|
+
InteractiveChart.DEFAULT_LINE_WIDTH = '2';
|
|
1050
|
+
InteractiveChart.DEFAULT_FILL_OPACITY = '0.4';
|
|
1051
|
+
InteractiveChart.LINE_STYLES = {
|
|
1052
|
+
SOLID: 0,
|
|
1053
|
+
DOTTED: 1,
|
|
1054
|
+
DASHED: 2,
|
|
1055
|
+
LARGE_DASHED: 3,
|
|
1056
|
+
SPARSE_DOTTED: 4
|
|
1057
|
+
};
|
|
1058
|
+
__decorate([
|
|
1059
|
+
property({ type: Object })
|
|
1060
|
+
], InteractiveChart.prototype, "config", void 0);
|
|
1061
|
+
__decorate([
|
|
1062
|
+
property({ type: Boolean, reflect: true, attribute: 'disabled-legend' })
|
|
1063
|
+
], InteractiveChart.prototype, "disabledLegend", void 0);
|
|
1064
|
+
__decorate([
|
|
1065
|
+
property({ type: Boolean, reflect: true, attribute: 'disabled-jump-button' })
|
|
1066
|
+
], InteractiveChart.prototype, "disabledJumpButton", void 0);
|
|
1067
|
+
__decorate([
|
|
1068
|
+
property({ type: String, attribute: 'legendstyle' })
|
|
1069
|
+
], InteractiveChart.prototype, "deprecatedLegendStyle", void 0);
|
|
1070
|
+
__decorate([
|
|
1071
|
+
property({ type: String, attribute: 'legend-style' })
|
|
1072
|
+
], InteractiveChart.prototype, "legendStyle", null);
|
|
1073
|
+
__decorate([
|
|
1074
|
+
query('[part=chart]', true)
|
|
1075
|
+
], InteractiveChart.prototype, "chartContainer", void 0);
|
|
1076
|
+
__decorate([
|
|
1077
|
+
query('[part=legend]', true)
|
|
1078
|
+
], InteractiveChart.prototype, "legendContainer", void 0);
|
|
1079
|
+
__decorate([
|
|
1080
|
+
query('[part=jump-button-container]', true)
|
|
1081
|
+
], InteractiveChart.prototype, "jumpButtonContainer", void 0);
|
|
1082
|
+
__decorate([
|
|
1083
|
+
query('[part=branding-container]', true)
|
|
1084
|
+
], InteractiveChart.prototype, "brandingContainer", void 0);
|
|
1085
|
+
InteractiveChart = InteractiveChart_1 = __decorate([
|
|
1086
|
+
customElement('ef-interactive-chart', {
|
|
1087
|
+
alias: 'sapphire-interactive-chart'
|
|
1088
|
+
})
|
|
1089
|
+
], InteractiveChart);
|
|
1090
|
+
export { InteractiveChart };
|