@arcanewizards/timecode-toolbox 0.1.0 → 0.1.1

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.
Files changed (58) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/frontend/index.js +865 -272
  3. package/dist/components/frontend/index.mjs +855 -262
  4. package/dist/entrypoint.css +163 -53
  5. package/dist/entrypoint.js +1474 -493
  6. package/dist/entrypoint.js.map +4 -4
  7. package/dist/frontend.js +1474 -493
  8. package/dist/frontend.js.map +4 -4
  9. package/dist/index.d.mts +3 -1
  10. package/dist/index.d.ts +3 -1
  11. package/dist/index.js +308 -37
  12. package/dist/index.mjs +329 -49
  13. package/dist/start.d.mts +1 -2
  14. package/dist/start.d.ts +1 -2
  15. package/dist/start.js +311 -38
  16. package/dist/start.mjs +332 -50
  17. package/package.json +12 -6
  18. package/.turbo/turbo-build.log +0 -58
  19. package/.turbo/turbo-lint.log +0 -4
  20. package/CHANGELOG.md +0 -40
  21. package/eslint.config.mjs +0 -49
  22. package/src/app.tsx +0 -147
  23. package/src/components/backend/index.ts +0 -6
  24. package/src/components/backend/toolbox-root.ts +0 -119
  25. package/src/components/frontend/constants.ts +0 -81
  26. package/src/components/frontend/entrypoint.ts +0 -12
  27. package/src/components/frontend/frontend.css +0 -108
  28. package/src/components/frontend/index.tsx +0 -46
  29. package/src/components/frontend/toolbox/content.tsx +0 -45
  30. package/src/components/frontend/toolbox/context.tsx +0 -63
  31. package/src/components/frontend/toolbox/core/size-aware-div.tsx +0 -51
  32. package/src/components/frontend/toolbox/core/timecode-display.tsx +0 -592
  33. package/src/components/frontend/toolbox/generators.tsx +0 -318
  34. package/src/components/frontend/toolbox/inputs.tsx +0 -484
  35. package/src/components/frontend/toolbox/outputs.tsx +0 -581
  36. package/src/components/frontend/toolbox/preferences.ts +0 -25
  37. package/src/components/frontend/toolbox/root.tsx +0 -335
  38. package/src/components/frontend/toolbox/settings.tsx +0 -54
  39. package/src/components/frontend/toolbox/types.ts +0 -28
  40. package/src/components/frontend/toolbox/util.tsx +0 -61
  41. package/src/components/proto.ts +0 -420
  42. package/src/config.ts +0 -7
  43. package/src/generators/clock.tsx +0 -206
  44. package/src/generators/index.tsx +0 -15
  45. package/src/index.ts +0 -38
  46. package/src/inputs/artnet.tsx +0 -305
  47. package/src/inputs/index.tsx +0 -13
  48. package/src/inputs/tcnet.tsx +0 -272
  49. package/src/outputs/artnet.tsx +0 -170
  50. package/src/outputs/index.tsx +0 -11
  51. package/src/start.ts +0 -47
  52. package/src/tree.ts +0 -133
  53. package/src/types.ts +0 -12
  54. package/src/urls.ts +0 -49
  55. package/src/util.ts +0 -82
  56. package/tailwind.config.cjs +0 -7
  57. package/tsconfig.json +0 -10
  58. package/tsup.config.ts +0 -10
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { SigilAppInstance } from '@arcanewizards/sigil';
2
2
  import { ToolkitOptions } from '@arcanejs/toolkit';
3
3
  import pino from 'pino';
4
+ import { AppEdition } from '@arcanewizards/apis';
4
5
  import z from 'zod';
5
6
 
6
7
  type AppApi = Record<never, never>;
@@ -51,7 +52,8 @@ type TimecodeToolboxOptions = {
51
52
  appProps: TimecodeToolboxAppProps;
52
53
  toolkitOptions?: Omit<Partial<ToolkitOptions>, 'logger'>;
53
54
  title: string;
55
+ edition: AppEdition;
54
56
  };
55
- declare const runTimecodeToolboxServer: ({ logger, appProps, toolkitOptions, title, }: TimecodeToolboxOptions) => SigilAppInstance<AppApi>;
57
+ declare const runTimecodeToolboxServer: ({ logger, appProps, toolkitOptions, title, edition, }: TimecodeToolboxOptions) => SigilAppInstance<AppApi>;
56
58
 
