@evitcastudio/kit 3.3.1 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/cli/host.js CHANGED
@@ -3,6 +3,7 @@ import { join, resolve } from 'path';
3
3
  import { networkInterfaces } from 'os';
4
4
  import chalk from 'chalk';
5
5
  import { detectArchitecture } from './app-bundler';
6
+ import { theme } from './theme';
6
7
  /**
7
8
  * Retrieves the primary local IPv4 address for local network access.
8
9
  * @returns Primary LAN IPv4 address or localhost fallback.
@@ -35,7 +36,7 @@ export async function processHost(pOptions = {}) {
35
36
  const architecture = detectArchitecture(join(cwd, 'src'));
36
37
  if (!existsSync(distDir)) {
37
38
  const message = `Target directory "${distDir}" does not exist. Run "kit build" or use "kit host -b" first.`;
38
- console.error(chalk.red(`\n[Kit Host] ${message}\n`));
39
+ console.error(theme.error(`\n[Kit Host] ${message}\n`));
39
40
  return { success: false, message };
40
41
  }
41
42
  // Multiplayer Hosting
@@ -43,10 +44,10 @@ export async function processHost(pOptions = {}) {
43
44
  const serverJsPath = join(distDir, 'server.js');
44
45
  if (!existsSync(serverJsPath)) {
45
46
  const message = `Cannot host multiplayer project: "${serverJsPath}" was not found. Please compile the server first using "kit build".`;
46
- console.error(chalk.red(`\n[Kit Host] ${message}\n`));
47
+ console.error(theme.error(`\n[Kit Host] ${message}\n`));
47
48
  return { success: false, message };
48
49
  }
49
- console.log(chalk.cyan(`\nStarting Multiplayer Server from ${chalk.bold(distDir)}...\n`));
50
+ console.log(`\n ${theme.brandBold('Kit Multiplayer Server')} ${theme.muted('─')} ${theme.secondary(distDir)}\n`);
50
51
  let serverSettingsPort = port;
51
52
  const settingsPath = join(distDir, 'settings.json');
52
53
  if (existsSync(settingsPath)) {
@@ -65,7 +66,13 @@ export async function processHost(pOptions = {}) {
65
66
  stderr: 'inherit',
66
67
  stdin: 'inherit'
67
68
  });
68
- console.log(chalk.green(`✓ Multiplayer server process spawned (configured port: ${serverSettingsPort})`));
69
+ console.log(` ${theme.successIcon('✓')} ${theme.title('Multiplayer server process spawned')} ${theme.secondary(`(configured port: ${serverSettingsPort})`)}`);
70
+ console.log(` ${theme.title('Local:')} ${theme.url(`http://localhost:${serverSettingsPort}`)}`);
71
+ const lanIp = getNetworkAddress();
72
+ if (lanIp !== 'localhost') {
73
+ console.log(` ${theme.title('Network:')} ${theme.url(`http://${lanIp}:${serverSettingsPort}`)}`);
74
+ }
75
+ console.log(theme.muted('\n Press Ctrl+C to stop the server\n'));
69
76
  process.on('SIGINT', () => {
70
77
  proc.kill();
71
78
  process.exit(0);
@@ -81,7 +88,7 @@ export async function processHost(pOptions = {}) {
81
88
  const indexPath = join(distDir, 'index.html');
82
89
  if (!existsSync(indexPath)) {
83
90
  const message = `Missing entrypoint: "${indexPath}" was not found in dist. Run "kit build" or use "kit host -b" to compile.`;
84
- console.error(chalk.red(`\n[Kit Host] ${message}\n`));
91
+ console.error(theme.error(`\n[Kit Host] ${message}\n`));
85
92
  return { success: false, message };
86
93
  }
87
94
  const lanIp = getNetworkAddress();
@@ -93,22 +100,22 @@ export async function processHost(pOptions = {}) {
93
100
  const file = Bun.file(join(distDir, target));
94
101
  if (!await file.exists()) {
95
102
  if (pOptions.verbose) {
96
- console.warn(chalk.yellow(`[Kit Host] 404 Not Found: ${target}`));
103
+ console.warn(theme.warning(`[Kit Host] 404 Not Found: ${target}`));
97
104
  }
98
105
  return new Response('Not Found', { status: 404 });
99
106
  }
100
107
  return new Response(file);
101
108
  }
102
109
  });
103
- console.log(chalk.cyan('\nKit Game Host Server\n'));
104
- console.log(` ${chalk.bold('Local:')} ${chalk.green(`http://localhost:${server.port}`)}`);
110
+ console.log(`\n ${theme.brandBold('Kit Game Host Server')}\n`);
111
+ console.log(` ${theme.title('Local:')} ${theme.url(`http://localhost:${server.port}`)}`);
105
112
  if (lanIp !== 'localhost') {
106
- console.log(` ${chalk.bold('Network:')} ${chalk.green(`http://${lanIp}:${server.port}`)}`);
113
+ console.log(` ${theme.title('Network:')} ${theme.url(`http://${lanIp}:${server.port}`)}`);
107
114
  }
108
- console.log(chalk.dim(`\nServing files from: ${distDir}`));
109
- console.log(chalk.dim('Press Ctrl+C to stop the server\n'));
115
+ console.log(theme.secondary(`\n Serving files from: ${distDir}`));
116
+ console.log(theme.muted(' Press Ctrl+C to stop the server\n'));
110
117
  process.on('SIGINT', () => {
111
- console.log(chalk.yellow('\nShutting down host server...'));
118
+ console.log(theme.warning('\nShutting down host server...'));
112
119
  server.stop();
113
120
  process.exit(0);
114
121
  });
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAyFD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwLtE"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AA0FD;;;GAGG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwLtE"}
package/lib/cli/init.js CHANGED
@@ -6,6 +6,7 @@ import { fileURLToPath } from 'node:url';
6
6
  import { spawnSync, execSync } from 'node:child_process';
7
7
  import os from 'node:os';
8
8
  import packageJSON from '../../package.json';
9
+ import { theme } from './theme';
9
10
  /**
10
11
  * Gets the git user name and email from the local system.
11
12
  * @returns The formatted author string.
@@ -24,6 +25,8 @@ function getGitUser() {
24
25
  }
25
26
  }
26
27
  function checkBun() {
28
+ if (typeof Bun !== 'undefined')
29
+ return true;
27
30
  const result = spawnSync('bun', ['--version'], { stdio: 'ignore', shell: true });
28
31
  return !result.error && result.status === 0;
29
32
  }
@@ -91,16 +94,16 @@ function copyTemplate(pSrc, pDest, pProjectName, pVersion, pAuthor) {
91
94
  * @param pOptions - Options for initialization.
92
95
  */
