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,384 @@
1
- import '../../../utils/index.mjs';
2
- import { buildProps } from '../../../utils/vue/props/runtime.mjs';
1
+ import { defineComponent, reactive, computed, watch, onMounted, resolveComponent, openBlock, createElementBlock, normalizeClass, unref, createVNode, isRef, withCtx, createElementVNode, createTextVNode, toDisplayString } from 'vue';
2
+ import '../../../hooks/index.mjs';
3
+ import { numberFormat, timestampFormat, moneyFormat } from '../../../utils/chartHelp.mjs';
4
+ import { getOpenInterestStatistics } from '../../../utils/dataLab.mjs';
5
+ import { panelOptionOpenInterestProps, panelOptionOpenInterestEmits } from './panel-option-open-interest2.mjs';
6
+ import _export_sfc from '../../../../_virtual/plugin-vue_export-helper.mjs';
7
+ import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
8
+ import { useLocale } from '../../../hooks/use-locale/index.mjs';
9
+ import { useDeviceType } from '../../../hooks/use-device-type/index.mjs';
10
+ import { useTheme } from '../../../hooks/use-theme/index.mjs';
3
11
 
4
- const panelOptionOpenInterestEmits = {
5
- "update:currency": (currency) => true,
6
- "update:exchange": (exchange) => true
12
+ const _hoisted_1 = ["innerHTML"];
13
+ const _hoisted_2 = { class: "period-range h5-hide" };
14
+ const _hoisted_3 = {
15
+ class: "echart",
16
+ ref: "echart"
7
17
  };
8
- const panelOptionOpenInterestProps = 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
18
+ const _hoisted_4 = { class: "footer-pcr" };
19
+ const _hoisted_5 = ["innerHTML"];
20
+ const __default__ = {
21
+ name: "GPanelOptionOpenInterest"
22
+ };
23
+ const _sfc_main = /* @__PURE__ */ defineComponent({
24
+ ...__default__,
25
+ props: panelOptionOpenInterestProps,
26
+ emits: panelOptionOpenInterestEmits,
27
+ setup(__props, { emit }) {
28
+ const props = __props;
29
+ const ns = useNamespace("panel-option-open-interest");
30
+ const { t } = useLocale();
31
+ const { isMobile } = useDeviceType();
32
+ const { isDark } = useTheme();
33
+ const dataTypeList = [
34
+ { value: "expire", label: "Expire" },
35
+ { value: "strike", label: "Strike" }
36
+ ];
37
+ const state = reactive({
38
+ loadingFlag: false,
39
+ exchange: props.exchange || props.defaultExchange || "Deribit",
40
+ currency: props.currency || props.defaultCurrency || "BTC",
41
+ dataType: "expire",
42
+ pcr: 0,
43
+ usdTotal: "",
44
+ coinTotal: "",
45
+ chartData: {}
46
+ });
47
+ const currency = computed({
48
+ get: () => props.currency || state.currency || "BTC",
49
+ set: (newVal) => {
50
+ props.currency ? emit("update:currency", newVal) : state.currency = newVal;
51
+ }
52
+ });
53
+ const exchange = computed({
54
+ get: () => props.exchange || state.exchange || "Deribit",
55
+ set: (newVal) => {
56
+ props.exchange ? emit("update:exchange", newVal) : state.exchange = newVal;
57
+ }
58
+ });
59
+ watch(currency, () => {
60
+ fetchData();
61
+ });
62
+ watch(exchange, () => {
63
+ fetchData();
64
+ });
65
+ const fetchData = () => {
66
+ state.loadingFlag = true;
67
+ getOpenInterestStatistics({ currency: currency.value }).then((res) => {
68
+ if (res && res.code === 200) {
69
+ state.chartData = res.data;
70
+ }
71
+ }).finally(() => {
72
+ state.loadingFlag = false;
73
+ });
74
+ };
75
+ onMounted(() => {
76
+ fetchData();
77
+ });
78
+ const getEchartData = () => {
79
+ let date = [];
80
+ let openInterestCall = [];
81
+ let openInterestCallTotal = 0;
82
+ let openInterestPut = [];
83
+ let openInterestPutTotal = 0;
84
+ let openInterestVolume = [];
85
+ let totalVolume = 0;
86
+ let openInterestRate = [];
87
+ if (state.dataType === "strike") {
88
+ const data = state.chartData.by_strike || [];
89
+ data.forEach((item) => {
90
+ date.push(`$${numberFormat(item.strike, 0)}`);
91
+ let callVolume = item.open_interest_call;
92
+ let putVolume = item.open_interest_put;
93
+ openInterestCall.push(callVolume);
94
+ openInterestCallTotal += callVolume;
95
+ openInterestPut.push(putVolume);
96
+ openInterestPutTotal += putVolume;
97
+ });
98
+ } else {
99
+ const data = state.chartData.by_expiry || [];
100
+ data.forEach((item) => {
101
+ date.push(timestampFormat(item.end_ts, "{m}/{d}"));
102
+ let callVolume = item.open_interest_call;
103
+ let putVolume = item.open_interest_put;
104
+ openInterestCall.push(callVolume);
105
+ openInterestCallTotal += callVolume;
106
+ openInterestPut.push(putVolume);
107
+ openInterestPutTotal += putVolume;
108
+ let sumVolume = callVolume + putVolume;
109
+ openInterestVolume.push(sumVolume);
110
+ totalVolume += sumVolume;
111
+ });
112
+ openInterestRate = openInterestVolume.map((item) => {
113
+ return item / totalVolume * 100;
114
+ });
115
+ }
116
+ state.pcr = openInterestPutTotal / openInterestCallTotal;
117
+ return {
118
+ date,
119
+ openInterestCallTotal,
120
+ openInterestCall,
121
+ openInterestPutTotal,
122
+ openInterestPut,
123
+ openInterestRate
124
+ };
125
+ };
126
+ const getEchartOption = (params) => {
127
+ if (!params)
128
+ return {};
129
+ const {
130
+ date,
131
+ openInterestCallTotal,
132
+ openInterestCall,
133
+ openInterestPutTotal,
134
+ openInterestPut,
135
+ openInterestRate
136
+ } = params;
137
+ const option = {
138
+ tooltip: {
139
+ trigger: "axis",
140
+ axisPointer: {
141
+ type: "shadow",
142
+ backgroundColor: isDark.value ? "#E9ECEF" : "#292F3D",
143
+ textStyle: {
144
+ color: isDark.value ? "#000000" : "#FFFFFF",
145
+ fontSize: 12,
146
+ lineHeight: 16,
147
+ fontWeight: 400
148
+ }
149
+ },
150
+ formatter: function(params2) {
151
+ var _a, _b;
152
+ let seriesName0 = "";
153
+ let seriesName1 = "";
154
+ let html = `
155
+ <div style="display: flex;justify-content: space-between;align-items: center;"><div>${params2[0].axisValue}</div></div>
156
+ `;
157
+ if (params2[0]) {
158
+ seriesName0 = params2[0].seriesName.split(" ")[0];
159
+ html += `
160
+ <div style="display: flex;justify-content: space-between;align-items: center;"><div style="margin-right: 40px;">${params2[0].marker} ${seriesName0}</div><div>${numberFormat(
161
+ params2[0].data,
162
+ 2
163
+ )}</div></div>
164
+ `;
165
+ }
166
+ if (params2[1]) {
167
+ seriesName1 = params2[1].seriesName.split(" ")[0];
168
+ html += `
169
+ <div style="display: flex;justify-content: space-between;align-items: center;"><div style="margin-right: 40px;">${params2[1].marker} ${seriesName1}</div><div>${numberFormat(
170
+ params2[1].data,
171
+ 2
172
+ )}</div></div>
173
+ `;
174
+ }
175
+ if (((_a = params2[0]) == null ? void 0 : _a.data) && ((_b = params2[1]) == null ? void 0 : _b.data)) {
176
+ html += `
177
+ <div style="display: flex;justify-content: space-between;align-items: center;"><div style="margin-right: 40px;margin-left: 18px;">PCR</div><div>${numberFormat(
178
+ params2[1].data / params2[0].data,
179
+ 2
180
+ )}</div></div>
181
+ `;
182
+ }
183
+ return html;
184
+ }
185
+ },
186
+ legend: {
187
+ top: "3%",
188
+ textStyle: {
189
+ color: isDark.value ? "#ADB5BD" : "#596169"
190
+ }
191
+ },
192
+ xAxis: {
193
+ type: "category",
194
+ data: date,
195
+ axisLabel: {
196
+ color: isDark.value ? "#CED4DA" : "#343A40",
197
+ fontWeight: 400,
198
+ fontSize: 10,
199
+ rotate: state.dataType === "strike" ? 90 : 0
200
+ },
201
+ axisTick: {
202
+ show: false
203
+ },
204
+ axisLine: {
205
+ show: false,
206
+ lineStyle: {
207
+ color: isDark.value ? "#CED4DA" : "#343A40"
208
+ }
209
+ }
210
+ },
211
+ yAxis: [
212
+ {
213
+ type: "value",
214
+ name: `Open Interest(${currency.value})`,
215
+ nameLocation: "end",
216
+ nameGap: -85,
217
+ nameRotate: 90,
218
+ nameTextStyle: {
219
+ color: isDark.value ? "#8B959F" : "#8B959F",
220
+ fontWeight: 400,
221
+ fontSize: 10
222
+ },
223
+ axisLabel: {
224
+ show: true,
225
+ color: isDark.value ? "#CED4DA" : "#343A40",
226
+ fontWeight: 400,
227
+ fontSize: 10
228
+ },
229
+ axisLine: {
230
+ lineStyle: {
231
+ color: isDark.value ? "#CED4DA" : "#343A40"
232
+ }
233
+ },
234
+ splitLine: {
235
+ lineStyle: {
236
+ color: isDark.value ? "#2B2F32" : "#F1F1F1",
237
+ width: 1,
238
+ type: "dashed"
239
+ }
240
+ }
241
+ }
242
+ ],
243
+ grid: {
244
+ left: 10,
245
+ right: 10,
246
+ bottom: 10,
247
+ containLabel: true
248
+ },
249
+ series: [
250
+ {
251
+ name: `Calls (${moneyFormat(numberFormat(openInterestCallTotal, 2))})`,
252
+ type: "bar",
253
+ stack: "optionGlobalOpenInterestbyStrike",
254
+ color: "#F76560",
255
+ emphasis: {
256
+ focus: "series"
257
+ },
258
+ data: openInterestCall,
259
+ itemStyle: {
260
+ borderRadius: 0
261
+ }
262
+ },
263
+ {
264
+ name: `Puts (${moneyFormat(numberFormat(openInterestPutTotal, 2))})`,
265
+ type: "bar",
266
+ stack: "optionGlobalOpenInterestbyStrike",
267
+ color: "#94BFFF",
268
+ emphasis: {
269
+ focus: "series"
270
+ },
271
+ data: openInterestPut,
272
+ itemStyle: {
273
+ borderRadius: 0
274
+ },
275
+ label: {
276
+ show: state.dataType === "strike" ? false : true,
277
+ position: "top",
278
+ formatter: (params2) => {
279
+ return numberFormat(openInterestRate[params2.dataIndex], 2) + "%";
280
+ }
281
+ }
282
+ }
283
+ ]
284
+ };
285
+ if (isMobile.value) {
286
+ option.series = option.series.map((v) => ({ ...v, symbol: "circle" }));
287
+ }
288
+ return option;
289
+ };
290
+ const setOption = () => {
291
+ return getEchartOption(getEchartData());
292
+ };
293
+ return (_ctx, _cache) => {
294
+ const _component_g_icon = resolveComponent("g-icon");
295
+ const _component_g_tooltip = resolveComponent("g-tooltip");
296
+ const _component_g_toggle_button = resolveComponent("g-toggle-button");
297
+ const _component_g_chart = resolveComponent("g-chart");
298
+ const _component_g_chart_panel = resolveComponent("g-chart-panel");
299
+ return openBlock(), createElementBlock(
300
+ "div",
301
+ {
302
+ class: normalizeClass([unref(ns).b()])
303
+ },
304
+ [
305
+ createVNode(_component_g_chart_panel, {
306
+ currency: unref(currency),
307
+ "onUpdate:currency": _cache[1] || (_cache[1] = ($event) => isRef(currency) ? currency.value = $event : null),
308
+ exchange: unref(exchange),
309
+ "onUpdate:exchange": _cache[2] || (_cache[2] = ($event) => isRef(exchange) ? exchange.value = $event : null),
310
+ loading: state.loadingFlag,
311
+ onRefresh: fetchData
312
+ }, {
313
+ title: withCtx(() => [
314
+ createVNode(_component_g_tooltip, { placement: "bottom" }, {
315
+ title: withCtx(() => [
316
+ createElementVNode("div", {
317
+ innerHTML: unref(t)("message.optionsOpenInterestTips")
318
+ }, null, 8, _hoisted_1)
319
+ ]),
320
+ default: withCtx(() => [
321
+ createTextVNode(
322
+ toDisplayString(unref(t)("message.optionsOpenInterest")) + " ",
323
+ 1
324
+ ),
325
+ createVNode(_component_g_icon, { type: "info_question_circle" })
326
+ ]),
327
+ _: 1
328
+ })
329
+ ]),
330
+ tool: withCtx(() => [
331
+ createElementVNode(
332
+ "span",
333
+ _hoisted_2,
334
+ toDisplayString(unref(t)("message.expirationAsOf")) + toDisplayString(unref(timestampFormat)(/* @__PURE__ */ new Date(), "{y}/{m}/{d}")),
335
+ 1
336
+ ),
337
+ createVNode(_component_g_toggle_button, {
338
+ modelValue: state.dataType,
339
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => state.dataType = $event),
340
+ options: dataTypeList
341
+ }, null, 8, ["modelValue"])
342
+ ]),
343
+ body: withCtx(() => [
344
+ createElementVNode(
345
+ "div",
346
+ _hoisted_3,
347
+ [
348
+ createVNode(_component_g_chart, {
349
+ class: "skew-chart",
350
+ option: setOption()
351
+ }, null, 8, ["option"])
352
+ ],
353
+ 512
354
+ ),
355
+ createElementVNode("div", _hoisted_4, [
356
+ createVNode(_component_g_tooltip, { placement: "right" }, {
357
+ title: withCtx(() => [
358
+ createElementVNode("div", {
359
+ innerHTML: unref(t)("message.cprTips")
360
+ }, null, 8, _hoisted_5)
361
+ ]),
362
+ default: withCtx(() => [
363
+ createTextVNode(
364
+ " PCR:\xA0" + toDisplayString(unref(numberFormat)(state.pcr)) + " ",
365
+ 1
366
+ ),
367
+ createVNode(_component_g_icon, { type: "info_question_circle" })
368
+ ]),
369
+ _: 1
370
+ })
371
+ ])
372
+ ]),
373
+ _: 1
374
+ }, 8, ["currency", "exchange", "loading"])
375
+ ],
376
+ 2
377
+ );
378
+ };
24
379
  }
25
380
  });