57
59
  export { type AppApi, type TimecodeToolboxOptions, runTimecodeToolboxServer, urls };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { SigilAppInstance } from '@arcanewizards/sigil';
2
2
  import { ToolkitOptions } from '@arcanejs/toolkit';
3
3
  import pino from 'pino';
4
+ import { AppEdition } from '@arcanewizards/apis';
4
5
  import z from 'zod';
5
6
 
6
7
  type AppApi = Record<never, never>;
@@ -51,7 +52,8 @@ type TimecodeToolboxOptions = {
51
52
  appProps: TimecodeToolboxAppProps;
52
53
  toolkitOptions?: Omit<Partial<ToolkitOptions>, 'logger'>;
53
54
  title: string;
55
+ edition: AppEdition;
54
56
  };
55
- declare const runTimecodeToolboxServer: ({ logger, appProps, toolkitOptions, title, }: TimecodeToolboxOptions) => SigilAppInstance<AppApi>;
57
+ declare const runTimecodeToolboxServer: ({ logger, appProps, toolkitOptions, title, edition, }: TimecodeToolboxOptions) => SigilAppInstance<AppApi>;
56
58
 
57
59
  export { type AppApi, type TimecodeToolboxOptions, runTimecodeToolboxServer, urls };
package/dist/index.js CHANGED
@@ -1810,6 +1810,7 @@ var runSigilApp = ({
1810
1810
  logger: upstreamLogger,
1811
1811
  title,
1812
1812
  version: version2,
1813
+ edition,
1813
1814
  appProps,
1814
1815
  toolkitOptions,
1815
1816
  createApp: createApp2,
@@ -1868,10 +1869,10 @@ var runSigilApp = ({
1868
1869
  logger.info(`${title} ready to start listening`);
1869
1870
  }
1870
1871
  });
1871
- let api = null;
1872
+ let api2 = null;
1872
1873
  const apiListeners = /* @__PURE__ */ new Set();
1873
1874
  const setAppApi = (value) => {
1874
- api = value;
1875
+ api2 = value;
1875
1876
  for (const listener of apiListeners) {
1876
1877
  listener(value);
1877
1878
  }
@@ -1904,6 +1905,7 @@ var runSigilApp = ({
1904
1905
  createApp2({
1905
1906
  title,
1906
1907
  version: version2,
1908
+ edition,
1907
1909
  toolkit,
1908
1910
  logger,
1909
1911
  logEventEmitter,
@@ -1923,8 +1925,8 @@ var runSigilApp = ({
1923
1925
  if (event === "apiChange") {
1924
1926
  const apiListener = listener;
1925
1927
  apiListeners.add(apiListener);
1926
- if (api) {
1927
- apiListener(api);
1928
+ if (api2) {
1929
+ apiListener(api2);
1928
1930
  }
1929
1931
  return;
1930
1932
  }
@@ -2137,7 +2139,7 @@ var AppListenerManager = ({
2137
2139
  };
2138
2140
 
2139
2141
  // src/app.tsx
2140
- var import_react9 = require("react");
2142
+ var import_react11 = require("react");
2141
2143
 
2142
2144
  // src/components/backend/index.ts
2143
2145
  var import_react_toolkit3 = require("@arcanejs/react-toolkit");
@@ -6285,12 +6287,18 @@ var OUTPUT_CONFIG = zod_default.object({
6285
6287
  var TOOLBOX_CONFIG = zod_default.object({
6286
6288
  inputs: zod_default.record(zod_default.string(), INPUT_CONFIG),
6287
6289
  generators: zod_default.record(zod_default.string(), GENERATOR_CONFIG),
6288
- outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG)
6290
+ outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG),
6291
+ /**
6292
+ * Hash of the license the user has agreed to.
6293
+ */
6294
+ agreedToLicense: zod_default.string().optional(),
6295
+ checkForUpdates: zod_default.boolean().optional().default(true)
6289
6296
  });
6290
6297
  var DEFAULT_CONFIG = {
6291
6298
  inputs: {},
6292
6299
  generators: {},
6293
- outputs: {}
6300
+ outputs: {},
6301
+ checkForUpdates: true
6294
6302
  };
6295
6303
  var isPlaying = (state) => state.state === "playing" || state.state === "lagging";
6296
6304
  var isStopped = (state) => state.state === "stopped";
@@ -6306,9 +6314,11 @@ var DEFAULT_PROPS2 = {
6306
6314
  state: {
6307
6315
  inputs: {},
6308
6316
  outputs: {},
6309
- generators: {}
6317
+ generators: {},
6318
+ updates: null
6310
6319
  },
6311
- handlers: { children: {} }
6320
+ handlers: { children: {} },
6321
+ license: ""
6312
6322
  };
6313
6323
  var ToolboxRoot = class extends import_base2.Base {
6314
6324
  /** @hidden */
@@ -6336,7 +6346,8 @@ var ToolboxRoot = class extends import_base2.Base {
6336
6346
  key: idMap.getId(this),
6337
6347
  config: this.props.config,
6338
6348
  state: this.props.state,
6339
- handlers: this.props.handlers
6349
+ handlers: this.props.handlers,
6350
+ license: this.props.license
6340
6351
  };
6341
6352
  }
6342
6353
  /** @hidden */
@@ -6365,9 +6376,53 @@ var ToolboxRoot = class extends import_base2.Base {
6365
6376
  };
6366
6377
  };
6367
6378
 
6379
+ // src/components/backend/license-gate.ts
6380
+ var import_base3 = require("@arcanejs/toolkit/components/base");
6381
+ var DEFAULT_PROPS3 = {
6382
+ license: "",
6383
+ hash: ""
6384
+ };
6385
+ var LicenseGate = class extends import_base3.Base {
6386
+ /** @hidden */
6387
+ events = new import_base3.EventEmitter();
6388
+ constructor(props) {
6389
+ super(DEFAULT_PROPS3, props, {
6390
+ onPropsUpdated: (oldProps) => this.events.processPropChanges(
6391
+ {
6392
+ onAcceptLicense: "acceptLicense"
6393
+ },
6394
+ oldProps,
6395
+ this.props
6396
+ )
6397
+ });
6398
+ this.triggerInitialPropsUpdate();
6399
+ }
6400
+ addListener = this.events.addListener;
6401
+ removeListener = this.events.removeListener;
6402
+ /** @hidden */
6403
+ getProtoInfo(idMap) {
6404
+ return {
6405
+ namespace: "timecode-toolbox",
6406
+ component: "license-gate",
6407
+ key: idMap.getId(this),
6408
+ license: this.props.license,
6409
+ hash: this.props.hash
6410
+ };
6411
+ }
6412
+ /** @hidden */
6413
+ handleMessage = (message) => {
6414
+ if (isTimecodeToolboxComponentMessage(message, "license-gate")) {
6415
+ if (message.action === "accept-license") {
6416
+ this.events.emit("acceptLicense", message.hash);
6417
+ }
6418
+ }
6419
+ };
6420
+ };
6421
+
6368
6422
  // src/components/backend/index.ts
6369
6423
  var C = (0, import_react_toolkit3.prepareComponents)("timecode-toolbox", {
6370
- ToolboxRoot
6424
+ ToolboxRoot,
6425
+ LicenseGate
6371
6426
  });
6372
6427
 
6373
6428
  // src/config.ts
@@ -14447,11 +14502,179 @@ var Generators = (props) => {
14447
14502
  return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_jsx_runtime8.Fragment, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ClockGenerators, { ...props }) });
14448
14503
  };
14449
14504
 
14505
+ // src/license.ts
14506
+ var import_node_crypto = require("crypto");
14507
+ var import_promises = require("fs/promises");
14508
+ var import_react9 = require("react");
14509
+ var getLicense = async () => {
14510
+ const licenseText = await (0, import_promises.readFile)(require.resolve("../LICENSE"), "utf-8");
14511
+ const hash = (0, import_node_crypto.createHash)("sha256").update(licenseText).digest("hex");
14512
+ return { text: licenseText, hash };
14513
+ };
14514
+ var useLicense = () => {
14515
+ const [license, setLicense] = (0, import_react9.useState)(null);
14516
+ (0, import_react9.useEffect)(() => {
14517
+ getLicense().then(setLicense);
14518
+ }, []);
14519
+ return license;
14520
+ };
14521
+
14522
+ // src/updates.tsx
14523
+ var import_react10 = require("react");
14524
+
14525
+ // ../../packages/apis/dist/index.js
14526
+ var APP_PLATFORM = zod_default.enum(["windows", "macos", "linux"]);
14527
+ var APP_ARCHITECTURE = zod_default.enum(["x64", "arm64"]);
14528
+ var APP_EDITION = zod_default.enum(["desktop", "cli"]);
14529
+ var CHECK_FOR_UPDATES_REQUEST = zod_default.object({
14530
+ app: zod_default.string(),
14531
+ edition: APP_EDITION,
14532
+ platform: APP_PLATFORM,
14533
+ architecture: APP_ARCHITECTURE,
14534
+ currentVersion: zod_default.string()
14535
+ });
14536
+ var CHECK_FOR_UPDATES_VERSION = zod_default.object({
14537
+ version: zod_default.string(),
14538
+ releaseNotes: zod_default.string()
14539
+ });
14540
+ var CHECK_FOR_UPDATES_RESPONSE = zod_default.object({
14541
+ downloadUrl: zod_default.string().optional(),
14542
+ latestVersion: zod_default.string(),
14543
+ newVersions: zod_default.array(CHECK_FOR_UPDATES_VERSION).optional()
14544
+ });
14545
+ var ApiError = class extends Error {
14546
+ constructor(message, response) {
14547
+ super(message);
14548
+ this.response = response;
14549
+ this.name = "ApiError";
14550
+ }
14551
+ };
14552
+ var api = (baseUrl) => {
14553
+ const checkForUpdates = async (request) => {
14554
+ const response = await fetch(new URL("/api/v1/updates", baseUrl), {
14555
+ method: "POST",
14556
+ headers: { "Content-Type": "application/json" },
14557
+ body: JSON.stringify(request)
14558
+ });
14559
+ if (!response.ok) {
14560
+ throw new ApiError(
14561
+ `Failed to check for updates: ${response.statusText} - ${await response.text()}`,
14562
+ response
14563
+ );
14564
+ }
14565
+ const responseData = await response.json();
14566
+ return CHECK_FOR_UPDATES_RESPONSE.parse(responseData);
14567
+ };
14568
+ return {
14569
+ checkForUpdates
14570
+ };
14571
+ };
14572
+
14573
+ // src/updates.tsx
14574
+ var getAppPlatform = () => {
14575
+ switch (process.platform) {
14576
+ case "win32":
14577
+ return "windows";
14578
+ case "darwin":
14579
+ return "macos";
14580
+ case "linux":
14581
+ return "linux";
14582
+ default:
14583
+ throw new Error(`Unsupported platform: ${process.platform}`);
14584
+ }
14585
+ };
14586
+ var getAppArchitecture = () => {
14587
+ switch (process.arch) {
14588
+ case "x64":
14589
+ return "x64";
14590
+ case "arm64":
14591
+ return "arm64";
14592
+ default:
14593
+ throw new Error(`Unsupported architecture: ${process.arch}`);
14594
+ }
14595
+ };
14596
+ var UpdateChecker = ({
14597
+ apiBaseUrl,
14598
+ version: version2,
14599
+ edition,
14600
+ setUpdateState
14601
+ }) => {
14602
+ const a = (0, import_react10.useMemo)(() => api(apiBaseUrl), [apiBaseUrl]);
14603
+ const logger = useLogger();
14604
+ const checkForUpdates = (0, import_react10.useCallback)(() => {
14605
+ const lastCheckedMillis = Date.now();
14606
+ setUpdateState({ type: "loading" });
14607
+ a.checkForUpdates({
14608
+ app: "timecode-toolbox",
14609
+ edition,
14610
+ platform: getAppPlatform(),
14611
+ architecture: getAppArchitecture(),
14612
+ currentVersion: version2
14613
+ }).then((response) => {
14614
+ if (!response.newVersions || response.newVersions.length === 0) {
14615
+ setUpdateState({ type: "up-to-date", lastCheckedMillis });
14616
+ logger.info("No updates available");
14617
+ return;
14618
+ }
14619
+ setUpdateState({
14620
+ type: "updates-available",
14621
+ lastCheckedMillis,
14622
+ response
14623
+ });
14624
+ logger.info(
14625
+ `Update available: ${response.latestVersion} - Download at ${response.downloadUrl}`
14626
+ );
14627
+ }).catch((error) => {
14628
+ const err = new Error("Failed to check for updates");
14629
+ err.cause = error instanceof Error ? error : new Error(String(error));
14630
+ setUpdateState({
14631
+ lastCheckedMillis,
14632
+ type: "error",
14633
+ error: String(err)
14634
+ });
14635
+ logger.error(err);
14636
+ });
14637
+ }, [a, setUpdateState, edition, logger, version2]);
14638
+ (0, import_react10.useEffect)(() => {
14639
+ checkForUpdates();
14640
+ const interval = setInterval(checkForUpdates, 1e3 * 60 * 60);
14641
+ return () => clearInterval(interval);
14642
+ }, [checkForUpdates]);
14643
+ (0, import_react10.useEffect)(() => {
14644
+ return () => {
14645
+ setUpdateState(null);
14646
+ };
14647
+ }, [setUpdateState]);
14648
+ return null;
14649
+ };
14650
+
14651
+ // src/env.ts
14652
+ var getEnv = (logger) => {
14653
+ const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : {
14654
+ from: 4100,
14655
+ to: 4200
14656
+ };
14657
+ let API_BASE_URL;
14658
+ try {
14659
+ API_BASE_URL = process.env.API_BASE_URL ? new URL(process.env.API_BASE_URL) : new URL("https://arcanewizards.com");
14660
+ } catch (error) {
14661
+ const err = new Error(`Invalid API_BASE_URL: ${process.env.API_BASE_URL}`);
14662
+ err.cause = error instanceof Error ? error : new Error(String(error));
14663
+ logger.error(err);
14664
+ throw err;
14665
+ }
14666
+ return {
14667
+ PORT,
14668
+ API_BASE_URL
14669
+ };
14670
+ };
14671
+
14450
14672
  // src/app.tsx
14451
14673
  var import_jsx_runtime9 = require("react/jsx-runtime");
14452
14674
  var App = ({
14453
14675
  title,
14454
14676
  version: version2,
14677
+ edition,
14455
14678
  toolkit,
14456
14679
  dataDirectory,
14457
14680
  logger,
@@ -14459,8 +14682,9 @@ var App = ({
14459
14682
  setWindowUrl,
14460
14683
  shutdownContext
14461
14684
  }) => {
14685
+ const env = (0, import_react11.useMemo)(() => getEnv(logger), [logger]);
14462
14686
  const { data, error, updateData, resetData } = (0, import_data7.useDataFileContext)(ToolboxConfigData);
14463
- (0, import_react9.useEffect)(() => {
14687
+ (0, import_react11.useEffect)(() => {
14464
14688
  if (error) {
14465
14689
  logger.warn("Resetting config to application default");
14466
14690
  resetData();
@@ -14469,13 +14693,20 @@ var App = ({
14469
14693
  const onUpdateConfig = (diff) => {
14470
14694
  updateData((prev) => patchJson(prev, diff) ?? DEFAULT_CONFIG);
14471
14695
  };
14472
- const [state, setState] = (0, import_react9.useState)({
14696
+ const [state, setState] = (0, import_react11.useState)({
14473
14697
  inputs: {},
14474
14698
  outputs: {},
14475
- generators: {}
14699
+ generators: {},
14700
+ updates: null
14476
14701
  });
14477
- const [handlers, setHandlers] = (0, import_react9.useState)({ children: {} });
14478
- const availableHandlers = (0, import_react9.useMemo)(
14702
+ const setUpdateState = (0, import_react11.useCallback)((updates) => {
14703
+ setState((prev) => ({
14704
+ ...prev,
14705
+ updates
14706
+ }));
14707
+ }, []);
14708
+ const [handlers, setHandlers] = (0, import_react11.useState)({ children: {} });
14709
+ const availableHandlers = (0, import_react11.useMemo)(
14479
14710
  () => mapTree(
14480
14711
  handlers,
14481
14712
  (node) => Object.fromEntries(
@@ -14484,7 +14715,7 @@ var App = ({
14484
14715
  ),
14485
14716
  [handlers]
14486
14717
  );
14487
- const callHandler = (0, import_react9.useCallback)(
14718
+ const callHandler = (0, import_react11.useCallback)(
14488
14719
  async (call) => {
14489
14720
  const handlerFunc = getTreeValue(handlers, call.path)?.[call.handler];
14490
14721
  if (handlerFunc) {
@@ -14496,6 +14727,54 @@ var App = ({
14496
14727
  },
14497
14728
  [handlers]
14498
14729
  );
14730
+ const license = useLicense();
14731
+ const appListenerConfig = (0, import_react11.useMemo)(
14732
+ () => ({
14733
+ default: {
14734
+ port: env.PORT
14735
+ }
14736
+ }),
14737
+ [env.PORT]
14738
+ );
14739
+ if (!license) {
14740
+ return;
14741
+ }
14742
+ const children = data.agreedToLicense === license.hash ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
14743
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14744
+ C.ToolboxRoot,
14745
+ {
14746
+ config: data,
14747
+ state,
14748
+ handlers: availableHandlers,
14749
+ onUpdateConfig,
14750
+ onCallHandler: callHandler,
14751
+ license: license.text
14752
+ }
14753
+ ),
14754
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(InputConnections, { state, setState }),
14755
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14756
+ Generators,
14757
+ {
14758
+ state,
14759
+ setState,
14760
+ setHandlers
14761
+ }
14762
+ ),
14763
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(OutputConnections, { state, setState })
14764
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14765
+ C.LicenseGate,
14766
+ {
14767
+ license: license.text,
14768
+ hash: license.hash,
14769
+ onAcceptLicense: (agreedToLicense) => {
14770
+ logger.info(`License accepted: ${agreedToLicense}`);
14771
+ updateData((current) => ({
14772
+ ...current,
14773
+ agreedToLicense
14774
+ }));
14775
+ }
14776
+ }
14777
+ );
14499
14778
  return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
14500
14779
  AppShell,
14501
14780
  {
@@ -14506,32 +14785,22 @@ var App = ({
14506
14785
  logEventEmitter,
14507
14786
  shutdownContext,
14508
14787
  children: [
14509
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14510
- C.ToolboxRoot,
14788
+ children,
14789
+ data.checkForUpdates && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14790
+ UpdateChecker,
14511
14791
  {
14512
- config: data,
14513
- state,
14514
- handlers: availableHandlers,
14515
- onUpdateConfig,
14516
- onCallHandler: callHandler
14792
+ version: version2,
14793
+ edition,
14794
+ apiBaseUrl: env.API_BASE_URL,
14795
+ setUpdateState
14517
14796
  }
14518
14797
  ),
14519
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(InputConnections, { state, setState }),
14520
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Generators, { state, setState, setHandlers }),
14521
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(OutputConnections, { state, setState }),
14522
14798
  /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
14523
14799
  AppListenerManager,
14524
14800
  {
14525
14801
  toolkit,
14526
14802
  setWindowUrl,
14527
- listenerConfig: {
14528
- default: {
14529
- port: {
14530
- from: 4100,
14531
- to: 4200
14532
- }
14533
- }
14534
- }
14803
+ listenerConfig: appListenerConfig
14535
14804
  }
14536
14805
  )
14537
14806
  ]
@@ -14549,7 +14818,7 @@ var createApp = (props) => {
14549
14818
  };
14550
14819
 
14551
14820
  // package.json
14552
- var version = "0.1.0";
14821
+ var version = "0.1.1";
14553
14822
 
14554
14823
  // src/urls.ts
14555
14824
  var urls_exports = {};
@@ -14594,11 +14863,13 @@ var runTimecodeToolboxServer = ({
14594
14863
  logger,
14595
14864
  appProps,
14596
14865
  toolkitOptions,
14597
- title
14866
+ title,
14867
+ edition
14598
14868
  }) => runSigilApp({
14599
14869
  logger,
14600
14870
  title,
14601
14871
  version,
14872
+ edition,
14602
14873
  appProps,
14603
14874
  toolkitOptions,
14604
14875
  createApp,