@bashem/rn-charts 0.0.2
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/LICENSE +20 -0
- package/README.md +35 -0
- package/lib/module/index.js +14 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/skia/AreaChart/AreaChart.js +122 -0
- package/lib/module/skia/AreaChart/AreaChart.js.map +1 -0
- package/lib/module/skia/AreaChart/useAreaChart.js +141 -0
- package/lib/module/skia/AreaChart/useAreaChart.js.map +1 -0
- package/lib/module/skia/BarChart/BarChart.js +127 -0
- package/lib/module/skia/BarChart/BarChart.js.map +1 -0
- package/lib/module/skia/BarChart/useBarChart.js +172 -0
- package/lib/module/skia/BarChart/useBarChart.js.map +1 -0
- package/lib/module/skia/Common/VerticalLabel.js +73 -0
- package/lib/module/skia/Common/VerticalLabel.js.map +1 -0
- package/lib/module/skia/HeatMap/HeatMap.js +76 -0
- package/lib/module/skia/HeatMap/HeatMap.js.map +1 -0
- package/lib/module/skia/HeatMap/useHeatMap.js +139 -0
- package/lib/module/skia/HeatMap/useHeatMap.js.map +1 -0
- package/lib/module/skia/PieChart/PieChart.js +96 -0
- package/lib/module/skia/PieChart/PieChart.js.map +1 -0
- package/lib/module/skia/PieChart/usePieChart.js +103 -0
- package/lib/module/skia/PieChart/usePieChart.js.map +1 -0
- package/lib/module/skia/Popup.js +58 -0
- package/lib/module/skia/Popup.js.map +1 -0
- package/lib/module/skia/Progress/LinearProgress.js +69 -0
- package/lib/module/skia/Progress/LinearProgress.js.map +1 -0
- package/lib/module/skia/Progress/SemiCircleProgress.js +70 -0
- package/lib/module/skia/Progress/SemiCircleProgress.js.map +1 -0
- package/lib/module/skia/RadarChart/RadarChart.js +98 -0
- package/lib/module/skia/RadarChart/RadarChart.js.map +1 -0
- package/lib/module/skia/RadarChart/useRadarChart.js +164 -0
- package/lib/module/skia/RadarChart/useRadarChart.js.map +1 -0
- package/lib/module/skia/common.js +65 -0
- package/lib/module/skia/common.js.map +1 -0
- package/lib/module/util/colors.js +182 -0
- package/lib/module/util/colors.js.map +1 -0
- package/lib/module/util/util.js +71 -0
- package/lib/module/util/util.js.map +1 -0
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/index.d.ts +10 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/skia/AreaChart/AreaChart.d.ts +25 -0
- package/lib/typescript/src/skia/AreaChart/AreaChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/AreaChart/useAreaChart.d.ts +47 -0
- package/lib/typescript/src/skia/AreaChart/useAreaChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/BarChart/BarChart.d.ts +30 -0
- package/lib/typescript/src/skia/BarChart/BarChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/BarChart/useBarChart.d.ts +41 -0
- package/lib/typescript/src/skia/BarChart/useBarChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/Common/VerticalLabel.d.ts +17 -0
- package/lib/typescript/src/skia/Common/VerticalLabel.d.ts.map +1 -0
- package/lib/typescript/src/skia/HeatMap/HeatMap.d.ts +33 -0
- package/lib/typescript/src/skia/HeatMap/HeatMap.d.ts.map +1 -0
- package/lib/typescript/src/skia/HeatMap/useHeatMap.d.ts +25 -0
- package/lib/typescript/src/skia/HeatMap/useHeatMap.d.ts.map +1 -0
- package/lib/typescript/src/skia/PieChart/PieChart.d.ts +27 -0
- package/lib/typescript/src/skia/PieChart/PieChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/PieChart/usePieChart.d.ts +13 -0
- package/lib/typescript/src/skia/PieChart/usePieChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/Popup.d.ts +26 -0
- package/lib/typescript/src/skia/Popup.d.ts.map +1 -0
- package/lib/typescript/src/skia/Progress/LinearProgress.d.ts +18 -0
- package/lib/typescript/src/skia/Progress/LinearProgress.d.ts.map +1 -0
- package/lib/typescript/src/skia/Progress/SemiCircleProgress.d.ts +18 -0
- package/lib/typescript/src/skia/Progress/SemiCircleProgress.d.ts.map +1 -0
- package/lib/typescript/src/skia/RadarChart/RadarChart.d.ts +27 -0
- package/lib/typescript/src/skia/RadarChart/RadarChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/RadarChart/useRadarChart.d.ts +41 -0
- package/lib/typescript/src/skia/RadarChart/useRadarChart.d.ts.map +1 -0
- package/lib/typescript/src/skia/common.d.ts +31 -0
- package/lib/typescript/src/skia/common.d.ts.map +1 -0
- package/lib/typescript/src/util/colors.d.ts +4 -0
- package/lib/typescript/src/util/colors.d.ts.map +1 -0
- package/lib/typescript/src/util/util.d.ts +33 -0
- package/lib/typescript/src/util/util.d.ts.map +1 -0
- package/package.json +172 -0
- package/src/index.tsx +12 -0
- package/src/skia/AreaChart/AreaChart.tsx +140 -0
- package/src/skia/AreaChart/useAreaChart.ts +180 -0
- package/src/skia/BarChart/BarChart.tsx +190 -0
- package/src/skia/BarChart/useBarChart.ts +210 -0
- package/src/skia/Common/VerticalLabel.tsx +91 -0
- package/src/skia/HeatMap/HeatMap.tsx +106 -0
- package/src/skia/HeatMap/useHeatMap.ts +175 -0
- package/src/skia/PieChart/PieChart.tsx +114 -0
- package/src/skia/PieChart/usePieChart.ts +156 -0
- package/src/skia/Popup.tsx +125 -0
- package/src/skia/Progress/LinearProgress.tsx +84 -0
- package/src/skia/Progress/SemiCircleProgress.tsx +82 -0
- package/src/skia/RadarChart/RadarChart.tsx +159 -0
- package/src/skia/RadarChart/useRadarChart.ts +208 -0
- package/src/skia/common.ts +82 -0
- package/src/util/colors.ts +186 -0
- package/src/util/util.ts +89 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","useState","rect","arrayFrom","isDefined","useWindowDimensions","getCommonStyleFont","getPaddings","useBarChart","data","style","maxValue","minValue","maxValueCalculated","minValueCalculated","length","Number","MIN_VALUE","MAX_VALUE","forEach","item","currentValue","values","reduce","acc","value","Math","min","max","steps","tooltip","setTooltip","undefined","startX","setStartX","paddingLeft","paddingRight","paddingTop","paddingBottom","chartBarWidth","barWidth","chartBarSpacing","barSpacing","verticalLabelWidth","chartHeight","height","strokeWidth","bottomLabelHeight","canvasHeight","width","windowWidth","totalWidth","totalHeight","initialSpacing","firstBarLeadingSpacing","endSpacing","lastBarTrailingSpacing","scrollAreaWidth","canvasWidth","font","rectangles","leftBoundary","rightBoundary","startArrayIndex","floor","endArrayIndex","ceil","slice","map","bar","xIndex","previousHeight","x","bars","yIndex","barHeight","y","label","dataIndex","touchHandler","touchedX","touchedY","startingXIndex","console","log","yPassed","categoryData","lastBarHeight","centerX","centerY","onScroll","translateX","prev","newX"],"sourceRoot":"../../../../src","sources":["skia/BarChart/useBarChart.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Canvas, Line, Text, Skia } from '@shopify/react-native-skia';
|
|
4
|
+
import { getFont } from "../common.js";
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
6
|
+
function VerticalLabel({
|
|
7
|
+
minValue,
|
|
8
|
+
maxValue,
|
|
9
|
+
labelCount,
|
|
10
|
+
styles
|
|
11
|
+
}) {
|
|
12
|
+
const {
|
|
13
|
+
width,
|
|
14
|
+
height,
|
|
15
|
+
strokeWidth = 2,
|
|
16
|
+
strokeColor = 'white',
|
|
17
|
+
textColor = 'white',
|
|
18
|
+
paddingTop = 0,
|
|
19
|
+
paddingRight = 0,
|
|
20
|
+
paddingBottom = 0,
|
|
21
|
+
paddingLeft = 0,
|
|
22
|
+
fontSize = 12,
|
|
23
|
+
backgroundColor
|
|
24
|
+
} = styles;
|
|
25
|
+
|
|
26
|
+
// Generate evenly spaced values
|
|
27
|
+
const stepValue = labelCount > 1 ? (maxValue - minValue) / (labelCount - 1) : 0;
|
|
28
|
+
const labels = Array.from({
|
|
29
|
+
length: labelCount
|
|
30
|
+
}, (_, i) => minValue + i * stepValue);
|
|
31
|
+
const font = getFont(fontSize);
|
|
32
|
+
const usableHeight = height - paddingTop - paddingBottom - fontSize;
|
|
33
|
+
const stepY = labelCount > 1 ? usableHeight / (labelCount - 1) : 0;
|
|
34
|
+
|
|
35
|
+
// Precompute text paint
|
|
36
|
+
const paint = Skia.Paint();
|
|
37
|
+
paint.setColor(Skia.Color(textColor));
|
|
38
|
+
return /*#__PURE__*/_jsxs(Canvas, {
|
|
39
|
+
style: {
|
|
40
|
+
width,
|
|
41
|
+
height,
|
|
42
|
+
backgroundColor
|
|
43
|
+
},
|
|
44
|
+
children: [/*#__PURE__*/_jsx(Line, {
|
|
45
|
+
p1: {
|
|
46
|
+
x: width - paddingRight - strokeWidth / 2,
|
|
47
|
+
y: paddingTop
|
|
48
|
+
},
|
|
49
|
+
p2: {
|
|
50
|
+
x: width - paddingRight - strokeWidth / 2,
|
|
51
|
+
y: height - paddingBottom
|
|
52
|
+
},
|
|
53
|
+
color: strokeColor,
|
|
54
|
+
strokeWidth: strokeWidth
|
|
55
|
+
}), labels.map((label, i) => {
|
|
56
|
+
const y = height - paddingBottom - stepY * i;
|
|
57
|
+
const text = label.toFixed(0);
|
|
58
|
+
|
|
59
|
+
// measure text width for right-align
|
|
60
|
+
const textWidth = font.measureText(text).width;
|
|
61
|
+
const x = width - paddingRight - strokeWidth - 4 - textWidth;
|
|
62
|
+
return /*#__PURE__*/_jsx(Text, {
|
|
63
|
+
x: x,
|
|
64
|
+
y: y,
|
|
65
|
+
text: text,
|
|
66
|
+
font: font,
|
|
67
|
+
color: textColor
|
|
68
|
+
}, i);
|
|
69
|
+
})]
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
export default VerticalLabel;
|
|
73
|
+
//# sourceMappingURL=VerticalLabel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Canvas","Line","Text","Skia","getFont","jsx","_jsx","jsxs","_jsxs","VerticalLabel","minValue","maxValue","labelCount","styles","width","height","strokeWidth","strokeColor","textColor","paddingTop","paddingRight","paddingBottom","paddingLeft","fontSize","backgroundColor","stepValue","labels","Array","from","length","_","i","font","usableHeight","stepY","paint","Paint","setColor","Color","style","children","p1","x","y","p2","color","map","label","text","toFixed","textWidth","measureText"],"sourceRoot":"../../../../src","sources":["skia/Common/VerticalLabel.tsx"],"mappings":";;AAAA,SAASA,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAEC,IAAI,QAAQ,4BAA4B;AACrE,SAASC,OAAO,QAA0B,cAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiBtD,SAASC,aAAaA,CAAC;EACrBC,QAAQ;EACRC,QAAQ;EACRC,UAAU;EACVC;AACkB,CAAC,EAAE;EACrB,MAAM;IACJC,KAAK;IACLC,MAAM;IACNC,WAAW,GAAG,CAAC;IACfC,WAAW,GAAG,OAAO;IACrBC,SAAS,GAAG,OAAO;IACnBC,UAAU,GAAG,CAAC;IACdC,YAAY,GAAG,CAAC;IAChBC,aAAa,GAAG,CAAC;IACjBC,WAAW,GAAG,CAAC;IACfC,QAAQ,GAAG,EAAE;IACbC;EACF,CAAC,GAAGX,MAAM;;EAEV;EACA,MAAMY,SAAS,GACbb,UAAU,GAAG,CAAC,GAAG,CAACD,QAAQ,GAAGD,QAAQ,KAAKE,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;EAC/D,MAAMc,MAAM,GAAGC,KAAK,CAACC,IAAI,CACvB;IAAEC,MAAM,EAAEjB;EAAW,CAAC,EACtB,CAACkB,CAAC,EAAEC,CAAC,KAAKrB,QAAQ,GAAGqB,CAAC,GAAGN,SAC3B,CAAC;EAED,MAAMO,IAAI,GAAG5B,OAAO,CAACmB,QAAQ,CAAC;EAE9B,MAAMU,YAAY,GAAGlB,MAAM,GAAGI,UAAU,GAAGE,aAAa,GAAGE,QAAQ;EACnE,MAAMW,KAAK,GAAGtB,UAAU,GAAG,CAAC,GAAGqB,YAAY,IAAIrB,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC;;EAElE;EACA,MAAMuB,KAAK,GAAGhC,IAAI,CAACiC,KAAK,CAAC,CAAC;EAC1BD,KAAK,CAACE,QAAQ,CAAClC,IAAI,CAACmC,KAAK,CAACpB,SAAS,CAAC,CAAC;EAErC,oBACEV,KAAA,CAACR,MAAM;IAACuC,KAAK,EAAE;MAAEzB,KAAK;MAAEC,MAAM;MAAES;IAAgB,CAAE;IAAAgB,QAAA,gBAChDlC,IAAA,CAACL,IAAI;MACHwC,EAAE,EAAE;QAAEC,CAAC,EAAE5B,KAAK,GAAGM,YAAY,GAAGJ,WAAW,GAAG,CAAC;QAAE2B,CAAC,EAAExB;MAAW,CAAE;MACjEyB,EAAE,EAAE;QACFF,CAAC,EAAE5B,KAAK,GAAGM,YAAY,GAAGJ,WAAW,GAAG,CAAC;QACzC2B,CAAC,EAAE5B,MAAM,GAAGM;MACd,CAAE;MACFwB,KAAK,EAAE5B,WAAY;MACnBD,WAAW,EAAEA;IAAY,CAC1B,CAAC,EAEDU,MAAM,CAACoB,GAAG,CAAC,CAACC,KAAK,EAAEhB,CAAC,KAAK;MACxB,MAAMY,CAAC,GAAG5B,MAAM,GAAGM,aAAa,GAAGa,KAAK,GAAGH,CAAC;MAC5C,MAAMiB,IAAI,GAAGD,KAAK,CAACE,OAAO,CAAC,CAAC,CAAC;;MAE7B;MACA,MAAMC,SAAS,GAAGlB,IAAI,CAACmB,WAAW,CAACH,IAAI,CAAC,CAAClC,KAAK;MAC9C,MAAM4B,CAAC,GAAG5B,KAAK,GAAGM,YAAY,GAAGJ,WAAW,GAAG,CAAC,GAAGkC,SAAS;MAE5D,oBACE5C,IAAA,CAACJ,IAAI;QAEHwC,CAAC,EAAEA,CAAE;QACLC,CAAC,EAAEA,CAAE;QACLK,IAAI,EAAEA,IAAK;QACXhB,IAAI,EAAEA,IAAK;QACXa,KAAK,EAAE3B;MAAU,GALZa,CAMN,CAAC;IAEN,CAAC,CAAC;EAAA,CACI,CAAC;AAEb;AAEA,eAAetB,aAAa","ignoreList":[]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import { Canvas, Group, Rect } from '@shopify/react-native-skia';
|
|
6
|
+
import useHeatMap from "./useHeatMap.js";
|
|
7
|
+
import Popup from "../Popup.js";
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
function HeatMap(props) {
|
|
10
|
+
const {
|
|
11
|
+
daysInRange,
|
|
12
|
+
totalWidth,
|
|
13
|
+
totalHeight,
|
|
14
|
+
popupData,
|
|
15
|
+
popupRef,
|
|
16
|
+
popupDimension,
|
|
17
|
+
touchHandler,
|
|
18
|
+
getColor,
|
|
19
|
+
cellSize,
|
|
20
|
+
onTouchOutside
|
|
21
|
+
} = useHeatMap(props);
|
|
22
|
+
const [viewOffset, setViewOffset] = React.useState({
|
|
23
|
+
x: 0,
|
|
24
|
+
y: 0
|
|
25
|
+
});
|
|
26
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
27
|
+
style: {
|
|
28
|
+
backgroundColor: props.style?.backgroundColor
|
|
29
|
+
},
|
|
30
|
+
ref: view => {
|
|
31
|
+
view?.measureInWindow((fx, fy) => {
|
|
32
|
+
setViewOffset(prev => {
|
|
33
|
+
if (prev.x === fx && prev.y === fy) {
|
|
34
|
+
return prev;
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
x: fx,
|
|
38
|
+
y: fy
|
|
39
|
+
};
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
children: [/*#__PURE__*/_jsx(Canvas, {
|
|
44
|
+
style: {
|
|
45
|
+
width: totalWidth,
|
|
46
|
+
height: totalHeight
|
|
47
|
+
},
|
|
48
|
+
onTouchStart: event => touchHandler(event.nativeEvent.locationX, event.nativeEvent.locationY),
|
|
49
|
+
children: /*#__PURE__*/_jsx(Group, {
|
|
50
|
+
children: daysInRange.map(day => {
|
|
51
|
+
return /*#__PURE__*/_jsx(Rect, {
|
|
52
|
+
x: day.x,
|
|
53
|
+
y: day.y,
|
|
54
|
+
width: cellSize,
|
|
55
|
+
height: cellSize,
|
|
56
|
+
color: getColor(day.value)
|
|
57
|
+
}, day.date);
|
|
58
|
+
})
|
|
59
|
+
})
|
|
60
|
+
}), popupData && props.popupStyle && /*#__PURE__*/_jsx(Popup, {
|
|
61
|
+
popupData: {
|
|
62
|
+
x: popupData.x,
|
|
63
|
+
y: popupData.y,
|
|
64
|
+
data: popupData.day
|
|
65
|
+
},
|
|
66
|
+
totalWidth: totalWidth,
|
|
67
|
+
totalHeight: totalHeight,
|
|
68
|
+
touchHandler: touchHandler,
|
|
69
|
+
onTouchOutside: onTouchOutside,
|
|
70
|
+
popupStyle: props.popupStyle,
|
|
71
|
+
viewOffset: viewOffset
|
|
72
|
+
})]
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export default HeatMap;
|
|
76
|
+
//# sourceMappingURL=HeatMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","View","Canvas","Group","Rect","useHeatMap","Popup","jsx","_jsx","jsxs","_jsxs","HeatMap","props","daysInRange","totalWidth","totalHeight","popupData","popupRef","popupDimension","touchHandler","getColor","cellSize","onTouchOutside","viewOffset","setViewOffset","useState","x","y","style","backgroundColor","ref","view","measureInWindow","fx","fy","prev","children","width","height","onTouchStart","event","nativeEvent","locationX","locationY","map","day","color","value","date","popupStyle","data"],"sourceRoot":"../../../../src","sources":["skia/HeatMap/HeatMap.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAoB,OAAO;AACvC,SAASC,IAAI,QAAe,cAAc;AAC1C,SAASC,MAAM,EAAEC,KAAK,EAAEC,IAAI,QAAQ,4BAA4B;AAChE,OAAOC,UAAU,MAAM,iBAAc;AAErC,OAAOC,KAAK,MAA2B,aAAU;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAiClD,SAASC,OAAOA,CAACC,KAAmB,EAAE;EACpC,MAAM;IACJC,WAAW;IACXC,UAAU;IACVC,WAAW;IACXC,SAAS;IACTC,QAAQ;IACRC,cAAc;IACdC,YAAY;IACZC,QAAQ;IACRC,QAAQ;IACRC;EACF,CAAC,GAAGjB,UAAU,CAACO,KAAK,CAAC;EAErB,MAAM,CAACW,UAAU,EAAEC,aAAa,CAAC,GAAGxB,KAAK,CAACyB,QAAQ,CAAC;IAAEC,CAAC,EAAE,CAAC;IAAEC,CAAC,EAAE;EAAE,CAAC,CAAC;EAElE,oBACEjB,KAAA,CAACT,IAAI;IACH2B,KAAK,EAAE;MAAEC,eAAe,EAAEjB,KAAK,CAACgB,KAAK,EAAEC;IAAgB,CAAE;IACzDC,GAAG,EAAGC,IAAI,IAAK;MACbA,IAAI,EAAEC,eAAe,CAAC,CAACC,EAAE,EAAEC,EAAE,KAAK;QAChCV,aAAa,CAAEW,IAAI,IAAK;UACtB,IAAIA,IAAI,CAACT,CAAC,KAAKO,EAAE,IAAIE,IAAI,CAACR,CAAC,KAAKO,EAAE,EAAE;YAClC,OAAOC,IAAI;UACb;UACA,OAAO;YAAET,CAAC,EAAEO,EAAE;YAAEN,CAAC,EAAEO;UAAG,CAAC;QACzB,CAAC,CAAC;MACJ,CAAC,CAAC;IACJ,CAAE;IAAAE,QAAA,gBAEF5B,IAAA,CAACN,MAAM;MACL0B,KAAK,EAAE;QAAES,KAAK,EAAEvB,UAAU;QAAEwB,MAAM,EAAEvB;MAAY,CAAE;MAClDwB,YAAY,EAAGC,KAAK,IAClBrB,YAAY,CAACqB,KAAK,CAACC,WAAW,CAACC,SAAS,EAAEF,KAAK,CAACC,WAAW,CAACE,SAAS,CACtE;MAAAP,QAAA,eAED5B,IAAA,CAACL,KAAK;QAAAiC,QAAA,EACHvB,WAAW,CAAC+B,GAAG,CAAEC,GAAG,IAAK;UACxB,oBACErC,IAAA,CAACJ,IAAI;YAEHsB,CAAC,EAAEmB,GAAG,CAACnB,CAAE;YACTC,CAAC,EAAEkB,GAAG,CAAClB,CAAE;YACTU,KAAK,EAAEhB,QAAS;YAChBiB,MAAM,EAAEjB,QAAS;YACjByB,KAAK,EAAE1B,QAAQ,CAACyB,GAAG,CAACE,KAAK;UAAE,GALtBF,GAAG,CAACG,IAMV,CAAC;QAEN,CAAC;MAAC,CACG;IAAC,CACF,CAAC,EAERhC,SAAS,IAAIJ,KAAK,CAACqC,UAAU,iBAC5BzC,IAAA,CAACF,KAAK;MACJU,SAAS,EAAE;QAAEU,CAAC,EAAEV,SAAS,CAACU,CAAC;QAAEC,CAAC,EAAEX,SAAS,CAACW,CAAC;QAAEuB,IAAI,EAAElC,SAAS,CAAC6B;MAAI,CAAE;MACnE/B,UAAU,EAAEA,UAAW;MACvBC,WAAW,EAAEA,WAAY;MACzBI,YAAY,EAAEA,YAAa;MAC3BG,cAAc,EAAEA,cAAe;MAC/B2B,UAAU,EAAErC,KAAK,CAACqC,UAAW;MAC7B1B,UAAU,EAAEA;IAAW,CACxB,CACF;EAAA,CACG,CAAC;AAEX;AAEA,eAAeZ,OAAO","ignoreList":[]}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
4
|
+
function useHeatMap({
|
|
5
|
+
startDate,
|
|
6
|
+
endDate,
|
|
7
|
+
data,
|
|
8
|
+
style,
|
|
9
|
+
minValue,
|
|
10
|
+
maxValue,
|
|
11
|
+
ref,
|
|
12
|
+
popupStyle
|
|
13
|
+
}) {
|
|
14
|
+
const cellSize = style?.cellSize ?? 24;
|
|
15
|
+
const cellGap = style?.cellGap ?? 4;
|
|
16
|
+
const cellMaxColor = style?.cellMaxColor ?? '#50f555ff';
|
|
17
|
+
const cellMinColor = style?.cellMinColor ?? '#ffffffff';
|
|
18
|
+
const numberOfDaysInWeek = 7;
|
|
19
|
+
const numberOfMsInDay = 1000 * 60 * 60 * 24;
|
|
20
|
+
const [popupData, setPopupData] = useState(undefined);
|
|
21
|
+
const [popupDimension, setPopupDimension] = useState({
|
|
22
|
+
width: 0,
|
|
23
|
+
height: 0
|
|
24
|
+
});
|
|
25
|
+
const popupRef = useRef(null);
|
|
26
|
+
const formatDate = date => `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}`;
|
|
27
|
+
const {
|
|
28
|
+
daysInRange,
|
|
29
|
+
computedMin,
|
|
30
|
+
computedMax
|
|
31
|
+
} = useMemo(() => {
|
|
32
|
+
const start = new Date(startDate);
|
|
33
|
+
const end = new Date(endDate);
|
|
34
|
+
const output = [];
|
|
35
|
+
let computedMax = Number.MIN_VALUE;
|
|
36
|
+
let computedMin = Number.MAX_VALUE;
|
|
37
|
+
const startDayOfWeek = start.getDay();
|
|
38
|
+
for (let d = new Date(start); d <= end; d.setDate(d.getDate() + 1)) {
|
|
39
|
+
const dateStr = formatDate(d);
|
|
40
|
+
const value = data?.[dateStr] ?? 0;
|
|
41
|
+
const dayOfWeek = d.getDay();
|
|
42
|
+
const daysFromStart = Math.floor((d.getTime() - start.getTime()) / numberOfMsInDay);
|
|
43
|
+
const week = Math.floor((startDayOfWeek + daysFromStart) / numberOfDaysInWeek);
|
|
44
|
+
computedMax = Math.max(computedMax, value);
|
|
45
|
+
computedMin = Math.min(computedMin, value);
|
|
46
|
+
output.push({
|
|
47
|
+
date: dateStr,
|
|
48
|
+
value,
|
|
49
|
+
dayOfWeek,
|
|
50
|
+
week,
|
|
51
|
+
x: week * (cellSize + cellGap),
|
|
52
|
+
y: dayOfWeek * (cellSize + cellGap)
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
daysInRange: output,
|
|
57
|
+
computedMin: minValue !== undefined ? minValue : computedMin,
|
|
58
|
+
computedMax: maxValue !== undefined ? maxValue : computedMax
|
|
59
|
+
};
|
|
60
|
+
}, [startDate, endDate, data, minValue, maxValue, cellSize, cellGap]);
|
|
61
|
+
|
|
62
|
+
// --- COLOR LOGIC ---
|
|
63
|
+
const getColor = value => {
|
|
64
|
+
if (value <= 0) return cellMinColor;
|
|
65
|
+
const intensity = Math.min(1, Math.max(0, (value - computedMin) / (computedMax - computedMin || 1)));
|
|
66
|
+
const bigint = parseInt(cellMaxColor.replace('#', ''), 16);
|
|
67
|
+
const r = bigint >> 16 & 255;
|
|
68
|
+
const g = bigint >> 8 & 255;
|
|
69
|
+
const b = bigint & 255;
|
|
70
|
+
const mix = base => Math.round(255 - (255 - base) * intensity);
|
|
71
|
+
return `rgb(${mix(r)}, ${mix(g)}, ${mix(b)})`;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
// Heatmap size
|
|
75
|
+
const numWeeks = Math.ceil(daysInRange.length / 7 + 1);
|
|
76
|
+
const totalWidth = numWeeks * (cellSize + cellGap);
|
|
77
|
+
const totalHeight = 7 * (cellSize + cellGap);
|
|
78
|
+
|
|
79
|
+
// --- POPUP MEASUREMENT ---
|
|
80
|
+
useLayoutEffect(() => {
|
|
81
|
+
if (popupRef.current) {
|
|
82
|
+
popupRef.current.measure((x, y, width, height) => {
|
|
83
|
+
setPopupDimension({
|
|
84
|
+
width,
|
|
85
|
+
height
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
}, [popupData]);
|
|
90
|
+
|
|
91
|
+
// --- TOUCH HANDLER ---
|
|
92
|
+
const touchHandler = (x, y) => {
|
|
93
|
+
if (!popupStyle?.renderPopup || x < 0 || y < 0 || x >= totalWidth || y >= totalHeight) {
|
|
94
|
+
setPopupData(undefined);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const col = Math.floor(x / (cellSize + cellGap));
|
|
98
|
+
const row = Math.floor(y / (cellSize + cellGap));
|
|
99
|
+
const start = new Date(startDate);
|
|
100
|
+
const startDayOfWeek = start.getDay();
|
|
101
|
+
const index = col * numberOfDaysInWeek + row;
|
|
102
|
+
if (index >= startDayOfWeek && index - startDayOfWeek < daysInRange.length) {
|
|
103
|
+
const day = daysInRange[index - startDayOfWeek];
|
|
104
|
+
if (day) {
|
|
105
|
+
setPopupData({
|
|
106
|
+
x: col * (cellSize + cellGap),
|
|
107
|
+
y: row * (cellSize + cellGap),
|
|
108
|
+
day
|
|
109
|
+
});
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
setPopupData(undefined);
|
|
114
|
+
};
|
|
115
|
+
const onTouchOutside = () => {
|
|
116
|
+
setPopupData(undefined);
|
|
117
|
+
};
|
|
118
|
+
useImperativeHandle(ref, () => ({
|
|
119
|
+
touchedOutside: () => {
|
|
120
|
+
setPopupData(undefined);
|
|
121
|
+
}
|
|
122
|
+
}), [ref]);
|
|
123
|
+
return {
|
|
124
|
+
daysInRange,
|
|
125
|
+
computedMin,
|
|
126
|
+
computedMax,
|
|
127
|
+
totalWidth,
|
|
128
|
+
totalHeight,
|
|
129
|
+
popupData,
|
|
130
|
+
popupRef,
|
|
131
|
+
popupDimension,
|
|
132
|
+
touchHandler,
|
|
133
|
+
getColor,
|
|
134
|
+
cellSize,
|
|
135
|
+
onTouchOutside
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
export default useHeatMap;
|
|
139
|
+
//# sourceMappingURL=useHeatMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useImperativeHandle","useLayoutEffect","useMemo","useRef","useState","useHeatMap","startDate","endDate","data","style","minValue","maxValue","ref","popupStyle","cellSize","cellGap","cellMaxColor","cellMinColor","numberOfDaysInWeek","numberOfMsInDay","popupData","setPopupData","undefined","popupDimension","setPopupDimension","width","height","popupRef","formatDate","date","getFullYear","String","getMonth","padStart","getDate","daysInRange","computedMin","computedMax","start","Date","end","output","Number","MIN_VALUE","MAX_VALUE","startDayOfWeek","getDay","d","setDate","dateStr","value","dayOfWeek","daysFromStart","Math","floor","getTime","week","max","min","push","x","y","getColor","intensity","bigint","parseInt","replace","r","g","b","mix","base","round","numWeeks","ceil","length","totalWidth","totalHeight","current","measure","touchHandler","renderPopup","col","row","index","day","onTouchOutside","touchedOutside"],"sourceRoot":"../../../../src","sources":["skia/HeatMap/useHeatMap.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Canvas, Path } from '@shopify/react-native-skia';
|
|
4
|
+
import { View } from 'react-native';
|
|
5
|
+
import { usePieChart } from "./usePieChart.js";
|
|
6
|
+
import Popup from "../Popup.js";
|
|
7
|
+
import { useState } from 'react';
|
|
8
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
+
function PieChart(props) {
|
|
10
|
+
const {
|
|
11
|
+
radius,
|
|
12
|
+
innerRadius,
|
|
13
|
+
paths,
|
|
14
|
+
popupData,
|
|
15
|
+
touchHandler
|
|
16
|
+
} = usePieChart(props);
|
|
17
|
+
const {
|
|
18
|
+
style,
|
|
19
|
+
centerView,
|
|
20
|
+
popupStyle
|
|
21
|
+
} = props;
|
|
22
|
+
const paddingTop = style.paddingTop ?? style.padding ?? 0;
|
|
23
|
+
const paddingBottom = style.paddingBottom ?? style.padding ?? 0;
|
|
24
|
+
const paddingLeft = style.paddingLeft ?? style.padding ?? 0;
|
|
25
|
+
const paddingRight = style.paddingRight ?? style.padding ?? 0;
|
|
26
|
+
const [viewOffset, setViewOffset] = useState({
|
|
27
|
+
x: 0,
|
|
28
|
+
y: 0
|
|
29
|
+
});
|
|
30
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
31
|
+
style: {
|
|
32
|
+
paddingTop: paddingTop,
|
|
33
|
+
paddingBottom: paddingBottom,
|
|
34
|
+
paddingRight: paddingRight,
|
|
35
|
+
paddingLeft: paddingLeft,
|
|
36
|
+
backgroundColor: style.backgroundColor ?? 'transparent'
|
|
37
|
+
},
|
|
38
|
+
ref: view => {
|
|
39
|
+
view?.measureInWindow((fx, fy) => {
|
|
40
|
+
setViewOffset(prev => {
|
|
41
|
+
if (prev.x === fx && prev.y === fy) {
|
|
42
|
+
return prev;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
x: fx,
|
|
46
|
+
y: fy
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
children: [centerView && /*#__PURE__*/_jsx(View, {
|
|
52
|
+
style: {
|
|
53
|
+
position: 'absolute',
|
|
54
|
+
top: paddingTop + radius - innerRadius,
|
|
55
|
+
left: paddingLeft + radius - innerRadius,
|
|
56
|
+
width: innerRadius * 2,
|
|
57
|
+
height: innerRadius * 2,
|
|
58
|
+
borderRadius: innerRadius,
|
|
59
|
+
justifyContent: 'center',
|
|
60
|
+
alignItems: 'center',
|
|
61
|
+
backgroundColor: style.innerColor ?? 'black'
|
|
62
|
+
},
|
|
63
|
+
children: centerView
|
|
64
|
+
}), /*#__PURE__*/_jsx(Canvas, {
|
|
65
|
+
style: {
|
|
66
|
+
width: radius * 2,
|
|
67
|
+
height: radius * 2,
|
|
68
|
+
backgroundColor: style.backgroundColor ?? 'transparent'
|
|
69
|
+
},
|
|
70
|
+
onTouchStart: event => touchHandler(event.nativeEvent.locationX, event.nativeEvent.locationY),
|
|
71
|
+
children: paths.map(({
|
|
72
|
+
path,
|
|
73
|
+
color
|
|
74
|
+
}, index) => /*#__PURE__*/_jsx(Path, {
|
|
75
|
+
path: path,
|
|
76
|
+
color: color,
|
|
77
|
+
stroke: {
|
|
78
|
+
width: 5
|
|
79
|
+
}
|
|
80
|
+
}, index))
|
|
81
|
+
}), popupData && /*#__PURE__*/_jsx(Popup, {
|
|
82
|
+
popupData: {
|
|
83
|
+
x: popupData.centerX,
|
|
84
|
+
y: popupData.centerY,
|
|
85
|
+
data: popupData.data
|
|
86
|
+
},
|
|
87
|
+
totalWidth: radius * 2,
|
|
88
|
+
totalHeight: radius * 2,
|
|
89
|
+
touchHandler: (x, y) => touchHandler(x - paddingLeft, y - paddingTop),
|
|
90
|
+
viewOffset: viewOffset,
|
|
91
|
+
popupStyle: popupStyle
|
|
92
|
+
})]
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
export default PieChart;
|
|
96
|
+
//# sourceMappingURL=PieChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Canvas","Path","View","usePieChart","Popup","useState","jsx","_jsx","jsxs","_jsxs","PieChart","props","radius","innerRadius","paths","popupData","touchHandler","style","centerView","popupStyle","paddingTop","padding","paddingBottom","paddingLeft","paddingRight","viewOffset","setViewOffset","x","y","backgroundColor","ref","view","measureInWindow","fx","fy","prev","children","position","top","left","width","height","borderRadius","justifyContent","alignItems","innerColor","onTouchStart","event","nativeEvent","locationX","locationY","map","path","color","index","stroke","centerX","centerY","data","totalWidth","totalHeight"],"sourceRoot":"../../../../src","sources":["skia/PieChart/PieChart.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { rect, Skia } from "@shopify/react-native-skia";
|
|
5
|
+
import { getRandomRGBColor } from "../common.js";
|
|
6
|
+
function deegreesToRadians(degrees) {
|
|
7
|
+
return degrees * Math.PI / 180;
|
|
8
|
+
}
|
|
9
|
+
function ypoint(angle, radius, cy) {
|
|
10
|
+
return cy - radius * Math.sin(deegreesToRadians(angle));
|
|
11
|
+
}
|
|
12
|
+
function xpoint(angle, radius, cx) {
|
|
13
|
+
return cx - radius * Math.cos(deegreesToRadians(angle));
|
|
14
|
+
}
|
|
15
|
+
function getCircularPoints(startAngle, radius, angle, cx, cy) {
|
|
16
|
+
let x1 = xpoint(startAngle, radius, cx);
|
|
17
|
+
let y1 = ypoint(startAngle, radius, cy);
|
|
18
|
+
let x2 = xpoint(startAngle + angle, radius, cx);
|
|
19
|
+
let y2 = ypoint(startAngle + angle, radius, cy);
|
|
20
|
+
return [x1, y1, x2, y2];
|
|
21
|
+
}
|
|
22
|
+
export function usePieChart({
|
|
23
|
+
slices,
|
|
24
|
+
style,
|
|
25
|
+
onSliceTouch
|
|
26
|
+
}) {
|
|
27
|
+
const [popupData, setPopupData] = useState(undefined);
|
|
28
|
+
const radius = style.radius ?? 150;
|
|
29
|
+
const diameter = radius * 2;
|
|
30
|
+
const innerRadius = style.innerRadius ?? 100;
|
|
31
|
+
const cx = radius;
|
|
32
|
+
const cy = radius;
|
|
33
|
+
const total = slices.reduce((sum, slice) => sum + slice.value, 0);
|
|
34
|
+
let startAngle = 0;
|
|
35
|
+
const paths = slices.map(({
|
|
36
|
+
value,
|
|
37
|
+
color
|
|
38
|
+
}, index) => {
|
|
39
|
+
const sweepAngle = value / total * 360;
|
|
40
|
+
let [x1, y1, x2, y2] = getCircularPoints(startAngle, radius, sweepAngle, cx, cy);
|
|
41
|
+
let [cx1, cy1, cx2, cy2] = getCircularPoints(startAngle, innerRadius, sweepAngle, cx, cy);
|
|
42
|
+
const path = Skia.Path.Make();
|
|
43
|
+
path.moveTo(cx1, cy1);
|
|
44
|
+
path.lineTo(x1, y1);
|
|
45
|
+
path.addArc(rect(cx - radius, cy - radius, radius * 2, radius * 2), startAngle + 180, sweepAngle);
|
|
46
|
+
path.lineTo(cx2, cy2);
|
|
47
|
+
path.addArc(rect(cx - innerRadius, cy - innerRadius, innerRadius * 2, innerRadius * 2), startAngle + 180 + sweepAngle, -sweepAngle);
|
|
48
|
+
path.lineTo(x1, y1);
|
|
49
|
+
path.close();
|
|
50
|
+
startAngle += sweepAngle;
|
|
51
|
+
return {
|
|
52
|
+
path,
|
|
53
|
+
color: color ?? getRandomRGBColor()
|
|
54
|
+
};
|
|
55
|
+
});
|
|
56
|
+
const touchHandler = (locationX, locationY) => {
|
|
57
|
+
if (!onSliceTouch || locationX < 0 || locationY < 0 || locationX >= diameter || locationY >= diameter) {
|
|
58
|
+
setPopupData(undefined);
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
let foundPath = false;
|
|
62
|
+
let angles = 0;
|
|
63
|
+
paths.forEach(({
|
|
64
|
+
path
|
|
65
|
+
}, index) => {
|
|
66
|
+
let slice = slices[index];
|
|
67
|
+
if (!slice) return;
|
|
68
|
+
let lastAngle = slice.value / total * 360;
|
|
69
|
+
if (path.contains(locationX, locationY)) {
|
|
70
|
+
const label = slice.label || 'Slice';
|
|
71
|
+
const outerX = xpoint(angles + lastAngle / 2, radius, cx);
|
|
72
|
+
const innerX = xpoint(angles + lastAngle / 2, innerRadius, cx);
|
|
73
|
+
const outerY = ypoint(angles + lastAngle / 2, radius, cy);
|
|
74
|
+
const innerY = ypoint(angles + lastAngle / 2, innerRadius, cy);
|
|
75
|
+
const centerY = (outerY + innerY) / 2;
|
|
76
|
+
const centerX = (outerX + innerX) / 2;
|
|
77
|
+
onSliceTouch?.(slice);
|
|
78
|
+
setPopupData({
|
|
79
|
+
centerX: centerX,
|
|
80
|
+
centerY: centerY,
|
|
81
|
+
data: slice
|
|
82
|
+
});
|
|
83
|
+
foundPath = true;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
angles += lastAngle;
|
|
87
|
+
});
|
|
88
|
+
if (!foundPath) {
|
|
89
|
+
console.log('No slice found at touch location');
|
|
90
|
+
onSliceTouch?.(undefined);
|
|
91
|
+
setPopupData(undefined);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
return {
|
|
95
|
+
paths,
|
|
96
|
+
diameter,
|
|
97
|
+
innerRadius,
|
|
98
|
+
radius,
|
|
99
|
+
popupData,
|
|
100
|
+
touchHandler
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=usePieChart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","rect","Skia","getRandomRGBColor","deegreesToRadians","degrees","Math","PI","ypoint","angle","radius","cy","sin","xpoint","cx","cos","getCircularPoints","startAngle","x1","y1","x2","y2","usePieChart","slices","style","onSliceTouch","popupData","setPopupData","undefined","diameter","innerRadius","total","reduce","sum","slice","value","paths","map","color","index","sweepAngle","cx1","cy1","cx2","cy2","path","Path","Make","moveTo","lineTo","addArc","close","touchHandler","locationX","locationY","foundPath","angles","forEach","lastAngle","contains","label","outerX","innerX","outerY","innerY","centerY","centerX","data","console","log"],"sourceRoot":"../../../../src","sources":["skia/PieChart/usePieChart.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { Modal, View } from 'react-native';
|
|
5
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
6
|
+
export default function Popup({
|
|
7
|
+
popupData,
|
|
8
|
+
totalWidth,
|
|
9
|
+
totalHeight,
|
|
10
|
+
touchHandler,
|
|
11
|
+
onTouchOutside,
|
|
12
|
+
popupStyle,
|
|
13
|
+
viewOffset
|
|
14
|
+
}) {
|
|
15
|
+
return /*#__PURE__*/_jsx(_Fragment, {
|
|
16
|
+
children: popupData && popupStyle?.renderPopup && /*#__PURE__*/_jsx(Modal, {
|
|
17
|
+
animationType: "fade",
|
|
18
|
+
transparent: true,
|
|
19
|
+
visible: true,
|
|
20
|
+
onRequestClose: () => {
|
|
21
|
+
onTouchOutside?.();
|
|
22
|
+
},
|
|
23
|
+
onTouchStart: e => {
|
|
24
|
+
console.log('modal touched ');
|
|
25
|
+
},
|
|
26
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
27
|
+
style: {
|
|
28
|
+
flex: 1,
|
|
29
|
+
width: '100%',
|
|
30
|
+
height: '100%'
|
|
31
|
+
},
|
|
32
|
+
onTouchStart: e => {
|
|
33
|
+
const x = e.nativeEvent.pageX;
|
|
34
|
+
const y = e.nativeEvent.pageY;
|
|
35
|
+
touchHandler?.(x - viewOffset.x, y - viewOffset.y);
|
|
36
|
+
},
|
|
37
|
+
children: [popupData && !Array.isArray(popupData) && /*#__PURE__*/_jsx(View, {
|
|
38
|
+
style: [{
|
|
39
|
+
position: 'absolute',
|
|
40
|
+
left: Math.max(0, Math.min(popupData.x, totalWidth - (popupStyle?.width ?? 0)) + viewOffset.x),
|
|
41
|
+
top: Math.max(0, Math.min(popupData.y, totalHeight - (popupStyle?.height ?? 0)) + viewOffset.y)
|
|
42
|
+
}],
|
|
43
|
+
onTouchStart: e => e.stopPropagation(),
|
|
44
|
+
children: popupStyle?.renderPopup(popupData.data)
|
|
45
|
+
}), popupData && Array.isArray(popupData) && popupData.map((popupItem, index) => /*#__PURE__*/_jsx(View, {
|
|
46
|
+
style: [{
|
|
47
|
+
position: 'absolute',
|
|
48
|
+
left: Math.max(0, Math.min(popupItem.x, totalWidth - (popupStyle?.width ?? 0)) + viewOffset.x),
|
|
49
|
+
top: Math.max(0, Math.min(popupItem.y, totalHeight - (popupStyle?.height ?? 0)) + viewOffset.y)
|
|
50
|
+
}],
|
|
51
|
+
onTouchStart: e => e.stopPropagation(),
|
|
52
|
+
children: popupStyle?.renderPopup?.(popupItem.data)
|
|
53
|
+
}, index))]
|
|
54
|
+
})
|
|
55
|
+
})
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=Popup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Modal","View","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","Popup","popupData","totalWidth","totalHeight","touchHandler","onTouchOutside","popupStyle","viewOffset","children","renderPopup","animationType","transparent","visible","onRequestClose","onTouchStart","e","console","log","style","flex","width","height","x","nativeEvent","pageX","y","pageY","Array","isArray","position","left","Math","max","min","top","stopPropagation","data","map","popupItem","index"],"sourceRoot":"../../../src","sources":["skia/Popup.tsx"],"mappings":"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","ignoreList":[]}
|