move (dx, dy) {
    const { item } = this

    const curPts = this.ctrlpts
      ? [
          item.x += dx, item.y += dy,
          item.x1, item.y1, item.x2 += dx, item.y2 += dy
        ]
      : [item.x += dx, item.y += dy]

    replacePathSegMethod(
      this.type,
      this.index,
      // type 10 means ARC
      this.type === 10 ? ptObjToArrMethod(this.type, item) : curPts
    )

    if (this.next?.ctrlpts) {
      const next = this.next.item
      const nextPts = [
        next.x, next.y,
        next.x1 += dx, next.y1 += dy, next.x2, next.y2
      ]
      replacePathSegMethod(this.next.type, this.next.index, nextPts)
    }

    if (this.mate) {
      // The last point of a closed subpath has a 'mate',
      // which is the 'M' segment of the subpath
      const { item: itm } = this.mate
      const pts = [itm.x += dx, itm.y += dy]
      replacePathSegMethod(this.mate.type, this.mate.index, pts)
      // Has no grip, so does not need 'updating'?
    }

    this.update(true)
    if (this.next) { this.next.update(true) }
  }
@param {Integer} dx
@param {Integer} dy
@returns {void}