{"version":3,"file":"HueRotation.mjs","sources":["../../../src/filters/HueRotation.ts"],"sourcesContent":["import { cos } from '../util/misc/cos';\nimport { sin } from '../util/misc/sin';\nimport {\n  ColorMatrix,\n  type ColorMatrixOwnProps,\n  colorMatrixDefaultValues,\n} from './ColorMatrix';\nimport type { TWebGLPipelineState, T2DPipelineState } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\n\nexport type HueRotationOwnProps = ColorMatrixOwnProps & {\n  rotation: number;\n};\n\nexport type HueRotationSerializedProps = {\n  rotation: number;\n};\n\nexport const hueRotationDefaultValues: HueRotationOwnProps = {\n  ...colorMatrixDefaultValues,\n  rotation: 0,\n};\n\n/**\n * HueRotation filter class\n * @example\n * const filter = new HueRotation({\n *   rotation: -0.5\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class HueRotation extends ColorMatrix<\n  'HueRotation',\n  HueRotationOwnProps,\n  HueRotationSerializedProps\n> {\n  /**\n   * HueRotation value, from -1 to 1.\n   */\n  declare rotation: HueRotationOwnProps['rotation'];\n\n  static type = 'HueRotation';\n\n  static defaults = hueRotationDefaultValues;\n\n  calculateMatrix() {\n    const rad = this.rotation * Math.PI,\n      cosine = cos(rad),\n      sine = sin(rad),\n      aThird = 1 / 3,\n      aThirdSqtSin = Math.sqrt(aThird) * sine,\n      OneMinusCos = 1 - cosine;\n    this.matrix = [\n      cosine + OneMinusCos / 3,\n      aThird * OneMinusCos - aThirdSqtSin,\n      aThird * OneMinusCos + aThirdSqtSin,\n      0,\n      0,\n      aThird * OneMinusCos + aThirdSqtSin,\n      cosine + aThird * OneMinusCos,\n      aThird * OneMinusCos - aThirdSqtSin,\n      0,\n      0,\n      aThird * OneMinusCos - aThirdSqtSin,\n      aThird * OneMinusCos + aThirdSqtSin,\n      cosine + aThird * OneMinusCos,\n      0,\n      0,\n      0,\n      0,\n      0,\n      1,\n      0,\n    ];\n  }\n\n  isNeutralState() {\n    return this.rotation === 0;\n  }\n\n  applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n    this.calculateMatrix();\n    super.applyTo(options);\n  }\n\n  toObject() {\n    return {\n      type: this.type,\n      rotation: this.rotation,\n    };\n  }\n}\n\nclassRegistry.setClass(HueRotation);\n"],"names":["hueRotationDefaultValues","colorMatrixDefaultValues","rotation","HueRotation","ColorMatrix","calculateMatrix","rad","Math","PI","cosine","cos","sine","sin","aThird","aThirdSqtSin","sqrt","OneMinusCos","matrix","isNeutralState","applyTo","options","toObject","type","_defineProperty","classRegistry","setClass"],"mappings":";;;;;;AAkBO,MAAMA,wBAA6C,GAAG;AAC3D,EAAA,GAAGC,wBAAwB;AAC3BC,EAAAA,QAAQ,EAAE;AACZ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,WAAW,SAASC,WAAW,CAI1C;AAUAC,EAAAA,eAAeA,GAAG;IAChB,MAAMC,GAAG,GAAG,IAAI,CAACJ,QAAQ,GAAGK,IAAI,CAACC,EAAE;AACjCC,MAAAA,MAAM,GAAGC,GAAG,CAACJ,GAAG,CAAC;AACjBK,MAAAA,IAAI,GAAGC,GAAG,CAACN,GAAG,CAAC;MACfO,MAAM,GAAG,CAAC,GAAG,CAAC;MACdC,YAAY,GAAGP,IAAI,CAACQ,IAAI,CAACF,MAAM,CAAC,GAAGF,IAAI;MACvCK,WAAW,GAAG,CAAC,GAAGP,MAAM;AAC1B,IAAA,IAAI,CAACQ,MAAM,GAAG,CACZR,MAAM,GAAGO,WAAW,GAAG,CAAC,EACxBH,MAAM,GAAGG,WAAW,GAAGF,YAAY,EACnCD,MAAM,GAAGG,WAAW,GAAGF,YAAY,EACnC,CAAC,EACD,CAAC,EACDD,MAAM,GAAGG,WAAW,GAAGF,YAAY,EACnCL,MAAM,GAAGI,MAAM,GAAGG,WAAW,EAC7BH,MAAM,GAAGG,WAAW,GAAGF,YAAY,EACnC,CAAC,EACD,CAAC,EACDD,MAAM,GAAGG,WAAW,GAAGF,YAAY,EACnCD,MAAM,GAAGG,WAAW,GAAGF,YAAY,EACnCL,MAAM,GAAGI,MAAM,GAAGG,WAAW,EAC7B,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,EACD,CAAC,CACF;AACH,EAAA;AAEAE,EAAAA,cAAcA,GAAG;AACf,IAAA,OAAO,IAAI,CAAChB,QAAQ,KAAK,CAAC;AAC5B,EAAA;EAEAiB,OAAOA,CAACC,OAA+C,EAAE;IACvD,IAAI,CAACf,eAAe,EAAE;AACtB,IAAA,KAAK,CAACc,OAAO,CAACC,OAAO,CAAC;AACxB,EAAA;AAEAC,EAAAA,QAAQA,GAAG;IACT,OAAO;MACLC,IAAI,EAAE,IAAI,CAACA,IAAI;MACfpB,QAAQ,EAAE,IAAI,CAACA;KAChB;AACH,EAAA;AACF;AAvDE;AACF;AACA;AAFEqB,eAAA,CALWpB,WAAW,EAAA,MAAA,EAUR,aAAa,CAAA;AAAAoB,eAAA,CAVhBpB,WAAW,EAAA,UAAA,EAYJH,wBAAwB,CAAA;AAkD5CwB,aAAa,CAACC,QAAQ,CAACtB,WAAW,CAAC;;;;"}