react-native-reanimated 4.3.0-nightly-20251223-25c938414 → 4.3.0-nightly-20260107-ce9032c25
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/lib/module/css/svg/native/configs/path.js +8 -3
- package/lib/module/css/svg/native/configs/path.js.map +1 -1
- package/lib/module/css/svg/native/processors/colors.js +3 -0
- package/lib/module/css/svg/native/processors/colors.js.map +1 -1
- package/lib/module/css/svg/native/processors/index.js +1 -0
- package/lib/module/css/svg/native/processors/index.js.map +1 -1
- package/lib/module/css/svg/native/processors/path.js +191 -0
- package/lib/module/css/svg/native/processors/path.js.map +1 -0
- package/lib/module/css/utils/index.js +1 -0
- package/lib/module/css/utils/index.js.map +1 -1
- package/lib/module/css/utils/path.js +127 -0
- package/lib/module/css/utils/path.js.map +1 -0
- package/lib/module/platform-specific/jsVersion.js +1 -1
- package/lib/typescript/css/svg/native/configs/path.d.ts.map +1 -1
- package/lib/typescript/css/svg/native/processors/colors.d.ts.map +1 -1
- package/lib/typescript/css/svg/native/processors/index.d.ts +1 -0
- package/lib/typescript/css/svg/native/processors/index.d.ts.map +1 -1
- package/lib/typescript/css/svg/native/processors/path.d.ts +7 -0
- package/lib/typescript/css/svg/native/processors/path.d.ts.map +1 -0
- package/lib/typescript/css/utils/index.d.ts +1 -0
- package/lib/typescript/css/utils/index.d.ts.map +1 -1
- package/lib/typescript/css/utils/path.d.ts +8 -0
- package/lib/typescript/css/utils/path.d.ts.map +1 -0
- package/lib/typescript/platform-specific/jsVersion.d.ts +1 -1
- package/package.json +2 -2
- package/src/css/svg/native/configs/path.ts +3 -2
- package/src/css/svg/native/processors/colors.ts +4 -0
- package/src/css/svg/native/processors/index.ts +1 -0
- package/src/css/svg/native/processors/path.ts +278 -0
- package/src/css/utils/index.ts +1 -0
- package/src/css/utils/path.ts +252 -0
- package/src/platform-specific/jsVersion.ts +1 -1
|
@@ -2,13 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
// TODO: Fix me
|
|
4
4
|
// @ts-ignore RNSVG doesn't export types for web, see https://github.com/software-mansion/react-native-svg/pull/2801
|
|
5
|
+
import { processOpacity, processSVGPath } from '../processors';
|
|
5
6
|
import { commonSvgProps } from './common';
|
|
6
7
|
|
|
7
8
|
// TODO: Fix me
|
|
8
9
|
// @ts-ignore RNSVG doesn't export types for web, see https://github.com/software-mansion/react-native-svg/pull/2801
|
|
9
|
-
// @ts-ignore - remove when more properties are added
|
|
10
10
|
export const SVG_PATH_PROPERTIES_CONFIG = {
|
|
11
|
-
...commonSvgProps
|
|
12
|
-
|
|
11
|
+
...commonSvgProps,
|
|
12
|
+
d: {
|
|
13
|
+
process: processSVGPath
|
|
14
|
+
},
|
|
15
|
+
opacity: {
|
|
16
|
+
process: processOpacity
|
|
17
|
+
}
|
|
13
18
|
};
|
|
14
19
|
//# sourceMappingURL=path.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["commonSvgProps","SVG_PATH_PROPERTIES_CONFIG"],"sourceRoot":"../../../../../../src","sources":["css/svg/native/configs/path.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA;
|
|
1
|
+
{"version":3,"names":["processOpacity","processSVGPath","commonSvgProps","SVG_PATH_PROPERTIES_CONFIG","d","process","opacity"],"sourceRoot":"../../../../../../src","sources":["css/svg/native/configs/path.ts"],"mappings":"AAAA,YAAY;;AAEZ;AACA;AAGA,SAASA,cAAc,EAAEC,cAAc,QAAQ,eAAe;AAE9D,SAASC,cAAc,QAAQ,UAAU;;AAEzC;AACA;AACA,OAAO,MAAMC,0BAA4D,GAAG;EAC1E,GAAGD,cAAc;EACjBE,CAAC,EAAE;IAAEC,OAAO,EAAEJ;EAAe,CAAC;EAC9BK,OAAO,EAAE;IAAED,OAAO,EAAEL;EAAe;AACrC,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["processColorNumber","ReanimatedError","ERROR_MESSAGES","invalidColor","color","JSON","stringify","processColorSVG","value","processed"],"sourceRoot":"../../../../../../src","sources":["css/svg/native/processors/colors.ts"],"mappings":"AAAA,YAAY;;AAGZ,SACEA,kBAAkB,EAClBC,eAAe,QAEV,oBAAoB;AAE3B,OAAO,MAAMC,cAAc,GAAG;EAC5BC,YAAY,EAAGC,KAAc,IAC3B,wBAAwBC,IAAI,CAACC,SAAS,CAACF,KAAK,CAAC;AACjD,CAAC;AAED,OAAO,MAAMG,eAGZ,GAAIC,KAAK,IAAK;EACb,MAAMC,SAAS,GAAGT,kBAAkB,CAACQ,KAAK,CAAC;EAE3C,IAAIC,SAAS,EAAE;IACb,OAAOA,SAAS;EAClB;EAEA,IAAID,KAAK,KAAK,aAAa,EAAE;IAC3B,OAAO,KAAK;EACd;EACA,IAAIA,KAAK,KAAK,cAAc,EAAE;IAC5B,OAAO,cAAc;EACvB;EAEA,MAAM,IAAIP,eAAe,CAACC,cAAc,CAACC,YAAY,CAACK,KAAK,CAAC,CAAC;AAC/D,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["processColorNumber","ReanimatedError","ERROR_MESSAGES","invalidColor","color","JSON","stringify","processColorSVG","value","processed"],"sourceRoot":"../../../../../../src","sources":["css/svg/native/processors/colors.ts"],"mappings":"AAAA,YAAY;;AAGZ,SACEA,kBAAkB,EAClBC,eAAe,QAEV,oBAAoB;AAE3B,OAAO,MAAMC,cAAc,GAAG;EAC5BC,YAAY,EAAGC,KAAc,IAC3B,wBAAwBC,IAAI,CAACC,SAAS,CAACF,KAAK,CAAC;AACjD,CAAC;AAED,OAAO,MAAMG,eAGZ,GAAIC,KAAK,IAAK;EACb,MAAMC,SAAS,GAAGT,kBAAkB,CAACQ,KAAK,CAAC;EAE3C,IAAIA,KAAK,KAAK,MAAM,EAAE;IACpB,OAAO,CAAC;EACV;EAEA,IAAIC,SAAS,EAAE;IACb,OAAOA,SAAS;EAClB;EAEA,IAAID,KAAK,KAAK,aAAa,EAAE;IAC3B,OAAO,KAAK;EACd;EACA,IAAIA,KAAK,KAAK,cAAc,EAAE;IAC5B,OAAO,cAAc;EACvB;EAEA,MAAM,IAAIP,eAAe,CAACC,cAAc,CAACC,YAAY,CAACK,KAAK,CAAC,CAAC;AAC/D,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["processStrokeDashArray"],"sourceRoot":"../../../../../../src","sources":["css/svg/native/processors/index.ts"],"mappings":"AAAA,YAAY;;AACZ,cAAc,UAAU;AACxB,cAAc,WAAW;AACzB,cAAc,UAAU;AACxB,SAASA,sBAAsB,QAAQ,UAAU","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["processSVGPath","processStrokeDashArray"],"sourceRoot":"../../../../../../src","sources":["css/svg/native/processors/index.ts"],"mappings":"AAAA,YAAY;;AACZ,cAAc,UAAU;AACxB,cAAc,WAAW;AACzB,cAAc,UAAU;AACxB,SAASA,cAAc,QAAQ,QAAQ;AACvC,SAASC,sBAAsB,QAAQ,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import { ReanimatedError } from '../../../../common';
|
|
4
|
+
import { arcToCubic, lineToCubic, NUMBER_PATTERN, PATH_COMMAND_LENGTHS, quadraticToCubic, reflectControlPoint, SEGMENT_PATTERN } from '../../../utils';
|
|
5
|
+
export const ERROR_MESSAGES = {
|
|
6
|
+
invalidSVGPathCommand: (command, args) => `Invalid SVG Path command: ${JSON.stringify(command)} ${JSON.stringify(args)}`,
|
|
7
|
+
invalidSVGPathStart: command => `Invalid SVG Path: Path must start with "M" or "m", but found "${command}"`
|
|
8
|
+
};
|
|
9
|
+
export const processSVGPath = d => {
|
|
10
|
+
let pathSegments = parsePathString(d);
|
|
11
|
+
pathSegments = normalizePath(pathSegments);
|
|
12
|
+
return pathSegments.flatMap(subArr => subArr).join(' ');
|
|
13
|
+
};
|
|
14
|
+
function processPathSegment(command, args, pathSegments) {
|
|
15
|
+
let type = command.toLowerCase();
|
|
16
|
+
if (pathSegments.length === 0 && type !== 'm') {
|
|
17
|
+
throw new ReanimatedError(ERROR_MESSAGES.invalidSVGPathStart(command));
|
|
18
|
+
}
|
|
19
|
+
let argsStartIdx = 0;
|
|
20
|
+
if (type === 'm' && args.length > PATH_COMMAND_LENGTHS['m']) {
|
|
21
|
+
pathSegments.push([command, ...args.slice(0, PATH_COMMAND_LENGTHS['m'])]);
|
|
22
|
+
argsStartIdx += PATH_COMMAND_LENGTHS['m'];
|
|
23
|
+
type = 'l'; // If m has more than 2 (length['m']) arguments, use them in implicit l commands
|
|
24
|
+
command = command === 'm' ? 'l' : 'L';
|
|
25
|
+
}
|
|
26
|
+
do {
|
|
27
|
+
if (args.length - argsStartIdx < PATH_COMMAND_LENGTHS[type]) {
|
|
28
|
+
throw new ReanimatedError(ERROR_MESSAGES.invalidSVGPathCommand(command, args.slice(argsStartIdx)));
|
|
29
|
+
}
|
|
30
|
+
pathSegments.push([command, ...args.slice(argsStartIdx, argsStartIdx + PATH_COMMAND_LENGTHS[type])]);
|
|
31
|
+
argsStartIdx += PATH_COMMAND_LENGTHS[type];
|
|
32
|
+
} while (args.length - argsStartIdx !== 0);
|
|
33
|
+
}
|
|
34
|
+
function parsePathString(d) {
|
|
35
|
+
const pathSegments = [];
|
|
36
|
+
d.replace(SEGMENT_PATTERN, (_, command, argsString) => {
|
|
37
|
+
const numbers = argsString.match(NUMBER_PATTERN);
|
|
38
|
+
const args = numbers ? numbers.map(Number) : [];
|
|
39
|
+
processPathSegment(command, args, pathSegments);
|
|
40
|
+
return '';
|
|
41
|
+
});
|
|
42
|
+
return pathSegments;
|
|
43
|
+
}
|
|
44
|
+
function normalizePath(pathSegments) {
|
|
45
|
+
const absoluteSegments = absolutizePath(pathSegments);
|
|
46
|
+
const out = [];
|
|
47
|
+
const state = {
|
|
48
|
+
curX: 0,
|
|
49
|
+
curY: 0,
|
|
50
|
+
startX: 0,
|
|
51
|
+
startY: 0,
|
|
52
|
+
lastCubicCtrlX: 0,
|
|
53
|
+
lastCubicCtrlY: 0,
|
|
54
|
+
lastQuadCtrlX: 0,
|
|
55
|
+
lastQuadCtrlY: 0
|
|
56
|
+
};
|
|
57
|
+
for (const seg of absoluteSegments) {
|
|
58
|
+
let cmd = seg[0];
|
|
59
|
+
let args = [...seg.slice(1)];
|
|
60
|
+
if (cmd === 'S') {
|
|
61
|
+
const [rX, rY] = reflectControlPoint(state.curX, state.curY, state.lastCubicCtrlX, state.lastCubicCtrlY);
|
|
62
|
+
cmd = 'C';
|
|
63
|
+
args = [rX, rY, args[0], args[1], args[2], args[3]];
|
|
64
|
+
} else if (cmd === 'T') {
|
|
65
|
+
const [rX, rY] = reflectControlPoint(state.curX, state.curY, state.lastQuadCtrlX, state.lastQuadCtrlY);
|
|
66
|
+
cmd = 'Q';
|
|
67
|
+
args = [rX, rY, args[0], args[1]];
|
|
68
|
+
}
|
|
69
|
+
if (cmd === 'H') {
|
|
70
|
+
cmd = 'L';
|
|
71
|
+
args = [args[0], state.curY];
|
|
72
|
+
}
|
|
73
|
+
if (cmd === 'V') {
|
|
74
|
+
cmd = 'L';
|
|
75
|
+
args = [state.curX, args[0]];
|
|
76
|
+
}
|
|
77
|
+
const result = handlers[cmd](state, args);
|
|
78
|
+
out.push(...result);
|
|
79
|
+
const isCubic = cmd === 'C';
|
|
80
|
+
const isQuad = cmd === 'Q';
|
|
81
|
+
if (!isCubic) {
|
|
82
|
+
state.lastCubicCtrlX = state.curX;
|
|
83
|
+
state.lastCubicCtrlY = state.curY;
|
|
84
|
+
}
|
|
85
|
+
if (!isQuad) {
|
|
86
|
+
state.lastQuadCtrlX = state.curX;
|
|
87
|
+
state.lastQuadCtrlY = state.curY;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return out;
|
|
91
|
+
}
|
|
92
|
+
function absolutizePath(pathSegments) {
|
|
93
|
+
let curX = 0,
|
|
94
|
+
curY = 0;
|
|
95
|
+
let startX = 0,
|
|
96
|
+
startY = 0;
|
|
97
|
+
return pathSegments.map(seg => {
|
|
98
|
+
const cmd = seg[0];
|
|
99
|
+
const upperCmd = cmd.toUpperCase();
|
|
100
|
+
const isRelative = cmd != upperCmd;
|
|
101
|
+
const args = seg.slice(1);
|
|
102
|
+
if (isRelative) {
|
|
103
|
+
if (upperCmd === 'A') {
|
|
104
|
+
args[5] += curX;
|
|
105
|
+
args[6] += curY;
|
|
106
|
+
} else if (upperCmd === 'V') {
|
|
107
|
+
args[0] += curY;
|
|
108
|
+
} else if (upperCmd === 'H') {
|
|
109
|
+
args[0] += curX;
|
|
110
|
+
} else {
|
|
111
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
112
|
+
args[i] += curX;
|
|
113
|
+
args[i + 1] += curY;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
switch (upperCmd) {
|
|
118
|
+
case 'Z':
|
|
119
|
+
curX = startX;
|
|
120
|
+
curY = startY;
|
|
121
|
+
break;
|
|
122
|
+
case 'H':
|
|
123
|
+
curX = args[0];
|
|
124
|
+
break;
|
|
125
|
+
case 'V':
|
|
126
|
+
curY = args[0];
|
|
127
|
+
break;
|
|
128
|
+
case 'M':
|
|
129
|
+
curX = args[0];
|
|
130
|
+
curY = args[1];
|
|
131
|
+
startX = curX;
|
|
132
|
+
startY = curY;
|
|
133
|
+
break;
|
|
134
|
+
default:
|
|
135
|
+
// For L, C, S, Q, T, A the last pair is the new cursor
|
|
136
|
+
if (args.length >= 2) {
|
|
137
|
+
curX = args[args.length - 2];
|
|
138
|
+
curY = args[args.length - 1];
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return [upperCmd, ...args];
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
const handlers = {
|
|
145
|
+
M: (state, args) => {
|
|
146
|
+
const [x, y] = args;
|
|
147
|
+
state.curX = state.startX = x;
|
|
148
|
+
state.curY = state.startY = y;
|
|
149
|
+
return [['M', x, y]];
|
|
150
|
+
},
|
|
151
|
+
L: (state, args) => {
|
|
152
|
+
const [x, y] = args;
|
|
153
|
+
const cubic = lineToCubic(state.curX, state.curY, x, y);
|
|
154
|
+
state.curX = x;
|
|
155
|
+
state.curY = y;
|
|
156
|
+
return [['C', ...cubic]];
|
|
157
|
+
},
|
|
158
|
+
Q: (state, args) => {
|
|
159
|
+
const [qcx, qcy, x, y] = args;
|
|
160
|
+
const cubic = quadraticToCubic(state.curX, state.curY, qcx, qcy, x, y);
|
|
161
|
+
state.lastQuadCtrlX = qcx;
|
|
162
|
+
state.lastQuadCtrlY = qcy;
|
|
163
|
+
state.curX = x;
|
|
164
|
+
state.curY = y;
|
|
165
|
+
return [['C', ...cubic]];
|
|
166
|
+
},
|
|
167
|
+
C: (state, args) => {
|
|
168
|
+
const [_cp1x, _cp1y, cp2x, cp2y, x, y] = args;
|
|
169
|
+
state.lastCubicCtrlX = cp2x;
|
|
170
|
+
state.lastCubicCtrlY = cp2y;
|
|
171
|
+
state.curX = x;
|
|
172
|
+
state.curY = y;
|
|
173
|
+
return [['C', ...args]];
|
|
174
|
+
},
|
|
175
|
+
A: (state, args) => {
|
|
176
|
+
const cubics = arcToCubic(state.curX, state.curY, args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
|
|
177
|
+
if (cubics.length === 0) return [];
|
|
178
|
+
const last = cubics[cubics.length - 1];
|
|
179
|
+
state.lastCubicCtrlX = last[2];
|
|
180
|
+
state.lastCubicCtrlY = last[3];
|
|
181
|
+
state.curX = last[4];
|
|
182
|
+
state.curY = last[5];
|
|
183
|
+
return cubics.map(c => ['C', ...c]);
|
|
184
|
+
},
|
|
185
|
+
Z: state => {
|
|
186
|
+
state.curX = state.startX;
|
|
187
|
+
state.curY = state.startY;
|
|
188
|
+
return [['Z']];
|
|
189
|
+
}
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ReanimatedError","arcToCubic","lineToCubic","NUMBER_PATTERN","PATH_COMMAND_LENGTHS","quadraticToCubic","reflectControlPoint","SEGMENT_PATTERN","ERROR_MESSAGES","invalidSVGPathCommand","command","args","JSON","stringify","invalidSVGPathStart","processSVGPath","d","pathSegments","parsePathString","normalizePath","flatMap","subArr","join","processPathSegment","type","toLowerCase","length","argsStartIdx","push","slice","replace","_","argsString","numbers","match","map","Number","absoluteSegments","absolutizePath","out","state","curX","curY","startX","startY","lastCubicCtrlX","lastCubicCtrlY","lastQuadCtrlX","lastQuadCtrlY","seg","cmd","rX","rY","result","handlers","isCubic","isQuad","upperCmd","toUpperCase","isRelative","i","M","x","y","L","cubic","Q","qcx","qcy","C","_cp1x","_cp1y","cp2x","cp2y","A","cubics","last","c","Z"],"sourceRoot":"../../../../../../src","sources":["css/svg/native/processors/path.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["css/utils/index.ts"],"mappings":"AAAA,YAAY;;AACZ,cAAc,YAAY;AAC1B,cAAc,UAAU;AACxB,cAAc,WAAW;AACzB,cAAc,SAAS","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["css/utils/index.ts"],"mappings":"AAAA,YAAY;;AACZ,cAAc,YAAY;AAC1B,cAAc,UAAU;AACxB,cAAc,WAAW;AACzB,cAAc,QAAQ;AACtB,cAAc,SAAS","ignoreList":[]}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
export const PATH_COMMAND_LENGTHS = {
|
|
4
|
+
a: 7,
|
|
5
|
+
c: 6,
|
|
6
|
+
h: 1,
|
|
7
|
+
l: 2,
|
|
8
|
+
m: 2,
|
|
9
|
+
q: 4,
|
|
10
|
+
s: 4,
|
|
11
|
+
t: 2,
|
|
12
|
+
v: 1,
|
|
13
|
+
z: 0
|
|
14
|
+
};
|
|
15
|
+
export const SEGMENT_PATTERN = /([achlmqstvz])([^achlmqstvz]*)/gi;
|
|
16
|
+
export const NUMBER_PATTERN = /-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;
|
|
17
|
+
export function reflectControlPoint(curX, curY, oldX, oldY) {
|
|
18
|
+
return [2 * curX - oldX, 2 * curY - oldY];
|
|
19
|
+
}
|
|
20
|
+
export function lineToCubic(x1, y1, x2, y2) {
|
|
21
|
+
return [x1 + (x2 - x1) / 3, y1 + (y2 - y1) / 3, x1 + 2 * (x2 - x1) / 3, y1 + 2 * (y2 - y1) / 3, x2, y2];
|
|
22
|
+
}
|
|
23
|
+
export function quadraticToCubic(curX, curY, qcx, qcy, x, y) {
|
|
24
|
+
const cp1x = curX + 2 / 3 * (qcx - curX);
|
|
25
|
+
const cp1y = curY + 2 / 3 * (qcy - curY);
|
|
26
|
+
const cp2x = x + 2 / 3 * (qcx - x);
|
|
27
|
+
const cp2y = y + 2 / 3 * (qcy - y);
|
|
28
|
+
return [cp1x, cp1y, cp2x, cp2y, x, y];
|
|
29
|
+
}
|
|
30
|
+
export function arcToCubic(startX, startY, radiusX, radiusY, xAxisRotation, largeArcFlag, sweepFlag, endX, endY) {
|
|
31
|
+
// Identical endpoints -- omit the segment
|
|
32
|
+
if (startX === endX && startY === endY) {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
radiusX = Math.abs(radiusX);
|
|
36
|
+
radiusY = Math.abs(radiusY);
|
|
37
|
+
|
|
38
|
+
// Degenerate case:
|
|
39
|
+
if (radiusX === 0 || radiusY === 0) {
|
|
40
|
+
return [lineToCubic(startX, startY, endX, endY)];
|
|
41
|
+
}
|
|
42
|
+
const fA = largeArcFlag !== 0 ? 1 : 0;
|
|
43
|
+
const fS = sweepFlag !== 0 ? 1 : 0;
|
|
44
|
+
const phi = xAxisRotation % 360 * Math.PI / 180;
|
|
45
|
+
const sinPhi = Math.sin(phi);
|
|
46
|
+
const cosPhi = Math.cos(phi);
|
|
47
|
+
const {
|
|
48
|
+
centerX,
|
|
49
|
+
centerY,
|
|
50
|
+
startAngle,
|
|
51
|
+
deltaAngle,
|
|
52
|
+
correctedRadiusX,
|
|
53
|
+
correctedRadiusY
|
|
54
|
+
} = getCenterParameterization(startX, startY, radiusX, radiusY, fA, fS, endX, endY, sinPhi, cosPhi);
|
|
55
|
+
return splitArcIntoSegments(centerX, centerY, startAngle, deltaAngle, correctedRadiusX, correctedRadiusY, sinPhi, cosPhi);
|
|
56
|
+
}
|
|
57
|
+
function getCenterParameterization(startX, startY, radiusX, radiusY, largeArcFlag, sweepFlag, endX, endY, sinRotation, cosRotation) {
|
|
58
|
+
const xPrime = cosRotation * (startX - endX) / 2 + sinRotation * (startY - endY) / 2;
|
|
59
|
+
const yPrime = -sinRotation * (startX - endX) / 2 + cosRotation * (startY - endY) / 2;
|
|
60
|
+
const xPrimeSq = xPrime * xPrime;
|
|
61
|
+
const yPrimeSq = yPrime * yPrime;
|
|
62
|
+
let correctedRadiusX = radiusX;
|
|
63
|
+
let correctedRadiusY = radiusY;
|
|
64
|
+
const radCheck = xPrimeSq / (correctedRadiusX * correctedRadiusX) + yPrimeSq / (correctedRadiusY * correctedRadiusY);
|
|
65
|
+
if (radCheck > 1) {
|
|
66
|
+
const scale = Math.sqrt(radCheck);
|
|
67
|
+
correctedRadiusX *= scale;
|
|
68
|
+
correctedRadiusY *= scale;
|
|
69
|
+
}
|
|
70
|
+
const crxSq = correctedRadiusX * correctedRadiusX;
|
|
71
|
+
const crySq = correctedRadiusY * correctedRadiusY;
|
|
72
|
+
const sign = largeArcFlag === sweepFlag ? -1 : 1;
|
|
73
|
+
const numerator = Math.max(0, crxSq * crySq - crxSq * yPrimeSq - crySq * xPrimeSq);
|
|
74
|
+
const denominator = crxSq * yPrimeSq + crySq * xPrimeSq;
|
|
75
|
+
const coef = sign * Math.sqrt(numerator / denominator);
|
|
76
|
+
const cxp = coef * (correctedRadiusX * yPrime / correctedRadiusY);
|
|
77
|
+
const cyp = coef * (-(correctedRadiusY * xPrime) / correctedRadiusX);
|
|
78
|
+
const centerX = cosRotation * cxp - sinRotation * cyp + (startX + endX) / 2;
|
|
79
|
+
const centerY = sinRotation * cxp + cosRotation * cyp + (startY + endY) / 2;
|
|
80
|
+
const startVectorX = (xPrime - cxp) / correctedRadiusX;
|
|
81
|
+
const startVectorY = (yPrime - cyp) / correctedRadiusY;
|
|
82
|
+
const endVectorX = (-xPrime - cxp) / correctedRadiusX;
|
|
83
|
+
const endVectorY = (-yPrime - cyp) / correctedRadiusY;
|
|
84
|
+
const startAngle = calculateAngle(1, 0, startVectorX, startVectorY);
|
|
85
|
+
let deltaAngle = calculateAngle(startVectorX, startVectorY, endVectorX, endVectorY);
|
|
86
|
+
if (sweepFlag === 0 && deltaAngle > 0) deltaAngle -= 2 * Math.PI;
|
|
87
|
+
if (sweepFlag === 1 && deltaAngle < 0) deltaAngle += 2 * Math.PI;
|
|
88
|
+
return {
|
|
89
|
+
centerX,
|
|
90
|
+
centerY,
|
|
91
|
+
startAngle,
|
|
92
|
+
deltaAngle,
|
|
93
|
+
correctedRadiusX,
|
|
94
|
+
correctedRadiusY
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function calculateAngle(uX, uY, vX, vY) {
|
|
98
|
+
const dot = uX * vX + uY * vY;
|
|
99
|
+
const mag = Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY);
|
|
100
|
+
const sign = uX * vY - uY * vX < 0 ? -1 : 1;
|
|
101
|
+
return sign * Math.acos(Math.max(-1, Math.min(1, dot / mag)));
|
|
102
|
+
}
|
|
103
|
+
function splitArcIntoSegments(centerX, centerY, startAngle, deltaAngle, radiusX, radiusY, sinRotation, cosRotation) {
|
|
104
|
+
const segments = Math.ceil(Math.abs(deltaAngle) / (Math.PI / 2));
|
|
105
|
+
const segmentAngle = deltaAngle / segments;
|
|
106
|
+
const k = 4 / 3 * Math.tan(segmentAngle / 4);
|
|
107
|
+
const cubics = [];
|
|
108
|
+
for (let i = 0; i < segments; i++) {
|
|
109
|
+
const a1 = startAngle + i * segmentAngle;
|
|
110
|
+
const a2 = startAngle + (i + 1) * segmentAngle;
|
|
111
|
+
const cos1 = Math.cos(a1),
|
|
112
|
+
sin1 = Math.sin(a1);
|
|
113
|
+
const cos2 = Math.cos(a2),
|
|
114
|
+
sin2 = Math.sin(a2);
|
|
115
|
+
const unitX1 = cos1 - k * sin1;
|
|
116
|
+
const unitY1 = sin1 + k * cos1;
|
|
117
|
+
const unitX2 = cos2 + k * sin2;
|
|
118
|
+
const unitY2 = sin2 - k * cos2;
|
|
119
|
+
const transformToEllipse = (uX, uY) => [centerX + cosRotation * uX * radiusX - sinRotation * uY * radiusY, centerY + sinRotation * uX * radiusX + cosRotation * uY * radiusY];
|
|
120
|
+
const [cp1x, cp1y] = transformToEllipse(unitX1, unitY1);
|
|
121
|
+
const [cp2x, cp2y] = transformToEllipse(unitX2, unitY2);
|
|
122
|
+
const [dstX, dstY] = transformToEllipse(cos2, sin2);
|
|
123
|
+
cubics.push([cp1x, cp1y, cp2x, cp2y, dstX, dstY]);
|
|
124
|
+
}
|
|
125
|
+
return cubics;
|
|
126
|
+
}
|
|
127
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["PATH_COMMAND_LENGTHS","a","c","h","l","m","q","s","t","v","z","SEGMENT_PATTERN","NUMBER_PATTERN","reflectControlPoint","curX","curY","oldX","oldY","lineToCubic","x1","y1","x2","y2","quadraticToCubic","qcx","qcy","x","y","cp1x","cp1y","cp2x","cp2y","arcToCubic","startX","startY","radiusX","radiusY","xAxisRotation","largeArcFlag","sweepFlag","endX","endY","Math","abs","fA","fS","phi","PI","sinPhi","sin","cosPhi","cos","centerX","centerY","startAngle","deltaAngle","correctedRadiusX","correctedRadiusY","getCenterParameterization","splitArcIntoSegments","sinRotation","cosRotation","xPrime","yPrime","xPrimeSq","yPrimeSq","radCheck","scale","sqrt","crxSq","crySq","sign","numerator","max","denominator","coef","cxp","cyp","startVectorX","startVectorY","endVectorX","endVectorY","calculateAngle","uX","uY","vX","vY","dot","mag","acos","min","segments","ceil","segmentAngle","k","tan","cubics","i","a1","a2","cos1","sin1","cos2","sin2","unitX1","unitY1","unitX2","unitY2","transformToEllipse","dstX","dstY","push"],"sourceRoot":"../../../../src","sources":["css/utils/path.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* version used to build the native part of the library in runtime. Remember to
|
|
6
6
|
* keep this in sync with the version declared in `package.json`
|
|
7
7
|
*/
|
|
8
|
-
export const jsVersion = '4.3.0-nightly-
|
|
8
|
+
export const jsVersion = '4.3.0-nightly-20260107-ce9032c25';
|
|
9
9
|
//# sourceMappingURL=jsVersion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../../../src/css/svg/native/configs/path.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../../../src/css/svg/native/configs/path.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAKtD,eAAO,MAAM,0BAA0B,EAAE,qBAAqB,CAAC,SAAS,CAIvE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../../../../src/css/svg/native/processors/colors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc;0BACH,OAAO;CAE9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,CAC1C,UAAU,GAAG,MAAM,EACnB,MAAM,GAAG,KAAK,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../../../../../src/css/svg/native/processors/colors.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,cAAc;0BACH,OAAO;CAE9B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,cAAc,CAC1C,UAAU,GAAG,MAAM,EACnB,MAAM,GAAG,KAAK,GAAG,MAAM,CAoBxB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/css/svg/native/processors/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/css/svg/native/processors/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ValueProcessor } from '../../../../common';
|
|
2
|
+
export declare const ERROR_MESSAGES: {
|
|
3
|
+
invalidSVGPathCommand: (command: unknown, args: unknown) => string;
|
|
4
|
+
invalidSVGPathStart: (command: string) => string;
|
|
5
|
+
};
|
|
6
|
+
export declare const processSVGPath: ValueProcessor<string, string>;
|
|
7
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../../../src/css/svg/native/processors/path.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAW1E,eAAO,MAAM,cAAc;qCACQ,OAAO,QAAQ,OAAO;mCAExB,MAAM;CAEtC,CAAC;AAIF,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAKzD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/css/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/css/utils/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const PATH_COMMAND_LENGTHS: Record<string, number>;
|
|
2
|
+
export declare const SEGMENT_PATTERN: RegExp;
|
|
3
|
+
export declare const NUMBER_PATTERN: RegExp;
|
|
4
|
+
export declare function reflectControlPoint(curX: number, curY: number, oldX: number, oldY: number): [number, number];
|
|
5
|
+
export declare function lineToCubic(x1: number, y1: number, x2: number, y2: number): number[];
|
|
6
|
+
export declare function quadraticToCubic(curX: number, curY: number, qcx: number, qcy: number, x: number, y: number): [number, number, number, number, number, number];
|
|
7
|
+
export declare function arcToCubic(startX: number, startY: number, radiusX: number, radiusY: number, xAxisRotation: number, largeArcFlag: number, sweepFlag: number, endX: number, endY: number): number[][];
|
|
8
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../../src/css/utils/path.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWvD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAqC,CAAC;AAClE,eAAO,MAAM,cAAc,QAAsC,CAAC;AAElE,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,CAAC,MAAM,EAAE,MAAM,CAAC,CAElB;AAED,wBAAgB,WAAW,CACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,MAAM,EAAE,CASV;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAMlD;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,MAAM,EAAE,EAAE,CAmDZ"}
|
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* version used to build the native part of the library in runtime. Remember to
|
|
4
4
|
* keep this in sync with the version declared in `package.json`
|
|
5
5
|
*/
|
|
6
|
-
export declare const jsVersion = "4.3.0-nightly-
|
|
6
|
+
export declare const jsVersion = "4.3.0-nightly-20260107-ce9032c25";
|
|
7
7
|
//# sourceMappingURL=jsVersion.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-reanimated",
|
|
3
|
-
"version": "4.3.0-nightly-
|
|
3
|
+
"version": "4.3.0-nightly-20260107-ce9032c25",
|
|
4
4
|
"description": "More powerful alternative to Animated library for React Native.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react-native",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"peerDependencies": {
|
|
99
99
|
"react": "*",
|
|
100
100
|
"react-native": "*",
|
|
101
|
-
"react-native-worklets": "0.8.0-nightly-
|
|
101
|
+
"react-native-worklets": "0.8.0-nightly-20260107-ce9032c25"
|
|
102
102
|
},
|
|
103
103
|
"devDependencies": {
|
|
104
104
|
"@babel/core": "7.28.4",
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
// @ts-ignore RNSVG doesn't export types for web, see https://github.com/software-mansion/react-native-svg/pull/2801
|
|
5
5
|
import type { PathProps } from 'react-native-svg';
|
|
6
6
|
|
|
7
|
+
import { processOpacity, processSVGPath } from '../processors';
|
|
7
8
|
import type { SvgStyleBuilderConfig } from './common';
|
|
8
9
|
import { commonSvgProps } from './common';
|
|
9
10
|
|
|
10
11
|
// TODO: Fix me
|
|
11
12
|
// @ts-ignore RNSVG doesn't export types for web, see https://github.com/software-mansion/react-native-svg/pull/2801
|
|
12
|
-
// @ts-ignore - remove when more properties are added
|
|
13
13
|
export const SVG_PATH_PROPERTIES_CONFIG: SvgStyleBuilderConfig<PathProps> = {
|
|
14
14
|
...commonSvgProps,
|
|
15
|
-
|
|
15
|
+
d: { process: processSVGPath },
|
|
16
|
+
opacity: { process: processOpacity },
|
|
16
17
|
};
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
import { ReanimatedError, type ValueProcessor } from '../../../../common';
|
|
4
|
+
import {
|
|
5
|
+
arcToCubic,
|
|
6
|
+
lineToCubic,
|
|
7
|
+
NUMBER_PATTERN,
|
|
8
|
+
PATH_COMMAND_LENGTHS,
|
|
9
|
+
quadraticToCubic,
|
|
10
|
+
reflectControlPoint,
|
|
11
|
+
SEGMENT_PATTERN,
|
|
12
|
+
} from '../../../utils';
|
|
13
|
+
|
|
14
|
+
export const ERROR_MESSAGES = {
|
|
15
|
+
invalidSVGPathCommand: (command: unknown, args: unknown) =>
|
|
16
|
+
`Invalid SVG Path command: ${JSON.stringify(command)} ${JSON.stringify(args)}`,
|
|
17
|
+
invalidSVGPathStart: (command: string) =>
|
|
18
|
+
`Invalid SVG Path: Path must start with "M" or "m", but found "${command}"`,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
type PathCommand = [string, ...number[]];
|
|
22
|
+
|
|
23
|
+
export const processSVGPath: ValueProcessor<string, string> = (d) => {
|
|
24
|
+
let pathSegments: PathCommand[] = parsePathString(d);
|
|
25
|
+
pathSegments = normalizePath(pathSegments);
|
|
26
|
+
|
|
27
|
+
return pathSegments.flatMap((subArr) => subArr).join(' ');
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
function processPathSegment(
|
|
31
|
+
command: string,
|
|
32
|
+
args: number[],
|
|
33
|
+
pathSegments: PathCommand[]
|
|
34
|
+
): void {
|
|
35
|
+
let type = command.toLowerCase();
|
|
36
|
+
|
|
37
|
+
if (pathSegments.length === 0 && type !== 'm') {
|
|
38
|
+
throw new ReanimatedError(ERROR_MESSAGES.invalidSVGPathStart(command));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let argsStartIdx = 0;
|
|
42
|
+
|
|
43
|
+
if (type === 'm' && args.length > PATH_COMMAND_LENGTHS['m']) {
|
|
44
|
+
pathSegments.push([command, ...args.slice(0, PATH_COMMAND_LENGTHS['m'])]);
|
|
45
|
+
argsStartIdx += PATH_COMMAND_LENGTHS['m'];
|
|
46
|
+
type = 'l'; // If m has more than 2 (length['m']) arguments, use them in implicit l commands
|
|
47
|
+
command = command === 'm' ? 'l' : 'L';
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
do {
|
|
51
|
+
if (args.length - argsStartIdx < PATH_COMMAND_LENGTHS[type]) {
|
|
52
|
+
throw new ReanimatedError(
|
|
53
|
+
ERROR_MESSAGES.invalidSVGPathCommand(command, args.slice(argsStartIdx))
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
pathSegments.push([
|
|
58
|
+
command,
|
|
59
|
+
...args.slice(argsStartIdx, argsStartIdx + PATH_COMMAND_LENGTHS[type]),
|
|
60
|
+
]);
|
|
61
|
+
argsStartIdx += PATH_COMMAND_LENGTHS[type];
|
|
62
|
+
} while (args.length - argsStartIdx !== 0);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
function parsePathString(d: string): PathCommand[] {
|
|
66
|
+
const pathSegments: PathCommand[] = [];
|
|
67
|
+
|
|
68
|
+
d.replace(SEGMENT_PATTERN, (_, command: string, argsString: string) => {
|
|
69
|
+
const numbers = argsString.match(NUMBER_PATTERN);
|
|
70
|
+
const args = numbers ? numbers.map(Number) : [];
|
|
71
|
+
|
|
72
|
+
processPathSegment(command, args, pathSegments);
|
|
73
|
+
return '';
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
return pathSegments;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
function normalizePath(pathSegments: PathCommand[]): PathCommand[] {
|
|
80
|
+
const absoluteSegments = absolutizePath(pathSegments);
|
|
81
|
+
const out: PathCommand[] = [];
|
|
82
|
+
|
|
83
|
+
const state: PathState = {
|
|
84
|
+
curX: 0,
|
|
85
|
+
curY: 0,
|
|
86
|
+
startX: 0,
|
|
87
|
+
startY: 0,
|
|
88
|
+
lastCubicCtrlX: 0,
|
|
89
|
+
lastCubicCtrlY: 0,
|
|
90
|
+
lastQuadCtrlX: 0,
|
|
91
|
+
lastQuadCtrlY: 0,
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
for (const seg of absoluteSegments) {
|
|
95
|
+
let cmd = seg[0];
|
|
96
|
+
let args = [...seg.slice(1)] as number[];
|
|
97
|
+
|
|
98
|
+
if (cmd === 'S') {
|
|
99
|
+
const [rX, rY] = reflectControlPoint(
|
|
100
|
+
state.curX,
|
|
101
|
+
state.curY,
|
|
102
|
+
state.lastCubicCtrlX,
|
|
103
|
+
state.lastCubicCtrlY
|
|
104
|
+
);
|
|
105
|
+
cmd = 'C';
|
|
106
|
+
args = [rX, rY, args[0], args[1], args[2], args[3]];
|
|
107
|
+
} else if (cmd === 'T') {
|
|
108
|
+
const [rX, rY] = reflectControlPoint(
|
|
109
|
+
state.curX,
|
|
110
|
+
state.curY,
|
|
111
|
+
state.lastQuadCtrlX,
|
|
112
|
+
state.lastQuadCtrlY
|
|
113
|
+
);
|
|
114
|
+
cmd = 'Q';
|
|
115
|
+
args = [rX, rY, args[0], args[1]];
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (cmd === 'H') {
|
|
119
|
+
cmd = 'L';
|
|
120
|
+
args = [args[0], state.curY];
|
|
121
|
+
}
|
|
122
|
+
if (cmd === 'V') {
|
|
123
|
+
cmd = 'L';
|
|
124
|
+
args = [state.curX, args[0]];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const result = handlers[cmd as keyof typeof handlers](state, args);
|
|
128
|
+
out.push(...result);
|
|
129
|
+
|
|
130
|
+
const isCubic = cmd === 'C';
|
|
131
|
+
const isQuad = cmd === 'Q';
|
|
132
|
+
|
|
133
|
+
if (!isCubic) {
|
|
134
|
+
state.lastCubicCtrlX = state.curX;
|
|
135
|
+
state.lastCubicCtrlY = state.curY;
|
|
136
|
+
}
|
|
137
|
+
if (!isQuad) {
|
|
138
|
+
state.lastQuadCtrlX = state.curX;
|
|
139
|
+
state.lastQuadCtrlY = state.curY;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
return out;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
function absolutizePath(pathSegments: PathCommand[]): PathCommand[] {
|
|
147
|
+
let curX = 0,
|
|
148
|
+
curY = 0;
|
|
149
|
+
let startX = 0,
|
|
150
|
+
startY = 0;
|
|
151
|
+
|
|
152
|
+
return pathSegments.map((seg) => {
|
|
153
|
+
const cmd = seg[0];
|
|
154
|
+
const upperCmd = cmd.toUpperCase();
|
|
155
|
+
const isRelative = cmd != upperCmd;
|
|
156
|
+
|
|
157
|
+
const args = seg.slice(1) as number[];
|
|
158
|
+
|
|
159
|
+
if (isRelative) {
|
|
160
|
+
if (upperCmd === 'A') {
|
|
161
|
+
args[5] += curX;
|
|
162
|
+
args[6] += curY;
|
|
163
|
+
} else if (upperCmd === 'V') {
|
|
164
|
+
args[0] += curY;
|
|
165
|
+
} else if (upperCmd === 'H') {
|
|
166
|
+
args[0] += curX;
|
|
167
|
+
} else {
|
|
168
|
+
for (let i = 0; i < args.length; i += 2) {
|
|
169
|
+
args[i] += curX;
|
|
170
|
+
args[i + 1] += curY;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
switch (upperCmd) {
|
|
176
|
+
case 'Z':
|
|
177
|
+
curX = startX;
|
|
178
|
+
curY = startY;
|
|
179
|
+
break;
|
|
180
|
+
case 'H':
|
|
181
|
+
curX = args[0];
|
|
182
|
+
break;
|
|
183
|
+
case 'V':
|
|
184
|
+
curY = args[0];
|
|
185
|
+
break;
|
|
186
|
+
case 'M':
|
|
187
|
+
curX = args[0];
|
|
188
|
+
curY = args[1];
|
|
189
|
+
startX = curX;
|
|
190
|
+
startY = curY;
|
|
191
|
+
break;
|
|
192
|
+
default:
|
|
193
|
+
// For L, C, S, Q, T, A the last pair is the new cursor
|
|
194
|
+
if (args.length >= 2) {
|
|
195
|
+
curX = args[args.length - 2];
|
|
196
|
+
curY = args[args.length - 1];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return [upperCmd, ...args];
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
type PathState = {
|
|
205
|
+
curX: number;
|
|
206
|
+
curY: number;
|
|
207
|
+
startX: number;
|
|
208
|
+
startY: number;
|
|
209
|
+
lastCubicCtrlX: number;
|
|
210
|
+
lastCubicCtrlY: number;
|
|
211
|
+
lastQuadCtrlX: number;
|
|
212
|
+
lastQuadCtrlY: number;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
const handlers = {
|
|
216
|
+
M: (state: PathState, args: number[]): PathCommand[] => {
|
|
217
|
+
const [x, y] = args;
|
|
218
|
+
state.curX = state.startX = x;
|
|
219
|
+
state.curY = state.startY = y;
|
|
220
|
+
return [['M', x, y]];
|
|
221
|
+
},
|
|
222
|
+
|
|
223
|
+
L: (state: PathState, args: number[]): PathCommand[] => {
|
|
224
|
+
const [x, y] = args;
|
|
225
|
+
const cubic = lineToCubic(state.curX, state.curY, x, y);
|
|
226
|
+
state.curX = x;
|
|
227
|
+
state.curY = y;
|
|
228
|
+
return [['C', ...cubic]];
|
|
229
|
+
},
|
|
230
|
+
|
|
231
|
+
Q: (state: PathState, args: number[]): PathCommand[] => {
|
|
232
|
+
const [qcx, qcy, x, y] = args;
|
|
233
|
+
const cubic = quadraticToCubic(state.curX, state.curY, qcx, qcy, x, y);
|
|
234
|
+
state.lastQuadCtrlX = qcx;
|
|
235
|
+
state.lastQuadCtrlY = qcy;
|
|
236
|
+
state.curX = x;
|
|
237
|
+
state.curY = y;
|
|
238
|
+
return [['C', ...cubic]];
|
|
239
|
+
},
|
|
240
|
+
|
|
241
|
+
C: (state: PathState, args: number[]): PathCommand[] => {
|
|
242
|
+
const [_cp1x, _cp1y, cp2x, cp2y, x, y] = args;
|
|
243
|
+
state.lastCubicCtrlX = cp2x;
|
|
244
|
+
state.lastCubicCtrlY = cp2y;
|
|
245
|
+
state.curX = x;
|
|
246
|
+
state.curY = y;
|
|
247
|
+
return [['C', ...args]];
|
|
248
|
+
},
|
|
249
|
+
|
|
250
|
+
A: (state: PathState, args: number[]): PathCommand[] => {
|
|
251
|
+
const cubics = arcToCubic(
|
|
252
|
+
state.curX,
|
|
253
|
+
state.curY,
|
|
254
|
+
args[0],
|
|
255
|
+
args[1],
|
|
256
|
+
args[2],
|
|
257
|
+
args[3],
|
|
258
|
+
args[4],
|
|
259
|
+
args[5],
|
|
260
|
+
args[6]
|
|
261
|
+
);
|
|
262
|
+
if (cubics.length === 0) return [];
|
|
263
|
+
|
|
264
|
+
const last = cubics[cubics.length - 1];
|
|
265
|
+
state.lastCubicCtrlX = last[2];
|
|
266
|
+
state.lastCubicCtrlY = last[3];
|
|
267
|
+
state.curX = last[4];
|
|
268
|
+
state.curY = last[5];
|
|
269
|
+
|
|
270
|
+
return cubics.map((c) => ['C', ...c]);
|
|
271
|
+
},
|
|
272
|
+
|
|
273
|
+
Z: (state: PathState): PathCommand[] => {
|
|
274
|
+
state.curX = state.startX;
|
|
275
|
+
state.curY = state.startY;
|
|
276
|
+
return [['Z']];
|
|
277
|
+
},
|
|
278
|
+
};
|
package/src/css/utils/index.ts
CHANGED
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
export const PATH_COMMAND_LENGTHS: Record<string, number> = {
|
|
4
|
+
a: 7,
|
|
5
|
+
c: 6,
|
|
6
|
+
h: 1,
|
|
7
|
+
l: 2,
|
|
8
|
+
m: 2,
|
|
9
|
+
q: 4,
|
|
10
|
+
s: 4,
|
|
11
|
+
t: 2,
|
|
12
|
+
v: 1,
|
|
13
|
+
z: 0,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export const SEGMENT_PATTERN = /([achlmqstvz])([^achlmqstvz]*)/gi;
|
|
17
|
+
export const NUMBER_PATTERN = /-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi;
|
|
18
|
+
|
|
19
|
+
export function reflectControlPoint(
|
|
20
|
+
curX: number,
|
|
21
|
+
curY: number,
|
|
22
|
+
oldX: number,
|
|
23
|
+
oldY: number
|
|
24
|
+
): [number, number] {
|
|
25
|
+
return [2 * curX - oldX, 2 * curY - oldY];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function lineToCubic(
|
|
29
|
+
x1: number,
|
|
30
|
+
y1: number,
|
|
31
|
+
x2: number,
|
|
32
|
+
y2: number
|
|
33
|
+
): number[] {
|
|
34
|
+
return [
|
|
35
|
+
x1 + (x2 - x1) / 3,
|
|
36
|
+
y1 + (y2 - y1) / 3,
|
|
37
|
+
x1 + (2 * (x2 - x1)) / 3,
|
|
38
|
+
y1 + (2 * (y2 - y1)) / 3,
|
|
39
|
+
x2,
|
|
40
|
+
y2,
|
|
41
|
+
];
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export function quadraticToCubic(
|
|
45
|
+
curX: number,
|
|
46
|
+
curY: number,
|
|
47
|
+
qcx: number,
|
|
48
|
+
qcy: number,
|
|
49
|
+
x: number,
|
|
50
|
+
y: number
|
|
51
|
+
): [number, number, number, number, number, number] {
|
|
52
|
+
const cp1x = curX + (2 / 3) * (qcx - curX);
|
|
53
|
+
const cp1y = curY + (2 / 3) * (qcy - curY);
|
|
54
|
+
const cp2x = x + (2 / 3) * (qcx - x);
|
|
55
|
+
const cp2y = y + (2 / 3) * (qcy - y);
|
|
56
|
+
return [cp1x, cp1y, cp2x, cp2y, x, y];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export function arcToCubic(
|
|
60
|
+
startX: number,
|
|
61
|
+
startY: number,
|
|
62
|
+
radiusX: number,
|
|
63
|
+
radiusY: number,
|
|
64
|
+
xAxisRotation: number,
|
|
65
|
+
largeArcFlag: number,
|
|
66
|
+
sweepFlag: number,
|
|
67
|
+
endX: number,
|
|
68
|
+
endY: number
|
|
69
|
+
): number[][] {
|
|
70
|
+
// Identical endpoints -- omit the segment
|
|
71
|
+
if (startX === endX && startY === endY) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
radiusX = Math.abs(radiusX);
|
|
76
|
+
radiusY = Math.abs(radiusY);
|
|
77
|
+
|
|
78
|
+
// Degenerate case:
|
|
79
|
+
if (radiusX === 0 || radiusY === 0) {
|
|
80
|
+
return [lineToCubic(startX, startY, endX, endY)];
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const fA = largeArcFlag !== 0 ? 1 : 0;
|
|
84
|
+
const fS = sweepFlag !== 0 ? 1 : 0;
|
|
85
|
+
|
|
86
|
+
const phi = ((xAxisRotation % 360) * Math.PI) / 180;
|
|
87
|
+
const sinPhi = Math.sin(phi);
|
|
88
|
+
const cosPhi = Math.cos(phi);
|
|
89
|
+
|
|
90
|
+
const {
|
|
91
|
+
centerX,
|
|
92
|
+
centerY,
|
|
93
|
+
startAngle,
|
|
94
|
+
deltaAngle,
|
|
95
|
+
correctedRadiusX,
|
|
96
|
+
correctedRadiusY,
|
|
97
|
+
} = getCenterParameterization(
|
|
98
|
+
startX,
|
|
99
|
+
startY,
|
|
100
|
+
radiusX,
|
|
101
|
+
radiusY,
|
|
102
|
+
fA,
|
|
103
|
+
fS,
|
|
104
|
+
endX,
|
|
105
|
+
endY,
|
|
106
|
+
sinPhi,
|
|
107
|
+
cosPhi
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
return splitArcIntoSegments(
|
|
111
|
+
centerX,
|
|
112
|
+
centerY,
|
|
113
|
+
startAngle,
|
|
114
|
+
deltaAngle,
|
|
115
|
+
correctedRadiusX,
|
|
116
|
+
correctedRadiusY,
|
|
117
|
+
sinPhi,
|
|
118
|
+
cosPhi
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
function getCenterParameterization(
|
|
123
|
+
startX: number,
|
|
124
|
+
startY: number,
|
|
125
|
+
radiusX: number,
|
|
126
|
+
radiusY: number,
|
|
127
|
+
largeArcFlag: number,
|
|
128
|
+
sweepFlag: number,
|
|
129
|
+
endX: number,
|
|
130
|
+
endY: number,
|
|
131
|
+
sinRotation: number,
|
|
132
|
+
cosRotation: number
|
|
133
|
+
) {
|
|
134
|
+
const xPrime =
|
|
135
|
+
(cosRotation * (startX - endX)) / 2 + (sinRotation * (startY - endY)) / 2;
|
|
136
|
+
const yPrime =
|
|
137
|
+
(-sinRotation * (startX - endX)) / 2 + (cosRotation * (startY - endY)) / 2;
|
|
138
|
+
|
|
139
|
+
const xPrimeSq = xPrime * xPrime;
|
|
140
|
+
const yPrimeSq = yPrime * yPrime;
|
|
141
|
+
|
|
142
|
+
let correctedRadiusX = radiusX;
|
|
143
|
+
let correctedRadiusY = radiusY;
|
|
144
|
+
const radCheck =
|
|
145
|
+
xPrimeSq / (correctedRadiusX * correctedRadiusX) +
|
|
146
|
+
yPrimeSq / (correctedRadiusY * correctedRadiusY);
|
|
147
|
+
|
|
148
|
+
if (radCheck > 1) {
|
|
149
|
+
const scale = Math.sqrt(radCheck);
|
|
150
|
+
correctedRadiusX *= scale;
|
|
151
|
+
correctedRadiusY *= scale;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const crxSq = correctedRadiusX * correctedRadiusX;
|
|
155
|
+
const crySq = correctedRadiusY * correctedRadiusY;
|
|
156
|
+
|
|
157
|
+
const sign = largeArcFlag === sweepFlag ? -1 : 1;
|
|
158
|
+
const numerator = Math.max(
|
|
159
|
+
0,
|
|
160
|
+
crxSq * crySq - crxSq * yPrimeSq - crySq * xPrimeSq
|
|
161
|
+
);
|
|
162
|
+
const denominator = crxSq * yPrimeSq + crySq * xPrimeSq;
|
|
163
|
+
const coef = sign * Math.sqrt(numerator / denominator);
|
|
164
|
+
|
|
165
|
+
const cxp = coef * ((correctedRadiusX * yPrime) / correctedRadiusY);
|
|
166
|
+
const cyp = coef * (-(correctedRadiusY * xPrime) / correctedRadiusX);
|
|
167
|
+
|
|
168
|
+
const centerX = cosRotation * cxp - sinRotation * cyp + (startX + endX) / 2;
|
|
169
|
+
const centerY = sinRotation * cxp + cosRotation * cyp + (startY + endY) / 2;
|
|
170
|
+
|
|
171
|
+
const startVectorX = (xPrime - cxp) / correctedRadiusX;
|
|
172
|
+
const startVectorY = (yPrime - cyp) / correctedRadiusY;
|
|
173
|
+
const endVectorX = (-xPrime - cxp) / correctedRadiusX;
|
|
174
|
+
const endVectorY = (-yPrime - cyp) / correctedRadiusY;
|
|
175
|
+
|
|
176
|
+
const startAngle = calculateAngle(1, 0, startVectorX, startVectorY);
|
|
177
|
+
let deltaAngle = calculateAngle(
|
|
178
|
+
startVectorX,
|
|
179
|
+
startVectorY,
|
|
180
|
+
endVectorX,
|
|
181
|
+
endVectorY
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
if (sweepFlag === 0 && deltaAngle > 0) deltaAngle -= 2 * Math.PI;
|
|
185
|
+
if (sweepFlag === 1 && deltaAngle < 0) deltaAngle += 2 * Math.PI;
|
|
186
|
+
|
|
187
|
+
return {
|
|
188
|
+
centerX,
|
|
189
|
+
centerY,
|
|
190
|
+
startAngle,
|
|
191
|
+
deltaAngle,
|
|
192
|
+
correctedRadiusX,
|
|
193
|
+
correctedRadiusY,
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function calculateAngle(
|
|
198
|
+
uX: number,
|
|
199
|
+
uY: number,
|
|
200
|
+
vX: number,
|
|
201
|
+
vY: number
|
|
202
|
+
): number {
|
|
203
|
+
const dot = uX * vX + uY * vY;
|
|
204
|
+
const mag = Math.sqrt(uX * uX + uY * uY) * Math.sqrt(vX * vX + vY * vY);
|
|
205
|
+
const sign = uX * vY - uY * vX < 0 ? -1 : 1;
|
|
206
|
+
return sign * Math.acos(Math.max(-1, Math.min(1, dot / mag)));
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
function splitArcIntoSegments(
|
|
210
|
+
centerX: number,
|
|
211
|
+
centerY: number,
|
|
212
|
+
startAngle: number,
|
|
213
|
+
deltaAngle: number,
|
|
214
|
+
radiusX: number,
|
|
215
|
+
radiusY: number,
|
|
216
|
+
sinRotation: number,
|
|
217
|
+
cosRotation: number
|
|
218
|
+
): number[][] {
|
|
219
|
+
const segments = Math.ceil(Math.abs(deltaAngle) / (Math.PI / 2));
|
|
220
|
+
const segmentAngle = deltaAngle / segments;
|
|
221
|
+
const k = (4 / 3) * Math.tan(segmentAngle / 4);
|
|
222
|
+
|
|
223
|
+
const cubics: number[][] = [];
|
|
224
|
+
|
|
225
|
+
for (let i = 0; i < segments; i++) {
|
|
226
|
+
const a1 = startAngle + i * segmentAngle;
|
|
227
|
+
const a2 = startAngle + (i + 1) * segmentAngle;
|
|
228
|
+
|
|
229
|
+
const cos1 = Math.cos(a1),
|
|
230
|
+
sin1 = Math.sin(a1);
|
|
231
|
+
const cos2 = Math.cos(a2),
|
|
232
|
+
sin2 = Math.sin(a2);
|
|
233
|
+
|
|
234
|
+
const unitX1 = cos1 - k * sin1;
|
|
235
|
+
const unitY1 = sin1 + k * cos1;
|
|
236
|
+
const unitX2 = cos2 + k * sin2;
|
|
237
|
+
const unitY2 = sin2 - k * cos2;
|
|
238
|
+
|
|
239
|
+
const transformToEllipse = (uX: number, uY: number) => [
|
|
240
|
+
centerX + cosRotation * uX * radiusX - sinRotation * uY * radiusY,
|
|
241
|
+
centerY + sinRotation * uX * radiusX + cosRotation * uY * radiusY,
|
|
242
|
+
];
|
|
243
|
+
|
|
244
|
+
const [cp1x, cp1y] = transformToEllipse(unitX1, unitY1);
|
|
245
|
+
const [cp2x, cp2y] = transformToEllipse(unitX2, unitY2);
|
|
246
|
+
const [dstX, dstY] = transformToEllipse(cos2, sin2);
|
|
247
|
+
|
|
248
|
+
cubics.push([cp1x, cp1y, cp2x, cp2y, dstX, dstY]);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
return cubics;
|
|
252
|
+
}
|
|
@@ -4,4 +4,4 @@
|
|
|
4
4
|
* version used to build the native part of the library in runtime. Remember to
|
|
5
5
|
* keep this in sync with the version declared in `package.json`
|
|
6
6
|
*/
|
|
7
|
-
export const jsVersion = '4.3.0-nightly-
|
|
7
|
+
export const jsVersion = '4.3.0-nightly-20260107-ce9032c25';
|