{"version":3,"sources":["../src/constants.ts","../src/index.ts"],"sourcesContent":["import { Settings } from \"./types\";\n\nexport const DEFAULT_SETTINGS: Settings = {\n  reverse: false,\n  max: 15,\n  startX: 0,\n  startY: 0,\n  perspective: 1000,\n  easing: \"cubic-bezier(.03,.98,.52,.99)\",\n  scale: 1,\n  speed: 300,\n  transition: true,\n  axis: null,\n  glare: false,\n  \"max-glare\": 1,\n  \"glare-prerender\": false,\n  \"full-page-listening\": false,\n  \"mouse-event-element\": null,\n  reset: true,\n  \"reset-to-start\": true,\n  gyroscope: true,\n  gyroscopeMinAngleX: -45,\n  gyroscopeMaxAngleX: 45,\n  gyroscopeMinAngleY: -45,\n  gyroscopeMaxAngleY: 45,\n  gyroscopeSamples: 10,\n};\n","import { Settings } from \"./types\";\nimport { DEFAULT_SETTINGS } from \"./constants\";\n\nexport class Tilt3d {\n  private settings: Settings;\n\n  private width: number | null = null;\n  private height: number | null = null;\n  private clientWidth: number | null = null;\n  private clientHeight: number | null = null;\n  private left: number | null = null;\n  private top: number | null = null;\n\n  private gammazero: number | null = null;\n  private betazero: number | null = null;\n  private lastgammazero: number | null = null;\n  private lastbetazero: number | null = null;\n\n  private transitionTimeout: number | null = null;\n  private updateCall: number | null = null;\n  private event: MouseEvent | { clientX: number; clientY: number } | null =\n    null;\n\n  private updateBind: () => void;\n  private resetBind: () => void;\n\n  private reverse: number;\n  private resetToStart: boolean;\n  private glare: boolean;\n  private glarePrerender: boolean;\n  private fullPageListening: boolean;\n  private gyroscope: boolean;\n  private gyroscopeSamples: number;\n\n  private elementListener: EventTarget;\n\n  private glareElement: HTMLElement | null = null;\n  private glareElementWrapper: HTMLElement | null = null;\n\n  private onMouseEnterBind: ((event: MouseEvent) => void) | undefined =\n    undefined;\n  private onMouseMoveBind: ((event: MouseEvent) => void) | undefined =\n    undefined;\n  private onMouseLeaveBind: ((event: MouseEvent) => void) | undefined =\n    undefined;\n  private onWindowResizeBind: (() => void) | undefined = undefined;\n  private onDeviceOrientationBind:\n    | ((event: DeviceOrientationEvent) => void)\n    | undefined = undefined;\n\n  constructor(\n    private readonly element: HTMLElement,\n    private readonly options: Partial<Settings> = {},\n  ) {\n    if (!(element instanceof Node)) {\n      throw new Error(\n        `Can't initialize Tilt3d because ${element} is not a Node.`,\n      );\n    }\n\n    this.updateBind = this.update.bind(this);\n    this.resetBind = this.reset.bind(this);\n\n    this.settings = this.extendSettings(options);\n    this.reverse = this.settings.reverse ? -1 : 1;\n    this.resetToStart = Tilt3d.isSettingTrue(this.settings[\"reset-to-start\"]);\n    this.glare = Tilt3d.isSettingTrue(this.settings.glare);\n    this.glarePrerender = Tilt3d.isSettingTrue(\n      this.settings[\"glare-prerender\"],\n    );\n    this.fullPageListening = Tilt3d.isSettingTrue(\n      this.settings[\"full-page-listening\"],\n    );\n    this.gyroscope = Tilt3d.isSettingTrue(this.settings.gyroscope);\n    this.gyroscopeSamples = this.settings.gyroscopeSamples;\n\n    this.elementListener = this.getElementListener();\n\n    if (this.glare) {\n      this.prepareGlare();\n    }\n\n    if (this.fullPageListening) {\n      this.updateClientSize();\n    }\n\n    this.addEventListeners();\n    this.reset();\n\n    if (!this.resetToStart) {\n      this.settings.startX = 0;\n      this.settings.startY = 0;\n    }\n  }\n\n  static isSettingTrue(setting: any): boolean {\n    return setting === \"\" || setting === true || setting === 1;\n  }\n\n  getElementListener(): EventTarget {\n    if (this.fullPageListening) {\n      return window.document;\n    }\n\n    const mouseEventElement = this.settings[\"mouse-event-element\"];\n    if (typeof mouseEventElement === \"string\") {\n      const element = document.querySelector(mouseEventElement);\n      if (element) return element;\n    }\n\n    if (mouseEventElement instanceof Node) {\n      return mouseEventElement;\n    }\n\n    return this.element;\n  }\n\n  addEventListeners(): void {\n    this.onMouseEnterBind = this.onMouseEnter.bind(this);\n    this.onMouseMoveBind = this.onMouseMove.bind(this);\n    this.onMouseLeaveBind = this.onMouseLeave.bind(this);\n    this.onWindowResizeBind = this.onWindowResize.bind(this);\n    this.onDeviceOrientationBind = this.onDeviceOrientation.bind(this);\n\n    this.elementListener.addEventListener(\n      \"mouseenter\",\n      this.onMouseEnterBind as any,\n    );\n    this.elementListener.addEventListener(\n      \"mouseleave\",\n      this.onMouseLeaveBind as any,\n    );\n    this.elementListener.addEventListener(\n      \"mousemove\",\n      this.onMouseMoveBind as any,\n    );\n\n    if (this.glare || this.fullPageListening) {\n      window.addEventListener(\"resize\", this.onWindowResizeBind);\n    }\n\n    if (this.gyroscope) {\n      window.addEventListener(\n        \"deviceorientation\",\n        this.onDeviceOrientationBind,\n      );\n    }\n  }\n\n  removeEventListeners(): void {\n    this.elementListener.removeEventListener(\n      \"mouseenter\",\n      this.onMouseEnterBind as any,\n    );\n    this.elementListener.removeEventListener(\n      \"mouseleave\",\n      this.onMouseLeaveBind as any,\n    );\n    this.elementListener.removeEventListener(\n      \"mousemove\",\n      this.onMouseMoveBind as any,\n    );\n\n    if (this.gyroscope) {\n      window.removeEventListener(\n        \"deviceorientation\",\n        this.onDeviceOrientationBind as any,\n      );\n    }\n\n    if (this.glare || this.fullPageListening) {\n      window.removeEventListener(\"resize\", this.onWindowResizeBind as any);\n    }\n  }\n\n  destroy(): void {\n    clearTimeout(this.transitionTimeout as number);\n    if (this.updateCall !== null) {\n      cancelAnimationFrame(this.updateCall);\n    }\n\n    this.element.style.willChange = \"\";\n    this.element.style.transition = \"\";\n    this.element.style.transform = \"\";\n    this.resetGlare();\n\n    this.removeEventListeners();\n\n    (this.element as any).tilt3d = null;\n\n    delete (this.element as any).tilt3d;\n\n    // this.element = null as unknown as HTMLElement;\n  }\n\n  onDeviceOrientation(event: DeviceOrientationEvent): void {\n    if (event.gamma === null || event.beta === null) {\n      return;\n    }\n\n    this.updateElementPosition();\n\n    if (this.gyroscopeSamples > 0) {\n      this.lastgammazero = this.gammazero;\n      this.lastbetazero = this.betazero;\n\n      if (this.gammazero === null) {\n        this.gammazero = event.gamma;\n        this.betazero = event.beta;\n      } else {\n        this.gammazero = (event.gamma + (this.lastgammazero || 0)) / 2;\n        this.betazero = (event.beta + (this.lastbetazero || 0)) / 2;\n      }\n\n      this.gyroscopeSamples -= 1;\n    }\n\n    const totalAngleX =\n      this.settings.gyroscopeMaxAngleX - this.settings.gyroscopeMinAngleX;\n    const totalAngleY =\n      this.settings.gyroscopeMaxAngleY - this.settings.gyroscopeMinAngleY;\n\n    const degreesPerPixelX = totalAngleX / (this.width || 1);\n    const degreesPerPixelY = totalAngleY / (this.height || 1);\n\n    const angleX =\n      event.gamma - (this.settings.gyroscopeMinAngleX + (this.gammazero || 0));\n    const angleY =\n      event.beta - (this.settings.gyroscopeMinAngleY + (this.betazero || 0));\n\n    const posX = angleX / degreesPerPixelX;\n    const posY = angleY / degreesPerPixelY;\n\n    if (this.updateCall !== null) {\n      cancelAnimationFrame(this.updateCall);\n    }\n\n    this.event = {\n      clientX: posX + (this.left || 0),\n      clientY: posY + (this.top || 0),\n    };\n\n    this.updateCall = requestAnimationFrame(this.updateBind);\n  }\n\n  onMouseEnter(): void {\n    this.updateElementPosition();\n    this.element.style.willChange = \"transform\";\n    this.setTransition();\n  }\n\n  onMouseMove(event: MouseEvent): void {\n    if (this.updateCall !== null) {\n      cancelAnimationFrame(this.updateCall);\n    }\n\n    this.event = event;\n    this.updateCall = requestAnimationFrame(this.updateBind);\n  }\n\n  onMouseLeave(): void {\n    this.setTransition();\n\n    if (this.settings.reset) {\n      requestAnimationFrame(this.resetBind);\n    }\n  }\n\n  reset(): void {\n    this.onMouseEnter();\n\n    if (this.fullPageListening) {\n      this.event = {\n        clientX:\n          ((this.settings.startX + this.settings.max) /\n            (2 * this.settings.max)) *\n          (this.clientWidth || 1),\n        clientY:\n          ((this.settings.startY + this.settings.max) /\n            (2 * this.settings.max)) *\n          (this.clientHeight || 1),\n      };\n    } else {\n      this.event = {\n        clientX:\n          (this.left || 0) +\n          ((this.settings.startX + this.settings.max) /\n            (2 * this.settings.max)) *\n            (this.width || 1),\n        clientY:\n          (this.top || 0) +\n          ((this.settings.startY + this.settings.max) /\n            (2 * this.settings.max)) *\n            (this.height || 1),\n      };\n    }\n\n    const backupScale = this.settings.scale;\n    this.settings.scale = 1;\n    this.update();\n    this.settings.scale = backupScale;\n    this.resetGlare();\n  }\n\n  resetGlare(): void {\n    if (this.glare && this.glareElement) {\n      this.glareElement.style.transform =\n        \"rotate(180deg) translate(-50%, -50%)\";\n      this.glareElement.style.opacity = \"0\";\n    }\n  }\n\n  getValues(): {\n    tiltX: string;\n    tiltY: string;\n    percentageX: number;\n    percentageY: number;\n    angle: number;\n  } {\n    let x: number, y: number;\n\n    if (this.fullPageListening) {\n      x = (this.event?.clientX || 0) / (this.clientWidth || 1);\n      y = (this.event?.clientY || 0) / (this.clientHeight || 1);\n    } else {\n      x = ((this.event?.clientX || 0) - (this.left || 0)) / (this.width || 1);\n      y = ((this.event?.clientY || 0) - (this.top || 0)) / (this.height || 1);\n    }\n\n    x = Math.min(Math.max(x, 0), 1);\n    y = Math.min(Math.max(y, 0), 1);\n\n    const tiltX = (\n      this.reverse *\n      (this.settings.max - x * this.settings.max * 2)\n    ).toFixed(2);\n    const tiltY = (\n      this.reverse *\n      (y * this.settings.max * 2 - this.settings.max)\n    ).toFixed(2);\n    const angle =\n      Math.atan2(\n        (this.event?.clientX || 0) - ((this.left || 0) + (this.width || 0) / 2),\n        -(this.event?.clientY || 0) -\n          ((this.top || 0) + (this.height || 0) / 2),\n      ) *\n      (180 / Math.PI);\n\n    return {\n      tiltX,\n      tiltY,\n      percentageX: x * 100,\n      percentageY: y * 100,\n      angle,\n    };\n  }\n\n  updateElementPosition(): void {\n    const rect = this.element.getBoundingClientRect();\n\n    this.width = this.element.offsetWidth;\n    this.height = this.element.offsetHeight;\n    this.left = rect.left;\n    this.top = rect.top;\n  }\n\n  update(): void {\n    const values = this.getValues();\n\n    this.element.style.transform = `perspective(${this.settings.perspective}px) rotateX(${this.settings.axis === \"x\" ? 0 : values.tiltY}deg) rotateY(${this.settings.axis === \"y\" ? 0 : values.tiltX}deg) scale3d(${this.settings.scale}, ${this.settings.scale}, ${this.settings.scale})`;\n\n    if (this.glare && this.glareElement) {\n      this.glareElement.style.transform = `rotate(${values.angle}deg) translate(-50%, -50%)`;\n      this.glareElement.style.opacity = `${(values.percentageY * this.settings[\"max-glare\"]) / 100}`;\n    }\n\n    this.element.dispatchEvent(\n      new CustomEvent(\"tiltChange\", {\n        detail: values,\n      }),\n    );\n\n    this.updateCall = null;\n  }\n\n  prepareGlare(): void {\n    if (!this.glarePrerender) {\n      const tiltGlare = document.createElement(\"div\");\n      tiltGlare.classList.add(\"tilt-glare\");\n\n      const tiltGlareInner = document.createElement(\"div\");\n      tiltGlareInner.classList.add(\"tilt-glare-inner\");\n\n      tiltGlare.appendChild(tiltGlareInner);\n      this.element.appendChild(tiltGlare);\n    }\n\n    this.glareElementWrapper = this.element.querySelector(\n      \".tilt-glare\",\n    ) as HTMLElement;\n    this.glareElement = this.element.querySelector(\n      \".tilt-glare-inner\",\n    ) as HTMLElement;\n\n    if (this.glarePrerender) {\n      return;\n    }\n\n    Object.assign(this.glareElementWrapper.style, {\n      position: \"absolute\",\n      top: \"0\",\n      left: \"0\",\n      width: \"100%\",\n      height: \"100%\",\n      overflow: \"hidden\",\n      \"pointer-events\": \"none\",\n      \"border-radius\": \"inherit\",\n    });\n\n    Object.assign(this.glareElement.style, {\n      position: \"absolute\",\n      top: \"50%\",\n      left: \"50%\",\n      \"pointer-events\": \"none\",\n      \"background-image\": `linear-gradient(0deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%)`,\n      transform: \"rotate(180deg) translate(-50%, -50%)\",\n      \"transform-origin\": \"0% 0%\",\n      opacity: \"0\",\n    });\n\n    this.updateGlareSize();\n  }\n\n  updateGlareSize(): void {\n    if (this.glare && this.glareElement) {\n      const glareSize =\n        (this.element.offsetWidth > this.element.offsetHeight\n          ? this.element.offsetWidth\n          : this.element.offsetHeight) * 2;\n\n      Object.assign(this.glareElement.style, {\n        width: `${glareSize}px`,\n        height: `${glareSize}px`,\n      });\n    }\n  }\n\n  updateClientSize(): void {\n    this.clientWidth =\n      window.innerWidth ||\n      document.documentElement.clientWidth ||\n      document.body.clientWidth;\n\n    this.clientHeight =\n      window.innerHeight ||\n      document.documentElement.clientHeight ||\n      document.body.clientHeight;\n  }\n\n  onWindowResize(): void {\n    this.updateGlareSize();\n    this.updateClientSize();\n  }\n\n  setTransition(): void {\n    clearTimeout(this.transitionTimeout as number);\n    this.element.style.transition = `${this.settings.speed}ms ${this.settings.easing}`;\n    if (this.glare && this.glareElement) {\n      this.glareElement.style.transition = `opacity ${this.settings.speed}ms ${this.settings.easing}`;\n    }\n\n    this.transitionTimeout = window.setTimeout(() => {\n      this.element.style.transition = \"\";\n      if (this.glare && this.glareElement) {\n        this.glareElement.style.transition = \"\";\n      }\n    }, this.settings.speed);\n  }\n\n  extendSettings(settings: Partial<Settings>): Settings {\n    const newSettings: any = {};\n    for (const property in DEFAULT_SETTINGS) {\n      if (property in settings) {\n        newSettings[property] = settings[property as keyof Settings];\n      } else if (this.element.hasAttribute(`data-tilt-${property}`)) {\n        const attribute = this.element.getAttribute(`data-tilt-${property}`);\n        try {\n          newSettings[property] = JSON.parse(attribute as string);\n        } catch (error) {\n          newSettings[property] = attribute;\n        }\n      } else {\n        newSettings[property] = DEFAULT_SETTINGS[property as keyof Settings];\n      }\n    }\n\n    return newSettings;\n  }\n\n  static init(\n    nodes: Node | Node[] | NodeListOf<HTMLElement>,\n    settings?: Partial<Settings>,\n  ): void {\n    let elements: HTMLElement[] = [];\n\n    // Convert elements to array of HTMLElements\n    if (nodes instanceof Node) {\n      elements = [nodes as HTMLElement];\n    } else if (nodes instanceof NodeList) {\n      elements = Array.from(nodes);\n    } else if (Array.isArray(nodes)) {\n      elements = nodes.filter(\n        (el): el is HTMLElement => el instanceof HTMLElement,\n      );\n    }\n\n    // If elementArray is empty or invalid, return early\n    if (elements.length === 0) {\n      return;\n    }\n\n    // Initialize Tilt3d for each element\n    elements.forEach((element) => {\n      if (!(element as any).tilt3d) {\n        (element as any).tilt3d = new Tilt3d(element, settings);\n      }\n    });\n  }\n}\n\ndeclare global {\n  interface Window {\n    Tilt3d: typeof Tilt3d;\n  }\n}\n\nif (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n  window.Tilt3d = Tilt3d;\n\n  Tilt3d.init(document.querySelectorAll(\"[data-tilt]\"));\n}\n\nexport * from \"./types\";\nexport * from \"./constants\";\n"],"mappings":"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","names":[]}