From 5cfc33b96f17a67742ba2e520046761ed0a1a886 Mon Sep 17 00:00:00 2001 From: kvvasuu Date: Sun, 4 Oct 2026 22:53:11 +0200 Subject: [PATCH] build: bundle with Vite like math Vite builds one file per source file, so dist and the package exports stay the same, and tsc writes the declarations with a script that adds .js to their imports. Sources drop the .js from imports, and the package is marked side-effect free. --- CONTRIBUTING.md | 6 +-- package.json | 6 ++- pnpm-lock.yaml | 3 ++ scripts/add-js-extensions-dts.mjs | 22 ++++++++++ src/core/CameraState.ts | 4 +- src/core/Klipp.ts | 20 ++++----- src/core/TargetPose.ts | 4 +- src/core/VirtualCamera.ts | 12 ++--- src/core/aim/HardLookAtAim.ts | 6 +-- src/core/aim/PanTiltAim.ts | 6 +-- src/core/aim/RotateWithFollowTargetAim.ts | 10 ++--- src/core/aim/RotationComposerAim.ts | 10 ++--- src/core/aim/hardLookAt.ts | 2 +- src/core/aim/index.ts | 22 +++++----- src/core/aim/panTilt.ts | 4 +- src/core/aim/rotateWithFollowTarget.ts | 8 ++-- src/core/aim/rotationComposer.ts | 16 +++---- src/core/blend/BlendDefinition.ts | 2 +- src/core/blend/BlendDriver.ts | 8 ++-- src/core/blend/blend.ts | 12 ++--- src/core/blend/index.ts | 12 ++--- src/core/blend/lerpCameraState.ts | 4 +- src/core/body/FollowBody.ts | 12 ++--- src/core/body/HardLockToTargetBody.ts | 10 ++--- src/core/body/PositionComposerBody.ts | 10 ++--- src/core/body/follow.ts | 12 ++--- src/core/body/hardLockToTarget.ts | 8 ++-- src/core/body/index.ts | 20 ++++----- src/core/body/positionComposer.ts | 16 +++---- src/core/damping/Damper.ts | 4 +- src/core/damping/index.ts | 10 ++--- src/core/damping/predictor.ts | 4 +- src/core/debug/debugZones.ts | 4 +- src/core/debug/index.ts | 4 +- src/core/extension/GroupFramingExtension.ts | 8 ++-- src/core/extension/LensExtension.ts | 8 ++-- src/core/extension/groupFraming.ts | 12 ++--- src/core/extension/index.ts | 12 ++--- src/core/extension/lens.ts | 8 ++-- src/core/groups/ClearShot.ts | 10 ++--- src/core/groups/MixingCamera.ts | 6 +-- src/core/groups/Sequencer.ts | 10 ++--- src/core/groups/StateDrivenCamera.ts | 10 ++--- src/core/groups/clearShotState.ts | 8 ++-- src/core/groups/index.ts | 22 +++++----- src/core/groups/mixCameraStates.ts | 2 +- src/core/groups/sequencerState.ts | 8 ++-- src/core/groups/stateDrivenState.ts | 8 ++-- src/core/impulse/ImpulseField.ts | 4 +- src/core/impulse/ImpulseListenerNoise.ts | 10 ++--- src/core/impulse/impulseListener.ts | 4 +- src/core/impulse/index.ts | 12 ++--- src/core/index.ts | 42 +++++++++--------- src/core/input/InputAxis.ts | 8 ++-- src/core/input/axis.ts | 8 ++-- src/core/input/index.ts | 14 +++--- src/core/input/inputMapping.ts | 6 +-- src/core/klippState.ts | 10 ++--- .../noise/BasicMultiChannelPerlinNoise.ts | 8 ++-- src/core/noise/index.ts | 6 +-- src/core/noise/perlinNoise.ts | 8 ++-- src/dom/DebugOverlay.ts | 2 +- src/dom/InputAxisController.ts | 12 ++--- src/dom/InputSystem.ts | 2 +- src/dom/index.ts | 6 +-- src/react/CameraFrustumHelper.tsx | 4 +- src/react/DebugZoneOverlay.tsx | 4 +- src/react/Klipp.tsx | 8 ++-- src/react/KlippContext.ts | 4 +- src/react/VirtualCamera.tsx | 12 ++--- src/react/VirtualCameraContext.ts | 4 +- src/react/aim/Aim.ts | 8 ++-- src/react/aim/HardLookAt.tsx | 6 +-- src/react/aim/PanTilt.tsx | 12 ++--- src/react/aim/RotateWithFollowTarget.tsx | 8 ++-- src/react/aim/RotationComposer.tsx | 17 +++---- src/react/body/Body.ts | 6 +-- src/react/body/CameraControls.tsx | 8 ++-- src/react/body/Follow.tsx | 10 ++--- src/react/body/HardLockToTarget.tsx | 8 ++-- src/react/body/PositionComposer.tsx | 12 ++--- src/react/body/camera-controls.ts | 4 +- src/react/extension/Extension.ts | 4 +- src/react/extension/GroupFraming.tsx | 19 +++----- src/react/extension/Lens.tsx | 6 +-- src/react/impulse/ImpulseListener.tsx | 10 ++--- src/react/index.ts | 44 +++++++++---------- src/react/input/InputAxisOwnerContext.ts | 2 +- src/react/input/InputController.tsx | 16 +++---- src/react/noise/BasicMultiChannelPerlin.tsx | 6 +-- src/react/noise/Noise.ts | 2 +- .../noise/useBasicMultiChannelPerlinNoise.ts | 8 ++-- src/react/useCameraTransitionEvent.ts | 4 +- src/three/CameraFrustumHelperThree.ts | 2 +- src/three/KlippThree.ts | 16 +++---- src/three/VirtualCameraThree.ts | 18 ++++---- src/three/aim/HardLookAtAimThree.ts | 12 ++--- src/three/aim/PanTiltAimThree.ts | 12 ++--- .../aim/RotateWithFollowTargetAimThree.ts | 12 ++--- src/three/aim/RotationComposerAimThree.ts | 20 ++++----- src/three/body/CameraControlsBodyThree.ts | 8 ++-- src/three/body/FollowBodyThree.ts | 16 +++---- src/three/body/HardLockToTargetBodyThree.ts | 12 ++--- src/three/body/PositionComposerBodyThree.ts | 20 ++++----- src/three/camera.ts | 2 +- src/three/damping/Predictor.ts | 2 +- src/three/damping/QuaternionDamper.ts | 4 +- src/three/damping/Vector3Damper.ts | 4 +- .../extension/GroupFramingExtensionThree.ts | 6 +-- src/three/extension/TargetGroup.ts | 12 ++--- src/three/index.ts | 44 +++++++++---------- .../BasicMultiChannelPerlinNoiseThree.ts | 4 +- src/three/readTargetExtent.ts | 8 ++-- src/three/readTargetPose.ts | 6 +-- src/three/resolve/Target.ts | 4 +- src/three/resolve/TargetRegistry.ts | 2 +- test/tsconfig.json | 2 +- tsconfig.build.json | 9 ++++ tsconfig.json | 24 +--------- tsconfig.lib.json | 24 ++++++++++ tsconfig.node.json | 13 ++++++ vite.config.ts | 30 +++++++++++++ 122 files changed, 640 insertions(+), 571 deletions(-) create mode 100644 scripts/add-js-extensions-dts.mjs create mode 100644 tsconfig.build.json create mode 100644 tsconfig.lib.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2bf5a34..166ad43 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,7 +2,7 @@ This project uses semantic commits and semver. -This repo is the library itself (`src/`, built with `tsc` into `dist/`). [`examples/`](examples) is a +This repo is the library itself (`src/`, built with Vite into `dist/`). [`examples/`](examples) is a separate Vite app used as a live testbed while developing. It resolves `@kvvasuu/klipp` straight to `src/` via a Vite alias, so there's no build step in the loop while iterating. @@ -15,10 +15,10 @@ pnpm --filter examples dev ## Scripts (run at the repo root) -- `pnpm run build` - compiles `src/` to `dist/` via `tsc`. +- `pnpm run build` - builds `src/` to `dist/` with Vite, one file per source file, and the declarations with `tsc`. - `pnpm run test` - the unit suite (`vitest`), including the golden trajectory tests. - `pnpm run lint` - `oxlint`, which also enforces the layer boundaries below. -- `pnpm run typecheck` - `tsc` over `src/` and, via `test/tsconfig.json`, the tests. +- `pnpm run typecheck` - `tsc` over `src/`, the config files and, via `test/tsconfig.json`, the tests. - `pnpm run format` - `prettier`. - `pnpm run bench` - the performance benchmark suite (`@pmndrs/labs`). diff --git a/package.json b/package.json index a92c546..46b6518 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "url": "https://github.com/pmndrs/klipp/issues" }, "type": "module", + "sideEffects": false, "main": "dist/core/index.js", "types": "dist/core/index.d.ts", "exports": { @@ -61,9 +62,9 @@ "scripts": { "clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"", "prebuild": "pnpm run clean", - "build": "tsc", + "build": "vite build && tsc -p tsconfig.build.json && node scripts/add-js-extensions-dts.mjs", "lint": "oxlint", - "typecheck": "tsc --noEmit && tsc -p test", + "typecheck": "tsc -p tsconfig.lib.json && tsc -p tsconfig.node.json && tsc -p test", "format": "prettier --write .", "format:check": "prettier --check .", "test": "vitest run", @@ -109,6 +110,7 @@ "react-dom": "^19.3.0", "three": "^0.186.1", "typescript": "~7.0.2", + "vite": "^8.3.1", "vitest": "^5.0.2" }, "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7930639..495bcc0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -186,6 +186,9 @@ importers: typescript: specifier: ~7.0.2 version: 7.0.2 + vite: + specifier: ^8.3.1 + version: 8.3.1(@types/node@24.13.3)(esbuild@0.28.2)(tsx@4.23.12)(yaml@2.9.1) vitest: specifier: ^5.0.2 version: 5.0.2(@types/node@24.13.3)(jsdom@30.1.1)(vite@8.3.1(@types/node@24.13.3)(esbuild@0.28.2)(tsx@4.23.12)(yaml@2.9.1)) diff --git a/scripts/add-js-extensions-dts.mjs b/scripts/add-js-extensions-dts.mjs new file mode 100644 index 0000000..9bd17d3 --- /dev/null +++ b/scripts/add-js-extensions-dts.mjs @@ -0,0 +1,22 @@ +// tsc keeps import paths as written, so declarations import './follow'. Node-style resolution needs './follow.js'. +import fs from 'node:fs'; +import path from 'node:path'; + +const root = path.resolve('dist'); + +const walk = (dir) => + fs.readdirSync(dir, { withFileTypes: true }).flatMap((entry) => { + const file = path.join(dir, entry.name); + return entry.isDirectory() ? walk(file) : [file]; + }); + +for (const file of walk(root).filter((f) => f.endsWith('.d.ts'))) { + const dir = path.dirname(file); + const original = fs.readFileSync(file, 'utf8'); + const fixed = original.replace(/(from\s+['"]|import\(['"])(\.\.?(?:\/[^'"]*)?)(['"])/g, (match, pre, spec, post) => { + if (fs.existsSync(path.join(dir, `${spec}.d.ts`))) return `${pre}${spec}.js${post}`; + if (fs.existsSync(path.join(dir, spec, 'index.d.ts'))) return `${pre}${spec}/index.js${post}`; + return match; + }); + if (fixed !== original) fs.writeFileSync(file, fixed); +} diff --git a/src/core/CameraState.ts b/src/core/CameraState.ts index 516b329..ed4d4ef 100644 --- a/src/core/CameraState.ts +++ b/src/core/CameraState.ts @@ -84,5 +84,5 @@ export const lensEquals = (a: CameraState, b: CameraState): boolean => a.viewOffset[0] === b.viewOffset[0] && a.viewOffset[1] === b.viewOffset[1]; -export { lerp } from './blend/lerpCameraState.js'; -export { mix } from './groups/mixCameraStates.js'; +export { lerp } from './blend/lerpCameraState'; +export { mix } from './groups/mixCameraStates'; diff --git a/src/core/Klipp.ts b/src/core/Klipp.ts index 13e7324..2b998f9 100644 --- a/src/core/Klipp.ts +++ b/src/core/Klipp.ts @@ -1,13 +1,13 @@ -import type { CameraState } from './CameraState.js'; -import * as cameraState from './CameraState.js'; -import { EventDispatcher } from './EventDispatcher.js'; -import { VirtualCamera, type VirtualCameraOptions } from './VirtualCamera.js'; -import { DEFAULT_BLEND, type BlendDefinition, type CustomBlend } from './blend/BlendDefinition.js'; -import type { BlendHints } from './blend/BlendHints.js'; -import * as blend from './blend/blend.js'; -import { advance, attachTo, checkName, prepare, register, run, setHints, setPriority, skip } from './internal.js'; -import type { CameraTransitionEventMap, KlippParams, VirtualCameraConfig } from './klippState.js'; -import * as klippState from './klippState.js'; +import type { CameraState } from './CameraState'; +import * as cameraState from './CameraState'; +import { EventDispatcher } from './EventDispatcher'; +import { VirtualCamera, type VirtualCameraOptions } from './VirtualCamera'; +import { DEFAULT_BLEND, type BlendDefinition, type CustomBlend } from './blend/BlendDefinition'; +import type { BlendHints } from './blend/BlendHints'; +import * as blend from './blend/blend'; +import { advance, attachTo, checkName, prepare, register, run, setHints, setPriority, skip } from './internal'; +import type { CameraTransitionEventMap, KlippParams, VirtualCameraConfig } from './klippState'; +import * as klippState from './klippState'; export type { CameraTransitionEventMap, VirtualCameraConfig }; diff --git a/src/core/TargetPose.ts b/src/core/TargetPose.ts index d5b884b..19b0620 100644 --- a/src/core/TargetPose.ts +++ b/src/core/TargetPose.ts @@ -1,6 +1,6 @@ import type { Quat, Vec3 } from 'math'; -import type { TargetExtent } from './TargetExtent.js'; -import * as targetExtent from './TargetExtent.js'; +import type { TargetExtent } from './TargetExtent'; +import * as targetExtent from './TargetExtent'; /** * A target's world transform and how far it reaches. `rotation` is only meaningful when `hasRotation` is true diff --git a/src/core/VirtualCamera.ts b/src/core/VirtualCamera.ts index 2d28f7a..a55453b 100644 --- a/src/core/VirtualCamera.ts +++ b/src/core/VirtualCamera.ts @@ -1,10 +1,10 @@ import type { Quat, Vec3 } from 'math'; -import { BlendHints } from './blend/BlendHints.js'; -import type { CameraState } from './CameraState.js'; -import * as cameraState from './CameraState.js'; -import { EventDispatcher } from './EventDispatcher.js'; -import { attachTo, checkName, prepare, register, run, setHints, setPriority, skip } from './internal.js'; -import type { CameraTransitionEventMap, Klipp } from './Klipp.js'; +import { BlendHints } from './blend/BlendHints'; +import type { CameraState } from './CameraState'; +import * as cameraState from './CameraState'; +import { EventDispatcher } from './EventDispatcher'; +import { attachTo, checkName, prepare, register, run, setHints, setPriority, skip } from './internal'; +import type { CameraTransitionEventMap, Klipp } from './Klipp'; /** Writes `out` for one frame. Return `true` when more work remains for a later frame. */ export type CameraStateWriter = (out: CameraState, dt: number, justActivated: boolean) => boolean | void; diff --git a/src/core/aim/HardLookAtAim.ts b/src/core/aim/HardLookAtAim.ts index f478db1..f64fee2 100644 --- a/src/core/aim/HardLookAtAim.ts +++ b/src/core/aim/HardLookAtAim.ts @@ -1,6 +1,6 @@ -import type { CameraState } from '../CameraState.js'; -import type { TargetPose } from '../TargetPose.js'; -import * as hardLookAt from './hardLookAt.js'; +import type { CameraState } from '../CameraState'; +import type { TargetPose } from '../TargetPose'; +import * as hardLookAt from './hardLookAt'; /** Rotates so the target is dead-center. Layers override `readTarget` to read their own targets. */ export class HardLookAtAim { diff --git a/src/core/aim/PanTiltAim.ts b/src/core/aim/PanTiltAim.ts index 30c37d8..3815428 100644 --- a/src/core/aim/PanTiltAim.ts +++ b/src/core/aim/PanTiltAim.ts @@ -1,7 +1,7 @@ import type { Quat, Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { TargetPose } from '../TargetPose.js'; -import * as panTilt from './panTilt.js'; +import type { CameraState } from '../CameraState'; +import type { TargetPose } from '../TargetPose'; +import * as panTilt from './panTilt'; /** Rotation from two `InputAxis`: `pan` (yaw) and `tilt` (pitch), relative to an optional target's rotation. */ export class PanTiltAim { diff --git a/src/core/aim/RotateWithFollowTargetAim.ts b/src/core/aim/RotateWithFollowTargetAim.ts index 412bf4a..da3c11b 100644 --- a/src/core/aim/RotateWithFollowTargetAim.ts +++ b/src/core/aim/RotateWithFollowTargetAim.ts @@ -1,9 +1,9 @@ import type { Quat } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; -import type { TargetPose } from '../TargetPose.js'; -import type { RotateWithFollowTargetParams } from './rotateWithFollowTarget.js'; -import * as rotateWithFollowTarget from './rotateWithFollowTarget.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; +import type { TargetPose } from '../TargetPose'; +import type { RotateWithFollowTargetParams } from './rotateWithFollowTarget'; +import * as rotateWithFollowTarget from './rotateWithFollowTarget'; export type RotateWithFollowTargetOptions = Partial; diff --git a/src/core/aim/RotationComposerAim.ts b/src/core/aim/RotationComposerAim.ts index 7cbf239..243a58e 100644 --- a/src/core/aim/RotationComposerAim.ts +++ b/src/core/aim/RotationComposerAim.ts @@ -1,9 +1,9 @@ import type { Quat, Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; -import type { TargetPose } from '../TargetPose.js'; -import type { RotationComposerParams } from './rotationComposer.js'; -import * as rotationComposer from './rotationComposer.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; +import type { TargetPose } from '../TargetPose'; +import type { RotationComposerParams } from './rotationComposer'; +import * as rotationComposer from './rotationComposer'; /** Rotates the camera to place a target at `screenPosition`. Layers override `readTarget`. */ export class RotationComposerAim implements RotationComposerParams { diff --git a/src/core/aim/hardLookAt.ts b/src/core/aim/hardLookAt.ts index 36d5154..e2be14b 100644 --- a/src/core/aim/hardLookAt.ts +++ b/src/core/aim/hardLookAt.ts @@ -1,5 +1,5 @@ import { mat4, quat, vec3, type Mat4, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; +import type { CameraState } from '../CameraState'; const scratchLookMatrix: Mat4 = mat4.create(); diff --git a/src/core/aim/index.ts b/src/core/aim/index.ts index 79dcaba..9527751 100644 --- a/src/core/aim/index.ts +++ b/src/core/aim/index.ts @@ -1,14 +1,14 @@ -export { HardLookAtAim } from './HardLookAtAim.js'; -export * as hardLookAt from './hardLookAt.js'; +export { HardLookAtAim } from './HardLookAtAim'; +export * as hardLookAt from './hardLookAt'; -export { RotateWithFollowTargetAim, type RotateWithFollowTargetOptions } from './RotateWithFollowTargetAim.js'; -export * as rotateWithFollowTarget from './rotateWithFollowTarget.js'; -export type { RotateWithFollowTargetParams, RotateWithFollowTargetState } from './rotateWithFollowTarget.js'; +export { RotateWithFollowTargetAim, type RotateWithFollowTargetOptions } from './RotateWithFollowTargetAim'; +export * as rotateWithFollowTarget from './rotateWithFollowTarget'; +export type { RotateWithFollowTargetParams, RotateWithFollowTargetState } from './rotateWithFollowTarget'; -export { RotationComposerAim } from './RotationComposerAim.js'; -export * as rotationComposer from './rotationComposer.js'; -export type { RotationComposerParams, RotationComposerState } from './rotationComposer.js'; +export { RotationComposerAim } from './RotationComposerAim'; +export * as rotationComposer from './rotationComposer'; +export type { RotationComposerParams, RotationComposerState } from './rotationComposer'; -export { PanTiltAim } from './PanTiltAim.js'; -export * as panTilt from './panTilt.js'; -export type { PanTiltState } from './panTilt.js'; +export { PanTiltAim } from './PanTiltAim'; +export * as panTilt from './panTilt'; +export type { PanTiltState } from './panTilt'; diff --git a/src/core/aim/panTilt.ts b/src/core/aim/panTilt.ts index cbc33d6..a18cac5 100644 --- a/src/core/aim/panTilt.ts +++ b/src/core/aim/panTilt.ts @@ -1,6 +1,6 @@ import { degreesToRadians, quat, radiansToDegrees, vec3, type Euler, type Quat, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import { InputAxis } from '../input/InputAxis.js'; +import type { CameraState } from '../CameraState'; +import { InputAxis } from '../input/InputAxis'; /** `pan` (yaw, wraps ±180°) and `tilt` (pitch, clamped) in degrees. */ export type PanTiltState = { pan: InputAxis; tilt: InputAxis }; diff --git a/src/core/aim/rotateWithFollowTarget.ts b/src/core/aim/rotateWithFollowTarget.ts index 3a4024a..6a5532b 100644 --- a/src/core/aim/rotateWithFollowTarget.ts +++ b/src/core/aim/rotateWithFollowTarget.ts @@ -1,8 +1,8 @@ import type { Quat } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DamperState, DampingConstant } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import { withDefaults } from '../params.js'; +import type { CameraState } from '../CameraState'; +import type { DamperState, DampingConstant } from '../damping/damping'; +import * as damping from '../damping/damping'; +import { withDefaults } from '../params'; export type RotateWithFollowTargetParams = { /** Spring response time to the target's rotation (or `{into, from}` for asymmetric damping). */ diff --git a/src/core/aim/rotationComposer.ts b/src/core/aim/rotationComposer.ts index fa43a9d..8fbbae5 100644 --- a/src/core/aim/rotationComposer.ts +++ b/src/core/aim/rotationComposer.ts @@ -1,12 +1,12 @@ import { clamp, degreesToRadians, mat4, quat, vec3, vec4, type Mat4, type Quat, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DamperState, DampingConstant } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import type { PredictorState } from '../damping/predictor.js'; -import * as predictor from '../damping/predictor.js'; -import type { TargetPose } from '../TargetPose.js'; -import { withDefaults } from '../params.js'; -import * as targetExtent from '../TargetExtent.js'; +import type { CameraState } from '../CameraState'; +import type { DamperState, DampingConstant } from '../damping/damping'; +import * as damping from '../damping/damping'; +import type { PredictorState } from '../damping/predictor'; +import * as predictor from '../damping/predictor'; +import type { TargetPose } from '../TargetPose'; +import { withDefaults } from '../params'; +import * as targetExtent from '../TargetExtent'; export type RotationComposerParams = { /** Where the target should land on screen: `[x, y]`, `0` = center, `±1` = edge. */ diff --git a/src/core/blend/BlendDefinition.ts b/src/core/blend/BlendDefinition.ts index 4d13f54..3a2f91b 100644 --- a/src/core/blend/BlendDefinition.ts +++ b/src/core/blend/BlendDefinition.ts @@ -1,4 +1,4 @@ -import { BlendCurves, type Ease } from './BlendCurves.js'; +import { BlendCurves, type Ease } from './BlendCurves'; /** A fixed-duration curve or a damped transition. */ export type BlendDefinition = diff --git a/src/core/blend/BlendDriver.ts b/src/core/blend/BlendDriver.ts index 6e3ab1d..8d49fe4 100644 --- a/src/core/blend/BlendDriver.ts +++ b/src/core/blend/BlendDriver.ts @@ -1,7 +1,7 @@ -import type { CameraState } from '../CameraState.js'; -import type { BlendDefinition } from './BlendDefinition.js'; -import { BlendHints } from './BlendHints.js'; -import * as blend from './blend.js'; +import type { CameraState } from '../CameraState'; +import type { BlendDefinition } from './BlendDefinition'; +import { BlendHints } from './BlendHints'; +import * as blend from './blend'; /** Stateful wrapper over the blend functions, resolving camera states by id. */ export class BlendDriver { diff --git a/src/core/blend/blend.ts b/src/core/blend/blend.ts index 95f8955..989e052 100644 --- a/src/core/blend/blend.ts +++ b/src/core/blend/blend.ts @@ -1,10 +1,10 @@ import { clamp } from 'math'; -import type { CameraState } from '../CameraState.js'; -import * as cameraState from '../CameraState.js'; -import type { DamperState } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import type { BlendDefinition, CustomBlend } from './BlendDefinition.js'; -import { BlendHints } from './BlendHints.js'; +import type { CameraState } from '../CameraState'; +import * as cameraState from '../CameraState'; +import type { DamperState } from '../damping/damping'; +import * as damping from '../damping/damping'; +import type { BlendDefinition, CustomBlend } from './BlendDefinition'; +import { BlendHints } from './BlendHints'; /** A transition in flight from a frozen `from` state toward the live `toId` camera. */ export type BlendTransition = { diff --git a/src/core/blend/index.ts b/src/core/blend/index.ts index c3fc30c..f0d8eb4 100644 --- a/src/core/blend/index.ts +++ b/src/core/blend/index.ts @@ -1,9 +1,9 @@ -export { BlendDriver } from './BlendDriver.js'; -export * as blend from './blend.js'; -export type { BlendState, BlendTransition } from './blend.js'; +export { BlendDriver } from './BlendDriver'; +export * as blend from './blend'; +export type { BlendState, BlendTransition } from './blend'; -export { DEFAULT_BLEND, type BlendDefinition, type CustomBlend } from './BlendDefinition.js'; +export { DEFAULT_BLEND, type BlendDefinition, type CustomBlend } from './BlendDefinition'; -export { BlendHints, hasBlendHint } from './BlendHints.js'; +export { BlendHints, hasBlendHint } from './BlendHints'; -export { BlendCurves, type Ease } from './BlendCurves.js'; +export { BlendCurves, type Ease } from './BlendCurves'; diff --git a/src/core/blend/lerpCameraState.ts b/src/core/blend/lerpCameraState.ts index 6584bcd..05a72b8 100644 --- a/src/core/blend/lerpCameraState.ts +++ b/src/core/blend/lerpCameraState.ts @@ -12,8 +12,8 @@ import { type Spherical, type Vec3, } from 'math'; -import type { CameraState } from '../CameraState.js'; -import { BlendHints, hasBlendHint } from './BlendHints.js'; +import type { CameraState } from '../CameraState'; +import { BlendHints, hasBlendHint } from './BlendHints'; /** Reused quaternion for the sign-adjusted destination case. */ const negatedB: Quat = [0, 0, 0, 1]; diff --git a/src/core/body/FollowBody.ts b/src/core/body/FollowBody.ts index 8bceeb9..4b624a6 100644 --- a/src/core/body/FollowBody.ts +++ b/src/core/body/FollowBody.ts @@ -1,10 +1,10 @@ import type { Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; -import type { TargetPose } from '../TargetPose.js'; -import type { BindingMode } from './BindingModes.js'; -import type { FollowParams } from './follow.js'; -import * as follow from './follow.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; +import type { TargetPose } from '../TargetPose'; +import type { BindingMode } from './BindingModes'; +import type { FollowParams } from './follow'; +import * as follow from './follow'; export type FollowOptions = Partial; diff --git a/src/core/body/HardLockToTargetBody.ts b/src/core/body/HardLockToTargetBody.ts index bfab83e..f5e07de 100644 --- a/src/core/body/HardLockToTargetBody.ts +++ b/src/core/body/HardLockToTargetBody.ts @@ -1,8 +1,8 @@ -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; -import type { TargetPose } from '../TargetPose.js'; -import type { HardLockToTargetParams } from './hardLockToTarget.js'; -import * as hardLockToTarget from './hardLockToTarget.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; +import type { TargetPose } from '../TargetPose'; +import type { HardLockToTargetParams } from './hardLockToTarget'; +import * as hardLockToTarget from './hardLockToTarget'; export type HardLockToTargetOptions = Partial; diff --git a/src/core/body/PositionComposerBody.ts b/src/core/body/PositionComposerBody.ts index 45b1131..57eeaf0 100644 --- a/src/core/body/PositionComposerBody.ts +++ b/src/core/body/PositionComposerBody.ts @@ -1,9 +1,9 @@ import type { Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; -import type { TargetPose } from '../TargetPose.js'; -import type { PositionComposerParams } from './positionComposer.js'; -import * as positionComposer from './positionComposer.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; +import type { TargetPose } from '../TargetPose'; +import type { PositionComposerParams } from './positionComposer'; +import * as positionComposer from './positionComposer'; /** Positions the camera using depth and screen-space composition. Layers override `readTarget`. */ export class PositionComposerBody implements PositionComposerParams { diff --git a/src/core/body/follow.ts b/src/core/body/follow.ts index 39f9404..f57dfcf 100644 --- a/src/core/body/follow.ts +++ b/src/core/body/follow.ts @@ -1,10 +1,10 @@ import { mat4, quat, vec3, type Mat4, type Quat, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant, Vector3DamperState } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import type { TargetPose } from '../TargetPose.js'; -import { BindingModes, type BindingMode } from './BindingModes.js'; -import { withDefaults } from '../params.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant, Vector3DamperState } from '../damping/damping'; +import * as damping from '../damping/damping'; +import type { TargetPose } from '../TargetPose'; +import { BindingModes, type BindingMode } from './BindingModes'; +import { withDefaults } from '../params'; export type FollowParams = { /** Offset from the target, rotated according to `bindingMode`. */ diff --git a/src/core/body/hardLockToTarget.ts b/src/core/body/hardLockToTarget.ts index 2645bf5..5349d1c 100644 --- a/src/core/body/hardLockToTarget.ts +++ b/src/core/body/hardLockToTarget.ts @@ -1,8 +1,8 @@ import { vec3, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant, Vector3DamperState } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import { withDefaults } from '../params.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant, Vector3DamperState } from '../damping/damping'; +import * as damping from '../damping/damping'; +import { withDefaults } from '../params'; export type HardLockToTargetParams = { /** Response time for following the target position. */ diff --git a/src/core/body/index.ts b/src/core/body/index.ts index d3b14bc..7875711 100644 --- a/src/core/body/index.ts +++ b/src/core/body/index.ts @@ -1,13 +1,13 @@ -export { BindingModes, type BindingMode } from './BindingModes.js'; +export { BindingModes, type BindingMode } from './BindingModes'; -export { HardLockToTargetBody, type HardLockToTargetOptions } from './HardLockToTargetBody.js'; -export * as hardLockToTarget from './hardLockToTarget.js'; -export type { HardLockToTargetParams, HardLockToTargetState } from './hardLockToTarget.js'; +export { HardLockToTargetBody, type HardLockToTargetOptions } from './HardLockToTargetBody'; +export * as hardLockToTarget from './hardLockToTarget'; +export type { HardLockToTargetParams, HardLockToTargetState } from './hardLockToTarget'; -export { FollowBody, type FollowOptions } from './FollowBody.js'; -export * as follow from './follow.js'; -export type { FollowParams, FollowState } from './follow.js'; +export { FollowBody, type FollowOptions } from './FollowBody'; +export * as follow from './follow'; +export type { FollowParams, FollowState } from './follow'; -export { PositionComposerBody } from './PositionComposerBody.js'; -export * as positionComposer from './positionComposer.js'; -export type { PositionComposerParams, PositionComposerState } from './positionComposer.js'; +export { PositionComposerBody } from './PositionComposerBody'; +export * as positionComposer from './positionComposer'; +export type { PositionComposerParams, PositionComposerState } from './positionComposer'; diff --git a/src/core/body/positionComposer.ts b/src/core/body/positionComposer.ts index 018a7ff..c561d34 100644 --- a/src/core/body/positionComposer.ts +++ b/src/core/body/positionComposer.ts @@ -1,12 +1,12 @@ import { clamp, degreesToRadians, vec3, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DamperState, DampingConstant, Vector3DamperState } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import type { PredictorState } from '../damping/predictor.js'; -import * as predictor from '../damping/predictor.js'; -import { withDefaults } from '../params.js'; -import type { TargetPose } from '../TargetPose.js'; -import * as targetExtent from '../TargetExtent.js'; +import type { CameraState } from '../CameraState'; +import type { DamperState, DampingConstant, Vector3DamperState } from '../damping/damping'; +import * as damping from '../damping/damping'; +import type { PredictorState } from '../damping/predictor'; +import * as predictor from '../damping/predictor'; +import { withDefaults } from '../params'; +import type { TargetPose } from '../TargetPose'; +import * as targetExtent from '../TargetExtent'; export type PositionComposerParams = { /** Desired distance from the camera to the target. */ diff --git a/src/core/damping/Damper.ts b/src/core/damping/Damper.ts index 053cd7d..c629371 100644 --- a/src/core/damping/Damper.ts +++ b/src/core/damping/Damper.ts @@ -1,5 +1,5 @@ -import type { DampingConstant } from './damping.js'; -import * as damping from './damping.js'; +import type { DampingConstant } from './damping'; +import * as damping from './damping'; /** Stateful wrapper over `damp`. */ export class Damper { diff --git a/src/core/damping/index.ts b/src/core/damping/index.ts index 8715781..27f395c 100644 --- a/src/core/damping/index.ts +++ b/src/core/damping/index.ts @@ -1,6 +1,6 @@ -export { Damper } from './Damper.js'; -export * as damping from './damping.js'; -export type { DamperState, DampingConstant, Vector3DamperState } from './damping.js'; +export { Damper } from './Damper'; +export * as damping from './damping'; +export type { DamperState, DampingConstant, Vector3DamperState } from './damping'; -export * as predictor from './predictor.js'; -export type { PredictorState } from './predictor.js'; +export * as predictor from './predictor'; +export type { PredictorState } from './predictor'; diff --git a/src/core/damping/predictor.ts b/src/core/damping/predictor.ts index 33656a5..4bf0054 100644 --- a/src/core/damping/predictor.ts +++ b/src/core/damping/predictor.ts @@ -1,6 +1,6 @@ import { vec3, type Vec3 } from 'math'; -import type { Vector3DamperState } from './damping.js'; -import * as damping from './damping.js'; +import type { Vector3DamperState } from './damping'; +import * as damping from './damping'; /** Velocity tracking state for position extrapolation. */ export type PredictorState = { diff --git a/src/core/debug/debugZones.ts b/src/core/debug/debugZones.ts index 5d5bc02..e6504f6 100644 --- a/src/core/debug/debugZones.ts +++ b/src/core/debug/debugZones.ts @@ -1,6 +1,6 @@ import { clamp, degreesToRadians } from 'math'; -import type { GroupFramingMode } from '../extension/groupFraming.js'; -import * as groupFraming from '../extension/groupFraming.js'; +import type { GroupFramingMode } from '../extension/groupFraming'; +import * as groupFraming from '../extension/groupFraming'; export type DebugZone = { /** Zone center in normalized screen coordinates. */ diff --git a/src/core/debug/index.ts b/src/core/debug/index.ts index 1671435..8fa17c3 100644 --- a/src/core/debug/index.ts +++ b/src/core/debug/index.ts @@ -1,2 +1,2 @@ -export * as debugZones from './debugZones.js'; -export type { DebugZone } from './debugZones.js'; +export * as debugZones from './debugZones'; +export type { DebugZone } from './debugZones'; diff --git a/src/core/extension/GroupFramingExtension.ts b/src/core/extension/GroupFramingExtension.ts index f08aede..450ba6c 100644 --- a/src/core/extension/GroupFramingExtension.ts +++ b/src/core/extension/GroupFramingExtension.ts @@ -1,13 +1,13 @@ -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; import type { GroupFramingFitMode, GroupFramingMode, GroupFramingParams, GroupMember, GroupPositionMode, -} from './groupFraming.js'; -import * as groupFraming from './groupFraming.js'; +} from './groupFraming'; +import * as groupFraming from './groupFraming'; export type GroupFramingOptions = Partial; diff --git a/src/core/extension/LensExtension.ts b/src/core/extension/LensExtension.ts index 06857a9..5be8e6b 100644 --- a/src/core/extension/LensExtension.ts +++ b/src/core/extension/LensExtension.ts @@ -1,7 +1,7 @@ -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; -import type { LensParams } from './lens.js'; -import * as lens from './lens.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; +import type { LensParams } from './lens'; +import * as lens from './lens'; export type LensOptions = Partial; diff --git a/src/core/extension/groupFraming.ts b/src/core/extension/groupFraming.ts index 4697f94..4b5b4a5 100644 --- a/src/core/extension/groupFraming.ts +++ b/src/core/extension/groupFraming.ts @@ -1,10 +1,10 @@ import { clamp, degreesToRadians, vec3, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DamperState, DampingConstant } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import type { TargetExtent } from '../TargetExtent.js'; -import * as targetExtent from '../TargetExtent.js'; -import { withDefaults } from '../params.js'; +import type { CameraState } from '../CameraState'; +import type { DamperState, DampingConstant } from '../damping/damping'; +import * as damping from '../damping/damping'; +import type { TargetExtent } from '../TargetExtent'; +import * as targetExtent from '../TargetExtent'; +import { withDefaults } from '../params'; /** A group member. Set `resolved` to `false` to skip it, for example while it isn't loaded yet. */ export type GroupMember = { position: Vec3; extent: TargetExtent; weight: number; resolved: boolean }; diff --git a/src/core/extension/index.ts b/src/core/extension/index.ts index aef7c90..54a1f96 100644 --- a/src/core/extension/index.ts +++ b/src/core/extension/index.ts @@ -1,9 +1,9 @@ -export { LensExtension, type LensOptions } from './LensExtension.js'; -export * as lens from './lens.js'; -export type { LensParams, LensState } from './lens.js'; +export { LensExtension, type LensOptions } from './LensExtension'; +export * as lens from './lens'; +export type { LensParams, LensState } from './lens'; -export { GroupFramingExtension, type GroupFramingOptions } from './GroupFramingExtension.js'; -export * as groupFraming from './groupFraming.js'; +export { GroupFramingExtension, type GroupFramingOptions } from './GroupFramingExtension'; +export * as groupFraming from './groupFraming'; export type { GroupMember, GroupPositionMode, @@ -11,4 +11,4 @@ export type { GroupFramingState, GroupFramingFitMode, GroupFramingMode, -} from './groupFraming.js'; +} from './groupFraming'; diff --git a/src/core/extension/lens.ts b/src/core/extension/lens.ts index a4a41e1..7a12ef7 100644 --- a/src/core/extension/lens.ts +++ b/src/core/extension/lens.ts @@ -1,7 +1,7 @@ -import type { CameraState } from '../CameraState.js'; -import type { DamperState, DampingConstant } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import { withDefaults } from '../params.js'; +import type { CameraState } from '../CameraState'; +import type { DamperState, DampingConstant } from '../damping/damping'; +import * as damping from '../damping/damping'; +import { withDefaults } from '../params'; export type LensParams = { /** Overrides the camera's field of view, in degrees. `undefined` leaves the current value untouched. */ diff --git a/src/core/groups/ClearShot.ts b/src/core/groups/ClearShot.ts index b4bc126..2715546 100644 --- a/src/core/groups/ClearShot.ts +++ b/src/core/groups/ClearShot.ts @@ -1,8 +1,8 @@ -import type { CameraState } from '../CameraState.js'; -import { BlendCurves } from '../blend/BlendCurves.js'; -import type { BlendDefinition } from '../blend/BlendDefinition.js'; -import type { ClearShotCandidate, ClearShotParams, ShotQualityEvaluator } from './clearShotState.js'; -import * as clearShotState from './clearShotState.js'; +import type { CameraState } from '../CameraState'; +import { BlendCurves } from '../blend/BlendCurves'; +import type { BlendDefinition } from '../blend/BlendDefinition'; +import type { ClearShotCandidate, ClearShotParams, ShotQualityEvaluator } from './clearShotState'; +import * as clearShotState from './clearShotState'; export type ClearShotOptions = { evaluator: ShotQualityEvaluator; diff --git a/src/core/groups/MixingCamera.ts b/src/core/groups/MixingCamera.ts index 86429f4..34ced0d 100644 --- a/src/core/groups/MixingCamera.ts +++ b/src/core/groups/MixingCamera.ts @@ -1,6 +1,6 @@ -import type { CameraState } from '../CameraState.js'; -import * as cameraState from '../CameraState.js'; -import type { MixingCameraSlot } from './mixCameraStates.js'; +import type { CameraState } from '../CameraState'; +import * as cameraState from '../CameraState'; +import type { MixingCameraSlot } from './mixCameraStates'; const MAX_SLOTS = 8; diff --git a/src/core/groups/Sequencer.ts b/src/core/groups/Sequencer.ts index c68c941..40a9938 100644 --- a/src/core/groups/Sequencer.ts +++ b/src/core/groups/Sequencer.ts @@ -1,8 +1,8 @@ -import type { CameraState } from '../CameraState.js'; -import { BlendCurves } from '../blend/BlendCurves.js'; -import type { BlendDefinition } from '../blend/BlendDefinition.js'; -import type { SequencerInstruction, SequencerParams } from './sequencerState.js'; -import * as sequencerState from './sequencerState.js'; +import type { CameraState } from '../CameraState'; +import { BlendCurves } from '../blend/BlendCurves'; +import type { BlendDefinition } from '../blend/BlendDefinition'; +import type { SequencerInstruction, SequencerParams } from './sequencerState'; +import * as sequencerState from './sequencerState'; export type SequencerOptions = { defaultBlend?: BlendDefinition; diff --git a/src/core/groups/StateDrivenCamera.ts b/src/core/groups/StateDrivenCamera.ts index 614ce9f..42cc41b 100644 --- a/src/core/groups/StateDrivenCamera.ts +++ b/src/core/groups/StateDrivenCamera.ts @@ -1,8 +1,8 @@ -import type { CameraState } from '../CameraState.js'; -import { BlendCurves } from '../blend/BlendCurves.js'; -import type { BlendDefinition } from '../blend/BlendDefinition.js'; -import type { StateDrivenCandidate, StateDrivenParams } from './stateDrivenState.js'; -import * as stateDrivenState from './stateDrivenState.js'; +import type { CameraState } from '../CameraState'; +import { BlendCurves } from '../blend/BlendCurves'; +import type { BlendDefinition } from '../blend/BlendDefinition'; +import type { StateDrivenCandidate, StateDrivenParams } from './stateDrivenState'; +import * as stateDrivenState from './stateDrivenState'; export type StateDrivenCameraOptions = { defaultBlend?: BlendDefinition; diff --git a/src/core/groups/clearShotState.ts b/src/core/groups/clearShotState.ts index c34f9ec..6061794 100644 --- a/src/core/groups/clearShotState.ts +++ b/src/core/groups/clearShotState.ts @@ -1,7 +1,7 @@ -import type { CameraState } from '../CameraState.js'; -import type { BlendState } from '../blend/blend.js'; -import * as blend from '../blend/blend.js'; -import type { BlendDefinition } from '../blend/BlendDefinition.js'; +import type { CameraState } from '../CameraState'; +import type { BlendState } from '../blend/blend'; +import * as blend from '../blend/blend'; +import type { BlendDefinition } from '../blend/BlendDefinition'; export type ClearShotCandidate = { cameraId: string; diff --git a/src/core/groups/index.ts b/src/core/groups/index.ts index bddd214..eab0cd6 100644 --- a/src/core/groups/index.ts +++ b/src/core/groups/index.ts @@ -1,14 +1,14 @@ -export { Sequencer, type SequencerOptions } from './Sequencer.js'; -export * as sequencerState from './sequencerState.js'; -export type { SequencerInstruction, SequencerParams, SequencerState } from './sequencerState.js'; +export { Sequencer, type SequencerOptions } from './Sequencer'; +export * as sequencerState from './sequencerState'; +export type { SequencerInstruction, SequencerParams, SequencerState } from './sequencerState'; -export { MixingCamera } from './MixingCamera.js'; -export type { MixingCameraSlot } from './mixCameraStates.js'; +export { MixingCamera } from './MixingCamera'; +export type { MixingCameraSlot } from './mixCameraStates'; -export { StateDrivenCamera, type StateDrivenCameraOptions } from './StateDrivenCamera.js'; -export * as stateDrivenState from './stateDrivenState.js'; -export type { StateDrivenCandidate, StateDrivenParams, StateDrivenState } from './stateDrivenState.js'; +export { StateDrivenCamera, type StateDrivenCameraOptions } from './StateDrivenCamera'; +export * as stateDrivenState from './stateDrivenState'; +export type { StateDrivenCandidate, StateDrivenParams, StateDrivenState } from './stateDrivenState'; -export { ClearShot, type ClearShotOptions } from './ClearShot.js'; -export * as clearShotState from './clearShotState.js'; -export type { ClearShotCandidate, ShotQualityEvaluator, ClearShotParams, ClearShotState } from './clearShotState.js'; +export { ClearShot, type ClearShotOptions } from './ClearShot'; +export * as clearShotState from './clearShotState'; +export type { ClearShotCandidate, ShotQualityEvaluator, ClearShotParams, ClearShotState } from './clearShotState'; diff --git a/src/core/groups/mixCameraStates.ts b/src/core/groups/mixCameraStates.ts index 2f9796a..0c60c9c 100644 --- a/src/core/groups/mixCameraStates.ts +++ b/src/core/groups/mixCameraStates.ts @@ -1,5 +1,5 @@ import { quat, vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; +import type { CameraState } from '../CameraState'; export type MixingCameraSlot = { cameraId: string; diff --git a/src/core/groups/sequencerState.ts b/src/core/groups/sequencerState.ts index 52abd7a..b6ed7ea 100644 --- a/src/core/groups/sequencerState.ts +++ b/src/core/groups/sequencerState.ts @@ -1,7 +1,7 @@ -import type { CameraState } from '../CameraState.js'; -import type { BlendState } from '../blend/blend.js'; -import * as blend from '../blend/blend.js'; -import type { BlendDefinition } from '../blend/BlendDefinition.js'; +import type { CameraState } from '../CameraState'; +import type { BlendState } from '../blend/blend'; +import * as blend from '../blend/blend'; +import type { BlendDefinition } from '../blend/BlendDefinition'; export type SequencerInstruction = { cameraId: string; diff --git a/src/core/groups/stateDrivenState.ts b/src/core/groups/stateDrivenState.ts index 7bab92d..3dfd14b 100644 --- a/src/core/groups/stateDrivenState.ts +++ b/src/core/groups/stateDrivenState.ts @@ -1,7 +1,7 @@ -import type { CameraState } from '../CameraState.js'; -import type { BlendState } from '../blend/blend.js'; -import * as blend from '../blend/blend.js'; -import type { BlendDefinition } from '../blend/BlendDefinition.js'; +import type { CameraState } from '../CameraState'; +import type { BlendState } from '../blend/blend'; +import * as blend from '../blend/blend'; +import type { BlendDefinition } from '../blend/BlendDefinition'; export type StateDrivenCandidate = { cameraId: string; diff --git a/src/core/impulse/ImpulseField.ts b/src/core/impulse/ImpulseField.ts index 5d3fc16..3943927 100644 --- a/src/core/impulse/ImpulseField.ts +++ b/src/core/impulse/ImpulseField.ts @@ -1,6 +1,6 @@ import type { Vec3 } from 'math'; -import type { GenerateImpulseOptions, ImpulseClockSeconds } from './impulses.js'; -import * as impulses from './impulses.js'; +import type { GenerateImpulseOptions, ImpulseClockSeconds } from './impulses'; +import * as impulses from './impulses'; /** Stores one-shot impulses and samples their combined effect at a world position. */ export class ImpulseField { diff --git a/src/core/impulse/ImpulseListenerNoise.ts b/src/core/impulse/ImpulseListenerNoise.ts index bbfc52e..7f8e1d3 100644 --- a/src/core/impulse/ImpulseListenerNoise.ts +++ b/src/core/impulse/ImpulseListenerNoise.ts @@ -1,9 +1,9 @@ import { vec3, type Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { BasicMultiChannelPerlinNoise } from '../noise/BasicMultiChannelPerlinNoise.js'; -import type { ImpulseField } from './ImpulseField.js'; -import type { ImpulseListenerParams } from './impulseListener.js'; -import * as impulseListener from './impulseListener.js'; +import type { CameraState } from '../CameraState'; +import type { BasicMultiChannelPerlinNoise } from '../noise/BasicMultiChannelPerlinNoise'; +import type { ImpulseField } from './ImpulseField'; +import type { ImpulseListenerParams } from './impulseListener'; +import * as impulseListener from './impulseListener'; const scratchOffset: Vec3 = [0, 0, 0]; diff --git a/src/core/impulse/impulseListener.ts b/src/core/impulse/impulseListener.ts index 5b4ad5f..adce24c 100644 --- a/src/core/impulse/impulseListener.ts +++ b/src/core/impulse/impulseListener.ts @@ -1,5 +1,5 @@ -import { withDefaults } from '../params.js'; -import { impulseField, type ImpulseField } from './ImpulseField.js'; +import { withDefaults } from '../params'; +import { impulseField, type ImpulseField } from './ImpulseField'; export type ImpulseListenerParams = { /** Impulse field to sample. */ diff --git a/src/core/impulse/index.ts b/src/core/impulse/index.ts index 7de21c8..474754d 100644 --- a/src/core/impulse/index.ts +++ b/src/core/impulse/index.ts @@ -1,10 +1,10 @@ -export { ImpulseField, impulseField } from './ImpulseField.js'; +export { ImpulseField, impulseField } from './ImpulseField'; -export { ImpulseListenerNoise, type ImpulseListenerOptions } from './ImpulseListenerNoise.js'; -export * as impulseListener from './impulseListener.js'; -export type { ImpulseListenerParams } from './impulseListener.js'; +export { ImpulseListenerNoise, type ImpulseListenerOptions } from './ImpulseListenerNoise'; +export * as impulseListener from './impulseListener'; +export type { ImpulseListenerParams } from './impulseListener'; -export * as impulses from './impulses.js'; +export * as impulses from './impulses'; export { ImpulseShapes, type GenerateImpulseOptions, @@ -12,4 +12,4 @@ export { type ImpulseEvent, type ImpulseFieldState, type ImpulseClockSeconds, -} from './impulses.js'; +} from './impulses'; diff --git a/src/core/index.ts b/src/core/index.ts index f6a7324..aa134f8 100644 --- a/src/core/index.ts +++ b/src/core/index.ts @@ -1,4 +1,4 @@ -export { EventDispatcher, type DispatchedEvent, type EventListener } from './EventDispatcher.js'; +export { EventDispatcher, type DispatchedEvent, type EventListener } from './EventDispatcher'; export { Klipp, type CameraTransitionEventMap, @@ -6,31 +6,31 @@ export { type KlippMode, type KlippOptions, type VirtualCameraConfig, -} from './Klipp.js'; +} from './Klipp'; export { VirtualCamera, type CameraPiece, type CameraStateWriter, type StandbyUpdate, type VirtualCameraOptions, -} from './VirtualCamera.js'; +} from './VirtualCamera'; -export * as cameraState from './CameraState.js'; -export type { CameraState } from './CameraState.js'; -export * as klippState from './klippState.js'; -export type { KlippCamera, KlippEvent, KlippParams, KlippState } from './klippState.js'; -export * as targetExtent from './TargetExtent.js'; -export type { TargetExtent } from './TargetExtent.js'; -export * as targetPose from './TargetPose.js'; -export type { TargetPose } from './TargetPose.js'; +export * as cameraState from './CameraState'; +export type { CameraState } from './CameraState'; +export * as klippState from './klippState'; +export type { KlippCamera, KlippEvent, KlippParams, KlippState } from './klippState'; +export * as targetExtent from './TargetExtent'; +export type { TargetExtent } from './TargetExtent'; +export * as targetPose from './TargetPose'; +export type { TargetPose } from './TargetPose'; -export * from './aim/index.js'; -export * from './blend/index.js'; -export * from './body/index.js'; -export * from './damping/index.js'; -export * from './debug/index.js'; -export * from './extension/index.js'; -export * from './groups/index.js'; -export * from './impulse/index.js'; -export * from './input/index.js'; -export * from './noise/index.js'; +export * from './aim/index'; +export * from './blend/index'; +export * from './body/index'; +export * from './damping/index'; +export * from './debug/index'; +export * from './extension/index'; +export * from './groups/index'; +export * from './impulse/index'; +export * from './input/index'; +export * from './noise/index'; diff --git a/src/core/input/InputAxis.ts b/src/core/input/InputAxis.ts index 6313111..803117d 100644 --- a/src/core/input/InputAxis.ts +++ b/src/core/input/InputAxis.ts @@ -1,7 +1,7 @@ -import type { DampingConstant } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import type { InputAxisData, InputAxisParams, InputAxisRecentering } from './axis.js'; -import * as inputAxis from './axis.js'; +import type { DampingConstant } from '../damping/damping'; +import * as damping from '../damping/damping'; +import type { InputAxisData, InputAxisParams, InputAxisRecentering } from './axis'; +import * as inputAxis from './axis'; /** Shapes an input value with range, wrapping, damping, and recentering. */ export class InputAxis implements InputAxisData { diff --git a/src/core/input/axis.ts b/src/core/input/axis.ts index 3e9da91..727c215 100644 --- a/src/core/input/axis.ts +++ b/src/core/input/axis.ts @@ -1,8 +1,8 @@ import { clamp, repeat } from 'math'; -import type { DamperState, DampingConstant } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import { withDefaults } from '../params.js'; -import { shortestWrappedDelta } from './shortestWrappedDelta.js'; +import type { DamperState, DampingConstant } from '../damping/damping'; +import * as damping from '../damping/damping'; +import { withDefaults } from '../params'; +import { shortestWrappedDelta } from './shortestWrappedDelta'; export type InputAxisRecentering = { enabled: boolean; diff --git a/src/core/input/index.ts b/src/core/input/index.ts index c3687c1..abf2077 100644 --- a/src/core/input/index.ts +++ b/src/core/input/index.ts @@ -1,9 +1,9 @@ -export { InputAxis } from './InputAxis.js'; -export * as inputAxis from './axis.js'; -export type { InputAxisData, InputAxisParams, InputAxisRecentering } from './axis.js'; +export { InputAxis } from './InputAxis'; +export * as inputAxis from './axis'; +export type { InputAxisData, InputAxisParams, InputAxisRecentering } from './axis'; -export * as consumedInput from './consumedInput.js'; -export type { ConsumedInput } from './consumedInput.js'; +export * as consumedInput from './consumedInput'; +export type { ConsumedInput } from './consumedInput'; -export * as inputMapping from './inputMapping.js'; -export type { InputAxisControllerConfig, InputAxisPair, InputInvert, InputSourceMapping } from './inputMapping.js'; +export * as inputMapping from './inputMapping'; +export type { InputAxisControllerConfig, InputAxisPair, InputInvert, InputSourceMapping } from './inputMapping'; diff --git a/src/core/input/inputMapping.ts b/src/core/input/inputMapping.ts index 5790be4..de0e21b 100644 --- a/src/core/input/inputMapping.ts +++ b/src/core/input/inputMapping.ts @@ -1,6 +1,6 @@ -import type { ConsumedInput } from './consumedInput.js'; -import type { InputAxisData } from './axis.js'; -import * as inputAxis from './axis.js'; +import type { ConsumedInput } from './consumedInput'; +import type { InputAxisData } from './axis'; +import * as inputAxis from './axis'; export type InputAxisPair = { x: InputAxisData; diff --git a/src/core/klippState.ts b/src/core/klippState.ts index 9eda44c..779c14f 100644 --- a/src/core/klippState.ts +++ b/src/core/klippState.ts @@ -1,8 +1,8 @@ -import type { CameraState } from './CameraState.js'; -import type { BlendState } from './blend/blend.js'; -import * as blend from './blend/blend.js'; -import type { BlendDefinition, CustomBlend } from './blend/BlendDefinition.js'; -import { BlendHints } from './blend/BlendHints.js'; +import type { CameraState } from './CameraState'; +import type { BlendState } from './blend/blend'; +import * as blend from './blend/blend'; +import type { BlendDefinition, CustomBlend } from './blend/BlendDefinition'; +import { BlendHints } from './blend/BlendHints'; export type VirtualCameraConfig = { id: string; diff --git a/src/core/noise/BasicMultiChannelPerlinNoise.ts b/src/core/noise/BasicMultiChannelPerlinNoise.ts index cee596d..84a3183 100644 --- a/src/core/noise/BasicMultiChannelPerlinNoise.ts +++ b/src/core/noise/BasicMultiChannelPerlinNoise.ts @@ -1,8 +1,8 @@ import type { Vec3 } from 'math'; -import type { CameraState } from '../CameraState.js'; -import type { DampingConstant } from '../damping/damping.js'; -import type { PerlinNoiseParams, PerlinNoiseState } from './perlinNoise.js'; -import * as perlinNoise from './perlinNoise.js'; +import type { CameraState } from '../CameraState'; +import type { DampingConstant } from '../damping/damping'; +import type { PerlinNoiseParams, PerlinNoiseState } from './perlinNoise'; +import * as perlinNoise from './perlinNoise'; export type PerlinNoiseOptions = Partial & { /** Seed for the six independent Perlin channels. Random when omitted. */ diff --git a/src/core/noise/index.ts b/src/core/noise/index.ts index 93524cb..96bfe22 100644 --- a/src/core/noise/index.ts +++ b/src/core/noise/index.ts @@ -1,3 +1,3 @@ -export { BasicMultiChannelPerlinNoise, type PerlinNoiseOptions } from './BasicMultiChannelPerlinNoise.js'; -export * as perlinNoise from './perlinNoise.js'; -export type { PerlinNoiseParams, PerlinNoiseState } from './perlinNoise.js'; +export { BasicMultiChannelPerlinNoise, type PerlinNoiseOptions } from './BasicMultiChannelPerlinNoise'; +export * as perlinNoise from './perlinNoise'; +export type { PerlinNoiseParams, PerlinNoiseState } from './perlinNoise'; diff --git a/src/core/noise/perlinNoise.ts b/src/core/noise/perlinNoise.ts index f166080..3a4b408 100644 --- a/src/core/noise/perlinNoise.ts +++ b/src/core/noise/perlinNoise.ts @@ -1,9 +1,9 @@ import { degreesToRadians, quat, vec3, type Euler, type Quat, type Vec3 } from 'math'; import { perlin2d } from 'math/noise'; -import type { CameraState } from '../CameraState.js'; -import type { DamperState, DampingConstant } from '../damping/damping.js'; -import * as damping from '../damping/damping.js'; -import { withDefaults } from '../params.js'; +import type { CameraState } from '../CameraState'; +import type { DamperState, DampingConstant } from '../damping/damping'; +import * as damping from '../damping/damping'; +import { withDefaults } from '../params'; type Generator = ReturnType; /** Three position and three rotation noise channels. */ diff --git a/src/dom/DebugOverlay.ts b/src/dom/DebugOverlay.ts index c8179cf..4fbc34c 100644 --- a/src/dom/DebugOverlay.ts +++ b/src/dom/DebugOverlay.ts @@ -1,4 +1,4 @@ -import type { DebugZone } from '../core/debug/debugZones.js'; +import type { DebugZone } from '../core/debug/debugZones'; export type { DebugZone }; diff --git a/src/dom/InputAxisController.ts b/src/dom/InputAxisController.ts index a7e896c..a6ae4af 100644 --- a/src/dom/InputAxisController.ts +++ b/src/dom/InputAxisController.ts @@ -1,15 +1,15 @@ -import type { ConsumedInput } from '../core/input/consumedInput.js'; -import * as consumedInput from '../core/input/consumedInput.js'; -import type { InputAxisControllerConfig } from '../core/input/inputMapping.js'; -import * as inputMapping from '../core/input/inputMapping.js'; -import { InputSystem } from './InputSystem.js'; +import type { ConsumedInput } from '../core/input/consumedInput'; +import * as consumedInput from '../core/input/consumedInput'; +import type { InputAxisControllerConfig } from '../core/input/inputMapping'; +import * as inputMapping from '../core/input/inputMapping'; +import { InputSystem } from './InputSystem'; export type { InputAxisControllerConfig, InputAxisPair, InputInvert, InputSourceMapping, -} from '../core/input/inputMapping.js'; +} from '../core/input/inputMapping'; /** Maps DOM input onto named axis pairs. */ export class InputAxisController { diff --git a/src/dom/InputSystem.ts b/src/dom/InputSystem.ts index 00c7373..015af7e 100644 --- a/src/dom/InputSystem.ts +++ b/src/dom/InputSystem.ts @@ -1,5 +1,5 @@ import { degreesToRadians, deltaAngle, radiansToDegrees } from 'math'; -import type { ConsumedInput } from '../core/input/consumedInput.js'; +import type { ConsumedInput } from '../core/input/consumedInput'; export const MouseButton = { left: 1, diff --git a/src/dom/index.ts b/src/dom/index.ts index 622a1b4..cf7a0f2 100644 --- a/src/dom/index.ts +++ b/src/dom/index.ts @@ -1,9 +1,9 @@ -export { InputSystem, MouseButton, type InteractiveArea } from './InputSystem.js'; +export { InputSystem, MouseButton, type InteractiveArea } from './InputSystem'; export { InputAxisController, type InputAxisPair, type InputSourceMapping, type InputAxisControllerConfig, type InputInvert, -} from './InputAxisController.js'; -export { DebugOverlay, type DebugZone } from './DebugOverlay.js'; +} from './InputAxisController'; +export { DebugOverlay, type DebugZone } from './DebugOverlay'; diff --git a/src/react/CameraFrustumHelper.tsx b/src/react/CameraFrustumHelper.tsx index ca5e79a..a743d83 100644 --- a/src/react/CameraFrustumHelper.tsx +++ b/src/react/CameraFrustumHelper.tsx @@ -1,8 +1,8 @@ import { useFrame, useThree } from '@react-three/fiber'; import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; import { Color, type CameraHelper, type ColorRepresentation } from 'three'; -import { CameraFrustumHelperThree } from '../three/CameraFrustumHelperThree.js'; -import { useIsLiveVirtualCamera, useVirtualCamera } from './VirtualCameraContext.js'; +import { CameraFrustumHelperThree } from '../three/CameraFrustumHelperThree'; +import { useIsLiveVirtualCamera, useVirtualCamera } from './VirtualCameraContext'; export type CameraFrustumHelperProps = { /** Single color for the whole helper. */ diff --git a/src/react/DebugZoneOverlay.tsx b/src/react/DebugZoneOverlay.tsx index 652c697..9332b8f 100644 --- a/src/react/DebugZoneOverlay.tsx +++ b/src/react/DebugZoneOverlay.tsx @@ -1,7 +1,7 @@ import { useThree } from '@react-three/fiber'; import { useEffect, useState } from 'react'; -import { DebugOverlay, type DebugZone } from '../dom/DebugOverlay.js'; -import { useIsActiveVirtualCamera } from './VirtualCameraContext.js'; +import { DebugOverlay, type DebugZone } from '../dom/DebugOverlay'; +import { useIsActiveVirtualCamera } from './VirtualCameraContext'; export type { DebugZone }; diff --git a/src/react/Klipp.tsx b/src/react/Klipp.tsx index a438154..2638b56 100644 --- a/src/react/Klipp.tsx +++ b/src/react/Klipp.tsx @@ -1,10 +1,10 @@ import { useFrame, useThree } from '@react-three/fiber'; import { useEffect, useState, type ReactNode } from 'react'; import type { Camera } from 'three'; -import type { KlippOptions } from '../core/Klipp.js'; -import { KlippThree, type KlippMode } from '../three/KlippThree.js'; -import { KlippContext, useKlipp } from './KlippContext.js'; -import { useCameraTransitionEvent, type CameraTransitionEventProps } from './useCameraTransitionEvent.js'; +import type { KlippOptions } from '../core/Klipp'; +import { KlippThree, type KlippMode } from '../three/KlippThree'; +import { KlippContext, useKlipp } from './KlippContext'; +import { useCameraTransitionEvent, type CameraTransitionEventProps } from './useCameraTransitionEvent'; export type { KlippMode }; diff --git a/src/react/KlippContext.ts b/src/react/KlippContext.ts index 2ceda55..f5e6c2d 100644 --- a/src/react/KlippContext.ts +++ b/src/react/KlippContext.ts @@ -1,7 +1,7 @@ import { createContext, use } from 'react'; -import type { KlippThree } from '../three/KlippThree.js'; +import type { KlippThree } from '../three/KlippThree'; -export type { FrameUpdate } from '../three/KlippThree.js'; +export type { FrameUpdate } from '../three/KlippThree'; export const KlippContext = createContext(null); diff --git a/src/react/VirtualCamera.tsx b/src/react/VirtualCamera.tsx index 5ce6bef..6c91e79 100644 --- a/src/react/VirtualCamera.tsx +++ b/src/react/VirtualCamera.tsx @@ -1,17 +1,17 @@ import { useThree } from '@react-three/fiber'; import { useEffect, useImperativeHandle, useState, useSyncExternalStore, type ReactNode, type Ref } from 'react'; -import { BlendHints } from '../core/blend/BlendHints.js'; -import type { StandbyUpdate } from '../core/VirtualCamera.js'; -import { VirtualCameraThree } from '../three/VirtualCameraThree.js'; -import { useKlipp } from './KlippContext.js'; -import { useCameraTransitionEvent, type CameraTransitionEventProps } from './useCameraTransitionEvent.js'; +import { BlendHints } from '../core/blend/BlendHints'; +import type { StandbyUpdate } from '../core/VirtualCamera'; +import { VirtualCameraThree } from '../three/VirtualCameraThree'; +import { useKlipp } from './KlippContext'; +import { useCameraTransitionEvent, type CameraTransitionEventProps } from './useCameraTransitionEvent'; import { useVirtualCamera, VirtualCameraActiveContext, VirtualCameraContext, VirtualCameraLiveContext, type InitialCameraState, -} from './VirtualCameraContext.js'; +} from './VirtualCameraContext'; export type VirtualCameraProps = { name: string; diff --git a/src/react/VirtualCameraContext.ts b/src/react/VirtualCameraContext.ts index 01a0e48..64e34e3 100644 --- a/src/react/VirtualCameraContext.ts +++ b/src/react/VirtualCameraContext.ts @@ -1,7 +1,7 @@ import { createContext, use } from 'react'; -import type { VirtualCameraThree } from '../three/VirtualCameraThree.js'; +import type { VirtualCameraThree } from '../three/VirtualCameraThree'; -export type { InitialCameraState } from '../three/VirtualCameraThree.js'; +export type { InitialCameraState } from '../three/VirtualCameraThree'; export const VirtualCameraContext = createContext(null); export const VirtualCameraActiveContext = createContext(false); diff --git a/src/react/aim/Aim.ts b/src/react/aim/Aim.ts index f9952a8..edb89cf 100644 --- a/src/react/aim/Aim.ts +++ b/src/react/aim/Aim.ts @@ -1,7 +1,7 @@ -import { HardLookAt } from './HardLookAt.js'; -import { PanTilt } from './PanTilt.js'; -import { RotateWithFollowTarget } from './RotateWithFollowTarget.js'; -import { RotationComposer } from './RotationComposer.js'; +import { HardLookAt } from './HardLookAt'; +import { PanTilt } from './PanTilt'; +import { RotateWithFollowTarget } from './RotateWithFollowTarget'; +import { RotationComposer } from './RotationComposer'; /** Aim components control a ``'s rotation. Use at most one per camera. */ export const Aim = { diff --git a/src/react/aim/HardLookAt.tsx b/src/react/aim/HardLookAt.tsx index 97ec055..95e7a56 100644 --- a/src/react/aim/HardLookAt.tsx +++ b/src/react/aim/HardLookAt.tsx @@ -1,7 +1,7 @@ import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import type { Target } from '../../three/resolve/Target.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { HardLookAtAimThree } from '../../three/aim/HardLookAtAimThree.js'; +import type { Target } from '../../three/resolve/Target'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { HardLookAtAimThree } from '../../three/aim/HardLookAtAimThree'; export type HardLookAtProps = { /** Target to look at. Unresolved targets are ignored. */ diff --git a/src/react/aim/PanTilt.tsx b/src/react/aim/PanTilt.tsx index 81d0745..eea3c29 100644 --- a/src/react/aim/PanTilt.tsx +++ b/src/react/aim/PanTilt.tsx @@ -1,10 +1,10 @@ import { useEffect, useImperativeHandle, useState, type ReactNode, type Ref } from 'react'; -import type { DampingConstant } from '../../core/damping/damping.js'; -import type { InputAxisRecentering } from '../../core/input/axis.js'; -import { InputAxisOwnerContext } from '../input/InputAxisOwnerContext.js'; -import type { Target } from '../../three/resolve/Target.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { PanTiltAimThree } from '../../three/aim/PanTiltAimThree.js'; +import type { DampingConstant } from '../../core/damping/damping'; +import type { InputAxisRecentering } from '../../core/input/axis'; +import { InputAxisOwnerContext } from '../input/InputAxisOwnerContext'; +import type { Target } from '../../three/resolve/Target'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { PanTiltAimThree } from '../../three/aim/PanTiltAimThree'; export type PanTiltProps = { /** Rotation frame `pan`/`tilt` compose on top of. diff --git a/src/react/aim/RotateWithFollowTarget.tsx b/src/react/aim/RotateWithFollowTarget.tsx index 7867441..5c94378 100644 --- a/src/react/aim/RotateWithFollowTarget.tsx +++ b/src/react/aim/RotateWithFollowTarget.tsx @@ -1,11 +1,11 @@ import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import type { Target } from '../../three/resolve/Target.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; +import type { Target } from '../../three/resolve/Target'; +import { useVirtualCamera } from '../VirtualCameraContext'; import { RotateWithFollowTargetAimThree, type RotateWithFollowTargetOptions, -} from '../../three/aim/RotateWithFollowTargetAimThree.js'; -import * as rotateWithFollowTarget from '../../core/aim/rotateWithFollowTarget.js'; +} from '../../three/aim/RotateWithFollowTargetAimThree'; +import * as rotateWithFollowTarget from '../../core/aim/rotateWithFollowTarget'; export type RotateWithFollowTargetProps = RotateWithFollowTargetOptions & { /** Target rotation to copy. Unresolved targets are ignored. */ diff --git a/src/react/aim/RotationComposer.tsx b/src/react/aim/RotationComposer.tsx index f714037..1b6e2f3 100644 --- a/src/react/aim/RotationComposer.tsx +++ b/src/react/aim/RotationComposer.tsx @@ -1,15 +1,12 @@ import { useThree } from '@react-three/fiber'; import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import { DebugZoneOverlay } from '../DebugZoneOverlay.js'; -import { resolveVec3 } from '../../three/resolve/resolveVector3.js'; -import type { Target } from '../../three/resolve/Target.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { - RotationComposerAimThree, - type RotationComposerThreeOptions, -} from '../../three/aim/RotationComposerAimThree.js'; -import * as rotationComposer from '../../core/aim/rotationComposer.js'; -import * as debugZones from '../../core/debug/debugZones.js'; +import { DebugZoneOverlay } from '../DebugZoneOverlay'; +import { resolveVec3 } from '../../three/resolve/resolveVector3'; +import type { Target } from '../../three/resolve/Target'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { RotationComposerAimThree, type RotationComposerThreeOptions } from '../../three/aim/RotationComposerAimThree'; +import * as rotationComposer from '../../core/aim/rotationComposer'; +import * as debugZones from '../../core/debug/debugZones'; export type RotationComposerProps = Omit & { /** Target to compose at `screenPosition`. Unresolved targets are ignored. */ diff --git a/src/react/body/Body.ts b/src/react/body/Body.ts index 464c24d..4e8c0a5 100644 --- a/src/react/body/Body.ts +++ b/src/react/body/Body.ts @@ -1,6 +1,6 @@ -import { Follow } from './Follow.js'; -import { HardLockToTarget } from './HardLockToTarget.js'; -import { PositionComposer } from './PositionComposer.js'; +import { Follow } from './Follow'; +import { HardLockToTarget } from './HardLockToTarget'; +import { PositionComposer } from './PositionComposer'; /** Body components control a ``'s position. Use at most one per camera. */ export const Body = { diff --git a/src/react/body/CameraControls.tsx b/src/react/body/CameraControls.tsx index 10c0dc4..c1a32ae 100644 --- a/src/react/body/CameraControls.tsx +++ b/src/react/body/CameraControls.tsx @@ -3,10 +3,10 @@ import { useThree } from '@react-three/fiber'; import CameraControlsImpl, { EventDispatcher } from 'camera-controls'; import { useEffect, useEffectEvent, useImperativeHandle, useState, type Ref } from 'react'; import { EventDispatcher as ThreeEventDispatcher, Vector3 } from 'three'; -import { resolveVector3 } from '../../three/resolve/resolveVector3.js'; -import type { Target } from '../../three/resolve/Target.js'; -import { useIsActiveVirtualCamera, useIsLiveVirtualCamera, useVirtualCamera } from '../VirtualCameraContext.js'; -import { CameraControlsBodyThree } from '../../three/body/CameraControlsBodyThree.js'; +import { resolveVector3 } from '../../three/resolve/resolveVector3'; +import type { Target } from '../../three/resolve/Target'; +import { useIsActiveVirtualCamera, useIsLiveVirtualCamera, useVirtualCamera } from '../VirtualCameraContext'; +import { CameraControlsBodyThree } from '../../three/body/CameraControlsBodyThree'; type Overwrite = Omit & U; diff --git a/src/react/body/Follow.tsx b/src/react/body/Follow.tsx index 7252ddd..6167176 100644 --- a/src/react/body/Follow.tsx +++ b/src/react/body/Follow.tsx @@ -1,9 +1,9 @@ import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import { resolveVec3 } from '../../three/resolve/resolveVector3.js'; -import type { Target } from '../../three/resolve/Target.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { FollowBodyThree, type FollowThreeOptions } from '../../three/body/FollowBodyThree.js'; -import * as follow from '../../core/body/follow.js'; +import { resolveVec3 } from '../../three/resolve/resolveVector3'; +import type { Target } from '../../three/resolve/Target'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { FollowBodyThree, type FollowThreeOptions } from '../../three/body/FollowBodyThree'; +import * as follow from '../../core/body/follow'; export type FollowProps = FollowThreeOptions & { /** Target to follow. Unresolved targets are ignored. */ diff --git a/src/react/body/HardLockToTarget.tsx b/src/react/body/HardLockToTarget.tsx index 9ce4f6a..2c64c0b 100644 --- a/src/react/body/HardLockToTarget.tsx +++ b/src/react/body/HardLockToTarget.tsx @@ -1,8 +1,8 @@ import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import type { Target } from '../../three/resolve/Target.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { HardLockToTargetBodyThree, type HardLockToTargetOptions } from '../../three/body/HardLockToTargetBodyThree.js'; -import * as hardLockToTarget from '../../core/body/hardLockToTarget.js'; +import type { Target } from '../../three/resolve/Target'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { HardLockToTargetBodyThree, type HardLockToTargetOptions } from '../../three/body/HardLockToTargetBodyThree'; +import * as hardLockToTarget from '../../core/body/hardLockToTarget'; export type HardLockToTargetProps = HardLockToTargetOptions & { /** Target position to follow. Unresolved targets are ignored. */ diff --git a/src/react/body/PositionComposer.tsx b/src/react/body/PositionComposer.tsx index 468fc0f..0f4b229 100644 --- a/src/react/body/PositionComposer.tsx +++ b/src/react/body/PositionComposer.tsx @@ -1,14 +1,14 @@ import { useThree } from '@react-three/fiber'; import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import { DebugZoneOverlay } from '../DebugZoneOverlay.js'; -import type { Target } from '../../three/resolve/Target.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; +import { DebugZoneOverlay } from '../DebugZoneOverlay'; +import type { Target } from '../../three/resolve/Target'; +import { useVirtualCamera } from '../VirtualCameraContext'; import { PositionComposerBodyThree, type PositionComposerThreeOptions, -} from '../../three/body/PositionComposerBodyThree.js'; -import * as positionComposer from '../../core/body/positionComposer.js'; -import * as debugZones from '../../core/debug/debugZones.js'; +} from '../../three/body/PositionComposerBodyThree'; +import * as positionComposer from '../../core/body/positionComposer'; +import * as debugZones from '../../core/debug/debugZones'; export type PositionComposerProps = Omit & { /** Target to compose around. Unresolved targets are ignored. */ diff --git a/src/react/body/camera-controls.ts b/src/react/body/camera-controls.ts index 4451ee9..72ffa4e 100644 --- a/src/react/body/camera-controls.ts +++ b/src/react/body/camera-controls.ts @@ -1,2 +1,2 @@ -export { CameraControls, type CameraControlsProps } from './CameraControls.js'; -export { CameraControlsBodyThree } from '../../three/body/CameraControlsBodyThree.js'; +export { CameraControls, type CameraControlsProps } from './CameraControls'; +export { CameraControlsBodyThree } from '../../three/body/CameraControlsBodyThree'; diff --git a/src/react/extension/Extension.ts b/src/react/extension/Extension.ts index 40207cf..d4f5bf2 100644 --- a/src/react/extension/Extension.ts +++ b/src/react/extension/Extension.ts @@ -1,5 +1,5 @@ -import { GroupFraming } from './GroupFraming.js'; -import { Lens } from './Lens.js'; +import { GroupFraming } from './GroupFraming'; +import { Lens } from './Lens'; /** Extensions run after Body/Aim and before Noise; multiple extensions can be registered. */ export const Extension = { diff --git a/src/react/extension/GroupFraming.tsx b/src/react/extension/GroupFraming.tsx index 8a633cf..7f82081 100644 --- a/src/react/extension/GroupFraming.tsx +++ b/src/react/extension/GroupFraming.tsx @@ -1,19 +1,12 @@ import { useFrame, useThree } from '@react-three/fiber'; import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; import { Vector3 } from 'three'; -import { DebugZoneOverlay } from '../DebugZoneOverlay.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { - GroupFramingExtensionThree, - type GroupFramingOptions, -} from '../../three/extension/GroupFramingExtensionThree.js'; -import { - TargetGroup, - type TargetGroupMember, - type TargetGroupPositionMode, -} from '../../three/extension/TargetGroup.js'; -import * as groupFraming from '../../core/extension/groupFraming.js'; -import * as debugZones from '../../core/debug/debugZones.js'; +import { DebugZoneOverlay } from '../DebugZoneOverlay'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { GroupFramingExtensionThree, type GroupFramingOptions } from '../../three/extension/GroupFramingExtensionThree'; +import { TargetGroup, type TargetGroupMember, type TargetGroupPositionMode } from '../../three/extension/TargetGroup'; +import * as groupFraming from '../../core/extension/groupFraming'; +import * as debugZones from '../../core/debug/debugZones'; const scratchGroupPosition = new Vector3(); const scratchCameraPosition = new Vector3(); diff --git a/src/react/extension/Lens.tsx b/src/react/extension/Lens.tsx index 72118f8..5d2b09c 100644 --- a/src/react/extension/Lens.tsx +++ b/src/react/extension/Lens.tsx @@ -1,8 +1,8 @@ import { useThree } from '@react-three/fiber'; import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { LensExtension, type LensOptions } from '../../core/extension/LensExtension.js'; -import * as lens from '../../core/extension/lens.js'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { LensExtension, type LensOptions } from '../../core/extension/LensExtension'; +import * as lens from '../../core/extension/lens'; export type LensProps = LensOptions & { ref?: Ref }; diff --git a/src/react/impulse/ImpulseListener.tsx b/src/react/impulse/ImpulseListener.tsx index 7b8b42d..dba129c 100644 --- a/src/react/impulse/ImpulseListener.tsx +++ b/src/react/impulse/ImpulseListener.tsx @@ -1,9 +1,9 @@ import { useEffect, useImperativeHandle, useState, type Ref } from 'react'; -import type { BasicMultiChannelPerlinProps } from '../noise/BasicMultiChannelPerlin.js'; -import { useBasicMultiChannelPerlinNoise } from '../noise/useBasicMultiChannelPerlinNoise.js'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; -import { ImpulseListenerNoise, type ImpulseListenerOptions } from '../../core/impulse/ImpulseListenerNoise.js'; -import * as impulseListener from '../../core/impulse/impulseListener.js'; +import type { BasicMultiChannelPerlinProps } from '../noise/BasicMultiChannelPerlin'; +import { useBasicMultiChannelPerlinNoise } from '../noise/useBasicMultiChannelPerlinNoise'; +import { useVirtualCamera } from '../VirtualCameraContext'; +import { ImpulseListenerNoise, type ImpulseListenerOptions } from '../../core/impulse/ImpulseListenerNoise'; +import * as impulseListener from '../../core/impulse/impulseListener'; /** Perlin shake options driven by the current impulse strength. */ export type ImpulseShakeProps = Omit; diff --git a/src/react/index.ts b/src/react/index.ts index c8ee3eb..7079ef6 100644 --- a/src/react/index.ts +++ b/src/react/index.ts @@ -1,33 +1,33 @@ -export { Klipp, KlippEvents, type KlippProps, type KlippMode, type KlippEventsProps } from './Klipp.js'; -export { useKlipp, type FrameUpdate } from './KlippContext.js'; +export { Klipp, KlippEvents, type KlippProps, type KlippMode, type KlippEventsProps } from './Klipp'; +export { useKlipp, type FrameUpdate } from './KlippContext'; export { VirtualCamera, VirtualCameraEvents, type VirtualCameraProps, type VirtualCameraEventsProps, -} from './VirtualCamera.js'; -export { useVirtualCamera, useIsActiveVirtualCamera, useIsLiveVirtualCamera } from './VirtualCameraContext.js'; -export { CameraFrustumHelper, type CameraFrustumHelperProps } from './CameraFrustumHelper.js'; +} from './VirtualCamera'; +export { useVirtualCamera, useIsActiveVirtualCamera, useIsLiveVirtualCamera } from './VirtualCameraContext'; +export { CameraFrustumHelper, type CameraFrustumHelperProps } from './CameraFrustumHelper'; -export { InputController, type InputControllerProps, type InputSourceConfig } from './input/InputController.js'; -export { InputAxisOwnerContext, type InputAxisOwner } from './input/InputAxisOwnerContext.js'; +export { InputController, type InputControllerProps, type InputSourceConfig } from './input/InputController'; +export { InputAxisOwnerContext, type InputAxisOwner } from './input/InputAxisOwnerContext'; -export { HardLockToTarget, type HardLockToTargetProps } from './body/HardLockToTarget.js'; -export { Follow, type FollowProps } from './body/Follow.js'; -export { PositionComposer, type PositionComposerProps } from './body/PositionComposer.js'; -export { Body } from './body/Body.js'; +export { HardLockToTarget, type HardLockToTargetProps } from './body/HardLockToTarget'; +export { Follow, type FollowProps } from './body/Follow'; +export { PositionComposer, type PositionComposerProps } from './body/PositionComposer'; +export { Body } from './body/Body'; -export { HardLookAt, type HardLookAtProps } from './aim/HardLookAt.js'; -export { RotateWithFollowTarget, type RotateWithFollowTargetProps } from './aim/RotateWithFollowTarget.js'; -export { RotationComposer, type RotationComposerProps } from './aim/RotationComposer.js'; -export { PanTilt, type PanTiltProps } from './aim/PanTilt.js'; -export { Aim } from './aim/Aim.js'; +export { HardLookAt, type HardLookAtProps } from './aim/HardLookAt'; +export { RotateWithFollowTarget, type RotateWithFollowTargetProps } from './aim/RotateWithFollowTarget'; +export { RotationComposer, type RotationComposerProps } from './aim/RotationComposer'; +export { PanTilt, type PanTiltProps } from './aim/PanTilt'; +export { Aim } from './aim/Aim'; -export { BasicMultiChannelPerlin, type BasicMultiChannelPerlinProps } from './noise/BasicMultiChannelPerlin.js'; -export { Noise } from './noise/Noise.js'; +export { BasicMultiChannelPerlin, type BasicMultiChannelPerlinProps } from './noise/BasicMultiChannelPerlin'; +export { Noise } from './noise/Noise'; -export { ImpulseListener, type ImpulseListenerProps, type ImpulseShakeProps } from './impulse/ImpulseListener.js'; +export { ImpulseListener, type ImpulseListenerProps, type ImpulseShakeProps } from './impulse/ImpulseListener'; -export { GroupFraming, type GroupFramingProps } from './extension/GroupFraming.js'; -export { Lens, type LensProps } from './extension/Lens.js'; -export { Extension } from './extension/Extension.js'; +export { GroupFraming, type GroupFramingProps } from './extension/GroupFraming'; +export { Lens, type LensProps } from './extension/Lens'; +export { Extension } from './extension/Extension'; diff --git a/src/react/input/InputAxisOwnerContext.ts b/src/react/input/InputAxisOwnerContext.ts index fec230a..66ff629 100644 --- a/src/react/input/InputAxisOwnerContext.ts +++ b/src/react/input/InputAxisOwnerContext.ts @@ -1,5 +1,5 @@ import { createContext } from 'react'; -import type { InputAxis } from '../../core/input/InputAxis.js'; +import type { InputAxis } from '../../core/input/InputAxis'; /** Anything a `` can drive - any Body/Aim/Extension exposing named `InputAxis` instances */ export type InputAxisOwner = { diff --git a/src/react/input/InputController.tsx b/src/react/input/InputController.tsx index 2496710..d135286 100644 --- a/src/react/input/InputController.tsx +++ b/src/react/input/InputController.tsx @@ -1,15 +1,11 @@ import { useThree } from '@react-three/fiber'; import { use, useEffect, useImperativeHandle, useState, type Ref, type RefObject } from 'react'; -import { useKlipp } from '../KlippContext.js'; -import { useIsActiveVirtualCamera, useIsLiveVirtualCamera } from '../VirtualCameraContext.js'; -import type { InputAxis } from '../../core/input/InputAxis.js'; -import { - InputAxisController, - type InputAxisControllerConfig, - type InputInvert, -} from '../../dom/InputAxisController.js'; -import { InputAxisOwnerContext, type InputAxisOwner } from './InputAxisOwnerContext.js'; -import type { InteractiveArea } from '../../dom/InputSystem.js'; +import { useKlipp } from '../KlippContext'; +import { useIsActiveVirtualCamera, useIsLiveVirtualCamera } from '../VirtualCameraContext'; +import type { InputAxis } from '../../core/input/InputAxis'; +import { InputAxisController, type InputAxisControllerConfig, type InputInvert } from '../../dom/InputAxisController'; +import { InputAxisOwnerContext, type InputAxisOwner } from './InputAxisOwnerContext'; +import type { InteractiveArea } from '../../dom/InputSystem'; export type InputSourceConfig = { /** Axis names to drive for each source. */ diff --git a/src/react/noise/BasicMultiChannelPerlin.tsx b/src/react/noise/BasicMultiChannelPerlin.tsx index bf66acc..df6bc5c 100644 --- a/src/react/noise/BasicMultiChannelPerlin.tsx +++ b/src/react/noise/BasicMultiChannelPerlin.tsx @@ -1,10 +1,10 @@ import { useEffect, useImperativeHandle, type Ref } from 'react'; -import { useVirtualCamera } from '../VirtualCameraContext.js'; +import { useVirtualCamera } from '../VirtualCameraContext'; import type { BasicMultiChannelPerlinNoiseThree, PerlinNoiseThreeOptions, -} from '../../three/noise/BasicMultiChannelPerlinNoiseThree.js'; -import { useBasicMultiChannelPerlinNoise } from './useBasicMultiChannelPerlinNoise.js'; +} from '../../three/noise/BasicMultiChannelPerlinNoiseThree'; +import { useBasicMultiChannelPerlinNoise } from './useBasicMultiChannelPerlinNoise'; export type BasicMultiChannelPerlinProps = PerlinNoiseThreeOptions & { ref?: Ref; diff --git a/src/react/noise/Noise.ts b/src/react/noise/Noise.ts index 765f3b8..6c11113 100644 --- a/src/react/noise/Noise.ts +++ b/src/react/noise/Noise.ts @@ -1,4 +1,4 @@ -import { BasicMultiChannelPerlin } from './BasicMultiChannelPerlin.js'; +import { BasicMultiChannelPerlin } from './BasicMultiChannelPerlin'; /** Noise components add position and rotation offsets to a virtual camera. Multiple noise components can stack. */ export const Noise = { diff --git a/src/react/noise/useBasicMultiChannelPerlinNoise.ts b/src/react/noise/useBasicMultiChannelPerlinNoise.ts index 4def4cd..228295d 100644 --- a/src/react/noise/useBasicMultiChannelPerlinNoise.ts +++ b/src/react/noise/useBasicMultiChannelPerlinNoise.ts @@ -1,8 +1,8 @@ import { useState } from 'react'; -import { resolveVec3 } from '../../three/resolve/resolveVector3.js'; -import type { BasicMultiChannelPerlinProps } from './BasicMultiChannelPerlin.js'; -import { BasicMultiChannelPerlinNoiseThree } from '../../three/noise/BasicMultiChannelPerlinNoiseThree.js'; -import * as perlinNoise from '../../core/noise/perlinNoise.js'; +import { resolveVec3 } from '../../three/resolve/resolveVector3'; +import type { BasicMultiChannelPerlinProps } from './BasicMultiChannelPerlin'; +import { BasicMultiChannelPerlinNoiseThree } from '../../three/noise/BasicMultiChannelPerlinNoiseThree'; +import * as perlinNoise from '../../core/noise/perlinNoise'; /** Creates and synchronizes a shared Perlin noise instance from props. */ export function useBasicMultiChannelPerlinNoise({ diff --git a/src/react/useCameraTransitionEvent.ts b/src/react/useCameraTransitionEvent.ts index 0d456b7..a713e86 100644 --- a/src/react/useCameraTransitionEvent.ts +++ b/src/react/useCameraTransitionEvent.ts @@ -1,6 +1,6 @@ import { useEffect, useEffectEvent } from 'react'; -import type { EventDispatcher } from '../core/EventDispatcher.js'; -import type { CameraTransitionEventMap } from '../core/Klipp.js'; +import type { EventDispatcher } from '../core/EventDispatcher'; +import type { CameraTransitionEventMap } from '../core/Klipp'; /** Callback props for camera transition events. */ export type CameraTransitionEventProps = { diff --git a/src/three/CameraFrustumHelperThree.ts b/src/three/CameraFrustumHelperThree.ts index 4f12af4..d7bd26a 100644 --- a/src/three/CameraFrustumHelperThree.ts +++ b/src/three/CameraFrustumHelperThree.ts @@ -1,5 +1,5 @@ import { CameraHelper, PerspectiveCamera, Quaternion, Vector3 } from 'three'; -import type { CameraState } from '../core/CameraState.js'; +import type { CameraState } from '../core/CameraState'; const scratchPosition = new Vector3(); const scratchQuaternion = new Quaternion(); diff --git a/src/three/KlippThree.ts b/src/three/KlippThree.ts index 18206e2..f44c05d 100644 --- a/src/three/KlippThree.ts +++ b/src/three/KlippThree.ts @@ -1,12 +1,12 @@ import type { Camera, PerspectiveCamera } from 'three'; -import type { CameraState } from '../core/CameraState.js'; -import * as cameraState from '../core/CameraState.js'; -import { Klipp, type KlippOptions } from '../core/Klipp.js'; -import { copyCameraStateFromCamera, writeCameraLens, writeCameraTransform } from './camera.js'; -import { TargetRegistry } from './resolve/TargetRegistry.js'; -import { VirtualCameraThree, type VirtualCameraThreeOptions } from './VirtualCameraThree.js'; - -export type { KlippMode, FrameUpdate } from '../core/Klipp.js'; +import type { CameraState } from '../core/CameraState'; +import * as cameraState from '../core/CameraState'; +import { Klipp, type KlippOptions } from '../core/Klipp'; +import { copyCameraStateFromCamera, writeCameraLens, writeCameraTransform } from './camera'; +import { TargetRegistry } from './resolve/TargetRegistry'; +import { VirtualCameraThree, type VirtualCameraThreeOptions } from './VirtualCameraThree'; + +export type { KlippMode, FrameUpdate } from '../core/Klipp'; export type KlippThreeOptions = Omit; diff --git a/src/three/VirtualCameraThree.ts b/src/three/VirtualCameraThree.ts index a9b4b0d..e52e904 100644 --- a/src/three/VirtualCameraThree.ts +++ b/src/three/VirtualCameraThree.ts @@ -1,14 +1,14 @@ import { vec4, type Quat } from 'math'; import { Quaternion, Vector3 } from 'three'; -import type { CameraState } from '../core/CameraState.js'; -import { VirtualCamera, type CameraPiece, type VirtualCameraOptions } from '../core/VirtualCamera.js'; -import { attachTo, prepare } from '../core/internal.js'; -import type { Klipp } from '../core/Klipp.js'; -import type { KlippThree } from './KlippThree.js'; -import { TargetGroup } from './extension/TargetGroup.js'; -import { isVector3Like, resolveVector3, type Vector3Like } from './resolve/resolveVector3.js'; -import type { Target } from './resolve/Target.js'; -import type { RegisteredTarget, TargetRegistry, TargetSlot } from './resolve/TargetRegistry.js'; +import type { CameraState } from '../core/CameraState'; +import { VirtualCamera, type CameraPiece, type VirtualCameraOptions } from '../core/VirtualCamera'; +import { attachTo, prepare } from '../core/internal'; +import type { Klipp } from '../core/Klipp'; +import type { KlippThree } from './KlippThree'; +import { TargetGroup } from './extension/TargetGroup'; +import { isVector3Like, resolveVector3, type Vector3Like } from './resolve/resolveVector3'; +import type { Target } from './resolve/Target'; +import type { RegisteredTarget, TargetRegistry, TargetSlot } from './resolve/TargetRegistry'; export type { CameraPiece }; diff --git a/src/three/aim/HardLookAtAimThree.ts b/src/three/aim/HardLookAtAimThree.ts index fa28620..6435513 100644 --- a/src/three/aim/HardLookAtAimThree.ts +++ b/src/three/aim/HardLookAtAimThree.ts @@ -1,9 +1,9 @@ -import { HardLookAtAim } from '../../core/aim/HardLookAtAim.js'; -import type { TargetPose } from '../../core/TargetPose.js'; -import * as targetPose from '../../core/TargetPose.js'; -import { readTargetPose } from '../readTargetPose.js'; -import type { Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; +import { HardLookAtAim } from '../../core/aim/HardLookAtAim'; +import type { TargetPose } from '../../core/TargetPose'; +import * as targetPose from '../../core/TargetPose'; +import { readTargetPose } from '../readTargetPose'; +import type { Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; /** Rotates so an `Object3D`, ref or fixed point is dead-center. */ export class HardLookAtAimThree extends HardLookAtAim { diff --git a/src/three/aim/PanTiltAimThree.ts b/src/three/aim/PanTiltAimThree.ts index d249850..7b5d6db 100644 --- a/src/three/aim/PanTiltAimThree.ts +++ b/src/three/aim/PanTiltAimThree.ts @@ -1,9 +1,9 @@ -import { PanTiltAim } from '../../core/aim/PanTiltAim.js'; -import type { TargetPose } from '../../core/TargetPose.js'; -import * as targetPose from '../../core/TargetPose.js'; -import { readTargetRotation } from '../readTargetPose.js'; -import type { Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; +import { PanTiltAim } from '../../core/aim/PanTiltAim'; +import type { TargetPose } from '../../core/TargetPose'; +import * as targetPose from '../../core/TargetPose'; +import { readTargetRotation } from '../readTargetPose'; +import type { Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; /** `PanTiltAim` relative to an optional `Object3D` or ref's rotation. */ export class PanTiltAimThree extends PanTiltAim { diff --git a/src/three/aim/RotateWithFollowTargetAimThree.ts b/src/three/aim/RotateWithFollowTargetAimThree.ts index da0c857..8bf3a23 100644 --- a/src/three/aim/RotateWithFollowTargetAimThree.ts +++ b/src/three/aim/RotateWithFollowTargetAimThree.ts @@ -1,12 +1,12 @@ import { RotateWithFollowTargetAim, type RotateWithFollowTargetOptions, -} from '../../core/aim/RotateWithFollowTargetAim.js'; -import type { TargetPose } from '../../core/TargetPose.js'; -import * as targetPose from '../../core/TargetPose.js'; -import { readTargetRotation } from '../readTargetPose.js'; -import type { Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; +} from '../../core/aim/RotateWithFollowTargetAim'; +import type { TargetPose } from '../../core/TargetPose'; +import * as targetPose from '../../core/TargetPose'; +import { readTargetRotation } from '../readTargetPose'; +import type { Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; export type { RotateWithFollowTargetOptions }; diff --git a/src/three/aim/RotationComposerAimThree.ts b/src/three/aim/RotationComposerAimThree.ts index fb61e5c..878fa77 100644 --- a/src/three/aim/RotationComposerAimThree.ts +++ b/src/three/aim/RotationComposerAimThree.ts @@ -1,13 +1,13 @@ -import type { RotationComposerParams } from '../../core/aim/rotationComposer.js'; -import * as rotationComposer from '../../core/aim/rotationComposer.js'; -import { RotationComposerAim } from '../../core/aim/RotationComposerAim.js'; -import type { TargetPose } from '../../core/TargetPose.js'; -import * as targetPose from '../../core/TargetPose.js'; -import { readTargetExtent } from '../readTargetExtent.js'; -import { readTargetPose } from '../readTargetPose.js'; -import type { Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; -import { optionalVec3, type Vector3Like } from '../resolve/resolveVector3.js'; +import type { RotationComposerParams } from '../../core/aim/rotationComposer'; +import * as rotationComposer from '../../core/aim/rotationComposer'; +import { RotationComposerAim } from '../../core/aim/RotationComposerAim'; +import type { TargetPose } from '../../core/TargetPose'; +import * as targetPose from '../../core/TargetPose'; +import { readTargetExtent } from '../readTargetExtent'; +import { readTargetPose } from '../readTargetPose'; +import type { Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; +import { optionalVec3, type Vector3Like } from '../resolve/resolveVector3'; export type RotationComposerThreeOptions = Partial> & { /** Offset from the target, in its local space. */ diff --git a/src/three/body/CameraControlsBodyThree.ts b/src/three/body/CameraControlsBodyThree.ts index 86e118e..cf42f3b 100644 --- a/src/three/body/CameraControlsBodyThree.ts +++ b/src/three/body/CameraControlsBodyThree.ts @@ -1,9 +1,9 @@ import CameraControls from 'camera-controls'; import * as THREE from 'three'; -import type { CameraState } from '../../core/CameraState.js'; -import { resolveTargetPosition, type Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; -import { resolveVector3, type Vector3Like } from '../resolve/resolveVector3.js'; +import type { CameraState } from '../../core/CameraState'; +import { resolveTargetPosition, type Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; +import { resolveVector3, type Vector3Like } from '../resolve/resolveVector3'; CameraControls.install({ THREE }); diff --git a/src/three/body/FollowBodyThree.ts b/src/three/body/FollowBodyThree.ts index 9826605..8bcd400 100644 --- a/src/three/body/FollowBodyThree.ts +++ b/src/three/body/FollowBodyThree.ts @@ -1,11 +1,11 @@ -import { FollowBody, type FollowOptions as FollowCoreOptions } from '../../core/body/FollowBody.js'; -import type { TargetPose } from '../../core/TargetPose.js'; -import * as targetPose from '../../core/TargetPose.js'; -import { readTargetPose } from '../readTargetPose.js'; -import type { Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; -import { optionalVec3, type Vector3Like } from '../resolve/resolveVector3.js'; -import * as follow from '../../core/body/follow.js'; +import { FollowBody, type FollowOptions as FollowCoreOptions } from '../../core/body/FollowBody'; +import type { TargetPose } from '../../core/TargetPose'; +import * as targetPose from '../../core/TargetPose'; +import { readTargetPose } from '../readTargetPose'; +import type { Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; +import { optionalVec3, type Vector3Like } from '../resolve/resolveVector3'; +import * as follow from '../../core/body/follow'; export type FollowThreeOptions = Omit & { /** Offset from the target, rotated according to `bindingMode`. */ diff --git a/src/three/body/HardLockToTargetBodyThree.ts b/src/three/body/HardLockToTargetBodyThree.ts index 9b9c920..da06ed0 100644 --- a/src/three/body/HardLockToTargetBodyThree.ts +++ b/src/three/body/HardLockToTargetBodyThree.ts @@ -1,9 +1,9 @@ -import { HardLockToTargetBody, type HardLockToTargetOptions } from '../../core/body/HardLockToTargetBody.js'; -import type { TargetPose } from '../../core/TargetPose.js'; -import * as targetPose from '../../core/TargetPose.js'; -import { readTargetPose } from '../readTargetPose.js'; -import type { Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; +import { HardLockToTargetBody, type HardLockToTargetOptions } from '../../core/body/HardLockToTargetBody'; +import type { TargetPose } from '../../core/TargetPose'; +import * as targetPose from '../../core/TargetPose'; +import { readTargetPose } from '../readTargetPose'; +import type { Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; export type { HardLockToTargetOptions }; diff --git a/src/three/body/PositionComposerBodyThree.ts b/src/three/body/PositionComposerBodyThree.ts index 7c6883b..b8b9046 100644 --- a/src/three/body/PositionComposerBodyThree.ts +++ b/src/three/body/PositionComposerBodyThree.ts @@ -1,13 +1,13 @@ -import type { PositionComposerParams } from '../../core/body/positionComposer.js'; -import * as positionComposer from '../../core/body/positionComposer.js'; -import { PositionComposerBody } from '../../core/body/PositionComposerBody.js'; -import type { TargetPose } from '../../core/TargetPose.js'; -import * as targetPose from '../../core/TargetPose.js'; -import { readTargetExtent } from '../readTargetExtent.js'; -import { readTargetPose } from '../readTargetPose.js'; -import type { Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; -import type { Vector3Like } from '../resolve/resolveVector3.js'; +import type { PositionComposerParams } from '../../core/body/positionComposer'; +import * as positionComposer from '../../core/body/positionComposer'; +import { PositionComposerBody } from '../../core/body/PositionComposerBody'; +import type { TargetPose } from '../../core/TargetPose'; +import * as targetPose from '../../core/TargetPose'; +import { readTargetExtent } from '../readTargetExtent'; +import { readTargetPose } from '../readTargetPose'; +import type { Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; +import type { Vector3Like } from '../resolve/resolveVector3'; export type PositionComposerThreeOptions = Partial & { /** Target radius used when composing its visible edge. Ignored when `size` is set. */ diff --git a/src/three/camera.ts b/src/three/camera.ts index 626d485..96042da 100644 --- a/src/three/camera.ts +++ b/src/three/camera.ts @@ -1,6 +1,6 @@ import { vec3 } from 'math'; import type { Object3D, PerspectiveCamera } from 'three'; -import type { CameraState } from '../core/CameraState.js'; +import type { CameraState } from '../core/CameraState'; /** Read a perspective camera's transform and lens into `out`. */ export function copyCameraStateFromCamera(out: CameraState, camera: PerspectiveCamera): CameraState { diff --git a/src/three/damping/Predictor.ts b/src/three/damping/Predictor.ts index 37d15b2..2904d85 100644 --- a/src/three/damping/Predictor.ts +++ b/src/three/damping/Predictor.ts @@ -1,6 +1,6 @@ import type { Vec3 } from 'math'; import type { Vector3 } from 'three'; -import * as predictor from '../../core/damping/predictor.js'; +import * as predictor from '../../core/damping/predictor'; const scratchPosition: Vec3 = [0, 0, 0]; const scratchDelta: Vec3 = [0, 0, 0]; diff --git a/src/three/damping/QuaternionDamper.ts b/src/three/damping/QuaternionDamper.ts index 429453a..6f99f0b 100644 --- a/src/three/damping/QuaternionDamper.ts +++ b/src/three/damping/QuaternionDamper.ts @@ -1,7 +1,7 @@ import type { Quat } from 'math'; import type { Quaternion } from 'three'; -import type { DampingConstant } from '../../core/damping/damping.js'; -import * as damping from '../../core/damping/damping.js'; +import type { DampingConstant } from '../../core/damping/damping'; +import * as damping from '../../core/damping/damping'; const scratchOut: Quat = [0, 0, 0, 1]; const scratchTarget: Quat = [0, 0, 0, 1]; diff --git a/src/three/damping/Vector3Damper.ts b/src/three/damping/Vector3Damper.ts index 9f892bd..6b6e3c5 100644 --- a/src/three/damping/Vector3Damper.ts +++ b/src/three/damping/Vector3Damper.ts @@ -1,7 +1,7 @@ import type { Vec3 } from 'math'; import type { Vector3 } from 'three'; -import type { DampingConstant } from '../../core/damping/damping.js'; -import * as damping from '../../core/damping/damping.js'; +import type { DampingConstant } from '../../core/damping/damping'; +import * as damping from '../../core/damping/damping'; const scratchOut: Vec3 = [0, 0, 0]; const scratchTarget: Vec3 = [0, 0, 0]; diff --git a/src/three/extension/GroupFramingExtensionThree.ts b/src/three/extension/GroupFramingExtensionThree.ts index f5d99d6..fa3f1cb 100644 --- a/src/three/extension/GroupFramingExtensionThree.ts +++ b/src/three/extension/GroupFramingExtensionThree.ts @@ -1,6 +1,6 @@ -import { GroupFramingExtension, type GroupFramingOptions } from '../../core/extension/GroupFramingExtension.js'; -import type { GroupFramingFitMode, GroupFramingMode, GroupMember } from '../../core/extension/groupFraming.js'; -import type { TargetGroup } from './TargetGroup.js'; +import { GroupFramingExtension, type GroupFramingOptions } from '../../core/extension/GroupFramingExtension'; +import type { GroupFramingFitMode, GroupFramingMode, GroupMember } from '../../core/extension/groupFraming'; +import type { TargetGroup } from './TargetGroup'; export type { GroupFramingFitMode, GroupFramingMode, GroupFramingOptions }; diff --git a/src/three/extension/TargetGroup.ts b/src/three/extension/TargetGroup.ts index 7e1e672..dc24b7c 100644 --- a/src/three/extension/TargetGroup.ts +++ b/src/three/extension/TargetGroup.ts @@ -1,11 +1,11 @@ import type { Vec3 } from 'math'; import { Vector3 } from 'three'; -import type { GroupMember, GroupPositionMode } from '../../core/extension/groupFraming.js'; -import * as groupFraming from '../../core/extension/groupFraming.js'; -import { readTargetExtent } from '../readTargetExtent.js'; -import { resolveTargetPosition, resolveTargetSize, type Target } from '../resolve/Target.js'; -import type { TargetSlot } from '../resolve/TargetRegistry.js'; -import type { Vector3Like } from '../resolve/resolveVector3.js'; +import type { GroupMember, GroupPositionMode } from '../../core/extension/groupFraming'; +import * as groupFraming from '../../core/extension/groupFraming'; +import { readTargetExtent } from '../readTargetExtent'; +import { resolveTargetPosition, resolveTargetSize, type Target } from '../resolve/Target'; +import type { TargetSlot } from '../resolve/TargetRegistry'; +import type { Vector3Like } from '../resolve/resolveVector3'; export type TargetGroupMember = { target: Target; diff --git a/src/three/index.ts b/src/three/index.ts index b1a4615..32de4f4 100644 --- a/src/three/index.ts +++ b/src/three/index.ts @@ -1,49 +1,49 @@ -export { KlippThree, type KlippMode, type KlippThreeOptions, type FrameUpdate } from './KlippThree.js'; +export { KlippThree, type KlippMode, type KlippThreeOptions, type FrameUpdate } from './KlippThree'; export { VirtualCameraThree, type VirtualCameraThreeOptions, type InitialCameraState, type CameraPiece, -} from './VirtualCameraThree.js'; -export { copyCameraStateFromCamera, applyCameraState, writeCameraTransform, writeCameraLens } from './camera.js'; -export { CameraFrustumHelperThree } from './CameraFrustumHelperThree.js'; -export { readTargetPose, readTargetRotation } from './readTargetPose.js'; -export { readTargetExtent } from './readTargetExtent.js'; +} from './VirtualCameraThree'; +export { copyCameraStateFromCamera, applyCameraState, writeCameraTransform, writeCameraLens } from './camera'; +export { CameraFrustumHelperThree } from './CameraFrustumHelperThree'; +export { readTargetPose, readTargetRotation } from './readTargetPose'; +export { readTargetExtent } from './readTargetExtent'; export { resolveTargetPosition, resolveTargetRotation, resolveTargetSize, type Target, type RefLike, -} from './resolve/Target.js'; -export { resolveVector3, resolveVec3, isVector3Like, type Vector3Like } from './resolve/resolveVector3.js'; -export { TargetRegistry, type TargetSlot, type RegisteredTarget } from './resolve/TargetRegistry.js'; +} from './resolve/Target'; +export { resolveVector3, resolveVec3, isVector3Like, type Vector3Like } from './resolve/resolveVector3'; +export { TargetRegistry, type TargetSlot, type RegisteredTarget } from './resolve/TargetRegistry'; -export { Vector3Damper } from './damping/Vector3Damper.js'; -export { QuaternionDamper } from './damping/QuaternionDamper.js'; -export { Predictor } from './damping/Predictor.js'; +export { Vector3Damper } from './damping/Vector3Damper'; +export { QuaternionDamper } from './damping/QuaternionDamper'; +export { Predictor } from './damping/Predictor'; -export { HardLockToTargetBodyThree, type HardLockToTargetOptions } from './body/HardLockToTargetBodyThree.js'; -export { FollowBodyThree, type FollowThreeOptions } from './body/FollowBodyThree.js'; -export { PositionComposerBodyThree, type PositionComposerThreeOptions } from './body/PositionComposerBodyThree.js'; +export { HardLockToTargetBodyThree, type HardLockToTargetOptions } from './body/HardLockToTargetBodyThree'; +export { FollowBodyThree, type FollowThreeOptions } from './body/FollowBodyThree'; +export { PositionComposerBodyThree, type PositionComposerThreeOptions } from './body/PositionComposerBodyThree'; -export { HardLookAtAimThree } from './aim/HardLookAtAimThree.js'; +export { HardLookAtAimThree } from './aim/HardLookAtAimThree'; export { RotateWithFollowTargetAimThree, type RotateWithFollowTargetOptions, -} from './aim/RotateWithFollowTargetAimThree.js'; -export { RotationComposerAimThree, type RotationComposerThreeOptions } from './aim/RotationComposerAimThree.js'; -export { PanTiltAimThree } from './aim/PanTiltAimThree.js'; +} from './aim/RotateWithFollowTargetAimThree'; +export { RotationComposerAimThree, type RotationComposerThreeOptions } from './aim/RotationComposerAimThree'; +export { PanTiltAimThree } from './aim/PanTiltAimThree'; -export { TargetGroup, type TargetGroupMember, type TargetGroupPositionMode } from './extension/TargetGroup.js'; +export { TargetGroup, type TargetGroupMember, type TargetGroupPositionMode } from './extension/TargetGroup'; export { GroupFramingExtensionThree, type GroupFramingOptions, type GroupFramingFitMode, type GroupFramingMode, -} from './extension/GroupFramingExtensionThree.js'; +} from './extension/GroupFramingExtensionThree'; export { BasicMultiChannelPerlinNoiseThree, type PerlinNoiseThreeOptions, -} from './noise/BasicMultiChannelPerlinNoiseThree.js'; +} from './noise/BasicMultiChannelPerlinNoiseThree'; diff --git a/src/three/noise/BasicMultiChannelPerlinNoiseThree.ts b/src/three/noise/BasicMultiChannelPerlinNoiseThree.ts index ec70632..8dd24b6 100644 --- a/src/three/noise/BasicMultiChannelPerlinNoiseThree.ts +++ b/src/three/noise/BasicMultiChannelPerlinNoiseThree.ts @@ -1,8 +1,8 @@ import { BasicMultiChannelPerlinNoise, type PerlinNoiseOptions as PerlinNoiseCoreOptions, -} from '../../core/noise/BasicMultiChannelPerlinNoise.js'; -import { optionalVec3, type Vector3Like } from '../resolve/resolveVector3.js'; +} from '../../core/noise/BasicMultiChannelPerlinNoise'; +import { optionalVec3, type Vector3Like } from '../resolve/resolveVector3'; export type PerlinNoiseThreeOptions = Omit< PerlinNoiseCoreOptions, diff --git a/src/three/readTargetExtent.ts b/src/three/readTargetExtent.ts index 5a08dd7..0582a16 100644 --- a/src/three/readTargetExtent.ts +++ b/src/three/readTargetExtent.ts @@ -1,8 +1,8 @@ import { Quaternion, Vector3 } from 'three'; -import type { TargetExtent } from '../core/TargetExtent.js'; -import { resolveTargetRotation, resolveTargetSize, type Target } from './resolve/Target.js'; -import type { TargetSlot } from './resolve/TargetRegistry.js'; -import type { Vector3Like } from './resolve/resolveVector3.js'; +import type { TargetExtent } from '../core/TargetExtent'; +import { resolveTargetRotation, resolveTargetSize, type Target } from './resolve/Target'; +import type { TargetSlot } from './resolve/TargetRegistry'; +import type { Vector3Like } from './resolve/resolveVector3'; const scratchSize = new Vector3(); const scratchRotation = new Quaternion(); diff --git a/src/three/readTargetPose.ts b/src/three/readTargetPose.ts index a6d355a..93f3173 100644 --- a/src/three/readTargetPose.ts +++ b/src/three/readTargetPose.ts @@ -1,8 +1,8 @@ import { Quaternion, Vector3 } from 'three'; import type { Quat } from 'math'; -import { resolveTargetPosition, resolveTargetRotation, type Target } from './resolve/Target.js'; -import type { TargetSlot } from './resolve/TargetRegistry.js'; -import type { TargetPose } from '../core/TargetPose.js'; +import { resolveTargetPosition, resolveTargetRotation, type Target } from './resolve/Target'; +import type { TargetSlot } from './resolve/TargetRegistry'; +import type { TargetPose } from '../core/TargetPose'; const scratchPosition = new Vector3(); const scratchRotation = new Quaternion(); diff --git a/src/three/resolve/Target.ts b/src/three/resolve/Target.ts index c0105c6..a798884 100644 --- a/src/three/resolve/Target.ts +++ b/src/three/resolve/Target.ts @@ -1,6 +1,6 @@ import { Quaternion, Vector3, type Line, type Mesh, type Object3D, type Points } from 'three'; -import { isVector3Like, resolveVector3, type Vector3Like } from './resolveVector3.js'; -import type { TargetSlot } from './TargetRegistry.js'; +import { isVector3Like, resolveVector3, type Vector3Like } from './resolveVector3'; +import type { TargetSlot } from './TargetRegistry'; /** A React-style ref, without depending on React. */ export type RefLike = { current: T }; diff --git a/src/three/resolve/TargetRegistry.ts b/src/three/resolve/TargetRegistry.ts index ca84529..54c4e0f 100644 --- a/src/three/resolve/TargetRegistry.ts +++ b/src/three/resolve/TargetRegistry.ts @@ -1,6 +1,6 @@ import type { Quat, Vec3 } from 'math'; import { Quaternion, Vector3, type Object3D } from 'three'; -import type { RefLike } from './Target.js'; +import type { RefLike } from './Target'; /** A target whose world transform comes from the scene graph. */ export type RegisteredTarget = Object3D | RefLike; diff --git a/test/tsconfig.json b/test/tsconfig.json index adab937..1eb888a 100644 --- a/test/tsconfig.json +++ b/test/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.json", + "extends": "../tsconfig.lib.json", "compilerOptions": { "module": "esnext", "moduleResolution": "bundler", diff --git a/tsconfig.build.json b/tsconfig.build.json new file mode 100644 index 0000000..43618cc --- /dev/null +++ b/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "noEmit": false, + "emitDeclarationOnly": true, + "declarationDir": "./dist" + }, + "include": ["./src"] +} diff --git a/tsconfig.json b/tsconfig.json index 3bcc20a..81e9f93 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,24 +1,4 @@ { - "compilerOptions": { - "target": "es2023", - "lib": ["ES2023", "DOM"], - "module": "nodenext", - "moduleResolution": "nodenext", - "rootDir": "./src", - "outDir": "dist", - "declaration": true, - "jsx": "react-jsx", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true, - "moduleDetection": "force", - "types": [], - - /* Linting */ - "noUnusedLocals": true, - "noUnusedParameters": true, - "erasableSyntaxOnly": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] + "files": [], + "references": [{ "path": "./tsconfig.lib.json" }, { "path": "./tsconfig.node.json" }] } diff --git a/tsconfig.lib.json b/tsconfig.lib.json new file mode 100644 index 0000000..5f27c5c --- /dev/null +++ b/tsconfig.lib.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "es2023", + "lib": ["ES2023", "DOM"], + "module": "esnext", + "moduleResolution": "bundler", + "rootDir": "./src", + "noEmit": true, + "declaration": true, + "jsx": "react-jsx", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "moduleDetection": "force", + "types": [], + + /* Linting */ + "noUnusedLocals": true, + "noUnusedParameters": true, + "erasableSyntaxOnly": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src"] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..2dfb746 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es2023", + "lib": ["ES2023"], + "types": ["node"], + "module": "esnext", + "moduleResolution": "bundler", + "strict": true, + "skipLibCheck": true, + "noEmit": true + }, + "include": ["vite.config.ts", "vitest.config.ts", "labs.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..d83a5ad --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,30 @@ +import { isAbsolute } from 'node:path'; +import { defineConfig } from 'vite'; + +export default defineConfig({ + build: { + lib: { + entry: [ + 'src/core/index.ts', + 'src/three/index.ts', + 'src/three/body/CameraControlsBodyThree.ts', + 'src/react/index.ts', + 'src/react/body/camera-controls.ts', + 'src/dom/index.ts', + ], + formats: ['es'], + }, + target: 'es2023', + minify: false, + rolldownOptions: { + // Dependencies and peers stay imports, so apps share one copy of three, React and math. + external: (id) => !id.startsWith('.') && !isAbsolute(id), + output: { + // One output file per source file, so `dist` mirrors `src` and the package exports stay the same. + preserveModules: true, + preserveModulesRoot: 'src', + entryFileNames: '[name].js', + }, + }, + }, +});