@plait/common 0.51.2 → 0.51.4
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/esm2022/algorithms/a-star.mjs +1 -1
- package/esm2022/algorithms/data-structures/graph.mjs +1 -1
- package/esm2022/core/image-base.component.mjs +6 -6
- package/esm2022/generators/active.generator.mjs +1 -1
- package/esm2022/generators/generator.mjs +3 -3
- package/esm2022/generators/image.generator.mjs +1 -1
- package/esm2022/plugins/with-resize.mjs +1 -1
- package/esm2022/shapes/common.mjs +1 -1
- package/esm2022/transforms/align.mjs +1 -1
- package/esm2022/transforms/property.mjs +1 -1
- package/esm2022/transforms/text.mjs +1 -1
- package/esm2022/utils/default-orthogonal-routing.mjs +87 -0
- package/esm2022/utils/direction.mjs +15 -3
- package/esm2022/utils/elbow-line-route.mjs +1 -1
- package/esm2022/utils/index.mjs +2 -1
- package/esm2022/utils/line-path.mjs +2 -97
- package/esm2022/utils/math.mjs +4 -4
- package/esm2022/utils/resize.mjs +1 -1
- package/esm2022/utils/text.mjs +1 -1
- package/esm2022/utils/vector.mjs +5 -5
- package/fesm2022/plait-common.mjs +168 -165
- package/fesm2022/plait-common.mjs.map +1 -1
- package/package.json +1 -1
- package/utils/default-orthogonal-routing.d.ts +2 -0
- package/utils/direction.d.ts +2 -1
- package/utils/index.d.ts +1 -0
- package/utils/line-path.d.ts +1 -13
- package/utils/vector.d.ts +2 -2
package/esm2022/utils/resize.mjs
CHANGED
|
@@ -105,4 +105,4 @@ export const isEdgeHandle = (board, handle) => {
|
|
|
105
105
|
export const isCornerHandle = (board, handle) => {
|
|
106
106
|
return !isEdgeHandle(board, handle);
|
|
107
107
|
};
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSWpHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDcEQsT0FBTyxHQUFHLEtBQUssRUFBa0IsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtJQUNqRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDeEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0YsSUFBSSwwQkFBMEIsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQUksMEJBQTBCLElBQUksQ0FBQyxFQUFFO1FBQ2pDLDBCQUEwQixHQUFHLDBCQUEwQixHQUFHLENBQUMsQ0FBQztLQUMvRDtJQUNELE9BQU8sWUFBWSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO0FBQzVILENBQUMsQ0FBQztBQUVGLE1BQU0sMkJBQTJCLEdBQUcsQ0FBQyxLQUFhLEVBQUUsRUFBRTtJQUNsRCxR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LEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxHQUFXLEVBQUUsRUFBRTtJQUM3RCxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDLENBQUM7SUFDeEUsV0FBVyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixXQUFXLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQWlCLEVBQUUsTUFBb0IsRUFBRSxFQUFFO0lBQ3BFLE1BQU0sS0FBSyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLElBQUksS0FBSyxJQUFJLENBQUMsRUFBRTtRQUNaLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7U0FBTTtRQUNILE9BQU8sS0FBSyxDQUFDO0tBQ2hCO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxNQUFvQixFQUFFLEVBQUU7SUFDdEUsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgUmVzaXplQ3Vyc29yQ2xhc3MsIHNldERyYWdnaW5nIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUmVzaXplSGFuZGxlIH0gZnJvbSAnLi4vY29uc3RhbnRzL3Jlc2l6ZSc7XG5pbXBvcnQgeyBQbGFpdEVsZW1lbnRPckFycmF5LCBSZXNpemVSZWYgfSBmcm9tICcuLi90eXBlcy9yZXNpemUnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplSGFuZGxlQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIGAke2luZGV4fWAgYXMgUmVzaXplSGFuZGxlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEluZGV4QnlSZXNpemVIYW5kbGUgPSAocmVzaXplSGFuZGxlOiBSZXNpemVIYW5kbGUpID0+IHtcbiAgICByZXR1cm4gTnVtYmVyKHJlc2l6ZUhhbmRsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXggPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBvcmlnaW5JbmRleCA9IGlzRWRnZUhhbmRsZShib2FyZCwgZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCkpID8gaW5kZXggLSA0IDogaW5kZXg7XG4gICAgbGV0IG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID0gb3JpZ2luSW5kZXggKyAyO1xuICAgIGlmIChvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCA+PSA0KSB7XG4gICAgICAgIG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID0gb3JpZ2luU3ltbWV0cmljSGFuZGxlSW5kZXggLSA0O1xuICAgIH1cbiAgICByZXR1cm4gaXNFZGdlSGFuZGxlKGJvYXJkLCBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4KSkgPyBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCArIDQgOiBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleDtcbn07XG5cbmNvbnN0IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleCA9IChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ud3NlO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5uZXN3O1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ucztcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICByZXR1cm4gUmVzaXplQ3Vyc29yQ2xhc3MuZXc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmcyA9IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgZGlhbWV0ZXI6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvcm5lcnMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgY29uc3QgcmVmcyA9IGNvcm5lcnMubWFwKChjb3JuZXIsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJlY3RhbmdsZToge1xuICAgICAgICAgICAgICAgIHg6IGNvcm5lclswXSAtIGRpYW1ldGVyIC8gMixcbiAgICAgICAgICAgICAgICB5OiBjb3JuZXJbMV0gLSBkaWFtZXRlciAvIDIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IGRpYW1ldGVyLFxuICAgICAgICAgICAgICAgIGhlaWdodDogZGlhbWV0ZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBoYW5kbGU6IGdldFJlc2l6ZUhhbmRsZUJ5SW5kZXgoaW5kZXgpIGFzIFJlc2l6ZUhhbmRsZSxcbiAgICAgICAgICAgIGN1cnNvckNsYXNzOiBnZXRSZXNpemVDdXJzb3JDbGFzc0J5SW5kZXgoaW5kZXgpIGFzIFJlc2l6ZUN1cnNvckNsYXNzXG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgcmVjdGFuZ2xlcyA9IGdldFJlc2l6ZVNpZGVSZWN0YW5nbGVzKGNvcm5lcnMsIGRpYW1ldGVyIC8gMik7XG4gICAgcmVmcy5wdXNoKFxuICAgICAgICAuLi5yZWN0YW5nbGVzLm1hcCgocmVjdGFuZ2xlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgaGFuZGxlOiBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4ICsgNCkgYXMgUmVzaXplSGFuZGxlLFxuICAgICAgICAgICAgICAgIGN1cnNvckNsYXNzOiBnZXRSZXNpemVDdXJzb3JDbGFzc0J5SW5kZXgoaW5kZXggKyA0KSBhcyBSZXNpemVDdXJzb3JDbGFzc1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiByZWZzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZUhhbmRsZVBvaW50QnlJbmRleCA9IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGlmIChpbmRleCA8PSAzKSB7XG4gICAgICAgIGNvbnN0IGNvcm5lcnMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBjb3JuZXJzW2luZGV4XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlZGdlQ2VudGVyUG9pbnRzID0gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGVkZ2VDZW50ZXJQb2ludHNbaW5kZXggLSA0XTtcbiAgICB9XG59O1xuXG5jb25zdCBnZXRSZXNpemVTaWRlUmVjdGFuZ2xlcyA9IChjb3JuZXJQb2ludHM6IFBvaW50W10sIG9mZnNldDogbnVtYmVyKTogUmVjdGFuZ2xlQ2xpZW50W10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29ybmVyUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW2Nvcm5lclBvaW50c1tpXSwgY29ybmVyUG9pbnRzWyhpICsgMSkgJSA0XV0pO1xuICAgICAgICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoMikuZmlsbCgwKTtcbiAgICAgICAgYXJyWyhpICsgMSkgJSAyXSA9IG9mZnNldCAvIDI7XG4gICAgICAgIHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5leHBhbmQocmVjdGFuZ2xlLCBhcnJbMF0sIGFyclsxXSk7XG4gICAgICAgIHJlc3VsdC5wdXNoKHJlY3RhbmdsZSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgSVNfUkVTSVpJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBSZXNpemVSZWY8YW55LCBhbnk+PigpO1xuXG5leHBvcnQgY29uc3QgaXNSZXNpemluZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX1JFU0laSU5HLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNSZXNpemluZ0J5Q29uZGl0aW9uID0gPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnRPckFycmF5LCBLPihib2FyZDogUGxhaXRCb2FyZCwgbWF0Y2g6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPikgPT4gYm9vbGVhbikgPT4ge1xuICAgIHJldHVybiBpc1Jlc2l6aW5nKGJvYXJkKSAmJiBtYXRjaChJU19SRVNJWklORy5nZXQoYm9hcmQpISk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkUmVzaXppbmcgPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudE9yQXJyYXksIEs+KGJvYXJkOiBQbGFpdEJvYXJkLCByZXNpemVSZWY6IFJlc2l6ZVJlZjxULCBLPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5jbGFzc0xpc3QuYWRkKGAke2tleX0tcmVzaXppbmdgKTtcbiAgICBJU19SRVNJWklORy5zZXQoYm9hcmQsIHJlc2l6ZVJlZik7XG4gICAgc2V0RHJhZ2dpbmcoYm9hcmQsIHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZVJlc2l6aW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBrZXk6IHN0cmluZykgPT4ge1xuICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5yZW1vdmUoYCR7a2V5fS1yZXNpemluZ2ApO1xuICAgIElTX1JFU0laSU5HLmRlbGV0ZShib2FyZCk7XG4gICAgc2V0RHJhZ2dpbmcoYm9hcmQsIGZhbHNlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0VkZ2VIYW5kbGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGhhbmRsZTogUmVzaXplSGFuZGxlKSA9PiB7XG4gICAgY29uc3QgaW5kZXggPSBnZXRJbmRleEJ5UmVzaXplSGFuZGxlKGhhbmRsZSk7XG4gICAgaWYgKGluZGV4ID49IDQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0Nvcm5lckhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgaGFuZGxlOiBSZXNpemVIYW5kbGUpID0+IHtcbiAgICByZXR1cm4gIWlzRWRnZUhhbmRsZShib2FyZCwgaGFuZGxlKTtcbn07XG4iXX0=
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy9yZXNpemUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBUyxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSWpHLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsS0FBYSxFQUFFLEVBQUU7SUFDcEQsT0FBTyxHQUFHLEtBQUssRUFBa0IsQ0FBQztBQUN0QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFlBQTBCLEVBQUUsRUFBRTtJQUNqRSxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNoQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDeEUsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDM0YsSUFBSSwwQkFBMEIsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQUksMEJBQTBCLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDbEMsMEJBQTBCLEdBQUcsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFDRCxPQUFPLFlBQVksQ0FBQyxLQUFLLEVBQUUsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztBQUM1SCxDQUFDLENBQUM7QUFFRixNQUFNLDJCQUEyQixHQUFHLENBQUMsS0FBYSxFQUFFLEVB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Q0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDbEMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEdBQVcsRUFBRSxFQUFFO0lBQzdELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUMsQ0FBQztJQUN4RSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBaUIsRUFBRSxNQUFvQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxLQUFLLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDYixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFpQixFQUFFLE1BQW9CLEVBQUUsRUFBRTtJQUN0RSxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBSZXNpemVDdXJzb3JDbGFzcywgc2V0RHJhZ2dpbmcgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBSZXNpemVIYW5kbGUgfSBmcm9tICcuLi9jb25zdGFudHMvcmVzaXplJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudE9yQXJyYXksIFJlc2l6ZVJlZiB9IGZyb20gJy4uL3R5cGVzL3Jlc2l6ZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVIYW5kbGVCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICByZXR1cm4gYCR7aW5kZXh9YCBhcyBSZXNpemVIYW5kbGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZSA9IChyZXNpemVIYW5kbGU6IFJlc2l6ZUhhbmRsZSkgPT4ge1xuICAgIHJldHVybiBOdW1iZXIocmVzaXplSGFuZGxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTeW1tZXRyaWNIYW5kbGVJbmRleCA9IChib2FyZDogUGxhaXRCb2FyZCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG9yaWdpbkluZGV4ID0gaXNFZGdlSGFuZGxlKGJvYXJkLCBnZXRSZXNpemVIYW5kbGVCeUluZGV4KGluZGV4KSkgPyBpbmRleCAtIDQgOiBpbmRleDtcbiAgICBsZXQgb3JpZ2luU3ltbWV0cmljSGFuZGxlSW5kZXggPSBvcmlnaW5JbmRleCArIDI7XG4gICAgaWYgKG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ID49IDQpIHtcbiAgICAgICAgb3JpZ2luU3ltbWV0cmljSGFuZGxlSW5kZXggPSBvcmlnaW5TeW1tZXRyaWNIYW5kbGVJbmRleCAtIDQ7XG4gICAgfVxuICAgIHJldHVybiBpc0VkZ2VIYW5kbGUoYm9hcmQsIGdldFJlc2l6ZUhhbmRsZUJ5SW5kZXgoaW5kZXgpKSA/IG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4ICsgNCA6IG9yaWdpblN5bW1ldHJpY0hhbmRsZUluZGV4O1xufTtcblxuY29uc3QgZ2V0UmVzaXplQ3Vyc29yQ2xhc3NCeUluZGV4ID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUN1cnNvckNsYXNzLm53c2U7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUN1cnNvckNsYXNzLm5lc3c7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgcmV0dXJuIFJlc2l6ZUN1cnNvckNsYXNzLm5zO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHJldHVybiBSZXNpemVDdXJzb3JDbGFzcy5ldztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWZzID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBkaWFtZXRlcjogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICBjb25zdCByZWZzID0gY29ybmVycy5tYXAoKGNvcm5lciwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVjdGFuZ2xlOiB7XG4gICAgICAgICAgICAgICAgeDogY29ybmVyWzBdIC0gZGlhbWV0ZXIgLyAyLFxuICAgICAgICAgICAgICAgIHk6IGNvcm5lclsxXSAtIGRpYW1ldGVyIC8gMixcbiAgICAgICAgICAgICAgICB3aWR0aDogZGlhbWV0ZXIsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBkaWFtZXRlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhhbmRsZTogZ2V0UmVzaXplSGFuZGxlQnlJbmRleChpbmRleCkgYXMgUmVzaXplSGFuZGxlLFxuICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleChpbmRleCkgYXMgUmVzaXplQ3Vyc29yQ2xhc3NcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICBjb25zdCByZWN0YW5nbGVzID0gZ2V0UmVzaXplU2lkZVJlY3RhbmdsZXMoY29ybmVycywgZGlhbWV0ZXIgLyAyKTtcbiAgICByZWZzLnB1c2goXG4gICAgICAgIC4uLnJlY3RhbmdsZXMubWFwKChyZWN0YW5nbGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICBoYW5kbGU6IGdldFJlc2l6ZUhhbmRsZUJ5SW5kZXgoaW5kZXggKyA0KSBhcyBSZXNpemVIYW5kbGUsXG4gICAgICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGdldFJlc2l6ZUN1cnNvckNsYXNzQnlJbmRleChpbmRleCArIDQpIGFzIFJlc2l6ZUN1cnNvckNsYXNzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHJlZnM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4ID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKGluZGV4IDw9IDMpIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGNvcm5lcnNbaW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVkZ2VDZW50ZXJQb2ludHMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICByZXR1cm4gZWRnZUNlbnRlclBvaW50c1tpbmRleCAtIDRdO1xuICAgIH1cbn07XG5cbmNvbnN0IGdldFJlc2l6ZVNpZGVSZWN0YW5nbGVzID0gKGNvcm5lclBvaW50czogUG9pbnRbXSwgb2Zmc2V0OiBudW1iZXIpOiBSZWN0YW5nbGVDbGllbnRbXSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3JuZXJQb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbY29ybmVyUG9pbnRzW2ldLCBjb3JuZXJQb2ludHNbKGkgKyAxKSAlIDRdXSk7XG4gICAgICAgIGNvbnN0IGFyciA9IG5ldyBBcnJheSgyKS5maWxsKDApO1xuICAgICAgICBhcnJbKGkgKyAxKSAlIDJdID0gb2Zmc2V0IC8gMjtcbiAgICAgICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmV4cGFuZChyZWN0YW5nbGUsIGFyclswXSwgYXJyWzFdKTtcbiAgICAgICAgcmVzdWx0LnB1c2gocmVjdGFuZ2xlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBJU19SRVNJWklORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIFJlc2l6ZVJlZjxhbnksIGFueT4+KCk7XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6aW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfUkVTSVpJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6aW5nQnlDb25kaXRpb24gPSA8VCBleHRlbmRzIFBsYWl0RWxlbWVudE9yQXJyYXksIEs+KGJvYXJkOiBQbGFpdEJvYXJkLCBtYXRjaDogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+KSA9PiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIGlzUmVzaXppbmcoYm9hcmQpICYmIG1hdGNoKElTX1JFU0laSU5HLmdldChib2FyZCkhKTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRSZXNpemluZyA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50T3JBcnJheSwgSz4oYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlc2l6ZVJlZjogUmVzaXplUmVmPFQsIEs+LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmNsYXNzTGlzdC5hZGQoYCR7a2V5fS1yZXNpemluZ2ApO1xuICAgIElTX1JFU0laSU5HLnNldChib2FyZCwgcmVzaXplUmVmKTtcbiAgICBzZXREcmFnZ2luZyhib2FyZCwgdHJ1ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlUmVzaXppbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuY2xhc3NMaXN0LnJlbW92ZShgJHtrZXl9LXJlc2l6aW5nYCk7XG4gICAgSVNfUkVTSVpJTkcuZGVsZXRlKGJvYXJkKTtcbiAgICBzZXREcmFnZ2luZyhib2FyZCwgZmFsc2UpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRWRnZUhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgaGFuZGxlOiBSZXNpemVIYW5kbGUpID0+IHtcbiAgICBjb25zdCBpbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUoaGFuZGxlKTtcbiAgICBpZiAoaW5kZXggPj0gNCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzQ29ybmVySGFuZGxlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoYW5kbGU6IFJlc2l6ZUhhbmRsZSkgPT4ge1xuICAgIHJldHVybiAhaXNFZGdlSGFuZGxlKGJvYXJkLCBoYW5kbGUpO1xufTtcbiJdfQ==
|
package/esm2022/utils/text.mjs
CHANGED
|
@@ -60,4 +60,4 @@ export const getElementsText = (elements) => {
|
|
|
60
60
|
.filter(item => item)
|
|
61
61
|
.join(' ');
|
|
62
62
|
};
|
|
63
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQXdCLENBQUM7SUFDNUUsT0FBTyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDeEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3BELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN4QyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQzNELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQTZCLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvSCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQTZCLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEYsT0FBTyxZQUFZLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBd0IsRUFBRSxFQUFFO0lBQ3hELE9BQU8sUUFBUTtTQUNWLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNSLElBQUksQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxPQUFPO3FCQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDVixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RixDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBDb21tb25QbHVnaW5FbGVtZW50IH0gZnJvbSAnLi4vY29yZS9wbHVnaW4tZWxlbWVudCc7XG5pbXBvcnQgeyBDdXN0b21UZXh0LCBQbGFpdE1hcmtFZGl0b3IgfSBmcm9tICdAcGxhaXQvdGV4dCc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnc2xhdGUnO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dE1hbmFnZXMgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChlbGVtZW50KSBhcyBDb21tb25QbHVnaW5FbGVtZW50O1xuICAgIHJldHVybiBjb21wb25lbnQuZ2V0VGV4dE1hbmFnZXMoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaXJzdFRleHRNYW5hZ2UgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgdGV4dE1hbmFnZSA9IGdldFRleHRNYW5hZ2VzKGVsZW1lbnQpWzBdO1xuICAgIGlmICghdGV4dE1hbmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbiBub3QgZmluZCB0ZXh0TWFuYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0TWFuYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRFZGl0b3JzID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBnZXRUZXh0TWFuYWdlcyhlbGVtZW50KS5tYXAobWFuYWdlID0+IHtcbiAgICAgICAgcmV0dXJuIG1hbmFnZS5jb21wb25lbnRSZWYuaW5zdGFuY2UuZWRpdG9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpcnN0VGV4dEVkaXRvciA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB0ZXh0RWRpdG9yID0gZ2V0VGV4dEVkaXRvcnMoZWxlbWVudClbMF07XG4gICAgaWYgKCF0ZXh0RWRpdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCBmaW5kIHRleHRFZGl0b3InKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRFZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dE1hcmtzQnlFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9ycyhlbGVtZW50KTtcbiAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JzWzBdO1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKGVkaXRvci5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgdGV4dE1hbmFnZSA9IGdldFRleHRNYW5hZ2VzKGVsZW1lbnQpWzBdO1xuICAgICAgICBjb25zdCBjdXJyZW50TWFya3M6IE9taXQ8Q3VzdG9tVGV4dCwgJ3RleHQnPiA9IFBsYWl0TWFya0VkaXRvci5nZXRNYXJrc0J5RWxlbWVudCh0ZXh0TWFuYWdlLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jaGlsZHJlblswXSk7XG4gICAgICAgIHJldHVybiBjdXJyZW50TWFya3M7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRNYXJrczogT21pdDxDdXN0b21UZXh0LCAndGV4dCc+ID0gUGxhaXRNYXJrRWRpdG9yLmdldE1hcmtzKGVkaXRvcik7XG4gICAgcmV0dXJuIGN1cnJlbnRNYXJrcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c1RleHQgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9ycyhpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoZWRpdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZWRpdG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0c0VudHJ5ID0gTm9kZS50ZXh0cyhlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRleHRzRW50cnkpLnJlZHVjZSgodG90YWwsIHRleHQpID0+ICh0b3RhbCArPSB0ZXh0WzBdLnRleHQpLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtKVxuICAgICAgICAuam9pbignICcpO1xufTtcbiJdfQ==
|
package/esm2022/utils/vector.mjs
CHANGED
|
@@ -11,16 +11,16 @@ export function getUnitVectorByPointAndPoint(point1, point2) {
|
|
|
11
11
|
const unitY = deltaY / distance;
|
|
12
12
|
return [unitX, unitY];
|
|
13
13
|
}
|
|
14
|
-
export function
|
|
14
|
+
export function getPointByVectorComponent(point, vector, component) {
|
|
15
15
|
const distance = Math.hypot(vector[0], vector[1]);
|
|
16
16
|
return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];
|
|
17
17
|
}
|
|
18
|
-
export function
|
|
18
|
+
export function getPointByVectorDirectionComponent(point, unitVector, directionComponent, isHorizontal) {
|
|
19
19
|
if (isHorizontal) {
|
|
20
|
-
return [point[0] +
|
|
20
|
+
return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]];
|
|
21
21
|
}
|
|
22
22
|
else {
|
|
23
|
-
return [point[0] + (
|
|
23
|
+
return [point[0] + (directionComponent / unitVector[1]) * unitVector[0], point[1] + directionComponent];
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
export function rotateVectorAnti90(vector) {
|
|
@@ -30,4 +30,4 @@ export function rotateVectorAnti90(vector) {
|
|
|
30
30
|
const rotatedY = -x;
|
|
31
31
|
return [rotatedX, rotatedY];
|
|
32
32
|
}
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy92ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE1BQWEsRUFBRSxNQUFhO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzlELG9EQUFvRDtJQUNwRCxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELHVDQUF1QztJQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFFaEMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEtBQVksRUFBRSxNQUFjLEVBQUUsU0FBaUI7SUFDckYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUFFRCxNQUFNLFVBQVUsa0NBQWtDLENBQzlDLEtBQVksRUFDWixVQUFrQixFQUNsQixrQkFBMEIsRUFDMUIsWUFBcUI7SUFFckIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFVLENBQUM7SUFDckgsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBVSxDQUFDO0lBQ3JILENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDN0MsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIFZlY3RvciB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQocG9pbnQxOiBQb2ludCwgcG9pbnQyOiBQb2ludCk6IFBvaW50IHtcbiAgICBjb25zdCBkZWx0YVggPSBwb2ludDJbMF0gLSBwb2ludDFbMF07XG4gICAgY29uc3QgZGVsdGFZID0gcG9pbnQyWzFdIC0gcG9pbnQxWzFdO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSk7XG4gICAgLy8gQXZvaWQgZGl2aXNpb24gYnkgemVybyBpZiB0aGUgcG9pbnRzIGFyZSB0aGUgc2FtZVxuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50cyBtdXN0IG5vdCBiZSB0aGUgc2FtZSBmb3IgYSB1bml0IHZlY3RvciBjYWxjdWxhdGlvbi4nKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSB1bml0IHZlY3RvciBjb21wb25lbnRzXG4gICAgY29uc3QgdW5pdFggPSBkZWx0YVggLyBkaXN0YW5jZTtcbiAgICBjb25zdCB1bml0WSA9IGRlbHRhWSAvIGRpc3RhbmNlO1xuXG4gICAgcmV0dXJuIFt1bml0WCwgdW5pdFldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudChwb2ludDogUG9pbnQsIHZlY3RvcjogVmVjdG9yLCBjb21wb25lbnQ6IG51bWJlcik6IFBvaW50IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguaHlwb3QodmVjdG9yWzBdLCB2ZWN0b3JbMV0pO1xuICAgIHJldHVybiBbcG9pbnRbMF0gKyAodmVjdG9yWzBdIC8gZGlzdGFuY2UpICogY29tcG9uZW50LCBwb2ludFsxXSArICh2ZWN0b3JbMV0gLyBkaXN0YW5jZSkgKiBjb21wb25lbnRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVZlY3RvckRpcmVjdGlvbkNvbXBvbmVudChcbiAgICBwb2ludDogUG9pbnQsXG4gICAgdW5pdFZlY3RvcjogVmVjdG9yLFxuICAgIGRpcmVjdGlvbkNvbXBvbmVudDogbnVtYmVyLFxuICAgIGlzSG9yaXpvbnRhbDogYm9vbGVhblxuKSB7XG4gICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICByZXR1cm4gW3BvaW50WzBdICsgZGlyZWN0aW9uQ29tcG9uZW50LCBwb2ludFsxXSArIChkaXJlY3Rpb25Db21wb25lbnQgLyB1bml0VmVjdG9yWzBdKSAqIHVuaXRWZWN0b3JbMV1dIGFzIFBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbcG9pbnRbMF0gKyAoZGlyZWN0aW9uQ29tcG9uZW50IC8gdW5pdFZlY3RvclsxXSkgKiB1bml0VmVjdG9yWzBdLCBwb2ludFsxXSArIGRpcmVjdGlvbkNvbXBvbmVudF0gYXMgUG9pbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yQW50aTkwKHZlY3RvcjogVmVjdG9yKTogVmVjdG9yIHtcbiAgICBjb25zdCB4ID0gdmVjdG9yWzBdO1xuICAgIGNvbnN0IHkgPSB2ZWN0b3JbMV07XG4gICAgY29uc3Qgcm90YXRlZFggPSB5O1xuICAgIGNvbnN0IHJvdGF0ZWRZID0gLXg7XG4gICAgcmV0dXJuIFtyb3RhdGVkWCwgcm90YXRlZFldO1xufVxuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { setAngleForG, RectangleClient, drawCircle, PlaitBoard, createG, drawRectangle, createForeignObject, updateForeignObject, ResizeCursorClass, setDragging, distanceBetweenPointAndPoint, Point, Direction, hotkeys, PlaitElement, PlaitContextService, getSelectedElements, Transforms, getRectangleByElements, MERGING, PlaitPointerType, isMainPointer, toViewBoxPoint, toHostPoint, preventTouchMove, PRESS_AND_MOVE_BUFFER, isDragging, throttleRAF, handleTouchTarget, PlaitPluginElementComponent, isSelectionMoving, ACTIVE_STROKE_WIDTH } from '@plait/core';
|
|
2
2
|
import { isKeyHotkey } from 'is-hotkey';
|
|
3
3
|
import { PlaitMarkEditor, MarkTypes, AlignEditor } from '@plait/text';
|
|
4
4
|
import { Node, Transforms as Transforms$1, Editor } from 'slate';
|
|
@@ -55,7 +55,7 @@ class Generator {
|
|
|
55
55
|
this.g = g;
|
|
56
56
|
const rect = this.board.getRectangle(element);
|
|
57
57
|
if (rect && element.angle) {
|
|
58
|
-
|
|
58
|
+
setAngleForG(g, RectangleClient.getCenterPoint(rect), element.angle);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
else {
|
|
@@ -303,12 +303,157 @@ const isCornerHandle = (board, handle) => {
|
|
|
303
303
|
return !isEdgeHandle(board, handle);
|
|
304
304
|
};
|
|
305
305
|
|
|
306
|
+
function getUnitVectorByPointAndPoint(point1, point2) {
|
|
307
|
+
const deltaX = point2[0] - point1[0];
|
|
308
|
+
const deltaY = point2[1] - point1[1];
|
|
309
|
+
const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
|
|
310
|
+
// Avoid division by zero if the points are the same
|
|
311
|
+
if (distance === 0) {
|
|
312
|
+
throw new Error('Points must not be the same for a unit vector calculation.');
|
|
313
|
+
}
|
|
314
|
+
// Calculate the unit vector components
|
|
315
|
+
const unitX = deltaX / distance;
|
|
316
|
+
const unitY = deltaY / distance;
|
|
317
|
+
return [unitX, unitY];
|
|
318
|
+
}
|
|
319
|
+
function getPointByVectorComponent(point, vector, component) {
|
|
320
|
+
const distance = Math.hypot(vector[0], vector[1]);
|
|
321
|
+
return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];
|
|
322
|
+
}
|
|
323
|
+
function getPointByVectorDirectionComponent(point, unitVector, directionComponent, isHorizontal) {
|
|
324
|
+
if (isHorizontal) {
|
|
325
|
+
return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]];
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
return [point[0] + (directionComponent / unitVector[1]) * unitVector[0], point[1] + directionComponent];
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function rotateVectorAnti90(vector) {
|
|
332
|
+
const x = vector[0];
|
|
333
|
+
const y = vector[1];
|
|
334
|
+
const rotatedX = y;
|
|
335
|
+
const rotatedY = -x;
|
|
336
|
+
return [rotatedX, rotatedY];
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
function isPointOnSegment(point, startPoint, endPoint) {
|
|
340
|
+
const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);
|
|
341
|
+
const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);
|
|
342
|
+
const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
343
|
+
return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;
|
|
344
|
+
}
|
|
345
|
+
const getCrossingPointsBetweenPointAndSegment = (point, startPoint, endPoint) => {
|
|
346
|
+
const result = [];
|
|
347
|
+
const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];
|
|
348
|
+
const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];
|
|
349
|
+
const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);
|
|
350
|
+
if (point[0] >= xRange[0] && point[0] <= xRange[1]) {
|
|
351
|
+
const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[0] - startPoint[0], true);
|
|
352
|
+
result.push(crossingPoint);
|
|
353
|
+
}
|
|
354
|
+
else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {
|
|
355
|
+
const crossingPoint = getPointByVectorDirectionComponent(startPoint, unitVector, point[1] - startPoint[1], false);
|
|
356
|
+
result.push(crossingPoint);
|
|
357
|
+
}
|
|
358
|
+
return result;
|
|
359
|
+
};
|
|
360
|
+
|
|
361
|
+
function getPointOnPolyline(points, ratio) {
|
|
362
|
+
const totalLength = calculatePolylineLength(points);
|
|
363
|
+
const targetDistance = totalLength * ratio;
|
|
364
|
+
let accumulatedDistance = 0;
|
|
365
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
366
|
+
const [x1, y1] = points[i];
|
|
367
|
+
const [x2, y2] = points[i + 1];
|
|
368
|
+
const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);
|
|
369
|
+
if (accumulatedDistance + segmentLength >= targetDistance) {
|
|
370
|
+
const remainingDistance = targetDistance - accumulatedDistance;
|
|
371
|
+
const ratioInSegment = remainingDistance / segmentLength;
|
|
372
|
+
const targetX = x1 + (x2 - x1) * ratioInSegment;
|
|
373
|
+
const targetY = y1 + (y2 - y1) * ratioInSegment;
|
|
374
|
+
return [targetX, targetY];
|
|
375
|
+
}
|
|
376
|
+
accumulatedDistance += segmentLength;
|
|
377
|
+
}
|
|
378
|
+
return points[points.length - 1];
|
|
379
|
+
}
|
|
380
|
+
function calculatePolylineLength(points) {
|
|
381
|
+
let length = 0;
|
|
382
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
383
|
+
const [x1, y1] = points[i];
|
|
384
|
+
const [x2, y2] = points[i + 1];
|
|
385
|
+
length += distanceBetweenPointAndPoint(x1, y1, x2, y2);
|
|
386
|
+
}
|
|
387
|
+
return length;
|
|
388
|
+
}
|
|
389
|
+
function getRatioByPoint(points, point) {
|
|
390
|
+
const totalLength = calculatePolylineLength(points);
|
|
391
|
+
let distance = 0;
|
|
392
|
+
for (let i = 0; i < points.length - 1; i++) {
|
|
393
|
+
const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);
|
|
394
|
+
if (isOverlap) {
|
|
395
|
+
distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);
|
|
396
|
+
return distance / totalLength;
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
throw new Error('Cannot get ratio by point');
|
|
403
|
+
}
|
|
404
|
+
const removeDuplicatePoints = (points) => {
|
|
405
|
+
const newArray = [];
|
|
406
|
+
points.forEach(point => {
|
|
407
|
+
const index = newArray.findIndex(otherPoint => {
|
|
408
|
+
return Point.isEquals(point, otherPoint);
|
|
409
|
+
});
|
|
410
|
+
if (index === -1)
|
|
411
|
+
newArray.push(point);
|
|
412
|
+
});
|
|
413
|
+
return newArray;
|
|
414
|
+
};
|
|
415
|
+
function simplifyOrthogonalPoints(points) {
|
|
416
|
+
if (points.length <= 2)
|
|
417
|
+
return points;
|
|
418
|
+
let simplifiedPoints = [points[0]];
|
|
419
|
+
for (let i = 1; i < points.length - 1; i++) {
|
|
420
|
+
const previous = points[i - 1];
|
|
421
|
+
const current = points[i];
|
|
422
|
+
const next = points[i + 1];
|
|
423
|
+
const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));
|
|
424
|
+
if (isTurn) {
|
|
425
|
+
simplifiedPoints.push(current);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
simplifiedPoints.push(points[points.length - 1]);
|
|
429
|
+
return simplifiedPoints;
|
|
430
|
+
}
|
|
431
|
+
const getExtendPoint = (source, target, extendDistance) => {
|
|
432
|
+
const distance = distanceBetweenPointAndPoint(...source, ...target);
|
|
433
|
+
const isEqual = Point.isEquals(source, target);
|
|
434
|
+
const sin = isEqual ? 1 : (target[1] - source[1]) / distance;
|
|
435
|
+
const cos = isEqual ? 1 : (target[0] - source[0]) / distance;
|
|
436
|
+
return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];
|
|
437
|
+
};
|
|
438
|
+
|
|
306
439
|
const handleDirectionFactors = {
|
|
307
440
|
[Direction.left]: { x: -1, y: 0 },
|
|
308
441
|
[Direction.right]: { x: 1, y: 0 },
|
|
309
442
|
[Direction.top]: { x: 0, y: -1 },
|
|
310
443
|
[Direction.bottom]: { x: 0, y: 1 }
|
|
311
444
|
};
|
|
445
|
+
function getOppositeDirection(direction) {
|
|
446
|
+
switch (direction) {
|
|
447
|
+
case Direction.left:
|
|
448
|
+
return Direction.right;
|
|
449
|
+
case Direction.right:
|
|
450
|
+
return Direction.left;
|
|
451
|
+
case Direction.top:
|
|
452
|
+
return Direction.bottom;
|
|
453
|
+
case Direction.bottom:
|
|
454
|
+
return Direction.top;
|
|
455
|
+
}
|
|
456
|
+
}
|
|
312
457
|
function getDirectionByPointOfRectangle(point) {
|
|
313
458
|
if (point[0] === 0) {
|
|
314
459
|
return Direction.left;
|
|
@@ -378,83 +523,18 @@ function getDirectionBetweenPointAndPoint(source, target) {
|
|
|
378
523
|
function getDirectionFactor(direction) {
|
|
379
524
|
return handleDirectionFactors[direction];
|
|
380
525
|
}
|
|
381
|
-
function
|
|
382
|
-
const directionFactor =
|
|
526
|
+
function getDirectionFactorByDirectionComponent(directionComponent) {
|
|
527
|
+
const directionFactor = directionComponent === 0 ? directionComponent : directionComponent / Math.abs(directionComponent);
|
|
383
528
|
return directionFactor;
|
|
384
529
|
}
|
|
385
530
|
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
const deltaY = point2[1] - point1[1];
|
|
389
|
-
const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
|
|
390
|
-
// Avoid division by zero if the points are the same
|
|
391
|
-
if (distance === 0) {
|
|
392
|
-
throw new Error('Points must not be the same for a unit vector calculation.');
|
|
393
|
-
}
|
|
394
|
-
// Calculate the unit vector components
|
|
395
|
-
const unitX = deltaX / distance;
|
|
396
|
-
const unitY = deltaY / distance;
|
|
397
|
-
return [unitX, unitY];
|
|
398
|
-
}
|
|
399
|
-
function getPointByVector(point, vector, component) {
|
|
400
|
-
const distance = Math.hypot(vector[0], vector[1]);
|
|
401
|
-
return [point[0] + (vector[0] / distance) * component, point[1] + (vector[1] / distance) * component];
|
|
402
|
-
}
|
|
403
|
-
function getPointByUnitVectorAndVectorComponent(point, unitVector, vectorComponent, isHorizontal) {
|
|
404
|
-
if (isHorizontal) {
|
|
405
|
-
return [point[0] + vectorComponent, point[1] + (vectorComponent / unitVector[0]) * unitVector[1]];
|
|
406
|
-
}
|
|
407
|
-
else {
|
|
408
|
-
return [point[0] + (vectorComponent / unitVector[1]) * unitVector[0], point[1] + vectorComponent];
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
function rotateVectorAnti90(vector) {
|
|
412
|
-
const x = vector[0];
|
|
413
|
-
const y = vector[1];
|
|
414
|
-
const rotatedX = y;
|
|
415
|
-
const rotatedY = -x;
|
|
416
|
-
return [rotatedX, rotatedY];
|
|
417
|
-
}
|
|
418
|
-
|
|
419
|
-
function isPointOnSegment(point, startPoint, endPoint) {
|
|
420
|
-
const distanceToStart = distanceBetweenPointAndPoint(point[0], point[1], startPoint[0], startPoint[1]);
|
|
421
|
-
const distanceToEnd = distanceBetweenPointAndPoint(point[0], point[1], endPoint[0], endPoint[1]);
|
|
422
|
-
const segmentLength = distanceBetweenPointAndPoint(startPoint[0], startPoint[1], endPoint[0], endPoint[1]);
|
|
423
|
-
return Math.abs(distanceToStart + distanceToEnd - segmentLength) < 0.1;
|
|
424
|
-
}
|
|
425
|
-
const getCrossingPointsBetweenPointAndSegment = (point, startPoint, endPoint) => {
|
|
426
|
-
const result = [];
|
|
427
|
-
const xRange = [Math.min(startPoint[0], endPoint[0]), Math.max(startPoint[0], endPoint[0])];
|
|
428
|
-
const yRange = [Math.min(startPoint[1], endPoint[1]), Math.max(startPoint[1], endPoint[1])];
|
|
429
|
-
const unitVector = getUnitVectorByPointAndPoint(startPoint, endPoint);
|
|
430
|
-
if (point[0] >= xRange[0] && point[0] <= xRange[1]) {
|
|
431
|
-
const crossingPoint = getPointByUnitVectorAndVectorComponent(startPoint, unitVector, point[0] - startPoint[0], true);
|
|
432
|
-
result.push(crossingPoint);
|
|
433
|
-
}
|
|
434
|
-
else if (point[1] >= yRange[0] && point[1] <= yRange[1]) {
|
|
435
|
-
const crossingPoint = getPointByUnitVectorAndVectorComponent(startPoint, unitVector, point[1] - startPoint[1], false);
|
|
436
|
-
result.push(crossingPoint);
|
|
437
|
-
}
|
|
438
|
-
return result;
|
|
439
|
-
};
|
|
440
|
-
|
|
441
|
-
function getOppositeDirection(direction) {
|
|
442
|
-
switch (direction) {
|
|
443
|
-
case Direction.left:
|
|
444
|
-
return Direction.right;
|
|
445
|
-
case Direction.right:
|
|
446
|
-
return Direction.left;
|
|
447
|
-
case Direction.top:
|
|
448
|
-
return Direction.bottom;
|
|
449
|
-
case Direction.bottom:
|
|
450
|
-
return Direction.top;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
531
|
+
// Credits to xyflow
|
|
532
|
+
// https://github.com/xyflow/xyflow/blob/main/packages/system/src/utils/edges/smoothstep-edge.ts
|
|
453
533
|
const getPoints = (source, sourcePosition, target, targetPosition, offset) => {
|
|
454
|
-
const
|
|
455
|
-
const
|
|
456
|
-
const sourceGapped = [source[0] +
|
|
457
|
-
const targetGapped = [target[0] +
|
|
534
|
+
const sourceDirectionFactors = getDirectionFactor(sourcePosition);
|
|
535
|
+
const targetDFs = getDirectionFactor(targetPosition);
|
|
536
|
+
const sourceGapped = [source[0] + sourceDirectionFactors.x * offset, source[1] + sourceDirectionFactors.y * offset];
|
|
537
|
+
const targetGapped = [target[0] + targetDFs.x * offset, target[1] + targetDFs.y * offset];
|
|
458
538
|
const dir = getDirection(sourceGapped, sourcePosition, targetGapped);
|
|
459
539
|
const dirAccessor = dir.x !== 0 ? 'x' : 'y';
|
|
460
540
|
const currDir = dir[dirAccessor];
|
|
@@ -467,7 +547,7 @@ const getPoints = (source, sourcePosition, target, targetPosition, offset) => {
|
|
|
467
547
|
targetY: target[1]
|
|
468
548
|
});
|
|
469
549
|
// opposite handle positions, default case
|
|
470
|
-
if (
|
|
550
|
+
if (sourceDirectionFactors[dirAccessor] * targetDFs[dirAccessor] === -1) {
|
|
471
551
|
centerX = defaultCenterX;
|
|
472
552
|
centerY = defaultCenterY;
|
|
473
553
|
// --->
|
|
@@ -484,7 +564,7 @@ const getPoints = (source, sourcePosition, target, targetPosition, offset) => {
|
|
|
484
564
|
[sourceGapped[0], centerY],
|
|
485
565
|
[targetGapped[0], centerY]
|
|
486
566
|
];
|
|
487
|
-
if (
|
|
567
|
+
if (sourceDirectionFactors[dirAccessor] === currDir) {
|
|
488
568
|
points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;
|
|
489
569
|
}
|
|
490
570
|
else {
|
|
@@ -497,21 +577,21 @@ const getPoints = (source, sourcePosition, target, targetPosition, offset) => {
|
|
|
497
577
|
const targetSource = [[targetGapped[0], sourceGapped[1]]];
|
|
498
578
|
// this handles edges with same handle positions
|
|
499
579
|
if (dirAccessor === 'x') {
|
|
500
|
-
points =
|
|
580
|
+
points = sourceDirectionFactors.x === currDir ? targetSource : sourceTarget;
|
|
501
581
|
}
|
|
502
582
|
else {
|
|
503
|
-
points =
|
|
583
|
+
points = sourceDirectionFactors.y === currDir ? sourceTarget : targetSource;
|
|
504
584
|
}
|
|
505
585
|
// these are conditions for handling mixed handle positions like right -> bottom for example
|
|
506
586
|
let flipSourceTarget;
|
|
507
587
|
if (sourcePosition !== targetPosition) {
|
|
508
588
|
const dirAccessorOpposite = dirAccessor === 'x' ? 1 : 0;
|
|
509
|
-
const isSameDir =
|
|
589
|
+
const isSameDir = sourceDirectionFactors[dirAccessor] === targetDFs[dirAccessor === 'x' ? 'y' : 'x'];
|
|
510
590
|
const sourceGtTarget = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];
|
|
511
591
|
const sourceLtTarget = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];
|
|
512
592
|
flipSourceTarget =
|
|
513
|
-
(
|
|
514
|
-
(
|
|
593
|
+
(sourceDirectionFactors[dirAccessor] === 1 && ((!isSameDir && sourceGtTarget) || (isSameDir && sourceLtTarget))) ||
|
|
594
|
+
(sourceDirectionFactors[dirAccessor] !== 1 && ((!isSameDir && sourceLtTarget) || (isSameDir && sourceGtTarget)));
|
|
515
595
|
if (flipSourceTarget) {
|
|
516
596
|
points = dirAccessor === 'x' ? sourceTarget : targetSource;
|
|
517
597
|
}
|
|
@@ -532,83 +612,6 @@ function getEdgeCenter({ sourceX, sourceY, targetX, targetY }) {
|
|
|
532
612
|
const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;
|
|
533
613
|
return [centerX, centerY, xOffset, yOffset];
|
|
534
614
|
}
|
|
535
|
-
function getPointOnPolyline(points, ratio) {
|
|
536
|
-
const totalLength = calculatePolylineLength(points);
|
|
537
|
-
const targetDistance = totalLength * ratio;
|
|
538
|
-
let accumulatedDistance = 0;
|
|
539
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
540
|
-
const [x1, y1] = points[i];
|
|
541
|
-
const [x2, y2] = points[i + 1];
|
|
542
|
-
const segmentLength = distanceBetweenPointAndPoint(x1, y1, x2, y2);
|
|
543
|
-
if (accumulatedDistance + segmentLength >= targetDistance) {
|
|
544
|
-
const remainingDistance = targetDistance - accumulatedDistance;
|
|
545
|
-
const ratioInSegment = remainingDistance / segmentLength;
|
|
546
|
-
const targetX = x1 + (x2 - x1) * ratioInSegment;
|
|
547
|
-
const targetY = y1 + (y2 - y1) * ratioInSegment;
|
|
548
|
-
return [targetX, targetY];
|
|
549
|
-
}
|
|
550
|
-
accumulatedDistance += segmentLength;
|
|
551
|
-
}
|
|
552
|
-
return points[points.length - 1];
|
|
553
|
-
}
|
|
554
|
-
function calculatePolylineLength(points) {
|
|
555
|
-
let length = 0;
|
|
556
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
557
|
-
const [x1, y1] = points[i];
|
|
558
|
-
const [x2, y2] = points[i + 1];
|
|
559
|
-
length += distanceBetweenPointAndPoint(x1, y1, x2, y2);
|
|
560
|
-
}
|
|
561
|
-
return length;
|
|
562
|
-
}
|
|
563
|
-
function getRatioByPoint(points, point) {
|
|
564
|
-
const totalLength = calculatePolylineLength(points);
|
|
565
|
-
let distance = 0;
|
|
566
|
-
for (let i = 0; i < points.length - 1; i++) {
|
|
567
|
-
const isOverlap = isPointOnSegment(point, points[i], points[i + 1]);
|
|
568
|
-
if (isOverlap) {
|
|
569
|
-
distance += distanceBetweenPointAndPoint(point[0], point[1], points[i][0], points[i][1]);
|
|
570
|
-
return distance / totalLength;
|
|
571
|
-
}
|
|
572
|
-
else {
|
|
573
|
-
distance += distanceBetweenPointAndPoint(points[i][0], points[i][1], points[i + 1][0], points[i + 1][1]);
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
throw new Error('Cannot get ratio by point');
|
|
577
|
-
}
|
|
578
|
-
const removeDuplicatePoints = (points) => {
|
|
579
|
-
const newArray = [];
|
|
580
|
-
points.forEach(point => {
|
|
581
|
-
const index = newArray.findIndex(otherPoint => {
|
|
582
|
-
return Point.isEquals(point, otherPoint);
|
|
583
|
-
});
|
|
584
|
-
if (index === -1)
|
|
585
|
-
newArray.push(point);
|
|
586
|
-
});
|
|
587
|
-
return newArray;
|
|
588
|
-
};
|
|
589
|
-
function simplifyOrthogonalPoints(points) {
|
|
590
|
-
if (points.length <= 2)
|
|
591
|
-
return points;
|
|
592
|
-
let simplifiedPoints = [points[0]];
|
|
593
|
-
for (let i = 1; i < points.length - 1; i++) {
|
|
594
|
-
const previous = points[i - 1];
|
|
595
|
-
const current = points[i];
|
|
596
|
-
const next = points[i + 1];
|
|
597
|
-
const isTurn = !(Point.isOverHorizontal([previous, current, next]) || Point.isOverVertical([previous, current, next]));
|
|
598
|
-
if (isTurn) {
|
|
599
|
-
simplifiedPoints.push(current);
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
simplifiedPoints.push(points[points.length - 1]);
|
|
603
|
-
return simplifiedPoints;
|
|
604
|
-
}
|
|
605
|
-
const getExtendPoint = (source, target, extendDistance) => {
|
|
606
|
-
const distance = distanceBetweenPointAndPoint(...source, ...target);
|
|
607
|
-
const isEqual = Point.isEquals(source, target);
|
|
608
|
-
const sin = isEqual ? 1 : (target[1] - source[1]) / distance;
|
|
609
|
-
const cos = isEqual ? 1 : (target[0] - source[0]) / distance;
|
|
610
|
-
return [source[0] + extendDistance * cos, source[1] + extendDistance * sin];
|
|
611
|
-
};
|
|
612
615
|
|
|
613
616
|
function isVirtualKey(e) {
|
|
614
617
|
const isMod = e.ctrlKey || e.metaKey;
|
|
@@ -1540,7 +1543,7 @@ class ImageBaseComponent {
|
|
|
1540
1543
|
drawFocus() {
|
|
1541
1544
|
if (this.initialized) {
|
|
1542
1545
|
const activeG = PlaitBoard.getElementActiveHost(this.board);
|
|
1543
|
-
this.activeGenerator.processDrawing(
|
|
1546
|
+
this.activeGenerator.processDrawing(this.element, activeG, { selected: this._isFocus });
|
|
1544
1547
|
}
|
|
1545
1548
|
}
|
|
1546
1549
|
ngOnDestroy() {
|
|
@@ -1548,17 +1551,17 @@ class ImageBaseComponent {
|
|
|
1548
1551
|
this.activeGenerator.destroy();
|
|
1549
1552
|
}
|
|
1550
1553
|
}
|
|
1551
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
1552
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
1554
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ImageBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1555
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: ImageBaseComponent, inputs: { element: "element", imageItem: "imageItem", board: "board", isFocus: "isFocus", getRectangle: "getRectangle", hasResizeHandle: "hasResizeHandle" }, host: { classAttribute: "plait-image-container" }, ngImport: i0 }); }
|
|
1553
1556
|
}
|
|
1554
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1557
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ImageBaseComponent, decorators: [{
|
|
1555
1558
|
type: Directive,
|
|
1556
1559
|
args: [{
|
|
1557
1560
|
host: {
|
|
1558
1561
|
class: 'plait-image-container'
|
|
1559
1562
|
}
|
|
1560
1563
|
}]
|
|
1561
|
-
}], ctorParameters:
|
|
1564
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }], propDecorators: { element: [{
|
|
1562
1565
|
type: Input
|
|
1563
1566
|
}], imageItem: [{
|
|
1564
1567
|
type: Input
|
|
@@ -1580,5 +1583,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1580
1583
|
* Generated bundle index. Do not edit.
|
|
1581
1584
|
*/
|
|
1582
1585
|
|
|
1583
|
-
export { AStar, ActiveGenerator, AlignTransform, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeHandle, TRANSPARENT, TextTransforms, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, alignBottom, alignHorizontalCenter, alignLeft, alignRight, alignTop, alignVerticalCenter, buildImage, calculatePolylineLength, createGraph, distributeHorizontal, distributeVertical, drawFillPrimaryHandle, drawHandle, drawPrimaryHandle, generateElbowLineRoute, getCreationMode, getCrossingPointsBetweenPointAndSegment,
|
|
1586
|
+
export { AStar, ActiveGenerator, AlignTransform, BASE, BoardCreationMode, CommonPluginElement, DEFAULT_ROUTE_MARGIN, Generator, IS_RESIZING, ImageBaseComponent, ImageGenerator, MediaKeys, PICTURE_ACCEPTED_UPLOAD_SIZE, PRIMARY_COLOR, PointGraph, PointNode, PriorityQueue, PropertyTransforms, RESIZE_HANDLE_DIAMETER, ResizeHandle, TRANSPARENT, TextTransforms, WithCommonPluginKey, WithTextPluginKey, acceptImageTypes, addElementOfFocusedImage, addResizing, alignBottom, alignHorizontalCenter, alignLeft, alignRight, alignTop, alignVerticalCenter, buildImage, calculatePolylineLength, createGraph, distributeHorizontal, distributeVertical, drawFillPrimaryHandle, drawHandle, drawPrimaryHandle, generateElbowLineRoute, getCreationMode, getCrossingPointsBetweenPointAndSegment, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getDirectionFactorByDirectionComponent, getElementOfFocusedImage, getElementsText, getExtendPoint, getFirstTextEditor, getFirstTextManage, getGraphPoints, getIndexByResizeHandle, getMemorizedLatest, getNextPoint, getOppositeDirection, getPointByVectorComponent, getPointByVectorDirectionComponent, getPointOnPolyline, getPoints, getRatioByPoint, getRectangleResizeHandleRefs, getResizeHandleByIndex, getResizeHandlePointByIndex, getSourceAndTargetOuterRectangle, getSymmetricHandleIndex, getTextEditors, getTextManages, getTextMarksByElement, getUnitVectorByPointAndPoint, hasAfterDraw, isCornerHandle, isDelete, isDndMode, isDrawingMode, isEdgeHandle, isEnterHotkey, isExpandHotkey, isPointOnSegment, isResizing, isResizingByCondition, isSourceAndTargetIntersect, isSpaceHotkey, isTabHotkey, isVirtualKey, memorizeLatest, normalizeShapePoints, reduceRouteMargin, removeDuplicatePoints, removeElementOfFocusedImage, removeResizing, rotateVectorAnti90, routeAdjust, selectImage, setCreationMode, setProperty, simplifyOrthogonalPoints, withResize };
|
|
1584
1587
|
//# sourceMappingURL=plait-common.mjs.map
|