@amaster.ai/taro-echarts-ui 1.1.0-beta.27 → 1.1.0-beta.28

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/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var components=require('@tarojs/components'),w=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 w__default=/*#__PURE__*/_interopDefault(w);var b=null;function pt(){if(b)return b;try{b=w__default.default.createOffscreenCanvas({type:"2d",width:2,height:2})?.getContext("2d");}catch{}return b}function B(){w__default.default.getEnv()!==w__default.default.ENV_TYPE.WEB&&platform.setPlatformAPI({createCanvas:()=>{try{return w__default.default.createOffscreenCanvas({type:"2d",width:1,height:1})}catch{return {getContext:()=>null}}},measureText:(t,s)=>{let o=pt();if(!o)return {width:0};try{return o.font=s||"12px sans-serif",{width:o.measureText(t)?.width||0}}catch{return {width:0}}},loadImage:(t,s,o)=>{try{let e=w__default.default.createImage?.();if(!e)return o();e.onload=()=>s(e),e.onerror=o,e.src=t;}catch{o();}},requestAnimationFrame:t=>setTimeout(t,16),cancelAnimationFrame:t=>clearTimeout(t)});}function I(t,s){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let o=t.getContext.bind(t);t.getContext=i=>i==="2d"||i==="2d-text"?s:o(i),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 e=t.devicePixelRatio||1,m=(i,h)=>{Object.getOwnPropertyDescriptor(t,i)||Object.defineProperty(t,i,{get:h});};return m("offsetWidth",()=>t.width/e),m("offsetHeight",()=>t.height/e),m("clientWidth",()=>t.width/e),m("clientHeight",()=>t.height/e),t}var L=null,z=false;async function H(){if(L)return L;B();let t=await import('echarts/core');if(!z){let{CanvasRenderer:s}=await import('echarts/renderers'),{PieChart:o,BarChart:e,LineChart:m,ScatterChart:i,RadarChart:h,MapChart:n,TreeChart:E,TreemapChart:P,GraphChart:g,GaugeChart:y,FunnelChart:d,ParallelChart:A,SankeyChart:M,BoxplotChart:O,CandlestickChart:r,EffectScatterChart:C,LinesChart:l,HeatmapChart:u,PictorialBarChart:f,ThemeRiverChart:a,SunburstChart:p,CustomChart:c}=await import('echarts/charts'),{TitleComponent:T,TooltipComponent:S,GridComponent:x,PolarComponent:G,RadarComponent:F,GeoComponent:N,SingleAxisComponent:V,ParallelComponent:$,CalendarComponent:Y,GraphicComponent:_,ToolboxComponent:q,AxisPointerComponent:j,BrushComponent:Q,LegendComponent:X,DataZoomComponent:J,DataZoomInsideComponent:K,DataZoomSliderComponent:U,VisualMapComponent:tt,VisualMapContinuousComponent:et,VisualMapPiecewiseComponent:rt,TimelineComponent:nt,AriaComponent:ot,TransformComponent:it,DatasetComponent:at,MarkPointComponent:st,MarkLineComponent:ut,MarkAreaComponent:ct}=await import('echarts/components');t.use([s,o,e,m,i,h,n,E,P,g,y,d,A,M,O,r,C,l,u,f,a,p,c,T,S,x,G,F,N,V,$,Y,_,q,j,Q,X,J,K,U,tt,et,rt,nt,ot,it,at,st,ut,ct]),z=true;}return L=t,t}function Z(t,s){if(t==null||t==="")return s;if(typeof t=="number")return `${t}px`;let o=String(t),e=o.match(/^(-?\d+(?:\.\d+)?)(rpx)$/i);return e&&e[1]?`${parseFloat(e[1])/2}px`:o}function D({option:t,height:s="300px",width:o="100%",className:e="",style:m}){let i={width:o,height:s,...m},h=react.useMemo(()=>`chart_${Math.random().toString(36).slice(2,11)}`,[]),n=react.useRef(null),[E,P]=react.useState(false),g=react.useRef(null),y=w__default.default.getEnv()!==w__default.default.ENV_TYPE.WEB;react.useEffect(()=>{if(!y){let u=true;(async()=>{try{let p=await H();if(!u)return;let c=document.getElementById(h);if(!c)return;n.current?.dispose(),n.current=p.init(c),n.current.setOption(t),P(!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 r=true,C=async(u=0)=>{r&&w__default.default.createSelectorQuery().select(`#${h}`).fields({node:true,size:true}).exec(async f=>{if(!r)return;if(!f?.[0]?.node){u<5&&setTimeout(()=>C(u+1),200*(u+1));return}let a=f[0].node,p=a.getContext("2d");if(!p)return;let c=w__default.default.getSystemInfoSync().pixelRatio,T=f[0].width,S=f[0].height;g.current=a,a.width=T*c,a.height=S*c,p.scale(c,c),a.devicePixelRatio=c,I(a,p),n.current?.dispose(),n.current=null;try{let x=await H();if(!r)return;n.current=x.init(a,null,{width:T,height:S,devicePixelRatio:c}),n.current.setOption(t),P(!0);}catch(x){console.error("[ECharts] Init failed:",x);}});},l=setTimeout(()=>C(),50);return ()=>{r=false,clearTimeout(l),n.current?.dispose(),n.current=null;}},[h,y]),react.useEffect(()=>{E&&n.current&&n.current.setOption(t,true);},[t,E]);let d=(r,C)=>{if(!n.current||!g.current)return;let l=r.touches[0]||r.changedTouches[0];if(!l)return;let u=g.current.getBoundingClientRect();n.current.getZr().handler.dispatch(C,{zrX:l.x-u.left,zrY:l.y-u.top,preventDefault:()=>{},stopPropagation:()=>{},stopImmediatePropagation:()=>{}});},A=r=>{d(r,"mousedown"),d(r,"mousemove");},M=r=>d(r,"mousemove"),O=r=>{d(r,"mouseup"),d(r,"click");};if(!y){let r={...i,width:Z(i.width,"100%"),height:Z(i.height,"300px")};return jsxRuntime.jsx("div",{id:h,className:e||void 0,style:r})}return jsxRuntime.jsx(components.Canvas,{id:h,type:"2d",className:e||void 0,style:{width:i.width||"100%",height:i.height||"300px"},disableScroll:true,onTouchStart:A,onTouchMove:M,onTouchEnd:O})}exports.ECharts=D;exports.setupCanvasPolyfill=I;exports.setupWeappZrenderPlatform=B;//# sourceMappingURL=index.cjs.map
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 M(){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,r)=>{let e=dt();if(!e)return {width:0};try{return e.font=r||"12px sans-serif",{width:e.measureText(t)?.width||0}}catch{return {width:0}}},loadImage:(t,r,e)=>{try{let n=E__default.default.createImage?.();if(!n)return e();n.onload=()=>r(n),n.onerror=e,n.src=t;}catch{e();}},requestAnimationFrame:t=>setTimeout(t,16),cancelAnimationFrame:t=>clearTimeout(t)});}function L(t,r){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let e=t.getContext.bind(t);t.getContext=a=>a==="2d"||a==="2d-text"?r:e(a),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 n=t.devicePixelRatio||1,l=(a,h)=>{Object.getOwnPropertyDescriptor(t,a)||Object.defineProperty(t,a,{get:h});};return l("offsetWidth",()=>t.width/n),l("offsetHeight",()=>t.height/n),l("clientWidth",()=>t.width/n),l("clientHeight",()=>t.height/n),t}var W=null,G=false;async function Z(){if(W)return W;M();let t=await import('echarts/core');if(!G){let{CanvasRenderer:r}=await import('echarts/renderers'),{PieChart:e,BarChart:n,LineChart:l,ScatterChart:a,RadarChart:h,MapChart:o,TreeChart:P,TreemapChart:S,GraphChart:g,GaugeChart:w,FunnelChart:m,ParallelChart:C,SankeyChart:A,BoxplotChart:B,CandlestickChart:I,EffectScatterChart:i,LinesChart:y,HeatmapChart:f,PictorialBarChart:u,ThemeRiverChart:d,SunburstChart:s,CustomChart:p}=await import('echarts/charts'),{TitleComponent:c,TooltipComponent:T,GridComponent:O,PolarComponent:x,RadarComponent:Y,GeoComponent:_,SingleAxisComponent:$,ParallelComponent:X,CalendarComponent:q,GraphicComponent:Q,ToolboxComponent:j,AxisPointerComponent:J,BrushComponent:K,LegendComponent:U,DataZoomComponent:tt,DataZoomInsideComponent:et,DataZoomSliderComponent:rt,VisualMapComponent:nt,VisualMapContinuousComponent:ot,VisualMapPiecewiseComponent:it,TimelineComponent:at,AriaComponent:st,TransformComponent:ut,DatasetComponent:ct,MarkPointComponent:ht,MarkLineComponent:pt,MarkAreaComponent:lt}=await import('echarts/components');t.use([r,e,n,l,a,h,o,P,S,g,w,m,C,A,B,I,i,y,f,u,d,s,p,c,T,O,x,Y,_,$,X,q,Q,j,J,K,U,tt,et,rt,nt,ot,it,at,st,ut,ct,ht,pt,lt]),G=true;}return W=t,t}function v(t,r){if(t==null||t==="")return r;if(typeof t=="number")return `${t}px`;let e=String(t),n=e.match(/^(-?\d+(?:\.\d+)?)(rpx)$/i);return n&&n[1]?`${parseFloat(n[1])/2}px`:e}var F={shadowBlur:0,shadowColor:"transparent",shadowOffsetX:0,shadowOffsetY:0};function k(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(e=>k(e));let r={};for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let n=t[e];e==="shadowBlur"||e==="shadowOffsetX"||e==="shadowOffsetY"?r[e]=0:e==="shadowColor"?r[e]="transparent":typeof n=="object"&&n!==null?r[e]=k(n):r[e]=n;}return r}function yt(t){if(!t||typeof t!="object")return t;let r=k(t);return r.tooltip&&typeof r.tooltip=="object"&&(r.tooltip={...r.tooltip,...F}),Array.isArray(r.series)&&(r.series=r.series.map(e=>e&&typeof e=="object"&&e.emphasis?{...e,emphasis:{...e.emphasis,itemStyle:{...e.emphasis.itemStyle||{},...F}}}:e)),r}function V({option:t,height:r="300px",width:e="100%",className:n="",style:l}){let a={width:e,height:r,...l},h=react.useMemo(()=>`chart_${Math.random().toString(36).slice(2,11)}`,[]),o=react.useRef(null),[P,S]=react.useState(false),g=react.useRef(null),w=E__default.default.getEnv()!==E__default.default.ENV_TYPE.WEB,m=react.useMemo(()=>yt(t),[t]);react.useEffect(()=>{if(!w){let u=true;(async()=>{try{let p=await Z();if(!u)return;let c=document.getElementById(h);if(!c)return;o.current?.dispose(),o.current=p.init(c),o.current.setOption(m),S(!0);}catch(p){console.error("[ECharts] H5 init failed:",p);}})();let s=()=>o.current?.resize();return window.addEventListener("resize",s),()=>{u=false,window.removeEventListener("resize",s),o.current?.dispose(),o.current=null;}}let i=true,y=async(u=0)=>{i&&E__default.default.createSelectorQuery().select(`#${h}`).fields({node:true,size:true}).exec(async d=>{if(!i)return;if(!d?.[0]?.node){u<5&&setTimeout(()=>y(u+1),200*(u+1));return}let s=d[0].node,p=s.getContext("2d");if(!p)return;let c=E__default.default.getSystemInfoSync().pixelRatio,T=d[0].width,O=d[0].height;g.current=s,s.width=T*c,s.height=O*c,p.scale(c,c),s.devicePixelRatio=c,L(s,p),o.current?.dispose(),o.current=null;try{let x=await Z();if(!i)return;o.current=x.init(s,null,{width:T,height:O,devicePixelRatio:c}),o.current.setOption(m),S(!0);}catch(x){console.error("[ECharts] Init failed:",x);}});},f=setTimeout(()=>y(),50);return ()=>{i=false,clearTimeout(f),o.current?.dispose(),o.current=null;}},[h,w]),react.useEffect(()=>{P&&o.current&&o.current.setOption(m,true);},[m,P]);let C=(i,y)=>{if(!o.current||!g.current)return;let f=i.touches[0]||i.changedTouches[0];if(!f)return;let u=g.current.getBoundingClientRect();o.current.getZr().handler.dispatch(y,{zrX:f.x-u.left,zrY:f.y-u.top,preventDefault:()=>{},stopPropagation:()=>{},stopImmediatePropagation:()=>{}});},A=i=>{C(i,"mousedown");},B=i=>C(i,"mousemove"),I=i=>{C(i,"mouseup"),C(i,"click");};if(!w){let i={...a,width:v(a.width,"100%"),height:v(a.height,"300px")};return jsxRuntime.jsx("div",{id:h,className:n||void 0,style:i})}return jsxRuntime.jsx(components.Canvas,{id:h,type:"2d",className:n||void 0,style:{width:a.width||"100%",height:a.height||"300px"},disableScroll:true,onTouchStart:A,onTouchMove:B,onTouchEnd:I})}exports.ECharts=V;exports.setupCanvasPolyfill=L;exports.setupWeappZrenderPlatform=M;//# sourceMappingURL=index.cjs.map
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
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","ECharts","option","height","width","className","style","mergedStyle","canvasId","useMemo","chartRef","useRef","isReady","setIsReady","useState","canvasNodeRef","isWeapp","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\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 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(option)\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(option)\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(option, true)\n }\n }, [option, 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 handleTouch(e, 'mousemove')\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"]}
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","DISABLE_SHADOW_CONFIG","processShadowProps","obj","item","result","key","disableShadowInOption","option","series","ECharts","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/** 禁用阴影的配置 */\nconst DISABLE_SHADOW_CONFIG = {\n shadowBlur: 0,\n shadowColor: 'transparent',\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n}\n\n/**\n * 递归处理对象,覆盖 shadow 相关属性\n */\nfunction processShadowProps(obj: any): any {\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => processShadowProps(item))\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 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 result[key] = processShadowProps(value)\n } else {\n result[key] = value\n }\n }\n }\n\n return result\n}\n\n/**\n * 禁用 option 中所有的阴影配置\n * Taro 小程序下 canvas 绘制阴影效果不佳,通过覆盖方式强制关闭\n * \n * 处理策略:\n * 1. tooltip - 强制追加 shadow 禁用配置(不论原来有没有)\n * 2. emphasis.itemStyle - 强制追加 shadow 禁用配置(不论原来有没有)\n * 3. 其他属性 - 遇到 shadow 相关属性才覆盖\n */\nfunction disableShadowInOption(option: any): any {\n if (!option || typeof option !== 'object') {\n return option\n }\n\n // 先递归处理所有 shadow 属性\n const result = processShadowProps(option)\n\n // 强制处理 tooltip - 追加 shadow 禁用配置\n if (result.tooltip && typeof result.tooltip === 'object') {\n result.tooltip = {\n ...result.tooltip,\n ...DISABLE_SHADOW_CONFIG,\n }\n }\n\n // 强制处理 series 中的 emphasis.itemStyle\n if (Array.isArray(result.series)) {\n result.series = result.series.map((series: any) => {\n if (series && typeof series === 'object' && series.emphasis) {\n return {\n ...series,\n emphasis: {\n ...series.emphasis,\n itemStyle: {\n ...(series.emphasis.itemStyle || {}),\n ...DISABLE_SHADOW_CONFIG,\n },\n },\n }\n }\n return series\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.js CHANGED
@@ -1,2 +1,2 @@
1
- import {Canvas}from'@tarojs/components';import w 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 pt(){if(b)return b;try{b=w.createOffscreenCanvas({type:"2d",width:2,height:2})?.getContext("2d");}catch{}return b}function B(){w.getEnv()!==w.ENV_TYPE.WEB&&setPlatformAPI({createCanvas:()=>{try{return w.createOffscreenCanvas({type:"2d",width:1,height:1})}catch{return {getContext:()=>null}}},measureText:(t,s)=>{let o=pt();if(!o)return {width:0};try{return o.font=s||"12px sans-serif",{width:o.measureText(t)?.width||0}}catch{return {width:0}}},loadImage:(t,s,o)=>{try{let e=w.createImage?.();if(!e)return o();e.onload=()=>s(e),e.onerror=o,e.src=t;}catch{o();}},requestAnimationFrame:t=>setTimeout(t,16),cancelAnimationFrame:t=>clearTimeout(t)});}function I(t,s){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let o=t.getContext.bind(t);t.getContext=i=>i==="2d"||i==="2d-text"?s:o(i),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 e=t.devicePixelRatio||1,m=(i,h)=>{Object.getOwnPropertyDescriptor(t,i)||Object.defineProperty(t,i,{get:h});};return m("offsetWidth",()=>t.width/e),m("offsetHeight",()=>t.height/e),m("clientWidth",()=>t.width/e),m("clientHeight",()=>t.height/e),t}var L=null,z=false;async function H(){if(L)return L;B();let t=await import('echarts/core');if(!z){let{CanvasRenderer:s}=await import('echarts/renderers'),{PieChart:o,BarChart:e,LineChart:m,ScatterChart:i,RadarChart:h,MapChart:n,TreeChart:E,TreemapChart:P,GraphChart:g,GaugeChart:y,FunnelChart:d,ParallelChart:A,SankeyChart:M,BoxplotChart:O,CandlestickChart:r,EffectScatterChart:C,LinesChart:l,HeatmapChart:u,PictorialBarChart:f,ThemeRiverChart:a,SunburstChart:p,CustomChart:c}=await import('echarts/charts'),{TitleComponent:T,TooltipComponent:S,GridComponent:x,PolarComponent:G,RadarComponent:F,GeoComponent:N,SingleAxisComponent:V,ParallelComponent:$,CalendarComponent:Y,GraphicComponent:_,ToolboxComponent:q,AxisPointerComponent:j,BrushComponent:Q,LegendComponent:X,DataZoomComponent:J,DataZoomInsideComponent:K,DataZoomSliderComponent:U,VisualMapComponent:tt,VisualMapContinuousComponent:et,VisualMapPiecewiseComponent:rt,TimelineComponent:nt,AriaComponent:ot,TransformComponent:it,DatasetComponent:at,MarkPointComponent:st,MarkLineComponent:ut,MarkAreaComponent:ct}=await import('echarts/components');t.use([s,o,e,m,i,h,n,E,P,g,y,d,A,M,O,r,C,l,u,f,a,p,c,T,S,x,G,F,N,V,$,Y,_,q,j,Q,X,J,K,U,tt,et,rt,nt,ot,it,at,st,ut,ct]),z=true;}return L=t,t}function Z(t,s){if(t==null||t==="")return s;if(typeof t=="number")return `${t}px`;let o=String(t),e=o.match(/^(-?\d+(?:\.\d+)?)(rpx)$/i);return e&&e[1]?`${parseFloat(e[1])/2}px`:o}function D({option:t,height:s="300px",width:o="100%",className:e="",style:m}){let i={width:o,height:s,...m},h=useMemo(()=>`chart_${Math.random().toString(36).slice(2,11)}`,[]),n=useRef(null),[E,P]=useState(false),g=useRef(null),y=w.getEnv()!==w.ENV_TYPE.WEB;useEffect(()=>{if(!y){let u=true;(async()=>{try{let p=await H();if(!u)return;let c=document.getElementById(h);if(!c)return;n.current?.dispose(),n.current=p.init(c),n.current.setOption(t),P(!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 r=true,C=async(u=0)=>{r&&w.createSelectorQuery().select(`#${h}`).fields({node:true,size:true}).exec(async f=>{if(!r)return;if(!f?.[0]?.node){u<5&&setTimeout(()=>C(u+1),200*(u+1));return}let a=f[0].node,p=a.getContext("2d");if(!p)return;let c=w.getSystemInfoSync().pixelRatio,T=f[0].width,S=f[0].height;g.current=a,a.width=T*c,a.height=S*c,p.scale(c,c),a.devicePixelRatio=c,I(a,p),n.current?.dispose(),n.current=null;try{let x=await H();if(!r)return;n.current=x.init(a,null,{width:T,height:S,devicePixelRatio:c}),n.current.setOption(t),P(!0);}catch(x){console.error("[ECharts] Init failed:",x);}});},l=setTimeout(()=>C(),50);return ()=>{r=false,clearTimeout(l),n.current?.dispose(),n.current=null;}},[h,y]),useEffect(()=>{E&&n.current&&n.current.setOption(t,true);},[t,E]);let d=(r,C)=>{if(!n.current||!g.current)return;let l=r.touches[0]||r.changedTouches[0];if(!l)return;let u=g.current.getBoundingClientRect();n.current.getZr().handler.dispatch(C,{zrX:l.x-u.left,zrY:l.y-u.top,preventDefault:()=>{},stopPropagation:()=>{},stopImmediatePropagation:()=>{}});},A=r=>{d(r,"mousedown"),d(r,"mousemove");},M=r=>d(r,"mousemove"),O=r=>{d(r,"mouseup"),d(r,"click");};if(!y){let r={...i,width:Z(i.width,"100%"),height:Z(i.height,"300px")};return jsx("div",{id:h,className:e||void 0,style:r})}return jsx(Canvas,{id:h,type:"2d",className:e||void 0,style:{width:i.width||"100%",height:i.height||"300px"},disableScroll:true,onTouchStart:A,onTouchMove:M,onTouchEnd:O})}export{D as ECharts,I as setupCanvasPolyfill,B as setupWeappZrenderPlatform};//# sourceMappingURL=index.js.map
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 M(){E.getEnv()!==E.ENV_TYPE.WEB&&setPlatformAPI({createCanvas:()=>{try{return E.createOffscreenCanvas({type:"2d",width:1,height:1})}catch{return {getContext:()=>null}}},measureText:(t,r)=>{let e=dt();if(!e)return {width:0};try{return e.font=r||"12px sans-serif",{width:e.measureText(t)?.width||0}}catch{return {width:0}}},loadImage:(t,r,e)=>{try{let n=E.createImage?.();if(!n)return e();n.onload=()=>r(n),n.onerror=e,n.src=t;}catch{e();}},requestAnimationFrame:t=>setTimeout(t,16),cancelAnimationFrame:t=>clearTimeout(t)});}function L(t,r){t.addEventListener||(t.addEventListener=()=>{}),t.removeEventListener||(t.removeEventListener=()=>{}),t.dispatchEvent||(t.dispatchEvent=()=>{});let e=t.getContext.bind(t);t.getContext=a=>a==="2d"||a==="2d-text"?r:e(a),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 n=t.devicePixelRatio||1,l=(a,h)=>{Object.getOwnPropertyDescriptor(t,a)||Object.defineProperty(t,a,{get:h});};return l("offsetWidth",()=>t.width/n),l("offsetHeight",()=>t.height/n),l("clientWidth",()=>t.width/n),l("clientHeight",()=>t.height/n),t}var W=null,G=false;async function Z(){if(W)return W;M();let t=await import('echarts/core');if(!G){let{CanvasRenderer:r}=await import('echarts/renderers'),{PieChart:e,BarChart:n,LineChart:l,ScatterChart:a,RadarChart:h,MapChart:o,TreeChart:P,TreemapChart:S,GraphChart:g,GaugeChart:w,FunnelChart:m,ParallelChart:C,SankeyChart:A,BoxplotChart:B,CandlestickChart:I,EffectScatterChart:i,LinesChart:y,HeatmapChart:f,PictorialBarChart:u,ThemeRiverChart:d,SunburstChart:s,CustomChart:p}=await import('echarts/charts'),{TitleComponent:c,TooltipComponent:T,GridComponent:O,PolarComponent:x,RadarComponent:Y,GeoComponent:_,SingleAxisComponent:$,ParallelComponent:X,CalendarComponent:q,GraphicComponent:Q,ToolboxComponent:j,AxisPointerComponent:J,BrushComponent:K,LegendComponent:U,DataZoomComponent:tt,DataZoomInsideComponent:et,DataZoomSliderComponent:rt,VisualMapComponent:nt,VisualMapContinuousComponent:ot,VisualMapPiecewiseComponent:it,TimelineComponent:at,AriaComponent:st,TransformComponent:ut,DatasetComponent:ct,MarkPointComponent:ht,MarkLineComponent:pt,MarkAreaComponent:lt}=await import('echarts/components');t.use([r,e,n,l,a,h,o,P,S,g,w,m,C,A,B,I,i,y,f,u,d,s,p,c,T,O,x,Y,_,$,X,q,Q,j,J,K,U,tt,et,rt,nt,ot,it,at,st,ut,ct,ht,pt,lt]),G=true;}return W=t,t}function v(t,r){if(t==null||t==="")return r;if(typeof t=="number")return `${t}px`;let e=String(t),n=e.match(/^(-?\d+(?:\.\d+)?)(rpx)$/i);return n&&n[1]?`${parseFloat(n[1])/2}px`:e}var F={shadowBlur:0,shadowColor:"transparent",shadowOffsetX:0,shadowOffsetY:0};function k(t){if(!t||typeof t!="object")return t;if(Array.isArray(t))return t.map(e=>k(e));let r={};for(let e in t)if(Object.prototype.hasOwnProperty.call(t,e)){let n=t[e];e==="shadowBlur"||e==="shadowOffsetX"||e==="shadowOffsetY"?r[e]=0:e==="shadowColor"?r[e]="transparent":typeof n=="object"&&n!==null?r[e]=k(n):r[e]=n;}return r}function yt(t){if(!t||typeof t!="object")return t;let r=k(t);return r.tooltip&&typeof r.tooltip=="object"&&(r.tooltip={...r.tooltip,...F}),Array.isArray(r.series)&&(r.series=r.series.map(e=>e&&typeof e=="object"&&e.emphasis?{...e,emphasis:{...e.emphasis,itemStyle:{...e.emphasis.itemStyle||{},...F}}}:e)),r}function V({option:t,height:r="300px",width:e="100%",className:n="",style:l}){let a={width:e,height:r,...l},h=useMemo(()=>`chart_${Math.random().toString(36).slice(2,11)}`,[]),o=useRef(null),[P,S]=useState(false),g=useRef(null),w=E.getEnv()!==E.ENV_TYPE.WEB,m=useMemo(()=>yt(t),[t]);useEffect(()=>{if(!w){let u=true;(async()=>{try{let p=await Z();if(!u)return;let c=document.getElementById(h);if(!c)return;o.current?.dispose(),o.current=p.init(c),o.current.setOption(m),S(!0);}catch(p){console.error("[ECharts] H5 init failed:",p);}})();let s=()=>o.current?.resize();return window.addEventListener("resize",s),()=>{u=false,window.removeEventListener("resize",s),o.current?.dispose(),o.current=null;}}let i=true,y=async(u=0)=>{i&&E.createSelectorQuery().select(`#${h}`).fields({node:true,size:true}).exec(async d=>{if(!i)return;if(!d?.[0]?.node){u<5&&setTimeout(()=>y(u+1),200*(u+1));return}let s=d[0].node,p=s.getContext("2d");if(!p)return;let c=E.getSystemInfoSync().pixelRatio,T=d[0].width,O=d[0].height;g.current=s,s.width=T*c,s.height=O*c,p.scale(c,c),s.devicePixelRatio=c,L(s,p),o.current?.dispose(),o.current=null;try{let x=await Z();if(!i)return;o.current=x.init(s,null,{width:T,height:O,devicePixelRatio:c}),o.current.setOption(m),S(!0);}catch(x){console.error("[ECharts] Init failed:",x);}});},f=setTimeout(()=>y(),50);return ()=>{i=false,clearTimeout(f),o.current?.dispose(),o.current=null;}},[h,w]),useEffect(()=>{P&&o.current&&o.current.setOption(m,true);},[m,P]);let C=(i,y)=>{if(!o.current||!g.current)return;let f=i.touches[0]||i.changedTouches[0];if(!f)return;let u=g.current.getBoundingClientRect();o.current.getZr().handler.dispatch(y,{zrX:f.x-u.left,zrY:f.y-u.top,preventDefault:()=>{},stopPropagation:()=>{},stopImmediatePropagation:()=>{}});},A=i=>{C(i,"mousedown");},B=i=>C(i,"mousemove"),I=i=>{C(i,"mouseup"),C(i,"click");};if(!w){let i={...a,width:v(a.width,"100%"),height:v(a.height,"300px")};return jsx("div",{id:h,className:n||void 0,style:i})}return jsx(Canvas,{id:h,type:"2d",className:n||void 0,style:{width:a.width||"100%",height:a.height||"300px"},disableScroll:true,onTouchStart:A,onTouchMove:B,onTouchEnd:I})}export{V as ECharts,L as setupCanvasPolyfill,M 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/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","ECharts","option","height","width","className","style","mergedStyle","canvasId","useMemo","chartRef","useRef","isReady","setIsReady","useState","canvasNodeRef","isWeapp","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\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 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(option)\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(option)\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(option, true)\n }\n }, [option, 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 handleTouch(e, 'mousemove')\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"]}
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","DISABLE_SHADOW_CONFIG","processShadowProps","obj","item","result","key","disableShadowInOption","option","series","ECharts","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/** 禁用阴影的配置 */\nconst DISABLE_SHADOW_CONFIG = {\n shadowBlur: 0,\n shadowColor: 'transparent',\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n}\n\n/**\n * 递归处理对象,覆盖 shadow 相关属性\n */\nfunction processShadowProps(obj: any): any {\n if (!obj || typeof obj !== 'object') {\n return obj\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => processShadowProps(item))\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 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 result[key] = processShadowProps(value)\n } else {\n result[key] = value\n }\n }\n }\n\n return result\n}\n\n/**\n * 禁用 option 中所有的阴影配置\n * Taro 小程序下 canvas 绘制阴影效果不佳,通过覆盖方式强制关闭\n * \n * 处理策略:\n * 1. tooltip - 强制追加 shadow 禁用配置(不论原来有没有)\n * 2. emphasis.itemStyle - 强制追加 shadow 禁用配置(不论原来有没有)\n * 3. 其他属性 - 遇到 shadow 相关属性才覆盖\n */\nfunction disableShadowInOption(option: any): any {\n if (!option || typeof option !== 'object') {\n return option\n }\n\n // 先递归处理所有 shadow 属性\n const result = processShadowProps(option)\n\n // 强制处理 tooltip - 追加 shadow 禁用配置\n if (result.tooltip && typeof result.tooltip === 'object') {\n result.tooltip = {\n ...result.tooltip,\n ...DISABLE_SHADOW_CONFIG,\n }\n }\n\n // 强制处理 series 中的 emphasis.itemStyle\n if (Array.isArray(result.series)) {\n result.series = result.series.map((series: any) => {\n if (series && typeof series === 'object' && series.emphasis) {\n return {\n ...series,\n emphasis: {\n ...series.emphasis,\n itemStyle: {\n ...(series.emphasis.itemStyle || {}),\n ...DISABLE_SHADOW_CONFIG,\n },\n },\n }\n }\n return series\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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/taro-echarts-ui",
3
- "version": "1.1.0-beta.27",
3
+ "version": "1.1.0-beta.28",
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",