constructor(spriter, config) {
    this._spriter = spriter;
    this.config = config;
    this.mode = null;
    this.files = {};
    this.data = {};
    this._commonData = {
      shapes: [],
      ...defaultMustacheVariables,
      ...this._spriter.config.variables
    };

    // Register the common shapes data
    const lastShapeIndex = this._spriter._shapes.length - 1;

    for (const [index, shape] of this._spriter._shapes.entries()) {
      const { width, height } = shape.getDimensions();
      const { top, right, bottom, left } = shape.config.spacing.padding;

      this._commonData.shapes.push({
        name: shape.id,
        base: shape.base,
        master: shape.master?.id ?? null,
        width: {
          inner: width - right - left,
          outer: width
        },
        height: {
          inner: height - top - bottom,
          outer: height
        },
        first: index === 0,
        last: index === lastShapeIndex,
        fileSize: this.config.example ? pretty(shape.source.contents.length) : null
      });
    }

    this._spriter.debug('Created layouter instance');
  }
SVGSprite layouter

@param {SVGSpriter} spriter      SVG spriter
@param {object} config           Layout configuration