381
+ var PanelOptionOpenInterest = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/Users/luobowen/Desktop/greeks/greeks-live-ui/packages/components/panel-option-open-interest/src/panel-option-open-interest.vue"]]);
26
382
 
27
- export { panelOptionOpenInterestEmits, panelOptionOpenInterestProps };
383
+ export { PanelOptionOpenInterest as default };
28
384
  //# sourceMappingURL=panel-option-open-interest.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"panel-option-open-interest.mjs","sources":["../../../../../../../packages/components/panel-option-open-interest/src/panel-option-open-interest.ts"],"sourcesContent":["import { buildProps } from '@greeks-live-ui/utils'\nimport type PanelOptionOpenInterest from './panel-option-open-interest.vue'\nimport type { ExtractPropTypes } from 'vue'\n\nexport const panelOptionOpenInterestEmits = {\n 'update:currency': (currency: string) => true,\n 'update:exchange': (exchange: string) => true,\n}\nexport type PanelOptionOpenInterestEmits = typeof panelOptionOpenInterestEmits\nexport const panelOptionOpenInterestProps = buildProps({\n defaultCurrency: {\n type: String,\n required: false,\n },\n defaultExchange: {\n type: String,\n required: false,\n },\n currency: {\n type: String,\n required: false,\n },\n exchange: {\n type: String,\n required: false,\n },\n})\nexport type PanelOptionOpenInterestProps = ExtractPropTypes<typeof panelOptionOpenInterestProps>\nexport type PanelOptionOpenInterestInstance = InstanceType<typeof PanelOptionOpenInterest>\n"],"names":[],"mappings":";;;AAIO,MAAM,4BAA+B,GAAA;AAAA,EAC1C,iBAAA,EAAmB,CAAC,QAAqB,KAAA,IAAA;AAAA,EACzC,iBAAA,EAAmB,CAAC,QAAqB,KAAA,IAAA;AAC3C,EAAA;AAEO,MAAM,+BAA+B,UAAW,CAAA;AAAA,EACrD,eAAiB,EAAA;AAAA,IACf,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,GACZ;AAAA,EACA,eAAiB,EAAA;AAAA,IACf,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,GACZ;AAAA,EACA,QAAU,EAAA;AAAA,IACR,IAAM,EAAA,MAAA;AAAA,IACN,QAAU,EAAA,KAAA;AAAA,GACZ;AACF,CAAC;;;;"}
