paperjs-offset 1.0.8 → 2.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/offset_core.ts","../src/index.ts"],"sourcesContent":["import paper from 'paper';\n\nexport type StrokeJoinType = 'miter' | 'bevel' | 'round';\nexport type StrokeCapType = 'round' | 'butt';\nexport type PathType = paper.Path | paper.CompoundPath;\n\ntype HandleType = 'handleIn' | 'handleOut';\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: paper.Segment, curve: paper.Curve, handleNormal: paper.Point, offset: number) {\n const isFirst = segment.curve === curve;\n // get offset vector\n const offsetVector = (curve.getNormalAtTime(isFirst ? 0 : 1)).multiply(offset);\n // get offset point\n const point = segment.point.add(offsetVector);\n const newSegment = new paper.Segment(point);\n // handleOut for start segment & handleIn for terminal segment\n const handle = (isFirst ? 'handleOut' : 'handleIn') as HandleType;\n newSegment[handle] = segment[handle]!.add(handleNormal.subtract(offsetVector).divide(2));\n return newSegment;\n}\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: paper.Curve, offset: number): paper.Segment[] {\n const hNormal = (new paper.Curve(curve.segment1.handleOut!.add(curve.segment1.point), new paper.Point(0, 0),\n new paper.Point(0, 0), curve.segment2.handleIn!.add(curve.segment2.point))).getNormalAtTime(0.5).multiply(offset);\n const segment1 = offsetSegment(curve.segment1, curve, hNormal, offset);\n const segment2 = offsetSegment(curve.segment2, curve, hNormal, offset);\n // divide && re-offset\n const offsetCurve = new paper.Curve(segment1, segment2);\n // if the offset curve is not self intersected, divide it\n if (offsetCurve.getIntersections(offsetCurve).length === 0) {\n const threshold = Math.min(Math.abs(offset) / 10, 1);\n const midOffset = offsetCurve.getPointAtTime(0.5).getDistance(curve.getPointAtTime(0.5));\n if (Math.abs(midOffset - Math.abs(offset)) > threshold) {\n const subCurve = curve.divideAtTime(0.5);\n if (subCurve != null) {\n return [...adaptiveOffsetCurve(curve, offset), ...adaptiveOffsetCurve(subCurve, offset)];\n }\n }\n }\n return [segment1, segment2];\n}\n\n/**\n * Create a round join segment between two adjacent segments.\n */\nfunction makeRoundJoin(segment1: paper.Segment, segment2: paper.Segment, originPoint: paper.Point, radius: number) {\n const through = segment1.point.subtract(originPoint).add(segment2.point.subtract(originPoint))\n .normalize(Math.abs(radius)).add(originPoint);\n const arc = new paper.Path.Arc({ from: segment1.point, to: segment2.point, 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}\n\nfunction det(p1: paper.Point, p2: paper.Point) {\n return p1.x * p2.y - p1.y * p2.x;\n}\n\n/**\n * Get the intersection point of point based lines\n */\nfunction getPointLineIntersections(p1: paper.Point, p2: paper.Point, p3: paper.Point, p4: paper.Point) {\n const l1 = p1.subtract(p2);\n const l2 = p3.subtract(p4);\n const dl1 = det(p1, p2);\n const 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/**\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 connectAdjacentBezier(segments1: paper.Segment[], segments2: paper.Segment[], origin: paper.Segment, joinType: StrokeJoinType, offset: number, limit: number) {\n const curve1 = new paper.Curve(segments1[0], segments1[1]);\n const curve2 = new paper.Curve(segments2[0], segments2[1]);\n const intersection = curve1.getIntersections(curve2);\n const distance = segments1[1].point.getDistance(segments2[0].point);\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 } else {\n if (intersection.length === 0) {\n if (distance > Math.abs(offset) * 0.1) {\n // connect\n switch (joinType) {\n case 'miter':\n const join = getPointLineIntersections(curve1.point2, curve1.point2.add(curve1.getTangentAtTime(1)),\n curve2.point1, curve2.point1.add(curve2.getTangentAtTime(0)));\n // prevent sharp angle\n const 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 break;\n case 'round':\n const mid = makeRoundJoin(segments1[1], segments2[0], origin.point, offset);\n if (mid) {\n segments1.push(mid);\n }\n break;\n default: break;\n }\n } else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n } else {\n const second1 = curve1.divideAt(intersection[0]);\n if (second1) {\n const join = second1.segment1;\n const 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 } else {\n segments2[0].handleIn = segments1[1].handleIn;\n segments1.pop();\n }\n }\n }\n}\n\n/**\n * Connect all the segments together.\n */\nfunction connectBeziers(rawSegments: paper.Segment[][], join: StrokeJoinType, source: paper.Path, offset: number, limit: number) {\n const originSegments = source.segments;\n const first = rawSegments[0].slice();\n for (let i = 0; i < rawSegments.length - 1; ++i) {\n connectAdjacentBezier(rawSegments[i], rawSegments[i + 1], originSegments[i + 1], join, offset, limit);\n }\n if (source.closed) {\n connectAdjacentBezier(rawSegments[rawSegments.length - 1], first, originSegments[0], join, offset, limit);\n rawSegments[0][0] = first[0];\n }\n return rawSegments;\n}\n\nfunction reduceSingleChildCompoundPath(path: PathType) {\n if (path.children.length === 1) {\n path = path.children[0] as paper.Path;\n path.remove(); // remove from parent, this is critical, or the style attributes will be ignored\n }\n return path;\n}\n\n/** Normalize a path, always clockwise, non-self-intersection, ignore really small components, and no one-component compound path. */\nfunction normalize(path: PathType, areaThreshold = 0.01) {\n if (path.closed) {\n const ignoreArea = Math.abs(path.area * areaThreshold);\n if (!path.clockwise) {\n path.reverse();\n }\n path = path.unite(path, { insert: false }) as PathType;\n if (path instanceof paper.CompoundPath) {\n path.children.filter((c) => Math.abs((c as PathType).area) < ignoreArea).forEach((c) => c.remove());\n if (path.children.length === 1) {\n return reduceSingleChildCompoundPath(path);\n }\n }\n }\n return path;\n}\n\nfunction isSameDirection(partialPath: paper.Path, fullPath: PathType) {\n const offset1 = partialPath.segments[0].location.offset;\n const offset2 = partialPath.segments[Math.max(1, Math.floor(partialPath.segments.length / 2))].location.offset;\n const sampleOffset = (offset1 + offset2) / 3;\n const originOffset1 = fullPath.getNearestLocation(partialPath.getPointAt(sampleOffset)).offset;\n const originOffset2 = fullPath.getNearestLocation(partialPath.getPointAt(2 * sampleOffset)).offset;\n return originOffset1 < originOffset2;\n}\n\n/** Remove self intersection when offset is negative by point direction dectection. */\nfunction removeIntersection(path: PathType) {\n if (path.closed) {\n const newPath = path.unite(path, { insert: false }) as PathType;\n if (newPath instanceof paper.CompoundPath) {\n (newPath.children as paper.Path[]).filter((c) => {\n if (c.segments.length > 1) {\n return !isSameDirection(c, path);\n } else {\n return true;\n }\n }).forEach((c) => c.remove());\n return reduceSingleChildCompoundPath(newPath);\n }\n }\n return path;\n}\n\nfunction getSegments(path: PathType) {\n if (path instanceof paper.CompoundPath) {\n return path.children.map((c) => (c as paper.Path).segments).flat();\n } else {\n return (path as paper.Path).segments;\n }\n}\n\n/**\n * Remove impossible segments in negative offset condition.\n */\nfunction removeOutsiders(newPath: PathType, path: PathType) {\n const segments = getSegments(newPath).slice();\n segments.forEach((segment) => {\n if (!path.contains(segment.point)) {\n segment.remove();\n }\n });\n}\n\nfunction preparePath(path: paper.Path, offset: number): [paper.Path, number] {\n const source = path.clone({ insert: false }) as paper.Path;\n source.reduce({});\n if (!path.clockwise) {\n source.reverse();\n offset = -offset;\n }\n return [source, offset];\n}\n\nfunction offsetSimpleShape(path: paper.Path, offset: number, join: StrokeJoinType, limit: number): PathType {\n let source: paper.Path;\n [source, offset] = preparePath(path, offset);\n const curves = source.curves.slice();\n const offsetCurves = curves.map((curve) => adaptiveOffsetCurve(curve, offset)).flat();\n const raws: paper.Segment[][] = [];\n for (let i = 0; i < offsetCurves.length; i += 2) {\n raws.push(offsetCurves.slice(i, i + 2));\n }\n const segments = connectBeziers(raws, join, source, offset, limit).flat();\n const newPath = removeIntersection(new paper.Path({ 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}\n\nfunction makeRoundCap(from: paper.Segment, to: paper.Segment, offset: number) {\n const origin = from.point.add(to.point).divide(2);\n const normal = to.point.subtract(from.point).rotate(-90, new paper.Point(0, 0)).normalize(offset);\n const through = origin.add(normal);\n const arc = new paper.Path.Arc({ from: from.point, to: to.point, through, insert: false });\n return arc.segments;\n}\n\nfunction connectSide(outer: PathType, inner: paper.Path, offset: number, cap: StrokeCapType): paper.Path {\n if (outer instanceof paper.CompoundPath) {\n let cs = outer.children.map((c) => ({ c, a: Math.abs((c as paper.Path).area) }));\n cs = cs.sort((c1, c2) => c2.a - c1.a);\n outer = cs[0].c as paper.Path;\n }\n const oSegments = (outer as paper.Path).segments.slice();\n const iSegments = inner.segments.slice();\n switch (cap) {\n case 'round':\n const heads = makeRoundCap(iSegments[iSegments.length - 1], oSegments[0], offset);\n const tails = makeRoundCap(oSegments[oSegments.length - 1], iSegments[0], offset);\n const result = new paper.Path({ segments: [...heads, ...oSegments, ...tails, ...iSegments], closed: true, insert: false });\n result.reduce({});\n return result;\n default: return new paper.Path({ segments: [...oSegments, ...iSegments], closed: true, insert: false });\n }\n}\n\nfunction offsetSimpleStroke(path: paper.Path, offset: number, join: StrokeJoinType, cap: StrokeCapType, limit: number): PathType {\n offset = path.clockwise ? offset : -offset;\n const positiveOffset = offsetSimpleShape(path, offset, join, limit);\n const negativeOffset = offsetSimpleShape(path, -offset, join, limit);\n if (path.closed) {\n return positiveOffset.subtract(negativeOffset, { insert: false }) as PathType;\n } else {\n let inner = negativeOffset;\n let holes = new Array<paper.Path>();\n if (negativeOffset instanceof paper.CompoundPath) {\n holes = negativeOffset.children.filter((c) => (c as paper.Path).closed) as paper.Path[];\n holes.forEach((h) => h.remove());\n inner = negativeOffset.children[0] as paper.Path;\n }\n inner.reverse();\n let final = connectSide(positiveOffset, inner as paper.Path, offset, cap) as PathType;\n if (holes.length > 0) {\n for (const hole of holes) {\n final = final.subtract(hole, { insert: false }) as PathType;\n }\n }\n return final;\n }\n}\n\nfunction getNonSelfItersectionPath(path: PathType) {\n if (path.closed) {\n return path.unite(path, { insert: false }) as PathType;\n }\n return path;\n}\n\nexport function offsetPath(path: PathType, offset: number, join: StrokeJoinType, limit: number): PathType {\n const nonSIPath = getNonSelfItersectionPath(path);\n let result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleShape(nonSIPath, offset, join, limit);\n } else {\n const offsetParts = (nonSIPath.children as paper.Path[]).map((c) => {\n if (c.segments.length > 1) {\n if (!isSameDirection(c, path)) {\n c.reverse();\n }\n let offseted = offsetSimpleShape(c, offset, join, limit);\n offseted = normalize(offseted);\n if (offseted.clockwise !== c.clockwise) {\n offseted.reverse();\n }\n if (offseted instanceof paper.CompoundPath) {\n offseted.applyMatrix = true;\n return offseted.children;\n } else {\n return offseted;\n }\n } else {\n return null;\n }\n });\n const children = offsetParts.flat().filter((c) => !!c) as paper.Item[];\n result = new paper.CompoundPath({ children, insert: false });\n }\n result.copyAttributes(nonSIPath, false);\n result.remove();\n return result;\n}\n\nexport function offsetStroke(path: PathType, offset: number, join: StrokeJoinType, cap: StrokeCapType, limit: number): PathType {\n const nonSIPath = getNonSelfItersectionPath(path);\n let result = nonSIPath;\n if (nonSIPath instanceof paper.Path) {\n result = offsetSimpleStroke(nonSIPath, offset, join, cap, limit);\n } else {\n const children = (nonSIPath.children as paper.Path[]).flatMap((c) => {\n return offsetSimpleStroke(c, offset, join, cap, limit);\n });\n result = children.reduce((c1, c2) => c1.unite(c2, { insert: false }) as PathType);\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}\n","import paper from 'paper';\nimport { StrokeJoinType, PathType, StrokeCapType, offsetPath, offsetStroke } from './offset_core';\n\nexport interface OffsetOptions {\n join?: StrokeJoinType;\n cap?: StrokeCapType;\n limit?: number;\n insert?: boolean;\n}\n\nexport class PaperOffset {\n public static offset(path: PathType, offset: number, options?: OffsetOptions): PathType {\n options = options || {};\n const newPath = offsetPath(path, offset, options.join || 'miter', options.limit || 10);\n if (options.insert === undefined) {\n options.insert = true;\n }\n if (options.insert) {\n (path.parent || paper.project.activeLayer).addChild(newPath);\n }\n return newPath;\n }\n\n public static offsetStroke(path: PathType, offset: number, options?: OffsetOptions): PathType {\n options = options || {};\n const newPath = offsetStroke(path, offset, options.join || 'miter', options.cap || 'butt', options.limit || 10);\n if (options.insert === undefined) {\n options.insert = true;\n }\n if (options.insert) {\n (path.parent || paper.project.activeLayer).addChild(newPath);\n }\n return newPath;\n }\n}\n\n/**\n * @deprecated EXTEND existing paper module is not recommend anymore\n */\nexport default function ExtendPaperJs(paperNs: any) {\n paperNs.Path.prototype.offset = function(offset: number, options?: OffsetOptions) {\n return PaperOffset.offset(this, offset, options);\n };\n\n paperNs.Path.prototype.offsetStroke = function(offset: number, options?: OffsetOptions) {\n return PaperOffset.offsetStroke(this, offset, options);\n };\n\n paperNs.CompoundPath.prototype.offset = function(offset: number, options?: OffsetOptions) {\n return PaperOffset.offset(this, offset, options);\n };\n\n paperNs.CompoundPath.prototype.offsetStroke = function(offset: number, options?: OffsetOptions) {\n return PaperOffset.offsetStroke(this, offset, options);\n };\n}\n"],"names":[],"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 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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"}
@@ -0,0 +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,15 +1,22 @@
1
- import { StrokeJoinType, PathType, StrokeCapType } from './offset_core';
2
- export interface OffsetOptions {
3
- join?: StrokeJoinType;
4
- cap?: StrokeCapType;
5
- limit?: number;
6
- insert?: boolean;
7
- }
8
- export declare class PaperOffset {
9
- static offset(path: PathType, offset: number, options?: OffsetOptions): PathType;
10
- static offsetStroke(path: PathType, offset: number, options?: OffsetOptions): PathType;
11
- }
12
- /**
13
- * @deprecated EXTEND existing paper module is not recommend anymore
14
- */
15
- export default function ExtendPaperJs(paperNs: any): void;
1
+ import type { StrokeJoinType, PathType, StrokeCapType, OffsetAlgorithm, OffsetQuality, OffsetQualityOptions } from './offset_core';
2
+ export type { OffsetAlgorithm, OffsetQuality, OffsetQualityOptions };
3
+ export interface OffsetOptions {
4
+ join?: StrokeJoinType;
5
+ cap?: StrokeCapType;
6
+ limit?: number;
7
+ insert?: boolean;
8
+ algorithm?: OffsetAlgorithm;
9
+ }
10
+ export declare function offset(path: PathType, distance: number, options?: OffsetOptions): PathType;
11
+ export declare function offsetStroke(path: PathType, distance: number, options?: OffsetOptions): PathType;
12
+ export declare function analyze(source: PathType, result: PathType, distance: number, options?: OffsetQualityOptions): OffsetQuality;
13
+ export declare class PaperOffset {
14
+ static offset(path: PathType, distance: number, options?: OffsetOptions): PathType;
15
+ static offsetStroke(path: PathType, distance: number, options?: OffsetOptions): PathType;
16
+ static analyze(source: PathType, result: PathType, distance: number, options?: OffsetQualityOptions): OffsetQuality;
17
+ }
18
+ /**
19
+ * @deprecated EXTEND existing paper module is not recommend anymore
20
+ */
21
+ export default function ExtendPaperJs(paperNs: any): void;
22
+ export { ExtendPaperJs as extendPaperJs };
@@ -1,5 +1,20 @@
1
- export declare type StrokeJoinType = 'miter' | 'bevel' | 'round';
2
- export declare type StrokeCapType = 'round' | 'butt';
3
- export declare type PathType = paper.Path | paper.CompoundPath;
4
- export declare function offsetPath(path: PathType, offset: number, join: StrokeJoinType, limit: number): PathType;
5
- export declare function offsetStroke(path: PathType, offset: number, join: StrokeJoinType, cap: StrokeCapType, limit: number): PathType;
1
+ export type StrokeJoinType = 'miter' | 'bevel' | 'round';
2
+ export type StrokeCapType = 'round' | 'butt';
3
+ export type OffsetAlgorithm = 'auto' | 'adaptive' | 'legacy' | 'split' | 'robust';
4
+ export type PathType = paper.Path | paper.CompoundPath;
5
+ export interface OffsetQuality {
6
+ algorithm?: OffsetAlgorithm;
7
+ score: number;
8
+ warnings: string[];
9
+ selfIntersections: number;
10
+ containmentErrors: number;
11
+ distanceErrors: number;
12
+ segmentCount: number;
13
+ area: number;
14
+ }
15
+ export interface OffsetQualityOptions {
16
+ stroke?: boolean;
17
+ }
18
+ export declare function analyzeOffsetQuality(source: PathType, result: PathType, offset: number, options?: OffsetQualityOptions): OffsetQuality;
19
+ export declare function offsetPath(path: PathType, offset: number, join: StrokeJoinType, limit: number, algorithm?: OffsetAlgorithm): PathType;
20
+ export declare function offsetStroke(path: PathType, offset: number, join: StrokeJoinType, cap: StrokeCapType, limit: number, algorithm?: OffsetAlgorithm): PathType;
package/package.json CHANGED
@@ -1,41 +1,72 @@
1
1
  {
2
2
  "name": "paperjs-offset",
3
- "version": "1.0.8",
3
+ "version": "2.0.0",
4
4
  "description": "An offset function for paperjs path.",
5
- "main": "dist/index.umd.js",
6
- "module": "dist/index.es5.js",
7
- "typings": "dist/types/index.d.ts",
8
- "scripts": {
9
- "lint": "tslint -p tsconfig.json",
10
- "prebuild": "rimraf dist",
11
- "build": "tsc --module commonjs && node build.js"
5
+ "main": "dist/index.cjs",
6
+ "module": "dist/index.mjs",
7
+ "types": "dist/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/types/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.cjs",
13
+ "default": "./dist/index.mjs"
14
+ },
15
+ "./dist/index.cjs": "./dist/index.cjs",
16
+ "./dist/index.umd.js": "./dist/index.umd.js",
17
+ "./dist/index.umd.min.js": "./dist/index.umd.min.js",
18
+ "./dist/index.mjs": "./dist/index.mjs",
19
+ "./package.json": "./package.json"
12
20
  },
13
- "dependencies": {
14
- "paper": "^0.12.4"
21
+ "browser": "dist/index.umd.min.js",
22
+ "unpkg": "dist/index.umd.min.js",
23
+ "jsdelivr": "dist/index.umd.min.js",
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "scripts": {
28
+ "clean": "rimraf dist .build",
29
+ "typecheck": "tsc -p tsconfig.json --noEmit",
30
+ "lint": "npm run typecheck",
31
+ "build": "npm run clean && npm run build:ts && npm run build:bundles",
32
+ "build:ts": "tsc -p tsconfig.json",
33
+ "build:bundles": "node build.js",
34
+ "demo:build": "npm run build",
35
+ "demo:serve": "npm run demo:build && node demo/serve.js",
36
+ "pages:build": "npm run build && node scripts/build-pages.js",
37
+ "prepack": "npm run build",
38
+ "prepublishOnly": "npm run release:check",
39
+ "test": "npm run build && npm run test:smoke && npm run test:stress:run",
40
+ "test:smoke": "node test/smoke.js",
41
+ "test:stress": "npm run build && npm run test:stress:run",
42
+ "test:stress:quick": "npm run build && node test/stress.js --groups=closed-offset,smooth-offset,compound-offset,stroke-offset,edge-case",
43
+ "test:stress:boundary": "npm run build && node test/stress.js --groups=boundary-offset,boundary-compound,boundary-stroke",
44
+ "test:stress:run": "node test/stress.js",
45
+ "release:check": "npm run lint && npm test && npm audit --registry=https://registry.npmjs.org && npm pack --dry-run --ignore-scripts",
46
+ "release:prepare": "node scripts/prepare-release.js",
47
+ "release:major": "npm run release:prepare -- major",
48
+ "release:minor": "npm run release:prepare -- minor",
49
+ "release:patch": "npm run release:prepare -- patch",
50
+ "release:ship": "node scripts/ship-release.js",
51
+ "release:publish": "npm publish"
15
52
  },
16
53
  "devDependencies": {
17
- "lodash.camelcase": "^4.3.0",
18
- "rimraf": "^2.6.3",
19
- "rollup": "^1.10.1",
20
- "rollup-plugin-commonjs": "^9.3.4",
21
- "rollup-plugin-json": "^4.0.0",
22
- "rollup-plugin-node-resolve": "^4.2.3",
23
- "rollup-plugin-sourcemaps": "^0.4.2",
24
- "rollup-plugin-typescript2": "^0.20.1",
25
- "rollup-plugin-uglify": "^6.0.2",
26
- "tslint": "^5.16.0",
27
- "typescript": "^3.4.4"
54
+ "@rollup/plugin-terser": "1.0.0",
55
+ "paper": "0.12.18",
56
+ "rimraf": "6.1.3",
57
+ "rollup": "4.62.2",
58
+ "typescript": "5.9.3"
28
59
  },
29
- "author": "glenli <glenzli@outlook.com>",
60
+ "author": "glenzli",
30
61
  "license": "MIT",
31
62
  "repository": {
32
63
  "type": "git",
33
- "url": "git+https://github.com/luz-alphacode/paperjs-offset.git"
64
+ "url": "git+https://github.com/glenzli/paperjs-offset.git"
34
65
  },
35
66
  "bugs": {
36
- "url": "https://github.com/luz-alphacode/paperjs-offset/issues"
67
+ "url": "https://github.com/glenzli/paperjs-offset/issues"
37
68
  },
38
- "homepage": "https://github.com/luz-alphacode/paperjs-offset#readme",
69
+ "homepage": "https://glenzli.github.io/paperjs-offset/",
39
70
  "keywords": [
40
71
  "paperjs",
41
72
  "offset"
package/build.js DELETED
@@ -1,57 +0,0 @@
1
- const rollup = require('rollup')
2
- const resolve = require('rollup-plugin-node-resolve')
3
- const commonjs = require('rollup-plugin-commonjs')
4
- const sourceMaps = require('rollup-plugin-sourcemaps')
5
- const typescript = require('rollup-plugin-typescript2')
6
- const json = require('rollup-plugin-json')
7
- const camelCase = require('lodash.camelcase')
8
- const uglify = require('rollup-plugin-uglify').uglify
9
- const pkg = require('./package.json')
10
-
11
- const libraryName = 'paperjsOffset'
12
-
13
- const defaultPlugins = [
14
- json(),
15
- typescript({ useTsconfigDeclarationDir: true }),
16
- commonjs(),
17
- resolve(),
18
- sourceMaps(),
19
- ]
20
-
21
- let tasks = []
22
-
23
- tasks.push(rollup.rollup({
24
- input: 'src/index.ts',
25
- external: ['paper'],
26
- plugins: defaultPlugins
27
- }).then(bundle => {
28
- bundle.write({ format: 'umd', file: pkg.main, name: camelCase(libraryName), sourcemap: true })
29
- bundle.write({ format: 'es', file: pkg.module, name: camelCase(libraryName), sourcemap: true })
30
- }))
31
-
32
- tasks.push(rollup.rollup({
33
- input: 'src/bundle.ts',
34
- output: [
35
- { file: 'dist/paperjs-offset.js', format: 'iife', sourcemap: false },
36
- ],
37
- external: ['paper'],
38
- plugins: defaultPlugins
39
- }).then(bundle => {
40
- bundle.write({ format: 'iife', file: 'dist/paperjs-offset.js', sourcemap: false })
41
- bundle.write({ format: 'iife', file: 'demo/paperjs-offset.js', sourcemap: false })
42
- }))
43
-
44
- tasks.push(rollup.rollup({
45
- input: 'src/bundle.ts',
46
- external: ['paper'],
47
- plugins: defaultPlugins.concat([uglify()])
48
- }).then(bundle => {
49
- bundle.write({ format: 'iife', file: 'dist/paperjs-offset.min.js', sourcemap: false })
50
- bundle.write({ format: 'iife', file: 'demo/paperjs-offset.min.js', sourcemap: false })
51
- }))
52
-
53
- Promise.all(tasks).then(() => {
54
- setTimeout(() => {
55
- process.exit()
56
- }, 3000)
57
- })
package/demo/debug.html DELETED
@@ -1,12 +0,0 @@
1
- <html>
2
- <head>
3
- <title>Demo</title>
4
- <link rel="stylesheet" href="./demo.css"/>
5
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/paper@0.12.4/dist/paper-full.min.js"></script>
6
- <script type="text/javascript" src="./paperjs-offset.js"></script>
7
- <script type="text/javascript" src="./debug.js"></script>
8
- </head>
9
- <body>
10
- <canvas width="1200" height="768"></canvas>
11
- </body>
12
- </html>
package/demo/debug.js DELETED
@@ -1,26 +0,0 @@
1
- (function() {
2
- function DebugCase() {
3
- let canvas = document.querySelector('canvas');
4
- paper.setup(canvas);
5
- paper.view.center = [0, 0];
6
-
7
- const c3 = new paper.Path.Circle({ center: [180, 260], radius: 50, strokeColor: 'black' });
8
- const c4 = new paper.Path.Circle({ center: [230, 260], radius: 40, strokeColor: 'black' });
9
- const c5 = new paper.Path.Circle({ center: [205, 200], radius: 40, strokeColor: 'black' });
10
- const cc1 = c3.unite(c4, { insert: true });
11
- const cc = cc1.unite(c5, { insert: true });
12
- c3.remove();
13
- c4.remove();
14
- c5.remove();
15
- cc1.remove();
16
- cc.bringToFront();
17
- cc.translate(new paper.Point(-100, -100));
18
-
19
- PaperOffset.offset(cc, 24);
20
-
21
- const c = new paper.Path({pathData: "M4,11L5,13", strokeColor: 'rgba(156, 104, 193, 0.5)', strokeWidth: 4});
22
- PaperOffset.offsetStroke(c, 10, {cap: "round", join: "round"});
23
- }
24
-
25
- window.onload = DebugCase;
26
- })();
package/demo/demo.css DELETED
@@ -1,16 +0,0 @@
1
- html {
2
- height: 100%;
3
- width: 100%;
4
- }
5
-
6
- body {
7
- width: 100%;
8
- height: 100%;
9
- display: flex;
10
- justify-content: center;
11
- align-items: center;
12
- }
13
-
14
- canvas {
15
- box-shadow: 0 0 1rem #ccc;
16
- }