@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.
@@ -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==
@@ -60,4 +60,4 @@ export const getElementsText = (elements) => {
60
60
  .filter(item => item)
61
61
  .join(' ');
62
62
  };
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQXdCLENBQUM7SUFDNUUsT0FBTyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDeEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDOUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDcEQsT0FBTyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3hDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQy9DLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDeEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7S0FDOUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUN0QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLE9BQXFCLEVBQUUsRUFBRTtJQUMzRCxNQUFNLE9BQU8sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDVCxPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDOUIsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sWUFBWSxHQUE2QixlQUFlLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0gsT0FBTyxZQUFZLENBQUM7S0FDdkI7SUFDRCxNQUFNLFlBQVksR0FBNkIsZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRixPQUFPLFlBQVksQ0FBQztBQUN4QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUF3QixFQUFFLEVBQUU7SUFDeEQsT0FBTyxRQUFRO1NBQ1YsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ1IsSUFBSTtZQUNBLE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hCLE9BQU8sT0FBTztxQkFDVCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ1YsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDdEMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdkYsQ0FBQyxDQUFDO3FCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNsQjtZQUNELE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNaLE9BQU8sRUFBRSxDQUFDO1NBQ2I7SUFDTCxDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7U0FDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IENvbW1vblBsdWdpbkVsZW1lbnQgfSBmcm9tICcuLi9jb3JlL3BsdWdpbi1lbGVtZW50JztcbmltcG9ydCB7IEN1c3RvbVRleHQsIFBsYWl0TWFya0VkaXRvciB9IGZyb20gJ0BwbGFpdC90ZXh0JztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdzbGF0ZSc7XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0TWFuYWdlcyA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGVsZW1lbnQpIGFzIENvbW1vblBsdWdpbkVsZW1lbnQ7XG4gICAgcmV0dXJuIGNvbXBvbmVudC5nZXRUZXh0TWFuYWdlcygpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpcnN0VGV4dE1hbmFnZSA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB0ZXh0TWFuYWdlID0gZ2V0VGV4dE1hbmFnZXMoZWxlbWVudClbMF07XG4gICAgaWYgKCF0ZXh0TWFuYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCBmaW5kIHRleHRNYW5hZ2UnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRNYW5hZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dEVkaXRvcnMgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgcmV0dXJuIGdldFRleHRNYW5hZ2VzKGVsZW1lbnQpLm1hcChtYW5hZ2UgPT4ge1xuICAgICAgICByZXR1cm4gbWFuYWdlLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5lZGl0b3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmlyc3RUZXh0RWRpdG9yID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHRleHRFZGl0b3IgPSBnZXRUZXh0RWRpdG9ycyhlbGVtZW50KVswXTtcbiAgICBpZiAoIXRleHRFZGl0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW4gbm90IGZpbmQgdGV4dEVkaXRvcicpO1xuICAgIH1cbiAgICByZXR1cm4gdGV4dEVkaXRvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0TWFya3NCeUVsZW1lbnQgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgZWRpdG9ycyA9IGdldFRleHRFZGl0b3JzKGVsZW1lbnQpO1xuICAgIGNvbnN0IGVkaXRvciA9IGVkaXRvcnNbMF07XG4gICAgaWYgKCFlZGl0b3IpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBpZiAoZWRpdG9yLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCB0ZXh0TWFuYWdlID0gZ2V0VGV4dE1hbmFnZXMoZWxlbWVudClbMF07XG4gICAgICAgIGNvbnN0IGN1cnJlbnRNYXJrczogT21pdDxDdXN0b21UZXh0LCAndGV4dCc+ID0gUGxhaXRNYXJrRWRpdG9yLmdldE1hcmtzQnlFbGVtZW50KHRleHRNYW5hZ2UuY29tcG9uZW50UmVmLmluc3RhbmNlLmNoaWxkcmVuWzBdKTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRNYXJrcztcbiAgICB9XG4gICAgY29uc3QgY3VycmVudE1hcmtzOiBPbWl0PEN1c3RvbVRleHQsICd0ZXh0Jz4gPSBQbGFpdE1hcmtFZGl0b3IuZ2V0TWFya3MoZWRpdG9yKTtcbiAgICByZXR1cm4gY3VycmVudE1hcmtzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEVsZW1lbnRzVGV4dCA9IChlbGVtZW50czogUGxhaXRFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHNcbiAgICAgICAgLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdG9ycyA9IGdldFRleHRFZGl0b3JzKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChlZGl0b3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWRpdG9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChlZGl0b3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRzRW50cnkgPSBOb2RlLnRleHRzKGVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGV4dHNFbnRyeSkucmVkdWNlKCh0b3RhbCwgdGV4dCkgPT4gKHRvdGFsICs9IHRleHRbMF0udGV4dCksICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuam9pbignICcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0pXG4gICAgICAgIC5qb2luKCcgJyk7XG59O1xuIl19
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdXRpbHMvdGV4dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNDLE9BQU8sRUFBYyxlQUFlLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUU3QixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDcEQsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQXdCLENBQUM7SUFDNUUsT0FBTyxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7QUFDdEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDeEQsTUFBTSxVQUFVLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNkLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBQ0QsT0FBTyxVQUFVLENBQUM7QUFDdEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3BELE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUN4QyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUMvQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQ3hELE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDZCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBcUIsRUFBRSxFQUFFO0lBQzNELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1YsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxZQUFZLEdBQTZCLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvSCxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBQ0QsTUFBTSxZQUFZLEdBQTZCLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEYsT0FBTyxZQUFZLENBQUM7QUFDeEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsUUFBd0IsRUFBRSxFQUFFO0lBQ3hELE9BQU8sUUFBUTtTQUNWLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNSLElBQUksQ0FBQztZQUNELE1BQU0sT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxPQUFPO3FCQUNULEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDVixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN0QyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RixDQUFDLENBQUM7cUJBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25CLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO1NBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO1NBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEVsZW1lbnQgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBDb21tb25QbHVnaW5FbGVtZW50IH0gZnJvbSAnLi4vY29yZS9wbHVnaW4tZWxlbWVudCc7XG5pbXBvcnQgeyBDdXN0b21UZXh0LCBQbGFpdE1hcmtFZGl0b3IgfSBmcm9tICdAcGxhaXQvdGV4dCc7XG5pbXBvcnQgeyBOb2RlIH0gZnJvbSAnc2xhdGUnO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dE1hbmFnZXMgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChlbGVtZW50KSBhcyBDb21tb25QbHVnaW5FbGVtZW50O1xuICAgIHJldHVybiBjb21wb25lbnQuZ2V0VGV4dE1hbmFnZXMoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaXJzdFRleHRNYW5hZ2UgPSAoZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgdGV4dE1hbmFnZSA9IGdldFRleHRNYW5hZ2VzKGVsZW1lbnQpWzBdO1xuICAgIGlmICghdGV4dE1hbmFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NhbiBub3QgZmluZCB0ZXh0TWFuYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiB0ZXh0TWFuYWdlO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRFZGl0b3JzID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBnZXRUZXh0TWFuYWdlcyhlbGVtZW50KS5tYXAobWFuYWdlID0+IHtcbiAgICAgICAgcmV0dXJuIG1hbmFnZS5jb21wb25lbnRSZWYuaW5zdGFuY2UuZWRpdG9yO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpcnN0VGV4dEVkaXRvciA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCB0ZXh0RWRpdG9yID0gZ2V0VGV4dEVkaXRvcnMoZWxlbWVudClbMF07XG4gICAgaWYgKCF0ZXh0RWRpdG9yKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2FuIG5vdCBmaW5kIHRleHRFZGl0b3InKTtcbiAgICB9XG4gICAgcmV0dXJuIHRleHRFZGl0b3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dE1hcmtzQnlFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9ycyhlbGVtZW50KTtcbiAgICBjb25zdCBlZGl0b3IgPSBlZGl0b3JzWzBdO1xuICAgIGlmICghZWRpdG9yKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgaWYgKGVkaXRvci5jaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc3QgdGV4dE1hbmFnZSA9IGdldFRleHRNYW5hZ2VzKGVsZW1lbnQpWzBdO1xuICAgICAgICBjb25zdCBjdXJyZW50TWFya3M6IE9taXQ8Q3VzdG9tVGV4dCwgJ3RleHQnPiA9IFBsYWl0TWFya0VkaXRvci5nZXRNYXJrc0J5RWxlbWVudCh0ZXh0TWFuYWdlLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5jaGlsZHJlblswXSk7XG4gICAgICAgIHJldHVybiBjdXJyZW50TWFya3M7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRNYXJrczogT21pdDxDdXN0b21UZXh0LCAndGV4dCc+ID0gUGxhaXRNYXJrRWRpdG9yLmdldE1hcmtzKGVkaXRvcik7XG4gICAgcmV0dXJuIGN1cnJlbnRNYXJrcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRFbGVtZW50c1RleHQgPSAoZWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgcmV0dXJuIGVsZW1lbnRzXG4gICAgICAgIC5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9ycyhpdGVtKTtcbiAgICAgICAgICAgICAgICBpZiAoZWRpdG9ycy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVkaXRvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZWRpdG9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0c0VudHJ5ID0gTm9kZS50ZXh0cyhlZGl0b3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRleHRzRW50cnkpLnJlZHVjZSgodG90YWwsIHRleHQpID0+ICh0b3RhbCArPSB0ZXh0WzBdLnRleHQpLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtKVxuICAgICAgICAuam9pbignICcpO1xufTtcbiJdfQ==
@@ -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 getPointByVector(point, vector, component) {
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 getPointByUnitVectorAndVectorComponent(point, unitVector, vectorComponent, isHorizontal) {
18
+ export function getPointByVectorDirectionComponent(point, unitVector, directionComponent, isHorizontal) {
19
19
  if (isHorizontal) {
20
- return [point[0] + vectorComponent, point[1] + (vectorComponent / unitVector[0]) * unitVector[1]];
20
+ return [point[0] + directionComponent, point[1] + (directionComponent / unitVector[0]) * unitVector[1]];
21
21
  }
22
22
  else {
23
- return [point[0] + (vectorComponent / unitVector[1]) * unitVector[0], point[1] + vectorComponent];
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy92ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE1BQWEsRUFBRSxNQUFhO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzlELG9EQUFvRDtJQUNwRCxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUU7UUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO0tBQ2pGO0lBQ0QsdUNBQXVDO0lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFDaEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUVoQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFCLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLE1BQWMsRUFBRSxTQUFpQjtJQUM1RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDMUcsQ0FBQztBQUVELE1BQU0sVUFBVSxzQ0FBc0MsQ0FBQyxLQUFZLEVBQUUsVUFBa0IsRUFBRSxlQUF1QixFQUFFLFlBQXFCO0lBQ25JLElBQUksWUFBWSxFQUFFO1FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBVSxDQUFDO0tBQzlHO1NBQU07UUFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFVLENBQUM7S0FDOUc7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDN0MsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIFZlY3RvciB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQocG9pbnQxOiBQb2ludCwgcG9pbnQyOiBQb2ludCk6IFBvaW50IHtcbiAgICBjb25zdCBkZWx0YVggPSBwb2ludDJbMF0gLSBwb2ludDFbMF07XG4gICAgY29uc3QgZGVsdGFZID0gcG9pbnQyWzFdIC0gcG9pbnQxWzFdO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSk7XG4gICAgLy8gQXZvaWQgZGl2aXNpb24gYnkgemVybyBpZiB0aGUgcG9pbnRzIGFyZSB0aGUgc2FtZVxuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50cyBtdXN0IG5vdCBiZSB0aGUgc2FtZSBmb3IgYSB1bml0IHZlY3RvciBjYWxjdWxhdGlvbi4nKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSB1bml0IHZlY3RvciBjb21wb25lbnRzXG4gICAgY29uc3QgdW5pdFggPSBkZWx0YVggLyBkaXN0YW5jZTtcbiAgICBjb25zdCB1bml0WSA9IGRlbHRhWSAvIGRpc3RhbmNlO1xuXG4gICAgcmV0dXJuIFt1bml0WCwgdW5pdFldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVZlY3Rvcihwb2ludDogUG9pbnQsIHZlY3RvcjogVmVjdG9yLCBjb21wb25lbnQ6IG51bWJlcik6IFBvaW50IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguaHlwb3QodmVjdG9yWzBdLCB2ZWN0b3JbMV0pO1xuICAgIHJldHVybiBbcG9pbnRbMF0gKyAodmVjdG9yWzBdIC8gZGlzdGFuY2UpICogY29tcG9uZW50LCBwb2ludFsxXSArICh2ZWN0b3JbMV0gLyBkaXN0YW5jZSkgKiBjb21wb25lbnRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVVuaXRWZWN0b3JBbmRWZWN0b3JDb21wb25lbnQocG9pbnQ6IFBvaW50LCB1bml0VmVjdG9yOiBWZWN0b3IsIHZlY3RvckNvbXBvbmVudDogbnVtYmVyLCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNIb3Jpem9udGFsKSB7XG4gICAgICAgIHJldHVybiBbcG9pbnRbMF0gKyB2ZWN0b3JDb21wb25lbnQsIHBvaW50WzFdICsgKHZlY3RvckNvbXBvbmVudCAvIHVuaXRWZWN0b3JbMF0pICogdW5pdFZlY3RvclsxXV0gYXMgUG9pbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFtwb2ludFswXSArICh2ZWN0b3JDb21wb25lbnQgLyB1bml0VmVjdG9yWzFdKSAqIHVuaXRWZWN0b3JbMF0sIHBvaW50WzFdICsgdmVjdG9yQ29tcG9uZW50XSBhcyBQb2ludDtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByb3RhdGVWZWN0b3JBbnRpOTAodmVjdG9yOiBWZWN0b3IpOiBWZWN0b3Ige1xuICAgIGNvbnN0IHggPSB2ZWN0b3JbMF07XG4gICAgY29uc3QgeSA9IHZlY3RvclsxXTtcbiAgICBjb25zdCByb3RhdGVkWCA9IHk7XG4gICAgY29uc3Qgcm90YXRlZFkgPSAteDtcbiAgICByZXR1cm4gW3JvdGF0ZWRYLCByb3RhdGVkWV07XG59XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy91dGlscy92ZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxVQUFVLDRCQUE0QixDQUFDLE1BQWEsRUFBRSxNQUFhO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzlELG9EQUFvRDtJQUNwRCxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDREQUE0RCxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUNELHVDQUF1QztJQUN2QyxNQUFNLEtBQUssR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQ2hDLE1BQU0sS0FBSyxHQUFHLE1BQU0sR0FBRyxRQUFRLENBQUM7SUFFaEMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMxQixDQUFDO0FBRUQsTUFBTSxVQUFVLHlCQUF5QixDQUFDLEtBQVksRUFBRSxNQUFjLEVBQUUsU0FBaUI7SUFDckYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQzFHLENBQUM7QUFFRCxNQUFNLFVBQVUsa0NBQWtDLENBQzlDLEtBQVksRUFDWixVQUFrQixFQUNsQixrQkFBMEIsRUFDMUIsWUFBcUI7SUFFckIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFVLENBQUM7SUFDckgsQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBVSxDQUFDO0lBQ3JILENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDN0MsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDbkIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEIsT0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUG9pbnQsIFZlY3RvciB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVuaXRWZWN0b3JCeVBvaW50QW5kUG9pbnQocG9pbnQxOiBQb2ludCwgcG9pbnQyOiBQb2ludCk6IFBvaW50IHtcbiAgICBjb25zdCBkZWx0YVggPSBwb2ludDJbMF0gLSBwb2ludDFbMF07XG4gICAgY29uc3QgZGVsdGFZID0gcG9pbnQyWzFdIC0gcG9pbnQxWzFdO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGRlbHRhWCAqIGRlbHRhWCArIGRlbHRhWSAqIGRlbHRhWSk7XG4gICAgLy8gQXZvaWQgZGl2aXNpb24gYnkgemVybyBpZiB0aGUgcG9pbnRzIGFyZSB0aGUgc2FtZVxuICAgIGlmIChkaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BvaW50cyBtdXN0IG5vdCBiZSB0aGUgc2FtZSBmb3IgYSB1bml0IHZlY3RvciBjYWxjdWxhdGlvbi4nKTtcbiAgICB9XG4gICAgLy8gQ2FsY3VsYXRlIHRoZSB1bml0IHZlY3RvciBjb21wb25lbnRzXG4gICAgY29uc3QgdW5pdFggPSBkZWx0YVggLyBkaXN0YW5jZTtcbiAgICBjb25zdCB1bml0WSA9IGRlbHRhWSAvIGRpc3RhbmNlO1xuXG4gICAgcmV0dXJuIFt1bml0WCwgdW5pdFldO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVZlY3RvckNvbXBvbmVudChwb2ludDogUG9pbnQsIHZlY3RvcjogVmVjdG9yLCBjb21wb25lbnQ6IG51bWJlcik6IFBvaW50IHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguaHlwb3QodmVjdG9yWzBdLCB2ZWN0b3JbMV0pO1xuICAgIHJldHVybiBbcG9pbnRbMF0gKyAodmVjdG9yWzBdIC8gZGlzdGFuY2UpICogY29tcG9uZW50LCBwb2ludFsxXSArICh2ZWN0b3JbMV0gLyBkaXN0YW5jZSkgKiBjb21wb25lbnRdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UG9pbnRCeVZlY3RvckRpcmVjdGlvbkNvbXBvbmVudChcbiAgICBwb2ludDogUG9pbnQsXG4gICAgdW5pdFZlY3RvcjogVmVjdG9yLFxuICAgIGRpcmVjdGlvbkNvbXBvbmVudDogbnVtYmVyLFxuICAgIGlzSG9yaXpvbnRhbDogYm9vbGVhblxuKSB7XG4gICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICByZXR1cm4gW3BvaW50WzBdICsgZGlyZWN0aW9uQ29tcG9uZW50LCBwb2ludFsxXSArIChkaXJlY3Rpb25Db21wb25lbnQgLyB1bml0VmVjdG9yWzBdKSAqIHVuaXRWZWN0b3JbMV1dIGFzIFBvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbcG9pbnRbMF0gKyAoZGlyZWN0aW9uQ29tcG9uZW50IC8gdW5pdFZlY3RvclsxXSkgKiB1bml0VmVjdG9yWzBdLCBwb2ludFsxXSArIGRpcmVjdGlvbkNvbXBvbmVudF0gYXMgUG9pbnQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcm90YXRlVmVjdG9yQW50aTkwKHZlY3RvcjogVmVjdG9yKTogVmVjdG9yIHtcbiAgICBjb25zdCB4ID0gdmVjdG9yWzBdO1xuICAgIGNvbnN0IHkgPSB2ZWN0b3JbMV07XG4gICAgY29uc3Qgcm90YXRlZFggPSB5O1xuICAgIGNvbnN0IHJvdGF0ZWRZID0gLXg7XG4gICAgcmV0dXJuIFtyb3RhdGVkWCwgcm90YXRlZFldO1xufVxuIl19
@@ -1,4 +1,4 @@
1
- import { setTransformRotate, drawCircle, PlaitBoard, createG, RectangleClient, drawRectangle, createForeignObject, updateForeignObject, ResizeCursorClass, setDragging, Direction, distanceBetweenPointAndPoint, Point, 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';
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
- setTransformRotate(g, rect, element.angle);
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 getDirectionFactorByVectorComponent(vectorComponent) {
382
- const directionFactor = vectorComponent === 0 ? vectorComponent : vectorComponent / Math.abs(vectorComponent);
526
+ function getDirectionFactorByDirectionComponent(directionComponent) {
527
+ const directionFactor = directionComponent === 0 ? directionComponent : directionComponent / Math.abs(directionComponent);
383
528
  return directionFactor;
384
529
  }
385
530
 
386
- function getUnitVectorByPointAndPoint(point1, point2) {
387
- const deltaX = point2[0] - point1[0];
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 sourceDir = getDirectionFactor(sourcePosition);
455
- const targetDir = getDirectionFactor(targetPosition);
456
- const sourceGapped = [source[0] + sourceDir.x * offset, source[1] + sourceDir.y * offset];
457
- const targetGapped = [target[0] + targetDir.x * offset, target[1] + targetDir.y * offset];
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 (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {
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 (sourceDir[dirAccessor] === currDir) {
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 = sourceDir.x === currDir ? targetSource : sourceTarget;
580
+ points = sourceDirectionFactors.x === currDir ? targetSource : sourceTarget;
501
581
  }
502
582
  else {
503
- points = sourceDir.y === currDir ? sourceTarget : targetSource;
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 = sourceDir[dirAccessor] === targetDir[dirAccessor === 'x' ? 'y' : 'x'];
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
- (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTarget) || (isSameDir && sourceLtTarget))) ||
514
- (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTarget) || (isSameDir && sourceGtTarget)));
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({}, activeG, { selected: this._isFocus });
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: "16.2.12", ngImport: i0, type: ImageBaseComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
1552
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ImageBaseComponent, inputs: { element: "element", imageItem: "imageItem", board: "board", isFocus: "isFocus", getRectangle: "getRectangle", hasResizeHandle: "hasResizeHandle" }, host: { classAttribute: "plait-image-container" }, ngImport: i0 }); }
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: "16.2.12", ngImport: i0, type: ImageBaseComponent, decorators: [{
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: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { element: [{
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, getDirection, getDirectionBetweenPointAndPoint, getDirectionByPointOfRectangle, getDirectionByVector, getDirectionFactor, getDirectionFactorByVectorComponent, getEdgeCenter, getElementOfFocusedImage, getElementsText, getExtendPoint, getFirstTextEditor, getFirstTextManage, getGraphPoints, getIndexByResizeHandle, getMemorizedLatest, getNextPoint, getOppositeDirection, getPointByUnitVectorAndVectorComponent, getPointByVector, 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 };
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