greeks-live-ui 0.0.20 → 0.0.21

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 (201) hide show
  1. package/dist/index.css +1 -1
  2. package/es/components/chart/index.d.ts +28 -28
  3. package/es/components/chart/src/chart.vue.d.ts +28 -28
  4. package/es/components/chart-panel/index.d.ts +10 -10
  5. package/es/components/chart-panel/src/chart-panel.vue.d.ts +10 -10
  6. package/es/components/demo/index.d.ts +28 -28
  7. package/es/components/demo/src/demo.vue.d.ts +28 -28
  8. package/es/hooks/use-floating/index.d.ts +8 -8
  9. package/es/index.mjs +19 -19
  10. package/es/packages/components/button1/index.mjs +2 -2
  11. package/es/packages/components/button1/src/button1.mjs +5 -72
  12. package/es/packages/components/button1/src/button1.mjs.map +1 -1
  13. package/es/packages/components/button1/src/button12.mjs +72 -5
  14. package/es/packages/components/button1/src/button12.mjs.map +1 -1
  15. package/es/packages/components/chart/index.mjs +2 -2
  16. package/es/packages/components/chart/src/chart.mjs +12 -85
  17. package/es/packages/components/chart/src/chart.mjs.map +1 -1
  18. package/es/packages/components/chart/src/chart2.mjs +85 -12
  19. package/es/packages/components/chart/src/chart2.mjs.map +1 -1
  20. package/es/packages/components/checkbox/index.mjs +2 -2
  21. package/es/packages/components/checkbox/src/checkbox.mjs +5 -31
  22. package/es/packages/components/checkbox/src/checkbox.mjs.map +1 -1
  23. package/es/packages/components/checkbox/src/checkbox2.mjs +31 -5
  24. package/es/packages/components/checkbox/src/checkbox2.mjs.map +1 -1
  25. package/es/packages/components/icon/index.mjs +2 -2
  26. package/es/packages/components/icon/src/icon.mjs +15 -48
  27. package/es/packages/components/icon/src/icon.mjs.map +1 -1
  28. package/es/packages/components/icon/src/icon2.mjs +48 -15
  29. package/es/packages/components/icon/src/icon2.mjs.map +1 -1
  30. package/es/packages/components/index.mjs +19 -19
  31. package/es/packages/components/menu/index.mjs +2 -2
  32. package/es/packages/components/menu/src/menu.mjs +5 -31
  33. package/es/packages/components/menu/src/menu.mjs.map +1 -1
  34. package/es/packages/components/menu/src/menu2.mjs +31 -5
  35. package/es/packages/components/menu/src/menu2.mjs.map +1 -1
  36. package/es/packages/components/menu-item/index.mjs +2 -2
  37. package/es/packages/components/menu-item/src/menu-item.mjs +5 -31
  38. package/es/packages/components/menu-item/src/menu-item.mjs.map +1 -1
  39. package/es/packages/components/menu-item/src/menu-item2.mjs +31 -5
  40. package/es/packages/components/menu-item/src/menu-item2.mjs.map +1 -1
  41. package/es/packages/components/page-turner/index.mjs +2 -2
  42. package/es/packages/components/page-turner/src/page-turner.mjs +12 -67
  43. package/es/packages/components/page-turner/src/page-turner.mjs.map +1 -1
  44. package/es/packages/components/page-turner/src/page-turner2.mjs +67 -12
  45. package/es/packages/components/page-turner/src/page-turner2.mjs.map +1 -1
  46. package/es/packages/components/panel/index.mjs +2 -2
  47. package/es/packages/components/panel/src/panel.mjs +82 -5
  48. package/es/packages/components/panel/src/panel.mjs.map +1 -1
  49. package/es/packages/components/panel/src/panel2.mjs +5 -82
  50. package/es/packages/components/panel/src/panel2.mjs.map +1 -1
  51. package/es/packages/components/panel-atm-iv/index.mjs +2 -2
  52. package/es/packages/components/panel-atm-iv/src/panel-atm-iv.mjs +21 -886
  53. package/es/packages/components/panel-atm-iv/src/panel-atm-iv.mjs.map +1 -1
  54. package/es/packages/components/panel-atm-iv/src/panel-atm-iv2.mjs +886 -21
  55. package/es/packages/components/panel-atm-iv/src/panel-atm-iv2.mjs.map +1 -1
  56. package/es/packages/components/panel-max-pain-price/index.mjs +2 -2
  57. package/es/packages/components/panel-max-pain-price/src/panel-max-pain-price.mjs +288 -22
  58. package/es/packages/components/panel-max-pain-price/src/panel-max-pain-price.mjs.map +1 -1
  59. package/es/packages/components/panel-max-pain-price/src/panel-max-pain-price2.mjs +22 -288
  60. package/es/packages/components/panel-max-pain-price/src/panel-max-pain-price2.mjs.map +1 -1
  61. package/es/packages/components/panel-option-open-interest/index.mjs +2 -2
  62. package/es/packages/components/panel-option-open-interest/src/panel-option-open-interest.mjs +378 -22
  63. package/es/packages/components/panel-option-open-interest/src/panel-option-open-interest.mjs.map +1 -1
  64. package/es/packages/components/panel-option-open-interest/src/panel-option-open-interest2.mjs +22 -378
  65. package/es/packages/components/panel-option-open-interest/src/panel-option-open-interest2.mjs.map +1 -1
  66. package/es/packages/components/panel-option-trade-volume/index.mjs +2 -2
  67. package/es/packages/components/panel-option-trade-volume/src/panel-option-trade-volume.mjs +504 -22
  68. package/es/packages/components/panel-option-trade-volume/src/panel-option-trade-volume.mjs.map +1 -1
  69. package/es/packages/components/panel-option-trade-volume/src/panel-option-trade-volume2.mjs +22 -504
  70. package/es/packages/components/panel-option-trade-volume/src/panel-option-trade-volume2.mjs.map +1 -1
  71. package/es/packages/components/panel-rv/index.mjs +2 -2
  72. package/es/packages/components/panel-rv/src/panel-rv.mjs +22 -741
  73. package/es/packages/components/panel-rv/src/panel-rv.mjs.map +1 -1
  74. package/es/packages/components/panel-rv/src/panel-rv2.mjs +741 -22
  75. package/es/packages/components/panel-rv/src/panel-rv2.mjs.map +1 -1
  76. package/es/packages/components/panel-rv-calc/index.mjs +2 -2
  77. package/es/packages/components/panel-rv-calc/src/panel-rv-calc.mjs +8 -507
  78. package/es/packages/components/panel-rv-calc/src/panel-rv-calc.mjs.map +1 -1
  79. package/es/packages/components/panel-rv-calc/src/panel-rv-calc2.mjs +507 -8
  80. package/es/packages/components/panel-rv-calc/src/panel-rv-calc2.mjs.map +1 -1
  81. package/es/packages/components/panel-skew/index.mjs +2 -2
  82. package/es/packages/components/panel-skew/src/panel-skew.mjs +21 -672
  83. package/es/packages/components/panel-skew/src/panel-skew.mjs.map +1 -1
  84. package/es/packages/components/panel-skew/src/panel-skew2.mjs +672 -21
  85. package/es/packages/components/panel-skew/src/panel-skew2.mjs.map +1 -1
  86. package/es/packages/components/panel-vrp/index.mjs +2 -2
  87. package/es/packages/components/panel-vrp/src/panel-vrp.mjs +22 -413
  88. package/es/packages/components/panel-vrp/src/panel-vrp.mjs.map +1 -1
  89. package/es/packages/components/panel-vrp/src/panel-vrp2.mjs +413 -22
  90. package/es/packages/components/panel-vrp/src/panel-vrp2.mjs.map +1 -1
  91. package/es/packages/components/select/index.mjs +2 -2
  92. package/es/packages/components/select/src/option.mjs +1 -1
  93. package/es/packages/components/select/src/select.mjs +10 -41
  94. package/es/packages/components/select/src/select.mjs.map +1 -1
  95. package/es/packages/components/select/src/select2.mjs +41 -10
  96. package/es/packages/components/select/src/select2.mjs.map +1 -1
  97. package/es/packages/components/table/index.mjs +2 -2
  98. package/es/packages/components/table/src/table.mjs +5 -37
  99. package/es/packages/components/table/src/table.mjs.map +1 -1
  100. package/es/packages/components/table/src/table2.mjs +37 -5
  101. package/es/packages/components/table/src/table2.mjs.map +1 -1
  102. package/es/packages/components/tooltip/index.mjs +2 -2
  103. package/es/packages/components/tooltip/src/tooltip.mjs +7 -33
  104. package/es/packages/components/tooltip/src/tooltip.mjs.map +1 -1
  105. package/es/packages/components/tooltip/src/tooltip2.mjs +33 -7
  106. package/es/packages/components/tooltip/src/tooltip2.mjs.map +1 -1
  107. package/es/utils/vue/vnode.d.ts +6 -6
  108. package/lib/components/chart/index.d.ts +28 -28
  109. package/lib/components/chart/src/chart.vue.d.ts +28 -28
  110. package/lib/components/chart-panel/index.d.ts +10 -10
  111. package/lib/components/chart-panel/src/chart-panel.vue.d.ts +10 -10
  112. package/lib/components/demo/index.d.ts +28 -28
  113. package/lib/components/demo/src/demo.vue.d.ts +28 -28
  114. package/lib/hooks/use-floating/index.d.ts +8 -8
  115. package/lib/index.js +15 -15
  116. package/lib/packages/components/button1/index.js +2 -2
  117. package/lib/packages/components/button1/src/button1.js +6 -72
  118. package/lib/packages/components/button1/src/button1.js.map +1 -1
  119. package/lib/packages/components/button1/src/button12.js +72 -6
  120. package/lib/packages/components/button1/src/button12.js.map +1 -1
  121. package/lib/packages/components/chart-panel/index.js +2 -2
  122. package/lib/packages/components/chart-panel/src/chart-panel.js +273 -39
  123. package/lib/packages/components/chart-panel/src/chart-panel.js.map +1 -1
  124. package/lib/packages/components/chart-panel/src/chart-panel2.js +39 -273
  125. package/lib/packages/components/chart-panel/src/chart-panel2.js.map +1 -1
  126. package/lib/packages/components/checkbox-group/index.js +2 -2
  127. package/lib/packages/components/checkbox-group/src/checkbox-group.js +31 -6
  128. package/lib/packages/components/checkbox-group/src/checkbox-group.js.map +1 -1
  129. package/lib/packages/components/checkbox-group/src/checkbox-group2.js +6 -31
  130. package/lib/packages/components/checkbox-group/src/checkbox-group2.js.map +1 -1
  131. package/lib/packages/components/dropdown/index.js +2 -2
  132. package/lib/packages/components/dropdown/src/dropdown.js +34 -6
  133. package/lib/packages/components/dropdown/src/dropdown.js.map +1 -1
  134. package/lib/packages/components/dropdown/src/dropdown2.js +6 -34
  135. package/lib/packages/components/dropdown/src/dropdown2.js.map +1 -1
  136. package/lib/packages/components/dropdown-button/index.js +2 -2
  137. package/lib/packages/components/dropdown-button/src/dropdown-button.js +39 -6
  138. package/lib/packages/components/dropdown-button/src/dropdown-button.js.map +1 -1
  139. package/lib/packages/components/dropdown-button/src/dropdown-button2.js +6 -39
  140. package/lib/packages/components/dropdown-button/src/dropdown-button2.js.map +1 -1
  141. package/lib/packages/components/index.js +15 -15
  142. package/lib/packages/components/menu/index.js +2 -2
  143. package/lib/packages/components/menu/src/menu.js +6 -31
  144. package/lib/packages/components/menu/src/menu.js.map +1 -1
  145. package/lib/packages/components/menu/src/menu2.js +31 -6
  146. package/lib/packages/components/menu/src/menu2.js.map +1 -1
  147. package/lib/packages/components/panel/index.js +2 -2
  148. package/lib/packages/components/panel/src/panel.js +82 -6
  149. package/lib/packages/components/panel/src/panel.js.map +1 -1
  150. package/lib/packages/components/panel/src/panel2.js +6 -82
  151. package/lib/packages/components/panel/src/panel2.js.map +1 -1
  152. package/lib/packages/components/panel-iv-skew/index.js +2 -2
  153. package/lib/packages/components/panel-iv-skew/src/panel-iv-skew.js +23 -398
  154. package/lib/packages/components/panel-iv-skew/src/panel-iv-skew.js.map +1 -1
  155. package/lib/packages/components/panel-iv-skew/src/panel-iv-skew2.js +398 -23
  156. package/lib/packages/components/panel-iv-skew/src/panel-iv-skew2.js.map +1 -1
  157. package/lib/packages/components/panel-option-open-interest/index.js +2 -2
  158. package/lib/packages/components/panel-option-open-interest/src/panel-option-open-interest.js +378 -23
  159. package/lib/packages/components/panel-option-open-interest/src/panel-option-open-interest.js.map +1 -1
  160. package/lib/packages/components/panel-option-open-interest/src/panel-option-open-interest2.js +23 -378
  161. package/lib/packages/components/panel-option-open-interest/src/panel-option-open-interest2.js.map +1 -1
  162. package/lib/packages/components/panel-option-trade-volume/index.js +2 -2
  163. package/lib/packages/components/panel-option-trade-volume/src/panel-option-trade-volume.js +504 -23
  164. package/lib/packages/components/panel-option-trade-volume/src/panel-option-trade-volume.js.map +1 -1
  165. package/lib/packages/components/panel-option-trade-volume/src/panel-option-trade-volume2.js +23 -504
  166. package/lib/packages/components/panel-option-trade-volume/src/panel-option-trade-volume2.js.map +1 -1
  167. package/lib/packages/components/panel-skew/index.js +2 -2
  168. package/lib/packages/components/panel-skew/src/panel-skew.js +672 -22
  169. package/lib/packages/components/panel-skew/src/panel-skew.js.map +1 -1
  170. package/lib/packages/components/panel-skew/src/panel-skew2.js +22 -672
  171. package/lib/packages/components/panel-skew/src/panel-skew2.js.map +1 -1
  172. package/lib/packages/components/panel-volatility-term-structure/index.js +2 -2
  173. package/lib/packages/components/panel-volatility-term-structure/src/panel-volatility-term-structure.js +23 -365
  174. package/lib/packages/components/panel-volatility-term-structure/src/panel-volatility-term-structure.js.map +1 -1
  175. package/lib/packages/components/panel-volatility-term-structure/src/panel-volatility-term-structure2.js +365 -23
  176. package/lib/packages/components/panel-volatility-term-structure/src/panel-volatility-term-structure2.js.map +1 -1
  177. package/lib/packages/components/radio/index.js +2 -2
  178. package/lib/packages/components/radio/src/radio-button.js +1 -1
  179. package/lib/packages/components/radio/src/radio-group.js +1 -1
  180. package/lib/packages/components/radio/src/radio.js +31 -6
  181. package/lib/packages/components/radio/src/radio.js.map +1 -1
  182. package/lib/packages/components/radio/src/radio2.js +6 -31
  183. package/lib/packages/components/radio/src/radio2.js.map +1 -1
  184. package/lib/packages/components/select/index.js +2 -2
  185. package/lib/packages/components/select/src/option.js +1 -1
  186. package/lib/packages/components/select/src/select.js +15 -41
  187. package/lib/packages/components/select/src/select.js.map +1 -1
  188. package/lib/packages/components/select/src/select2.js +41 -15
  189. package/lib/packages/components/select/src/select2.js.map +1 -1
  190. package/lib/packages/components/tooltip/index.js +2 -2
  191. package/lib/packages/components/tooltip/src/tooltip.js +33 -8
  192. package/lib/packages/components/tooltip/src/tooltip.js.map +1 -1
  193. package/lib/packages/components/tooltip/src/tooltip2.js +8 -33
  194. package/lib/packages/components/tooltip/src/tooltip2.js.map +1 -1
  195. package/lib/utils/vue/vnode.d.ts +6 -6
  196. package/package.json +1 -1
  197. package/theme-chalk/base.css +1 -1
  198. package/theme-chalk/g-antd.css +1 -1
  199. package/theme-chalk/index.css +1 -1
  200. package/theme-chalk/src/antd.scss +1 -2
  201. package/web-types.json +1 -1