1
+ {"version":3,"file":"panel-option-open-interest.mjs","sources":["../../../../../../../packages/components/panel-option-open-interest/src/panel-option-open-interest.vue"],"sourcesContent":["<template>\n <div :class=\"[ns.b()]\">\n <g-chart-panel\n v-model:currency=\"currency\"\n v-model:exchange=\"exchange\"\n :loading=\"state.loadingFlag\"\n @refresh=\"fetchData\"\n >\n <template #title>\n <g-tooltip placement=\"bottom\">\n {{ t('message.optionsOpenInterest') }}\n <g-icon type=\"info_question_circle\" />\n <template #title>\n <div v-html=\"t('message.optionsOpenInterestTips')\"></div>\n </template>\n </g-tooltip>\n </template>\n <template #tool>\n <span class=\"period-range h5-hide\"\n >{{ t('message.expirationAsOf')\n }}{{ timestampFormat(new Date(), '{y}/{m}/{d}') }}</span\n >\n <g-toggle-button\n v-model=\"state.dataType\"\n :options=\"dataTypeList\"\n ></g-toggle-button>\n </template>\n <template #body>\n <div class=\"echart\" ref=\"echart\">\n <g-chart class=\"skew-chart\" :option=\"setOption()\"></g-chart>\n </div>\n\n <div class=\"footer-pcr\">\n <g-tooltip placement=\"right\">\n PCR:&nbsp;{{ numberFormat(state.pcr) }}\n <g-icon type=\"info_question_circle\" />\n <template #title>\n <div v-html=\"t('message.cprTips')\"></div>\n </template>\n </g-tooltip>\n </div>\n </template>\n </g-chart-panel>\n </div>\n</template>\n<script lang=\"ts\" setup>\nimport { useNamespace, useDeviceType, useTheme } from '@greeks-live-ui/hooks';\nimport { reactive, onMounted, computed, watch } from 'vue';\nimport { useLocale } from '@greeks-live-ui/hooks';\n\nimport {\n numberFormat,\n timestampFormat,\n moneyFormat,\n} from '@greeks-live-ui/utils/chartHelp';\nimport {\n getOpenInterestStatistics,\n IByStrikeItem,\n IOpenInterestStatisticsRes,\n} from '@greeks-live-ui/utils/dataLab';\nimport {\n panelOptionOpenInterestEmits,\n panelOptionOpenInterestProps,\n} from './panel-option-open-interest';\n\ndefineOptions({\n name: 'GPanelOptionOpenInterest',\n});\nconst props = defineProps(panelOptionOpenInterestProps);\nconst emit = defineEmits(panelOptionOpenInterestEmits);\n\nconst ns = useNamespace('panel-option-open-interest');\nconst { t } = useLocale();\nconst { isMobile } = useDeviceType();\nconst { isDark } = useTheme();\n\nconst dataTypeList = [\n { value: 'expire', label: 'Expire' },\n { value: 'strike', label: 'Strike' },\n];\n\nconst state = reactive({\n loadingFlag: false,\n\n exchange: props.exchange || props.defaultExchange || 'Deribit',\n currency: props.currency || props.defaultCurrency || 'BTC',\n\n dataType: 'expire',\n pcr: 0,\n\n usdTotal: '',\n coinTotal: '',\n\n chartData: {} as IOpenInterestStatisticsRes,\n});\n\nconst currency = computed({\n get: () => props.currency || state.currency || 'BTC',\n set: (newVal) => {\n props.currency\n ? emit('update:currency', newVal)\n : (state.currency = newVal);\n },\n});\n\nconst exchange = computed({\n get: () => props.exchange || state.exchange || 'Deribit',\n set: (newVal) => {\n props.exchange\n ? emit('update:exchange', newVal)\n : (state.exchange = newVal);\n },\n});\n\nwatch(currency, () => {\n fetchData();\n});\n\nwatch(exchange, () => {\n fetchData();\n});\n\nconst fetchData = () => {\n state.loadingFlag = true;\n getOpenInterestStatistics({ currency: currency.value })\n .then((res) => {\n if (res && res.code === 200) {\n state.chartData = res.data as IOpenInterestStatisticsRes;\n }\n })\n .finally(() => {\n state.loadingFlag = false;\n });\n};\n\nonMounted(() => {\n fetchData();\n});\n\nconst getEchartData = () => {\n let date: string[] = [];\n let openInterestCall: number[] = [];\n let openInterestCallTotal = 0;\n let openInterestPut: number[] = [];\n let openInterestPutTotal = 0;\n let openInterestVolume: number[] = [];\n let totalVolume = 0;\n let openInterestRate: number[] = [];\n\n if (state.dataType === 'strike') {\n const data = state.chartData.by_strike || [];\n data.forEach((item: IByStrikeItem) => {\n date.push(`$${numberFormat(item.strike, 0)}`);\n\n let callVolume = item.open_interest_call;\n let putVolume = item.open_interest_put;\n openInterestCall.push(callVolume);\n openInterestCallTotal += callVolume;\n openInterestPut.push(putVolume);\n openInterestPutTotal += putVolume;\n });\n } else {\n const data = state.chartData.by_expiry || [];\n data.forEach((item) => {\n date.push(timestampFormat(item.end_ts, '{m}/{d}') as string);\n\n let callVolume = item.open_interest_call;\n let putVolume = item.open_interest_put;\n openInterestCall.push(callVolume);\n openInterestCallTotal += callVolume;\n openInterestPut.push(putVolume);\n openInterestPutTotal += putVolume;\n\n let sumVolume = callVolume + putVolume;\n openInterestVolume.push(sumVolume);\n totalVolume += sumVolume;\n });\n\n openInterestRate = openInterestVolume.map((item) => {\n return (item / totalVolume) * 100;\n });\n }\n\n state.pcr = openInterestPutTotal / openInterestCallTotal;\n\n return {\n date,\n openInterestCallTotal,\n openInterestCall,\n openInterestPutTotal,\n openInterestPut,\n openInterestRate,\n };\n};\n\nconst getEchartOption = (params: ReturnType<typeof getEchartData>) => {\n if (!params) return {};\n const {\n date,\n openInterestCallTotal,\n openInterestCall,\n openInterestPutTotal,\n openInterestPut,\n openInterestRate,\n } = params;\n\n const option = {\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n // 坐标轴指示器,坐标轴触发有效\n type: 'shadow', // 默认为直线,可选为:'line' | 'shadow'\n backgroundColor: isDark.value ? '#E9ECEF' : '#292F3D', // 浅色/Grey/14\n textStyle: {\n color: isDark.value ? '#000000' : '#FFFFFF', // 浅色/Grey/White\n fontSize: 12,\n lineHeight: 16,\n fontWeight: 400,\n },\n },\n formatter: function (\n params: Array<{\n axisValueLabel: string;\n axisValue: string;\n seriesName: string;\n color: string;\n value: number;\n marker: string;\n data: number;\n }>\n ) {\n let seriesName0 = '';\n let seriesName1 = '';\n let html = `\n <div style=\"display: flex;justify-content: space-between;align-items: center;\"><div>${params[0].axisValue}</div></div>\n `;\n if (params[0]) {\n seriesName0 = params[0].seriesName.split(' ')[0];\n html += `\n <div style=\"display: flex;justify-content: space-between;align-items: center;\"><div style=\"margin-right: 40px;\">${\n params[0].marker\n } ${seriesName0}</div><div>${numberFormat(\n params[0].data,\n 2\n )}</div></div>\n `;\n }\n if (params[1]) {\n seriesName1 = params[1].seriesName.split(' ')[0];\n html += `\n <div style=\"display: flex;justify-content: space-between;align-items: center;\"><div style=\"margin-right: 40px;\">${\n params[1].marker\n } ${seriesName1}</div><div>${numberFormat(\n params[1].data,\n 2\n )}</div></div>\n `;\n }\n\n if (params[0]?.data && params[1]?.data) {\n html += `\n <div style=\"display: flex;justify-content: space-between;align-items: center;\"><div style=\"margin-right: 40px;margin-left: 18px;\">PCR</div><div>${numberFormat(\n params[1].data / params[0].data,\n 2\n )}</div></div>\n `;\n }\n return html;\n },\n },\n legend: {\n top: '3%',\n textStyle: {\n color: isDark.value ? '#ADB5BD' : '#596169', // 浅色/Grey/10 // 设置图例文字颜色\n },\n },\n xAxis: {\n type: 'category',\n data: date,\n axisLabel: {\n // 坐标轴刻度标签\n color: isDark.value ? '#CED4DA' : '#343A40', // 浅色/Grey/12\n fontWeight: 400,\n fontSize: 10,\n rotate: state.dataType === 'strike' ? 90 : 0, // 倾斜度 -90 至 90 默认为0\n },\n axisTick: {\n show: false, // 隐藏刻度线\n },\n axisLine: {\n show: false, // 隐藏坐标轴轴线\n lineStyle: {\n color: isDark.value ? '#CED4DA' : '#343A40', // 线的颜色 浅色/Grey/12\n },\n },\n },\n yAxis: [\n {\n type: 'value',\n name: `Open Interest(${currency.value})`,\n nameLocation: 'end',\n nameGap: -85,\n nameRotate: 90,\n nameTextStyle: {\n color: isDark.value ? '#8B959F' : '#8B959F', // 浅色/Grey/8\n fontWeight: 400,\n fontSize: 10,\n },\n axisLabel: {\n // 坐标轴刻度标签\n show: true,\n color: isDark.value ? '#CED4DA' : '#343A40', // 浅色/Grey/12\n fontWeight: 400,\n fontSize: 10,\n },\n axisLine: {\n lineStyle: {\n color: isDark.value ? '#CED4DA' : '#343A40', // 线的颜色 浅色/Grey/12\n },\n },\n splitLine: {\n lineStyle: {\n color: isDark.value ? '#2B2F32' : '#F1F1F1', // 网格线颜色 浅色/Grey/3 '#F1F1F1'\n width: 1, // 网格线宽度\n type: 'dashed', // 网格线类型: 'solid', 'dashed', 'dotted'\n },\n },\n },\n ],\n grid: {\n left: 10,\n right: 10,\n bottom: 10,\n containLabel: true,\n },\n\n series: [\n {\n name: `Calls (${moneyFormat(numberFormat(openInterestCallTotal, 2))})`,\n type: 'bar',\n // barWidth: '16px',\n stack: 'optionGlobalOpenInterestbyStrike',\n color: '#F76560',\n emphasis: {\n focus: 'series',\n },\n data: openInterestCall,\n itemStyle: {\n borderRadius: 0,\n },\n },\n {\n name: `Puts (${moneyFormat(numberFormat(openInterestPutTotal, 2))})`,\n type: 'bar',\n // barWidth: '16px',\n stack: 'optionGlobalOpenInterestbyStrike',\n color: '#94BFFF',\n emphasis: {\n focus: 'series',\n },\n data: openInterestPut,\n itemStyle: {\n borderRadius: 0,\n },\n label: {\n show: state.dataType === 'strike' ? false : true,\n position: 'top',\n formatter: (params: { dataIndex: number }) => {\n return numberFormat(openInterestRate[params.dataIndex], 2) + '%';\n },\n },\n },\n ],\n };\n if (isMobile.value) {\n // 移动端显示圆点,防止showTip不触发\n option.series = option.series.map((v) => ({ ...v, symbol: 'circle' }));\n }\n return option;\n};\n\nconst setOption = () => {\n return getEchartOption(getEchartData());\n};\n</script>\n"],"names":["params"],"mappings":"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"}