93
96
  export async function processInit(pOptions) {
94
- intro(chalk.cyan(`Kit CLI v${packageJSON.version}`));
97
+ intro(theme.brand(`Kit CLI v${packageJSON.version}`));
95
98
  // Environment Check
96
99
  if (!checkBun()) {
97
- note(`Kit requires the Bun runtime to build and run projects.\nYou can download it manually at ${chalk.cyan('https://bun.sh/')}`, 'Bun Not Found');
100
+ note(`Kit requires the Bun runtime to build and run projects.\nYou can download it manually at ${theme.brand('https://bun.sh/')}`, 'Bun Not Found');
98
101
  const install = await confirm({
99
102
  message: 'Would you like to install Bun automatically now?',
100
103
  initialValue: true,
101
104
  });
102
105
  if (isCancel(install) || !install) {
103
- cancel(`Please install Bun manually to use Kit: ${chalk.cyan('https://bun.sh/')}\nNote: Kit projects cannot build or run without Bun.`);
106
+ cancel(`Please install Bun manually to use Kit: ${theme.brand('https://bun.sh/')}\nNote: Kit projects cannot build or run without Bun.`);
104
107
  process.exit(1);
105
108
  }
106
109
  const sInstall = spinner();
@@ -108,7 +111,7 @@ export async function processInit(pOptions) {
108
111
  const success = installBun();
109
112
  if (!success) {
110
113
  sInstall.stop(chalk.red('Automatic installation failed.'));
111
- note(`Please install Bun manually: ${chalk.cyan('https://bun.sh/')}`, 'Manual Installation Required');
114
+ note(`Please install Bun manually: ${theme.brand('https://bun.sh/')}`, 'Manual Installation Required');
112
115
  process.exit(1);
113
116
  }
114
117
  sInstall.stop();
@@ -170,7 +173,7 @@ export async function processInit(pOptions) {
170
173
  if (fs.existsSync(projectDir)) {
171
174
  if (isInteractive) {
172
175
  const overwrite = await confirm({
173
- message: `Directory ${chalk.cyan(projectName)} already exists. Overwrite?`,
176
+ message: `Directory ${theme.brand(projectName)} already exists. Overwrite?`,
174
177
  initialValue: false,
175
178
  });
176
179
  if (isCancel(overwrite) || !overwrite) {
@@ -184,7 +187,7 @@ export async function processInit(pOptions) {
184
187
  }
185
188
  }
186
189
  const s = spinner();
187
- s.start(`Scaffolding ${chalk.cyan(projectName)}...`);
190
+ s.start(`Scaffolding ${theme.brand(projectName)}...`);
188
191
  try {
189
192
  const projectPath = path.join(process.cwd(), projectName);
190
193
  if (fs.existsSync(projectPath)) {
@@ -228,27 +231,27 @@ export async function processInit(pOptions) {
228
231
  installSpinner.start('Installing project dependencies with Bun...');
229
232
  const installResult = spawnSync('bun', ['install'], { cwd: projectPath, stdio: 'ignore', shell: true });
230
233
  if (installResult.status === 0) {
231
- installSpinner.stop(chalk.green('Dependencies installed successfully!'));
234
+ installSpinner.stop(theme.success('Dependencies installed successfully!'));
232
235
  }
233
236
  else {
234
- installSpinner.stop(chalk.yellow('Dependency installation finished with warnings.'));
237
+ installSpinner.stop(theme.warning('Dependency installation finished with warnings.'));
235
238
  }
236
239
  }
237
- console.log(`${chalk.cyan('│')}`);
238
- console.log(`${chalk.cyan('│')} ${chalk.white.bold('Next steps:')}`);
239
- console.log(`${chalk.cyan('│')} ${chalk.dim('1.')} cd ${chalk.cyan(projectName)}`);
240
+ console.log(`${theme.brand('│')}`);
241
+ console.log(`${theme.brand('│')} ${theme.title('Next steps:')}`);
242
+ console.log(`${theme.brand('│')} ${theme.stepNumber('1.')} cd ${theme.brandBold(projectName)}`);
240
243
  if (!shouldInstall) {
241
- console.log(`${chalk.cyan('│')} ${chalk.dim('2.')} bun install`);
242
- console.log(`${chalk.cyan('│')} ${chalk.dim('3.')} bun run build`);
244
+ console.log(`${theme.brand('│')} ${theme.stepNumber('2.')} bun install`);
245
+ console.log(`${theme.brand('│')} ${theme.stepNumber('3.')} bun run build`);
243
246
  }
244
247
  else {
245
- console.log(`${chalk.cyan('│')} ${chalk.dim('2.')} bun run build`);
248
+ console.log(`${theme.brand('│')} ${theme.stepNumber('2.')} bun run build`);
246
249
  }
247
- console.log(`${chalk.cyan('│')}`);
248
- outro(chalk.green.bold('Happy coding!'));
250
+ console.log(`${theme.brand('│')}`);
251
+ outro(theme.brandBold('Happy coding!'));
249
252
  }
250
253
  catch (pError) {
251
- s.stop(chalk.red('Scaffolding failed.'));
254
+ s.stop(theme.error('Scaffolding failed.'));
252
255
  // Cleanup partially created directory
253
256
  if (projectName) {
254
257
  const projectPath = path.join(process.cwd(), projectName);
@@ -1 +1 @@
1
- {"version":3,"file":"resource-builder.d.ts","sourceRoot":"","sources":["../../src/cli/resource-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA0oB9C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCvL"}
1
+ {"version":3,"file":"resource-builder.d.ts","sourceRoot":"","sources":["../../src/cli/resource-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA8oB9C;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAsCvL"}
@@ -5,11 +5,12 @@ import { watch as chokidarWatch } from 'chokidar';
5
5
  import { v4 as uuidv4 } from 'uuid';
6
6
  import { VYI } from '../vendor/vyi';
7
7
  import { bundleApp } from './app-bundler';
8
+ import { theme } from './theme';
8
9
  // Logging helpers
9
10
  const log = console.log;
10
- const info = chalk.hex('#ffa552');
11
- const error = chalk.hex('#c42847');
12
- const alert = chalk.hex('#EFF2C0');
11
+ const info = theme.info;
12
+ const error = theme.error;
13
+ const alert = theme.alert;
13
14
  // Resource types and valid file extensions
14
15
  const RESOURCE_TYPES = ['interface', 'icon', 'map', 'sound', 'macros'];
15
16
  const VALID_EXTENSIONS = ['vyint', 'vyi', 'vym', 'vymac', 'mp3', 'aac', 'wav', 'm4a', 'ogg', 'flac'];
@@ -363,11 +364,13 @@ async function clearResourceTypeDirectories(pBaseDirectory) {
363
364
  try {
364
365
  const directoryExists = await fs.stat(pBaseDirectory).then(stat => stat.isDirectory()).catch(() => false);
365
366
  if (directoryExists) {
366
- await fs.rm(pBaseDirectory, { recursive: true });
367
+ await fs.rm(pBaseDirectory, { recursive: true, force: true });
367
368
  }
368
369
  }
369
370
  catch (pError) {
370
- log(`${error(`[Error]`)} clearing resource directory: ${pError}`);
371
+ if (pError?.code !== 'ENOENT') {
372
+ log(`${error(`[Error]`)} clearing resource directory: ${pError}`);
373
+ }
371
374
  }
372
375
  }
373
376
  /**
@@ -445,9 +448,9 @@ async function runWatch() {
445
448
  pathsToWatch.push(srcDir);
446
449
  }
447
450
  const displayPaths = pathsToWatch
448
- .map(p => chalk.bold(relative(projectRootDirectory, p) || p))
451
+ .map(p => theme.highlight(relative(projectRootDirectory, p) || p))
449
452
  .join(', ');
450
- console.log(chalk.cyan(`\nWatching for changes in: ${displayPaths}`));
453
+ console.log(`\n ${theme.brandBold('Watching for changes in:')} ${displayPaths}`);
451
454
  let debounceTimer = null;
452
455
  let isRebuilding = false;
453
456
  let queuedChange = null;
@@ -461,7 +464,7 @@ async function runWatch() {
461
464
  }
462
465
  isRebuilding = true;
463
466
  try {
464
- console.log(chalk.dim(`\nFile changed: ${pFilename}, rebuilding...`));
467
+ console.log(`\n ${theme.accent('›')} ${theme.title('File changed:')} ${theme.highlight(pFilename)} ${theme.secondary('(rebuilding...)')}`);
465
468
  await runBuild();
466
469
  }
467
470
  finally {
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Modern high-contrast CLI theme system.
3
+ * Built around emerald green (#10B981 / #059669 family) with crisp slate neutrals
4
+ * and vivid semantic accents for readability on dark and light terminal backgrounds.
5
+ */
6
+ export declare const theme: {
7
+ brand: import("chalk").ChalkInstance;
8
+ brandBold: import("chalk").ChalkInstance;
9
+ brandLight: import("chalk").ChalkInstance;
10
+ brandMuted: import("chalk").ChalkInstance;
11
+ accent: import("chalk").ChalkInstance;
12
+ success: import("chalk").ChalkInstance;
13
+ successIcon: import("chalk").ChalkInstance;
14
+ warning: import("chalk").ChalkInstance;
15
+ warningMuted: import("chalk").ChalkInstance;
16
+ error: import("chalk").ChalkInstance;
17
+ errorText: import("chalk").ChalkInstance;
18
+ info: import("chalk").ChalkInstance;
19
+ infoBold: import("chalk").ChalkInstance;
20
+ alert: import("chalk").ChalkInstance;
21
+ title: import("chalk").ChalkInstance;
22
+ text: import("chalk").ChalkInstance;
23
+ secondary: import("chalk").ChalkInstance;
24
+ muted: import("chalk").ChalkInstance;
25
+ highlight: import("chalk").ChalkInstance;
26
+ url: import("chalk").ChalkInstance;
27
+ bracket: import("chalk").ChalkInstance;
28
+ divider: import("chalk").ChalkInstance;
29
+ bullet: string;
30
+ stepNumber: import("chalk").ChalkInstance;
31
+ white: import("chalk").ChalkInstance;
32
+ whiteBold: import("chalk").ChalkInstance;
33
+ dim: import("chalk").ChalkInstance;
34
+ gray: import("chalk").ChalkInstance;
35
+ };
36
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/cli/theme.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCjB,CAAC"}
@@ -0,0 +1,41 @@
1
+ import chalk from 'chalk';
2
+ /**
3
+ * Modern high-contrast CLI theme system.
4
+ * Built around emerald green (#10B981 / #059669 family) with crisp slate neutrals
5
+ * and vivid semantic accents for readability on dark and light terminal backgrounds.
6
+ */
7
+ export const theme = {
8
+ // Brand - Emerald palette
9
+ brand: chalk.hex('#10B981'),
10
+ brandBold: chalk.bold.hex('#10B981'),
11
+ brandLight: chalk.hex('#34D399'),
12
+ brandMuted: chalk.hex('#059669'),
13
+ accent: chalk.bold.hex('#2DD4BF'), // teal/mint highlight
14
+ // Semantic status colors (luminous, high contrast, zero muddiness)
15
+ success: chalk.bold.hex('#10B981'),
16
+ successIcon: chalk.bold.hex('#34D399'),
17
+ warning: chalk.bold.hex('#FBBF24'), // warm amber
18
+ warningMuted: chalk.hex('#FCD34D'),
19
+ error: chalk.bold.hex('#F43F5E'), // vibrant rose/coral
20
+ errorText: chalk.hex('#FB7185'),
21
+ info: chalk.hex('#38BDF8'), // sky blue for build times & stats
22
+ infoBold: chalk.bold.hex('#38BDF8'),
23
+ alert: chalk.bold.hex('#FBBF24'),
24
+ // High-contrast neutrals (replaces muddy ANSI dim)
25
+ title: chalk.bold.white,
26
+ text: chalk.hex('#F1F5F9'), // Slate 100 - clear, crisp primary text
27
+ secondary: chalk.hex('#94A3B8'), // Slate 400 - clean, readable secondary details
28
+ muted: chalk.hex('#64748B'), // Slate 500 - separators, subtle notes
29
+ highlight: chalk.bold.hex('#F8FAFC'), // White bold highlight
30
+ url: chalk.bold.hex('#38BDF8').underline,
31
+ // Structural elements
32
+ bracket: chalk.hex('#64748B'),
33
+ divider: chalk.hex('#334155'),
34
+ bullet: chalk.hex('#10B981')('›'),
35
+ stepNumber: chalk.bold.hex('#10B981'),
36
+ // Legacy neutral aliases for backward compatibility
37
+ white: chalk.white,
38
+ whiteBold: chalk.white.bold,
39
+ dim: chalk.hex('#94A3B8'),
40
+ gray: chalk.hex('#94A3B8'),
41
+ };
package/lib/index.d.ts CHANGED
@@ -5,4 +5,6 @@ export type { Client, Diob } from './types/vylo';
5
5
  export { KitPlugin } from './plugins/kit-plugin';
6
6
  export { Network } from './plugins/network';
7
7
  export type { NetworkListener } from './plugins/network';
8
+ export { Camera, CameraPlugin, CameraManager, BaseCamera, FollowCamera, SpectateCamera, PanCamera, InfluenceCamera, TransitionCamera, GizmoRenderer } from './plugins/camera';
9
+ export type { CameraManagerOptions, CameraDebugOptions, CameraEventName, CameraEventMap, CameraEventListener, GameInstance, Vector2D, ShakePresetConfig, ShakeOptions, EaseType, DurationSettings, EaseSettings, ShakePreset, CameraOffset, FollowCameraOptions, SpectateCameraOptions, PanCameraOptions, InfluenceCameraOptions, TransitionCameraOptions, CameraType } from './plugins/camera';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACvG,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACvG,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EACH,MAAM,EACN,YAAY,EACZ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,aAAa,EAChB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACR,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACb,MAAM,kBAAkB,CAAC"}
package/lib/index.js CHANGED
@@ -3,3 +3,4 @@ export { EventEmitter } from './events/event-system';
3
3
  // Plugins
4
4
  export { KitPlugin } from './plugins/kit-plugin';
5
5
  export { Network } from './plugins/network';
6
+ export { Camera, CameraPlugin, CameraManager, BaseCamera, FollowCamera, SpectateCamera, PanCamera, InfluenceCamera, TransitionCamera, GizmoRenderer } from './plugins/camera';
@@ -0,0 +1,3 @@
1
+ export { CameraPlugin, CameraPlugin as Camera, CameraManager, BaseCamera, FollowCamera, SpectateCamera, PanCamera, InfluenceCamera, TransitionCamera, GizmoRenderer } from '@evitcastudio/lens';
2
+ export type { KitPluginEmitter, CameraManagerOptions, CameraDebugOptions, CameraEventName, CameraEventMap, CameraEventListener, GameInstance, Vector2D, ShakePresetConfig, ShakeOptions, EaseType, DurationSettings, EaseSettings, ShakePreset, CameraOffset, FollowCameraOptions, SpectateCameraOptions, PanCameraOptions, InfluenceCameraOptions, TransitionCameraOptions, CameraType } from '@evitcastudio/lens';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/camera/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,YAAY,EACZ,YAAY,IAAI,MAAM,EACtB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,eAAe,EACf,gBAAgB,EAChB,aAAa,EAChB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACR,gBAAgB,EAChB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACb,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ // Re-export Camera plugin and classes directly from @evitcastudio/lens
2
+ export { CameraPlugin, CameraPlugin as Camera, CameraManager, BaseCamera, FollowCamera, SpectateCamera, PanCamera, InfluenceCamera, TransitionCamera, GizmoRenderer } from '@evitcastudio/lens';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evitcastudio/kit",
3
- "version": "3.3.1",
3
+ "version": "3.4.0",
4
4
  "author": "doubleactii 56242467+doubleactii@users.noreply.github.com (https://evitcastudio.com)",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
@@ -10,6 +10,10 @@
10
10
  ".": {
11
11
  "import": "./lib/index.js",
12
12
  "types": "./lib/index.d.ts"
13
+ },
14
+ "./camera": {
15
+ "import": "./lib/plugins/camera/index.js",
16
+ "types": "./lib/plugins/camera/index.d.ts"
13
17
  }
14
18
  },
15
19
  "description": "A single-player/multiplayer framework for the Vylocity Game Engine.",
@@ -60,6 +64,7 @@
60
64
  },
61
65
  "dependencies": {
62
66
  "@clack/prompts": "^1.1.0",
67
+ "@evitcastudio/lens": "^4.3.0",
63
68
  "chalk": "^5.4.0",
64
69
  "chokidar": "^5.0.0",
65
70
  "commander": "^12.1.0",