@visactor/vrender-core 1.0.12 → 1.0.13
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/cjs/common/color-utils.d.ts +9 -0
- package/cjs/common/color-utils.js +29 -12
- package/cjs/common/color-utils.js.map +1 -1
- package/cjs/graphic/richtext.js +2 -1
- package/cjs/graphic/richtext.js.map +1 -1
- package/cjs/index.d.ts +1 -0
- package/cjs/index.js +15 -14
- package/cjs/index.js.map +1 -1
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +18 -4
- package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
- package/dist/index.es.js +61 -23
- package/es/common/color-utils.d.ts +9 -0
- package/es/common/color-utils.js +29 -12
- package/es/common/color-utils.js.map +1 -1
- package/es/graphic/richtext.js +2 -1
- package/es/graphic/richtext.js.map +1 -1
- package/es/index.d.ts +1 -0
- package/es/index.js +2 -0
- package/es/index.js.map +1 -1
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js +18 -4
- package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
- package/package.json +3 -3
|
@@ -3,6 +3,15 @@ export declare class GradientParser {
|
|
|
3
3
|
static IsGradient(c: IColor): boolean;
|
|
4
4
|
static IsGradientStr(c: IColor): boolean;
|
|
5
5
|
static Parse(c: IColor): IColor;
|
|
6
|
+
static processColorStops(colorStops: Array<{
|
|
7
|
+
value: string;
|
|
8
|
+
length?: {
|
|
9
|
+
value: string;
|
|
10
|
+
};
|
|
11
|
+
}>): {
|
|
12
|
+
color: string;
|
|
13
|
+
offset: number;
|
|
14
|
+
}[];
|
|
6
15
|
private static ParseConic;
|
|
7
16
|
private static ParseRadial;
|
|
8
17
|
private static ParseLinear;
|
|
@@ -173,6 +173,32 @@ class GradientParser {
|
|
|
173
173
|
}
|
|
174
174
|
return c;
|
|
175
175
|
}
|
|
176
|
+
static processColorStops(colorStops) {
|
|
177
|
+
if (!colorStops || 0 === colorStops.length) return [];
|
|
178
|
+
if (colorStops.some((item => item.length))) {
|
|
179
|
+
const stops = colorStops.map((item => ({
|
|
180
|
+
color: item.value,
|
|
181
|
+
offset: item.length ? parseFloat(item.length.value) / 100 : -1
|
|
182
|
+
})));
|
|
183
|
+
stops[0].offset < 0 && (stops[0].offset = 0), stops[stops.length - 1].offset < 0 && (stops[stops.length - 1].offset = 1);
|
|
184
|
+
for (let i = 1; i < stops.length - 1; i++) if (stops[i].offset < 0) {
|
|
185
|
+
const prevWithOffsetIdx = i - 1;
|
|
186
|
+
let nextWithOffsetIdx = i + 1;
|
|
187
|
+
for (;nextWithOffsetIdx < stops.length && stops[nextWithOffsetIdx].offset < 0; ) nextWithOffsetIdx++;
|
|
188
|
+
const startOffset = stops[prevWithOffsetIdx].offset, endOffset = stops[nextWithOffsetIdx].offset, unspecCount = nextWithOffsetIdx - prevWithOffsetIdx;
|
|
189
|
+
for (let j = 1; j < unspecCount; j++) stops[prevWithOffsetIdx + j].offset = startOffset + (endOffset - startOffset) * j / unspecCount;
|
|
190
|
+
i = nextWithOffsetIdx - 1;
|
|
191
|
+
}
|
|
192
|
+
return stops;
|
|
193
|
+
}
|
|
194
|
+
return colorStops.map(((item, index) => {
|
|
195
|
+
const offset = colorStops.length > 1 ? index / (colorStops.length - 1) : 0;
|
|
196
|
+
return {
|
|
197
|
+
color: item.value,
|
|
198
|
+
offset: offset
|
|
199
|
+
};
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
176
202
|
static ParseConic(datum) {
|
|
177
203
|
const {orientation: orientation, colorStops: colorStops = []} = datum, halfPi = vutils_1.pi / 2, sa = parseFloat(orientation.value) / 180 * vutils_1.pi - halfPi;
|
|
178
204
|
return {
|
|
@@ -181,10 +207,7 @@ class GradientParser {
|
|
|
181
207
|
y: .5,
|
|
182
208
|
startAngle: sa,
|
|
183
209
|
endAngle: sa + vutils_1.pi2,
|
|
184
|
-
stops:
|
|
185
|
-
color: item.value,
|
|
186
|
-
offset: parseFloat(item.length.value) / 100
|
|
187
|
-
})))
|
|
210
|
+
stops: GradientParser.processColorStops(colorStops)
|
|
188
211
|
};
|
|
189
212
|
}
|
|
190
213
|
static ParseRadial(datum) {
|
|
@@ -197,10 +220,7 @@ class GradientParser {
|
|
|
197
220
|
y1: .5,
|
|
198
221
|
r0: 0,
|
|
199
222
|
r1: 1,
|
|
200
|
-
stops:
|
|
201
|
-
color: item.value,
|
|
202
|
-
offset: parseFloat(item.length.value) / 100
|
|
203
|
-
})))
|
|
223
|
+
stops: GradientParser.processColorStops(colorStops)
|
|
204
224
|
};
|
|
205
225
|
}
|
|
206
226
|
static ParseLinear(datum) {
|
|
@@ -219,10 +239,7 @@ class GradientParser {
|
|
|
219
239
|
y0: y0,
|
|
220
240
|
x1: x1,
|
|
221
241
|
y1: y1,
|
|
222
|
-
stops:
|
|
223
|
-
color: item.value,
|
|
224
|
-
offset: parseFloat(item.length.value) / 100
|
|
225
|
-
})))
|
|
242
|
+
stops: GradientParser.processColorStops(colorStops)
|
|
226
243
|
};
|
|
227
244
|
}
|
|
228
245
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/common/color-utils.ts"],"names":[],"mappings":"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","file":"color-utils.js","sourcesContent":["// 解析字符串gradient-color\n/**\n * The MIT License (MIT)\n\n Copyright (c) 2014 Rafael Carício\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n// Copyright (c) 2014 Rafael Caricio. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport { pi, pi2 } from '@visactor/vutils';\nimport type { IColor, IConicalGradient, ILinearGradient, IRadialGradient } from '../interface';\n\n// @ts-ignore\n\nconst parse = (function () {\n const tokens = {\n linearGradient: /^(linear\\-gradient)/i,\n radialGradient: /^(radial\\-gradient)/i,\n conicGradient: /^(conic\\-gradient)/i,\n sideOrCorner:\n /^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,\n extentKeywords: /^(closest\\-side|closest\\-corner|farthest\\-side|farthest\\-corner|contain|cover)/,\n positionKeywords: /^(left|center|right|top|bottom)/i,\n pixelValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))px/,\n percentageValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))\\%/,\n emValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))em/,\n angleValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\n fromAngleValue: /^from\\s*(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\n startCall: /^\\(/,\n endCall: /^\\)/,\n comma: /^,/,\n hexColor: /(^\\#[0-9a-fA-F]+)/,\n literalColor: /^([a-zA-Z]+)/,\n rgbColor: /^(rgb\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}\\))/i,\n rgbaColor: /^(rgba\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3},\\s*((\\d\\.\\d+)|\\d{1,3})\\))/i,\n number: /^(([0-9]*\\.[0-9]+)|([0-9]+\\.?))/\n };\n\n let input = '';\n\n function error(msg: any) {\n const err: any = new Error(input + ': ' + msg);\n err.source = input;\n throw err;\n }\n\n function getAST() {\n const ast = matchListDefinitions();\n\n if (input.length > 0) {\n error('Invalid input not EOF');\n }\n\n return ast;\n }\n\n function matchListDefinitions() {\n return matchListing(matchDefinition);\n }\n\n function matchDefinition() {\n return (\n matchGradient('linear', tokens.linearGradient, matchLinearOrientation) ||\n matchGradient('radial', tokens.radialGradient, matchListRadialOrientations) ||\n matchGradient('conic', tokens.conicGradient, matchConicalOrientation)\n );\n }\n\n function matchGradient(gradientType: string, pattern: RegExp, orientationMatcher: any) {\n return matchCall(pattern, function (captures: any) {\n const orientation = orientationMatcher();\n if (orientation) {\n if (!scan(tokens.comma)) {\n error('Missing comma before color stops');\n }\n }\n\n return {\n type: gradientType,\n orientation: orientation,\n colorStops: matchListing(matchColorStop)\n };\n });\n }\n\n function matchCall(pattern: RegExp, callback: any) {\n const captures = scan(pattern);\n\n if (captures) {\n if (!scan(tokens.startCall)) {\n error('Missing (');\n }\n\n const result = callback(captures);\n\n if (!scan(tokens.endCall)) {\n error('Missing )');\n }\n\n return result;\n }\n }\n\n function matchLinearOrientation() {\n return matchSideOrCorner() || matchAngle();\n }\n function matchConicalOrientation() {\n return matchFromAngle();\n }\n\n function matchSideOrCorner() {\n return match('directional', tokens.sideOrCorner, 1);\n }\n\n function matchAngle() {\n return match('angular', tokens.angleValue, 1);\n }\n function matchFromAngle() {\n return match('angular', tokens.fromAngleValue, 1);\n }\n\n function matchListRadialOrientations() {\n let radialOrientations;\n let radialOrientation = matchRadialOrientation();\n let lookaheadCache;\n\n if (radialOrientation) {\n radialOrientations = [];\n radialOrientations.push(radialOrientation);\n\n lookaheadCache = input;\n if (scan(tokens.comma)) {\n radialOrientation = matchRadialOrientation();\n if (radialOrientation) {\n radialOrientations.push(radialOrientation);\n } else {\n input = lookaheadCache;\n }\n }\n }\n\n return radialOrientations;\n }\n\n function matchRadialOrientation() {\n let radialType: any = matchCircle() || matchEllipse();\n\n if (radialType) {\n radialType.at = matchAtPosition();\n } else {\n const extent = matchExtentKeyword();\n if (extent) {\n radialType = extent;\n const positionAt = matchAtPosition();\n if (positionAt) {\n radialType.at = positionAt;\n }\n } else {\n const defaultPosition = matchPositioning();\n if (defaultPosition) {\n radialType = {\n type: 'default-radial',\n at: defaultPosition\n };\n }\n }\n }\n\n return radialType;\n }\n\n function matchCircle() {\n const circle: any = match('shape', /^(circle)/i, 0);\n\n if (circle) {\n circle.style = matchLength() || matchExtentKeyword();\n }\n\n return circle;\n }\n\n function matchEllipse() {\n const ellipse: any = match('shape', /^(ellipse)/i, 0);\n\n if (ellipse) {\n ellipse.style = matchDistance() || matchExtentKeyword();\n }\n\n return ellipse;\n }\n\n function matchExtentKeyword() {\n return match('extent-keyword', tokens.extentKeywords, 1);\n }\n\n function matchAtPosition() {\n if (match('position', /^at/, 0)) {\n const positioning = matchPositioning();\n\n if (!positioning) {\n error('Missing positioning value');\n }\n\n return positioning;\n }\n }\n\n function matchPositioning() {\n const location = matchCoordinates();\n\n if (location.x || location.y) {\n return {\n type: 'position',\n value: location\n };\n }\n }\n\n function matchCoordinates() {\n return {\n x: matchDistance(),\n y: matchDistance()\n };\n }\n\n function matchListing(matcher: any) {\n let captures = matcher();\n const result = [];\n\n if (captures) {\n result.push(captures);\n while (scan(tokens.comma)) {\n captures = matcher();\n if (captures) {\n result.push(captures);\n } else {\n error('One extra comma');\n }\n }\n }\n\n return result;\n }\n\n function matchColorStop() {\n const color: any = matchColor();\n\n if (!color) {\n error('Expected color definition');\n }\n\n color.length = matchDistance();\n return color;\n }\n\n function matchColor() {\n return matchHexColor() || matchRGBAColor() || matchRGBColor() || matchLiteralColor();\n }\n\n function matchLiteralColor() {\n return match('literal', tokens.literalColor, 0);\n }\n\n function matchHexColor() {\n return match('hex', tokens.hexColor, 1);\n }\n\n function matchRGBColor() {\n return match('rgb', tokens.rgbColor, 1);\n }\n\n function matchRGBAColor() {\n return match('rgba', tokens.rgbaColor, 1);\n }\n\n function matchNumber() {\n return scan(tokens.number)[1];\n }\n\n function matchDistance() {\n return match('%', tokens.percentageValue, 1) || matchPositionKeyword() || matchLength();\n }\n\n function matchPositionKeyword() {\n return match('position-keyword', tokens.positionKeywords, 1);\n }\n\n function matchLength() {\n return match('px', tokens.pixelValue, 1) || match('em', tokens.emValue, 1);\n }\n\n function match(type: string, pattern: RegExp, captureIndex: number) {\n const captures = scan(pattern);\n if (captures) {\n return {\n type: type,\n value: captures[captureIndex]\n };\n }\n }\n\n function scan(regexp: RegExp) {\n const blankCaptures = /^[\\n\\r\\t\\s]+/.exec(input);\n if (blankCaptures) {\n consume(blankCaptures[0].length);\n }\n\n const captures = regexp.exec(input);\n if (captures) {\n consume(captures[0].length);\n }\n\n return captures;\n }\n\n function consume(size: number) {\n input = input.substr(size);\n }\n\n return function (code: string) {\n input = code.toString();\n return getAST();\n };\n})();\n\nexport class GradientParser {\n static IsGradient(c: IColor) {\n return !(typeof c === 'string' && !c.includes('gradient'));\n }\n\n static IsGradientStr(c: IColor) {\n return typeof c === 'string' && c.includes('gradient');\n }\n\n static Parse(c: IColor): IColor {\n if (GradientParser.IsGradientStr(c)) {\n try {\n const data = parse(c as string);\n const datum = data[0];\n if (datum) {\n if (datum.type === 'linear') {\n return GradientParser.ParseLinear(datum);\n } else if (datum.type === 'radial') {\n return GradientParser.ParseRadial(datum);\n } else if (datum.type === 'conic') {\n return GradientParser.ParseConic(datum);\n }\n }\n } catch (err) {\n return c;\n }\n }\n return c;\n }\n private static ParseConic(datum: any): IConicalGradient {\n const { orientation, colorStops = [] } = datum;\n const halfPi = pi / 2;\n const sa = (parseFloat(orientation.value) / 180) * pi - halfPi;\n return {\n gradient: 'conical',\n x: 0.5,\n y: 0.5,\n startAngle: sa,\n endAngle: sa + pi2,\n stops: colorStops.map((item: any) => {\n return {\n color: item.value,\n offset: parseFloat(item.length.value) / 100\n };\n })\n };\n }\n private static ParseRadial(datum: any): IRadialGradient {\n const { colorStops = [] } = datum;\n return {\n gradient: 'radial',\n x0: 0.5,\n y0: 0.5,\n x1: 0.5,\n y1: 0.5,\n r0: 0,\n r1: 1,\n stops: colorStops.map((item: any) => {\n return {\n color: item.value,\n offset: parseFloat(item.length.value) / 100\n };\n })\n };\n }\n private static ParseLinear(datum: any): ILinearGradient {\n const { orientation, colorStops = [] } = datum;\n const halfPi = pi / 2;\n let angle = orientation.type === 'angular' ? (parseFloat(orientation.value) / 180) * pi : 0;\n while (angle < 0) {\n angle += pi2;\n }\n while (angle >= pi2) {\n angle -= pi2;\n }\n let x0 = 0;\n let y0 = 0;\n let x1 = 0;\n let y1 = 0;\n if (angle < halfPi) {\n x0 = 0;\n y0 = 1;\n x1 = Math.sin(angle);\n y1 = y0 - Math.cos(angle);\n } else if (angle < pi) {\n x0 = 0;\n y0 = 0;\n x1 = Math.cos(angle - halfPi);\n y1 = Math.sin(angle - halfPi);\n } else if (angle < pi + halfPi) {\n x0 = 1;\n y0 = 0;\n x1 = x0 - Math.sin(angle - pi);\n y1 = Math.cos(angle - pi);\n } else {\n x0 = 1;\n y0 - 1;\n x1 = x0 - Math.cos(angle - halfPi - pi);\n y1 = y1 - Math.sin(angle - halfPi - pi);\n }\n return {\n gradient: 'linear',\n x0,\n y0,\n x1,\n y1,\n stops: colorStops.map((item: any) => {\n return {\n color: item.value,\n offset: parseFloat(item.length.value) / 100\n };\n })\n };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/common/color-utils.ts"],"names":[],"mappings":"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","file":"color-utils.js","sourcesContent":["// 解析字符串gradient-color\n/**\n * The MIT License (MIT)\n\n Copyright (c) 2014 Rafael Carício\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in all\n copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n SOFTWARE.\n */\n// Copyright (c) 2014 Rafael Caricio. All rights reserved.\n// Use of this source code is governed by a BSD-style license that can be\n// found in the LICENSE file.\n\nimport { pi, pi2 } from '@visactor/vutils';\nimport type { IColor, IConicalGradient, ILinearGradient, IRadialGradient } from '../interface';\n\n// @ts-ignore\n\nconst parse = (function () {\n const tokens = {\n linearGradient: /^(linear\\-gradient)/i,\n radialGradient: /^(radial\\-gradient)/i,\n conicGradient: /^(conic\\-gradient)/i,\n sideOrCorner:\n /^to (left (top|bottom)|right (top|bottom)|top (left|right)|bottom (left|right)|left|right|top|bottom)/i,\n extentKeywords: /^(closest\\-side|closest\\-corner|farthest\\-side|farthest\\-corner|contain|cover)/,\n positionKeywords: /^(left|center|right|top|bottom)/i,\n pixelValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))px/,\n percentageValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))\\%/,\n emValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))em/,\n angleValue: /^(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\n fromAngleValue: /^from\\s*(-?(([0-9]*\\.[0-9]+)|([0-9]+\\.?)))deg/,\n startCall: /^\\(/,\n endCall: /^\\)/,\n comma: /^,/,\n hexColor: /(^\\#[0-9a-fA-F]+)/,\n literalColor: /^([a-zA-Z]+)/,\n rgbColor: /^(rgb\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3}\\))/i,\n rgbaColor: /^(rgba\\(\\d{1,3},\\s*\\d{1,3},\\s*\\d{1,3},\\s*((\\d\\.\\d+)|\\d{1,3})\\))/i,\n number: /^(([0-9]*\\.[0-9]+)|([0-9]+\\.?))/\n };\n\n let input = '';\n\n function error(msg: any) {\n const err: any = new Error(input + ': ' + msg);\n err.source = input;\n throw err;\n }\n\n function getAST() {\n const ast = matchListDefinitions();\n\n if (input.length > 0) {\n error('Invalid input not EOF');\n }\n\n return ast;\n }\n\n function matchListDefinitions() {\n return matchListing(matchDefinition);\n }\n\n function matchDefinition() {\n return (\n matchGradient('linear', tokens.linearGradient, matchLinearOrientation) ||\n matchGradient('radial', tokens.radialGradient, matchListRadialOrientations) ||\n matchGradient('conic', tokens.conicGradient, matchConicalOrientation)\n );\n }\n\n function matchGradient(gradientType: string, pattern: RegExp, orientationMatcher: any) {\n return matchCall(pattern, function (captures: any) {\n const orientation = orientationMatcher();\n if (orientation) {\n if (!scan(tokens.comma)) {\n error('Missing comma before color stops');\n }\n }\n\n return {\n type: gradientType,\n orientation: orientation,\n colorStops: matchListing(matchColorStop)\n };\n });\n }\n\n function matchCall(pattern: RegExp, callback: any) {\n const captures = scan(pattern);\n\n if (captures) {\n if (!scan(tokens.startCall)) {\n error('Missing (');\n }\n\n const result = callback(captures);\n\n if (!scan(tokens.endCall)) {\n error('Missing )');\n }\n\n return result;\n }\n }\n\n function matchLinearOrientation() {\n return matchSideOrCorner() || matchAngle();\n }\n function matchConicalOrientation() {\n return matchFromAngle();\n }\n\n function matchSideOrCorner() {\n return match('directional', tokens.sideOrCorner, 1);\n }\n\n function matchAngle() {\n return match('angular', tokens.angleValue, 1);\n }\n function matchFromAngle() {\n return match('angular', tokens.fromAngleValue, 1);\n }\n\n function matchListRadialOrientations() {\n let radialOrientations;\n let radialOrientation = matchRadialOrientation();\n let lookaheadCache;\n\n if (radialOrientation) {\n radialOrientations = [];\n radialOrientations.push(radialOrientation);\n\n lookaheadCache = input;\n if (scan(tokens.comma)) {\n radialOrientation = matchRadialOrientation();\n if (radialOrientation) {\n radialOrientations.push(radialOrientation);\n } else {\n input = lookaheadCache;\n }\n }\n }\n\n return radialOrientations;\n }\n\n function matchRadialOrientation() {\n let radialType: any = matchCircle() || matchEllipse();\n\n if (radialType) {\n radialType.at = matchAtPosition();\n } else {\n const extent = matchExtentKeyword();\n if (extent) {\n radialType = extent;\n const positionAt = matchAtPosition();\n if (positionAt) {\n radialType.at = positionAt;\n }\n } else {\n const defaultPosition = matchPositioning();\n if (defaultPosition) {\n radialType = {\n type: 'default-radial',\n at: defaultPosition\n };\n }\n }\n }\n\n return radialType;\n }\n\n function matchCircle() {\n const circle: any = match('shape', /^(circle)/i, 0);\n\n if (circle) {\n circle.style = matchLength() || matchExtentKeyword();\n }\n\n return circle;\n }\n\n function matchEllipse() {\n const ellipse: any = match('shape', /^(ellipse)/i, 0);\n\n if (ellipse) {\n ellipse.style = matchDistance() || matchExtentKeyword();\n }\n\n return ellipse;\n }\n\n function matchExtentKeyword() {\n return match('extent-keyword', tokens.extentKeywords, 1);\n }\n\n function matchAtPosition() {\n if (match('position', /^at/, 0)) {\n const positioning = matchPositioning();\n\n if (!positioning) {\n error('Missing positioning value');\n }\n\n return positioning;\n }\n }\n\n function matchPositioning() {\n const location = matchCoordinates();\n\n if (location.x || location.y) {\n return {\n type: 'position',\n value: location\n };\n }\n }\n\n function matchCoordinates() {\n return {\n x: matchDistance(),\n y: matchDistance()\n };\n }\n\n function matchListing(matcher: any) {\n let captures = matcher();\n const result = [];\n\n if (captures) {\n result.push(captures);\n while (scan(tokens.comma)) {\n captures = matcher();\n if (captures) {\n result.push(captures);\n } else {\n error('One extra comma');\n }\n }\n }\n\n return result;\n }\n\n function matchColorStop() {\n const color: any = matchColor();\n\n if (!color) {\n error('Expected color definition');\n }\n\n color.length = matchDistance();\n return color;\n }\n\n function matchColor() {\n return matchHexColor() || matchRGBAColor() || matchRGBColor() || matchLiteralColor();\n }\n\n function matchLiteralColor() {\n return match('literal', tokens.literalColor, 0);\n }\n\n function matchHexColor() {\n return match('hex', tokens.hexColor, 1);\n }\n\n function matchRGBColor() {\n return match('rgb', tokens.rgbColor, 1);\n }\n\n function matchRGBAColor() {\n return match('rgba', tokens.rgbaColor, 1);\n }\n\n function matchNumber() {\n return scan(tokens.number)[1];\n }\n\n function matchDistance() {\n return match('%', tokens.percentageValue, 1) || matchPositionKeyword() || matchLength();\n }\n\n function matchPositionKeyword() {\n return match('position-keyword', tokens.positionKeywords, 1);\n }\n\n function matchLength() {\n return match('px', tokens.pixelValue, 1) || match('em', tokens.emValue, 1);\n }\n\n function match(type: string, pattern: RegExp, captureIndex: number) {\n const captures = scan(pattern);\n if (captures) {\n return {\n type: type,\n value: captures[captureIndex]\n };\n }\n }\n\n function scan(regexp: RegExp) {\n const blankCaptures = /^[\\n\\r\\t\\s]+/.exec(input);\n if (blankCaptures) {\n consume(blankCaptures[0].length);\n }\n\n const captures = regexp.exec(input);\n if (captures) {\n consume(captures[0].length);\n }\n\n return captures;\n }\n\n function consume(size: number) {\n input = input.substr(size);\n }\n\n return function (code: string) {\n input = code.toString();\n return getAST();\n };\n})();\n\nexport class GradientParser {\n static IsGradient(c: IColor) {\n return !(typeof c === 'string' && !c.includes('gradient'));\n }\n\n static IsGradientStr(c: IColor) {\n return typeof c === 'string' && c.includes('gradient');\n }\n\n static Parse(c: IColor): IColor {\n if (GradientParser.IsGradientStr(c)) {\n try {\n const data = parse(c as string);\n const datum = data[0];\n if (datum) {\n if (datum.type === 'linear') {\n return GradientParser.ParseLinear(datum);\n } else if (datum.type === 'radial') {\n return GradientParser.ParseRadial(datum);\n } else if (datum.type === 'conic') {\n return GradientParser.ParseConic(datum);\n }\n }\n } catch (err) {\n return c;\n }\n }\n return c;\n }\n static processColorStops(\n colorStops: Array<{ value: string; length?: { value: string } }>\n ): { color: string; offset: number }[] {\n if (!colorStops || colorStops.length === 0) {\n return [];\n }\n\n const anyStopHasLength = colorStops.some((item: any) => item.length);\n\n if (anyStopHasLength) {\n const stops = colorStops.map((item: any) => ({\n color: item.value,\n offset: item.length ? parseFloat(item.length.value) / 100 : -1\n }));\n\n // If first color stop has no position, it defaults to 0%\n if (stops[0].offset < 0) {\n stops[0].offset = 0;\n }\n\n // If last color stop has no position, it defaults to 100%\n if (stops[stops.length - 1].offset < 0) {\n stops[stops.length - 1].offset = 1;\n }\n\n // If a color stop in between has no position, its position is the average of the preceding and succeeding color stops with positions.\n for (let i = 1; i < stops.length - 1; i++) {\n if (stops[i].offset < 0) {\n const prevWithOffsetIdx = i - 1;\n let nextWithOffsetIdx = i + 1;\n while (nextWithOffsetIdx < stops.length && stops[nextWithOffsetIdx].offset < 0) {\n nextWithOffsetIdx++;\n }\n\n const startOffset = stops[prevWithOffsetIdx].offset;\n const endOffset = stops[nextWithOffsetIdx].offset;\n const unspecCount = nextWithOffsetIdx - prevWithOffsetIdx;\n\n for (let j = 1; j < unspecCount; j++) {\n stops[prevWithOffsetIdx + j].offset = startOffset + ((endOffset - startOffset) * j) / unspecCount;\n }\n i = nextWithOffsetIdx - 1;\n }\n }\n return stops;\n }\n return colorStops.map((item: any, index: number) => {\n const offset = colorStops.length > 1 ? index / (colorStops.length - 1) : 0;\n return {\n color: item.value,\n offset\n };\n });\n }\n private static ParseConic(datum: any): IConicalGradient {\n const { orientation, colorStops = [] } = datum;\n const halfPi = pi / 2;\n const sa = (parseFloat(orientation.value) / 180) * pi - halfPi;\n return {\n gradient: 'conical',\n x: 0.5,\n y: 0.5,\n startAngle: sa,\n endAngle: sa + pi2,\n stops: GradientParser.processColorStops(colorStops)\n };\n }\n private static ParseRadial(datum: any): IRadialGradient {\n const { colorStops = [] } = datum;\n return {\n gradient: 'radial',\n x0: 0.5,\n y0: 0.5,\n x1: 0.5,\n y1: 0.5,\n r0: 0,\n r1: 1,\n stops: GradientParser.processColorStops(colorStops)\n };\n }\n private static ParseLinear(datum: any): ILinearGradient {\n const { orientation, colorStops = [] } = datum;\n const halfPi = pi / 2;\n let angle = orientation.type === 'angular' ? (parseFloat(orientation.value) / 180) * pi : 0;\n while (angle < 0) {\n angle += pi2;\n }\n while (angle >= pi2) {\n angle -= pi2;\n }\n let x0 = 0;\n let y0 = 0;\n let x1 = 0;\n let y1 = 0;\n if (angle < halfPi) {\n x0 = 0;\n y0 = 1;\n x1 = Math.sin(angle);\n y1 = y0 - Math.cos(angle);\n } else if (angle < pi) {\n x0 = 0;\n y0 = 0;\n x1 = Math.cos(angle - halfPi);\n y1 = Math.sin(angle - halfPi);\n } else if (angle < pi + halfPi) {\n x0 = 1;\n y0 = 0;\n x1 = x0 - Math.sin(angle - pi);\n y1 = Math.cos(angle - pi);\n } else {\n x0 = 1;\n y0 - 1;\n x1 = x0 - Math.cos(angle - halfPi - pi);\n y1 = y1 - Math.sin(angle - halfPi - pi);\n }\n return {\n gradient: 'linear',\n x0,\n y0,\n x1,\n y1,\n stops: GradientParser.processColorStops(colorStops)\n };\n }\n}\n"]}
|
package/cjs/graphic/richtext.js
CHANGED
|
@@ -173,7 +173,8 @@ class RichText extends graphic_1.Graphic {
|
|
|
173
173
|
case "right":
|
|
174
174
|
deltaX = -aabbBounds.width();
|
|
175
175
|
}
|
|
176
|
-
return aabbBounds.
|
|
176
|
+
return height || ("middle" === this.verticalDirection ? deltaY -= aabbBounds.height() / 2 : "bottom" === this.verticalDirection && (deltaY -= aabbBounds.height())),
|
|
177
|
+
aabbBounds.translate(deltaX, deltaY), application_1.application.graphicService.updateTempAABBBounds(aabbBounds),
|
|
177
178
|
null == attribute.forceBoundsHeight && null == attribute.forceBoundsWidth || application_1.application.graphicService.updateHTMLTextAABBBounds(attribute, richtextTheme, aabbBounds),
|
|
178
179
|
this.widthWithoutTransform = aabbBounds.x2 - aabbBounds.x1, this.heightWithoutTransform = aabbBounds.y2 - aabbBounds.y1,
|
|
179
180
|
application_1.application.graphicService.transformAABBBounds(attribute, aabbBounds, richtextTheme, !1, this),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/graphic/richtext.ts"],"names":[],"mappings":"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","file":"richtext.js","sourcesContent":["import type { IAABBBounds } from '@visactor/vutils';\nimport { isNumber, isString } from '@visactor/vutils';\nimport type {\n IRichText,\n IRichTextCharacter,\n RichTextGlobalAlignType,\n RichTextGlobalBaselineType,\n RichTextVerticalDirection,\n RichTextWordBreak,\n IRichTextGraphicAttribute,\n IRichTextImageCharacter,\n IRichTextParagraphCharacter,\n IStage,\n ILayer,\n IRichTextIcon,\n EventPoint,\n IRichTextFrame,\n ISetAttributeContext\n} from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { DefaultRichTextAttribute } from './config';\nimport Frame from './richtext/frame';\nimport Paragraph from './richtext/paragraph';\nimport Wrapper from './richtext/wrapper';\nimport { getTheme } from './theme';\nimport { RichTextIcon } from './richtext/icon';\nimport type { FederatedMouseEvent } from '../event';\nimport { application } from '../application';\nimport { RICHTEXT_NUMBER_TYPE } from './constants';\n\nlet supportIntl = false;\ntry {\n supportIntl = Intl && typeof (Intl as any).Segmenter === 'function';\n} catch (e) {\n supportIntl = false;\n}\n\nconst RICHTEXT_UPDATE_TAG_KEY = [\n 'width',\n 'height',\n 'ellipsis',\n 'wordBreak',\n 'verticalDirection',\n 'maxHeight',\n 'maxWidth',\n 'textAlign',\n 'textBaseline',\n 'textConfig',\n 'layoutDirection',\n 'fill',\n 'stroke',\n 'fontSize',\n 'fontFamily',\n 'fontStyle',\n 'fontWeight',\n 'lineWidth',\n 'opacity',\n 'fillOpacity',\n 'strokeOpacity',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\nexport class RichText extends Graphic<IRichTextGraphicAttribute> implements IRichText {\n type: 'richtext' = 'richtext';\n\n _frameCache: Frame; // 富文本布局画布\n _currentHoverIcon: IRichTextIcon | null = null;\n\n static NOWORK_ANIMATE_ATTR = {\n ellipsis: 1,\n wordBreak: 1,\n verticalDirection: 1,\n textAlign: 1,\n textBaseline: 1,\n textConfig: 1,\n layoutDirection: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params?: IRichTextGraphicAttribute) {\n super(params);\n this.numberType = RICHTEXT_NUMBER_TYPE;\n\n this.onBeforeAttributeUpdate = ((val: any, attributes: any, key: null | string | string[]) => {\n for (const key in val) {\n if (key === 'hoverIconId') {\n if (val[key] === attributes[key]) {\n continue;\n }\n const icon = this._frameCache.icons.get(val[key]);\n this.updateHoverIconState(icon);\n }\n }\n }) as any;\n }\n\n get width(): number {\n return this.attribute.width ?? DefaultRichTextAttribute.width;\n }\n set width(w: number) {\n if (this.attribute.width === w) {\n return;\n }\n this.attribute.width = w;\n this.addUpdateShapeAndBoundsTag();\n }\n get height(): number {\n return this.attribute.height ?? DefaultRichTextAttribute.height;\n }\n set height(h: number) {\n if (this.attribute.height === h) {\n return;\n }\n this.attribute.height = h;\n this.addUpdateShapeAndBoundsTag();\n }\n get maxWidth(): number | undefined {\n return this.attribute.maxWidth;\n }\n set maxWidth(mw: number | undefined) {\n if (this.attribute.maxWidth === mw) {\n return;\n }\n this.attribute.maxWidth = mw;\n this.addUpdateShapeAndBoundsTag();\n }\n get maxHeight(): number | undefined {\n return this.attribute.maxHeight;\n }\n set maxHeight(mh: number | undefined) {\n if (this.attribute.maxHeight === mh) {\n return;\n }\n this.attribute.maxHeight = mh;\n this.addUpdateShapeAndBoundsTag();\n }\n get ellipsis(): boolean | string {\n return this.attribute.ellipsis ?? DefaultRichTextAttribute.ellipsis;\n }\n set ellipsis(e: boolean | string) {\n if (this.attribute.ellipsis === e) {\n return;\n }\n this.attribute.ellipsis = e;\n this.addUpdateShapeAndBoundsTag();\n }\n get wordBreak(): RichTextWordBreak {\n return this.attribute.wordBreak ?? DefaultRichTextAttribute.wordBreak;\n }\n set wordBreak(wb: RichTextWordBreak) {\n if (this.attribute.wordBreak === wb) {\n return;\n }\n this.attribute.wordBreak = wb;\n this.addUpdateShapeAndBoundsTag();\n }\n get verticalDirection(): RichTextVerticalDirection {\n return this.attribute.verticalDirection ?? DefaultRichTextAttribute.verticalDirection;\n }\n set verticalDirection(vd: RichTextVerticalDirection) {\n if (this.attribute.verticalDirection === vd) {\n return;\n }\n this.attribute.verticalDirection = vd;\n this.addUpdateShapeAndBoundsTag();\n }\n get textAlign(): RichTextGlobalAlignType {\n return this.attribute.textAlign ?? DefaultRichTextAttribute.textAlign;\n }\n set textAlign(align: RichTextGlobalAlignType) {\n if (this.attribute.textAlign === align) {\n return;\n }\n this.attribute.textAlign = align;\n this.addUpdateShapeAndBoundsTag();\n }\n get textBaseline(): RichTextGlobalBaselineType {\n return this.attribute.textBaseline ?? DefaultRichTextAttribute.textBaseline;\n }\n set textBaseline(baseline: RichTextGlobalBaselineType) {\n if (this.attribute.textBaseline === baseline) {\n return;\n }\n this.attribute.textBaseline = baseline;\n this.addUpdateShapeAndBoundsTag();\n }\n get textConfig(): IRichTextCharacter[] {\n return this.attribute.textConfig ?? DefaultRichTextAttribute.textConfig;\n }\n set textConfig(config: IRichTextCharacter[]) {\n this.attribute.textConfig = config;\n this.addUpdateShapeAndBoundsTag();\n }\n\n getGraphicTheme(): Required<IRichTextGraphicAttribute> {\n return getTheme(this).richtext;\n }\n\n static AllSingleCharacter(cache: IRichTextFrame | IRichTextGraphicAttribute['textConfig']) {\n if ((cache as IRichTextFrame).lines) {\n const frame = cache as IRichTextFrame;\n return frame.lines.every(line =>\n line.paragraphs.every(item => !(item.text && isString(item.text) && RichText.splitText(item.text).length > 1))\n );\n }\n // isComposing的不算\n const tc = cache as IRichTextGraphicAttribute['textConfig'];\n return tc.every(\n item =>\n (item as any).isComposing ||\n !((item as any).text && isString((item as any).text) && RichText.splitText((item as any).text).length > 1)\n );\n }\n\n static splitText(text: string) {\n if (supportIntl) {\n // 不传入具体语言标签,使用默认设置\n const segmenter = new (Intl as any).Segmenter(undefined, { granularity: 'grapheme' });\n const segments = [];\n for (const { segment } of segmenter.segment(text)) {\n segments.push(segment);\n }\n return segments;\n }\n // 如果不支持 Intl.Segmenter,则使用旧方法\n return Array.from(text);\n }\n\n static TransformTextConfig2SingleCharacter(textConfig: IRichTextGraphicAttribute['textConfig']) {\n const tc: IRichTextGraphicAttribute['textConfig'] = [];\n textConfig.forEach((item: IRichTextParagraphCharacter) => {\n const textList = RichText.splitText(item.text.toString());\n if (isString(item.text) && textList.length > 1) {\n // 拆分\n for (let i = 0; i < textList.length; i++) {\n const t = textList[i];\n tc.push({ ...item, text: t });\n }\n } else {\n tc.push(item);\n }\n });\n\n return tc;\n }\n\n protected updateAABBBounds(\n attribute: IRichTextGraphicAttribute,\n richtextTheme: Required<IRichTextGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n const {\n width = richtextTheme.width,\n height = richtextTheme.height,\n maxWidth = richtextTheme.maxWidth,\n maxHeight = richtextTheme.maxHeight,\n textAlign = richtextTheme.textAlign,\n textBaseline = attribute.textBaseline ?? richtextTheme.textBaseline ?? 'top',\n editOptions\n } = attribute;\n\n if (width > 0 && height > 0) {\n // 外部设置宽高\n aabbBounds.set(0, 0, width, height);\n } else {\n // 获取内容宽高\n const frameCache = this.getFrameCache();\n const { width: actualWidth, height: actualHeight } = frameCache.getActualSize();\n let contentWidth = width || actualWidth || 0;\n let contentHeight = height || actualHeight || 0;\n\n contentHeight = typeof maxHeight === 'number' && contentHeight > maxHeight ? maxHeight : contentHeight || 0;\n contentWidth = typeof maxWidth === 'number' && contentWidth > maxWidth ? maxWidth : contentWidth || 0;\n\n aabbBounds.set(0, 0, contentWidth, contentHeight);\n }\n\n // 如果是可编辑状态,且没有设置高度,就用fontSize,否则就完全选不到了\n if (editOptions && editOptions.keepHeightWhileEmpty && !aabbBounds.height() && !attribute.textConfig?.length) {\n aabbBounds.y2 = aabbBounds.y1 + (attribute.fontSize ?? 12);\n aabbBounds.x2 = aabbBounds.x1 + 2;\n }\n\n // 调整对齐方式\n let deltaY = 0;\n switch (textBaseline) {\n case 'top':\n deltaY = 0;\n break;\n case 'middle':\n deltaY = -aabbBounds.height() / 2;\n break;\n case 'bottom':\n deltaY = -aabbBounds.height();\n break;\n default:\n break;\n }\n let deltaX = 0;\n switch (textAlign) {\n case 'left':\n deltaX = 0;\n break;\n case 'center':\n deltaX = -aabbBounds.width() / 2;\n break;\n case 'right':\n deltaX = -aabbBounds.width();\n break;\n default:\n break;\n }\n aabbBounds.translate(deltaX, deltaY);\n\n application.graphicService.updateTempAABBBounds(aabbBounds);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n application.graphicService.updateHTMLTextAABBBounds(attribute, richtextTheme, aabbBounds);\n }\n this.widthWithoutTransform = aabbBounds.x2 - aabbBounds.x1;\n this.heightWithoutTransform = aabbBounds.y2 - aabbBounds.y1;\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, richtextTheme, false, this);\n // 都为0的话,就直接clear\n if (aabbBounds.width() === 0 && aabbBounds.height() === 0) {\n aabbBounds.clear();\n }\n return aabbBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RICHTEXT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RICHTEXT_UPDATE_TAG_KEY);\n }\n getFrameCache(): IRichTextFrame {\n if (this.shouldUpdateShape()) {\n this.doUpdateFrameCache();\n this.clearUpdateShapeTag();\n }\n return this._frameCache as IRichTextFrame;\n }\n\n get cliped() {\n const frameCache = this.getFrameCache();\n if (frameCache.actualHeight > frameCache.height) {\n return true;\n }\n const { disableAutoWrapLine } = this.attribute;\n if (disableAutoWrapLine) {\n for (let i = 0; i < frameCache.lines.length; i++) {\n const l = frameCache.lines[i];\n for (let j = 0; j < l.paragraphs.length; j++) {\n const p = l.paragraphs[j];\n if ((p as any).overflow && (p as any).text !== '') {\n return true;\n }\n }\n }\n }\n return false;\n // if (height < this.attribute.height || )\n }\n combinedStyleToCharacter(config: IRichTextImageCharacter | IRichTextParagraphCharacter) {\n const {\n fill,\n stroke,\n fontSize,\n fontFamily,\n fontStyle,\n fontWeight,\n lineWidth,\n opacity,\n fillOpacity,\n lineHeight,\n strokeOpacity,\n upgradeAttrs\n } = this.attribute;\n const out = {\n fill,\n stroke,\n fontSize,\n fontFamily,\n fontStyle,\n fontWeight,\n lineWidth,\n opacity,\n fillOpacity,\n strokeOpacity,\n ...config\n };\n if (upgradeAttrs?.lineHeight) {\n out.lineHeight = lineHeight;\n }\n return out;\n }\n doUpdateFrameCache(tc?: IRichTextCharacter[]) {\n // 1. 测量,生成paragraph\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n ellipsis,\n wordBreak,\n verticalDirection,\n textAlign,\n textBaseline,\n layoutDirection,\n singleLine,\n disableAutoWrapLine,\n editable,\n ascentDescentMode,\n upgradeAttrs\n } = this.attribute;\n\n const enableMultiBreakLine = upgradeAttrs && upgradeAttrs.multiBreakLine;\n\n let { textConfig: _tc = [] } = this.attribute;\n\n // 预处理editable,将textConfig中的text转换为单个字符\n if (editable && _tc.length > 0 && !RichText.AllSingleCharacter(_tc)) {\n _tc = RichText.TransformTextConfig2SingleCharacter(_tc);\n this.attribute.textConfig = _tc;\n }\n\n const paragraphs: (Paragraph | RichTextIcon)[] = [];\n\n const textConfig = tc ?? _tc;\n\n for (let i = 0; i < textConfig.length; i++) {\n if ('image' in textConfig[i]) {\n const config = this.combinedStyleToCharacter(\n textConfig[i] as IRichTextImageCharacter\n ) as IRichTextImageCharacter;\n (config as any).lineWidth = undefined; // for icon bounds\n // 直接创建icon Mark\n const iconCache =\n config.id && this._frameCache && this._frameCache.icons && this._frameCache.icons.get(config.id);\n if (iconCache) {\n paragraphs.push(iconCache as RichTextIcon);\n } else {\n const icon = new RichTextIcon(config);\n icon.successCallback = () => {\n this.addUpdateBoundTag();\n this.stage?.renderNextFrame();\n };\n icon.richtextId = config.id;\n paragraphs.push(icon);\n }\n } else {\n const richTextConfig = this.combinedStyleToCharacter(\n textConfig[i] as IRichTextParagraphCharacter\n ) as IRichTextParagraphCharacter;\n if (isNumber(richTextConfig.text)) {\n richTextConfig.text = `${richTextConfig.text}`;\n }\n if (richTextConfig.text && richTextConfig.text.includes('\\n')) {\n // 如果有文字内有换行符,将该段文字切为多段,并在后一段加入newLine标记\n const textParts = richTextConfig.text.split('\\n');\n for (let j = 0; j < textParts.length; j++) {\n if (j === 0) {\n paragraphs.push(new Paragraph(textParts[j], false, richTextConfig, ascentDescentMode));\n } else if (textParts[j] || i === textConfig.length - 1) {\n paragraphs.push(new Paragraph(textParts[j], true, richTextConfig, ascentDescentMode));\n } else {\n // 空行的话,config应该要和下一行对齐\n const nextRichTextConfig = this.combinedStyleToCharacter(\n textConfig[i + 1] as IRichTextParagraphCharacter\n ) as IRichTextParagraphCharacter;\n paragraphs.push(new Paragraph(textParts[j], true, nextRichTextConfig, ascentDescentMode));\n }\n // paragraphs.push(new Paragraph(textParts[j], j !== 0, richTextConfig, ascentDescentMode));\n }\n } else if (richTextConfig.text) {\n paragraphs.push(new Paragraph(richTextConfig.text, false, richTextConfig, ascentDescentMode));\n }\n }\n }\n\n // 2. 布局,生成frame\n // const frameHeight =\n // typeof maxHeight === 'number' && (!height || height > maxHeight) // height = 0或height>maxHeight,使用maxHeight布局\n // ? maxHeight\n // : height;\n // const frameWidth =\n // typeof maxWidth === 'number' && (!width || width > maxWidth) // height = 0或height>maxWidth,使用maxWidth布局\n // ? maxWidth\n // : width;\n\n const maxWidthFinite = typeof maxWidth === 'number' && Number.isFinite(maxWidth) && maxWidth > 0;\n const maxHeightFinite = typeof maxHeight === 'number' && Number.isFinite(maxHeight) && maxHeight > 0;\n\n const richTextWidthEnable =\n typeof width === 'number' &&\n Number.isFinite(width) &&\n width > 0 &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (!maxWidthFinite || width <= maxWidth);\n const richTextHeightEnable =\n typeof height === 'number' &&\n Number.isFinite(height) &&\n height > 0 &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (!maxHeightFinite || height <= maxHeight);\n\n const frameWidth = richTextWidthEnable ? width : maxWidthFinite ? maxWidth : 0;\n const frameHeight = richTextHeightEnable ? height : maxHeightFinite ? maxHeight : 0;\n\n const frame = new Frame(\n 0,\n 0,\n frameWidth || 0,\n frameHeight || 0,\n ellipsis,\n wordBreak,\n verticalDirection,\n textAlign,\n textBaseline,\n layoutDirection || 'horizontal',\n // typeof maxWidth === 'number' && (!width || width > maxWidth),\n // typeof maxHeight === 'number' && (!height || height > maxHeight),\n !richTextWidthEnable && maxWidthFinite,\n !richTextHeightEnable && maxHeightFinite,\n singleLine || false,\n this._frameCache?.icons\n );\n const wrapper = new Wrapper(frame);\n // @since 0.22.0\n // 如果可编辑的话,则支持多换行符\n wrapper.newLine = enableMultiBreakLine;\n if (disableAutoWrapLine) {\n let lineCount = 0;\n let skip = false;\n for (let i = 0; i < paragraphs.length; i++) {\n const p = paragraphs[i];\n if (skip) {\n (p as Paragraph).overflow = true;\n (p as Paragraph).left = Infinity;\n (p as Paragraph).top = Infinity;\n !(p as Paragraph).newLine && frame.lines[frame.lines.length - 1].paragraphs.push(p);\n } else {\n wrapper.deal(p, true);\n }\n if (frame.lines.length !== lineCount) {\n lineCount = frame.lines.length;\n wrapper.lineBuffer.length = 0;\n (p as Paragraph).overflow = true;\n (p as Paragraph).left = 1000;\n (p as Paragraph).top = 1000;\n frame.lines[frame.lines.length - 1].paragraphs.push(p);\n skip = true;\n }\n if ((p as Paragraph).newLine) {\n skip = false;\n wrapper.lineWidth = 0;\n }\n wrapper.send();\n }\n } else {\n for (let i = 0; i < paragraphs.length; i++) {\n wrapper.deal(paragraphs[i]);\n }\n }\n\n wrapper.send(); // 最后一行手动输出\n\n // 如果对应的配置宽度不可用,那么需要额外进行一次对齐\n const directionEnable = frame.layoutDirection === 'horizontal' ? richTextWidthEnable : richTextHeightEnable;\n if (!directionEnable) {\n // 使用实际宽度\n const frameSize = frame.getActualSizeWidthEllipsis();\n let offsetSize = frame.layoutDirection === 'horizontal' ? frameSize.width : frameSize.height;\n // 如果最大值可用\n if (frame.layoutDirection === 'horizontal' ? maxWidthFinite : maxHeightFinite) {\n // 取2者中的较小值\n offsetSize = Math.min(\n offsetSize,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n frame.layoutDirection === 'horizontal' ? maxWidth : maxHeight\n );\n }\n\n frame.lines.forEach(function (l) {\n l.calcOffset(offsetSize, false);\n });\n }\n\n // 处理空行\n if (enableMultiBreakLine) {\n frame.lines.forEach(item => {\n const lastParagraphs = item.paragraphs;\n item.paragraphs = item.paragraphs.filter(p => (p as any).text !== '');\n if (item.paragraphs.length === 0 && lastParagraphs.length) {\n (lastParagraphs[0] as any).text = '\\n';\n item.paragraphs.push(lastParagraphs[0]);\n }\n });\n }\n\n this._frameCache = frame;\n\n // this.bindIconEvent();\n }\n\n clone() {\n return new RichText({ ...this.attribute });\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, layer);\n const frameCache = this.getFrameCache();\n // for (let i = 0; i < frameCache.icons.length; i++) {\n // const icon = frameCache.icons[i];\n // icon.setStage(stage, layer);\n // }\n frameCache.icons.forEach(icon => {\n icon.setStage(stage, layer);\n });\n }\n\n // richtext绑定icon交互事件,供外部调用\n bindIconEvent() {\n this.addEventListener('pointermove', (e: FederatedMouseEvent) => {\n const pickedIcon = this.pickIcon(e.global);\n if (pickedIcon && pickedIcon === this._currentHoverIcon) {\n // do nothing\n } else if (pickedIcon) {\n this.setAttribute('hoverIconId', pickedIcon.richtextId);\n\n // this._currentHoverIcon?.setHoverState(false);\n // this._currentHoverIcon = pickedIcon;\n // this._currentHoverIcon.setHoverState(true);\n // this.stage?.setCursor(pickedIcon.attribute.cursor);\n // this.stage?.renderNextFrame();\n } else if (!pickedIcon && this._currentHoverIcon) {\n this.setAttribute('hoverIconId', undefined);\n\n // this._currentHoverIcon.setHoverState(false);\n // this._currentHoverIcon = null;\n // this.stage?.setCursor();\n // this.stage?.renderNextFrame();\n }\n });\n\n this.addEventListener('pointerleave', (e: FederatedMouseEvent) => {\n if (this._currentHoverIcon) {\n this.setAttribute('hoverIconId', undefined);\n\n // this._currentHoverIcon.setHoverState(false);\n // this._currentHoverIcon = null;\n // this.stage?.setCursor();\n // this.stage?.renderNextFrame();\n }\n });\n }\n\n updateHoverIconState(pickedIcon?: IRichTextIcon) {\n if (pickedIcon) {\n this._currentHoverIcon?.setHoverState(false);\n this._currentHoverIcon = pickedIcon;\n this._currentHoverIcon.setHoverState(true);\n this.stage?.setCursor(pickedIcon.attribute.cursor);\n this.stage?.renderNextFrame();\n } else {\n this._currentHoverIcon.setHoverState(false);\n this._currentHoverIcon = null;\n this.stage?.setCursor();\n this.stage?.renderNextFrame();\n }\n }\n\n pickIcon(point: EventPoint): IRichTextIcon | undefined {\n const frameCache = this.getFrameCache();\n const { e: x, f: y } = this.globalTransMatrix;\n // for (let i = 0; i < frameCache.icons.length; i++) {\n // const icon = frameCache.icons[i];\n // if (icon.containsPoint(point.x - x, point.y - y)) {\n // return icon;\n // }\n // }\n let pickIcon: IRichTextIcon | undefined;\n frameCache.icons.forEach((icon, key) => {\n const bounds = icon.AABBBounds.clone();\n bounds.translate(icon._marginArray[3], icon._marginArray[0]);\n if (bounds.containsPoint({ x: point.x - x, y: point.y - y })) {\n pickIcon = icon;\n\n pickIcon.globalX = (pickIcon.attribute.x ?? 0) + x + icon._marginArray[3];\n pickIcon.globalY = (pickIcon.attribute.y ?? 0) + y + icon._marginArray[0];\n }\n });\n\n return pickIcon;\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return RichText.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createRichText(attributes: IRichTextGraphicAttribute): IRichText {\n return new RichText(attributes);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/graphic/richtext.ts"],"names":[],"mappings":"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","file":"richtext.js","sourcesContent":["import type { IAABBBounds } from '@visactor/vutils';\nimport { isNumber, isString } from '@visactor/vutils';\nimport type {\n IRichText,\n IRichTextCharacter,\n RichTextGlobalAlignType,\n RichTextGlobalBaselineType,\n RichTextVerticalDirection,\n RichTextWordBreak,\n IRichTextGraphicAttribute,\n IRichTextImageCharacter,\n IRichTextParagraphCharacter,\n IStage,\n ILayer,\n IRichTextIcon,\n EventPoint,\n IRichTextFrame,\n ISetAttributeContext\n} from '../interface';\nimport { Graphic, GRAPHIC_UPDATE_TAG_KEY, NOWORK_ANIMATE_ATTR } from './graphic';\nimport { DefaultRichTextAttribute } from './config';\nimport Frame from './richtext/frame';\nimport Paragraph from './richtext/paragraph';\nimport Wrapper from './richtext/wrapper';\nimport { getTheme } from './theme';\nimport { RichTextIcon } from './richtext/icon';\nimport type { FederatedMouseEvent } from '../event';\nimport { application } from '../application';\nimport { RICHTEXT_NUMBER_TYPE } from './constants';\n\nlet supportIntl = false;\ntry {\n supportIntl = Intl && typeof (Intl as any).Segmenter === 'function';\n} catch (e) {\n supportIntl = false;\n}\n\nconst RICHTEXT_UPDATE_TAG_KEY = [\n 'width',\n 'height',\n 'ellipsis',\n 'wordBreak',\n 'verticalDirection',\n 'maxHeight',\n 'maxWidth',\n 'textAlign',\n 'textBaseline',\n 'textConfig',\n 'layoutDirection',\n 'fill',\n 'stroke',\n 'fontSize',\n 'fontFamily',\n 'fontStyle',\n 'fontWeight',\n 'lineWidth',\n 'opacity',\n 'fillOpacity',\n 'strokeOpacity',\n ...GRAPHIC_UPDATE_TAG_KEY\n];\n\nexport class RichText extends Graphic<IRichTextGraphicAttribute> implements IRichText {\n type: 'richtext' = 'richtext';\n\n _frameCache: Frame; // 富文本布局画布\n _currentHoverIcon: IRichTextIcon | null = null;\n\n static NOWORK_ANIMATE_ATTR = {\n ellipsis: 1,\n wordBreak: 1,\n verticalDirection: 1,\n textAlign: 1,\n textBaseline: 1,\n textConfig: 1,\n layoutDirection: 1,\n ...NOWORK_ANIMATE_ATTR\n };\n\n constructor(params?: IRichTextGraphicAttribute) {\n super(params);\n this.numberType = RICHTEXT_NUMBER_TYPE;\n\n this.onBeforeAttributeUpdate = ((val: any, attributes: any, key: null | string | string[]) => {\n for (const key in val) {\n if (key === 'hoverIconId') {\n if (val[key] === attributes[key]) {\n continue;\n }\n const icon = this._frameCache.icons.get(val[key]);\n this.updateHoverIconState(icon);\n }\n }\n }) as any;\n }\n\n get width(): number {\n return this.attribute.width ?? DefaultRichTextAttribute.width;\n }\n set width(w: number) {\n if (this.attribute.width === w) {\n return;\n }\n this.attribute.width = w;\n this.addUpdateShapeAndBoundsTag();\n }\n get height(): number {\n return this.attribute.height ?? DefaultRichTextAttribute.height;\n }\n set height(h: number) {\n if (this.attribute.height === h) {\n return;\n }\n this.attribute.height = h;\n this.addUpdateShapeAndBoundsTag();\n }\n get maxWidth(): number | undefined {\n return this.attribute.maxWidth;\n }\n set maxWidth(mw: number | undefined) {\n if (this.attribute.maxWidth === mw) {\n return;\n }\n this.attribute.maxWidth = mw;\n this.addUpdateShapeAndBoundsTag();\n }\n get maxHeight(): number | undefined {\n return this.attribute.maxHeight;\n }\n set maxHeight(mh: number | undefined) {\n if (this.attribute.maxHeight === mh) {\n return;\n }\n this.attribute.maxHeight = mh;\n this.addUpdateShapeAndBoundsTag();\n }\n get ellipsis(): boolean | string {\n return this.attribute.ellipsis ?? DefaultRichTextAttribute.ellipsis;\n }\n set ellipsis(e: boolean | string) {\n if (this.attribute.ellipsis === e) {\n return;\n }\n this.attribute.ellipsis = e;\n this.addUpdateShapeAndBoundsTag();\n }\n get wordBreak(): RichTextWordBreak {\n return this.attribute.wordBreak ?? DefaultRichTextAttribute.wordBreak;\n }\n set wordBreak(wb: RichTextWordBreak) {\n if (this.attribute.wordBreak === wb) {\n return;\n }\n this.attribute.wordBreak = wb;\n this.addUpdateShapeAndBoundsTag();\n }\n get verticalDirection(): RichTextVerticalDirection {\n return this.attribute.verticalDirection ?? DefaultRichTextAttribute.verticalDirection;\n }\n set verticalDirection(vd: RichTextVerticalDirection) {\n if (this.attribute.verticalDirection === vd) {\n return;\n }\n this.attribute.verticalDirection = vd;\n this.addUpdateShapeAndBoundsTag();\n }\n get textAlign(): RichTextGlobalAlignType {\n return this.attribute.textAlign ?? DefaultRichTextAttribute.textAlign;\n }\n set textAlign(align: RichTextGlobalAlignType) {\n if (this.attribute.textAlign === align) {\n return;\n }\n this.attribute.textAlign = align;\n this.addUpdateShapeAndBoundsTag();\n }\n get textBaseline(): RichTextGlobalBaselineType {\n return this.attribute.textBaseline ?? DefaultRichTextAttribute.textBaseline;\n }\n set textBaseline(baseline: RichTextGlobalBaselineType) {\n if (this.attribute.textBaseline === baseline) {\n return;\n }\n this.attribute.textBaseline = baseline;\n this.addUpdateShapeAndBoundsTag();\n }\n get textConfig(): IRichTextCharacter[] {\n return this.attribute.textConfig ?? DefaultRichTextAttribute.textConfig;\n }\n set textConfig(config: IRichTextCharacter[]) {\n this.attribute.textConfig = config;\n this.addUpdateShapeAndBoundsTag();\n }\n\n getGraphicTheme(): Required<IRichTextGraphicAttribute> {\n return getTheme(this).richtext;\n }\n\n static AllSingleCharacter(cache: IRichTextFrame | IRichTextGraphicAttribute['textConfig']) {\n if ((cache as IRichTextFrame).lines) {\n const frame = cache as IRichTextFrame;\n return frame.lines.every(line =>\n line.paragraphs.every(item => !(item.text && isString(item.text) && RichText.splitText(item.text).length > 1))\n );\n }\n // isComposing的不算\n const tc = cache as IRichTextGraphicAttribute['textConfig'];\n return tc.every(\n item =>\n (item as any).isComposing ||\n !((item as any).text && isString((item as any).text) && RichText.splitText((item as any).text).length > 1)\n );\n }\n\n static splitText(text: string) {\n if (supportIntl) {\n // 不传入具体语言标签,使用默认设置\n const segmenter = new (Intl as any).Segmenter(undefined, { granularity: 'grapheme' });\n const segments = [];\n for (const { segment } of segmenter.segment(text)) {\n segments.push(segment);\n }\n return segments;\n }\n // 如果不支持 Intl.Segmenter,则使用旧方法\n return Array.from(text);\n }\n\n static TransformTextConfig2SingleCharacter(textConfig: IRichTextGraphicAttribute['textConfig']) {\n const tc: IRichTextGraphicAttribute['textConfig'] = [];\n textConfig.forEach((item: IRichTextParagraphCharacter) => {\n const textList = RichText.splitText(item.text.toString());\n if (isString(item.text) && textList.length > 1) {\n // 拆分\n for (let i = 0; i < textList.length; i++) {\n const t = textList[i];\n tc.push({ ...item, text: t });\n }\n } else {\n tc.push(item);\n }\n });\n\n return tc;\n }\n\n protected updateAABBBounds(\n attribute: IRichTextGraphicAttribute,\n richtextTheme: Required<IRichTextGraphicAttribute>,\n aabbBounds: IAABBBounds\n ) {\n const {\n width = richtextTheme.width,\n height = richtextTheme.height,\n maxWidth = richtextTheme.maxWidth,\n maxHeight = richtextTheme.maxHeight,\n textAlign = richtextTheme.textAlign,\n textBaseline = attribute.textBaseline ?? richtextTheme.textBaseline ?? 'top',\n editOptions\n } = attribute;\n\n if (width > 0 && height > 0) {\n // 外部设置宽高\n aabbBounds.set(0, 0, width, height);\n } else {\n // 获取内容宽高\n const frameCache = this.getFrameCache();\n const { width: actualWidth, height: actualHeight } = frameCache.getActualSize();\n let contentWidth = width || actualWidth || 0;\n let contentHeight = height || actualHeight || 0;\n\n contentHeight = typeof maxHeight === 'number' && contentHeight > maxHeight ? maxHeight : contentHeight || 0;\n contentWidth = typeof maxWidth === 'number' && contentWidth > maxWidth ? maxWidth : contentWidth || 0;\n\n aabbBounds.set(0, 0, contentWidth, contentHeight);\n }\n\n // 如果是可编辑状态,且没有设置高度,就用fontSize,否则就完全选不到了\n if (editOptions && editOptions.keepHeightWhileEmpty && !aabbBounds.height() && !attribute.textConfig?.length) {\n aabbBounds.y2 = aabbBounds.y1 + (attribute.fontSize ?? 12);\n aabbBounds.x2 = aabbBounds.x1 + 2;\n }\n\n // 调整对齐方式\n let deltaY = 0;\n switch (textBaseline) {\n case 'top':\n deltaY = 0;\n break;\n case 'middle':\n deltaY = -aabbBounds.height() / 2;\n break;\n case 'bottom':\n deltaY = -aabbBounds.height();\n break;\n default:\n break;\n }\n let deltaX = 0;\n switch (textAlign) {\n case 'left':\n deltaX = 0;\n break;\n case 'center':\n deltaX = -aabbBounds.width() / 2;\n break;\n case 'right':\n deltaX = -aabbBounds.width();\n break;\n default:\n break;\n }\n if (!height) {\n if (this.verticalDirection === 'middle') {\n deltaY -= aabbBounds.height() / 2;\n } else if (this.verticalDirection === 'bottom') {\n deltaY -= aabbBounds.height();\n }\n }\n aabbBounds.translate(deltaX, deltaY);\n\n application.graphicService.updateTempAABBBounds(aabbBounds);\n\n if (attribute.forceBoundsHeight != null || attribute.forceBoundsWidth != null) {\n application.graphicService.updateHTMLTextAABBBounds(attribute, richtextTheme, aabbBounds);\n }\n this.widthWithoutTransform = aabbBounds.x2 - aabbBounds.x1;\n this.heightWithoutTransform = aabbBounds.y2 - aabbBounds.y1;\n\n application.graphicService.transformAABBBounds(attribute, aabbBounds, richtextTheme, false, this);\n // 都为0的话,就直接clear\n if (aabbBounds.width() === 0 && aabbBounds.height() === 0) {\n aabbBounds.clear();\n }\n return aabbBounds;\n }\n\n protected needUpdateTags(keys: string[]): boolean {\n return super.needUpdateTags(keys, RICHTEXT_UPDATE_TAG_KEY);\n }\n protected needUpdateTag(key: string): boolean {\n return super.needUpdateTag(key, RICHTEXT_UPDATE_TAG_KEY);\n }\n getFrameCache(): IRichTextFrame {\n if (this.shouldUpdateShape()) {\n this.doUpdateFrameCache();\n this.clearUpdateShapeTag();\n }\n return this._frameCache as IRichTextFrame;\n }\n\n get cliped() {\n const frameCache = this.getFrameCache();\n if (frameCache.actualHeight > frameCache.height) {\n return true;\n }\n const { disableAutoWrapLine } = this.attribute;\n if (disableAutoWrapLine) {\n for (let i = 0; i < frameCache.lines.length; i++) {\n const l = frameCache.lines[i];\n for (let j = 0; j < l.paragraphs.length; j++) {\n const p = l.paragraphs[j];\n if ((p as any).overflow && (p as any).text !== '') {\n return true;\n }\n }\n }\n }\n return false;\n // if (height < this.attribute.height || )\n }\n combinedStyleToCharacter(config: IRichTextImageCharacter | IRichTextParagraphCharacter) {\n const {\n fill,\n stroke,\n fontSize,\n fontFamily,\n fontStyle,\n fontWeight,\n lineWidth,\n opacity,\n fillOpacity,\n lineHeight,\n strokeOpacity,\n upgradeAttrs\n } = this.attribute;\n const out = {\n fill,\n stroke,\n fontSize,\n fontFamily,\n fontStyle,\n fontWeight,\n lineWidth,\n opacity,\n fillOpacity,\n strokeOpacity,\n ...config\n };\n if (upgradeAttrs?.lineHeight) {\n out.lineHeight = lineHeight;\n }\n return out;\n }\n doUpdateFrameCache(tc?: IRichTextCharacter[]) {\n // 1. 测量,生成paragraph\n const {\n maxWidth,\n maxHeight,\n width,\n height,\n ellipsis,\n wordBreak,\n verticalDirection,\n textAlign,\n textBaseline,\n layoutDirection,\n singleLine,\n disableAutoWrapLine,\n editable,\n ascentDescentMode,\n upgradeAttrs\n } = this.attribute;\n\n const enableMultiBreakLine = upgradeAttrs && upgradeAttrs.multiBreakLine;\n\n let { textConfig: _tc = [] } = this.attribute;\n\n // 预处理editable,将textConfig中的text转换为单个字符\n if (editable && _tc.length > 0 && !RichText.AllSingleCharacter(_tc)) {\n _tc = RichText.TransformTextConfig2SingleCharacter(_tc);\n this.attribute.textConfig = _tc;\n }\n\n const paragraphs: (Paragraph | RichTextIcon)[] = [];\n\n const textConfig = tc ?? _tc;\n\n for (let i = 0; i < textConfig.length; i++) {\n if ('image' in textConfig[i]) {\n const config = this.combinedStyleToCharacter(\n textConfig[i] as IRichTextImageCharacter\n ) as IRichTextImageCharacter;\n (config as any).lineWidth = undefined; // for icon bounds\n // 直接创建icon Mark\n const iconCache =\n config.id && this._frameCache && this._frameCache.icons && this._frameCache.icons.get(config.id);\n if (iconCache) {\n paragraphs.push(iconCache as RichTextIcon);\n } else {\n const icon = new RichTextIcon(config);\n icon.successCallback = () => {\n this.addUpdateBoundTag();\n this.stage?.renderNextFrame();\n };\n icon.richtextId = config.id;\n paragraphs.push(icon);\n }\n } else {\n const richTextConfig = this.combinedStyleToCharacter(\n textConfig[i] as IRichTextParagraphCharacter\n ) as IRichTextParagraphCharacter;\n if (isNumber(richTextConfig.text)) {\n richTextConfig.text = `${richTextConfig.text}`;\n }\n if (richTextConfig.text && richTextConfig.text.includes('\\n')) {\n // 如果有文字内有换行符,将该段文字切为多段,并在后一段加入newLine标记\n const textParts = richTextConfig.text.split('\\n');\n for (let j = 0; j < textParts.length; j++) {\n if (j === 0) {\n paragraphs.push(new Paragraph(textParts[j], false, richTextConfig, ascentDescentMode));\n } else if (textParts[j] || i === textConfig.length - 1) {\n paragraphs.push(new Paragraph(textParts[j], true, richTextConfig, ascentDescentMode));\n } else {\n // 空行的话,config应该要和下一行对齐\n const nextRichTextConfig = this.combinedStyleToCharacter(\n textConfig[i + 1] as IRichTextParagraphCharacter\n ) as IRichTextParagraphCharacter;\n paragraphs.push(new Paragraph(textParts[j], true, nextRichTextConfig, ascentDescentMode));\n }\n // paragraphs.push(new Paragraph(textParts[j], j !== 0, richTextConfig, ascentDescentMode));\n }\n } else if (richTextConfig.text) {\n paragraphs.push(new Paragraph(richTextConfig.text, false, richTextConfig, ascentDescentMode));\n }\n }\n }\n\n // 2. 布局,生成frame\n // const frameHeight =\n // typeof maxHeight === 'number' && (!height || height > maxHeight) // height = 0或height>maxHeight,使用maxHeight布局\n // ? maxHeight\n // : height;\n // const frameWidth =\n // typeof maxWidth === 'number' && (!width || width > maxWidth) // height = 0或height>maxWidth,使用maxWidth布局\n // ? maxWidth\n // : width;\n\n const maxWidthFinite = typeof maxWidth === 'number' && Number.isFinite(maxWidth) && maxWidth > 0;\n const maxHeightFinite = typeof maxHeight === 'number' && Number.isFinite(maxHeight) && maxHeight > 0;\n\n const richTextWidthEnable =\n typeof width === 'number' &&\n Number.isFinite(width) &&\n width > 0 &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (!maxWidthFinite || width <= maxWidth);\n const richTextHeightEnable =\n typeof height === 'number' &&\n Number.isFinite(height) &&\n height > 0 &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n (!maxHeightFinite || height <= maxHeight);\n\n const frameWidth = richTextWidthEnable ? width : maxWidthFinite ? maxWidth : 0;\n const frameHeight = richTextHeightEnable ? height : maxHeightFinite ? maxHeight : 0;\n\n const frame = new Frame(\n 0,\n 0,\n frameWidth || 0,\n frameHeight || 0,\n ellipsis,\n wordBreak,\n verticalDirection,\n textAlign,\n textBaseline,\n layoutDirection || 'horizontal',\n // typeof maxWidth === 'number' && (!width || width > maxWidth),\n // typeof maxHeight === 'number' && (!height || height > maxHeight),\n !richTextWidthEnable && maxWidthFinite,\n !richTextHeightEnable && maxHeightFinite,\n singleLine || false,\n this._frameCache?.icons\n );\n const wrapper = new Wrapper(frame);\n // @since 0.22.0\n // 如果可编辑的话,则支持多换行符\n wrapper.newLine = enableMultiBreakLine;\n if (disableAutoWrapLine) {\n let lineCount = 0;\n let skip = false;\n for (let i = 0; i < paragraphs.length; i++) {\n const p = paragraphs[i];\n if (skip) {\n (p as Paragraph).overflow = true;\n (p as Paragraph).left = Infinity;\n (p as Paragraph).top = Infinity;\n !(p as Paragraph).newLine && frame.lines[frame.lines.length - 1].paragraphs.push(p);\n } else {\n wrapper.deal(p, true);\n }\n if (frame.lines.length !== lineCount) {\n lineCount = frame.lines.length;\n wrapper.lineBuffer.length = 0;\n (p as Paragraph).overflow = true;\n (p as Paragraph).left = 1000;\n (p as Paragraph).top = 1000;\n frame.lines[frame.lines.length - 1].paragraphs.push(p);\n skip = true;\n }\n if ((p as Paragraph).newLine) {\n skip = false;\n wrapper.lineWidth = 0;\n }\n wrapper.send();\n }\n } else {\n for (let i = 0; i < paragraphs.length; i++) {\n wrapper.deal(paragraphs[i]);\n }\n }\n\n wrapper.send(); // 最后一行手动输出\n\n // 如果对应的配置宽度不可用,那么需要额外进行一次对齐\n const directionEnable = frame.layoutDirection === 'horizontal' ? richTextWidthEnable : richTextHeightEnable;\n if (!directionEnable) {\n // 使用实际宽度\n const frameSize = frame.getActualSizeWidthEllipsis();\n let offsetSize = frame.layoutDirection === 'horizontal' ? frameSize.width : frameSize.height;\n // 如果最大值可用\n if (frame.layoutDirection === 'horizontal' ? maxWidthFinite : maxHeightFinite) {\n // 取2者中的较小值\n offsetSize = Math.min(\n offsetSize,\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n frame.layoutDirection === 'horizontal' ? maxWidth : maxHeight\n );\n }\n\n frame.lines.forEach(function (l) {\n l.calcOffset(offsetSize, false);\n });\n }\n\n // 处理空行\n if (enableMultiBreakLine) {\n frame.lines.forEach(item => {\n const lastParagraphs = item.paragraphs;\n item.paragraphs = item.paragraphs.filter(p => (p as any).text !== '');\n if (item.paragraphs.length === 0 && lastParagraphs.length) {\n (lastParagraphs[0] as any).text = '\\n';\n item.paragraphs.push(lastParagraphs[0]);\n }\n });\n }\n\n this._frameCache = frame;\n\n // this.bindIconEvent();\n }\n\n clone() {\n return new RichText({ ...this.attribute });\n }\n\n setStage(stage?: IStage, layer?: ILayer) {\n super.setStage(stage, layer);\n const frameCache = this.getFrameCache();\n // for (let i = 0; i < frameCache.icons.length; i++) {\n // const icon = frameCache.icons[i];\n // icon.setStage(stage, layer);\n // }\n frameCache.icons.forEach(icon => {\n icon.setStage(stage, layer);\n });\n }\n\n // richtext绑定icon交互事件,供外部调用\n bindIconEvent() {\n this.addEventListener('pointermove', (e: FederatedMouseEvent) => {\n const pickedIcon = this.pickIcon(e.global);\n if (pickedIcon && pickedIcon === this._currentHoverIcon) {\n // do nothing\n } else if (pickedIcon) {\n this.setAttribute('hoverIconId', pickedIcon.richtextId);\n\n // this._currentHoverIcon?.setHoverState(false);\n // this._currentHoverIcon = pickedIcon;\n // this._currentHoverIcon.setHoverState(true);\n // this.stage?.setCursor(pickedIcon.attribute.cursor);\n // this.stage?.renderNextFrame();\n } else if (!pickedIcon && this._currentHoverIcon) {\n this.setAttribute('hoverIconId', undefined);\n\n // this._currentHoverIcon.setHoverState(false);\n // this._currentHoverIcon = null;\n // this.stage?.setCursor();\n // this.stage?.renderNextFrame();\n }\n });\n\n this.addEventListener('pointerleave', (e: FederatedMouseEvent) => {\n if (this._currentHoverIcon) {\n this.setAttribute('hoverIconId', undefined);\n\n // this._currentHoverIcon.setHoverState(false);\n // this._currentHoverIcon = null;\n // this.stage?.setCursor();\n // this.stage?.renderNextFrame();\n }\n });\n }\n\n updateHoverIconState(pickedIcon?: IRichTextIcon) {\n if (pickedIcon) {\n this._currentHoverIcon?.setHoverState(false);\n this._currentHoverIcon = pickedIcon;\n this._currentHoverIcon.setHoverState(true);\n this.stage?.setCursor(pickedIcon.attribute.cursor);\n this.stage?.renderNextFrame();\n } else {\n this._currentHoverIcon.setHoverState(false);\n this._currentHoverIcon = null;\n this.stage?.setCursor();\n this.stage?.renderNextFrame();\n }\n }\n\n pickIcon(point: EventPoint): IRichTextIcon | undefined {\n const frameCache = this.getFrameCache();\n const { e: x, f: y } = this.globalTransMatrix;\n // for (let i = 0; i < frameCache.icons.length; i++) {\n // const icon = frameCache.icons[i];\n // if (icon.containsPoint(point.x - x, point.y - y)) {\n // return icon;\n // }\n // }\n let pickIcon: IRichTextIcon | undefined;\n frameCache.icons.forEach((icon, key) => {\n const bounds = icon.AABBBounds.clone();\n bounds.translate(icon._marginArray[3], icon._marginArray[0]);\n if (bounds.containsPoint({ x: point.x - x, y: point.y - y })) {\n pickIcon = icon;\n\n pickIcon.globalX = (pickIcon.attribute.x ?? 0) + x + icon._marginArray[3];\n pickIcon.globalY = (pickIcon.attribute.y ?? 0) + y + icon._marginArray[0];\n }\n });\n\n return pickIcon;\n }\n\n getNoWorkAnimateAttr(): Record<string, number> {\n return RichText.NOWORK_ANIMATE_ATTR;\n }\n}\n\nexport function createRichText(attributes: IRichTextGraphicAttribute): IRichText {\n return new RichText(attributes);\n}\n"]}
|
package/cjs/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export * from './resource-loader/loader';
|
|
|
17
17
|
export * from './color-string';
|
|
18
18
|
export * from './factory';
|
|
19
19
|
export * from './common/text';
|
|
20
|
+
export * from './common/color-utils';
|
|
20
21
|
export * from './common/bezier-utils';
|
|
21
22
|
export * from './common/bounds-context';
|
|
22
23
|
export * from './common/seg-context';
|
package/cjs/index.js
CHANGED
|
@@ -26,20 +26,21 @@ __exportStar(require("./canvas"), exports), __exportStar(require("./core"), expo
|
|
|
26
26
|
__exportStar(require("./core/light"), exports), __exportStar(require("./core/camera"), exports),
|
|
27
27
|
__exportStar(require("./picker"), exports), __exportStar(require("./resource-loader/loader"), exports),
|
|
28
28
|
__exportStar(require("./color-string"), exports), __exportStar(require("./factory"), exports),
|
|
29
|
-
__exportStar(require("./common/text"), exports), __exportStar(require("./common/
|
|
30
|
-
__exportStar(require("./common/
|
|
31
|
-
__exportStar(require("./common/
|
|
32
|
-
__exportStar(require("./common/
|
|
33
|
-
__exportStar(require("./common/
|
|
34
|
-
__exportStar(require("./common/
|
|
35
|
-
__exportStar(require("./common/
|
|
36
|
-
__exportStar(require("./common/
|
|
37
|
-
__exportStar(require("./common/
|
|
38
|
-
__exportStar(require("./common/render-
|
|
39
|
-
__exportStar(require("./common/
|
|
40
|
-
__exportStar(require("./common/
|
|
41
|
-
__exportStar(require("./common/
|
|
42
|
-
__exportStar(require("./
|
|
29
|
+
__exportStar(require("./common/text"), exports), __exportStar(require("./common/color-utils"), exports),
|
|
30
|
+
__exportStar(require("./common/bezier-utils"), exports), __exportStar(require("./common/bounds-context"), exports),
|
|
31
|
+
__exportStar(require("./common/seg-context"), exports), __exportStar(require("./common/custom-path2d"), exports),
|
|
32
|
+
__exportStar(require("./common/segment"), exports), __exportStar(require("./common/canvas-utils"), exports),
|
|
33
|
+
__exportStar(require("./common/contribution-provider"), exports), __exportStar(require("./common/generator"), exports),
|
|
34
|
+
__exportStar(require("./common/utils"), exports), __exportStar(require("./common/shape/arc"), exports),
|
|
35
|
+
__exportStar(require("./common/shape/rect"), exports), __exportStar(require("./common/matrix"), exports),
|
|
36
|
+
__exportStar(require("./common/simplify"), exports), __exportStar(require("./common/diff"), exports),
|
|
37
|
+
__exportStar(require("./common/path-svg"), exports), __exportStar(require("./common/render-curve"), exports),
|
|
38
|
+
__exportStar(require("./common/render-area"), exports), __exportStar(require("./common/render-command-list"), exports),
|
|
39
|
+
__exportStar(require("./common/sort"), exports), __exportStar(require("./common/morphing-utils"), exports),
|
|
40
|
+
__exportStar(require("./common/split-path"), exports), __exportStar(require("./common/enums"), exports),
|
|
41
|
+
__exportStar(require("./common/generator"), exports), __exportStar(require("./common/performance-raf"), exports),
|
|
42
|
+
__exportStar(require("./common/event-transformer"), exports), __exportStar(require("./plugins/constants"), exports),
|
|
43
|
+
__exportStar(require("./plugins/builtin-plugin/richtext-edit-plugin"), exports),
|
|
43
44
|
__exportStar(require("./allocator/matrix-allocate"), exports), __exportStar(require("./allocator/canvas-allocate"), exports),
|
|
44
45
|
__exportStar(require("./allocator/graphic-allocate"), exports), __exportStar(require("./common/contribution-provider"), exports);
|
|
45
46
|
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qBAAmB;AAEnB,8CAA4B;AAC5B,gDAA8B;AAC9B,4CAA0B;AAC1B,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,4EAA0D;AAC1D,2CAAyB;AACzB,yCAAuB;AACvB,+CAA6B;AAC7B,gDAA8B;AAC9B,2CAAyB;AACzB,2DAAyC;AACzC,iDAA+B;AAC/B,4CAA0B;AAG1B,gDAA8B;AAC9B,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,mDAAiC;AACjC,wDAAsC;AACtC,iEAA+C;AAC/C,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,sDAAoC;AACpC,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAE9B,oDAAkC;AAClC,wDAAsC;AACtC,uDAAqC;AACrC,+DAA6C;AAC7C,gDAA8B;AAC9B,0DAAwC;AACxC,sDAAoC;AACpC,iDAA+B;AAC/B,qDAAmC;AACnC,2DAAyC;AACzC,6DAA2C;AAC3C,sDAAoC;AACpC,gFAA8D;AAC9D,8DAA4C;AAC5C,8DAA4C;AAC5C,+DAA6C;AAC7C,iEAA+C;AAE/C,sCAAwD;AAA/C,kGAAA,UAAU,OAAA;AAAE,mGAAA,WAAW,OAAA;AAChC,+CAA6B;AAC7B,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,8CAA4B;AAE5B,2EAAyD;AACzD,4EAA0D;AAC1D,4EAA0D;AAC1D,4EAA0D;AAC1D,8EAA4D;AAC5D,8EAA4D;AAC5D,4EAA0D;AAC1D,4EAA0D;AAC1D,+EAA6D;AAC7D,4EAA0D;AAC1D,6EAA2D;AAC3D,gFAA8D;AAC9D,6EAA2D;AAC3D,8EAA4D;AAC5D,6EAA2D;AAC3D,iFAA+D;AAE/D,0DAAwC;AACxC,4DAA0C;AAC1C,2DAAyC;AACzC,6DAA2C;AAC3C,4DAA0C;AAC1C,4DAA0C;AAC1C,4DAA0C;AAC1C,2DAAyC;AACzC,2DAAyC;AACzC,8DAA4C;AAC5C,2DAAyC;AACzC,gEAA8C;AAC9C,2DAAyC;AACzC,6DAA2C;AAC3C,+DAA6C;AAC7C,6DAA2C;AAC3C,2DAAyC;AACzC,iEAA+C;AAC/C,+DAA6C;AAG7C,iFAA+D;AAC/D,kFAAgE;AAChE,mFAAiE;AACjE,8EAA4D;AAE5D,uEAAqD","file":"index.js","sourcesContent":["// import 'core-js/proposals/reflect-metadata';\nimport './modules';\n\nexport * from './container';\nexport * from './core/global';\nexport * from './graphic';\nexport * from './modules';\nexport * from './create';\nexport * from './event';\nexport * from './interface';\nexport * from './render';\nexport * from './render/contributions/render/base-render';\nexport * from './canvas';\nexport * from './core';\nexport * from './core/light';\nexport * from './core/camera';\nexport * from './picker';\nexport * from './resource-loader/loader';\nexport * from './color-string';\nexport * from './factory';\n\n/* export common */\nexport * from './common/text';\nexport * from './common/bezier-utils';\nexport * from './common/bounds-context';\nexport * from './common/seg-context';\nexport * from './common/custom-path2d';\nexport * from './common/segment';\nexport * from './common/canvas-utils';\nexport * from './common/contribution-provider';\nexport * from './common/generator';\nexport * from './common/utils';\nexport * from './common/shape/arc';\nexport * from './common/shape/rect';\nexport * from './common/matrix';\nexport * from './common/simplify';\nexport * from './common/diff';\n\nexport * from './common/path-svg';\nexport * from './common/render-curve';\nexport * from './common/render-area';\nexport * from './common/render-command-list';\nexport * from './common/sort';\nexport * from './common/morphing-utils';\nexport * from './common/split-path';\nexport * from './common/enums';\nexport * from './common/generator';\nexport * from './common/performance-raf';\nexport * from './common/event-transformer';\nexport * from './plugins/constants';\nexport * from './plugins/builtin-plugin/richtext-edit-plugin';\nexport * from './allocator/matrix-allocate';\nexport * from './allocator/canvas-allocate';\nexport * from './allocator/graphic-allocate';\nexport * from './common/contribution-provider';\n\nexport { wrapCanvas, wrapContext } from './canvas/util';\nexport * from './common/xml';\nexport * from './common/inversify-lite';\nexport * from './constants';\nexport * from './application';\nexport * from './env-check';\n\nexport * from './render/contributions/render/arc-module';\nexport * from './render/contributions/render/rect-module';\nexport * from './render/contributions/render/line-module';\nexport * from './render/contributions/render/area-module';\nexport * from './render/contributions/render/symbol-module';\nexport * from './render/contributions/render/circle-module';\nexport * from './render/contributions/render/text-module';\nexport * from './render/contributions/render/path-module';\nexport * from './render/contributions/render/polygon-module';\nexport * from './render/contributions/render/star-module';\nexport * from './render/contributions/render/glyph-module';\nexport * from './render/contributions/render/richtext-module';\nexport * from './render/contributions/render/image-module';\nexport * from './render/contributions/render/rect3d-module';\nexport * from './render/contributions/render/arc3d-module';\nexport * from './render/contributions/render/pyramid3d-module';\n\nexport * from './register/register-arc';\nexport * from './register/register-arc3d';\nexport * from './register/register-area';\nexport * from './register/register-circle';\nexport * from './register/register-glyph';\nexport * from './register/register-group';\nexport * from './register/register-image';\nexport * from './register/register-line';\nexport * from './register/register-path';\nexport * from './register/register-polygon';\nexport * from './register/register-star';\nexport * from './register/register-pyramid3d';\nexport * from './register/register-rect';\nexport * from './register/register-rect3d';\nexport * from './register/register-richtext';\nexport * from './register/register-symbol';\nexport * from './register/register-text';\nexport * from './register/register-shadowRoot';\nexport * from './register/register-wraptext';\n\n// plugin\nexport * from './plugins/builtin-plugin/html-attribute-plugin';\nexport * from './plugins/builtin-plugin/react-attribute-plugin';\nexport * from './plugins/builtin-plugin/3dview-transform-plugin';\nexport * from './plugins/builtin-plugin/flex-layout-plugin';\n\nexport * from './plugins/builtin-plugin/edit-module';\n\n// export const morphPath = {};\n// export const multiToOneMorph = {};\n// export const oneToMultiMorph = {};\n// export class ACustomAnimate {}\n// export const AnimateGroup = {};\n// export const Animate = {};\n// export const defaultTicker = {};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AACA,qBAAmB;AAEnB,8CAA4B;AAC5B,gDAA8B;AAC9B,4CAA0B;AAC1B,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB;AACxB,8CAA4B;AAC5B,2CAAyB;AACzB,4EAA0D;AAC1D,2CAAyB;AACzB,yCAAuB;AACvB,+CAA6B;AAC7B,gDAA8B;AAC9B,2CAAyB;AACzB,2DAAyC;AACzC,iDAA+B;AAC/B,4CAA0B;AAG1B,gDAA8B;AAC9B,uDAAqC;AACrC,wDAAsC;AACtC,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,mDAAiC;AACjC,wDAAsC;AACtC,iEAA+C;AAC/C,qDAAmC;AACnC,iDAA+B;AAC/B,qDAAmC;AACnC,sDAAoC;AACpC,kDAAgC;AAChC,oDAAkC;AAClC,gDAA8B;AAE9B,oDAAkC;AAClC,wDAAsC;AACtC,uDAAqC;AACrC,+DAA6C;AAC7C,gDAA8B;AAC9B,0DAAwC;AACxC,sDAAoC;AACpC,iDAA+B;AAC/B,qDAAmC;AACnC,2DAAyC;AACzC,6DAA2C;AAC3C,sDAAoC;AACpC,gFAA8D;AAC9D,8DAA4C;AAC5C,8DAA4C;AAC5C,+DAA6C;AAC7C,iEAA+C;AAE/C,sCAAwD;AAA/C,kGAAA,UAAU,OAAA;AAAE,mGAAA,WAAW,OAAA;AAChC,+CAA6B;AAC7B,0DAAwC;AACxC,8CAA4B;AAC5B,gDAA8B;AAC9B,8CAA4B;AAE5B,2EAAyD;AACzD,4EAA0D;AAC1D,4EAA0D;AAC1D,4EAA0D;AAC1D,8EAA4D;AAC5D,8EAA4D;AAC5D,4EAA0D;AAC1D,4EAA0D;AAC1D,+EAA6D;AAC7D,4EAA0D;AAC1D,6EAA2D;AAC3D,gFAA8D;AAC9D,6EAA2D;AAC3D,8EAA4D;AAC5D,6EAA2D;AAC3D,iFAA+D;AAE/D,0DAAwC;AACxC,4DAA0C;AAC1C,2DAAyC;AACzC,6DAA2C;AAC3C,4DAA0C;AAC1C,4DAA0C;AAC1C,4DAA0C;AAC1C,2DAAyC;AACzC,2DAAyC;AACzC,8DAA4C;AAC5C,2DAAyC;AACzC,gEAA8C;AAC9C,2DAAyC;AACzC,6DAA2C;AAC3C,+DAA6C;AAC7C,6DAA2C;AAC3C,2DAAyC;AACzC,iEAA+C;AAC/C,+DAA6C;AAG7C,iFAA+D;AAC/D,kFAAgE;AAChE,mFAAiE;AACjE,8EAA4D;AAE5D,uEAAqD","file":"index.js","sourcesContent":["// import 'core-js/proposals/reflect-metadata';\nimport './modules';\n\nexport * from './container';\nexport * from './core/global';\nexport * from './graphic';\nexport * from './modules';\nexport * from './create';\nexport * from './event';\nexport * from './interface';\nexport * from './render';\nexport * from './render/contributions/render/base-render';\nexport * from './canvas';\nexport * from './core';\nexport * from './core/light';\nexport * from './core/camera';\nexport * from './picker';\nexport * from './resource-loader/loader';\nexport * from './color-string';\nexport * from './factory';\n\n/* export common */\nexport * from './common/text';\nexport * from './common/color-utils';\nexport * from './common/bezier-utils';\nexport * from './common/bounds-context';\nexport * from './common/seg-context';\nexport * from './common/custom-path2d';\nexport * from './common/segment';\nexport * from './common/canvas-utils';\nexport * from './common/contribution-provider';\nexport * from './common/generator';\nexport * from './common/utils';\nexport * from './common/shape/arc';\nexport * from './common/shape/rect';\nexport * from './common/matrix';\nexport * from './common/simplify';\nexport * from './common/diff';\n\nexport * from './common/path-svg';\nexport * from './common/render-curve';\nexport * from './common/render-area';\nexport * from './common/render-command-list';\nexport * from './common/sort';\nexport * from './common/morphing-utils';\nexport * from './common/split-path';\nexport * from './common/enums';\nexport * from './common/generator';\nexport * from './common/performance-raf';\nexport * from './common/event-transformer';\nexport * from './plugins/constants';\nexport * from './plugins/builtin-plugin/richtext-edit-plugin';\nexport * from './allocator/matrix-allocate';\nexport * from './allocator/canvas-allocate';\nexport * from './allocator/graphic-allocate';\nexport * from './common/contribution-provider';\n\nexport { wrapCanvas, wrapContext } from './canvas/util';\nexport * from './common/xml';\nexport * from './common/inversify-lite';\nexport * from './constants';\nexport * from './application';\nexport * from './env-check';\n\nexport * from './render/contributions/render/arc-module';\nexport * from './render/contributions/render/rect-module';\nexport * from './render/contributions/render/line-module';\nexport * from './render/contributions/render/area-module';\nexport * from './render/contributions/render/symbol-module';\nexport * from './render/contributions/render/circle-module';\nexport * from './render/contributions/render/text-module';\nexport * from './render/contributions/render/path-module';\nexport * from './render/contributions/render/polygon-module';\nexport * from './render/contributions/render/star-module';\nexport * from './render/contributions/render/glyph-module';\nexport * from './render/contributions/render/richtext-module';\nexport * from './render/contributions/render/image-module';\nexport * from './render/contributions/render/rect3d-module';\nexport * from './render/contributions/render/arc3d-module';\nexport * from './render/contributions/render/pyramid3d-module';\n\nexport * from './register/register-arc';\nexport * from './register/register-arc3d';\nexport * from './register/register-area';\nexport * from './register/register-circle';\nexport * from './register/register-glyph';\nexport * from './register/register-group';\nexport * from './register/register-image';\nexport * from './register/register-line';\nexport * from './register/register-path';\nexport * from './register/register-polygon';\nexport * from './register/register-star';\nexport * from './register/register-pyramid3d';\nexport * from './register/register-rect';\nexport * from './register/register-rect3d';\nexport * from './register/register-richtext';\nexport * from './register/register-symbol';\nexport * from './register/register-text';\nexport * from './register/register-shadowRoot';\nexport * from './register/register-wraptext';\n\n// plugin\nexport * from './plugins/builtin-plugin/html-attribute-plugin';\nexport * from './plugins/builtin-plugin/react-attribute-plugin';\nexport * from './plugins/builtin-plugin/3dview-transform-plugin';\nexport * from './plugins/builtin-plugin/flex-layout-plugin';\n\nexport * from './plugins/builtin-plugin/edit-module';\n\n// export const morphPath = {};\n// export const multiToOneMorph = {};\n// export const oneToMultiMorph = {};\n// export class ACustomAnimate {}\n// export const AnimateGroup = {};\n// export const Animate = {};\n// export const defaultTicker = {};\n"]}
|
|
@@ -272,6 +272,7 @@ class RichTextEditPlugin {
|
|
|
272
272
|
}));
|
|
273
273
|
}
|
|
274
274
|
tryShowInputBounds() {
|
|
275
|
+
var _a, _b;
|
|
275
276
|
if (!this.currRt || !this.focusing) return;
|
|
276
277
|
const {editOptions: editOptions = {}} = this.currRt.attribute, {boundsStrokeWhenInput: boundsStrokeWhenInput} = editOptions;
|
|
277
278
|
if (!editOptions || !boundsStrokeWhenInput) return;
|
|
@@ -280,6 +281,8 @@ class RichTextEditPlugin {
|
|
|
280
281
|
this.shadowBounds = this.shadowBounds || (0, graphic_1.createRect)({}), this.shadowBounds.setAttributes({
|
|
281
282
|
x: 0,
|
|
282
283
|
y: 0,
|
|
284
|
+
scaleX: 1 / (null !== (_a = this.currRt.attribute.scaleX) && void 0 !== _a ? _a : 1),
|
|
285
|
+
scaleY: 1 / (null !== (_b = this.currRt.attribute.scaleY) && void 0 !== _b ? _b : 1),
|
|
283
286
|
width: width,
|
|
284
287
|
height: height,
|
|
285
288
|
fill: !1,
|
|
@@ -369,7 +372,9 @@ class RichTextEditPlugin {
|
|
|
369
372
|
const x = 0, y1 = 0, y2 = (0, graphic_1.getRichTextBounds)(Object.assign(Object.assign({}, target.attribute), {
|
|
370
373
|
textConfig: [ {
|
|
371
374
|
text: "a"
|
|
372
|
-
} ]
|
|
375
|
+
} ],
|
|
376
|
+
scaleX: 1,
|
|
377
|
+
scaleY: 1
|
|
373
378
|
})).height();
|
|
374
379
|
this.startCursorPos = {
|
|
375
380
|
x: x,
|
|
@@ -400,7 +405,10 @@ class RichTextEditPlugin {
|
|
|
400
405
|
textConfig: [ {
|
|
401
406
|
text: "a"
|
|
402
407
|
} ]
|
|
403
|
-
})), b = (0, graphic_1.getRichTextBounds)(
|
|
408
|
+
})), b = (0, graphic_1.getRichTextBounds)(Object.assign(Object.assign({}, attr), {
|
|
409
|
+
scaleX: 1,
|
|
410
|
+
scaleY: 1
|
|
411
|
+
}))), "middle" === textBaseline ? dy = -b.height() / 2 : "bottom" === textBaseline && (dy = -b.height()),
|
|
404
412
|
this.editLine && this.editLine.setAttributes({
|
|
405
413
|
dy: dy
|
|
406
414
|
}), this.editBg && this.editBg.setAttributes({
|
|
@@ -591,9 +599,15 @@ class RichTextEditPlugin {
|
|
|
591
599
|
const rt = this.currRt, {textBaseline: textBaseline} = rt.attribute;
|
|
592
600
|
let dy = 0;
|
|
593
601
|
if ("middle" === textBaseline) {
|
|
594
|
-
dy = (0, graphic_1.getRichTextBounds)(rt.attribute)
|
|
602
|
+
dy = (0, graphic_1.getRichTextBounds)(Object.assign(Object.assign({}, rt.attribute), {
|
|
603
|
+
scaleX: 1,
|
|
604
|
+
scaleY: 1
|
|
605
|
+
})).height() / 2;
|
|
595
606
|
} else if ("bottom" === textBaseline) {
|
|
596
|
-
dy = (0, graphic_1.getRichTextBounds)(rt.attribute)
|
|
607
|
+
dy = (0, graphic_1.getRichTextBounds)(Object.assign(Object.assign({}, rt.attribute), {
|
|
608
|
+
scaleX: 1,
|
|
609
|
+
scaleY: 1
|
|
610
|
+
})).height();
|
|
597
611
|
}
|
|
598
612
|
return p1.y += dy, p1;
|
|
599
613
|
}
|