paperjs-offset 2.0.0 → 2.1.0
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/README.md +2 -2
- package/dist/index.cjs +71 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +71 -25
- package/dist/index.mjs.map +1 -1
- package/dist/index.umd.js +71 -25
- package/dist/index.umd.js.map +1 -1
- package/dist/index.umd.min.js +1 -1
- package/package.json +2 -2
package/dist/index.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.umd.js","sources":["../.build/lib/offset_core.js","../.build/lib/index.js"],"sourcesContent":["import paper from 'paper';\nvar MAX_RECURSION_TIME = 20;\nvar STRATEGIES = [\n {\n algorithm: 'adaptive',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: true,\n },\n {\n algorithm: 'robust',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: false,\n },\n {\n algorithm: 'split',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n {\n algorithm: 'legacy',\n splitSelfIntersectingCurves: false,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n];\nfunction getStrategy(algorithm) {\n if (algorithm === 'auto') {\n return STRATEGIES[0];\n }\n return STRATEGIES.filter(function (strategy) { return strategy.algorithm === algorithm; })[0] || STRATEGIES[0];\n}\n/**\n * Offset the start/terminal segment of a bezier curve\n * @param segment segment to offset\n * @param curve curve to offset\n * @param handleNormal the normal of the the line formed of two handles\n * @param offset offset value\n */\nfunction offsetSegment(segment, curve, handleNormal, offset) {\n var isFirst = segment.curve === curve;\n // get offset vector\n var offsetVector = (curve.getNormalAtTime(isFirst ? 0 : 1)).multiply(offset);\n // get offset point\n var point = segment.point.add(offsetVector);\n var newSegment = new paper.Segment(point);\n // handleOut for start segment & handleIn for terminal segment\n var handle = (isFirst ? 'handleOut' : 'handleIn');\n newSegment[handle] = segment[handle].add(handleNormal.subtract(offsetVector).divide(2));\n return newSegment;\n}\n/**\n * Adaptive offset a curve by repeatly apply the approximation proposed by Tiller and Hanson.\n * @param curve curve to offset\n * @param offset offset value\n */\nfunction adaptiveOffsetCurve(curve, offset, strategy, recursionTime) {\n if (recursionTime === void 0) { recursionTime = 0; }\n var hNormal = (new paper.Curve(curve.segment1.handleOut.add(curve.segment1.point), new paper.Point(0, 0), new paper.Point(0, 0), curve.segment2.handleIn.add(curve.segment2.point))).getNormalAtTime(0.5).multiply(offset);\n var segment1 = offsetSegment(curve.segment1, curve, hNormal, offset);\n var segment2 = offsetSegment(curve.segment2, curve, hNormal, offset);\n if (recursionTime > MAX_RECURSION_TIME) {\n return [segment1, segment2];\n }\n // divide && re-offset\n var offsetCurve = new paper.Curve(segment1, segment2);\n var offsetCurveIntersections = offsetCurve.getIntersections(offsetCurve);\n var threshold = Math.min(Math.abs(offset) / 10, 1);\n var midOffset = offsetCurve.getPointAtTime(0.5).getDistance(curve.getPointAtTime(0.5));\n var needsSplit = strategy.splitSelfIntersectingCurves\n ? offsetCurveIntersections.length > 0 || Math.abs(midOffset - Math.abs(offset)) > threshold\n : offsetCurveIntersections.length === 0 && Math.abs(midOffset - Math.abs(offset)) > threshold;\n if (needsSplit) {\n var subCurve = curve.divideAtTime(0.5);\n if (subCurve != null) {\n return adaptiveOffsetCurve(curve, offset, strategy, recursionTime + 1)\n .concat(adaptiveOffsetCurve(subCurve, offset, strategy, recursionTime + 1));\n }\n }\n return [segment1, segment2];\n}\n/**\n * Create a round join segment between two adjacent segments.\n */\nfunction makeRoundJoin(segment1, segment2, originPoint, radius) {\n var through = segment1.point.subtract(originPoint).add(segment2.point.subtract(originPoint))\n .normalize(Math.abs(radius)).add(originPoint);\n var arc = new paper.Path.Arc({ from: segment1.point, to: segment2.point, through: through, insert: false });\n segment1.handleOut = arc.firstSegment.handleOut;\n segment2.handleIn = arc.lastSegment.handleIn;\n return arc.segments.length === 3 ? arc.segments[1] : null;\n}\nfunction det(p1, p2) {\n return p1.x * p2.y - p1.y * p2.x;\n}\n/**\n * Get the intersection point of point based lines\n */\nfunction getPointLineIntersections(p1, p2, p3, p4) {\n var l1 = p1.subtract(p2);\n var l2 = p3.subtract(p4);\n var dl1 = det(p1, p2);\n var dl2 = det(p3, p4);\n return new paper.Point(dl1 * l2.x - l1.x * dl2, dl1 * l2.y - l1.y * dl2).divide(det(l1, l2));\n}\n/**\n * Connect two adjacent bezier curve, each curve is represented by two segments,\n * create different types of joins or simply removal redundant segment.\n */\nfunction isOutsideJoin(origin, offset) {\n var _a;\n var previousCurve = (_a = origin.previous) === null || _a === void 0 ? void 0 : _a.curve;\n var nextCurve = origin.curve;\n if (!previousCurve || !nextCurve) {\n return true;\n }\n var tangentIn = previousCurve.getTangentAtTime(1);\n var tangentOut = nextCurve.getTangentAtTime(0);\n var turn = det(tangentIn, tangentOut);\n return Math.abs(turn) < 1e-9 || turn * offset > 0;\n}\nfunction connectAdjacentBezier(segments1, segments2, origin, joinType, offset, limit, closed, strategy) {\n var curve1 = new paper.Curve(segments1[0], segments1[1]);\n var curve2 = new paper.Curve(segments2[0], segments2[1]);\n var intersection = curve1.getIntersections(curve2);\n var distance = segments1[1].point.getDistance(segments2[0].point);\n var shouldJoin = !closed || !strategy.guardInsideJoins || isOutsideJoin(origin, offset);\n if (origin.isSmooth()) {\n segments2[0].handleOut = segments2[0].handleOut.project(origin.handleOut);\n segments2[0].handleIn = segments1[1].handleIn.project(origin.handleIn);\n segments2[0].point = segments1[1].point.add(segments2[0].point).divide(2);\n segments1.pop();\n }\n else {\n if (intersection.length === 0) {\n if (distance > Math.abs(offset) * 0.1) {\n // connect\n switch (joinType) {\n case 'miter':\n if (shouldJoin) {\n var join = getPointLineIntersections(curve1.point2, curve1.point2.add(curve1.getTangentAtTime(1)), curve2.point1, curve2.point1.add(curve2.getTangentAtTime(0)));\n // prevent sharp angle\n var joinOffset = Math.max(join.getDistance(curve1.point2), join.getDistance(curve2.point1));\n if (joinOffset < Math.abs(offset) * limit) {\n segments1.push(new paper.Segment(join));\n }\n }\n break;\n case 'round':\n if (shouldJoin) {\n var mid = makeRoundJoin(segments1[1], segments2[0], origin.point, offset);\n if (mid) {\n segments1.push(mid);\n }\n }\n break;\n default: break;\n }\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n else {\n var second1 = curve1.divideAt(intersection[0]);\n if (second1) {\n var join = second1.segment1;\n var second2 = curve2.divideAt(curve2.getIntersections(curve1)[0]);\n join.handleOut = second2 ? second2.segment1.handleOut : segments2[0].handleOut;\n segments1.pop();\n segments2[0] = join;\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n }\n}\n/**\n * Connect all the segments together.\n */\nfunction connectBeziers(rawSegments, join, source, offset, limit, strategy) {\n var originSegments = source.segments;\n var first = rawSegments[0].slice();\n for (var i = 0; i < rawSegments.length - 1; ++i) {\n connectAdjacentBezier(rawSegments[i], rawSegments[i + 1], originSegments[i + 1], join, offset, limit, source.closed, strategy);\n }\n if (source.closed) {\n connectAdjacentBezier(rawSegments[rawSegments.length - 1], first, originSegments[0], join, offset, limit, source.closed, strategy);\n rawSegments[0][0] = first[0];\n }\n return rawSegments;\n}\nfunction reduceSingleChildCompoundPath(path) {\n if (path.children.length === 1) {\n path = path.children[0];\n path.remove(); // remove from parent, this is critical, or the style attributes will be ignored\n }\n return path;\n}\n/** Normalize a path, always clockwise, non-self-intersection, ignore really small components, and no one-component compound path. */\nfunction normalize(path, areaThreshold) {\n if (areaThreshold === void 0) { areaThreshold = 0.01; }\n if (path.closed) {\n var ignoreArea_1 = Math.abs(path.area * areaThreshold);\n if (!path.clockwise) {\n path.reverse();\n }\n path = path.unite(path, { insert: false });\n path = path.resolveCrossings();\n if (path instanceof paper.CompoundPath) {\n path.children.filter(function (c) { return Math.abs(c.area) < ignoreArea_1; }).forEach(function (c) { return c.remove(); });\n if (path.children.length === 1) {\n return reduceSingleChildCompoundPath(path);\n }\n }\n }\n return path;\n}\nfunction cleanupStrokeOutline(path, offset, strategy) {\n var result = normalize(path);\n if (strategy.simplifySelfIntersectingStroke && countSelfIntersections(result) > 0) {\n var simplified = result.clone({ insert: false });\n simplified.simplify(Math.max(Math.min(Math.abs(offset) * 0.02, 0.5), 0.1));\n result = normalize(simplified);\n }\n return result;\n}\nfunction isSameDirection(partialPath, fullPath) {\n var offset1 = partialPath.segments[0].location.offset;\n var offset2 = partialPath.segments[Math.max(1, Math.floor(partialPath.segments.length / 2))].location.offset;\n var sampleOffset = (offset1 + offset2) / 3;\n var originOffset1 = fullPath.getNearestLocation(partialPath.getPointAt(sampleOffset)).offset;\n var originOffset2 = fullPath.getNearestLocation(partialPath.getPointAt(2 * sampleOffset)).offset;\n return originOffset1 < originOffset2;\n}\n/** Remove self intersection when offset is negative by point direction dectection. */\nfunction removeIntersection(path) {\n if (path.closed) {\n var newPath = path.unite(path, { insert: false });\n if (newPath instanceof paper.CompoundPath) {\n newPath.children.filter(function (c) {\n if (c.segments.length > 1) {\n return !isSameDirection(c, path);\n }\n else {\n return true;\n }\n }).forEach(function (c) { return c.remove(); });\n return reduceSingleChildCompoundPath(newPath);\n }\n }\n return path;\n}\nfunction getSegments(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children.map(function (c) { return c.segments; }).flat();\n }\n else {\n return path.segments;\n }\n}\n/**\n * Remove impossible segments in negative offset condition.\n */\nfunction removeOutsiders(newPath, path) {\n var segments = getSegments(newPath).slice();\n segments.forEach(function (segment) {\n if (!path.contains(segment.point)) {\n segment.remove();\n }\n });\n}\nfunction preparePath(path, offset) {\n var source = path.clone({ insert: false });\n source.reduce({});\n if (path.closed && !path.clockwise) {\n source.reverse();\n offset = -offset;\n }\n return [source, offset];\n}\nfunction offsetSimpleShape(path, offset, join, limit, strategy) {\n var _a;\n var source;\n _a = preparePath(path, offset), source = _a[0], offset = _a[1];\n var curves = source.curves.slice();\n var offsetCurves = curves.map(function (curve) { return adaptiveOffsetCurve(curve, offset, strategy); }).flat();\n var raws = [];\n for (var i = 0; i < offsetCurves.length; i += 2) {\n raws.push(offsetCurves.slice(i, i + 2));\n }\n var segments = connectBeziers(raws, join, source, offset, limit, strategy).flat();\n var newPath = removeIntersection(new paper.Path({ segments: segments, insert: false, closed: path.closed }));\n newPath.reduce({});\n if (source.closed && ((source.clockwise && offset < 0) || (!source.clockwise && offset > 0))) {\n removeOutsiders(newPath, path);\n }\n // recovery path\n if (source.clockwise !== path.clockwise) {\n newPath.reverse();\n }\n return normalize(newPath);\n}\nfunction makeRoundCap(from, to, offset) {\n var origin = from.point.add(to.point).divide(2);\n var normal = to.point.subtract(from.point).rotate(-90, new paper.Point(0, 0)).normalize(offset);\n var through = origin.add(normal);\n var arc = new paper.Path.Arc({ from: from.point, to: to.point, through: through, insert: false });\n return arc.segments;\n}\nfunction connectSide(outer, inner, offset, cap) {\n if (outer instanceof paper.CompoundPath) {\n var cs = outer.children.map(function (c) { return ({ c: c, a: Math.abs(c.area) }); });\n cs = cs.sort(function (c1, c2) { return c2.a - c1.a; });\n outer = cs[0].c;\n }\n var oSegments = outer.segments.slice();\n var iSegments = inner.segments.slice();\n switch (cap) {\n case 'round':\n var heads = makeRoundCap(iSegments[iSegments.length - 1], oSegments[0], offset);\n var tails = makeRoundCap(oSegments[oSegments.length - 1], iSegments[0], offset);\n var result = new paper.Path({ segments: heads.concat(oSegments, tails, iSegments), closed: true, insert: false });\n result.reduce({});\n return result;\n default: return new paper.Path({ segments: oSegments.concat(iSegments), closed: true, insert: false });\n }\n}\nfunction offsetSimpleStroke(path, offset, join, cap, limit, strategy) {\n offset = path.closed && !path.clockwise ? -offset : offset;\n var positiveOffset = offsetSimpleShape(path, offset, join, limit, strategy);\n var negativeOffset = offsetSimpleShape(path, -offset, join, limit, strategy);\n if (path.closed) {\n return cleanupStrokeOutline(positiveOffset.subtract(negativeOffset, { insert: false }), offset, strategy);\n }\n else {\n var inner = negativeOffset;\n var holes = new Array();\n if (negativeOffset instanceof paper.CompoundPath) {\n holes = negativeOffset.children.filter(function (c) { return c.closed; });\n holes.forEach(function (h) { return h.remove(); });\n inner = negativeOffset.children[0];\n }\n inner.reverse();\n var final = connectSide(positiveOffset, inner, offset, cap);\n if (holes.length > 0) {\n for (var _i = 0, holes_1 = holes; _i < holes_1.length; _i++) {\n var hole = holes_1[_i];\n final = final.subtract(hole, { insert: false });\n }\n }\n return cleanupStrokeOutline(final, offset, strategy);\n }\n}\nfunction getChildPaths(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children;\n }\n return [path];\n}\nfunction finiteNumber(value) {\n return Number.isFinite(value);\n}\nfunction countSelfIntersections(path) {\n if (!path.closed) {\n return 0;\n }\n try {\n var children_1 = getChildPaths(path);\n var count_1 = 0;\n children_1.forEach(function (child, index) {\n count_1 += child.getIntersections(child).length;\n for (var i = index + 1; i < children_1.length; i += 1) {\n count_1 += child.getIntersections(children_1[i]).length;\n }\n });\n return count_1;\n }\n catch (error) {\n return 0;\n }\n}\nfunction samplePoints(path, maxPerChild) {\n if (maxPerChild === void 0) { maxPerChild = 16; }\n var points = [];\n getChildPaths(path).forEach(function (child) {\n if (!child.length || child.segments.length === 0) {\n return;\n }\n var count = Math.min(maxPerChild, Math.max(4, Math.ceil(child.length / 30)));\n for (var i = 0; i < count; i += 1) {\n var ratio = child.closed ? i / count : i / Math.max(count - 1, 1);\n var point = child.getPointAt(child.length * ratio);\n if (point) {\n points.push(point);\n }\n }\n });\n return points;\n}\nfunction containsPoint(path, point) {\n try {\n return path.contains(point);\n }\n catch (error) {\n return false;\n }\n}\nfunction distanceToPath(path, point) {\n try {\n var nearest = path.getNearestPoint(point);\n return nearest ? nearest.getDistance(point) : Number.POSITIVE_INFINITY;\n }\n catch (error) {\n return Number.POSITIVE_INFINITY;\n }\n}\nfunction addWarning(warnings, warning) {\n if (warnings.indexOf(warning) === -1) {\n warnings.push(warning);\n }\n}\nexport function analyzeOffsetQuality(source, result, offset, options) {\n if (options === void 0) { options = {}; }\n var warnings = new Array();\n var expectedClosed = options.stroke ? true : source.closed;\n var segmentCount = getSegments(result).length;\n var area = Math.abs(result.area || 0);\n var absOffset = Math.abs(offset);\n var score = segmentCount * 0.01;\n var containmentErrors = 0;\n var distanceErrors = 0;\n var bounds = result.bounds;\n if (segmentCount === 0) {\n score += 100000;\n addWarning(warnings, 'empty-result');\n }\n if (!bounds || !finiteNumber(bounds.x) || !finiteNumber(bounds.y) || !finiteNumber(bounds.width) || !finiteNumber(bounds.height)) {\n score += 100000;\n addWarning(warnings, 'non-finite-bounds');\n }\n if (result.closed !== expectedClosed) {\n score += 50000;\n addWarning(warnings, 'unexpected-closed-state');\n }\n var selfIntersections = countSelfIntersections(result);\n if (selfIntersections > 0) {\n score += selfIntersections * 1000;\n addWarning(warnings, 'self-intersection');\n }\n if (source.closed && result.closed && !options.stroke) {\n var sourceArea = Math.abs(source.area || 0);\n if (sourceArea > 0 && offset > 0 && area < sourceArea * 0.95) {\n score += ((sourceArea - area) / sourceArea) * 2000;\n addWarning(warnings, 'positive-offset-area-shrank');\n }\n if (sourceArea > 0 && offset < 0 && area > sourceArea * 1.05) {\n score += ((area - sourceArea) / sourceArea) * 2000;\n addWarning(warnings, 'negative-offset-area-grew');\n }\n if (sourceArea > 0 && offset < 0) {\n var areaRatio = area / sourceArea;\n if (areaRatio < 0.25) {\n score += (0.25 - areaRatio) * 4000;\n addWarning(warnings, 'negative-offset-collapse');\n }\n }\n if (sourceArea > 0 && offset > 0) {\n var sourceBounds = source.bounds;\n var centerShift = result.bounds.center.getDistance(sourceBounds.center);\n var centerTolerance = Math.max(absOffset * 1.15, Math.min(sourceBounds.width, sourceBounds.height) * 0.08);\n if (centerShift > centerTolerance) {\n score += (centerShift - centerTolerance) * 80;\n addWarning(warnings, 'offset-center-shift');\n }\n }\n var containmentTolerance_1 = Math.max(absOffset * 0.08, 0.5);\n var containmentSamples = offset >= 0 ? samplePoints(source) : samplePoints(result);\n containmentSamples.forEach(function (point) {\n var container = offset >= 0 ? result : source;\n if (!containsPoint(container, point) && distanceToPath(container, point) > containmentTolerance_1) {\n containmentErrors += 1;\n }\n });\n if (containmentErrors > 0) {\n score += containmentErrors * 150;\n addWarning(warnings, offset >= 0 ? 'source-outside-positive-offset' : 'negative-offset-outside-source');\n }\n }\n if (absOffset > 0.001) {\n var distanceTolerance_1 = Math.max(absOffset * 0.18, 0.75);\n samplePoints(result).forEach(function (point) {\n var distance = distanceToPath(source, point);\n if (finiteNumber(distance) && distance < distanceTolerance_1) {\n distanceErrors += 1;\n }\n });\n if (distanceErrors > 0) {\n score += distanceErrors * 35;\n addWarning(warnings, 'offset-distance-collapse');\n }\n }\n return {\n score: score,\n warnings: warnings,\n selfIntersections: selfIntersections,\n containmentErrors: containmentErrors,\n distanceErrors: distanceErrors,\n segmentCount: segmentCount,\n area: area,\n };\n}\nfunction pickBestResult(source, offset, stroke, makeResult) {\n var bestResult = null;\n var bestQuality = null;\n var firstError = null;\n STRATEGIES.forEach(function (strategy) {\n try {\n var result = makeResult(strategy);\n var quality = analyzeOffsetQuality(source, result, offset, { stroke: stroke });\n quality.algorithm = strategy.algorithm;\n if (!bestQuality || quality.score < bestQuality.score) {\n bestResult = result;\n bestQuality = quality;\n }\n }\n catch (error) {\n if (!firstError && error instanceof Error) {\n firstError = error;\n }\n }\n });\n if (!bestResult) {\n throw firstError || new Error('Unable to offset path with any algorithm');\n }\n return bestResult;\n}\nfunction getNonSelfIntersectionPath(path) {\n if (path.closed) {\n return path.unite(path, { insert: false });\n }\n return path;\n}\nfunction withoutAdaptiveFallback(strategy) {\n return {\n algorithm: 'robust',\n splitSelfIntersectingCurves: strategy.splitSelfIntersectingCurves,\n guardInsideJoins: strategy.guardInsideJoins,\n simplifySelfIntersectingStroke: strategy.simplifySelfIntersectingStroke,\n adaptiveFallback: false,\n };\n}\nfunction addAdaptiveCandidate(candidates, makeResult) {\n try {\n candidates.push(makeResult());\n }\n catch (error) {\n // Keep adaptive mode opportunistic: a failed fallback should not hide valid strict results.\n }\n}\nfunction pickBestCandidate(source, offset, stroke, candidates) {\n var bestResult = candidates[0];\n var bestQuality = analyzeOffsetQuality(source, bestResult, offset, { stroke: stroke });\n for (var i = 1; i < candidates.length; i += 1) {\n var quality = analyzeOffsetQuality(source, candidates[i], offset, { stroke: stroke });\n if (quality.score < bestQuality.score) {\n bestResult = candidates[i];\n bestQuality = quality;\n }\n }\n return bestResult;\n}\nfunction offsetPathAdaptive(path, offset, join, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, 'round', limit, baseStrategy); });\n }\n if (path.closed && offset < 0) {\n [0.8, 0.65, 0.5, 0.35, 0.25].forEach(function (factor) {\n var fallbackOffset = offset * factor;\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, 'round', limit, baseStrategy); });\n }\n });\n }\n if (candidates.length === 0) {\n return offsetPathWithStrategy(path, offset, join, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, false, candidates);\n}\nfunction offsetPathWithStrategy(path, offset, join, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetPathAdaptive(path, offset, join, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleShape(nonSIPath, offset, join, limit, strategy);\n }\n else {\n var offsetParts = nonSIPath.children.map(function (c) {\n if (c.segments.length > 1) {\n if (!isSameDirection(c, path)) {\n c.reverse();\n }\n var offsetPath_1 = offsetSimpleShape(c, offset, join, limit, strategy);\n offsetPath_1 = normalize(offsetPath_1);\n if (offsetPath_1.clockwise !== c.clockwise) {\n offsetPath_1.reverse();\n }\n if (offsetPath_1 instanceof paper.CompoundPath) {\n offsetPath_1.applyMatrix = true;\n return offsetPath_1.children;\n }\n else {\n return offsetPath_1;\n }\n }\n else {\n return null;\n }\n });\n var children = offsetParts.flat().filter(function (c) { return !!c; });\n result = new paper.CompoundPath({ children: children, insert: false });\n }\n result = normalize(result);\n result.copyAttributes(nonSIPath, false);\n result.remove();\n return result;\n}\nexport function offsetPath(path, offset, join, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, false, function (strategy) { return offsetPathWithStrategy(path, offset, join, limit, strategy); });\n }\n return offsetPathWithStrategy(path, offset, join, limit, getStrategy(algorithm));\n}\nfunction offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetStrokeAdaptive(path, offset, join, cap, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleStroke(nonSIPath, offset, join, cap, limit, strategy);\n }\n else {\n var children = nonSIPath.children.flatMap(function (c) {\n return offsetSimpleStroke(c, offset, join, cap, limit, strategy);\n });\n result = children.reduce(function (c1, c2) { return c1.unite(c2, { insert: false }); });\n }\n result.strokeWidth = 0;\n result.fillColor = nonSIPath.strokeColor;\n result.shadowBlur = nonSIPath.shadowBlur;\n result.shadowColor = nonSIPath.shadowColor;\n result.shadowOffset = nonSIPath.shadowOffset;\n return result;\n}\nfunction offsetStrokeAdaptive(path, offset, join, cap, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', cap, limit, baseStrategy); });\n }\n if (cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, 'round', limit, baseStrategy); });\n }\n if (join !== 'round' && cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', 'round', limit, baseStrategy); });\n }\n if (candidates.length === 0) {\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, true, candidates);\n}\nexport function offsetStroke(path, offset, join, cap, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, true, function (strategy) { return offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy); });\n }\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, getStrategy(algorithm));\n}\n//# sourceMappingURL=offset_core.js.map","import paper from 'paper';\nimport { analyzeOffsetQuality, offsetPath as createOffsetPath, offsetStroke as createOffsetStroke } from './offset_core';\nfunction resolveOptions(options) {\n var _a, _b, _c, _d;\n return {\n join: (_a = options === null || options === void 0 ? void 0 : options.join) !== null && _a !== void 0 ? _a : 'miter',\n cap: (_b = options === null || options === void 0 ? void 0 : options.cap) !== null && _b !== void 0 ? _b : 'butt',\n limit: (_c = options === null || options === void 0 ? void 0 : options.limit) !== null && _c !== void 0 ? _c : 10,\n algorithm: (_d = options === null || options === void 0 ? void 0 : options.algorithm) !== null && _d !== void 0 ? _d : 'auto',\n };\n}\nfunction insertResult(source, result, options) {\n if (!options || options.insert !== false) {\n (source.parent || paper.project.activeLayer).addChild(result);\n }\n}\nexport function offset(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetPath(path, distance, resolvedOptions.join, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function offsetStroke(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetStroke(path, distance, resolvedOptions.join, resolvedOptions.cap, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function analyze(source, result, distance, options) {\n return analyzeOffsetQuality(source, result, distance, options || {});\n}\nvar PaperOffset = /** @class */ (function () {\n function PaperOffset() {\n }\n PaperOffset.offset = function (path, distance, options) {\n return offset(path, distance, options);\n };\n PaperOffset.offsetStroke = function (path, distance, options) {\n return offsetStroke(path, distance, options);\n };\n PaperOffset.analyze = function (source, result, distance, options) {\n return analyze(source, result, distance, options);\n };\n return PaperOffset;\n}());\nexport { PaperOffset };\n/**\n * @deprecated EXTEND existing paper module is not recommend anymore\n */\nexport default function ExtendPaperJs(paperNs) {\n paperNs.Path.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.Path.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n}\nexport { ExtendPaperJs as extendPaperJs };\n//# sourceMappingURL=index.js.map"],"names":["offsetStroke","createOffsetPath","createOffsetStroke"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.umd.js","sources":["../.build/lib/offset_core.js","../.build/lib/index.js"],"sourcesContent":["import paper from 'paper';\nvar MAX_RECURSION_TIME = 20;\nvar STRATEGIES = [\n {\n algorithm: 'adaptive',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: true,\n },\n {\n algorithm: 'robust',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: true,\n simplifySelfIntersectingStroke: true,\n adaptiveFallback: false,\n },\n {\n algorithm: 'split',\n splitSelfIntersectingCurves: true,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n {\n algorithm: 'legacy',\n splitSelfIntersectingCurves: false,\n guardInsideJoins: false,\n simplifySelfIntersectingStroke: false,\n adaptiveFallback: false,\n },\n];\nfunction getStrategy(algorithm) {\n if (algorithm === 'auto') {\n return STRATEGIES[0];\n }\n return STRATEGIES.filter(function (strategy) { return strategy.algorithm === algorithm; })[0] || STRATEGIES[0];\n}\n/**\n * Offset the start/terminal segment of a bezier curve\n * @param segment segment to offset\n * @param curve curve to offset\n * @param handleNormal the normal of the the line formed of two handles\n * @param offset offset value\n */\nfunction offsetSegment(segment, curve, handleNormal, offset) {\n var isFirst = segment.curve === curve;\n // get offset vector\n var offsetVector = (curve.getNormalAtTime(isFirst ? 0 : 1)).multiply(offset);\n // get offset point\n var point = segment.point.add(offsetVector);\n var newSegment = new paper.Segment(point);\n // handleOut for start segment & handleIn for terminal segment\n var handle = (isFirst ? 'handleOut' : 'handleIn');\n newSegment[handle] = segment[handle].add(handleNormal.subtract(offsetVector).divide(2));\n return newSegment;\n}\n/**\n * Adaptive offset a curve by repeatly apply the approximation proposed by Tiller and Hanson.\n * @param curve curve to offset\n * @param offset offset value\n */\nfunction adaptiveOffsetCurve(curve, offset, strategy, recursionTime) {\n if (recursionTime === void 0) { recursionTime = 0; }\n var hNormal = (new paper.Curve(curve.segment1.handleOut.add(curve.segment1.point), new paper.Point(0, 0), new paper.Point(0, 0), curve.segment2.handleIn.add(curve.segment2.point))).getNormalAtTime(0.5).multiply(offset);\n var segment1 = offsetSegment(curve.segment1, curve, hNormal, offset);\n var segment2 = offsetSegment(curve.segment2, curve, hNormal, offset);\n if (recursionTime > MAX_RECURSION_TIME) {\n return [segment1, segment2];\n }\n // divide && re-offset\n var offsetCurve = new paper.Curve(segment1, segment2);\n var offsetCurveIntersections = offsetCurve.getIntersections(offsetCurve);\n var threshold = Math.min(Math.abs(offset) / 10, 1);\n var midOffset = offsetCurve.getPointAtTime(0.5).getDistance(curve.getPointAtTime(0.5));\n var needsSplit = strategy.splitSelfIntersectingCurves\n ? offsetCurveIntersections.length > 0 || Math.abs(midOffset - Math.abs(offset)) > threshold\n : offsetCurveIntersections.length === 0 && Math.abs(midOffset - Math.abs(offset)) > threshold;\n if (needsSplit) {\n var subCurve = curve.divideAtTime(0.5);\n if (subCurve != null) {\n return adaptiveOffsetCurve(curve, offset, strategy, recursionTime + 1)\n .concat(adaptiveOffsetCurve(subCurve, offset, strategy, recursionTime + 1));\n }\n }\n return [segment1, segment2];\n}\n/**\n * Create a round join segment between two adjacent segments.\n */\nfunction makeRoundJoin(segment1, segment2, originPoint, radius) {\n var through = segment1.point.subtract(originPoint).add(segment2.point.subtract(originPoint))\n .normalize(Math.abs(radius)).add(originPoint);\n var arc = new paper.Path.Arc({ from: segment1.point, to: segment2.point, through: through, insert: false });\n segment1.handleOut = arc.firstSegment.handleOut;\n segment2.handleIn = arc.lastSegment.handleIn;\n return arc.segments.length === 3 ? arc.segments[1] : null;\n}\nfunction det(p1, p2) {\n return p1.x * p2.y - p1.y * p2.x;\n}\n/**\n * Get the intersection point of point based lines\n */\nfunction getPointLineIntersections(p1, p2, p3, p4) {\n var l1 = p1.subtract(p2);\n var l2 = p3.subtract(p4);\n var dl1 = det(p1, p2);\n var dl2 = det(p3, p4);\n return new paper.Point(dl1 * l2.x - l1.x * dl2, dl1 * l2.y - l1.y * dl2).divide(det(l1, l2));\n}\n/**\n * Connect two adjacent bezier curve, each curve is represented by two segments,\n * create different types of joins or simply removal redundant segment.\n */\nfunction isOutsideJoin(origin, offset) {\n var _a;\n var previousCurve = (_a = origin.previous) === null || _a === void 0 ? void 0 : _a.curve;\n var nextCurve = origin.curve;\n if (!previousCurve || !nextCurve) {\n return true;\n }\n var tangentIn = previousCurve.getTangentAtTime(1);\n var tangentOut = nextCurve.getTangentAtTime(0);\n var turn = det(tangentIn, tangentOut);\n return Math.abs(turn) < 1e-9 || turn * offset > 0;\n}\nfunction connectAdjacentBezier(segments1, segments2, origin, joinType, offset, limit, closed, strategy) {\n var curve1 = new paper.Curve(segments1[0], segments1[1]);\n var curve2 = new paper.Curve(segments2[0], segments2[1]);\n var intersection = curve1.getIntersections(curve2);\n var distance = segments1[1].point.getDistance(segments2[0].point);\n var shouldJoin = !closed || !strategy.guardInsideJoins || isOutsideJoin(origin, offset);\n if (origin.isSmooth()) {\n segments2[0].handleOut = segments2[0].handleOut.project(origin.handleOut);\n segments2[0].handleIn = segments1[1].handleIn.project(origin.handleIn);\n segments2[0].point = segments1[1].point.add(segments2[0].point).divide(2);\n segments1.pop();\n }\n else {\n if (intersection.length === 0) {\n if (distance > Math.abs(offset) * 0.1) {\n // connect\n switch (joinType) {\n case 'miter':\n if (shouldJoin) {\n var join = getPointLineIntersections(curve1.point2, curve1.point2.add(curve1.getTangentAtTime(1)), curve2.point1, curve2.point1.add(curve2.getTangentAtTime(0)));\n // prevent sharp angle\n var joinOffset = Math.max(join.getDistance(curve1.point2), join.getDistance(curve2.point1));\n if (joinOffset < Math.abs(offset) * limit) {\n segments1.push(new paper.Segment(join));\n }\n }\n break;\n case 'round':\n if (shouldJoin) {\n var mid = makeRoundJoin(segments1[1], segments2[0], origin.point, offset);\n if (mid) {\n segments1.push(mid);\n }\n }\n break;\n default: break;\n }\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n else {\n var second1 = curve1.divideAt(intersection[0]);\n if (second1) {\n var join = second1.segment1;\n var second2 = curve2.divideAt(curve2.getIntersections(curve1)[0]);\n join.handleOut = second2 ? second2.segment1.handleOut : segments2[0].handleOut;\n segments1.pop();\n segments2[0] = join;\n }\n else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n }\n}\n/**\n * Connect all the segments together.\n */\nfunction connectBeziers(rawSegments, join, source, offset, limit, strategy) {\n var originSegments = source.segments;\n var first = rawSegments[0].slice();\n for (var i = 0; i < rawSegments.length - 1; ++i) {\n connectAdjacentBezier(rawSegments[i], rawSegments[i + 1], originSegments[i + 1], join, offset, limit, source.closed, strategy);\n }\n if (source.closed) {\n connectAdjacentBezier(rawSegments[rawSegments.length - 1], first, originSegments[0], join, offset, limit, source.closed, strategy);\n rawSegments[0][0] = first[0];\n }\n return rawSegments;\n}\nfunction reduceSingleChildCompoundPath(path) {\n if (path.children.length === 1) {\n path = path.children[0];\n path.remove(); // remove from parent, this is critical, or the style attributes will be ignored\n }\n return path;\n}\n/** Normalize a path, always clockwise, non-self-intersection, ignore really small components, and no one-component compound path. */\nfunction normalize(path, areaThreshold) {\n if (areaThreshold === void 0) { areaThreshold = 0.01; }\n if (path.closed) {\n var ignoreArea_1 = Math.abs(path.area * areaThreshold);\n if (!path.clockwise) {\n path.reverse();\n }\n path = path.unite(path, { insert: false });\n path = path.resolveCrossings();\n if (path instanceof paper.CompoundPath) {\n path.children.filter(function (c) { return Math.abs(c.area) < ignoreArea_1; }).forEach(function (c) { return c.remove(); });\n if (path.children.length === 1) {\n return reduceSingleChildCompoundPath(path);\n }\n }\n }\n return path;\n}\nfunction cleanupStrokeOutline(path, offset, strategy) {\n var result = normalize(path);\n if (strategy.simplifySelfIntersectingStroke && countSelfIntersections(result) > 0) {\n var simplified = result.clone({ insert: false });\n simplified.simplify(Math.max(Math.min(Math.abs(offset) * 0.02, 0.5), 0.1));\n result = normalize(simplified);\n }\n return result;\n}\nfunction isSameDirection(partialPath, fullPath) {\n var offset1 = partialPath.segments[0].location.offset;\n var offset2 = partialPath.segments[Math.max(1, Math.floor(partialPath.segments.length / 2))].location.offset;\n var sampleOffset = (offset1 + offset2) / 3;\n var originOffset1 = fullPath.getNearestLocation(partialPath.getPointAt(sampleOffset)).offset;\n var originOffset2 = fullPath.getNearestLocation(partialPath.getPointAt(2 * sampleOffset)).offset;\n return originOffset1 < originOffset2;\n}\n/** Remove self intersection when offset is negative by point direction dectection. */\nfunction removeIntersection(path) {\n if (path.closed) {\n var newPath = path.unite(path, { insert: false });\n if (newPath instanceof paper.CompoundPath) {\n newPath.children.filter(function (c) {\n if (c.segments.length > 1) {\n return !isSameDirection(c, path);\n }\n else {\n return true;\n }\n }).forEach(function (c) { return c.remove(); });\n return reduceSingleChildCompoundPath(newPath);\n }\n }\n return path;\n}\nfunction getSegments(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children.map(function (c) { return c.segments; }).flat();\n }\n else {\n return path.segments;\n }\n}\n/**\n * Remove impossible segments in negative offset condition.\n */\nfunction removeOutsiders(newPath, path) {\n var segments = getSegments(newPath).slice();\n segments.forEach(function (segment) {\n if (!path.contains(segment.point)) {\n segment.remove();\n }\n });\n}\nfunction preparePath(path, offset) {\n var source = path.clone({ insert: false });\n source.reduce({});\n if (path.closed && !path.clockwise) {\n source.reverse();\n offset = -offset;\n }\n return [source, offset];\n}\nfunction offsetSimpleShape(path, offset, join, limit, strategy) {\n var _a;\n var source;\n _a = preparePath(path, offset), source = _a[0], offset = _a[1];\n var curves = source.curves.slice();\n var offsetCurves = curves.map(function (curve) { return adaptiveOffsetCurve(curve, offset, strategy); }).flat();\n var raws = [];\n for (var i = 0; i < offsetCurves.length; i += 2) {\n raws.push(offsetCurves.slice(i, i + 2));\n }\n var segments = connectBeziers(raws, join, source, offset, limit, strategy).flat();\n var newPath = removeIntersection(new paper.Path({ segments: segments, insert: false, closed: path.closed }));\n newPath.reduce({});\n if (source.closed && ((source.clockwise && offset < 0) || (!source.clockwise && offset > 0))) {\n removeOutsiders(newPath, path);\n }\n // recovery path\n if (source.clockwise !== path.clockwise) {\n newPath.reverse();\n }\n return normalize(newPath);\n}\nfunction makeRoundCap(from, to, offset) {\n var origin = from.point.add(to.point).divide(2);\n var normal = to.point.subtract(from.point).rotate(-90, new paper.Point(0, 0)).normalize(offset);\n var through = origin.add(normal);\n var arc = new paper.Path.Arc({ from: from.point, to: to.point, through: through, insert: false });\n return arc.segments;\n}\nfunction connectSide(outer, inner, offset, cap) {\n if (outer instanceof paper.CompoundPath) {\n var cs = outer.children.map(function (c) { return ({ c: c, a: Math.abs(c.area) }); });\n cs = cs.sort(function (c1, c2) { return c2.a - c1.a; });\n outer = cs[0].c;\n }\n var oSegments = outer.segments.slice();\n var iSegments = inner.segments.slice();\n switch (cap) {\n case 'round':\n var heads = makeRoundCap(iSegments[iSegments.length - 1], oSegments[0], offset);\n var tails = makeRoundCap(oSegments[oSegments.length - 1], iSegments[0], offset);\n var result = new paper.Path({ segments: heads.concat(oSegments, tails, iSegments), closed: true, insert: false });\n result.reduce({});\n return result;\n default: return new paper.Path({ segments: oSegments.concat(iSegments), closed: true, insert: false });\n }\n}\nfunction offsetSimpleStroke(path, offset, join, cap, limit, strategy) {\n offset = path.closed && !path.clockwise ? -offset : offset;\n var positiveOffset = offsetSimpleShape(path, offset, join, limit, strategy);\n var negativeOffset = offsetSimpleShape(path, -offset, join, limit, strategy);\n if (path.closed) {\n return cleanupStrokeOutline(positiveOffset.subtract(negativeOffset, { insert: false }), offset, strategy);\n }\n else {\n var inner = negativeOffset;\n var holes = new Array();\n if (negativeOffset instanceof paper.CompoundPath) {\n holes = negativeOffset.children.filter(function (c) { return c.closed; });\n holes.forEach(function (h) { return h.remove(); });\n inner = negativeOffset.children[0];\n }\n inner.reverse();\n var final = connectSide(positiveOffset, inner, offset, cap);\n if (holes.length > 0) {\n for (var _i = 0, holes_1 = holes; _i < holes_1.length; _i++) {\n var hole = holes_1[_i];\n final = final.subtract(hole, { insert: false });\n }\n }\n return cleanupStrokeOutline(final, offset, strategy);\n }\n}\nfunction getChildPaths(path) {\n if (path instanceof paper.CompoundPath) {\n return path.children;\n }\n return [path];\n}\nfunction finiteNumber(value) {\n return Number.isFinite(value);\n}\nfunction countSelfIntersections(path) {\n if (!path.closed) {\n return 0;\n }\n try {\n var children_1 = getChildPaths(path);\n var count_1 = 0;\n children_1.forEach(function (child, index) {\n count_1 += child.getIntersections(child).length;\n for (var i = index + 1; i < children_1.length; i += 1) {\n count_1 += child.getIntersections(children_1[i]).length;\n }\n });\n return count_1;\n }\n catch (error) {\n return 0;\n }\n}\nfunction samplePoints(path, maxPerChild) {\n if (maxPerChild === void 0) { maxPerChild = 16; }\n var points = [];\n getChildPaths(path).forEach(function (child) {\n if (!child.length || child.segments.length === 0) {\n return;\n }\n var count = Math.min(maxPerChild, Math.max(4, Math.ceil(child.length / 30)));\n for (var i = 0; i < count; i += 1) {\n var ratio = child.closed ? i / count : i / Math.max(count - 1, 1);\n var point = child.getPointAt(child.length * ratio);\n if (point) {\n points.push(point);\n }\n }\n });\n return points;\n}\nfunction containsPoint(path, point) {\n try {\n return path.contains(point);\n }\n catch (error) {\n return false;\n }\n}\nfunction distanceToPath(path, point) {\n try {\n var nearest = path.getNearestPoint(point);\n return nearest ? nearest.getDistance(point) : Number.POSITIVE_INFINITY;\n }\n catch (error) {\n return Number.POSITIVE_INFINITY;\n }\n}\nfunction addWarning(warnings, warning) {\n if (warnings.indexOf(warning) === -1) {\n warnings.push(warning);\n }\n}\nexport function analyzeOffsetQuality(source, result, offset, options) {\n if (options === void 0) { options = {}; }\n var warnings = new Array();\n var expectedClosed = options.stroke ? true : source.closed;\n var segmentCount = getSegments(result).length;\n var area = Math.abs(result.area || 0);\n var absOffset = Math.abs(offset);\n var score = segmentCount * 0.01;\n var containmentErrors = 0;\n var distanceErrors = 0;\n var bounds = result.bounds;\n if (segmentCount === 0) {\n score += 100000;\n addWarning(warnings, 'empty-result');\n }\n if (!bounds || !finiteNumber(bounds.x) || !finiteNumber(bounds.y) || !finiteNumber(bounds.width) || !finiteNumber(bounds.height)) {\n score += 100000;\n addWarning(warnings, 'non-finite-bounds');\n }\n if (result.closed !== expectedClosed) {\n score += 50000;\n addWarning(warnings, 'unexpected-closed-state');\n }\n var selfIntersections = countSelfIntersections(result);\n if (selfIntersections > 0) {\n score += selfIntersections * 1000;\n addWarning(warnings, 'self-intersection');\n }\n if (source.closed && result.closed && !options.stroke) {\n var sourceArea = Math.abs(source.area || 0);\n if (sourceArea > 0 && offset > 0 && area < sourceArea * 0.95) {\n score += ((sourceArea - area) / sourceArea) * 2000;\n addWarning(warnings, 'positive-offset-area-shrank');\n }\n if (sourceArea > 0 && offset < 0 && area > sourceArea * 1.05) {\n score += ((area - sourceArea) / sourceArea) * 2000;\n addWarning(warnings, 'negative-offset-area-grew');\n }\n if (sourceArea > 0 && offset < 0) {\n var areaRatio = area / sourceArea;\n if (areaRatio < 0.25) {\n score += (0.25 - areaRatio) * 4000;\n addWarning(warnings, 'negative-offset-collapse');\n }\n }\n if (sourceArea > 0 && offset > 0) {\n var sourceBounds = source.bounds;\n var centerShift = result.bounds.center.getDistance(sourceBounds.center);\n var centerTolerance = Math.max(absOffset * 1.15, Math.min(sourceBounds.width, sourceBounds.height) * 0.08);\n if (centerShift > centerTolerance) {\n score += (centerShift - centerTolerance) * 80;\n addWarning(warnings, 'offset-center-shift');\n }\n }\n var containmentTolerance_1 = Math.max(absOffset * 0.08, 0.5);\n var containmentSamples = offset >= 0 ? samplePoints(source) : samplePoints(result);\n containmentSamples.forEach(function (point) {\n var container = offset >= 0 ? result : source;\n if (!containsPoint(container, point) && distanceToPath(container, point) > containmentTolerance_1) {\n containmentErrors += 1;\n }\n });\n if (containmentErrors > 0) {\n score += containmentErrors * 150;\n addWarning(warnings, offset >= 0 ? 'source-outside-positive-offset' : 'negative-offset-outside-source');\n }\n }\n if (absOffset > 0.001) {\n var distanceTolerance_1 = Math.max(absOffset * 0.18, 0.75);\n samplePoints(result).forEach(function (point) {\n var distance = distanceToPath(source, point);\n if (finiteNumber(distance) && distance < distanceTolerance_1) {\n distanceErrors += 1;\n }\n });\n if (distanceErrors > 0) {\n score += distanceErrors * 35;\n addWarning(warnings, 'offset-distance-collapse');\n }\n }\n return {\n score: score,\n warnings: warnings,\n selfIntersections: selfIntersections,\n containmentErrors: containmentErrors,\n distanceErrors: distanceErrors,\n segmentCount: segmentCount,\n area: area,\n };\n}\nfunction pickBestResult(source, offset, stroke, makeResult) {\n var bestResult = null;\n var bestQuality = null;\n var firstError = null;\n STRATEGIES.forEach(function (strategy) {\n try {\n var result = makeResult(strategy);\n var quality = analyzeOffsetQuality(source, result, offset, { stroke: stroke });\n quality.algorithm = strategy.algorithm;\n if (!bestQuality || quality.score < bestQuality.score) {\n bestResult = result;\n bestQuality = quality;\n }\n }\n catch (error) {\n if (!firstError && error instanceof Error) {\n firstError = error;\n }\n }\n });\n if (!bestResult) {\n throw firstError || new Error('Unable to offset path with any algorithm');\n }\n return bestResult;\n}\nfunction getNonSelfIntersectionPath(path) {\n if (path.closed) {\n return path.unite(path, { insert: false });\n }\n return path;\n}\nfunction offsetCompoundChild(child, parent, offset, join, limit, strategy) {\n if (child.segments.length <= 1) {\n return null;\n }\n if (!isSameDirection(child, parent)) {\n child.reverse();\n }\n var childOffset = offsetSimpleShape(child, offset, join, limit, strategy);\n childOffset = normalize(childOffset);\n if (childOffset.clockwise !== child.clockwise) {\n childOffset.reverse();\n }\n if (childOffset instanceof paper.CompoundPath) {\n childOffset.applyMatrix = true;\n return childOffset.children;\n }\n return childOffset;\n}\nfunction offsetCompoundShape(path, offset, join, limit, strategy) {\n var children = path.children.filter(function (child) { return child.segments.length > 1; });\n var outers = children.filter(function (child) { return child.clockwise; });\n var holes = children.filter(function (child) { return !child.clockwise; });\n if (outers.length === 0 || holes.length === 0) {\n var offsetParts = children.map(function (child) { return offsetCompoundChild(child, path, offset, join, limit, strategy); });\n return new paper.CompoundPath({ children: offsetParts.flat().filter(function (child) { return !!child; }), insert: false });\n }\n var pieces = outers.map(function (outer) {\n var outerOffset = offsetCompoundChild(outer, path, offset, join, limit, strategy);\n var result = outerOffset instanceof Array\n ? new paper.CompoundPath({ children: outerOffset, insert: false })\n : outerOffset;\n holes.forEach(function (hole) {\n if (!outer.contains(hole.bounds.center)) {\n return;\n }\n var holeOffset = offsetCompoundChild(hole, path, offset, join, limit, strategy);\n if (!holeOffset) {\n return;\n }\n var holePath = holeOffset instanceof Array\n ? new paper.CompoundPath({ children: holeOffset, insert: false })\n : holeOffset;\n var next = result.subtract(holePath, { insert: false });\n result.remove();\n holePath.remove();\n result = next;\n });\n return result;\n });\n if (pieces.length === 1) {\n return pieces[0];\n }\n return pieces.slice(1).reduce(function (result, piece) {\n var next = result.unite(piece, { insert: false });\n result.remove();\n piece.remove();\n return next;\n }, pieces[0]);\n}\nfunction hasCompoundHoles(path) {\n if (!(path instanceof paper.CompoundPath)) {\n return false;\n }\n var children = path.children;\n return children.some(function (child) { return child.clockwise; }) && children.some(function (child) { return !child.clockwise; });\n}\nfunction withoutAdaptiveFallback(strategy) {\n return {\n algorithm: 'robust',\n splitSelfIntersectingCurves: strategy.splitSelfIntersectingCurves,\n guardInsideJoins: strategy.guardInsideJoins,\n simplifySelfIntersectingStroke: strategy.simplifySelfIntersectingStroke,\n adaptiveFallback: false,\n };\n}\nfunction addAdaptiveCandidate(candidates, makeResult) {\n try {\n candidates.push(makeResult());\n }\n catch (error) {\n // Keep adaptive mode opportunistic: a failed fallback should not hide valid strict results.\n }\n}\nfunction pickBestCandidate(source, offset, stroke, candidates) {\n var bestResult = candidates[0];\n var bestQuality = analyzeOffsetQuality(source, bestResult, offset, { stroke: stroke });\n for (var i = 1; i < candidates.length; i += 1) {\n var quality = analyzeOffsetQuality(source, candidates[i], offset, { stroke: stroke });\n if (quality.score < bestQuality.score) {\n bestResult = candidates[i];\n bestQuality = quality;\n }\n }\n return bestResult;\n}\nfunction offsetPathAdaptive(path, offset, join, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, offset, 'round', limit, baseStrategy); });\n }\n if (path.closed && offset < 0) {\n [0.8, 0.65, 0.5, 0.35, 0.25].forEach(function (factor) {\n var fallbackOffset = offset * factor;\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, join, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetPathWithStrategy(path, fallbackOffset, 'round', limit, baseStrategy); });\n }\n });\n }\n if (candidates.length === 0) {\n return offsetPathWithStrategy(path, offset, join, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, false, candidates);\n}\nfunction offsetPathWithStrategy(path, offset, join, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetPathAdaptive(path, offset, join, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var shouldNormalizeResult = !hasCompoundHoles(nonSIPath);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleShape(nonSIPath, offset, join, limit, strategy);\n }\n else {\n result = offsetCompoundShape(nonSIPath, offset, join, limit, strategy);\n }\n if (shouldNormalizeResult) {\n result = normalize(result);\n }\n result.copyAttributes(nonSIPath, false);\n result.remove();\n return result;\n}\nexport function offsetPath(path, offset, join, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, false, function (strategy) { return offsetPathWithStrategy(path, offset, join, limit, strategy); });\n }\n return offsetPathWithStrategy(path, offset, join, limit, getStrategy(algorithm));\n}\nfunction offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy) {\n if (strategy.adaptiveFallback) {\n return offsetStrokeAdaptive(path, offset, join, cap, limit, strategy);\n }\n var nonSIPath = getNonSelfIntersectionPath(path);\n var result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleStroke(nonSIPath, offset, join, cap, limit, strategy);\n }\n else {\n var children = nonSIPath.children.flatMap(function (c) {\n return offsetSimpleStroke(c, offset, join, cap, limit, strategy);\n });\n result = children.reduce(function (c1, c2) { return c1.unite(c2, { insert: false }); });\n }\n result.strokeWidth = 0;\n result.fillColor = nonSIPath.strokeColor;\n result.shadowBlur = nonSIPath.shadowBlur;\n result.shadowColor = nonSIPath.shadowColor;\n result.shadowOffset = nonSIPath.shadowOffset;\n return result;\n}\nfunction offsetStrokeAdaptive(path, offset, join, cap, limit, strategy) {\n var baseStrategy = withoutAdaptiveFallback(strategy);\n var candidates = new Array();\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy); });\n if (join !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', cap, limit, baseStrategy); });\n }\n if (cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, join, 'round', limit, baseStrategy); });\n }\n if (join !== 'round' && cap !== 'round') {\n addAdaptiveCandidate(candidates, function () { return offsetStrokeWithStrategy(path, offset, 'round', 'round', limit, baseStrategy); });\n }\n if (candidates.length === 0) {\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, baseStrategy);\n }\n return pickBestCandidate(path, offset, true, candidates);\n}\nexport function offsetStroke(path, offset, join, cap, limit, algorithm) {\n if (algorithm === void 0) { algorithm = 'auto'; }\n if (algorithm === 'auto') {\n return pickBestResult(path, offset, true, function (strategy) { return offsetStrokeWithStrategy(path, offset, join, cap, limit, strategy); });\n }\n return offsetStrokeWithStrategy(path, offset, join, cap, limit, getStrategy(algorithm));\n}\n//# sourceMappingURL=offset_core.js.map","import paper from 'paper';\nimport { analyzeOffsetQuality, offsetPath as createOffsetPath, offsetStroke as createOffsetStroke } from './offset_core';\nfunction resolveOptions(options) {\n var _a, _b, _c, _d;\n return {\n join: (_a = options === null || options === void 0 ? void 0 : options.join) !== null && _a !== void 0 ? _a : 'miter',\n cap: (_b = options === null || options === void 0 ? void 0 : options.cap) !== null && _b !== void 0 ? _b : 'butt',\n limit: (_c = options === null || options === void 0 ? void 0 : options.limit) !== null && _c !== void 0 ? _c : 10,\n algorithm: (_d = options === null || options === void 0 ? void 0 : options.algorithm) !== null && _d !== void 0 ? _d : 'auto',\n };\n}\nfunction insertResult(source, result, options) {\n if (!options || options.insert !== false) {\n (source.parent || paper.project.activeLayer).addChild(result);\n }\n}\nexport function offset(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetPath(path, distance, resolvedOptions.join, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function offsetStroke(path, distance, options) {\n var resolvedOptions = resolveOptions(options);\n var newPath = createOffsetStroke(path, distance, resolvedOptions.join, resolvedOptions.cap, resolvedOptions.limit, resolvedOptions.algorithm);\n insertResult(path, newPath, options);\n return newPath;\n}\nexport function analyze(source, result, distance, options) {\n return analyzeOffsetQuality(source, result, distance, options || {});\n}\nvar PaperOffset = /** @class */ (function () {\n function PaperOffset() {\n }\n PaperOffset.offset = function (path, distance, options) {\n return offset(path, distance, options);\n };\n PaperOffset.offsetStroke = function (path, distance, options) {\n return offsetStroke(path, distance, options);\n };\n PaperOffset.analyze = function (source, result, distance, options) {\n return analyze(source, result, distance, options);\n };\n return PaperOffset;\n}());\nexport { PaperOffset };\n/**\n * @deprecated EXTEND existing paper module is not recommend anymore\n */\nexport default function ExtendPaperJs(paperNs) {\n paperNs.Path.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.Path.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offset = function (distance, options) {\n return offset(this, distance, options);\n };\n paperNs.CompoundPath.prototype.offsetStroke = function (distance, options) {\n return offsetStroke(this, distance, options);\n };\n}\nexport { ExtendPaperJs as extendPaperJs };\n//# sourceMappingURL=index.js.map"],"names":["offsetStroke","createOffsetPath","createOffsetStroke"],"mappings":"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"}
|
package/dist/index.umd.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("paper")):"function"==typeof define&&define.amd?define(["exports","paper"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).paperjsOffset={},e.paper)}(this,function(e,t){"use strict";var n=[{algorithm:"adaptive",splitSelfIntersectingCurves:!0,guardInsideJoins:!0,simplifySelfIntersectingStroke:!0,adaptiveFallback:!0},{algorithm:"robust",splitSelfIntersectingCurves:!0,guardInsideJoins:!0,simplifySelfIntersectingStroke:!0,adaptiveFallback:!1},{algorithm:"split",splitSelfIntersectingCurves:!0,guardInsideJoins:!1,simplifySelfIntersectingStroke:!1,adaptiveFallback:!1},{algorithm:"legacy",splitSelfIntersectingCurves:!1,guardInsideJoins:!1,simplifySelfIntersectingStroke:!1,adaptiveFallback:!1}];function r(e){return"auto"===e?n[0]:n.filter(function(t){return t.algorithm===e})[0]||n[0]}function i(e,n,r,i){var o=e.curve===n,a=n.getNormalAtTime(o?0:1).multiply(i),s=e.point.add(a),u=new t.Segment(s),c=o?"handleOut":"handleIn";return u[c]=e[c].add(r.subtract(a).divide(2)),u}function o(e,n,r,a){void 0===a&&(a=0);var s=new t.Curve(e.segment1.handleOut.add(e.segment1.point),new t.Point(0,0),new t.Point(0,0),e.segment2.handleIn.add(e.segment2.point)).getNormalAtTime(.5).multiply(n),u=i(e.segment1,e,s,n),c=i(e.segment2,e,s,n);if(a>20)return[u,c];var f=new t.Curve(u,c),l=f.getIntersections(f),d=Math.min(Math.abs(n)/10,1),h=f.getPointAtTime(.5).getDistance(e.getPointAtTime(.5));if(r.splitSelfIntersectingCurves?l.length>0||Math.abs(h-Math.abs(n))>d:0===l.length&&Math.abs(h-Math.abs(n))>d){var p=e.divideAtTime(.5);if(null!=p)return o(e,n,r,a+1).concat(o(p,n,r,a+1))}return[u,c]}function a(e,t){return e.x*t.y-e.y*t.x}function s(e,n,r,i,o,s,u,c){var f,l,d,h,p,g,v,m,b,I,y,w,k,P,M=new t.Curve(e[0],e[1]),S=new t.Curve(n[0],n[1]),C=M.getIntersections(S),O=e[1].point.getDistance(n[0].point),A=!u||!c.guardInsideJoins||function(e,t){var n,r=null===(n=e.previous)||void 0===n?void 0:n.curve,i=e.curve;if(!r||!i)return!0;var o=a(r.getTangentAtTime(1),i.getTangentAtTime(0));return Math.abs(o)<1e-9||o*t>0}(r,o);if(r.isSmooth())n[0].handleOut=n[0].handleOut.project(r.handleOut),n[0].handleIn=e[1].handleIn.project(r.handleIn),n[0].point=e[1].point.add(n[0].point).divide(2),e.pop();else if(0===C.length)if(O>.1*Math.abs(o))switch(i){case"miter":if(A){var T=(v=M.point2,m=M.point2.add(M.getTangentAtTime(1)),b=S.point1,I=S.point1.add(S.getTangentAtTime(0)),y=v.subtract(m),w=b.subtract(I),k=a(v,m),P=a(b,I),new t.Point(k*w.x-y.x*P,k*w.y-y.y*P).divide(a(y,w)));Math.max(T.getDistance(M.point2),T.getDistance(S.point1))<Math.abs(o)*s&&e.push(new t.Segment(T))}break;case"round":if(A){var x=(f=e[1],l=n[0],d=r.point,h=o,p=f.point.subtract(d).add(l.point.subtract(d)).normalize(Math.abs(h)).add(d),g=new t.Path.Arc({from:f.point,to:l.point,through:p,insert:!1}),f.handleOut=g.firstSegment.handleOut,l.handleIn=g.lastSegment.handleIn,3===g.segments.length?g.segments[1]:null);x&&e.push(x)}}else n[0].handleIn=e[1].handleIn,e.pop();else{var E=M.divideAt(C[0]);if(E){T=E.segment1;var j=S.divideAt(S.getIntersections(M)[0]);T.handleOut=j?j.segment1.handleOut:n[0].handleOut,e.pop(),n[0]=T}else n[0].handleIn=e[1].handleIn,e.pop()}}function u(e){return 1===e.children.length&&(e=e.children[0]).remove(),e}function c(e,n){if(void 0===n&&(n=.01),e.closed){var r=Math.abs(e.area*n);if(e.clockwise||e.reverse(),(e=(e=e.unite(e,{insert:!1})).resolveCrossings())instanceof t.CompoundPath&&(e.children.filter(function(e){return Math.abs(e.area)<r}).forEach(function(e){return e.remove()}),1===e.children.length))return u(e)}return e}function f(e,t,n){var r=c(e);if(n.simplifySelfIntersectingStroke&&b(r)>0){var i=r.clone({insert:!1});i.simplify(Math.max(Math.min(.02*Math.abs(t),.5),.1)),r=c(i)}return r}function l(e,t){var n=(e.segments[0].location.offset+e.segments[Math.max(1,Math.floor(e.segments.length/2))].location.offset)/3;return t.getNearestLocation(e.getPointAt(n)).offset<t.getNearestLocation(e.getPointAt(2*n)).offset}function d(e){return e instanceof t.CompoundPath?e.children.map(function(e){return e.segments}).flat():e.segments}function h(e,n,r,i,a){var f,h;f=function(e,t){var n=e.clone({insert:!1});return n.reduce({}),e.closed&&!e.clockwise&&(n.reverse(),t=-t),[n,t]}(e,n),h=f[0],n=f[1];for(var p=h.curves.slice().map(function(e){return o(e,n,a)}).flat(),g=[],v=0;v<p.length;v+=2)g.push(p.slice(v,v+2));var m=function(e,t,n,r,i,o){for(var a=n.segments,u=e[0].slice(),c=0;c<e.length-1;++c)s(e[c],e[c+1],a[c+1],t,r,i,n.closed,o);return n.closed&&(s(e[e.length-1],u,a[0],t,r,i,n.closed,o),e[0][0]=u[0]),e}(g,r,h,n,i,a).flat(),b=function(e){if(e.closed){var n=e.unite(e,{insert:!1});if(n instanceof t.CompoundPath)return n.children.filter(function(t){return!(t.segments.length>1&&l(t,e))}).forEach(function(e){return e.remove()}),u(n)}return e}(new t.Path({segments:m,insert:!1,closed:e.closed}));return b.reduce({}),h.closed&&(h.clockwise&&n<0||!h.clockwise&&n>0)&&function(e,t){d(e).slice().forEach(function(e){t.contains(e.point)||e.remove()})}(b,e),h.clockwise!==e.clockwise&&b.reverse(),c(b)}function p(e,n,r){var i=e.point.add(n.point).divide(2),o=n.point.subtract(e.point).rotate(-90,new t.Point(0,0)).normalize(r),a=i.add(o);return new t.Path.Arc({from:e.point,to:n.point,through:a,insert:!1}).segments}function g(e,n,r,i,o,a){var s=h(e,n=e.closed&&!e.clockwise?-n:n,r,o,a),u=h(e,-n,r,o,a);if(e.closed)return f(s.subtract(u,{insert:!1}),n,a);var c=u,l=new Array;u instanceof t.CompoundPath&&((l=u.children.filter(function(e){return e.closed})).forEach(function(e){return e.remove()}),c=u.children[0]),c.reverse();var d=function(e,n,r,i){if(e instanceof t.CompoundPath){var o=e.children.map(function(e){return{c:e,a:Math.abs(e.area)}});e=(o=o.sort(function(e,t){return t.a-e.a}))[0].c}var a=e.segments.slice(),s=n.segments.slice();if("round"===i){var u=p(s[s.length-1],a[0],r),c=p(a[a.length-1],s[0],r),f=new t.Path({segments:u.concat(a,c,s),closed:!0,insert:!1});return f.reduce({}),f}return new t.Path({segments:a.concat(s),closed:!0,insert:!1})}(s,c,n,i);if(l.length>0)for(var g=0,v=l;g<v.length;g++){var m=v[g];d=d.subtract(m,{insert:!1})}return f(d,n,a)}function v(e){return e instanceof t.CompoundPath?e.children:[e]}function m(e){return Number.isFinite(e)}function b(e){if(!e.closed)return 0;try{var t=v(e),n=0;return t.forEach(function(e,r){n+=e.getIntersections(e).length;for(var i=r+1;i<t.length;i+=1)n+=e.getIntersections(t[i]).length}),n}catch(e){return 0}}function I(e,t){void 0===t&&(t=16);var n=[];return v(e).forEach(function(e){if(e.length&&0!==e.segments.length)for(var r=Math.min(t,Math.max(4,Math.ceil(e.length/30))),i=0;i<r;i+=1){var o=e.closed?i/r:i/Math.max(r-1,1),a=e.getPointAt(e.length*o);a&&n.push(a)}}),n}function y(e,t){try{var n=e.getNearestPoint(t);return n?n.getDistance(t):Number.POSITIVE_INFINITY}catch(e){return Number.POSITIVE_INFINITY}}function w(e,t){-1===e.indexOf(t)&&e.push(t)}function k(e,t,n,r){void 0===r&&(r={});var i=new Array,o=!!r.stroke||e.closed,a=d(t).length,s=Math.abs(t.area||0),u=Math.abs(n),c=.01*a,f=0,l=0,h=t.bounds;0===a&&(c+=1e5,w(i,"empty-result")),h&&m(h.x)&&m(h.y)&&m(h.width)&&m(h.height)||(c+=1e5,w(i,"non-finite-bounds")),t.closed!==o&&(c+=5e4,w(i,"unexpected-closed-state"));var p=b(t);if(p>0&&(c+=1e3*p,w(i,"self-intersection")),e.closed&&t.closed&&!r.stroke){var g=Math.abs(e.area||0);if(g>0&&n>0&&s<.95*g&&(c+=(g-s)/g*2e3,w(i,"positive-offset-area-shrank")),g>0&&n<0&&s>1.05*g&&(c+=(s-g)/g*2e3,w(i,"negative-offset-area-grew")),g>0&&n<0){var v=s/g;v<.25&&(c+=4e3*(.25-v),w(i,"negative-offset-collapse"))}if(g>0&&n>0){var k=e.bounds,P=t.bounds.center.getDistance(k.center),M=Math.max(1.15*u,.08*Math.min(k.width,k.height));P>M&&(c+=80*(P-M),w(i,"offset-center-shift"))}var S=Math.max(.08*u,.5);I(n>=0?e:t).forEach(function(r){var i=n>=0?t:e;!function(e,t){try{return e.contains(t)}catch(e){return!1}}(i,r)&&y(i,r)>S&&(f+=1)}),f>0&&(c+=150*f,w(i,n>=0?"source-outside-positive-offset":"negative-offset-outside-source"))}if(u>.001){var C=Math.max(.18*u,.75);I(t).forEach(function(t){var n=y(e,t);m(n)&&n<C&&(l+=1)}),l>0&&(c+=35*l,w(i,"offset-distance-collapse"))}return{score:c,warnings:i,selfIntersections:p,containmentErrors:f,distanceErrors:l,segmentCount:a,area:s}}function P(e,t,r,i){var o=null,a=null,s=null;if(n.forEach(function(n){try{var u=i(n),c=k(e,u,t,{stroke:r});c.algorithm=n.algorithm,(!a||c.score<a.score)&&(o=u,a=c)}catch(e){!s&&e instanceof Error&&(s=e)}}),!o)throw s||new Error("Unable to offset path with any algorithm");return o}function M(e){return e.closed?e.unite(e,{insert:!1}):e}function S(e){return{algorithm:"robust",splitSelfIntersectingCurves:e.splitSelfIntersectingCurves,guardInsideJoins:e.guardInsideJoins,simplifySelfIntersectingStroke:e.simplifySelfIntersectingStroke,adaptiveFallback:!1}}function C(e,t){try{e.push(t())}catch(e){}}function O(e,t,n,r){for(var i=r[0],o=k(e,i,t,{stroke:n}),a=1;a<r.length;a+=1){var s=k(e,r[a],t,{stroke:n});s.score<o.score&&(i=r[a],o=s)}return i}function A(e,n,r,i,o){if(o.adaptiveFallback)return function(e,t,n,r,i){var o=S(i),a=new Array;return C(a,function(){return A(e,t,n,r,o)}),"round"!==n&&C(a,function(){return A(e,t,"round",r,o)}),e.closed&&t<0&&[.8,.65,.5,.35,.25].forEach(function(i){var s=t*i;C(a,function(){return A(e,s,n,r,o)}),"round"!==n&&C(a,function(){return A(e,s,"round",r,o)})}),0===a.length?A(e,t,n,r,o):O(e,t,!1,a)}(e,n,r,i,o);var a=M(e),s=a;if(a instanceof t.Path)s=h(a,n,r,i,o);else{var u=a.children.map(function(a){if(a.segments.length>1){l(a,e)||a.reverse();var s=h(a,n,r,i,o);return(s=c(s)).clockwise!==a.clockwise&&s.reverse(),s instanceof t.CompoundPath?(s.applyMatrix=!0,s.children):s}return null}).flat().filter(function(e){return!!e});s=new t.CompoundPath({children:u,insert:!1})}return(s=c(s)).copyAttributes(a,!1),s.remove(),s}function T(e,n,r,i,o,a){if(a.adaptiveFallback)return function(e,t,n,r,i,o){var a=S(o),s=new Array;C(s,function(){return T(e,t,n,r,i,a)}),"round"!==n&&C(s,function(){return T(e,t,"round",r,i,a)});"round"!==r&&C(s,function(){return T(e,t,n,"round",i,a)});"round"!==n&&"round"!==r&&C(s,function(){return T(e,t,"round","round",i,a)});if(0===s.length)return T(e,t,n,r,i,a);return O(e,t,!0,s)}(e,n,r,i,o,a);var s=M(e),u=s;s instanceof t.Path?u=g(s,n,r,i,o,a):u=s.children.flatMap(function(e){return g(e,n,r,i,o,a)}).reduce(function(e,t){return e.unite(t,{insert:!1})});return u.strokeWidth=0,u.fillColor=s.strokeColor,u.shadowBlur=s.shadowBlur,u.shadowColor=s.shadowColor,u.shadowOffset=s.shadowOffset,u}function x(e){var t,n,r,i;return{join:null!==(t=null==e?void 0:e.join)&&void 0!==t?t:"miter",cap:null!==(n=null==e?void 0:e.cap)&&void 0!==n?n:"butt",limit:null!==(r=null==e?void 0:e.limit)&&void 0!==r?r:10,algorithm:null!==(i=null==e?void 0:e.algorithm)&&void 0!==i?i:"auto"}}function E(e,n,r){r&&!1===r.insert||(e.parent||t.project.activeLayer).addChild(n)}function j(e,t,n){var i=x(n),o=function(e,t,n,i,o){return void 0===o&&(o="auto"),"auto"===o?P(e,t,!1,function(r){return A(e,t,n,i,r)}):A(e,t,n,i,r(o))}(e,t,i.join,i.limit,i.algorithm);return E(e,o,n),o}function N(e,t,n){var i=x(n),o=function(e,t,n,i,o,a){return void 0===a&&(a="auto"),"auto"===a?P(e,t,!0,function(r){return T(e,t,n,i,o,r)}):T(e,t,n,i,o,r(a))}(e,t,i.join,i.cap,i.limit,i.algorithm);return E(e,o,n),o}function F(e,t,n,r){return k(e,t,n,r||{})}var J=function(){function e(){}return e.offset=function(e,t,n){return j(e,t,n)},e.offsetStroke=function(e,t,n){return N(e,t,n)},e.analyze=function(e,t,n,r){return F(e,t,n,r)},e}();function D(e){e.Path.prototype.offset=function(e,t){return j(this,e,t)},e.Path.prototype.offsetStroke=function(e,t){return N(this,e,t)},e.CompoundPath.prototype.offset=function(e,t){return j(this,e,t)},e.CompoundPath.prototype.offsetStroke=function(e,t){return N(this,e,t)}}e.PaperOffset=J,e.analyze=F,e.default=D,e.extendPaperJs=D,e.offset=j,e.offsetStroke=N,Object.defineProperty(e,"__esModule",{value:!0})}),function(e){e&&e.paperjsOffset&&(e.PaperOffset=e.paperjsOffset,e.paper&&"function"==typeof e.paperjsOffset.default&&e.paperjsOffset.default(e.paper))}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this);
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("paper")):"function"==typeof define&&define.amd?define(["exports","paper"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).paperjsOffset={},e.paper)}(this,function(e,t){"use strict";var n=[{algorithm:"adaptive",splitSelfIntersectingCurves:!0,guardInsideJoins:!0,simplifySelfIntersectingStroke:!0,adaptiveFallback:!0},{algorithm:"robust",splitSelfIntersectingCurves:!0,guardInsideJoins:!0,simplifySelfIntersectingStroke:!0,adaptiveFallback:!1},{algorithm:"split",splitSelfIntersectingCurves:!0,guardInsideJoins:!1,simplifySelfIntersectingStroke:!1,adaptiveFallback:!1},{algorithm:"legacy",splitSelfIntersectingCurves:!1,guardInsideJoins:!1,simplifySelfIntersectingStroke:!1,adaptiveFallback:!1}];function r(e){return"auto"===e?n[0]:n.filter(function(t){return t.algorithm===e})[0]||n[0]}function i(e,n,r,i){var o=e.curve===n,a=n.getNormalAtTime(o?0:1).multiply(i),s=e.point.add(a),u=new t.Segment(s),c=o?"handleOut":"handleIn";return u[c]=e[c].add(r.subtract(a).divide(2)),u}function o(e,n,r,a){void 0===a&&(a=0);var s=new t.Curve(e.segment1.handleOut.add(e.segment1.point),new t.Point(0,0),new t.Point(0,0),e.segment2.handleIn.add(e.segment2.point)).getNormalAtTime(.5).multiply(n),u=i(e.segment1,e,s,n),c=i(e.segment2,e,s,n);if(a>20)return[u,c];var f=new t.Curve(u,c),l=f.getIntersections(f),d=Math.min(Math.abs(n)/10,1),h=f.getPointAtTime(.5).getDistance(e.getPointAtTime(.5));if(r.splitSelfIntersectingCurves?l.length>0||Math.abs(h-Math.abs(n))>d:0===l.length&&Math.abs(h-Math.abs(n))>d){var p=e.divideAtTime(.5);if(null!=p)return o(e,n,r,a+1).concat(o(p,n,r,a+1))}return[u,c]}function a(e,t){return e.x*t.y-e.y*t.x}function s(e,n,r,i,o,s,u,c){var f,l,d,h,p,g,v,m,b,w,I,y,k,P,M=new t.Curve(e[0],e[1]),S=new t.Curve(n[0],n[1]),C=M.getIntersections(S),A=e[1].point.getDistance(n[0].point),O=!u||!c.guardInsideJoins||function(e,t){var n,r=null===(n=e.previous)||void 0===n?void 0:n.curve,i=e.curve;if(!r||!i)return!0;var o=a(r.getTangentAtTime(1),i.getTangentAtTime(0));return Math.abs(o)<1e-9||o*t>0}(r,o);if(r.isSmooth())n[0].handleOut=n[0].handleOut.project(r.handleOut),n[0].handleIn=e[1].handleIn.project(r.handleIn),n[0].point=e[1].point.add(n[0].point).divide(2),e.pop();else if(0===C.length)if(A>.1*Math.abs(o))switch(i){case"miter":if(O){var T=(v=M.point2,m=M.point2.add(M.getTangentAtTime(1)),b=S.point1,w=S.point1.add(S.getTangentAtTime(0)),I=v.subtract(m),y=b.subtract(w),k=a(v,m),P=a(b,w),new t.Point(k*y.x-I.x*P,k*y.y-I.y*P).divide(a(I,y)));Math.max(T.getDistance(M.point2),T.getDistance(S.point1))<Math.abs(o)*s&&e.push(new t.Segment(T))}break;case"round":if(O){var x=(f=e[1],l=n[0],d=r.point,h=o,p=f.point.subtract(d).add(l.point.subtract(d)).normalize(Math.abs(h)).add(d),g=new t.Path.Arc({from:f.point,to:l.point,through:p,insert:!1}),f.handleOut=g.firstSegment.handleOut,l.handleIn=g.lastSegment.handleIn,3===g.segments.length?g.segments[1]:null);x&&e.push(x)}}else n[0].handleIn=e[1].handleIn,e.pop();else{var E=M.divideAt(C[0]);if(E){T=E.segment1;var j=S.divideAt(S.getIntersections(M)[0]);T.handleOut=j?j.segment1.handleOut:n[0].handleOut,e.pop(),n[0]=T}else n[0].handleIn=e[1].handleIn,e.pop()}}function u(e){return 1===e.children.length&&(e=e.children[0]).remove(),e}function c(e,n){if(void 0===n&&(n=.01),e.closed){var r=Math.abs(e.area*n);if(e.clockwise||e.reverse(),(e=(e=e.unite(e,{insert:!1})).resolveCrossings())instanceof t.CompoundPath&&(e.children.filter(function(e){return Math.abs(e.area)<r}).forEach(function(e){return e.remove()}),1===e.children.length))return u(e)}return e}function f(e,t,n){var r=c(e);if(n.simplifySelfIntersectingStroke&&b(r)>0){var i=r.clone({insert:!1});i.simplify(Math.max(Math.min(.02*Math.abs(t),.5),.1)),r=c(i)}return r}function l(e,t){var n=(e.segments[0].location.offset+e.segments[Math.max(1,Math.floor(e.segments.length/2))].location.offset)/3;return t.getNearestLocation(e.getPointAt(n)).offset<t.getNearestLocation(e.getPointAt(2*n)).offset}function d(e){return e instanceof t.CompoundPath?e.children.map(function(e){return e.segments}).flat():e.segments}function h(e,n,r,i,a){var f,h;f=function(e,t){var n=e.clone({insert:!1});return n.reduce({}),e.closed&&!e.clockwise&&(n.reverse(),t=-t),[n,t]}(e,n),h=f[0],n=f[1];for(var p=h.curves.slice().map(function(e){return o(e,n,a)}).flat(),g=[],v=0;v<p.length;v+=2)g.push(p.slice(v,v+2));var m=function(e,t,n,r,i,o){for(var a=n.segments,u=e[0].slice(),c=0;c<e.length-1;++c)s(e[c],e[c+1],a[c+1],t,r,i,n.closed,o);return n.closed&&(s(e[e.length-1],u,a[0],t,r,i,n.closed,o),e[0][0]=u[0]),e}(g,r,h,n,i,a).flat(),b=function(e){if(e.closed){var n=e.unite(e,{insert:!1});if(n instanceof t.CompoundPath)return n.children.filter(function(t){return!(t.segments.length>1&&l(t,e))}).forEach(function(e){return e.remove()}),u(n)}return e}(new t.Path({segments:m,insert:!1,closed:e.closed}));return b.reduce({}),h.closed&&(h.clockwise&&n<0||!h.clockwise&&n>0)&&function(e,t){d(e).slice().forEach(function(e){t.contains(e.point)||e.remove()})}(b,e),h.clockwise!==e.clockwise&&b.reverse(),c(b)}function p(e,n,r){var i=e.point.add(n.point).divide(2),o=n.point.subtract(e.point).rotate(-90,new t.Point(0,0)).normalize(r),a=i.add(o);return new t.Path.Arc({from:e.point,to:n.point,through:a,insert:!1}).segments}function g(e,n,r,i,o,a){var s=h(e,n=e.closed&&!e.clockwise?-n:n,r,o,a),u=h(e,-n,r,o,a);if(e.closed)return f(s.subtract(u,{insert:!1}),n,a);var c=u,l=new Array;u instanceof t.CompoundPath&&((l=u.children.filter(function(e){return e.closed})).forEach(function(e){return e.remove()}),c=u.children[0]),c.reverse();var d=function(e,n,r,i){if(e instanceof t.CompoundPath){var o=e.children.map(function(e){return{c:e,a:Math.abs(e.area)}});e=(o=o.sort(function(e,t){return t.a-e.a}))[0].c}var a=e.segments.slice(),s=n.segments.slice();if("round"===i){var u=p(s[s.length-1],a[0],r),c=p(a[a.length-1],s[0],r),f=new t.Path({segments:u.concat(a,c,s),closed:!0,insert:!1});return f.reduce({}),f}return new t.Path({segments:a.concat(s),closed:!0,insert:!1})}(s,c,n,i);if(l.length>0)for(var g=0,v=l;g<v.length;g++){var m=v[g];d=d.subtract(m,{insert:!1})}return f(d,n,a)}function v(e){return e instanceof t.CompoundPath?e.children:[e]}function m(e){return Number.isFinite(e)}function b(e){if(!e.closed)return 0;try{var t=v(e),n=0;return t.forEach(function(e,r){n+=e.getIntersections(e).length;for(var i=r+1;i<t.length;i+=1)n+=e.getIntersections(t[i]).length}),n}catch(e){return 0}}function w(e,t){void 0===t&&(t=16);var n=[];return v(e).forEach(function(e){if(e.length&&0!==e.segments.length)for(var r=Math.min(t,Math.max(4,Math.ceil(e.length/30))),i=0;i<r;i+=1){var o=e.closed?i/r:i/Math.max(r-1,1),a=e.getPointAt(e.length*o);a&&n.push(a)}}),n}function I(e,t){try{var n=e.getNearestPoint(t);return n?n.getDistance(t):Number.POSITIVE_INFINITY}catch(e){return Number.POSITIVE_INFINITY}}function y(e,t){-1===e.indexOf(t)&&e.push(t)}function k(e,t,n,r){void 0===r&&(r={});var i=new Array,o=!!r.stroke||e.closed,a=d(t).length,s=Math.abs(t.area||0),u=Math.abs(n),c=.01*a,f=0,l=0,h=t.bounds;0===a&&(c+=1e5,y(i,"empty-result")),h&&m(h.x)&&m(h.y)&&m(h.width)&&m(h.height)||(c+=1e5,y(i,"non-finite-bounds")),t.closed!==o&&(c+=5e4,y(i,"unexpected-closed-state"));var p=b(t);if(p>0&&(c+=1e3*p,y(i,"self-intersection")),e.closed&&t.closed&&!r.stroke){var g=Math.abs(e.area||0);if(g>0&&n>0&&s<.95*g&&(c+=(g-s)/g*2e3,y(i,"positive-offset-area-shrank")),g>0&&n<0&&s>1.05*g&&(c+=(s-g)/g*2e3,y(i,"negative-offset-area-grew")),g>0&&n<0){var v=s/g;v<.25&&(c+=4e3*(.25-v),y(i,"negative-offset-collapse"))}if(g>0&&n>0){var k=e.bounds,P=t.bounds.center.getDistance(k.center),M=Math.max(1.15*u,.08*Math.min(k.width,k.height));P>M&&(c+=80*(P-M),y(i,"offset-center-shift"))}var S=Math.max(.08*u,.5);w(n>=0?e:t).forEach(function(r){var i=n>=0?t:e;!function(e,t){try{return e.contains(t)}catch(e){return!1}}(i,r)&&I(i,r)>S&&(f+=1)}),f>0&&(c+=150*f,y(i,n>=0?"source-outside-positive-offset":"negative-offset-outside-source"))}if(u>.001){var C=Math.max(.18*u,.75);w(t).forEach(function(t){var n=I(e,t);m(n)&&n<C&&(l+=1)}),l>0&&(c+=35*l,y(i,"offset-distance-collapse"))}return{score:c,warnings:i,selfIntersections:p,containmentErrors:f,distanceErrors:l,segmentCount:a,area:s}}function P(e,t,r,i){var o=null,a=null,s=null;if(n.forEach(function(n){try{var u=i(n),c=k(e,u,t,{stroke:r});c.algorithm=n.algorithm,(!a||c.score<a.score)&&(o=u,a=c)}catch(e){!s&&e instanceof Error&&(s=e)}}),!o)throw s||new Error("Unable to offset path with any algorithm");return o}function M(e){return e.closed?e.unite(e,{insert:!1}):e}function S(e,n,r,i,o,a){if(e.segments.length<=1)return null;l(e,n)||e.reverse();var s=h(e,r,i,o,a);return(s=c(s)).clockwise!==e.clockwise&&s.reverse(),s instanceof t.CompoundPath?(s.applyMatrix=!0,s.children):s}function C(e){return{algorithm:"robust",splitSelfIntersectingCurves:e.splitSelfIntersectingCurves,guardInsideJoins:e.guardInsideJoins,simplifySelfIntersectingStroke:e.simplifySelfIntersectingStroke,adaptiveFallback:!1}}function A(e,t){try{e.push(t())}catch(e){}}function O(e,t,n,r){for(var i=r[0],o=k(e,i,t,{stroke:n}),a=1;a<r.length;a+=1){var s=k(e,r[a],t,{stroke:n});s.score<o.score&&(i=r[a],o=s)}return i}function T(e,n,r,i,o){if(o.adaptiveFallback)return function(e,t,n,r,i){var o=C(i),a=new Array;return A(a,function(){return T(e,t,n,r,o)}),"round"!==n&&A(a,function(){return T(e,t,"round",r,o)}),e.closed&&t<0&&[.8,.65,.5,.35,.25].forEach(function(i){var s=t*i;A(a,function(){return T(e,s,n,r,o)}),"round"!==n&&A(a,function(){return T(e,s,"round",r,o)})}),0===a.length?T(e,t,n,r,o):O(e,t,!1,a)}(e,n,r,i,o);var a=M(e),s=!function(e){if(!(e instanceof t.CompoundPath))return!1;var n=e.children;return n.some(function(e){return e.clockwise})&&n.some(function(e){return!e.clockwise})}(a),u=a;return u=a instanceof t.Path?h(a,n,r,i,o):function(e,n,r,i,o){var a=e.children.filter(function(e){return e.segments.length>1}),s=a.filter(function(e){return e.clockwise}),u=a.filter(function(e){return!e.clockwise});if(0===s.length||0===u.length){var c=a.map(function(t){return S(t,e,n,r,i,o)});return new t.CompoundPath({children:c.flat().filter(function(e){return!!e}),insert:!1})}var f=s.map(function(a){var s=S(a,e,n,r,i,o),c=s instanceof Array?new t.CompoundPath({children:s,insert:!1}):s;return u.forEach(function(s){if(a.contains(s.bounds.center)){var u=S(s,e,n,r,i,o);if(u){var f=u instanceof Array?new t.CompoundPath({children:u,insert:!1}):u,l=c.subtract(f,{insert:!1});c.remove(),f.remove(),c=l}}}),c});return 1===f.length?f[0]:f.slice(1).reduce(function(e,t){var n=e.unite(t,{insert:!1});return e.remove(),t.remove(),n},f[0])}(a,n,r,i,o),s&&(u=c(u)),u.copyAttributes(a,!1),u.remove(),u}function x(e,n,r,i,o,a){if(a.adaptiveFallback)return function(e,t,n,r,i,o){var a=C(o),s=new Array;A(s,function(){return x(e,t,n,r,i,a)}),"round"!==n&&A(s,function(){return x(e,t,"round",r,i,a)});"round"!==r&&A(s,function(){return x(e,t,n,"round",i,a)});"round"!==n&&"round"!==r&&A(s,function(){return x(e,t,"round","round",i,a)});if(0===s.length)return x(e,t,n,r,i,a);return O(e,t,!0,s)}(e,n,r,i,o,a);var s=M(e),u=s;s instanceof t.Path?u=g(s,n,r,i,o,a):u=s.children.flatMap(function(e){return g(e,n,r,i,o,a)}).reduce(function(e,t){return e.unite(t,{insert:!1})});return u.strokeWidth=0,u.fillColor=s.strokeColor,u.shadowBlur=s.shadowBlur,u.shadowColor=s.shadowColor,u.shadowOffset=s.shadowOffset,u}function E(e){var t,n,r,i;return{join:null!==(t=null==e?void 0:e.join)&&void 0!==t?t:"miter",cap:null!==(n=null==e?void 0:e.cap)&&void 0!==n?n:"butt",limit:null!==(r=null==e?void 0:e.limit)&&void 0!==r?r:10,algorithm:null!==(i=null==e?void 0:e.algorithm)&&void 0!==i?i:"auto"}}function j(e,n,r){r&&!1===r.insert||(e.parent||t.project.activeLayer).addChild(n)}function N(e,t,n){var i=E(n),o=function(e,t,n,i,o){return void 0===o&&(o="auto"),"auto"===o?P(e,t,!1,function(r){return T(e,t,n,i,r)}):T(e,t,n,i,r(o))}(e,t,i.join,i.limit,i.algorithm);return j(e,o,n),o}function F(e,t,n){var i=E(n),o=function(e,t,n,i,o,a){return void 0===a&&(a="auto"),"auto"===a?P(e,t,!0,function(r){return x(e,t,n,i,o,r)}):x(e,t,n,i,o,r(a))}(e,t,i.join,i.cap,i.limit,i.algorithm);return j(e,o,n),o}function J(e,t,n,r){return k(e,t,n,r||{})}var D=function(){function e(){}return e.offset=function(e,t,n){return N(e,t,n)},e.offsetStroke=function(e,t,n){return F(e,t,n)},e.analyze=function(e,t,n,r){return J(e,t,n,r)},e}();function z(e){e.Path.prototype.offset=function(e,t){return N(this,e,t)},e.Path.prototype.offsetStroke=function(e,t){return F(this,e,t)},e.CompoundPath.prototype.offset=function(e,t){return N(this,e,t)},e.CompoundPath.prototype.offsetStroke=function(e,t){return F(this,e,t)}}e.PaperOffset=D,e.analyze=J,e.default=z,e.extendPaperJs=z,e.offset=N,e.offsetStroke=F,Object.defineProperty(e,"__esModule",{value:!0})}),function(e){e&&e.paperjsOffset&&(e.PaperOffset=e.paperjsOffset,e.paper&&"function"==typeof e.paperjsOffset.default&&e.paperjsOffset.default(e.paper))}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "paperjs-offset",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "An offset function for paperjs path.",
|
|
5
5
|
"main": "dist/index.cjs",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"release:minor": "npm run release:prepare -- minor",
|
|
49
49
|
"release:patch": "npm run release:prepare -- patch",
|
|
50
50
|
"release:ship": "node scripts/ship-release.js",
|
|
51
|
-
"release:publish": "npm publish"
|
|
51
|
+
"release:publish": "npm publish --registry=https://registry.npmjs.org"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
54
|
"@rollup/plugin-terser": "1.0.0",
|