@amaster.ai/taro-echarts-ui 1.0.0-beta.1 → 1.0.0-beta.50
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/README.md +0 -251
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +18 -2
- package/dist/index.d.ts +18 -2
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/polyfill.cjs +1 -1
- package/dist/polyfill.cjs.map +1 -1
- package/dist/polyfill.d.cts +2 -4
- package/dist/polyfill.d.ts +2 -4
- package/dist/polyfill.js +1 -1
- package/dist/polyfill.js.map +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -68,257 +68,6 @@ function MyChart() {
|
|
|
68
68
|
| `height` | `string` | `'300px'` | Chart height (rpx or px) |
|
|
69
69
|
| `className` | `string` | `''` | Additional CSS class name |
|
|
70
70
|
|
|
71
|
-
### Example: EChartsOption
|
|
72
|
-
|
|
73
|
-
```typescript
|
|
74
|
-
const option: EChartsOption = {
|
|
75
|
-
// Tooltip configuration (required for mini-program)
|
|
76
|
-
tooltip: {
|
|
77
|
-
trigger: 'item' | 'axis',
|
|
78
|
-
confine: true, // Important: keeps tooltip within chart bounds
|
|
79
|
-
},
|
|
80
|
-
|
|
81
|
-
// Chart configuration
|
|
82
|
-
xAxis: { ... },
|
|
83
|
-
yAxis: { ... },
|
|
84
|
-
series: [ ... ],
|
|
85
|
-
}
|
|
86
|
-
```
|
|
87
|
-
|
|
88
|
-
## 📊 Supported Chart Types
|
|
89
|
-
|
|
90
|
-
This package includes **all ECharts chart types and components**, pre-registered and ready to use:
|
|
91
|
-
|
|
92
|
-
### Chart Types
|
|
93
|
-
- **Bar/Column Charts** - `type: 'bar'`
|
|
94
|
-
- **Line Charts** - `type: 'line'`
|
|
95
|
-
- **Pie/Donut Charts** - `type: 'pie'`
|
|
96
|
-
- **Scatter Charts** - `type: 'scatter'`
|
|
97
|
-
- **Radar Charts** - `type: 'radar'`
|
|
98
|
-
- **Candlestick Charts** - `type: 'candlestick'`
|
|
99
|
-
- **K-Line Charts** - `type: 'candlestick'`
|
|
100
|
-
- **Box Plot Charts** - `type: 'boxplot'`
|
|
101
|
-
- **Heatmap Charts** - `type: 'heatmap'`
|
|
102
|
-
- **Tree Charts** - `type: 'tree'`
|
|
103
|
-
- **Treemap Charts** - `type: 'treemap'`
|
|
104
|
-
- **Sunburst Charts** - `type: 'sunburst'`
|
|
105
|
-
- **Graph/Network Charts** - `type: 'graph'`
|
|
106
|
-
- **Sankey Diagrams** - `type: 'sankey'`
|
|
107
|
-
- **Funnel Charts** - `type: 'funnel'`
|
|
108
|
-
- **Gauge Charts** - `type: 'gauge'`
|
|
109
|
-
- **Parallel Coordinates** - `type: 'parallel'`
|
|
110
|
-
- **ThemeRiver** - `type: 'themeRiver'`
|
|
111
|
-
- **Map Charts** - `type: 'map'`
|
|
112
|
-
- **Custom Charts** - `type: 'custom'`
|
|
113
|
-
|
|
114
|
-
### Components
|
|
115
|
-
All ECharts components are included: Grid, Polar, Tooltip, Legend, DataZoom, VisualMap, Timeline, AxisPointer, Brush, MarkPoint, MarkLine, MarkArea, and more.
|
|
116
|
-
|
|
117
|
-
## 📊 Chart Examples
|
|
118
|
-
|
|
119
|
-
### Bar Chart
|
|
120
|
-
|
|
121
|
-
```tsx
|
|
122
|
-
const option: EChartsOption = {
|
|
123
|
-
tooltip: { trigger: 'axis', confine: true },
|
|
124
|
-
xAxis: {
|
|
125
|
-
type: 'category',
|
|
126
|
-
data: ['A', 'B', 'C', 'D']
|
|
127
|
-
},
|
|
128
|
-
yAxis: { type: 'value' },
|
|
129
|
-
series: [{
|
|
130
|
-
type: 'bar',
|
|
131
|
-
data: [10, 20, 30, 40],
|
|
132
|
-
barWidth: '50%',
|
|
133
|
-
}]
|
|
134
|
-
}
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
### Line Chart
|
|
138
|
-
|
|
139
|
-
```tsx
|
|
140
|
-
const option: EChartsOption = {
|
|
141
|
-
tooltip: { trigger: 'axis', confine: true },
|
|
142
|
-
xAxis: {
|
|
143
|
-
type: 'category',
|
|
144
|
-
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
|
|
145
|
-
},
|
|
146
|
-
yAxis: { type: 'value' },
|
|
147
|
-
series: [{
|
|
148
|
-
type: 'line',
|
|
149
|
-
data: [150, 230, 224, 218, 135],
|
|
150
|
-
smooth: true,
|
|
151
|
-
}]
|
|
152
|
-
}
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
### Pie Chart
|
|
156
|
-
|
|
157
|
-
```tsx
|
|
158
|
-
const option: EChartsOption = {
|
|
159
|
-
tooltip: { trigger: 'item', confine: true },
|
|
160
|
-
series: [{
|
|
161
|
-
type: 'pie',
|
|
162
|
-
radius: ['40%', '70%'],
|
|
163
|
-
data: [
|
|
164
|
-
{ value: 335, name: 'Category A' },
|
|
165
|
-
{ value: 234, name: 'Category B' },
|
|
166
|
-
{ value: 154, name: 'Category C' }
|
|
167
|
-
]
|
|
168
|
-
}]
|
|
169
|
-
}
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
### Radar Chart
|
|
173
|
-
|
|
174
|
-
```tsx
|
|
175
|
-
const option: EChartsOption = {
|
|
176
|
-
tooltip: { confine: true },
|
|
177
|
-
radar: {
|
|
178
|
-
indicator: [
|
|
179
|
-
{ name: 'Metric 1', max: 100 },
|
|
180
|
-
{ name: 'Metric 2', max: 100 },
|
|
181
|
-
{ name: 'Metric 3', max: 100 }
|
|
182
|
-
]
|
|
183
|
-
},
|
|
184
|
-
series: [{
|
|
185
|
-
type: 'radar',
|
|
186
|
-
data: [{ value: [60, 73, 85] }]
|
|
187
|
-
}]
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
## ⚙️ Configuration Best Practices
|
|
192
|
-
|
|
193
|
-
### 1. Always Set `tooltip.confine: true`
|
|
194
|
-
|
|
195
|
-
This prevents tooltips from overflowing the chart area in mini-programs:
|
|
196
|
-
|
|
197
|
-
```tsx
|
|
198
|
-
tooltip: {
|
|
199
|
-
confine: true, // ✅ Required for mini-program
|
|
200
|
-
}
|
|
201
|
-
```
|
|
202
|
-
|
|
203
|
-
### 2. Use `type: 'line'` for AxisPointer
|
|
204
|
-
|
|
205
|
-
Avoid using `'shadow'` type which may cause visual issues:
|
|
206
|
-
|
|
207
|
-
```tsx
|
|
208
|
-
tooltip: {
|
|
209
|
-
axisPointer: {
|
|
210
|
-
type: 'line', // ✅ Use 'line' instead of 'shadow'
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### 3. Disable Shadows in Emphasis
|
|
216
|
-
|
|
217
|
-
Mini-program Canvas may not render shadows correctly:
|
|
218
|
-
|
|
219
|
-
```tsx
|
|
220
|
-
emphasis: {
|
|
221
|
-
itemStyle: {
|
|
222
|
-
shadowBlur: 0,
|
|
223
|
-
shadowColor: 'transparent',
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
## 🔧 Advanced Usage
|
|
229
|
-
|
|
230
|
-
### Custom Chart with Multiple Series
|
|
231
|
-
|
|
232
|
-
```tsx
|
|
233
|
-
const option: EChartsOption = {
|
|
234
|
-
tooltip: { trigger: 'axis', confine: true },
|
|
235
|
-
legend: { data: ['Sales', 'Volume'] },
|
|
236
|
-
xAxis: {
|
|
237
|
-
type: 'category',
|
|
238
|
-
data: ['Jan', 'Feb', 'Mar']
|
|
239
|
-
},
|
|
240
|
-
yAxis: [
|
|
241
|
-
{ type: 'value', name: 'Sales' },
|
|
242
|
-
{ type: 'value', name: 'Volume' }
|
|
243
|
-
],
|
|
244
|
-
series: [
|
|
245
|
-
{
|
|
246
|
-
name: 'Sales',
|
|
247
|
-
type: 'line',
|
|
248
|
-
data: [120, 200, 150],
|
|
249
|
-
yAxisIndex: 0,
|
|
250
|
-
},
|
|
251
|
-
{
|
|
252
|
-
name: 'Volume',
|
|
253
|
-
type: 'bar',
|
|
254
|
-
data: [80, 100, 90],
|
|
255
|
-
yAxisIndex: 1,
|
|
256
|
-
}
|
|
257
|
-
]
|
|
258
|
-
}
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
## 🐛 Troubleshooting
|
|
262
|
-
|
|
263
|
-
### Chart Not Displaying
|
|
264
|
-
|
|
265
|
-
**Problem:** Chart doesn't render in mini-program
|
|
266
|
-
|
|
267
|
-
**Solution:** Make sure you're using the `ECharts` component from this package, not raw Canvas:
|
|
268
|
-
|
|
269
|
-
```tsx
|
|
270
|
-
// ✅ Correct
|
|
271
|
-
import { ECharts } from '@amaster.ai/taro-echarts-ui'
|
|
272
|
-
<ECharts option={option} />
|
|
273
|
-
|
|
274
|
-
// ❌ Wrong
|
|
275
|
-
import { Canvas } from '@tarojs/components'
|
|
276
|
-
<Canvas type="2d" />
|
|
277
|
-
```
|
|
278
|
-
|
|
279
|
-
### No Touch Interaction
|
|
280
|
-
|
|
281
|
-
**Problem:** Clicking/touching chart doesn't show tooltip
|
|
282
|
-
|
|
283
|
-
**Solution:** The component handles touch events automatically. Make sure `tooltip` is configured:
|
|
284
|
-
|
|
285
|
-
```tsx
|
|
286
|
-
tooltip: {
|
|
287
|
-
trigger: 'item', // or 'axis'
|
|
288
|
-
confine: true,
|
|
289
|
-
}
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
### Black Shadow on Tooltip
|
|
293
|
-
|
|
294
|
-
**Problem:** Black shadow appears when tooltip is shown
|
|
295
|
-
|
|
296
|
-
**Solution:** Use `type: 'line'` for axisPointer:
|
|
297
|
-
|
|
298
|
-
```tsx
|
|
299
|
-
tooltip: {
|
|
300
|
-
axisPointer: {
|
|
301
|
-
type: 'line', // Don't use 'shadow'
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
```
|
|
305
|
-
|
|
306
|
-
## 📚 Related Resources
|
|
307
|
-
|
|
308
|
-
- [ECharts Official Documentation](https://echarts.apache.org/)
|
|
309
|
-
- [ECharts Configuration Manual](https://echarts.apache.org/en/option.html)
|
|
310
|
-
- [Taro Documentation](https://taro-docs.jd.com/)
|
|
311
|
-
|
|
312
|
-
## 🤝 Contributing
|
|
313
|
-
|
|
314
|
-
Contributions are welcome! Please feel free to submit a Pull Request.
|
|
315
|
-
|
|
316
71
|
## 📄 License
|
|
317
72
|
|
|
318
73
|
MIT © Amaster Team
|
|
319
|
-
|
|
320
|
-
## 🔗 Links
|
|
321
|
-
|
|
322
|
-
- [NPM Package](https://www.npmjs.com/package/@amaster.ai/taro-echarts-ui)
|
|
323
|
-
- [GitHub Repository](https://github.com/amaster-ai/amaster-js)
|
|
324
|
-
- [Issue Tracker](https://github.com/amaster-ai/amaster-js/issues)
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var components
|
|
1
|
+
'use strict';var components=require('@tarojs/components'),E=require('@tarojs/taro'),react=require('react'),platform=require('zrender/lib/core/platform'),jsxRuntime=require('react/jsx-runtime');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var E__default=/*#__PURE__*/_interopDefault(E);var b=null;function dt(){if(b)return b;try{b=E__default.default.createOffscreenCanvas({type:"2d",width:2,height:2})?.getContext("2d");}catch{}return b}function I(){E__default.default.getEnv()!==E__default.default.ENV_TYPE.WEB&&platform.setPlatformAPI({createCanvas:()=>{try{return E__default.default.createOffscreenCanvas({type:"2d",width:1,height:1})}catch{return {getContext:()=>null}}},measureText:(t,i)=>{let e=dt();if(!e)return {width:0};try{return e.font=i||"12px sans-serif",{width:e.measureText(t)?.width||0}}catch{return {width:0}}},loadImage:(t,i,e)=>{try{let r=E__default.default.createImage?.();if(!r)return e();r.onload=()=>i(r),r.onerror=e,r.src=t;}catch{e();}},requestAnimationFrame:t=>setTimeout(t,16),cancelAnimationFrame:t=>clearTimeout(t)});}function L(t,i){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let e=t.getContext.bind(t);t.getContext=s=>s==="2d"||s==="2d-text"?i:e(s),t.style||(t.style={}),t.setAttribute||(t.setAttribute=()=>{}),t.getAttribute||(t.getAttribute=()=>null),t.removeAttribute||(t.removeAttribute=()=>{}),t.getBoundingClientRect||(t.getBoundingClientRect=()=>({top:0,left:0,width:t.width,height:t.height,right:t.width,bottom:t.height}));let r=t.devicePixelRatio||1,l=(s,h)=>{Object.getOwnPropertyDescriptor(t,s)||Object.defineProperty(t,s,{get:h});};return l("offsetWidth",()=>t.width/r),l("offsetHeight",()=>t.height/r),l("clientWidth",()=>t.width/r),l("clientHeight",()=>t.height/r),t}var k=null,v=false;async function D(){if(k)return k;I();let t=await import('echarts/core');if(!v){let{CanvasRenderer:i}=await import('echarts/renderers'),{PieChart:e,BarChart:r,LineChart:l,ScatterChart:s,RadarChart:h,MapChart:n,TreeChart:P,TreemapChart:T,GraphChart:y,GaugeChart:w,FunnelChart:m,ParallelChart:C,SankeyChart:A,BoxplotChart:M,CandlestickChart:B,EffectScatterChart:o,LinesChart:g,HeatmapChart:d,PictorialBarChart:u,ThemeRiverChart:f,SunburstChart:a,CustomChart:p}=await import('echarts/charts'),{TitleComponent:c,TooltipComponent:S,GridComponent:R,PolarComponent:x,RadarComponent:V,GeoComponent:$,SingleAxisComponent:Y,ParallelComponent:_,CalendarComponent:q,GraphicComponent:X,ToolboxComponent:Q,AxisPointerComponent:J,BrushComponent:K,LegendComponent:U,DataZoomComponent:j,DataZoomInsideComponent:tt,DataZoomSliderComponent:et,VisualMapComponent:rt,VisualMapContinuousComponent:nt,VisualMapPiecewiseComponent:ot,TimelineComponent:it,AriaComponent:st,TransformComponent:at,DatasetComponent:ut,MarkPointComponent:ct,MarkLineComponent:ht,MarkAreaComponent:pt}=await import('echarts/components');t.use([i,e,r,l,s,h,n,P,T,y,w,m,C,A,M,B,o,g,d,u,f,a,p,c,S,R,x,V,$,Y,_,q,X,Q,J,K,U,j,tt,et,rt,nt,ot,it,st,at,ut,ct,ht,pt]),v=true;}return k=t,t}function G(t,i){if(t==null||t==="")return i;if(typeof t=="number")return `${t}px`;let e=String(t),r=e.match(/^(-?\d+(?:\.\d+)?)(rpx)$/i);return r&&r[1]?`${parseFloat(r[1])/2}px`:e}function W(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(e=>W(e));let i={};for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let r=t[e];e==="shadowBlur"||e==="shadowOffsetX"||e==="shadowOffsetY"?i[e]=0:e==="shadowColor"?i[e]="transparent":typeof r=="object"&&r!==null?i[e]=W(r):i[e]=r;}return i}function N({option:t,height:i="300px",width:e="100%",className:r="",style:l}){let s={width:e,height:i,...l},h=react.useMemo(()=>`chart_${Math.random().toString(36).slice(2,11)}`,[]),n=react.useRef(null),[P,T]=react.useState(false),y=react.useRef(null),w=E__default.default.getEnv()!==E__default.default.ENV_TYPE.WEB,m=react.useMemo(()=>W(t),[t]);react.useEffect(()=>{if(!w){let u=true;(async()=>{try{let p=await D();if(!u)return;let c=document.getElementById(h);if(!c)return;n.current?.dispose(),n.current=p.init(c),n.current.setOption(m),T(!0);}catch(p){console.error("[ECharts] H5 init failed:",p);}})();let a=()=>n.current?.resize();return window.addEventListener("resize",a),()=>{u=false,window.removeEventListener("resize",a),n.current?.dispose(),n.current=null;}}let o=true,g=async(u=0)=>{o&&E__default.default.createSelectorQuery().select(`#${h}`).fields({node:true,size:true}).exec(async f=>{if(!o)return;if(!f?.[0]?.node){u<5&&setTimeout(()=>g(u+1),200*(u+1));return}let a=f[0].node,p=a.getContext("2d");if(!p)return;let c=E__default.default.getSystemInfoSync().pixelRatio,S=f[0].width,R=f[0].height;y.current=a,a.width=S*c,a.height=R*c,p.scale(c,c),a.devicePixelRatio=c,L(a,p),n.current?.dispose(),n.current=null;try{let x=await D();if(!o)return;n.current=x.init(a,null,{width:S,height:R,devicePixelRatio:c}),n.current.setOption(m),T(!0);}catch(x){console.error("[ECharts] Init failed:",x);}});},d=setTimeout(()=>g(),50);return ()=>{o=false,clearTimeout(d),n.current?.dispose(),n.current=null;}},[h,w]),react.useEffect(()=>{P&&n.current&&n.current.setOption(m,true);},[m,P]);let C=(o,g)=>{if(!n.current||!y.current)return;let d=o.touches[0]||o.changedTouches[0];if(!d)return;let u=y.current.getBoundingClientRect();n.current.getZr().handler.dispatch(g,{zrX:d.x-u.left,zrY:d.y-u.top,preventDefault:()=>{},stopPropagation:()=>{},stopImmediatePropagation:()=>{}});},A=o=>{C(o,"mousedown");},M=o=>C(o,"mousemove"),B=o=>{C(o,"mouseup"),C(o,"click");};if(!w){let o={...s,width:G(s.width,"100%"),height:G(s.height,"300px")};return jsxRuntime.jsx("div",{id:h,className:r||void 0,style:o})}return jsxRuntime.jsx(components.Canvas,{id:h,type:"2d",className:r||void 0,style:{width:s.width||"100%",height:s.height||"300px"},disableScroll:true,onTouchStart:A,onTouchMove:M,onTouchEnd:B})}exports.ECharts=N;exports.setupCanvasPolyfill=L;exports.setupWeappZrenderPlatform=I;//# sourceMappingURL=index.cjs.map
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/polyfill.ts","../src/ECharts.tsx"],"names":["tempCtx","setupCanvasPolyfill","canvas","ctx","originalGetContext","contextType","polyfillDocument","originalCreateElement","tagName","mockCanvas","m","CanvasRenderer","PieChart","BarChart","LineChart","ScatterChart","RadarChart","MapChart","TreeChart","TreemapChart","GraphChart","GaugeChart","FunnelChart","ParallelChart","SankeyChart","BoxplotChart","CandlestickChart","EffectScatterChart","LinesChart","HeatmapChart","PictorialBarChart","ThemeRiverChart","SunburstChart","CustomChart","TitleComponent","TooltipComponent","GridComponent","PolarComponent","RadarComponent","GeoComponent","SingleAxisComponent","ParallelComponent","CalendarComponent","GraphicComponent","ToolboxComponent","AxisPointerComponent","BrushComponent","LegendComponent","DataZoomComponent","DataZoomInsideComponent","DataZoomSliderComponent","VisualMapComponent","VisualMapContinuousComponent","VisualMapPiecewiseComponent","TimelineComponent","AriaComponent","TransformComponent","DatasetComponent","MarkPointComponent","MarkLineComponent","MarkAreaComponent","ECharts","option","height","className","canvasId","useRef","chartRef","isReady","setIsReady","useState","canvasNodeRef","useEffect","Taro","container","handleResize","initChart","retryCount","res","dpr","width","error","timer","handleTouch","e","eventType","touch","box","x","y","onTouchStart","onTouchMove","onTouchEnd","jsx","Canvas"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 小程序 Canvas Polyfill\n * 用于 ECharts 在小程序环境下正常工作\n */\n\n// 创建一个临时 canvas 用于文本测量等操作\n// @ts-ignore - tempCanvas is assigned but may not be read directly\nlet tempCanvas: any = null\nlet tempCtx: any = null\n\nexport function setupCanvasPolyfill(canvas: any, ctx: any) {\n // 保存临时 canvas 和 context 供全局使用\n tempCanvas = canvas\n tempCtx = ctx\n\n // 1. 事件监听器\n if (!canvas.addEventListener) {\n canvas.addEventListener = () => {}\n }\n if (!canvas.removeEventListener) {\n canvas.removeEventListener = () => {}\n }\n if (!canvas.dispatchEvent) {\n canvas.dispatchEvent = () => {}\n }\n\n // 2. getContext 方法\n const originalGetContext = canvas.getContext.bind(canvas)\n canvas.getContext = function(contextType: string) {\n if (contextType === '2d' || contextType === '2d-text') {\n return ctx\n }\n return originalGetContext(contextType)\n }\n\n // 3. 样式属性\n if (!canvas.style) {\n canvas.style = {}\n }\n\n // 4. setAttribute 和 getAttribute\n if (!canvas.setAttribute) {\n canvas.setAttribute = () => {}\n }\n if (!canvas.getAttribute) {\n canvas.getAttribute = () => null\n }\n if (!canvas.removeAttribute) {\n canvas.removeAttribute = () => {}\n }\n\n // 5. getBoundingClientRect\n if (!canvas.getBoundingClientRect) {\n canvas.getBoundingClientRect = () => ({\n top: 0,\n left: 0,\n width: canvas.width,\n height: canvas.height,\n right: canvas.width,\n bottom: canvas.height,\n })\n }\n\n // 6. 尺寸属性\n if (!Object.getOwnPropertyDescriptor(canvas, 'offsetWidth')) {\n Object.defineProperty(canvas, 'offsetWidth', {\n get: () => canvas.width / (canvas.devicePixelRatio || 1),\n })\n }\n if (!Object.getOwnPropertyDescriptor(canvas, 'offsetHeight')) {\n Object.defineProperty(canvas, 'offsetHeight', {\n get: () => canvas.height / (canvas.devicePixelRatio || 1),\n })\n }\n if (!Object.getOwnPropertyDescriptor(canvas, 'clientWidth')) {\n Object.defineProperty(canvas, 'clientWidth', {\n get: () => canvas.width / (canvas.devicePixelRatio || 1),\n })\n }\n if (!Object.getOwnPropertyDescriptor(canvas, 'clientHeight')) {\n Object.defineProperty(canvas, 'clientHeight', {\n get: () => canvas.height / (canvas.devicePixelRatio || 1),\n })\n }\n\n return canvas\n}\n\n// Polyfill document.createElement for ECharts\nexport function polyfillDocument() {\n if (typeof document === 'undefined') {\n return\n }\n\n const originalCreateElement = document.createElement.bind(document)\n \n document.createElement = function(tagName: string) {\n if (tagName === 'canvas') {\n // 返回一个模拟的 canvas 对象\n const mockCanvas: any = {\n width: 300,\n height: 150,\n style: {},\n getContext: function(contextType: string) {\n if (contextType === '2d' && tempCtx) {\n return tempCtx\n }\n return null\n },\n addEventListener: () => {},\n removeEventListener: () => {},\n dispatchEvent: () => {},\n setAttribute: () => {},\n getAttribute: () => null,\n removeAttribute: () => {},\n getBoundingClientRect: () => ({\n top: 0,\n left: 0,\n width: 300,\n height: 150,\n right: 300,\n bottom: 150,\n }),\n }\n\n // 添加尺寸属性\n Object.defineProperty(mockCanvas, 'offsetWidth', {\n get: () => mockCanvas.width,\n })\n Object.defineProperty(mockCanvas, 'offsetHeight', {\n get: () => mockCanvas.height,\n })\n Object.defineProperty(mockCanvas, 'clientWidth', {\n get: () => mockCanvas.width,\n })\n Object.defineProperty(mockCanvas, 'clientHeight', {\n get: () => mockCanvas.height,\n })\n\n return mockCanvas\n }\n \n return originalCreateElement(tagName)\n }\n}\n","import { Canvas } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport { useEffect, useRef, useState } from 'react'\nimport * as echarts from 'echarts/core'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport {\n PieChart,\n BarChart,\n LineChart,\n ScatterChart,\n RadarChart,\n MapChart,\n TreeChart,\n TreemapChart,\n GraphChart,\n GaugeChart,\n FunnelChart,\n ParallelChart,\n SankeyChart,\n BoxplotChart,\n CandlestickChart,\n EffectScatterChart,\n LinesChart,\n HeatmapChart,\n PictorialBarChart,\n ThemeRiverChart,\n SunburstChart,\n CustomChart,\n} from 'echarts/charts'\nimport {\n TitleComponent,\n TooltipComponent,\n GridComponent,\n PolarComponent,\n RadarComponent,\n GeoComponent,\n SingleAxisComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n ToolboxComponent,\n AxisPointerComponent,\n BrushComponent,\n LegendComponent,\n DataZoomComponent,\n DataZoomInsideComponent,\n DataZoomSliderComponent,\n VisualMapComponent,\n VisualMapContinuousComponent,\n VisualMapPiecewiseComponent,\n TimelineComponent,\n AriaComponent,\n TransformComponent,\n DatasetComponent,\n MarkPointComponent,\n MarkLineComponent,\n MarkAreaComponent,\n} from 'echarts/components'\nimport type { EChartsOption } from 'echarts'\nimport type { EChartsType } from 'echarts/core'\nimport { setupCanvasPolyfill, polyfillDocument } from './polyfill'\n\n// 注册所有常用组件,确保开箱即用\necharts.use([\n // Renderer\n CanvasRenderer,\n \n // Charts\n PieChart,\n BarChart,\n LineChart,\n ScatterChart,\n RadarChart,\n MapChart,\n TreeChart,\n TreemapChart,\n GraphChart,\n GaugeChart,\n FunnelChart,\n ParallelChart,\n SankeyChart,\n BoxplotChart,\n CandlestickChart,\n EffectScatterChart,\n LinesChart,\n HeatmapChart,\n PictorialBarChart,\n ThemeRiverChart,\n SunburstChart,\n CustomChart,\n \n // Components\n TitleComponent,\n TooltipComponent,\n GridComponent,\n PolarComponent,\n RadarComponent,\n GeoComponent,\n SingleAxisComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n ToolboxComponent,\n AxisPointerComponent,\n BrushComponent,\n LegendComponent,\n DataZoomComponent,\n DataZoomInsideComponent,\n DataZoomSliderComponent,\n VisualMapComponent,\n VisualMapContinuousComponent,\n VisualMapPiecewiseComponent,\n TimelineComponent,\n AriaComponent,\n TransformComponent,\n DatasetComponent,\n MarkPointComponent,\n MarkLineComponent,\n MarkAreaComponent,\n])\n\ninterface EChartsProps {\n option: EChartsOption\n height?: string\n className?: string\n}\n\nexport default function ECharts({ option, height = '300px', className = '' }: EChartsProps) {\n const canvasId = useRef(`chart_${Math.random().toString(36).slice(2, 11)}`)\n const chartRef = useRef<EChartsType | null>(null)\n const [isReady, setIsReady] = useState(false)\n const canvasNodeRef = useRef<any>(null)\n\n useEffect(() => {\n const env = Taro.getEnv()\n\n // H5 环境\n if (env === Taro.ENV_TYPE.WEB) {\n const container = document.getElementById(canvasId.current)\n if (!container) return\n\n // 初始化 echarts\n if (!chartRef.current) {\n chartRef.current = echarts.init(container)\n }\n\n chartRef.current.setOption(option)\n\n // 响应式调整\n const handleResize = () => {\n chartRef.current?.resize()\n }\n window.addEventListener('resize', handleResize)\n\n return () => {\n window.removeEventListener('resize', handleResize)\n if (chartRef.current) {\n chartRef.current.dispose()\n chartRef.current = null\n }\n }\n }\n\n // 小程序环境 - 添加延迟和重试机制\n const initChart = (retryCount = 0) => {\n const query = Taro.createSelectorQuery()\n query\n .select(`#${canvasId.current}`)\n .fields({ node: true, size: true })\n .exec((res) => {\n // 检查查询结果\n if (!res || !res[0] || !res[0].node) {\n console.warn(`Canvas 查询失败,重试次数:${retryCount}`)\n \n // 如果失败且重试次数小于5次,则延迟后重试\n if (retryCount < 5) {\n setTimeout(() => {\n initChart(retryCount + 1)\n }, 200 * (retryCount + 1)) // 递增延迟时间\n } else {\n console.error('Canvas 初始化失败:无法获取 canvas 节点')\n }\n return\n }\n\n const canvas = res[0].node\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n console.error('Canvas 初始化失败:无法获取 2d 上下文')\n return\n }\n\n const dpr = Taro.getSystemInfoSync().pixelRatio\n const width = res[0].width\n const height = res[0].height\n\n // 保存 canvas 节点引用\n canvasNodeRef.current = canvas\n\n // 设置 canvas 尺寸\n canvas.width = width * dpr\n canvas.height = height * dpr\n ctx.scale(dpr, dpr)\n\n // 设置 canvas 的 devicePixelRatio 属性\n canvas.devicePixelRatio = dpr\n\n // 应用 Canvas Polyfill\n setupCanvasPolyfill(canvas, ctx)\n\n // 在小程序环境下 polyfill document.createElement\n polyfillDocument()\n\n // 销毁旧的图表实例\n if (chartRef.current) {\n chartRef.current.dispose()\n chartRef.current = null\n }\n\n // 初始化 echarts\n try {\n chartRef.current = echarts.init(canvas, null, {\n width: width,\n height: height,\n devicePixelRatio: dpr,\n })\n\n chartRef.current.setOption(option)\n setIsReady(true)\n console.log('Canvas 初始化成功', { width, height, dpr })\n } catch (error) {\n console.error('ECharts 初始化失败:', error)\n }\n })\n }\n\n // 延迟初始化,确保 DOM 已经渲染\n const timer = setTimeout(() => {\n initChart()\n }, 100)\n\n return () => {\n clearTimeout(timer)\n if (chartRef.current) {\n chartRef.current.dispose()\n chartRef.current = null\n }\n }\n }, []) // 只在组件挂载时初始化\n\n // 监听 option 变化,更新图表\n useEffect(() => {\n if (isReady && chartRef.current) {\n chartRef.current.setOption(option, true)\n }\n }, [option, isReady])\n\n // 触摸事件处理函数\n const handleTouch = (e: any, eventType: string) => {\n if (!chartRef.current || !canvasNodeRef.current) return\n\n const touch = e.touches[0] || e.changedTouches[0]\n if (!touch) return\n\n // 创建 ECharts 需要的事件对象\n const box = canvasNodeRef.current.getBoundingClientRect()\n const x = touch.x - box.left\n const y = touch.y - box.top\n\n // 触发 ECharts 事件\n // @ts-ignore - ZRender handler type compatibility\n chartRef.current.getZr().handler.dispatch(eventType, {\n zrX: x,\n zrY: y,\n preventDefault: () => {},\n stopPropagation: () => {},\n stopImmediatePropagation: () => {},\n })\n }\n\n const onTouchStart = (e: any) => {\n handleTouch(e, 'mousedown')\n handleTouch(e, 'mousemove')\n }\n\n const onTouchMove = (e: any) => {\n handleTouch(e, 'mousemove')\n }\n\n const onTouchEnd = (e: any) => {\n handleTouch(e, 'mouseup')\n handleTouch(e, 'click')\n }\n\n const env = Taro.getEnv()\n\n // H5 环境使用 div\n if (env === Taro.ENV_TYPE.WEB) {\n return <div id={canvasId.current} className={className} style={{ width: '100%', height }} />\n }\n\n // 小程序环境使用 Canvas\n return (\n <Canvas\n id={canvasId.current}\n type=\"2d\"\n className={className}\n style={{ width: '100%', height }}\n disableScroll={true}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n />\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/weappPlatform.ts","../src/polyfill.ts","../src/ECharts.tsx"],"names":["measureCtx","getMeasureCtx","Taro","setupWeappZrenderPlatform","setPlatformAPI","text","font","ctx","src","onload","onerror","img","cb","id","setupCanvasPolyfill","canvas","originalGetContext","type","dpr","defineSize","prop","value","echartsMod","echartsRegistered","getEcharts","echarts","CanvasRenderer","PieChart","BarChart","LineChart","ScatterChart","RadarChart","MapChart","TreeChart","TreemapChart","GraphChart","GaugeChart","FunnelChart","ParallelChart","SankeyChart","BoxplotChart","CandlestickChart","EffectScatterChart","LinesChart","HeatmapChart","PictorialBarChart","ThemeRiverChart","SunburstChart","CustomChart","TitleComponent","TooltipComponent","GridComponent","PolarComponent","RadarComponent","GeoComponent","SingleAxisComponent","ParallelComponent","CalendarComponent","GraphicComponent","ToolboxComponent","AxisPointerComponent","BrushComponent","LegendComponent","DataZoomComponent","DataZoomInsideComponent","DataZoomSliderComponent","VisualMapComponent","VisualMapContinuousComponent","VisualMapPiecewiseComponent","TimelineComponent","AriaComponent","TransformComponent","DatasetComponent","MarkPointComponent","MarkLineComponent","MarkAreaComponent","convertRpx","defaultValue","str","match","disableShadowInOption","obj","item","result","key","ECharts","option","height","width","className","style","mergedStyle","canvasId","useMemo","chartRef","useRef","isReady","setIsReady","useState","canvasNodeRef","isWeapp","processedOption","useEffect","mounted","container","error","handleResize","initChart","retryCount","res","canvasWidth","canvasHeight","timer","handleTouch","e","eventType","touch","box","onTouchStart","onTouchMove","onTouchEnd","h5Style","jsx","Canvas"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * 小程序 ZRender 平台适配\n * 通过 setPlatformAPI 接管 createCanvas/measureText,避免 ECharts 污染 Taro 渲染器\n */\n\n// @ts-ignore\nimport { setPlatformAPI } from 'zrender/lib/core/platform'\nimport Taro from '@tarojs/taro'\n\nlet measureCtx: any = null\n\nfunction getMeasureCtx() {\n if (measureCtx) return measureCtx\n try {\n const offscreen = Taro.createOffscreenCanvas({ type: '2d', width: 2, height: 2 })\n measureCtx = offscreen?.getContext('2d')\n } catch {}\n return measureCtx\n}\n\n/** 设置小程序 zrender 平台 API,必须在 import echarts 之前调用 */\nexport function setupWeappZrenderPlatform() {\n if (Taro.getEnv() === Taro.ENV_TYPE.WEB) return\n\n setPlatformAPI({\n createCanvas: () => {\n try {\n return Taro.createOffscreenCanvas({ type: '2d', width: 1, height: 1 })\n } catch {\n return { getContext: () => null } as any\n }\n },\n\n measureText: (text: string, font: string) => {\n const ctx = getMeasureCtx()\n if (!ctx) return { width: 0 }\n try {\n ctx.font = font || '12px sans-serif'\n return { width: ctx.measureText(text)?.width || 0 }\n } catch {\n return { width: 0 }\n }\n },\n\n loadImage: (src: string, onload: (img: any) => void, onerror: () => void) => {\n try {\n // @ts-ignore\n const img = (Taro as any).createImage?.()\n if (!img) return onerror()\n img.onload = () => onload(img)\n img.onerror = onerror\n img.src = src\n } catch {\n onerror()\n }\n },\n\n requestAnimationFrame: (cb: FrameRequestCallback) => setTimeout(cb, 16) as unknown as number,\n cancelAnimationFrame: (id: number) => clearTimeout(id),\n } as any)\n}\n","/**\n * Canvas Polyfill - 给小程序 canvas 节点补充 ECharts 需要的 DOM 兼容属性\n */\n\nexport function setupCanvasPolyfill(canvas: any, ctx: any) {\n if (!canvas.addEventListener) canvas.addEventListener = () => {}\n if (!canvas.removeEventListener) canvas.removeEventListener = () => {}\n if (!canvas.dispatchEvent) canvas.dispatchEvent = () => {}\n\n const originalGetContext = canvas.getContext.bind(canvas)\n canvas.getContext = (type: string) => {\n return (type === '2d' || type === '2d-text') ? ctx : originalGetContext(type)\n }\n\n if (!canvas.style) canvas.style = {}\n if (!canvas.setAttribute) canvas.setAttribute = () => {}\n if (!canvas.getAttribute) canvas.getAttribute = () => null\n if (!canvas.removeAttribute) canvas.removeAttribute = () => {}\n\n if (!canvas.getBoundingClientRect) {\n canvas.getBoundingClientRect = () => ({\n top: 0, left: 0,\n width: canvas.width, height: canvas.height,\n right: canvas.width, bottom: canvas.height,\n })\n }\n\n const dpr = canvas.devicePixelRatio || 1\n const defineSize = (prop: string, value: () => number) => {\n if (!Object.getOwnPropertyDescriptor(canvas, prop)) {\n Object.defineProperty(canvas, prop, { get: value })\n }\n }\n defineSize('offsetWidth', () => canvas.width / dpr)\n defineSize('offsetHeight', () => canvas.height / dpr)\n defineSize('clientWidth', () => canvas.width / dpr)\n defineSize('clientHeight', () => canvas.height / dpr)\n\n return canvas\n}\n","/**\n * Taro ECharts 组件\n * 小程序使用 zrender setPlatformAPI,H5 使用原生能力\n */\n\nimport { Canvas } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport { useEffect, useRef, useState, useMemo } from 'react'\nimport type { CSSProperties } from 'react'\nimport type { EChartsOption } from 'echarts'\nimport type { EChartsType } from 'echarts/core'\nimport { setupWeappZrenderPlatform } from './weappPlatform'\nimport { setupCanvasPolyfill } from './polyfill'\n\nlet echartsMod: typeof import('echarts/core') | null = null\nlet echartsRegistered = false\n\n/** 动态加载 echarts */\nasync function getEcharts() {\n if (echartsMod) return echartsMod\n\n // 小程序环境设置平台 API(内部会判断环境)\n setupWeappZrenderPlatform()\n\n const echarts = await import('echarts/core')\n \n if (!echartsRegistered) {\n const { CanvasRenderer } = await import('echarts/renderers')\n const {\n PieChart, BarChart, LineChart, ScatterChart, RadarChart,\n MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart,\n FunnelChart, ParallelChart, SankeyChart, BoxplotChart,\n CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart,\n PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart,\n } = await import('echarts/charts')\n const {\n TitleComponent, TooltipComponent, GridComponent, PolarComponent,\n RadarComponent, GeoComponent, SingleAxisComponent, ParallelComponent,\n CalendarComponent, GraphicComponent, ToolboxComponent, AxisPointerComponent,\n BrushComponent, LegendComponent, DataZoomComponent, DataZoomInsideComponent,\n DataZoomSliderComponent, VisualMapComponent, VisualMapContinuousComponent,\n VisualMapPiecewiseComponent, TimelineComponent, AriaComponent,\n TransformComponent, DatasetComponent, MarkPointComponent,\n MarkLineComponent, MarkAreaComponent,\n } = await import('echarts/components')\n\n echarts.use([\n CanvasRenderer,\n PieChart, BarChart, LineChart, ScatterChart, RadarChart,\n MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart,\n FunnelChart, ParallelChart, SankeyChart, BoxplotChart,\n CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart,\n PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart,\n TitleComponent, TooltipComponent, GridComponent, PolarComponent,\n RadarComponent, GeoComponent, SingleAxisComponent, ParallelComponent,\n CalendarComponent, GraphicComponent, ToolboxComponent, AxisPointerComponent,\n BrushComponent, LegendComponent, DataZoomComponent, DataZoomInsideComponent,\n DataZoomSliderComponent, VisualMapComponent, VisualMapContinuousComponent,\n VisualMapPiecewiseComponent, TimelineComponent, AriaComponent,\n TransformComponent, DatasetComponent, MarkPointComponent,\n MarkLineComponent, MarkAreaComponent,\n ])\n\n echartsRegistered = true\n }\n\n echartsMod = echarts\n return echarts\n}\n\n/** 将 rpx 转换为 px(H5 inline style 需要,PostCSS 只处理 CSS 文件) */\nfunction convertRpx(value: string | number | undefined, defaultValue: string): string {\n if (value === undefined || value === null || value === '') return defaultValue\n if (typeof value === 'number') return `${value}px`\n \n const str = String(value)\n const match = str.match(/^(-?\\d+(?:\\.\\d+)?)(rpx)$/i)\n if (match && match[1]) {\n return `${parseFloat(match[1]) / 2}px`\n }\n return str\n}\n\n/**\n * 禁用 option 中所有的阴影配置\n * Taro 小程序下 canvas 绘制阴影效果不佳,通过覆盖方式强制关闭\n */\nfunction disableShadowInOption(obj: any): any {\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n\n // 处理数组\n if (Array.isArray(obj)) {\n return obj.map(item => disableShadowInOption(item))\n }\n\n // 处理对象\n const result: any = {}\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key]\n \n // 如果当前对象包含阴影相关属性,进行覆盖\n if (key === 'shadowBlur' || key === 'shadowOffsetX' || key === 'shadowOffsetY') {\n result[key] = 0\n } else if (key === 'shadowColor') {\n result[key] = 'transparent'\n } else if (typeof value === 'object' && value !== null) {\n // 递归处理嵌套对象\n result[key] = disableShadowInOption(value)\n } else {\n result[key] = value\n }\n }\n }\n\n return result\n}\n\nexport interface EChartsProps {\n /** ECharts 配置项 */\n option: EChartsOption\n /** 图表高度 */\n height?: string\n /** 图表宽度 */\n width?: string\n /** CSS 类名 */\n className?: string\n /** 内联样式,style 中的 width/height 会覆盖单独属性 */\n style?: CSSProperties\n}\n\nexport default function ECharts({ \n option, \n height = '300px', \n width = '100%',\n className = '',\n style,\n}: EChartsProps) {\n const mergedStyle: CSSProperties = { width, height, ...style }\n \n const canvasId = useMemo(() => `chart_${Math.random().toString(36).slice(2, 11)}`, [])\n const chartRef = useRef<EChartsType | null>(null)\n const [isReady, setIsReady] = useState(false)\n const canvasNodeRef = useRef<any>(null)\n\n const isWeapp = Taro.getEnv() !== Taro.ENV_TYPE.WEB\n \n // 处理 option,禁用所有阴影配置(小程序 canvas 阴影效果不佳)\n const processedOption = useMemo(() => {\n return disableShadowInOption(option)\n }, [option])\n\n useEffect(() => {\n // H5 环境\n if (!isWeapp) {\n let mounted = true\n \n const initH5Chart = async () => {\n try {\n const echarts = await getEcharts()\n if (!mounted) return\n \n const container = document.getElementById(canvasId)\n if (!container) return\n\n chartRef.current?.dispose()\n chartRef.current = echarts.init(container)\n chartRef.current.setOption(processedOption)\n setIsReady(true)\n } catch (error) {\n console.error('[ECharts] H5 init failed:', error)\n }\n }\n\n initH5Chart()\n\n const handleResize = () => chartRef.current?.resize()\n window.addEventListener('resize', handleResize)\n\n return () => {\n mounted = false\n window.removeEventListener('resize', handleResize)\n chartRef.current?.dispose()\n chartRef.current = null\n }\n }\n\n // 小程序环境\n let mounted = true\n\n const initChart = async (retryCount = 0) => {\n if (!mounted) return\n\n Taro.createSelectorQuery()\n .select(`#${canvasId}`)\n .fields({ node: true, size: true })\n .exec(async (res) => {\n if (!mounted) return\n\n if (!res?.[0]?.node) {\n if (retryCount < 5) {\n setTimeout(() => initChart(retryCount + 1), 200 * (retryCount + 1))\n }\n return\n }\n\n const canvas = res[0].node\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n const dpr = Taro.getSystemInfoSync().pixelRatio\n const canvasWidth = res[0].width\n const canvasHeight = res[0].height\n\n canvasNodeRef.current = canvas\n canvas.width = canvasWidth * dpr\n canvas.height = canvasHeight * dpr\n ctx.scale(dpr, dpr)\n canvas.devicePixelRatio = dpr\n\n setupCanvasPolyfill(canvas, ctx)\n\n chartRef.current?.dispose()\n chartRef.current = null\n\n try {\n const echarts = await getEcharts()\n if (!mounted) return\n\n chartRef.current = echarts.init(canvas, null, {\n width: canvasWidth,\n height: canvasHeight,\n devicePixelRatio: dpr,\n })\n chartRef.current.setOption(processedOption)\n setIsReady(true)\n } catch (error) {\n console.error('[ECharts] Init failed:', error)\n }\n })\n }\n\n const timer = setTimeout(() => initChart(), 50)\n\n return () => {\n mounted = false\n clearTimeout(timer)\n chartRef.current?.dispose()\n chartRef.current = null\n }\n }, [canvasId, isWeapp])\n\n useEffect(() => {\n if (isReady && chartRef.current) {\n chartRef.current.setOption(processedOption, true)\n }\n }, [processedOption, isReady])\n\n const handleTouch = (e: any, eventType: string) => {\n if (!chartRef.current || !canvasNodeRef.current) return\n\n const touch = e.touches[0] || e.changedTouches[0]\n if (!touch) return\n\n const box = canvasNodeRef.current.getBoundingClientRect()\n // @ts-ignore\n chartRef.current.getZr().handler.dispatch(eventType, {\n zrX: touch.x - box.left,\n zrY: touch.y - box.top,\n preventDefault: () => {},\n stopPropagation: () => {},\n stopImmediatePropagation: () => {},\n })\n }\n\n const onTouchStart = (e: any) => {\n handleTouch(e, 'mousedown')\n }\n const onTouchMove = (e: any) => handleTouch(e, 'mousemove')\n const onTouchEnd = (e: any) => {\n handleTouch(e, 'mouseup')\n handleTouch(e, 'click')\n }\n\n // H5 环境\n if (!isWeapp) {\n const h5Style: CSSProperties = {\n ...mergedStyle,\n width: convertRpx(mergedStyle.width, '100%'),\n height: convertRpx(mergedStyle.height, '300px'),\n }\n return <div id={canvasId} className={className || undefined} style={h5Style} />\n }\n\n // 小程序环境\n return (\n <Canvas\n id={canvasId}\n type=\"2d\"\n className={className || undefined}\n style={{ width: mergedStyle.width || '100%', height: mergedStyle.height || '300px' }}\n disableScroll\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n />\n )\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { CSSProperties } from 'react';
|
|
2
3
|
import { EChartsOption } from 'echarts';
|
|
3
4
|
export { EChartsOption } from 'echarts';
|
|
5
|
+
export { setupCanvasPolyfill } from './polyfill.cjs';
|
|
4
6
|
|
|
5
7
|
interface EChartsProps {
|
|
8
|
+
/** ECharts 配置项 */
|
|
6
9
|
option: EChartsOption;
|
|
10
|
+
/** 图表高度 */
|
|
7
11
|
height?: string;
|
|
12
|
+
/** 图表宽度 */
|
|
13
|
+
width?: string;
|
|
14
|
+
/** CSS 类名 */
|
|
8
15
|
className?: string;
|
|
16
|
+
/** 内联样式,style 中的 width/height 会覆盖单独属性 */
|
|
17
|
+
style?: CSSProperties;
|
|
9
18
|
}
|
|
10
|
-
declare function ECharts({ option, height, className }: EChartsProps): react_jsx_runtime.JSX.Element;
|
|
19
|
+
declare function ECharts({ option, height, width, className, style, }: EChartsProps): react_jsx_runtime.JSX.Element;
|
|
11
20
|
|
|
12
|
-
|
|
21
|
+
/**
|
|
22
|
+
* 小程序 ZRender 平台适配
|
|
23
|
+
* 通过 setPlatformAPI 接管 createCanvas/measureText,避免 ECharts 污染 Taro 渲染器
|
|
24
|
+
*/
|
|
25
|
+
/** 设置小程序 zrender 平台 API,必须在 import echarts 之前调用 */
|
|
26
|
+
declare function setupWeappZrenderPlatform(): void;
|
|
27
|
+
|
|
28
|
+
export { ECharts, setupWeappZrenderPlatform };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { CSSProperties } from 'react';
|
|
2
3
|
import { EChartsOption } from 'echarts';
|
|
3
4
|
export { EChartsOption } from 'echarts';
|
|
5
|
+
export { setupCanvasPolyfill } from './polyfill.js';
|
|
4
6
|
|
|
5
7
|
interface EChartsProps {
|
|
8
|
+
/** ECharts 配置项 */
|
|
6
9
|
option: EChartsOption;
|
|
10
|
+
/** 图表高度 */
|
|
7
11
|
height?: string;
|
|
12
|
+
/** 图表宽度 */
|
|
13
|
+
width?: string;
|
|
14
|
+
/** CSS 类名 */
|
|
8
15
|
className?: string;
|
|
16
|
+
/** 内联样式,style 中的 width/height 会覆盖单独属性 */
|
|
17
|
+
style?: CSSProperties;
|
|
9
18
|
}
|
|
10
|
-
declare function ECharts({ option, height, className }: EChartsProps): react_jsx_runtime.JSX.Element;
|
|
19
|
+
declare function ECharts({ option, height, width, className, style, }: EChartsProps): react_jsx_runtime.JSX.Element;
|
|
11
20
|
|
|
12
|
-
|
|
21
|
+
/**
|
|
22
|
+
* 小程序 ZRender 平台适配
|
|
23
|
+
* 通过 setPlatformAPI 接管 createCanvas/measureText,避免 ECharts 污染 Taro 渲染器
|
|
24
|
+
*/
|
|
25
|
+
/** 设置小程序 zrender 平台 API,必须在 import echarts 之前调用 */
|
|
26
|
+
declare function setupWeappZrenderPlatform(): void;
|
|
27
|
+
|
|
28
|
+
export { ECharts, setupWeappZrenderPlatform };
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {Canvas}from'@tarojs/components';import
|
|
1
|
+
import {Canvas}from'@tarojs/components';import E from'@tarojs/taro';import {useMemo,useRef,useState,useEffect}from'react';import {setPlatformAPI}from'zrender/lib/core/platform';import {jsx}from'react/jsx-runtime';var b=null;function dt(){if(b)return b;try{b=E.createOffscreenCanvas({type:"2d",width:2,height:2})?.getContext("2d");}catch{}return b}function I(){E.getEnv()!==E.ENV_TYPE.WEB&&setPlatformAPI({createCanvas:()=>{try{return E.createOffscreenCanvas({type:"2d",width:1,height:1})}catch{return {getContext:()=>null}}},measureText:(t,i)=>{let e=dt();if(!e)return {width:0};try{return e.font=i||"12px sans-serif",{width:e.measureText(t)?.width||0}}catch{return {width:0}}},loadImage:(t,i,e)=>{try{let r=E.createImage?.();if(!r)return e();r.onload=()=>i(r),r.onerror=e,r.src=t;}catch{e();}},requestAnimationFrame:t=>setTimeout(t,16),cancelAnimationFrame:t=>clearTimeout(t)});}function L(t,i){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let e=t.getContext.bind(t);t.getContext=s=>s==="2d"||s==="2d-text"?i:e(s),t.style||(t.style={}),t.setAttribute||(t.setAttribute=()=>{}),t.getAttribute||(t.getAttribute=()=>null),t.removeAttribute||(t.removeAttribute=()=>{}),t.getBoundingClientRect||(t.getBoundingClientRect=()=>({top:0,left:0,width:t.width,height:t.height,right:t.width,bottom:t.height}));let r=t.devicePixelRatio||1,l=(s,h)=>{Object.getOwnPropertyDescriptor(t,s)||Object.defineProperty(t,s,{get:h});};return l("offsetWidth",()=>t.width/r),l("offsetHeight",()=>t.height/r),l("clientWidth",()=>t.width/r),l("clientHeight",()=>t.height/r),t}var k=null,v=false;async function D(){if(k)return k;I();let t=await import('echarts/core');if(!v){let{CanvasRenderer:i}=await import('echarts/renderers'),{PieChart:e,BarChart:r,LineChart:l,ScatterChart:s,RadarChart:h,MapChart:n,TreeChart:P,TreemapChart:T,GraphChart:y,GaugeChart:w,FunnelChart:m,ParallelChart:C,SankeyChart:A,BoxplotChart:M,CandlestickChart:B,EffectScatterChart:o,LinesChart:g,HeatmapChart:d,PictorialBarChart:u,ThemeRiverChart:f,SunburstChart:a,CustomChart:p}=await import('echarts/charts'),{TitleComponent:c,TooltipComponent:S,GridComponent:R,PolarComponent:x,RadarComponent:V,GeoComponent:$,SingleAxisComponent:Y,ParallelComponent:_,CalendarComponent:q,GraphicComponent:X,ToolboxComponent:Q,AxisPointerComponent:J,BrushComponent:K,LegendComponent:U,DataZoomComponent:j,DataZoomInsideComponent:tt,DataZoomSliderComponent:et,VisualMapComponent:rt,VisualMapContinuousComponent:nt,VisualMapPiecewiseComponent:ot,TimelineComponent:it,AriaComponent:st,TransformComponent:at,DatasetComponent:ut,MarkPointComponent:ct,MarkLineComponent:ht,MarkAreaComponent:pt}=await import('echarts/components');t.use([i,e,r,l,s,h,n,P,T,y,w,m,C,A,M,B,o,g,d,u,f,a,p,c,S,R,x,V,$,Y,_,q,X,Q,J,K,U,j,tt,et,rt,nt,ot,it,st,at,ut,ct,ht,pt]),v=true;}return k=t,t}function G(t,i){if(t==null||t==="")return i;if(typeof t=="number")return `${t}px`;let e=String(t),r=e.match(/^(-?\d+(?:\.\d+)?)(rpx)$/i);return r&&r[1]?`${parseFloat(r[1])/2}px`:e}function W(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(e=>W(e));let i={};for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let r=t[e];e==="shadowBlur"||e==="shadowOffsetX"||e==="shadowOffsetY"?i[e]=0:e==="shadowColor"?i[e]="transparent":typeof r=="object"&&r!==null?i[e]=W(r):i[e]=r;}return i}function N({option:t,height:i="300px",width:e="100%",className:r="",style:l}){let s={width:e,height:i,...l},h=useMemo(()=>`chart_${Math.random().toString(36).slice(2,11)}`,[]),n=useRef(null),[P,T]=useState(false),y=useRef(null),w=E.getEnv()!==E.ENV_TYPE.WEB,m=useMemo(()=>W(t),[t]);useEffect(()=>{if(!w){let u=true;(async()=>{try{let p=await D();if(!u)return;let c=document.getElementById(h);if(!c)return;n.current?.dispose(),n.current=p.init(c),n.current.setOption(m),T(!0);}catch(p){console.error("[ECharts] H5 init failed:",p);}})();let a=()=>n.current?.resize();return window.addEventListener("resize",a),()=>{u=false,window.removeEventListener("resize",a),n.current?.dispose(),n.current=null;}}let o=true,g=async(u=0)=>{o&&E.createSelectorQuery().select(`#${h}`).fields({node:true,size:true}).exec(async f=>{if(!o)return;if(!f?.[0]?.node){u<5&&setTimeout(()=>g(u+1),200*(u+1));return}let a=f[0].node,p=a.getContext("2d");if(!p)return;let c=E.getSystemInfoSync().pixelRatio,S=f[0].width,R=f[0].height;y.current=a,a.width=S*c,a.height=R*c,p.scale(c,c),a.devicePixelRatio=c,L(a,p),n.current?.dispose(),n.current=null;try{let x=await D();if(!o)return;n.current=x.init(a,null,{width:S,height:R,devicePixelRatio:c}),n.current.setOption(m),T(!0);}catch(x){console.error("[ECharts] Init failed:",x);}});},d=setTimeout(()=>g(),50);return ()=>{o=false,clearTimeout(d),n.current?.dispose(),n.current=null;}},[h,w]),useEffect(()=>{P&&n.current&&n.current.setOption(m,true);},[m,P]);let C=(o,g)=>{if(!n.current||!y.current)return;let d=o.touches[0]||o.changedTouches[0];if(!d)return;let u=y.current.getBoundingClientRect();n.current.getZr().handler.dispatch(g,{zrX:d.x-u.left,zrY:d.y-u.top,preventDefault:()=>{},stopPropagation:()=>{},stopImmediatePropagation:()=>{}});},A=o=>{C(o,"mousedown");},M=o=>C(o,"mousemove"),B=o=>{C(o,"mouseup"),C(o,"click");};if(!w){let o={...s,width:G(s.width,"100%"),height:G(s.height,"300px")};return jsx("div",{id:h,className:r||void 0,style:o})}return jsx(Canvas,{id:h,type:"2d",className:r||void 0,style:{width:s.width||"100%",height:s.height||"300px"},disableScroll:true,onTouchStart:A,onTouchMove:M,onTouchEnd:B})}export{N as ECharts,L as setupCanvasPolyfill,I as setupWeappZrenderPlatform};//# sourceMappingURL=index.js.map
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/polyfill.ts","../src/ECharts.tsx"],"names":["tempCtx","setupCanvasPolyfill","canvas","ctx","originalGetContext","contextType","polyfillDocument","originalCreateElement","tagName","mockCanvas","CanvasRenderer","PieChart","BarChart","LineChart","ScatterChart","RadarChart","MapChart","TreeChart","TreemapChart","GraphChart","GaugeChart","FunnelChart","ParallelChart","SankeyChart","BoxplotChart","CandlestickChart","EffectScatterChart","LinesChart","HeatmapChart","PictorialBarChart","ThemeRiverChart","SunburstChart","CustomChart","TitleComponent","TooltipComponent","GridComponent","PolarComponent","RadarComponent","GeoComponent","SingleAxisComponent","ParallelComponent","CalendarComponent","GraphicComponent","ToolboxComponent","AxisPointerComponent","BrushComponent","LegendComponent","DataZoomComponent","DataZoomInsideComponent","DataZoomSliderComponent","VisualMapComponent","VisualMapContinuousComponent","VisualMapPiecewiseComponent","TimelineComponent","AriaComponent","TransformComponent","DatasetComponent","MarkPointComponent","MarkLineComponent","MarkAreaComponent","ECharts","option","height","className","canvasId","useRef","chartRef","isReady","setIsReady","useState","canvasNodeRef","useEffect","Taro","container","handleResize","initChart","retryCount","res","dpr","width","error","timer","handleTouch","e","eventType","touch","box","x","y","onTouchStart","onTouchMove","onTouchEnd","jsx","Canvas"],"mappings":"uiCAOA,IACIA,CAAAA,CAAe,KAEZ,SAASC,CAAAA,CAAoBC,CAAAA,CAAaC,CAAAA,CAAU,CAGzDH,CAAAA,CAAUG,CAAAA,CAGLD,CAAAA,CAAO,gBAAA,GACVA,CAAAA,CAAO,gBAAA,CAAmB,IAAM,CAAC,CAAA,CAAA,CAE9BA,CAAAA,CAAO,mBAAA,GACVA,CAAAA,CAAO,mBAAA,CAAsB,IAAM,CAAC,CAAA,CAAA,CAEjCA,CAAAA,CAAO,aAAA,GACVA,EAAO,aAAA,CAAgB,IAAM,CAAC,CAAA,CAAA,CAIhC,IAAME,CAAAA,CAAqBF,CAAAA,CAAO,UAAA,CAAW,IAAA,CAAKA,CAAM,CAAA,CACxD,OAAAA,CAAAA,CAAO,UAAA,CAAa,SAASG,CAAAA,CAAqB,CAChD,OAAIA,CAAAA,GAAgB,IAAA,EAAQA,CAAAA,GAAgB,SAAA,CACnCF,CAAAA,CAEFC,CAAAA,CAAmBC,CAAW,CACvC,CAAA,CAGKH,CAAAA,CAAO,KAAA,GACVA,CAAAA,CAAO,MAAQ,EAAC,CAAA,CAIbA,CAAAA,CAAO,YAAA,GACVA,CAAAA,CAAO,YAAA,CAAe,IAAM,CAAC,CAAA,CAAA,CAE1BA,CAAAA,CAAO,YAAA,GACVA,CAAAA,CAAO,YAAA,CAAe,IAAM,IAAA,CAAA,CAEzBA,CAAAA,CAAO,eAAA,GACVA,CAAAA,CAAO,eAAA,CAAkB,IAAM,CAAC,CAAA,CAAA,CAI7BA,CAAAA,CAAO,qBAAA,GACVA,CAAAA,CAAO,qBAAA,CAAwB,KAAO,CACpC,GAAA,CAAK,CAAA,CACL,IAAA,CAAM,CAAA,CACN,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACf,KAAA,CAAOA,CAAAA,CAAO,KAAA,CACd,MAAA,CAAQA,CAAAA,CAAO,MACjB,CAAA,CAAA,CAAA,CAIG,MAAA,CAAO,wBAAA,CAAyBA,CAAAA,CAAQ,aAAa,CAAA,EACxD,MAAA,CAAO,cAAA,CAAeA,CAAAA,CAAQ,aAAA,CAAe,CAC3C,GAAA,CAAK,IAAMA,CAAAA,CAAO,KAAA,EAASA,CAAAA,CAAO,gBAAA,EAAoB,CAAA,CACxD,CAAC,CAAA,CAEE,MAAA,CAAO,wBAAA,CAAyBA,CAAAA,CAAQ,cAAc,CAAA,EACzD,MAAA,CAAO,cAAA,CAAeA,CAAAA,CAAQ,cAAA,CAAgB,CAC5C,GAAA,CAAK,IAAMA,CAAAA,CAAO,MAAA,EAAUA,CAAAA,CAAO,gBAAA,EAAoB,CAAA,CACzD,CAAC,CAAA,CAEE,MAAA,CAAO,wBAAA,CAAyBA,CAAAA,CAAQ,aAAa,CAAA,EACxD,MAAA,CAAO,cAAA,CAAeA,CAAAA,CAAQ,aAAA,CAAe,CAC3C,IAAK,IAAMA,CAAAA,CAAO,KAAA,EAASA,CAAAA,CAAO,gBAAA,EAAoB,CAAA,CACxD,CAAC,CAAA,CAEE,MAAA,CAAO,wBAAA,CAAyBA,CAAAA,CAAQ,cAAc,CAAA,EACzD,MAAA,CAAO,cAAA,CAAeA,CAAAA,CAAQ,cAAA,CAAgB,CAC5C,GAAA,CAAK,IAAMA,CAAAA,CAAO,MAAA,EAAUA,CAAAA,CAAO,gBAAA,EAAoB,CAAA,CACzD,CAAC,CAAA,CAGIA,CACT,CAGO,SAASI,GAAmB,CACjC,GAAI,OAAO,QAAA,CAAa,GAAA,CACtB,OAGF,IAAMC,CAAAA,CAAwB,QAAA,CAAS,aAAA,CAAc,IAAA,CAAK,QAAQ,CAAA,CAElE,QAAA,CAAS,aAAA,CAAgB,SAASC,CAAAA,CAAiB,CACjD,GAAIA,CAAAA,GAAY,QAAA,CAAU,CAExB,IAAMC,CAAAA,CAAkB,CACtB,KAAA,CAAO,GAAA,CACP,MAAA,CAAQ,GAAA,CACR,KAAA,CAAO,EAAC,CACR,UAAA,CAAY,SAASJ,CAAAA,CAAqB,CACxC,OAAIA,CAAAA,GAAgB,IAAA,EAAQL,CAAAA,CACnBA,CAAAA,CAEF,IACT,CAAA,CACA,gBAAA,CAAkB,IAAM,CAAC,CAAA,CACzB,mBAAA,CAAqB,IAAM,CAAC,CAAA,CAC5B,aAAA,CAAe,IAAM,CAAC,CAAA,CACtB,YAAA,CAAc,IAAM,CAAC,CAAA,CACrB,YAAA,CAAc,IAAM,KACpB,eAAA,CAAiB,IAAM,CAAC,CAAA,CACxB,qBAAA,CAAuB,KAAO,CAC5B,GAAA,CAAK,CAAA,CACL,IAAA,CAAM,CAAA,CACN,KAAA,CAAO,GAAA,CACP,MAAA,CAAQ,GAAA,CACR,KAAA,CAAO,GAAA,CACP,MAAA,CAAQ,GACV,CAAA,CACF,CAAA,CAGA,OAAA,MAAA,CAAO,cAAA,CAAeS,CAAAA,CAAY,aAAA,CAAe,CAC/C,GAAA,CAAK,IAAMA,CAAAA,CAAW,KACxB,CAAC,CAAA,CACD,MAAA,CAAO,cAAA,CAAeA,CAAAA,CAAY,cAAA,CAAgB,CAChD,GAAA,CAAK,IAAMA,CAAAA,CAAW,MACxB,CAAC,CAAA,CACD,MAAA,CAAO,cAAA,CAAeA,CAAAA,CAAY,aAAA,CAAe,CAC/C,GAAA,CAAK,IAAMA,CAAAA,CAAW,KACxB,CAAC,CAAA,CACD,MAAA,CAAO,cAAA,CAAeA,CAAAA,CAAY,cAAA,CAAgB,CAChD,GAAA,CAAK,IAAMA,EAAW,MACxB,CAAC,CAAA,CAEMA,CACT,CAEA,OAAOF,CAAAA,CAAsBC,CAAO,CACtC,EACF,CCjFQ,CAAA,CAAA,GAAA,CAAI,CAEVE,cAAAA,CAGAC,QAAAA,CACAC,QAAAA,CACAC,SAAAA,CACAC,YAAAA,CACAC,UAAAA,CACAC,QAAAA,CACAC,SAAAA,CACAC,YAAAA,CACAC,UAAAA,CACAC,UAAAA,CACAC,WAAAA,CACAC,aAAAA,CACAC,WAAAA,CACAC,YAAAA,CACAC,gBAAAA,CACAC,kBAAAA,CACAC,UAAAA,CACAC,YAAAA,CACAC,iBAAAA,CACAC,eAAAA,CACAC,aAAAA,CACAC,WAAAA,CAGAC,cAAAA,CACAC,gBAAAA,CACAC,aAAAA,CACAC,cAAAA,CACAC,cAAAA,CACAC,YAAAA,CACAC,mBAAAA,CACAC,iBAAAA,CACAC,iBAAAA,CACAC,gBAAAA,CACAC,gBAAAA,CACAC,oBAAAA,CACAC,cAAAA,CACAC,eAAAA,CACAC,iBAAAA,CACAC,uBAAAA,CACAC,uBAAAA,CACAC,kBAAAA,CACAC,4BAAAA,CACAC,2BAAAA,CACAC,iBAAAA,CACAC,aAAAA,CACAC,kBAAAA,CACAC,iBACAC,kBAAAA,CACAC,iBAAAA,CACAC,iBACF,CAAC,CAAA,CAQc,SAARC,CAAAA,CAAyB,CAAE,MAAA,CAAAC,CAAAA,CAAQ,MAAA,CAAAC,CAAAA,CAAS,OAAA,CAAS,SAAA,CAAAC,CAAAA,CAAY,EAAG,CAAA,CAAiB,CAC1F,IAAMC,CAAAA,CAAWC,MAAAA,CAAO,CAAA,MAAA,EAAS,IAAA,CAAK,MAAA,EAAO,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,CAAG,EAAE,CAAC,CAAA,CAAE,CAAA,CACpEC,CAAAA,CAAWD,MAAAA,CAA2B,IAAI,CAAA,CAC1C,CAACE,CAAAA,CAASC,CAAU,CAAA,CAAIC,QAAAA,CAAS,KAAK,CAAA,CACtCC,CAAAA,CAAgBL,MAAAA,CAAY,IAAI,CAAA,CAEtCM,SAAAA,CAAU,IAAM,CAId,GAHYC,CAAAA,CAAK,MAAA,EAAO,GAGZA,CAAAA,CAAK,QAAA,CAAS,GAAA,CAAK,CAC7B,IAAMC,EAAY,QAAA,CAAS,cAAA,CAAeT,CAAAA,CAAS,OAAO,CAAA,CAC1D,GAAI,CAACS,CAAAA,CAAW,OAGXP,CAAAA,CAAS,OAAA,GACZA,CAAAA,CAAS,OAAA,CAAkB,CAAA,CAAA,IAAA,CAAKO,CAAS,CAAA,CAAA,CAG3CP,CAAAA,CAAS,OAAA,CAAQ,SAAA,CAAUL,CAAM,CAAA,CAGjC,IAAMa,CAAAA,CAAe,IAAM,CACzBR,CAAAA,CAAS,OAAA,EAAS,MAAA,GACpB,CAAA,CACA,cAAO,gBAAA,CAAiB,QAAA,CAAUQ,CAAY,CAAA,CAEvC,IAAM,CACX,MAAA,CAAO,mBAAA,CAAoB,QAAA,CAAUA,CAAY,CAAA,CAC7CR,CAAAA,CAAS,OAAA,GACXA,CAAAA,CAAS,OAAA,CAAQ,OAAA,EAAQ,CACzBA,CAAAA,CAAS,OAAA,CAAU,IAAA,EAEvB,CACF,CAGA,IAAMS,CAAAA,CAAY,CAACC,CAAAA,CAAa,CAAA,GAAM,CACtBJ,CAAAA,CAAK,mBAAA,GAEhB,MAAA,CAAO,CAAA,CAAA,EAAIR,CAAAA,CAAS,OAAO,CAAA,CAAE,CAAA,CAC7B,MAAA,CAAO,CAAE,IAAA,CAAM,IAAA,CAAM,IAAA,CAAM,IAAK,CAAC,CAAA,CACjC,IAAA,CAAMa,CAAAA,EAAQ,CAEb,GAAI,CAACA,CAAAA,EAAO,CAACA,CAAAA,CAAI,CAAC,CAAA,EAAK,CAACA,CAAAA,CAAI,CAAC,CAAA,CAAE,IAAA,CAAM,CACnC,QAAQ,IAAA,CAAK,CAAA,mEAAA,EAAoBD,CAAU,CAAA,CAAE,CAAA,CAGzCA,CAAAA,CAAa,CAAA,CACf,UAAA,CAAW,IAAM,CACfD,CAAAA,CAAUC,CAAAA,CAAa,CAAC,EAC1B,CAAA,CAAG,GAAA,EAAOA,CAAAA,CAAa,CAAA,CAAE,CAAA,CAEzB,OAAA,CAAQ,KAAA,CAAM,yFAA6B,CAAA,CAE7C,MACF,CAEA,IAAM1E,CAAAA,CAAS2E,CAAAA,CAAI,CAAC,CAAA,CAAE,KAChB1E,CAAAA,CAAMD,CAAAA,CAAO,UAAA,CAAW,IAAI,CAAA,CAClC,GAAI,CAACC,CAAAA,CAAK,CACR,OAAA,CAAQ,KAAA,CAAM,2FAA0B,CAAA,CACxC,MACF,CAEA,IAAM2E,CAAAA,CAAMN,CAAAA,CAAK,iBAAA,EAAkB,CAAE,UAAA,CAC/BO,CAAAA,CAAQF,CAAAA,CAAI,CAAC,CAAA,CAAE,KAAA,CACff,CAAAA,CAASe,CAAAA,CAAI,CAAC,CAAA,CAAE,MAAA,CAGtBP,CAAAA,CAAc,OAAA,CAAUpE,CAAAA,CAGxBA,CAAAA,CAAO,KAAA,CAAQ6E,CAAAA,CAAQD,CAAAA,CACvB5E,CAAAA,CAAO,MAAA,CAAS4D,CAAAA,CAASgB,CAAAA,CACzB3E,CAAAA,CAAI,KAAA,CAAM2E,CAAAA,CAAKA,CAAG,CAAA,CAGlB5E,CAAAA,CAAO,gBAAA,CAAmB4E,CAAAA,CAG1B7E,CAAAA,CAAoBC,CAAAA,CAAQC,CAAG,CAAA,CAG/BG,CAAAA,EAAiB,CAGb4D,CAAAA,CAAS,OAAA,GACXA,CAAAA,CAAS,OAAA,CAAQ,OAAA,EAAQ,CACzBA,EAAS,OAAA,CAAU,IAAA,CAAA,CAIrB,GAAI,CACFA,CAAAA,CAAS,OAAA,CAAkB,CAAA,CAAA,IAAA,CAAKhE,CAAAA,CAAQ,IAAA,CAAM,CAC5C,KAAA,CAAO6E,CAAAA,CACP,MAAA,CAAQjB,CAAAA,CACR,gBAAA,CAAkBgB,CACpB,CAAC,CAAA,CAEDZ,CAAAA,CAAS,OAAA,CAAQ,SAAA,CAAUL,CAAM,CAAA,CACjCO,CAAAA,CAAW,CAAA,CAAI,CAAA,CACf,OAAA,CAAQ,GAAA,CAAI,uCAAA,CAAgB,CAAE,MAAAW,CAAAA,CAAO,MAAA,CAAAjB,CAAAA,CAAQ,GAAA,CAAAgB,CAAI,CAAC,EACpD,CAAA,MAASE,CAAAA,CAAO,CACd,OAAA,CAAQ,KAAA,CAAM,8CAAA,CAAkBA,CAAK,EACvC,CACF,CAAC,EACL,CAAA,CAGMC,CAAAA,CAAQ,UAAA,CAAW,IAAM,CAC7BN,CAAAA,GACF,CAAA,CAAG,GAAG,CAAA,CAEN,OAAO,IAAM,CACX,YAAA,CAAaM,CAAK,CAAA,CACdf,CAAAA,CAAS,OAAA,GACXA,CAAAA,CAAS,OAAA,CAAQ,OAAA,EAAQ,CACzBA,CAAAA,CAAS,OAAA,CAAU,IAAA,EAEvB,CACF,CAAA,CAAG,EAAE,CAAA,CAGLK,SAAAA,CAAU,IAAM,CACVJ,CAAAA,EAAWD,CAAAA,CAAS,OAAA,EACtBA,CAAAA,CAAS,OAAA,CAAQ,SAAA,CAAUL,CAAAA,CAAQ,IAAI,EAE3C,CAAA,CAAG,CAACA,CAAAA,CAAQM,CAAO,CAAC,CAAA,CAGpB,IAAMe,CAAAA,CAAc,CAACC,CAAAA,CAAQC,CAAAA,GAAsB,CACjD,GAAI,CAAClB,CAAAA,CAAS,OAAA,EAAW,CAACI,CAAAA,CAAc,OAAA,CAAS,OAEjD,IAAMe,CAAAA,CAAQF,CAAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,EAAKA,CAAAA,CAAE,cAAA,CAAe,CAAC,CAAA,CAChD,GAAI,CAACE,CAAAA,CAAO,OAGZ,IAAMC,CAAAA,CAAMhB,CAAAA,CAAc,OAAA,CAAQ,qBAAA,EAAsB,CAClDiB,CAAAA,CAAIF,CAAAA,CAAM,CAAA,CAAIC,CAAAA,CAAI,IAAA,CAClBE,CAAAA,CAAIH,CAAAA,CAAM,CAAA,CAAIC,CAAAA,CAAI,GAAA,CAIxBpB,CAAAA,CAAS,OAAA,CAAQ,KAAA,EAAM,CAAE,OAAA,CAAQ,QAAA,CAASkB,CAAAA,CAAW,CACnD,GAAA,CAAKG,CAAAA,CACL,GAAA,CAAKC,CAAAA,CACL,cAAA,CAAgB,IAAM,CAAC,CAAA,CACvB,eAAA,CAAiB,IAAM,CAAC,CAAA,CACxB,wBAAA,CAA0B,IAAM,CAAC,CACnC,CAAC,EACH,CAAA,CAEMC,CAAAA,CAAgBN,CAAAA,EAAW,CAC/BD,CAAAA,CAAYC,CAAAA,CAAG,WAAW,CAAA,CAC1BD,CAAAA,CAAYC,CAAAA,CAAG,WAAW,EAC5B,CAAA,CAEMO,CAAAA,CAAeP,CAAAA,EAAW,CAC9BD,CAAAA,CAAYC,CAAAA,CAAG,WAAW,EAC5B,CAAA,CAEMQ,CAAAA,CAAcR,CAAAA,EAAW,CAC7BD,CAAAA,CAAYC,CAAAA,CAAG,SAAS,CAAA,CACxBD,CAAAA,CAAYC,CAAAA,CAAG,OAAO,EACxB,CAAA,CAKA,OAHYX,CAAAA,CAAK,MAAA,EAAO,GAGZA,CAAAA,CAAK,QAAA,CAAS,GAAA,CACjBoB,GAAAA,CAAC,KAAA,CAAA,CAAI,EAAA,CAAI5B,CAAAA,CAAS,OAAA,CAAS,SAAA,CAAWD,CAAAA,CAAW,KAAA,CAAO,CAAE,KAAA,CAAO,MAAA,CAAQ,MAAA,CAAAD,CAAO,CAAA,CAAG,CAAA,CAK1F8B,GAAAA,CAACC,MAAAA,CAAA,CACC,EAAA,CAAI7B,CAAAA,CAAS,OAAA,CACb,IAAA,CAAK,IAAA,CACL,SAAA,CAAWD,CAAAA,CACX,KAAA,CAAO,CAAE,KAAA,CAAO,MAAA,CAAQ,MAAA,CAAAD,CAAO,CAAA,CAC/B,aAAA,CAAe,IAAA,CACf,YAAA,CAAc2B,CAAAA,CACd,WAAA,CAAaC,CAAAA,CACb,UAAA,CAAYC,CAAAA,CACd,CAEJ","file":"index.js","sourcesContent":["/**\n * 小程序 Canvas Polyfill\n * 用于 ECharts 在小程序环境下正常工作\n */\n\n// 创建一个临时 canvas 用于文本测量等操作\n// @ts-ignore - tempCanvas is assigned but may not be read directly\nlet tempCanvas: any = null\nlet tempCtx: any = null\n\nexport function setupCanvasPolyfill(canvas: any, ctx: any) {\n // 保存临时 canvas 和 context 供全局使用\n tempCanvas = canvas\n tempCtx = ctx\n\n // 1. 事件监听器\n if (!canvas.addEventListener) {\n canvas.addEventListener = () => {}\n }\n if (!canvas.removeEventListener) {\n canvas.removeEventListener = () => {}\n }\n if (!canvas.dispatchEvent) {\n canvas.dispatchEvent = () => {}\n }\n\n // 2. getContext 方法\n const originalGetContext = canvas.getContext.bind(canvas)\n canvas.getContext = function(contextType: string) {\n if (contextType === '2d' || contextType === '2d-text') {\n return ctx\n }\n return originalGetContext(contextType)\n }\n\n // 3. 样式属性\n if (!canvas.style) {\n canvas.style = {}\n }\n\n // 4. setAttribute 和 getAttribute\n if (!canvas.setAttribute) {\n canvas.setAttribute = () => {}\n }\n if (!canvas.getAttribute) {\n canvas.getAttribute = () => null\n }\n if (!canvas.removeAttribute) {\n canvas.removeAttribute = () => {}\n }\n\n // 5. getBoundingClientRect\n if (!canvas.getBoundingClientRect) {\n canvas.getBoundingClientRect = () => ({\n top: 0,\n left: 0,\n width: canvas.width,\n height: canvas.height,\n right: canvas.width,\n bottom: canvas.height,\n })\n }\n\n // 6. 尺寸属性\n if (!Object.getOwnPropertyDescriptor(canvas, 'offsetWidth')) {\n Object.defineProperty(canvas, 'offsetWidth', {\n get: () => canvas.width / (canvas.devicePixelRatio || 1),\n })\n }\n if (!Object.getOwnPropertyDescriptor(canvas, 'offsetHeight')) {\n Object.defineProperty(canvas, 'offsetHeight', {\n get: () => canvas.height / (canvas.devicePixelRatio || 1),\n })\n }\n if (!Object.getOwnPropertyDescriptor(canvas, 'clientWidth')) {\n Object.defineProperty(canvas, 'clientWidth', {\n get: () => canvas.width / (canvas.devicePixelRatio || 1),\n })\n }\n if (!Object.getOwnPropertyDescriptor(canvas, 'clientHeight')) {\n Object.defineProperty(canvas, 'clientHeight', {\n get: () => canvas.height / (canvas.devicePixelRatio || 1),\n })\n }\n\n return canvas\n}\n\n// Polyfill document.createElement for ECharts\nexport function polyfillDocument() {\n if (typeof document === 'undefined') {\n return\n }\n\n const originalCreateElement = document.createElement.bind(document)\n \n document.createElement = function(tagName: string) {\n if (tagName === 'canvas') {\n // 返回一个模拟的 canvas 对象\n const mockCanvas: any = {\n width: 300,\n height: 150,\n style: {},\n getContext: function(contextType: string) {\n if (contextType === '2d' && tempCtx) {\n return tempCtx\n }\n return null\n },\n addEventListener: () => {},\n removeEventListener: () => {},\n dispatchEvent: () => {},\n setAttribute: () => {},\n getAttribute: () => null,\n removeAttribute: () => {},\n getBoundingClientRect: () => ({\n top: 0,\n left: 0,\n width: 300,\n height: 150,\n right: 300,\n bottom: 150,\n }),\n }\n\n // 添加尺寸属性\n Object.defineProperty(mockCanvas, 'offsetWidth', {\n get: () => mockCanvas.width,\n })\n Object.defineProperty(mockCanvas, 'offsetHeight', {\n get: () => mockCanvas.height,\n })\n Object.defineProperty(mockCanvas, 'clientWidth', {\n get: () => mockCanvas.width,\n })\n Object.defineProperty(mockCanvas, 'clientHeight', {\n get: () => mockCanvas.height,\n })\n\n return mockCanvas\n }\n \n return originalCreateElement(tagName)\n }\n}\n","import { Canvas } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport { useEffect, useRef, useState } from 'react'\nimport * as echarts from 'echarts/core'\nimport { CanvasRenderer } from 'echarts/renderers'\nimport {\n PieChart,\n BarChart,\n LineChart,\n ScatterChart,\n RadarChart,\n MapChart,\n TreeChart,\n TreemapChart,\n GraphChart,\n GaugeChart,\n FunnelChart,\n ParallelChart,\n SankeyChart,\n BoxplotChart,\n CandlestickChart,\n EffectScatterChart,\n LinesChart,\n HeatmapChart,\n PictorialBarChart,\n ThemeRiverChart,\n SunburstChart,\n CustomChart,\n} from 'echarts/charts'\nimport {\n TitleComponent,\n TooltipComponent,\n GridComponent,\n PolarComponent,\n RadarComponent,\n GeoComponent,\n SingleAxisComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n ToolboxComponent,\n AxisPointerComponent,\n BrushComponent,\n LegendComponent,\n DataZoomComponent,\n DataZoomInsideComponent,\n DataZoomSliderComponent,\n VisualMapComponent,\n VisualMapContinuousComponent,\n VisualMapPiecewiseComponent,\n TimelineComponent,\n AriaComponent,\n TransformComponent,\n DatasetComponent,\n MarkPointComponent,\n MarkLineComponent,\n MarkAreaComponent,\n} from 'echarts/components'\nimport type { EChartsOption } from 'echarts'\nimport type { EChartsType } from 'echarts/core'\nimport { setupCanvasPolyfill, polyfillDocument } from './polyfill'\n\n// 注册所有常用组件,确保开箱即用\necharts.use([\n // Renderer\n CanvasRenderer,\n \n // Charts\n PieChart,\n BarChart,\n LineChart,\n ScatterChart,\n RadarChart,\n MapChart,\n TreeChart,\n TreemapChart,\n GraphChart,\n GaugeChart,\n FunnelChart,\n ParallelChart,\n SankeyChart,\n BoxplotChart,\n CandlestickChart,\n EffectScatterChart,\n LinesChart,\n HeatmapChart,\n PictorialBarChart,\n ThemeRiverChart,\n SunburstChart,\n CustomChart,\n \n // Components\n TitleComponent,\n TooltipComponent,\n GridComponent,\n PolarComponent,\n RadarComponent,\n GeoComponent,\n SingleAxisComponent,\n ParallelComponent,\n CalendarComponent,\n GraphicComponent,\n ToolboxComponent,\n AxisPointerComponent,\n BrushComponent,\n LegendComponent,\n DataZoomComponent,\n DataZoomInsideComponent,\n DataZoomSliderComponent,\n VisualMapComponent,\n VisualMapContinuousComponent,\n VisualMapPiecewiseComponent,\n TimelineComponent,\n AriaComponent,\n TransformComponent,\n DatasetComponent,\n MarkPointComponent,\n MarkLineComponent,\n MarkAreaComponent,\n])\n\ninterface EChartsProps {\n option: EChartsOption\n height?: string\n className?: string\n}\n\nexport default function ECharts({ option, height = '300px', className = '' }: EChartsProps) {\n const canvasId = useRef(`chart_${Math.random().toString(36).slice(2, 11)}`)\n const chartRef = useRef<EChartsType | null>(null)\n const [isReady, setIsReady] = useState(false)\n const canvasNodeRef = useRef<any>(null)\n\n useEffect(() => {\n const env = Taro.getEnv()\n\n // H5 环境\n if (env === Taro.ENV_TYPE.WEB) {\n const container = document.getElementById(canvasId.current)\n if (!container) return\n\n // 初始化 echarts\n if (!chartRef.current) {\n chartRef.current = echarts.init(container)\n }\n\n chartRef.current.setOption(option)\n\n // 响应式调整\n const handleResize = () => {\n chartRef.current?.resize()\n }\n window.addEventListener('resize', handleResize)\n\n return () => {\n window.removeEventListener('resize', handleResize)\n if (chartRef.current) {\n chartRef.current.dispose()\n chartRef.current = null\n }\n }\n }\n\n // 小程序环境 - 添加延迟和重试机制\n const initChart = (retryCount = 0) => {\n const query = Taro.createSelectorQuery()\n query\n .select(`#${canvasId.current}`)\n .fields({ node: true, size: true })\n .exec((res) => {\n // 检查查询结果\n if (!res || !res[0] || !res[0].node) {\n console.warn(`Canvas 查询失败,重试次数:${retryCount}`)\n \n // 如果失败且重试次数小于5次,则延迟后重试\n if (retryCount < 5) {\n setTimeout(() => {\n initChart(retryCount + 1)\n }, 200 * (retryCount + 1)) // 递增延迟时间\n } else {\n console.error('Canvas 初始化失败:无法获取 canvas 节点')\n }\n return\n }\n\n const canvas = res[0].node\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n console.error('Canvas 初始化失败:无法获取 2d 上下文')\n return\n }\n\n const dpr = Taro.getSystemInfoSync().pixelRatio\n const width = res[0].width\n const height = res[0].height\n\n // 保存 canvas 节点引用\n canvasNodeRef.current = canvas\n\n // 设置 canvas 尺寸\n canvas.width = width * dpr\n canvas.height = height * dpr\n ctx.scale(dpr, dpr)\n\n // 设置 canvas 的 devicePixelRatio 属性\n canvas.devicePixelRatio = dpr\n\n // 应用 Canvas Polyfill\n setupCanvasPolyfill(canvas, ctx)\n\n // 在小程序环境下 polyfill document.createElement\n polyfillDocument()\n\n // 销毁旧的图表实例\n if (chartRef.current) {\n chartRef.current.dispose()\n chartRef.current = null\n }\n\n // 初始化 echarts\n try {\n chartRef.current = echarts.init(canvas, null, {\n width: width,\n height: height,\n devicePixelRatio: dpr,\n })\n\n chartRef.current.setOption(option)\n setIsReady(true)\n console.log('Canvas 初始化成功', { width, height, dpr })\n } catch (error) {\n console.error('ECharts 初始化失败:', error)\n }\n })\n }\n\n // 延迟初始化,确保 DOM 已经渲染\n const timer = setTimeout(() => {\n initChart()\n }, 100)\n\n return () => {\n clearTimeout(timer)\n if (chartRef.current) {\n chartRef.current.dispose()\n chartRef.current = null\n }\n }\n }, []) // 只在组件挂载时初始化\n\n // 监听 option 变化,更新图表\n useEffect(() => {\n if (isReady && chartRef.current) {\n chartRef.current.setOption(option, true)\n }\n }, [option, isReady])\n\n // 触摸事件处理函数\n const handleTouch = (e: any, eventType: string) => {\n if (!chartRef.current || !canvasNodeRef.current) return\n\n const touch = e.touches[0] || e.changedTouches[0]\n if (!touch) return\n\n // 创建 ECharts 需要的事件对象\n const box = canvasNodeRef.current.getBoundingClientRect()\n const x = touch.x - box.left\n const y = touch.y - box.top\n\n // 触发 ECharts 事件\n // @ts-ignore - ZRender handler type compatibility\n chartRef.current.getZr().handler.dispatch(eventType, {\n zrX: x,\n zrY: y,\n preventDefault: () => {},\n stopPropagation: () => {},\n stopImmediatePropagation: () => {},\n })\n }\n\n const onTouchStart = (e: any) => {\n handleTouch(e, 'mousedown')\n handleTouch(e, 'mousemove')\n }\n\n const onTouchMove = (e: any) => {\n handleTouch(e, 'mousemove')\n }\n\n const onTouchEnd = (e: any) => {\n handleTouch(e, 'mouseup')\n handleTouch(e, 'click')\n }\n\n const env = Taro.getEnv()\n\n // H5 环境使用 div\n if (env === Taro.ENV_TYPE.WEB) {\n return <div id={canvasId.current} className={className} style={{ width: '100%', height }} />\n }\n\n // 小程序环境使用 Canvas\n return (\n <Canvas\n id={canvasId.current}\n type=\"2d\"\n className={className}\n style={{ width: '100%', height }}\n disableScroll={true}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n />\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/weappPlatform.ts","../src/polyfill.ts","../src/ECharts.tsx"],"names":["measureCtx","getMeasureCtx","Taro","setupWeappZrenderPlatform","setPlatformAPI","text","font","ctx","src","onload","onerror","img","cb","id","setupCanvasPolyfill","canvas","originalGetContext","type","dpr","defineSize","prop","value","echartsMod","echartsRegistered","getEcharts","echarts","CanvasRenderer","PieChart","BarChart","LineChart","ScatterChart","RadarChart","MapChart","TreeChart","TreemapChart","GraphChart","GaugeChart","FunnelChart","ParallelChart","SankeyChart","BoxplotChart","CandlestickChart","EffectScatterChart","LinesChart","HeatmapChart","PictorialBarChart","ThemeRiverChart","SunburstChart","CustomChart","TitleComponent","TooltipComponent","GridComponent","PolarComponent","RadarComponent","GeoComponent","SingleAxisComponent","ParallelComponent","CalendarComponent","GraphicComponent","ToolboxComponent","AxisPointerComponent","BrushComponent","LegendComponent","DataZoomComponent","DataZoomInsideComponent","DataZoomSliderComponent","VisualMapComponent","VisualMapContinuousComponent","VisualMapPiecewiseComponent","TimelineComponent","AriaComponent","TransformComponent","DatasetComponent","MarkPointComponent","MarkLineComponent","MarkAreaComponent","convertRpx","defaultValue","str","match","disableShadowInOption","obj","item","result","key","ECharts","option","height","width","className","style","mergedStyle","canvasId","useMemo","chartRef","useRef","isReady","setIsReady","useState","canvasNodeRef","isWeapp","processedOption","useEffect","mounted","container","error","handleResize","initChart","retryCount","res","canvasWidth","canvasHeight","timer","handleTouch","e","eventType","touch","box","onTouchStart","onTouchMove","onTouchEnd","h5Style","jsx","Canvas"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * 小程序 ZRender 平台适配\n * 通过 setPlatformAPI 接管 createCanvas/measureText,避免 ECharts 污染 Taro 渲染器\n */\n\n// @ts-ignore\nimport { setPlatformAPI } from 'zrender/lib/core/platform'\nimport Taro from '@tarojs/taro'\n\nlet measureCtx: any = null\n\nfunction getMeasureCtx() {\n if (measureCtx) return measureCtx\n try {\n const offscreen = Taro.createOffscreenCanvas({ type: '2d', width: 2, height: 2 })\n measureCtx = offscreen?.getContext('2d')\n } catch {}\n return measureCtx\n}\n\n/** 设置小程序 zrender 平台 API,必须在 import echarts 之前调用 */\nexport function setupWeappZrenderPlatform() {\n if (Taro.getEnv() === Taro.ENV_TYPE.WEB) return\n\n setPlatformAPI({\n createCanvas: () => {\n try {\n return Taro.createOffscreenCanvas({ type: '2d', width: 1, height: 1 })\n } catch {\n return { getContext: () => null } as any\n }\n },\n\n measureText: (text: string, font: string) => {\n const ctx = getMeasureCtx()\n if (!ctx) return { width: 0 }\n try {\n ctx.font = font || '12px sans-serif'\n return { width: ctx.measureText(text)?.width || 0 }\n } catch {\n return { width: 0 }\n }\n },\n\n loadImage: (src: string, onload: (img: any) => void, onerror: () => void) => {\n try {\n // @ts-ignore\n const img = (Taro as any).createImage?.()\n if (!img) return onerror()\n img.onload = () => onload(img)\n img.onerror = onerror\n img.src = src\n } catch {\n onerror()\n }\n },\n\n requestAnimationFrame: (cb: FrameRequestCallback) => setTimeout(cb, 16) as unknown as number,\n cancelAnimationFrame: (id: number) => clearTimeout(id),\n } as any)\n}\n","/**\n * Canvas Polyfill - 给小程序 canvas 节点补充 ECharts 需要的 DOM 兼容属性\n */\n\nexport function setupCanvasPolyfill(canvas: any, ctx: any) {\n if (!canvas.addEventListener) canvas.addEventListener = () => {}\n if (!canvas.removeEventListener) canvas.removeEventListener = () => {}\n if (!canvas.dispatchEvent) canvas.dispatchEvent = () => {}\n\n const originalGetContext = canvas.getContext.bind(canvas)\n canvas.getContext = (type: string) => {\n return (type === '2d' || type === '2d-text') ? ctx : originalGetContext(type)\n }\n\n if (!canvas.style) canvas.style = {}\n if (!canvas.setAttribute) canvas.setAttribute = () => {}\n if (!canvas.getAttribute) canvas.getAttribute = () => null\n if (!canvas.removeAttribute) canvas.removeAttribute = () => {}\n\n if (!canvas.getBoundingClientRect) {\n canvas.getBoundingClientRect = () => ({\n top: 0, left: 0,\n width: canvas.width, height: canvas.height,\n right: canvas.width, bottom: canvas.height,\n })\n }\n\n const dpr = canvas.devicePixelRatio || 1\n const defineSize = (prop: string, value: () => number) => {\n if (!Object.getOwnPropertyDescriptor(canvas, prop)) {\n Object.defineProperty(canvas, prop, { get: value })\n }\n }\n defineSize('offsetWidth', () => canvas.width / dpr)\n defineSize('offsetHeight', () => canvas.height / dpr)\n defineSize('clientWidth', () => canvas.width / dpr)\n defineSize('clientHeight', () => canvas.height / dpr)\n\n return canvas\n}\n","/**\n * Taro ECharts 组件\n * 小程序使用 zrender setPlatformAPI,H5 使用原生能力\n */\n\nimport { Canvas } from '@tarojs/components'\nimport Taro from '@tarojs/taro'\nimport { useEffect, useRef, useState, useMemo } from 'react'\nimport type { CSSProperties } from 'react'\nimport type { EChartsOption } from 'echarts'\nimport type { EChartsType } from 'echarts/core'\nimport { setupWeappZrenderPlatform } from './weappPlatform'\nimport { setupCanvasPolyfill } from './polyfill'\n\nlet echartsMod: typeof import('echarts/core') | null = null\nlet echartsRegistered = false\n\n/** 动态加载 echarts */\nasync function getEcharts() {\n if (echartsMod) return echartsMod\n\n // 小程序环境设置平台 API(内部会判断环境)\n setupWeappZrenderPlatform()\n\n const echarts = await import('echarts/core')\n \n if (!echartsRegistered) {\n const { CanvasRenderer } = await import('echarts/renderers')\n const {\n PieChart, BarChart, LineChart, ScatterChart, RadarChart,\n MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart,\n FunnelChart, ParallelChart, SankeyChart, BoxplotChart,\n CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart,\n PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart,\n } = await import('echarts/charts')\n const {\n TitleComponent, TooltipComponent, GridComponent, PolarComponent,\n RadarComponent, GeoComponent, SingleAxisComponent, ParallelComponent,\n CalendarComponent, GraphicComponent, ToolboxComponent, AxisPointerComponent,\n BrushComponent, LegendComponent, DataZoomComponent, DataZoomInsideComponent,\n DataZoomSliderComponent, VisualMapComponent, VisualMapContinuousComponent,\n VisualMapPiecewiseComponent, TimelineComponent, AriaComponent,\n TransformComponent, DatasetComponent, MarkPointComponent,\n MarkLineComponent, MarkAreaComponent,\n } = await import('echarts/components')\n\n echarts.use([\n CanvasRenderer,\n PieChart, BarChart, LineChart, ScatterChart, RadarChart,\n MapChart, TreeChart, TreemapChart, GraphChart, GaugeChart,\n FunnelChart, ParallelChart, SankeyChart, BoxplotChart,\n CandlestickChart, EffectScatterChart, LinesChart, HeatmapChart,\n PictorialBarChart, ThemeRiverChart, SunburstChart, CustomChart,\n TitleComponent, TooltipComponent, GridComponent, PolarComponent,\n RadarComponent, GeoComponent, SingleAxisComponent, ParallelComponent,\n CalendarComponent, GraphicComponent, ToolboxComponent, AxisPointerComponent,\n BrushComponent, LegendComponent, DataZoomComponent, DataZoomInsideComponent,\n DataZoomSliderComponent, VisualMapComponent, VisualMapContinuousComponent,\n VisualMapPiecewiseComponent, TimelineComponent, AriaComponent,\n TransformComponent, DatasetComponent, MarkPointComponent,\n MarkLineComponent, MarkAreaComponent,\n ])\n\n echartsRegistered = true\n }\n\n echartsMod = echarts\n return echarts\n}\n\n/** 将 rpx 转换为 px(H5 inline style 需要,PostCSS 只处理 CSS 文件) */\nfunction convertRpx(value: string | number | undefined, defaultValue: string): string {\n if (value === undefined || value === null || value === '') return defaultValue\n if (typeof value === 'number') return `${value}px`\n \n const str = String(value)\n const match = str.match(/^(-?\\d+(?:\\.\\d+)?)(rpx)$/i)\n if (match && match[1]) {\n return `${parseFloat(match[1]) / 2}px`\n }\n return str\n}\n\n/**\n * 禁用 option 中所有的阴影配置\n * Taro 小程序下 canvas 绘制阴影效果不佳,通过覆盖方式强制关闭\n */\nfunction disableShadowInOption(obj: any): any {\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n\n // 处理数组\n if (Array.isArray(obj)) {\n return obj.map(item => disableShadowInOption(item))\n }\n\n // 处理对象\n const result: any = {}\n for (const key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n const value = obj[key]\n \n // 如果当前对象包含阴影相关属性,进行覆盖\n if (key === 'shadowBlur' || key === 'shadowOffsetX' || key === 'shadowOffsetY') {\n result[key] = 0\n } else if (key === 'shadowColor') {\n result[key] = 'transparent'\n } else if (typeof value === 'object' && value !== null) {\n // 递归处理嵌套对象\n result[key] = disableShadowInOption(value)\n } else {\n result[key] = value\n }\n }\n }\n\n return result\n}\n\nexport interface EChartsProps {\n /** ECharts 配置项 */\n option: EChartsOption\n /** 图表高度 */\n height?: string\n /** 图表宽度 */\n width?: string\n /** CSS 类名 */\n className?: string\n /** 内联样式,style 中的 width/height 会覆盖单独属性 */\n style?: CSSProperties\n}\n\nexport default function ECharts({ \n option, \n height = '300px', \n width = '100%',\n className = '',\n style,\n}: EChartsProps) {\n const mergedStyle: CSSProperties = { width, height, ...style }\n \n const canvasId = useMemo(() => `chart_${Math.random().toString(36).slice(2, 11)}`, [])\n const chartRef = useRef<EChartsType | null>(null)\n const [isReady, setIsReady] = useState(false)\n const canvasNodeRef = useRef<any>(null)\n\n const isWeapp = Taro.getEnv() !== Taro.ENV_TYPE.WEB\n \n // 处理 option,禁用所有阴影配置(小程序 canvas 阴影效果不佳)\n const processedOption = useMemo(() => {\n return disableShadowInOption(option)\n }, [option])\n\n useEffect(() => {\n // H5 环境\n if (!isWeapp) {\n let mounted = true\n \n const initH5Chart = async () => {\n try {\n const echarts = await getEcharts()\n if (!mounted) return\n \n const container = document.getElementById(canvasId)\n if (!container) return\n\n chartRef.current?.dispose()\n chartRef.current = echarts.init(container)\n chartRef.current.setOption(processedOption)\n setIsReady(true)\n } catch (error) {\n console.error('[ECharts] H5 init failed:', error)\n }\n }\n\n initH5Chart()\n\n const handleResize = () => chartRef.current?.resize()\n window.addEventListener('resize', handleResize)\n\n return () => {\n mounted = false\n window.removeEventListener('resize', handleResize)\n chartRef.current?.dispose()\n chartRef.current = null\n }\n }\n\n // 小程序环境\n let mounted = true\n\n const initChart = async (retryCount = 0) => {\n if (!mounted) return\n\n Taro.createSelectorQuery()\n .select(`#${canvasId}`)\n .fields({ node: true, size: true })\n .exec(async (res) => {\n if (!mounted) return\n\n if (!res?.[0]?.node) {\n if (retryCount < 5) {\n setTimeout(() => initChart(retryCount + 1), 200 * (retryCount + 1))\n }\n return\n }\n\n const canvas = res[0].node\n const ctx = canvas.getContext('2d')\n if (!ctx) return\n\n const dpr = Taro.getSystemInfoSync().pixelRatio\n const canvasWidth = res[0].width\n const canvasHeight = res[0].height\n\n canvasNodeRef.current = canvas\n canvas.width = canvasWidth * dpr\n canvas.height = canvasHeight * dpr\n ctx.scale(dpr, dpr)\n canvas.devicePixelRatio = dpr\n\n setupCanvasPolyfill(canvas, ctx)\n\n chartRef.current?.dispose()\n chartRef.current = null\n\n try {\n const echarts = await getEcharts()\n if (!mounted) return\n\n chartRef.current = echarts.init(canvas, null, {\n width: canvasWidth,\n height: canvasHeight,\n devicePixelRatio: dpr,\n })\n chartRef.current.setOption(processedOption)\n setIsReady(true)\n } catch (error) {\n console.error('[ECharts] Init failed:', error)\n }\n })\n }\n\n const timer = setTimeout(() => initChart(), 50)\n\n return () => {\n mounted = false\n clearTimeout(timer)\n chartRef.current?.dispose()\n chartRef.current = null\n }\n }, [canvasId, isWeapp])\n\n useEffect(() => {\n if (isReady && chartRef.current) {\n chartRef.current.setOption(processedOption, true)\n }\n }, [processedOption, isReady])\n\n const handleTouch = (e: any, eventType: string) => {\n if (!chartRef.current || !canvasNodeRef.current) return\n\n const touch = e.touches[0] || e.changedTouches[0]\n if (!touch) return\n\n const box = canvasNodeRef.current.getBoundingClientRect()\n // @ts-ignore\n chartRef.current.getZr().handler.dispatch(eventType, {\n zrX: touch.x - box.left,\n zrY: touch.y - box.top,\n preventDefault: () => {},\n stopPropagation: () => {},\n stopImmediatePropagation: () => {},\n })\n }\n\n const onTouchStart = (e: any) => {\n handleTouch(e, 'mousedown')\n }\n const onTouchMove = (e: any) => handleTouch(e, 'mousemove')\n const onTouchEnd = (e: any) => {\n handleTouch(e, 'mouseup')\n handleTouch(e, 'click')\n }\n\n // H5 环境\n if (!isWeapp) {\n const h5Style: CSSProperties = {\n ...mergedStyle,\n width: convertRpx(mergedStyle.width, '100%'),\n height: convertRpx(mergedStyle.height, '300px'),\n }\n return <div id={canvasId} className={className || undefined} style={h5Style} />\n }\n\n // 小程序环境\n return (\n <Canvas\n id={canvasId}\n type=\"2d\"\n className={className || undefined}\n style={{ width: mergedStyle.width || '100%', height: mergedStyle.height || '300px' }}\n disableScroll\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n />\n )\n}\n"]}
|
package/dist/polyfill.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';
|
|
1
|
+
'use strict';function g(t,o){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let d=t.getContext.bind(t);t.getContext=e=>e==="2d"||e==="2d-text"?o:d(e),t.style||(t.style={}),t.setAttribute||(t.setAttribute=()=>{}),t.getAttribute||(t.getAttribute=()=>null),t.removeAttribute||(t.removeAttribute=()=>{}),t.getBoundingClientRect||(t.getBoundingClientRect=()=>({top:0,left:0,width:t.width,height:t.height,right:t.width,bottom:t.height}));let i=t.devicePixelRatio||1,r=(e,h)=>{Object.getOwnPropertyDescriptor(t,e)||Object.defineProperty(t,e,{get:h});};return r("offsetWidth",()=>t.width/i),r("offsetHeight",()=>t.height/i),r("clientWidth",()=>t.width/i),r("clientHeight",()=>t.height/i),t}exports.setupCanvasPolyfill=g;//# sourceMappingURL=polyfill.cjs.map
|
|
2
2
|
//# sourceMappingURL=polyfill.cjs.map
|
package/dist/polyfill.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/polyfill.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../src/polyfill.ts"],"names":["setupCanvasPolyfill","canvas","ctx","originalGetContext","type","dpr","defineSize","prop","value"],"mappings":"aAIO,SAASA,CAAAA,CAAoBC,CAAAA,CAAaC,CAAAA,CAAU,CACpDD,EAAO,gBAAA,GAAkBA,CAAAA,CAAO,gBAAA,CAAmB,IAAM,CAAC,CAAA,CAAA,CAC1DA,CAAAA,CAAO,mBAAA,GAAqBA,EAAO,mBAAA,CAAsB,IAAM,CAAC,CAAA,CAAA,CAChEA,CAAAA,CAAO,aAAA,GAAeA,CAAAA,CAAO,aAAA,CAAgB,IAAM,CAAC,CAAA,CAAA,CAEzD,IAAME,CAAAA,CAAqBF,EAAO,UAAA,CAAW,IAAA,CAAKA,CAAM,CAAA,CACxDA,EAAO,UAAA,CAAcG,CAAAA,EACXA,CAAAA,GAAS,IAAA,EAAQA,CAAAA,GAAS,SAAA,CAAaF,CAAAA,CAAMC,CAAAA,CAAmBC,CAAI,CAAA,CAGzEH,CAAAA,CAAO,KAAA,GAAOA,CAAAA,CAAO,MAAQ,EAAC,CAAA,CAC9BA,CAAAA,CAAO,YAAA,GAAcA,EAAO,YAAA,CAAe,IAAM,CAAC,CAAA,CAAA,CAClDA,CAAAA,CAAO,YAAA,GAAcA,CAAAA,CAAO,YAAA,CAAe,IAAM,IAAA,CAAA,CACjDA,CAAAA,CAAO,eAAA,GAAiBA,CAAAA,CAAO,gBAAkB,IAAM,CAAC,CAAA,CAAA,CAExDA,CAAAA,CAAO,wBACVA,CAAAA,CAAO,qBAAA,CAAwB,KAAO,CACpC,GAAA,CAAK,CAAA,CAAG,IAAA,CAAM,CAAA,CACd,MAAOA,CAAAA,CAAO,KAAA,CAAO,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACpC,KAAA,CAAOA,CAAAA,CAAO,KAAA,CAAO,OAAQA,CAAAA,CAAO,MACtC,CAAA,CAAA,CAAA,CAGF,IAAMI,CAAAA,CAAMJ,CAAAA,CAAO,gBAAA,EAAoB,CAAA,CACjCK,EAAa,CAACC,CAAAA,CAAcC,CAAAA,GAAwB,CACnD,OAAO,wBAAA,CAAyBP,CAAAA,CAAQM,CAAI,CAAA,EAC/C,OAAO,cAAA,CAAeN,CAAAA,CAAQM,CAAAA,CAAM,CAAE,GAAA,CAAKC,CAAM,CAAC,EAEtD,EACA,OAAAF,CAAAA,CAAW,aAAA,CAAe,IAAML,EAAO,KAAA,CAAQI,CAAG,CAAA,CAClDC,CAAAA,CAAW,eAAgB,IAAML,CAAAA,CAAO,MAAA,CAASI,CAAG,CAAA,CACpDC,CAAAA,CAAW,aAAA,CAAe,IAAML,EAAO,KAAA,CAAQI,CAAG,CAAA,CAClDC,CAAAA,CAAW,eAAgB,IAAML,CAAAA,CAAO,MAAA,CAASI,CAAG,EAE7CJ,CACT","file":"polyfill.cjs","sourcesContent":["/**\n * Canvas Polyfill - 给小程序 canvas 节点补充 ECharts 需要的 DOM 兼容属性\n */\n\nexport function setupCanvasPolyfill(canvas: any, ctx: any) {\n if (!canvas.addEventListener) canvas.addEventListener = () => {}\n if (!canvas.removeEventListener) canvas.removeEventListener = () => {}\n if (!canvas.dispatchEvent) canvas.dispatchEvent = () => {}\n\n const originalGetContext = canvas.getContext.bind(canvas)\n canvas.getContext = (type: string) => {\n return (type === '2d' || type === '2d-text') ? ctx : originalGetContext(type)\n }\n\n if (!canvas.style) canvas.style = {}\n if (!canvas.setAttribute) canvas.setAttribute = () => {}\n if (!canvas.getAttribute) canvas.getAttribute = () => null\n if (!canvas.removeAttribute) canvas.removeAttribute = () => {}\n\n if (!canvas.getBoundingClientRect) {\n canvas.getBoundingClientRect = () => ({\n top: 0, left: 0,\n width: canvas.width, height: canvas.height,\n right: canvas.width, bottom: canvas.height,\n })\n }\n\n const dpr = canvas.devicePixelRatio || 1\n const defineSize = (prop: string, value: () => number) => {\n if (!Object.getOwnPropertyDescriptor(canvas, prop)) {\n Object.defineProperty(canvas, prop, { get: value })\n }\n }\n defineSize('offsetWidth', () => canvas.width / dpr)\n defineSize('offsetHeight', () => canvas.height / dpr)\n defineSize('clientWidth', () => canvas.width / dpr)\n defineSize('clientHeight', () => canvas.height / dpr)\n\n return canvas\n}\n"]}
|
package/dist/polyfill.d.cts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* 用于 ECharts 在小程序环境下正常工作
|
|
2
|
+
* Canvas Polyfill - 给小程序 canvas 节点补充 ECharts 需要的 DOM 兼容属性
|
|
4
3
|
*/
|
|
5
4
|
declare function setupCanvasPolyfill(canvas: any, ctx: any): any;
|
|
6
|
-
declare function polyfillDocument(): void;
|
|
7
5
|
|
|
8
|
-
export {
|
|
6
|
+
export { setupCanvasPolyfill };
|
package/dist/polyfill.d.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* 用于 ECharts 在小程序环境下正常工作
|
|
2
|
+
* Canvas Polyfill - 给小程序 canvas 节点补充 ECharts 需要的 DOM 兼容属性
|
|
4
3
|
*/
|
|
5
4
|
declare function setupCanvasPolyfill(canvas: any, ctx: any): any;
|
|
6
|
-
declare function polyfillDocument(): void;
|
|
7
5
|
|
|
8
|
-
export {
|
|
6
|
+
export { setupCanvasPolyfill };
|
package/dist/polyfill.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
function g(t,o){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let d=t.getContext.bind(t);t.getContext=e=>e==="2d"||e==="2d-text"?o:d(e),t.style||(t.style={}),t.setAttribute||(t.setAttribute=()=>{}),t.getAttribute||(t.getAttribute=()=>null),t.removeAttribute||(t.removeAttribute=()=>{}),t.getBoundingClientRect||(t.getBoundingClientRect=()=>({top:0,left:0,width:t.width,height:t.height,right:t.width,bottom:t.height}));let i=t.devicePixelRatio||1,r=(e,h)=>{Object.getOwnPropertyDescriptor(t,e)||Object.defineProperty(t,e,{get:h});};return r("offsetWidth",()=>t.width/i),r("offsetHeight",()=>t.height/i),r("clientWidth",()=>t.width/i),r("clientHeight",()=>t.height/i),t}export{g as setupCanvasPolyfill};//# sourceMappingURL=polyfill.js.map
|
|
2
2
|
//# sourceMappingURL=polyfill.js.map
|
package/dist/polyfill.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/polyfill.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../src/polyfill.ts"],"names":["setupCanvasPolyfill","canvas","ctx","originalGetContext","type","dpr","defineSize","prop","value"],"mappings":"AAIO,SAASA,CAAAA,CAAoBC,CAAAA,CAAaC,CAAAA,CAAU,CACpDD,EAAO,gBAAA,GAAkBA,CAAAA,CAAO,gBAAA,CAAmB,IAAM,CAAC,CAAA,CAAA,CAC1DA,CAAAA,CAAO,mBAAA,GAAqBA,EAAO,mBAAA,CAAsB,IAAM,CAAC,CAAA,CAAA,CAChEA,CAAAA,CAAO,aAAA,GAAeA,CAAAA,CAAO,aAAA,CAAgB,IAAM,CAAC,CAAA,CAAA,CAEzD,IAAME,CAAAA,CAAqBF,EAAO,UAAA,CAAW,IAAA,CAAKA,CAAM,CAAA,CACxDA,EAAO,UAAA,CAAcG,CAAAA,EACXA,CAAAA,GAAS,IAAA,EAAQA,CAAAA,GAAS,SAAA,CAAaF,CAAAA,CAAMC,CAAAA,CAAmBC,CAAI,CAAA,CAGzEH,CAAAA,CAAO,KAAA,GAAOA,CAAAA,CAAO,MAAQ,EAAC,CAAA,CAC9BA,CAAAA,CAAO,YAAA,GAAcA,EAAO,YAAA,CAAe,IAAM,CAAC,CAAA,CAAA,CAClDA,CAAAA,CAAO,YAAA,GAAcA,CAAAA,CAAO,YAAA,CAAe,IAAM,IAAA,CAAA,CACjDA,CAAAA,CAAO,eAAA,GAAiBA,CAAAA,CAAO,gBAAkB,IAAM,CAAC,CAAA,CAAA,CAExDA,CAAAA,CAAO,wBACVA,CAAAA,CAAO,qBAAA,CAAwB,KAAO,CACpC,GAAA,CAAK,CAAA,CAAG,IAAA,CAAM,CAAA,CACd,MAAOA,CAAAA,CAAO,KAAA,CAAO,MAAA,CAAQA,CAAAA,CAAO,MAAA,CACpC,KAAA,CAAOA,CAAAA,CAAO,KAAA,CAAO,OAAQA,CAAAA,CAAO,MACtC,CAAA,CAAA,CAAA,CAGF,IAAMI,CAAAA,CAAMJ,CAAAA,CAAO,gBAAA,EAAoB,CAAA,CACjCK,EAAa,CAACC,CAAAA,CAAcC,CAAAA,GAAwB,CACnD,OAAO,wBAAA,CAAyBP,CAAAA,CAAQM,CAAI,CAAA,EAC/C,OAAO,cAAA,CAAeN,CAAAA,CAAQM,CAAAA,CAAM,CAAE,GAAA,CAAKC,CAAM,CAAC,EAEtD,EACA,OAAAF,CAAAA,CAAW,aAAA,CAAe,IAAML,EAAO,KAAA,CAAQI,CAAG,CAAA,CAClDC,CAAAA,CAAW,eAAgB,IAAML,CAAAA,CAAO,MAAA,CAASI,CAAG,CAAA,CACpDC,CAAAA,CAAW,aAAA,CAAe,IAAML,EAAO,KAAA,CAAQI,CAAG,CAAA,CAClDC,CAAAA,CAAW,eAAgB,IAAML,CAAAA,CAAO,MAAA,CAASI,CAAG,EAE7CJ,CACT","file":"polyfill.js","sourcesContent":["/**\n * Canvas Polyfill - 给小程序 canvas 节点补充 ECharts 需要的 DOM 兼容属性\n */\n\nexport function setupCanvasPolyfill(canvas: any, ctx: any) {\n if (!canvas.addEventListener) canvas.addEventListener = () => {}\n if (!canvas.removeEventListener) canvas.removeEventListener = () => {}\n if (!canvas.dispatchEvent) canvas.dispatchEvent = () => {}\n\n const originalGetContext = canvas.getContext.bind(canvas)\n canvas.getContext = (type: string) => {\n return (type === '2d' || type === '2d-text') ? ctx : originalGetContext(type)\n }\n\n if (!canvas.style) canvas.style = {}\n if (!canvas.setAttribute) canvas.setAttribute = () => {}\n if (!canvas.getAttribute) canvas.getAttribute = () => null\n if (!canvas.removeAttribute) canvas.removeAttribute = () => {}\n\n if (!canvas.getBoundingClientRect) {\n canvas.getBoundingClientRect = () => ({\n top: 0, left: 0,\n width: canvas.width, height: canvas.height,\n right: canvas.width, bottom: canvas.height,\n })\n }\n\n const dpr = canvas.devicePixelRatio || 1\n const defineSize = (prop: string, value: () => number) => {\n if (!Object.getOwnPropertyDescriptor(canvas, prop)) {\n Object.defineProperty(canvas, prop, { get: value })\n }\n }\n defineSize('offsetWidth', () => canvas.width / dpr)\n defineSize('offsetHeight', () => canvas.height / dpr)\n defineSize('clientWidth', () => canvas.width / dpr)\n defineSize('clientHeight', () => canvas.height / dpr)\n\n return canvas\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/taro-echarts-ui",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.50",
|
|
4
4
|
"description": "ECharts UI components for Taro mini-program with Canvas 2D API support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -44,7 +44,8 @@
|
|
|
44
44
|
"@tarojs/components": "^3.0.0 || ^4.0.0",
|
|
45
45
|
"@tarojs/taro": "^3.0.0 || ^4.0.0",
|
|
46
46
|
"echarts": "^5.5.0 || ^6.0.0",
|
|
47
|
-
"react": "^18.0.0"
|
|
47
|
+
"react": "^18.0.0",
|
|
48
|
+
"zrender": "^5.0.0 || ^6.0.0"
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
51
|
"@tarojs/components": "^4.1.5",
|
|
@@ -53,7 +54,8 @@
|
|
|
53
54
|
"echarts": "^6.0.0",
|
|
54
55
|
"react": "^18.3.1",
|
|
55
56
|
"tsup": "^8.3.5",
|
|
56
|
-
"typescript": "~5.7.2"
|
|
57
|
+
"typescript": "~5.7.2",
|
|
58
|
+
"zrender": "^6.0.0"
|
|
57
59
|
},
|
|
58
60
|
"scripts": {
|
|
59
61
|
"build": "tsup",
|