{"version":3,"file":"SpriteElement.cjs","sources":["../../../src/elements/SpriteElement.js"],"sourcesContent":["import { BaseElement } from './BaseElement.js'\nimport { DEFAULT_ELEMENT_CONFIG } from '../types/constants.js'\nimport { deepMerge } from '../utils/helpers.js'\nimport { ElementType } from '../types/enums.js'\nimport { loadImage, createCanvas } from '@napi-rs/canvas'\nimport { calculateImageFit } from '../utils/image-fit.js'\nimport fs from 'fs'\nimport path from 'path'\n\nexport class SpriteElement extends BaseElement {\n  constructor(config = {}) {\n    super(config)\n    this.type = ElementType.SPRITE\n    this.config = deepMerge({}, DEFAULT_ELEMENT_CONFIG, config)\n    this.src = this.config.src\n    this.srcDir = this.config.srcDir\n    this.columns = this.config.columns || 1\n    this.rows = this.config.rows || 1\n    this.frameWidth = this.config.frameWidth || 0\n    this.frameHeight = this.config.frameHeight || 0\n    this.frameRate = this.config.frameRate || 12\n    this.loop = this.config.loop !== undefined ? this.config.loop : true\n    this.autoplay = this.config.autoplay !== undefined ? this.config.autoplay : true\n    this.playMode = this.config.playMode || 'forward'\n    this.fit = this.config.fit || 'cover'\n    this.imageData = null\n    this.sequenceImages = []\n    this.loaded = false\n    this._warnedMissing = false\n  }\n\n  async initialize(loaded) {\n    if (!loaded) {\n      await super.initialize()\n    }\n    if (this.src && !this.loaded) {\n      try {\n        this.imageData = await loadImage(this.src)\n        this.loaded = true\n        this._callOnLoaded(this.startTime || 0, null, null)\n      } catch (e) {\n        this.loaded = false\n      }\n    }\n    if (this.srcDir && this.sequenceImages.length === 0) {\n      try {\n        const files = fs.readdirSync(this.srcDir)\n        const images = files\n          .filter(f => /\\.(png|jpg|jpeg|webp|gif)$/i.test(f))\n          .sort((a, b) => a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' }))\n        for (const f of images) {\n          const img = await loadImage(path.join(this.srcDir, f))\n          this.sequenceImages.push(img)\n        }\n        this._callOnLoaded(this.startTime || 0, null, null)\n      } catch (e) {}\n    }\n  }\n\n  _getFrameIndex(time, total) {\n    if (!this.autoplay) return 0\n    if (total <= 1) return 0\n    const t = Math.max(0, time - (this.startTime || 0))\n    const f = Math.floor(t * this.frameRate)\n    if (this.playMode === 'reverse') {\n      if (this.loop) {\n        return total - 1 - (f % total)\n      }\n      const capped = Math.min(f, total - 1)\n      return Math.max(0, total - 1 - capped)\n    }\n    if (this.playMode === 'ping-pong') {\n      const cycle = Math.max(1, total * 2 - 2)\n      const n = this.loop ? (f % cycle) : Math.min(f, cycle)\n      return n < total ? n : (cycle - n)\n    }\n    if (this.loop) {\n      return f % total\n    }\n    return Math.min(f, total - 1)\n  }\n\n  applyVisualEffects(raster, state, width, height, paperInstance = null) {\n    const { paper: p } = this.getPaperInstance(paperInstance)\n    const hasBorder = state.borderWidth > 0\n    const hasShadow = state.shadowBlur > 0\n    const hasFlip = state.flipX || state.flipY\n    const hasBlendMode = state.blendMode && state.blendMode !== 'normal'\n    const hasFilter = state.filter || (state.brightness !== 1 || state.contrast !== 1 || state.saturation !== 1 || state.hue !== 0 || state.grayscale > 0)\n    const hasGlassEffect = state.glassEffect\n    if (!hasBorder && !hasShadow && !hasFlip && !hasBlendMode && !hasFilter && !hasGlassEffect) {\n      return raster\n    }\n    const group = new p.Group()\n    if (hasFlip) {\n      if (state.flipX) {\n        raster.scale(-1, 1, raster.position)\n      }\n      if (state.flipY) {\n        raster.scale(1, -1, raster.position)\n      }\n    }\n    if (hasBlendMode) {\n      raster.blendMode = state.blendMode\n    }\n    if (hasShadow) {\n      const shadowRaster = raster.clone()\n      shadowRaster.position = new p.Point(\n        raster.position.x + (state.shadowOffsetX || 0),\n        raster.position.y + (state.shadowOffsetY || 0)\n      )\n      shadowRaster.opacity = 0.3\n      if (state.shadowColor) {\n        const shadowColor = new p.Color(state.shadowColor)\n        shadowRaster.tint = shadowColor\n      }\n      if (state.shadowBlur > 0) {\n        const blurFactor = Math.max(1, state.shadowBlur / 10)\n        shadowRaster.size = new p.Size(\n          shadowRaster.size.width * (1 + blurFactor * 0.1),\n          shadowRaster.size.height * (1 + blurFactor * 0.1)\n        )\n      }\n      group.addChild(shadowRaster)\n    }\n    group.addChild(raster)\n    if (hasBorder) {\n      const borderPath = new p.Path.Rectangle({\n        rectangle: new p.Rectangle(\n          raster.position.x - width / 2,\n          raster.position.y - height / 2,\n          width,\n          height\n        ),\n        radius: state.borderRadius || 0,\n      })\n      borderPath.strokeColor = new p.Color(state.borderColor || '#000000')\n      borderPath.strokeWidth = state.borderWidth\n      borderPath.fillColor = null\n      group.addChild(borderPath)\n    }\n    if (hasGlassEffect && state.glassBorder) {\n      const glassBorderPath = new p.Path.Rectangle({\n        rectangle: new p.Rectangle(\n          raster.position.x - width / 2,\n          raster.position.y - height / 2,\n          width,\n          height\n        ),\n        radius: state.borderRadius || 0,\n      })\n      glassBorderPath.strokeColor = new p.Color(state.glassBorderColor || '#ffffff')\n      glassBorderPath.strokeWidth = state.glassBorderWidth || 1\n      glassBorderPath.fillColor = null\n      glassBorderPath.opacity = 0.5\n      group.addChild(glassBorderPath)\n    }\n    return group.children.length > 1 ? group : raster\n  }\n\n  async render(layer, time, paperInstance = null) {\n    if (!this.visible) return null\n    if (!this.isActiveAtTime(time)) return null\n    if (!this.loaded && (!this.srcDir || this.sequenceImages.length === 0)) {\n      try {\n        await Promise.race([\n          this.initialize(),\n          new Promise((_, reject) => setTimeout(() => reject(new Error('Sprite initialization timeout (5s)')), 5000))\n        ])\n      } catch (_) {\n        return null\n      }\n    }\n    const { paper: p, project } = this.getPaperInstance(paperInstance)\n    const viewSize = project?.view?.viewSize || { width: 1920, height: 1080 }\n    const context = { width: viewSize.width, height: viewSize.height }\n    const state = this.getStateAtTime(time, context)\n    const containerSize = this.convertSize(state.width, state.height, context)\n    const containerWidth = containerSize.width || viewSize.width\n    const containerHeight = containerSize.height || viewSize.height\n\n    let raster = null\n    let width = containerWidth\n    let height = containerHeight\n\n    if (this.sequenceImages.length > 0) {\n      const total = this.sequenceImages.length\n      const idx = this._getFrameIndex(time, total)\n      const img = this.sequenceImages[Math.max(0, Math.min(idx, total - 1))]\n      const imageWidth = img.width || 0\n      const imageHeight = img.height || 0\n      const fit = state.fit || this.fit\n      const fitResult = calculateImageFit({\n        imageWidth,\n        imageHeight,\n        containerWidth,\n        containerHeight,\n        fit\n      })\n      width = fitResult.width\n      height = fitResult.height\n      const pos = this.calculatePosition(state, context, { width, height })\n      raster = new p.Raster(img)\n      raster.position = new p.Point(pos.x, pos.y)\n      const sourceWidth = imageWidth || width\n      const sourceHeight = imageHeight || height\n      if (sourceWidth > 0 && sourceHeight > 0) {\n        const scaleX = width / sourceWidth\n        const scaleY = height / sourceHeight\n        raster.scale(scaleX, scaleY, raster.position)\n      } else {\n        raster.size = new p.Size(width, height)\n      }\n    } else if (this.imageData) {\n      let fw = this.frameWidth\n      let fh = this.frameHeight\n      const sheetW = this.imageData.width || 0\n      const sheetH = this.imageData.height || 0\n      if (!fw && this.columns > 0) fw = Math.floor(sheetW / this.columns)\n      if (!fh && this.rows > 0) fh = Math.floor(sheetH / this.rows)\n      const total = Math.max(1, this.columns * this.rows)\n      const idx = this._getFrameIndex(time, total)\n      const col = this.columns > 0 ? (idx % this.columns) : 0\n      const row = this.columns > 0 ? Math.floor(idx / this.columns) : 0\n      let sx = col * fw\n      let sy = row * fh\n      if (sx + fw > sheetW) sx = Math.max(0, sheetW - fw)\n      if (sy + fh > sheetH) sy = Math.max(0, sheetH - fh)\n      const canvas = createCanvas(fw, fh)\n      const ctx = canvas.getContext('2d')\n      ctx.drawImage(this.imageData, sx, sy, fw, fh, 0, 0, fw, fh)\n      const imageWidth = fw\n      const imageHeight = fh\n      const fit = state.fit || this.fit\n      const fitResult = calculateImageFit({\n        imageWidth,\n        imageHeight,\n        containerWidth,\n        containerHeight,\n        fit\n      })\n      width = fitResult.width\n      height = fitResult.height\n      const pos = this.calculatePosition(state, context, { width, height })\n      raster = new p.Raster(canvas)\n      raster.position = new p.Point(pos.x, pos.y)\n      const scaleX = width / imageWidth\n      const scaleY = height / imageHeight\n      raster.scale(scaleX, scaleY, raster.position)\n    } else {\n      if (!this._warnedMissing) {\n        this._warnedMissing = true\n      }\n      return null\n    }\n\n    this.applyTransform(raster, state, { applyPosition: false, paperInstance: p })\n    const finalItem = this.applyVisualEffects(raster, state, width, height, p)\n    if (layer) {\n      layer.addChild(finalItem)\n    }\n    return finalItem\n  }\n}\n"],"names":["BaseElement","ElementType","deepMerge","DEFAULT_ELEMENT_CONFIG","loadImage","calculateImageFit","canvas","createCanvas"],"mappings":"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"}