{"version":3,"file":"createTimelinePlaybackCommands.mjs","names":[],"sources":["../../../src/hooks/playback/createTimelinePlaybackCommands.ts"],"sourcesContent":["import { runTimelineCommand } from '#react/hooks/core/runTimelineCommand';\nimport { timelineCommandFail, timelineCommandOk } from '@techsquidtv/canvas-timeline-core';\nimport type { PlaybackOptions, TimelineEngine } from '@techsquidtv/canvas-timeline-core';\nimport { addRational, fromSeconds, subRational } from '@techsquidtv/canvas-timeline-utils';\nimport type { RationalTime } from '@techsquidtv/canvas-timeline-utils';\nimport type { UseTimelinePlaybackResult } from '#react/hooks/playback/useTimelinePlayback';\n\n/** Shared imperative commands. Reads current engine state at invocation. */\nexport function createTimelinePlaybackCommands(\n  engine: TimelineEngine\n): Omit<UseTimelinePlaybackResult, 'playing' | 'playbackRate' | 'inPoint' | 'outPoint'> {\n  const play = (options?: PlaybackOptions) =>\n    runTimelineCommand(() => {\n      if (engine.getState().playing) {\n        return timelineCommandOk();\n      }\n\n      return engine.play(options) ? timelineCommandOk() : timelineCommandFail('unsupported');\n    });\n\n  const pause = () =>\n    runTimelineCommand(() => {\n      engine.pause();\n      return timelineCommandOk();\n    });\n\n  const togglePlayback = () => (engine.getState().playing ? pause() : play());\n\n  const setPlaybackRate = (rate: number) =>\n    runTimelineCommand(() => {\n      engine.setPlaybackRate(rate);\n      return timelineCommandOk();\n    });\n\n  const setPlayheadTime = (time: RationalTime) =>\n    runTimelineCommand(() => {\n      engine.updatePlayhead(time);\n      return timelineCommandOk();\n    });\n\n  const stepForward = (amountSeconds: number = 1) =>\n    runTimelineCommand(() => {\n      engine.updatePlayhead(\n        addRational(engine.playheadTime, fromSeconds(amountSeconds, engine.playheadTime.r))\n      );\n      return timelineCommandOk();\n    });\n\n  const stepBackward = (amountSeconds: number = 1) =>\n    runTimelineCommand(() => {\n      engine.updatePlayhead(\n        subRational(engine.playheadTime, fromSeconds(amountSeconds, engine.playheadTime.r))\n      );\n      return timelineCommandOk();\n    });\n\n  const setInPoint = (time?: RationalTime) =>\n    runTimelineCommand(() => {\n      engine.setInPoint(time ?? engine.playheadTime);\n      return timelineCommandOk();\n    });\n\n  const setOutPoint = (time?: RationalTime) =>\n    runTimelineCommand(() => {\n      engine.setOutPoint(time ?? engine.playheadTime);\n      return timelineCommandOk();\n    });\n\n  const clearInOutPoints = () =>\n    runTimelineCommand(() => {\n      engine.clearInOutPoints();\n      return timelineCommandOk();\n    });\n  return {\n    play,\n    pause,\n    togglePlayback,\n    setPlaybackRate,\n    setPlayheadTime,\n    stepForward,\n    stepBackward,\n    setInPoint,\n    setOutPoint,\n    clearInOutPoints,\n  };\n}\n"],"mappings":";;;;;AAQA,SAAgB,+BACd,QACsF;CACtF,MAAM,QAAQ,YACZ,yBAAyB;EACvB,IAAI,OAAO,SAAS,CAAC,CAAC,SACpB,OAAO,kBAAkB;EAG3B,OAAO,OAAO,KAAK,OAAO,IAAI,kBAAkB,IAAI,oBAAoB,aAAa;CACvF,CAAC;CAEH,MAAM,cACJ,yBAAyB;EACvB,OAAO,MAAM;EACb,OAAO,kBAAkB;CAC3B,CAAC;CAEH,MAAM,uBAAwB,OAAO,SAAS,CAAC,CAAC,UAAU,MAAM,IAAI,KAAK;CAEzE,MAAM,mBAAmB,SACvB,yBAAyB;EACvB,OAAO,gBAAgB,IAAI;EAC3B,OAAO,kBAAkB;CAC3B,CAAC;CAEH,MAAM,mBAAmB,SACvB,yBAAyB;EACvB,OAAO,eAAe,IAAI;EAC1B,OAAO,kBAAkB;CAC3B,CAAC;CAEH,MAAM,eAAe,gBAAwB,MAC3C,yBAAyB;EACvB,OAAO,eACL,YAAY,OAAO,cAAc,YAAY,eAAe,OAAO,aAAa,CAAC,CAAC,CACpF;EACA,OAAO,kBAAkB;CAC3B,CAAC;CAEH,MAAM,gBAAgB,gBAAwB,MAC5C,yBAAyB;EACvB,OAAO,eACL,YAAY,OAAO,cAAc,YAAY,eAAe,OAAO,aAAa,CAAC,CAAC,CACpF;EACA,OAAO,kBAAkB;CAC3B,CAAC;CAEH,MAAM,cAAc,SAClB,yBAAyB;EACvB,OAAO,WAAW,QAAQ,OAAO,YAAY;EAC7C,OAAO,kBAAkB;CAC3B,CAAC;CAEH,MAAM,eAAe,SACnB,yBAAyB;EACvB,OAAO,YAAY,QAAQ,OAAO,YAAY;EAC9C,OAAO,kBAAkB;CAC3B,CAAC;CAEH,MAAM,yBACJ,yBAAyB;EACvB,OAAO,iBAAiB;EACxB,OAAO,kBAAkB;CAC3B,CAAC;CACH,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF"}