@@ -1,28 +1,893 @@
1
+ import { createTextVNode, defineComponent, computed, reactive, watch, onMounted, resolveComponent, openBlock, createElementBlock, normalizeClass, unref, createVNode, isRef, withCtx, createElementVNode, Fragment, renderList, createBlock, toDisplayString, createCommentVNode, normalizeStyle } from 'vue';
2
+ import '../../../hooks/index.mjs';
3
+ import { panelAtmIvProps, panelAtmIvEmits } from './panel-atm-iv.mjs';
1
4
  import '../../../utils/index.mjs';
2
- import { buildProps } from '../../../utils/vue/props/runtime.mjs';
5
+ import _export_sfc from '../../../../_virtual/plugin-vue_export-helper.mjs';
6
+ import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
7
+ import { useLocale } from '../../../hooks/use-locale/index.mjs';
8
+ import { useDeviceType } from '../../../hooks/use-device-type/index.mjs';
9
+ import { useTheme } from '../../../hooks/use-theme/index.mjs';
10
+ import { getIvHistory } from '../../../utils/dataLab.mjs';
11
+ import { showDateRange, formatDateForNumber, numberFormat, getTooltipDate } from '../../../utils/chartHelp.mjs';
3
12
 
4
- const panelAtmIvEmits = {
5
- "update:currency": (currency) => true,
6
- "update:exchange": (exchange) => true
13
+ const _hoisted_1 = /* @__PURE__ */ createTextVNode(" ATM IV");
14
+ const _hoisted_2 = ["innerHTML"];
15
+ const _hoisted_3 = { class: "period-range h5-hide" };
16
+ const _hoisted_4 = { key: 0 };
17
+ const _hoisted_5 = {
18
+ key: 1,
19
+ class: "echart",
20
+ ref: "echart"
7
21
  };
8
- const panelAtmIvProps = buildProps({
9
- defaultCurrency: {
10
- type: String,
11
- required: false
12
- },
13
- defaultExchange: {
14
- type: String,
15
- required: false
16
- },
17
- currency: {
18
- type: String,
19
- required: false
20
- },
21
- exchange: {
22
- type: String,
23
- required: false
22
+ const _hoisted_6 = { class: "h5-tip-title" };
23
+ const _hoisted_7 = { class: "h5-legend" };
24
+ const __default__ = {
25
+ name: "GPanelAtmIv"
26
+ };
27
+ const _sfc_main = /* @__PURE__ */ defineComponent({
28
+ ...__default__,
29
+ props: panelAtmIvProps,
30
+ emits: panelAtmIvEmits,
31
+ setup(__props, { emit }) {
32
+ const props = __props;
33
+ const ns = useNamespace("panel-atm-iv");
34
+ const { t } = useLocale();
35
+ const { isMobile, isPC } = useDeviceType();
36
+ const { isDark } = useTheme();
37
+ let legendList = [
38
+ {
39
+ value: "ALL",
40
+ label: "All",
41
+ days: 0,
42
+ color: "#00B42A"
43
+ },
44
+ {
45
+ value: "1D",
46
+ label: "1 D",
47
+ days: 1,
48
+ color: "#7630F7"
49
+ },
50
+ {
51
+ value: "1W",
52
+ label: "1 W",
53
+ days: 7,
54
+ color: "#23C343"
55
+ },
56
+ {
57
+ value: "1M",
58
+ label: "1 M",
59
+ days: 30,
60
+ color: "#FFD600"
61
+ },
62
+ {
63
+ value: "2M",
64
+ label: "2 M",
65
+ days: 60,
66
+ color: "#FF8D1F"
67
+ },
68
+ {
69
+ value: "3M",
70
+ label: "3 M",
71
+ days: 90,
72
+ color: "#FF3B30"
73
+ },
74
+ {
75
+ value: "6M",
76
+ label: "6 M",
77
+ days: 180,
78
+ color: "#007AFF"
79
+ },
80
+ {
81
+ value: "1Y",
82
+ label: "1 Y",
83
+ days: 365,
84
+ color: "#00C7BE"
85
+ }
86
+ ];
87
+ const periodList = computed(() => {
88
+ if (currency.value === "BTC" || currency.value === "ETH") {
89
+ return legendList.filter(
90
+ (v) => ["ALL", "1W", "1M", "3M", "1Y"].includes(v.value)
91
+ );
92
+ } else if (currency.value.includes("PAXG")) {
93
+ return legendList.filter(
94
+ (v) => ["ALL", "1W", "1M", "3M"].includes(v.value)
95
+ );
96
+ } else {
97
+ return legendList.filter((v) => ["ALL", "1W", "1M"].includes(v.value));
98
+ }
99
+ });
100
+ const rangeList = computed(() => {
101
+ if (currency.value === "BTC" || currency.value === "ETH") {
102
+ return ["1D", "1W", "1M", "2M", "3M", "6M", "1Y"];
103
+ } else if (currency.value.includes("PAXG")) {
104
+ return ["1D", "1W", "1M", "3M", "6M"];
105
+ } else {
106
+ return ["1D", "1W", "1M"];
107
+ }
108
+ });
109
+ const defaultPeriod = computed(() => {
110
+ if (currency.value === "BTC" || currency.value === "ETH") {
111
+ return "3M";
112
+ } else if (currency.value.includes("PAXG")) {
113
+ return "3M";
114
+ } else {
115
+ return "1M";
116
+ }
117
+ });
118
+ const state = reactive({
119
+ loadingFlag: false,
120
+ showTableCard: true,
121
+ isToolTipShow: false,
122
+ toolTipTitle: "",
123
+ exchange: props.exchange || props.defaultExchange || "Deribit",
124
+ currency: props.currency || props.defaultCurrency || "BTC",
125
+ range: "1W",
126
+ period: "3M",
127
+ periodDateRange: "",
128
+ chartData: [],
129
+ tableData: [],
130
+ legendMap: {},
131
+ hvMap: {},
132
+ legendList: []
133
+ });
134
+ const currency = computed({
135
+ get: () => props.currency || state.currency || "BTC",
136
+ set: (newVal) => {
137
+ props.currency ? emit("update:currency", newVal) : state.currency = newVal;
138
+ }
139
+ });
140
+ const exchange = computed({
141
+ get: () => props.exchange || state.exchange || "Deribit",
142
+ set: (newVal) => {
143
+ props.exchange ? emit("update:exchange", newVal) : state.exchange = newVal;
144
+ }
145
+ });
146
+ watch(currency, () => {
147
+ fetchData();
148
+ });
149
+ watch(exchange, () => {
150
+ fetchData();
151
+ });
152
+ const fetchData = () => {
153
+ state.loadingFlag = true;
154
+ getIvHistory({
155
+ currency: currency.value,
156
+ gap: state.showTableCard ? defaultPeriod.value : state.period
157
+ }).then((res) => {
158
+ if (res && res.code === 200) {
159
+ state.chartData = res.data || [];
160
+ getTableData();
161
+ getLegendData();
162
+ }
163
+ }).finally(() => {
164
+ state.loadingFlag = false;
165
+ });
166
+ };
167
+ onMounted(() => {
168
+ state.period = defaultPeriod.value;
169
+ handleChangePeriod(state.period);
170
+ });
171
+ const handleChangePeriod = (value) => {
172
+ const selectedPeriod = periodList.value.find((v) => v.value === value);
173
+ if (!selectedPeriod)
174
+ return;
175
+ state.periodDateRange = showDateRange(selectedPeriod.days);
176
+ fetchData();
177
+ };
178
+ const handleToggleTableChart = () => {
179
+ state.showTableCard = !state.showTableCard;
180
+ fetchData();
181
+ };
182
+ const handleTipShow = (isShow) => {
183
+ state.isToolTipShow = isShow;
184
+ !isShow && (state.toolTipTitle = "");
185
+ };
186
+ const getLegendValue = (days) => {
187
+ var _a;
188
+ const r = Number((_a = Number(days[days.length - 1])) == null ? void 0 : _a.toFixed(2));
189
+ return r >= 0 ? `+${r}%` : `${r}%`;
190
+ };
191
+ const getLegendData = () => {
192
+ const { day1, week1, month1, month2, month3, month6, year1, hvText, dataHv } = getEchartData();
193
+ state.legendMap = {
194
+ "1D": getLegendValue(day1),
195
+ "1W": getLegendValue(week1),
196
+ "1M": getLegendValue(month1),
197
+ "2M": getLegendValue(month2),
198
+ "3M": getLegendValue(month3),
199
+ "6M": getLegendValue(month6),
200
+ "1Y": getLegendValue(year1),
201
+ [hvText]: getLegendValue(dataHv)
202
+ };
203
+ };
204
+ const getTableData = () => {
205
+ var _a;
206
+ let data = state.chartData || [];
207
+ let hvMap = {};
208
+ let arr = ((_a = data[data.length - 1]) == null ? void 0 : _a.data) || [];
209
+ arr.forEach((item) => {
210
+ let key = "";
211
+ if (item.day === 1) {
212
+ key = "1D";
213
+ } else if (item.day === 7) {
214
+ key = "1W";
215
+ } else if (item.day === 30) {
216
+ key = "1M";
217
+ } else if (item.day === 60) {
218
+ key = "2M";
219
+ } else if (item.day === 90) {
220
+ key = "3M";
221
+ } else if (item.day === 180) {
222
+ key = "6M";
223
+ } else if (item.day === 365) {
224
+ key = "1Y";
225
+ }
226
+ hvMap[key] = item.hv;
227
+ state.hvMap = hvMap;
228
+ });
229
+ let day1 = 864e5;
230
+ let data0 = data[data.length - 1];
231
+ let dataDate1 = formatDateForNumber(data0.created_at - day1);
232
+ let dataDate2 = formatDateForNumber(data0.created_at - day1 * 2);
233
+ let dataDate7 = formatDateForNumber(data0.created_at - day1 * 7);
234
+ let dataDate15 = formatDateForNumber(data0.created_at - day1 * 14);
235
+ let dataDate30 = formatDateForNumber(data0.created_at - day1 * 30);
236
+ let map = {};
237
+ data.forEach((item) => {
238
+ let date = formatDateForNumber(item.created_at);
239
+ if (date === dataDate1) {
240
+ map[date] = item;
241
+ } else if (date === dataDate2) {
242
+ map[date] = item;
243
+ } else if (date === dataDate7) {
244
+ map[date] = item;
245
+ } else if (date === dataDate15) {
246
+ map[date] = item;
247
+ } else if (date === dataDate30) {
248
+ map[date] = item;
249
+ }
250
+ });
251
+ let list = Object.values(map).sort(
252
+ (prev, next) => next.created_at - prev.created_at
253
+ );
254
+ let dataMap1 = { expire: "1 day", atm: data0.one_day };
255
+ let dataMap2 = { expire: "1 week", atm: data0.one_week };
256
+ let dataMap3 = { expire: "1 month", atm: data0.month1 };
257
+ let dataMap4 = { expire: "2 month", atm: data0.month2 };
258
+ let dataMap5 = { expire: "3 month", atm: data0.month3 };
259
+ let dataMap6 = { expire: "6 month", atm: data0.month6 };
260
+ let dataMap7 = { expire: "1 year", atm: data0.one_year };
261
+ for (let i = 0; i < list.length; i++) {
262
+ let item = list[i];
263
+ let key;
264
+ switch (i) {
265
+ case 0:
266
+ key = "chg1";
267
+ break;
268
+ case 1:
269
+ key = "chg2";
270
+ break;
271
+ case 2:
272
+ key = "chg7";
273
+ break;
274
+ case 3:
275
+ key = "chg14";
276
+ break;
277
+ case 4:
278
+ key = "chg30";
279
+ break;
280
+ default:
281
+ continue;
282
+ }
283
+ dataMap1[key] = data0.one_day - item.one_day;
284
+ dataMap2[key] = data0.one_week - item.one_week;
285
+ dataMap3[key] = data0.month1 - item.month1;
286
+ dataMap4[key] = data0.month2 - item.month2;
287
+ dataMap5[key] = data0.month3 - item.month3;
288
+ dataMap6[key] = data0.month6 - item.month6;
289
+ dataMap7[key] = data0.one_year - item.one_year;
290
+ }
291
+ let tableData = [];
292
+ if (currency.value === "BTC" || currency.value === "ETH") {
293
+ tableData = [
294
+ dataMap1,
295
+ dataMap2,
296
+ dataMap3,
297
+ dataMap4,
298
+ dataMap5,
299
+ dataMap6,
300
+ dataMap7
301
+ ];
302
+ } else if (currency.value.includes("PAXG")) {
303
+ tableData = [dataMap1, dataMap2, dataMap3, dataMap4, dataMap5, dataMap6];
304
+ } else {
305
+ tableData = [dataMap1, dataMap2, dataMap3];
306
+ }
307
+ state.tableData = tableData.map((v) => {
308
+ v["vrp"] = v.atm - Number(hvMap[state.range]);
309
+ v["vrpLabel"] = state.range + " VRP";
310
+ return v;
311
+ });
312
+ };
313
+ const getEchartData = () => {
314
+ let data = [...state.chartData];
315
+ const data2 = data.map((v) => v.data);
316
+ let date = [];
317
+ let day1 = [];
318
+ let week1 = [];
319
+ let month1 = [];
320
+ let month2 = [];
321
+ let month3 = [];
322
+ let month6 = [];
323
+ let year1 = [];
324
+ data.forEach((item) => {
325
+ day1.push(
326
+ item.one_day ? numberFormat(item.one_day, 2) : ""
327
+ );
328
+ week1.push(
329
+ item.one_week ? numberFormat(item.one_week, 2) : ""
330
+ );
331
+ month1.push(numberFormat(item.month1, 2));
332
+ month2.push(
333
+ item.month2 ? numberFormat(item.month2, 2) : ""
334
+ );
335
+ month3.push(numberFormat(item.month3, 2));
336
+ month6.push(numberFormat(item.month6, 2));
337
+ year1.push(
338
+ item.one_year ? numberFormat(item.one_year, 2) : ""
339
+ );
340
+ date.push(formatDateForNumber(item.created_at));
341
+ });
342
+ let days1 = [];
343
+ let days7 = [];
344
+ let days30 = [];
345
+ let days60 = [];
346
+ let days90 = [];
347
+ let days180 = [];
348
+ let days365 = [];
349
+ data2.forEach((item) => {
350
+ item = item || [];
351
+ let set = /* @__PURE__ */ new Set([
352
+ "days1",
353
+ "days7",
354
+ "days30",
355
+ "days60",
356
+ "days90",
357
+ "days180",
358
+ "days365"
359
+ ]);
360
+ item.forEach((item2) => {
361
+ if (item2.day === 1) {
362
+ set.delete("days1");
363
+ days1.push(numberFormat(item2.hv, 2));
364
+ } else if (item2.day === 7) {
365
+ set.delete("days7");
366
+ days7.push(numberFormat(item2.hv, 2));
367
+ } else if (item2.day === 30) {
368
+ set.delete("days30");
369
+ days30.push(numberFormat(item2.hv, 2));
370
+ } else if (item2.day === 60) {
371
+ set.delete("days60");
372
+ days60.push(numberFormat(item2.hv, 2));
373
+ } else if (item2.day === 90) {
374
+ set.delete("days90");
375
+ days90.push(numberFormat(item2.hv, 2));
376
+ } else if (item2.day === 180) {
377
+ set.delete("days180");
378
+ days180.push(numberFormat(item2.hv, 2));
379
+ } else if (item2.day === 365) {
380
+ set.delete("days365");
381
+ days365.push(numberFormat(item2.hv, 2));
382
+ }
383
+ });
384
+ let arr = [...set];
385
+ arr.forEach((item3) => {
386
+ if (item3 === "days1") {
387
+ days1.push("");
388
+ } else if (item3 === "days7") {
389
+ days7.push("");
390
+ } else if (item3 === "days30") {
391
+ days30.push("");
392
+ } else if (item3 === "days60") {
393
+ days60.push("");
394
+ } else if (item3 === "days90") {
395
+ days90.push("");
396
+ } else if (item3 === "days180") {
397
+ days180.push("");
398
+ } else if (item3 === "days365") {
399
+ days365.push("");
400
+ }
401
+ });
402
+ });
403
+ let dataHv = [];
404
+ if (state.range === "1D") {
405
+ dataHv = days1;
406
+ } else if (state.range === "1W") {
407
+ dataHv = days7;
408
+ } else if (state.range === "1M") {
409
+ dataHv = days30;
410
+ } else if (state.range === "2M") {
411
+ dataHv = days60;
412
+ } else if (state.range === "3M") {
413
+ dataHv = days90;
414
+ } else if (state.range === "6M") {
415
+ dataHv = days180;
416
+ } else if (state.range === "1Y") {
417
+ dataHv = days365;
418
+ }
419
+ const hvText = `${state.range.toLocaleLowerCase()} HV`;
420
+ return {
421
+ date,
422
+ day1,
423
+ week1,
424
+ month1,
425
+ month2,
426
+ month3,
427
+ month6,
428
+ year1,
429
+ hvText,
430
+ dataHv
431
+ };
432
+ };
433
+ const getEchartOption = (params) => {
434
+ const {
435
+ date,
436
+ day1,
437
+ week1,
438
+ month1,
439
+ month2,
440
+ month3,
441
+ month6,
442
+ year1,
443
+ hvText,
444
+ dataHv
445
+ } = params;
446
+ const seriesMap = {
447
+ "1D": {
448
+ name: "1 D",
449
+ key: 1,
450
+ type: "line",
451
+ symbol: "none",
452
+ data: day1
453
+ },
454
+ "1W": {
455
+ name: "1 W",
456
+ key: 7,
457
+ type: "line",
458
+ symbol: "none",
459
+ data: week1
460
+ },
461
+ "1M": {
462
+ name: "1 M",
463
+ key: 30,
464
+ type: "line",
465
+ symbol: "none",
466
+ data: month1
467
+ },
468
+ "2M": {
469
+ name: "2 M",
470
+ key: 60,
471
+ type: "line",
472
+ symbol: "none",
473
+ data: month2
474
+ },
475
+ "3M": {
476
+ name: "3 M",
477
+ key: 90,
478
+ type: "line",
479
+ symbol: "none",
480
+ data: month3
481
+ },
482
+ "6M": {
483
+ name: "6 M",
484
+ key: 180,
485
+ type: "line",
486
+ symbol: "none",
487
+ data: month6
488
+ },
489
+ "1Y": {
490
+ name: "1 Y",
491
+ key: 365,
492
+ type: "line",
493
+ symbol: "none",
494
+ data: year1
495
+ }
496
+ };
497
+ const filteredSeries = rangeList.value.map((range) => seriesMap[range]);
498
+ filteredSeries.push({
499
+ name: hvText,
500
+ type: "line",
501
+ symbol: "none",
502
+ data: dataHv
503
+ });
504
+ const option = {
505
+ color: legendList.slice(1).map((v) => v.color),
506
+ tooltip: {
507
+ trigger: "axis",
508
+ axisPointer: {
509
+ type: "cross",
510
+ label: {
511
+ show: isMobile.value ? true : false,
512
+ backgroundColor: "#DEE2E6",
513
+ color: "#343A40",
514
+ padding: [4, 6, 4, 6],
515
+ margin: 9
516
+ },
517
+ crossStyle: {
518
+ color: "#8B959F"
519
+ },
520
+ lineStyle: {
521
+ color: "#8B959F"
522
+ }
523
+ },
524
+ backgroundColor: isDark.value ? "#E9ECEF" : "#292F3D",
525
+ padding: isMobile.value ? 0 : [6, 8, 5, 6],
526
+ textStyle: {
527
+ color: isDark.value ? "#000000" : "#FFFFFF",
528
+ fontSize: 12,
529
+ lineHeight: 16,
530
+ fontWeight: 400
531
+ },
532
+ formatter: (params2) => {
533
+ let content = "";
534
+ state.toolTipTitle = getTooltipDate(params2[0].axisValueLabel, "en-US");
535
+ content += `<div class="chart-tooltip-box"><div style="margin-bottom:4px;">${state.toolTipTitle}</div> `;
536
+ params2.forEach(
537
+ (param) => {
538
+ content += `
539
+ <div class="chart-tooltip">
540
+ <div>
541
+ <span class="chart-tooltip-line" style="background-color:${param.color};"></span>
542
+ <span>${param.seriesName}</span>
543
+ </div>
544
+ <span>${param.value.toFixed(2)}</span>
545
+ </div>
546
+ `;
547
+ }
548
+ );
549
+ return content + "</div>";
550
+ }
551
+ },
552
+ axisPointer: {
553
+ type: "line",
554
+ label: {
555
+ show: true,
556
+ backgroundColor: "#DEE2E6",
557
+ color: "#343A40",
558
+ fontSize: 10,
559
+ padding: [4, 6, 4, 8]
560
+ }
561
+ },
562
+ legend: {
563
+ show: !isMobile.value,
564
+ left: "center",
565
+ width: "90%",
566
+ icon: "rect",
567
+ itemWidth: 14,
568
+ itemHeight: 2,
569
+ itemGap: 20,
570
+ textStyle: {
571
+ color: "#596169",
572
+ fontSize: 12
573
+ },
574
+ lineStyle: {
575
+ inactiveColor: isDark.value ? "#2B2F32" : "#DEE2E6"
576
+ },
577
+ inactiveColor: isDark.value ? "#495057" : "#BDC4CB",
578
+ formatter: function(name) {
579
+ try {
580
+ switch (name) {
581
+ case "1 D":
582
+ return name + ` (${day1[day1.length - 1]}%)`;
583
+ case "1 W":
584
+ return name + ` (${week1[week1.length - 1]}%)`;
585
+ case "1 M":
586
+ return name + ` (${month1[month1.length - 1]}%)`;
587
+ case "2 M":
588
+ return name + ` (${month2[month2.length - 1]}%)`;
589
+ case "3 M":
590
+ return name + ` (${month3[month3.length - 1]}%)`;
591
+ case "6 M":
592
+ return name + ` (${month6[month6.length - 1]}%)`;
593
+ case "1 Y":
594
+ return name + ` (${year1[year1.length - 1]}%)`;
595
+ case hvText:
596
+ return name + ` (${dataHv[dataHv.length - 1]}%)`;
597
+ }
598
+ } catch (e) {
599
+ return name;
600
+ }
601
+ },
602
+ selected: {
603
+ "1 D": false,
604
+ "1 W": false,
605
+ "1 M": true,
606
+ "2 M": false,
607
+ "3 M": true,
608
+ "6 M": true,
609
+ "1 Y": false
610
+ }
611
+ },
612
+ xAxis: {
613
+ type: "category",
614
+ data: date,
615
+ axisTick: {
616
+ show: false
617
+ },
618
+ axisLabel: {
619
+ color: isDark.value ? "#CED4DA" : "#343A40",
620
+ fontWeight: 400,
621
+ fontSize: 10
622
+ },
623
+ axisLine: {
624
+ show: false,
625
+ lineStyle: {
626
+ color: isDark.value ? "#CED4DA" : "#343A40"
627
+ }
628
+ },
629
+ splitLine: {
630
+ show: !isMobile.value && !isDark.value,
631
+ lineStyle: {
632
+ color: "#F1F1F1",
633
+ width: 1,
634
+ type: "solid"
635
+ }
636
+ }
637
+ },
638
+ yAxis: {
639
+ type: "value",
640
+ scale: true,
641
+ axisLabel: {
642
+ show: true,
643
+ color: isDark.value ? "#CED4DA" : "#343A40",
644
+ fontWeight: 400,
645
+ fontSize: 10
646
+ },
647
+ name: "IV(%)",
648
+ nameLocation: "end",
649
+ nameGap: isMobile.value ? -30 : 20,
650
+ nameRotate: isMobile.value ? 90 : 0,
651
+ nameTextStyle: {
652
+ color: isDark.value ? "#8B959F" : "#8B959F",
653
+ fontWeight: 400,
654
+ fontSize: 10
655
+ },
656
+ axisLine: {
657
+ lineStyle: {
658
+ color: isDark.value ? "#CED4DA" : "#343A40"
659
+ }
660
+ },
661
+ splitLine: {
662
+ lineStyle: {
663
+ color: isDark.value ? "#2B2F32" : "#F1F1F1",
664
+ width: 1,
665
+ type: "solid"
666
+ }
667
+ }
668
+ },
669
+ grid: {
670
+ top: isPC.value ? 60 : 20,
671
+ left: "left",
672
+ right: 27,
673
+ bottom: 0,
674
+ containLabel: true
675
+ },
676
+ series: filteredSeries
677
+ };
678
+ if (isMobile.value) {
679
+ option.series = option.series.map((v) => ({ ...v, symbol: "circle" }));
680
+ }
681
+ return option;
682
+ };
683
+ const setOption = () => {
684
+ return getEchartOption(getEchartData());
685
+ };
686
+ return (_ctx, _cache) => {
687
+ const _component_g_icon = resolveComponent("g-icon");
688
+ const _component_g_tooltip = resolveComponent("g-tooltip");
689
+ const _component_g_select_option = resolveComponent("g-select-option");
690
+ const _component_g_select = resolveComponent("g-select");
691
+ const _component_g_chart_table = resolveComponent("g-chart-table");
692
+ const _component_g_chart = resolveComponent("g-chart");
693
+ const _component_g_chart_panel = resolveComponent("g-chart-panel");
694
+ return openBlock(), createElementBlock(
695
+ "div",
696
+ {
697
+ class: normalizeClass([unref(ns).b()])
698
+ },
699
+ [
700
+ createVNode(_component_g_chart_panel, {
701
+ currency: unref(currency),
702
+ "onUpdate:currency": _cache[4] || (_cache[4] = ($event) => isRef(currency) ? currency.value = $event : null),
703
+ exchange: unref(exchange),
704
+ "onUpdate:exchange": _cache[5] || (_cache[5] = ($event) => isRef(exchange) ? exchange.value = $event : null),
705
+ operations: ["toggle"],
706
+ loading: state.loadingFlag,
707
+ onToggle: handleToggleTableChart,
708
+ onRefresh: fetchData
709
+ }, {
710
+ title: withCtx(() => [
711
+ createVNode(_component_g_tooltip, {
712
+ placement: "bottom",
713
+ "arrow-point-at-center": ""
714
+ }, {
715
+ title: withCtx(() => [
716
+ createElementVNode("div", {
717
+ innerHTML: unref(t)("message.atmIVTips")
718
+ }, null, 8, _hoisted_2)
719
+ ]),
720
+ default: withCtx(() => [
721
+ _hoisted_1,
722
+ createVNode(_component_g_icon, { type: "info_question_circle" })
723
+ ]),
724
+ _: 1
725
+ })
726
+ ]),
727
+ tool: withCtx(() => [
728
+ !state.showTableCard ? (openBlock(), createElementBlock(
729
+ Fragment,
730
+ { key: 0 },
731
+ [
732
+ createVNode(_component_g_select, {
733
+ value: state.period,
734
+ "onUpdate:value": _cache[0] || (_cache[0] = ($event) => state.period = $event),
735
+ onChange: handleChangePeriod,
736
+ size: unref(isPC) ? "small" : "medium",
737
+ class: "period-select"
738
+ }, {
739
+ default: withCtx(() => [
740
+ (openBlock(true), createElementBlock(
741
+ Fragment,
742
+ null,
743
+ renderList(unref(periodList), (periodItem) => {
744
+ return openBlock(), createBlock(_component_g_select_option, {
745
+ value: periodItem.value
746
+ }, {
747
+ default: withCtx(() => [
748
+ createTextVNode(
749
+ toDisplayString(periodItem.label),
750
+ 1
751
+ )
752
+ ]),
753
+ _: 2
754
+ }, 1032, ["value"]);
755
+ }),
756
+ 256
757
+ ))
758
+ ]),
759
+ _: 1
760
+ }, 8, ["value", "size"]),
761
+ createElementVNode(
762
+ "span",
763
+ _hoisted_3,
764
+ toDisplayString(state.periodDateRange),
765
+ 1
766
+ )
767
+ ],
768
+ 64
769
+ )) : createCommentVNode("v-if", true),
770
+ createVNode(_component_g_select, {
771
+ value: state.range,
772
+ "onUpdate:value": _cache[1] || (_cache[1] = ($event) => state.range = $event),
773
+ onChange: getTableData,
774
+ class: "input-select second-select",
775
+ size: unref(isPC) ? "small" : "medium"
776
+ }, {
777
+ default: withCtx(() => [
778
+ (openBlock(true), createElementBlock(
779
+ Fragment,
780
+ null,
781
+ renderList(unref(rangeList), (item) => {
782
+ return openBlock(), createBlock(_component_g_select_option, {
783
+ key: item,
784
+ value: item
785
+ }, {
786
+ default: withCtx(() => [
787
+ createTextVNode(
788
+ toDisplayString(item) + " HV:" + toDisplayString(unref(numberFormat)(state.hvMap[item])),
789
+ 1
790
+ ),
791
+ state.hvMap[item] !== null || !isNaN(state.hvMap[item]) ? (openBlock(), createElementBlock("span", _hoisted_4, "%")) : createCommentVNode("v-if", true)
792
+ ]),
793
+ _: 2
794
+ }, 1032, ["value"]);
795
+ }),
796
+ 128
797
+ ))
798
+ ]),
799
+ _: 1
800
+ }, 8, ["value", "size"])
801
+ ]),
802
+ body: withCtx(() => [
803
+ state.showTableCard ? (openBlock(), createBlock(_component_g_chart_table, {
804
+ key: 0,
805
+ tableData: state.tableData,
806
+ name: "IV"
807
+ }, null, 8, ["tableData"])) : (openBlock(), createElementBlock(
808
+ "div",
809
+ _hoisted_5,
810
+ [
811
+ createElementVNode(
812
+ "div",
813
+ {
814
+ class: normalizeClass({
815
+ "h5-legend-box-hover": state.isToolTipShow,
816
+ "h5-legend-box": true,
817
+ "pc-hide": true
818
+ })
819
+ },
820
+ [
821
+ createElementVNode(
822
+ "h6",
823
+ _hoisted_6,
824
+ toDisplayString(state.toolTipTitle),
825
+ 1
826
+ ),
827
+ createElementVNode("div", _hoisted_7, [
828
+ (openBlock(true), createElementBlock(
829
+ Fragment,
830
+ null,
831
+ renderList(unref(legendList).slice(1), (legendItem) => {
832
+ var _a, _b, _c, _d;
833
+ return openBlock(), createElementBlock("div", {
834
+ key: legendItem.label
835
+ }, [
836
+ createElementVNode(
837
+ "span",
838
+ {
839
+ style: normalizeStyle({ backgroundColor: legendItem.color }),
840
+ class: "legend-line"
841
+ },
842
+ null,
843
+ 4
844
+ ),
845
+ createElementVNode("div", null, [
846
+ createElementVNode(
847
+ "div",
848
+ null,
849
+ toDisplayString(legendItem.label),
850
+ 1
851
+ ),
852
+ createElementVNode(
853
+ "p",
854
+ {
855
+ class: normalizeClass({
856
+ "positive-text": (_b = (_a = state.legendMap) == null ? void 0 : _a[legendItem.value]) == null ? void 0 : _b.includes("+"),
857
+ "negative-text": (_d = (_c = state.legendMap) == null ? void 0 : _c[legendItem.value]) == null ? void 0 : _d.includes("-")
858
+ })
859
+ },
860
+ toDisplayString(state.legendMap[legendItem.value]),
861
+ 3
862
+ )
863
+ ])
864
+ ]);
865
+ }),
866
+ 128
867
+ ))
868
+ ])
869
+ ],
870
+ 2
871
+ ),
872
+ createVNode(_component_g_chart, {
873
+ class: "skew-chart",
874
+ option: setOption(),
875
+ onShowTip: _cache[2] || (_cache[2] = ($event) => handleTipShow(true)),
876
+ onHideTip: _cache[3] || (_cache[3] = ($event) => handleTipShow(false))
877
+ }, null, 8, ["option"])
878
+ ],
879
+ 512
880
+ ))
881
+ ]),
882
+ _: 1
883
+ }, 8, ["currency", "exchange", "loading"])
884
+ ],
885
+ 2
886
+ );
887
+ };
24
888
  }
25
889
  });
890
+ var PanelAtmIv = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/luobowen/Desktop/greeks/greeks-live-ui/packages/components/panel-atm-iv/src/panel-atm-iv.vue"]]);
26
891
 
27
- export { panelAtmIvEmits, panelAtmIvProps };
892
+ export { PanelAtmIv as default };
28
893
  //# sourceMappingURL=panel-atm-iv2.mjs.map