@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/frontend.js CHANGED
@@ -8020,7 +8020,7 @@
8020
8020
  function mountLayoutEffect(create, deps) {
8021
8021
  var fiberFlags = 4194308;
8022
8022
  (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode && (fiberFlags |= 134217728);
8023
- return mountEffectImpl(fiberFlags, Layout, create, deps);
8023
+ return mountEffectImpl(fiberFlags, Layout2, create, deps);
8024
8024
  }
8025
8025
  function imperativeHandleEffect(create, ref) {
8026
8026
  if ("function" === typeof ref) {
@@ -8048,7 +8048,7 @@
8048
8048
  (currentlyRenderingFiber.mode & StrictEffectsMode) !== NoMode && (fiberFlags |= 134217728);
8049
8049
  mountEffectImpl(
8050
8050
  fiberFlags,
8051
- Layout,
8051
+ Layout2,
8052
8052
  imperativeHandleEffect.bind(null, create, ref),
8053
8053
  deps
8054
8054
  );
@@ -8061,7 +8061,7 @@
8061
8061
  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;
8062
8062
  updateEffectImpl(
8063
8063
  4,
8064
- Layout,
8064
+ Layout2,
8065
8065
  imperativeHandleEffect.bind(null, create, ref),
8066
8066
  deps
8067
8067
  );
@@ -10975,7 +10975,7 @@
10975
10975
  updateQueue
10976
10976
  ), (flags & Insertion) !== NoFlags && (isRunningInsertionEffect = false), void 0 !== lastEffect && "function" !== typeof lastEffect)) {
10977
10977
  var hookName = void 0;
10978
- hookName = 0 !== (updateQueue.tag & Layout) ? "useLayoutEffect" : 0 !== (updateQueue.tag & Insertion) ? "useInsertionEffect" : "useEffect";
10978
+ hookName = 0 !== (updateQueue.tag & Layout2) ? "useLayoutEffect" : 0 !== (updateQueue.tag & Insertion) ? "useInsertionEffect" : "useEffect";
10979
10979
  var addendum = void 0;
10980
10980
  addendum = null === lastEffect ? " You returned null. If your effect does not require clean up, return undefined (or nothing)." : "function" === typeof lastEffect.then ? "\n\nIt looks like you wrote " + hookName + "(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\n\n" + hookName + "(() => {\n async function fetchData() {\n // You can await here\n const response = await MyAPI.getData(someId);\n // ...\n }\n fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching" : " You returned: " + lastEffect;
10981
10981
  runWithFiberInDEV(
@@ -11462,7 +11462,7 @@
11462
11462
  case 11:
11463
11463
  case 15:
11464
11464
  recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
11465
- flags & 4 && commitHookLayoutEffects(finishedWork, Layout | HasEffect);
11465
+ flags & 4 && commitHookLayoutEffects(finishedWork, Layout2 | HasEffect);
11466
11466
  break;
11467
11467
  case 1:
11468
11468
  recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);
@@ -11793,7 +11793,7 @@
11793
11793
  offscreenSubtreeWasHidden || commitHookLayoutUnmountEffects(
11794
11794
  deletedFiber,
11795
11795
  nearestMountedAncestor,
11796
- Layout
11796
+ Layout2
11797
11797
  );
11798
11798
  recursivelyTraverseDeletionEffects(
11799
11799
  finishedRoot,
@@ -11972,7 +11972,7 @@
11972
11972
  ), commitHookEffectListMount(Insertion | HasEffect, finishedWork), commitHookLayoutUnmountEffects(
11973
11973
  finishedWork,
11974
11974
  finishedWork.return,
11975
- Layout | HasEffect
11975
+ Layout2 | HasEffect
11976
11976
  ));
11977
11977
  break;
11978
11978
  case 1:
@@ -12362,7 +12362,7 @@
12362
12362
  commitHookLayoutUnmountEffects(
12363
12363
  finishedWork,
12364
12364
  finishedWork.return,
12365
- Layout
12365
+ Layout2
12366
12366
  );
12367
12367
  recursivelyTraverseDisappearLayoutEffects(finishedWork);
12368
12368
  break;
@@ -12423,7 +12423,7 @@
12423
12423
  finishedWork,
12424
12424
  includeWorkInProgressEffects
12425
12425
  );
12426
- commitHookLayoutEffects(finishedWork, Layout);
12426
+ commitHookLayoutEffects(finishedWork, Layout2);
12427
12427
  break;
12428
12428
  case 1:
12429
12429
  recursivelyTraverseReappearLayoutEffects(
@@ -20188,7 +20188,7 @@
20188
20188
  var reconcileChildFibers = createChildReconciler(true), mountChildFibers = createChildReconciler(false), UpdateState = 0, ReplaceState = 1, ForceUpdate = 2, CaptureUpdate = 3, hasForceUpdate = false;
20189
20189
  var didWarnUpdateInsideUpdate = false;
20190
20190
  var currentlyProcessingQueue = null;
20191
- var didReadFromEntangledAsyncAction = false, currentTreeHiddenStackCursor = createCursor(null), prevEntangledRenderLanesCursor = createCursor(0), suspenseHandlerStackCursor = createCursor(null), shellBoundary = null, SubtreeSuspenseContextMask = 1, ForceSuspenseFallback = 2, suspenseStackCursor = createCursor(0), NoFlags = 0, HasEffect = 1, Insertion = 2, Layout = 4, Passive = 8, didWarnUncachedGetSnapshot;
20191
+ var didReadFromEntangledAsyncAction = false, currentTreeHiddenStackCursor = createCursor(null), prevEntangledRenderLanesCursor = createCursor(0), suspenseHandlerStackCursor = createCursor(null), shellBoundary = null, SubtreeSuspenseContextMask = 1, ForceSuspenseFallback = 2, suspenseStackCursor = createCursor(0), NoFlags = 0, HasEffect = 1, Insertion = 2, Layout2 = 4, Passive = 8, didWarnUncachedGetSnapshot;
20192
20192
  var didWarnAboutMismatchedHooksForComponent = /* @__PURE__ */ new Set();
20193
20193
  var didWarnAboutUseWrappedInTryCatch = /* @__PURE__ */ new Set();
20194
20194
  var didWarnAboutAsyncClientComponent = /* @__PURE__ */ new Set();
@@ -20519,7 +20519,7 @@
20519
20519
  useLayoutEffect: function(create, deps) {
20520
20520
  currentHookNameInDev = "useLayoutEffect";
20521
20521
  updateHookTypesDev();
20522
- return updateEffectImpl(4, Layout, create, deps);
20522
+ return updateEffectImpl(4, Layout2, create, deps);
20523
20523
  },
20524
20524
  useMemo: function(create, deps) {
20525
20525
  currentHookNameInDev = "useMemo";
@@ -20649,7 +20649,7 @@
20649
20649
  useLayoutEffect: function(create, deps) {
20650
20650
  currentHookNameInDev = "useLayoutEffect";
20651
20651
  updateHookTypesDev();
20652
- return updateEffectImpl(4, Layout, create, deps);
20652
+ return updateEffectImpl(4, Layout2, create, deps);
20653
20653
  },
20654
20654
  useMemo: function(create, deps) {
20655
20655
  currentHookNameInDev = "useMemo";
@@ -20944,7 +20944,7 @@
20944
20944
  currentHookNameInDev = "useLayoutEffect";
20945
20945
  warnInvalidHookAccess();
20946
20946
  updateHookTypesDev();
20947
- return updateEffectImpl(4, Layout, create, deps);
20947
+ return updateEffectImpl(4, Layout2, create, deps);
20948
20948
  },
20949
20949
  useMemo: function(create, deps) {
20950
20950
  currentHookNameInDev = "useMemo";
@@ -21099,7 +21099,7 @@
21099
21099
  currentHookNameInDev = "useLayoutEffect";
21100
21100
  warnInvalidHookAccess();
21101
21101
  updateHookTypesDev();
21102
- return updateEffectImpl(4, Layout, create, deps);
21102
+ return updateEffectImpl(4, Layout2, create, deps);
21103
21103
  },
21104
21104
  useMemo: function(create, deps) {
21105
21105
  currentHookNameInDev = "useMemo";
@@ -25238,7 +25238,7 @@
25238
25238
  return t4;
25239
25239
  };
25240
25240
 
25241
- // ../../packages/sigil/dist/chunk-XAK7WC3D.js
25241
+ // ../../packages/sigil/dist/chunk-HF7IIHPE.js
25242
25242
  var import_compiler_runtime5 = __toESM(require_compiler_runtime(), 1);
25243
25243
 
25244
25244
  // ../../packages/sigil/dist/chunk-BIY5HAXP.js
@@ -35415,7 +35415,7 @@
35415
35415
  return condition ? truthyClassName : falseyClassName;
35416
35416
  }
35417
35417
 
35418
- // ../../packages/sigil/dist/chunk-XAK7WC3D.js
35418
+ // ../../packages/sigil/dist/chunk-HF7IIHPE.js
35419
35419
  var import_react12 = __toESM(require_react(), 1);
35420
35420
 
35421
35421
  // ../../node_modules/.pnpm/@arcanejs+toolkit-frontend@0.11.0/node_modules/@arcanejs/toolkit-frontend/dist/chunk-DK4BAXVE.mjs
@@ -35454,7 +35454,7 @@
35454
35454
  `;
35455
35455
  var TRANSPARENCY_SVG_URI = `data:image/svg+xml,${encodeURIComponent(TRANSPARENCY_SVG)}`;
35456
35456
 
35457
- // ../../packages/sigil/dist/chunk-XAK7WC3D.js
35457
+ // ../../packages/sigil/dist/chunk-HF7IIHPE.js
35458
35458
  var import_react13 = __toESM(require_react(), 1);
35459
35459
  var import_jsx_runtime18 = __toESM(require_jsx_runtime(), 1);
35460
35460
  var import_react14 = __toESM(require_react(), 1);
@@ -35514,8 +35514,9 @@
35514
35514
  active,
35515
35515
  touching,
35516
35516
  position,
35517
- className
35518
- }) => cn(`sigil-control-button`, cnd(variant === "border", `sigil-control-button-variant-border`), cnd(variant === "large", `sigil-control-button-variant-large`), cnd(variant === "properties", `sigil-control-button-variant-properties`), cnd(variant === "table-row", `sigil-control-button-variant-table-row`), cnd(variant === "toolbar", `sigil-control-button-variant-toolbar`), cnd(variant === "titlebar", `sigil-control-button-variant-titlebar`), cnd(touching, `sigil-control-button-touching`), cnd(active, `sigil-control-button-active`), cnd(touching && active, `sigil-control-button-active-touching`), clsControlPosition(position), className);
35517
+ className,
35518
+ primary
35519
+ }) => cn(`sigil-control-button`, cnd(variant === "border", `sigil-control-button-variant-border`), cnd(variant === "large", `sigil-control-button-variant-large`), cnd(variant === "properties", `sigil-control-button-variant-properties`), cnd(variant === "table-row", `sigil-control-button-variant-table-row`), cnd(variant === "toolbar", `sigil-control-button-variant-toolbar`), cnd(variant === "titlebar", `sigil-control-button-variant-titlebar`), cnd(touching, `sigil-control-button-touching`), cnd(active, `sigil-control-button-active`), cnd(touching && active, `sigil-control-button-active-touching`), cnd(primary, `sigil-control-button-primary`), clsControlPosition(position), className);
35519
35520
  var ControlButtonFrame = /* @__PURE__ */ (0, import_react13.forwardRef)(({
35520
35521
  children,
35521
35522
  className,
@@ -35528,6 +35529,7 @@
35528
35529
  title,
35529
35530
  tooltipSide,
35530
35531
  position,
35532
+ primary,
35531
35533
  ...props
35532
35534
  }, ref) => {
35533
35535
  const btn = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("button", {
@@ -35540,6 +35542,7 @@
35540
35542
  active,
35541
35543
  touching,
35542
35544
  position,
35545
+ primary,
35543
35546
  className
35544
35547
  }),
35545
35548
  children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", {
@@ -37770,7 +37773,12 @@ Data Directory: ${system.dataDirectory}`
37770
37773
  var TOOLBOX_CONFIG = zod_default.object({
37771
37774
  inputs: zod_default.record(zod_default.string(), INPUT_CONFIG),
37772
37775
  generators: zod_default.record(zod_default.string(), GENERATOR_CONFIG),
37773
- outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG)
37776
+ outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG),
37777
+ /**
37778
+ * Hash of the license the user has agreed to.
37779
+ */
37780
+ agreedToLicense: zod_default.string().optional(),
37781
+ checkForUpdates: zod_default.boolean().optional().default(true)
37774
37782
  });
37775
37783
  var isTimecodeInstance = (instance) => instance !== null && "state" in instance && "metadata" in instance;
37776
37784
  var isTimecodeGroup = (instance) => instance !== null && "timecodes" in instance;
@@ -37778,178 +37786,8 @@ Data Directory: ${system.dataDirectory}`
37778
37786
  var isTimecodeToolboxComponent = (component) => component.namespace === NAMESPACE;
37779
37787
 
37780
37788
  // src/components/frontend/toolbox/root.tsx
37781
- var import_compiler_runtime15 = __toESM(require_compiler_runtime());
37782
- var import_react39 = __toESM(require_react());
37783
-
37784
- // src/components/frontend/toolbox/content.tsx
37785
- var import_compiler_runtime7 = __toESM(require_compiler_runtime());
37786
-
37787
- // src/components/frontend/toolbox/core/size-aware-div.tsx
37788
- var import_compiler_runtime6 = __toESM(require_compiler_runtime());
37789
- var import_react31 = __toESM(require_react());
37790
- var import_jsx_runtime41 = __toESM(require_jsx_runtime());
37791
- var SizeAwareDiv = (t0) => {
37792
- const $ = (0, import_compiler_runtime6.c)(16);
37793
- let children;
37794
- let rest;
37795
- let style;
37796
- if ($[0] !== t0) {
37797
- ({
37798
- children,
37799
- style,
37800
- ...rest
37801
- } = t0);
37802
- $[0] = t0;
37803
- $[1] = children;
37804
- $[2] = rest;
37805
- $[3] = style;
37806
- } else {
37807
- children = $[1];
37808
- rest = $[2];
37809
- style = $[3];
37810
- }
37811
- const [div, setDiv] = (0, import_react31.useState)(null);
37812
- const [rect, setRect] = (0, import_react31.useState)(null);
37813
- let t1;
37814
- let t2;
37815
- if ($[4] !== div) {
37816
- t1 = () => {
37817
- if (!div) {
37818
- return;
37819
- }
37820
- const resizeObserver = new ResizeObserver((entries) => {
37821
- for (const entry of entries) {
37822
- setRect(entry.contentRect);
37823
- }
37824
- });
37825
- resizeObserver.observe(div);
37826
- return () => {
37827
- resizeObserver.disconnect();
37828
- };
37829
- };
37830
- t2 = [div];
37831
- $[4] = div;
37832
- $[5] = t1;
37833
- $[6] = t2;
37834
- } else {
37835
- t1 = $[5];
37836
- t2 = $[6];
37837
- }
37838
- (0, import_react31.useEffect)(t1, t2);
37839
- let t3;
37840
- if ($[7] !== rect) {
37841
- t3 = rect && cssVariables({
37842
- "--size-aware-div-width": rect.width + "px",
37843
- "--size-aware-div-height": rect.height + "px"
37844
- });
37845
- $[7] = rect;
37846
- $[8] = t3;
37847
- } else {
37848
- t3 = $[8];
37849
- }
37850
- let t4;
37851
- if ($[9] !== style || $[10] !== t3) {
37852
- t4 = {
37853
- ...style,
37854
- ...t3
37855
- };
37856
- $[9] = style;
37857
- $[10] = t3;
37858
- $[11] = t4;
37859
- } else {
37860
- t4 = $[11];
37861
- }
37862
- let t5;
37863
- if ($[12] !== children || $[13] !== rest || $[14] !== t4) {
37864
- t5 = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", {
37865
- ref: setDiv,
37866
- ...rest,
37867
- style: t4,
37868
- children
37869
- });
37870
- $[12] = children;
37871
- $[13] = rest;
37872
- $[14] = t4;
37873
- $[15] = t5;
37874
- } else {
37875
- t5 = $[15];
37876
- }
37877
- return t5;
37878
- };
37879
-
37880
- // src/components/frontend/toolbox/content.tsx
37881
- var import_jsx_runtime42 = __toESM(require_jsx_runtime());
37882
- var ExternalLink = (t0) => {
37883
- const $ = (0, import_compiler_runtime7.c)(7);
37884
- const {
37885
- href,
37886
- children
37887
- } = t0;
37888
- const {
37889
- openExternalLink
37890
- } = useBrowserContext();
37891
- let t1;
37892
- if ($[0] !== href || $[1] !== openExternalLink) {
37893
- t1 = (e) => {
37894
- e.preventDefault();
37895
- openExternalLink(href);
37896
- };
37897
- $[0] = href;
37898
- $[1] = openExternalLink;
37899
- $[2] = t1;
37900
- } else {
37901
- t1 = $[2];
37902
- }
37903
- let t2;
37904
- if ($[3] !== children || $[4] !== href || $[5] !== t1) {
37905
- t2 = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("a", {
37906
- href,
37907
- target: "_blank",
37908
- rel: "noopener noreferrer",
37909
- onClick: t1,
37910
- className: "\n text-sigil-usage-hint-foreground no-underline\n hover:underline\n ",
37911
- children
37912
- });
37913
- $[3] = children;
37914
- $[4] = href;
37915
- $[5] = t1;
37916
- $[6] = t2;
37917
- } else {
37918
- t2 = $[6];
37919
- }
37920
- return t2;
37921
- };
37922
- var NoToolboxChildren = (t0) => {
37923
- const $ = (0, import_compiler_runtime7.c)(3);
37924
- const {
37925
- text
37926
- } = t0;
37927
- let t1;
37928
- if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
37929
- t1 = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon2, {
37930
- icon: "handyman",
37931
- className: "text-block-icon"
37932
- });
37933
- $[0] = t1;
37934
- } else {
37935
- t1 = $[0];
37936
- }
37937
- let t2;
37938
- if ($[1] !== text) {
37939
- t2 = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(SizeAwareDiv, {
37940
- className: "\n flex grow flex-col items-center justify-center gap-1 bg-sigil-bg-light\n p-1 text-sigil-foreground-muted\n ",
37941
- children: [t1, /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", {
37942
- className: "text-center",
37943
- children: text
37944
- })]
37945
- });
37946
- $[1] = text;
37947
- $[2] = t2;
37948
- } else {
37949
- t2 = $[2];
37950
- }
37951
- return t2;
37952
- };
37789
+ var import_compiler_runtime20 = __toESM(require_compiler_runtime());
37790
+ var import_react43 = __toESM(require_react());
37953
37791
 
37954
37792
  // ../../packages/artnet/dist/chunk-J2HDMITA.js
37955
37793
  var ARTNET_PORT = 6454;
@@ -37966,6 +37804,7 @@ Data Directory: ${system.dataDirectory}`
37966
37804
  unit: "millisecond",
37967
37805
  maximumFractionDigits: 0
37968
37806
  });
37807
+ var SOURCE_CODE_URL = "https://github.com/ArcaneWizards/open-source/tree/main/apps/timecode-toolbox";
37969
37808
  var STRINGS = {
37970
37809
  title: "Timecode Toolbox",
37971
37810
  debugger: "Debug Tools & Log",
@@ -37974,6 +37813,10 @@ Data Directory: ${system.dataDirectory}`
37974
37813
  openInNewWindow: "Open in new window",
37975
37814
  toggle: (text) => `Toggle ${text}`,
37976
37815
  close: (text) => `Close ${text}`,
37816
+ license: "License & About",
37817
+ acceptLicense: "Accept License",
37818
+ licensePrompt: "Please review and accept the license to use Timecode Toolbox",
37819
+ sourceCode: "Source Code",
37977
37820
  protocols: {
37978
37821
  artnet: {
37979
37822
  short: "ArtNet",
@@ -38033,6 +37876,17 @@ Data Directory: ${system.dataDirectory}`
38033
37876
  },
38034
37877
  errors: {
38035
37878
  unknownTimecodeID: "Unknown timecode ID, please close the window"
37879
+ },
37880
+ updates: {
37881
+ updateAvailable: (current, latest) => `Version ${latest} is available! You are currently on version ${current}.`,
37882
+ download: "Download",
37883
+ settingsLabel: "Automatically check for updates",
37884
+ settingsDetails: `When enabled, the app will automatically check for updates periodically and display a message when a new version is available.`,
37885
+ lastChecked: (time) => `Last checked: ${time}`
37886
+ },
37887
+ general: {
37888
+ enabled: "Enabled",
37889
+ disabled: "Disabled"
38036
37890
  }
38037
37891
  };
38038
37892
 
@@ -38041,10 +37895,10 @@ Data Directory: ${system.dataDirectory}`
38041
37895
  var import_react34 = __toESM(require_react());
38042
37896
 
38043
37897
  // src/components/frontend/toolbox/util.tsx
38044
- var import_compiler_runtime8 = __toESM(require_compiler_runtime());
38045
- var import_jsx_runtime43 = __toESM(require_jsx_runtime());
37898
+ var import_compiler_runtime6 = __toESM(require_compiler_runtime());
37899
+ var import_jsx_runtime41 = __toESM(require_jsx_runtime());
38046
37900
  var PrimaryToolboxSection = (t0) => {
38047
- const $ = (0, import_compiler_runtime8.c)(12);
37901
+ const $ = (0, import_compiler_runtime6.c)(12);
38048
37902
  const {
38049
37903
  title,
38050
37904
  children,
@@ -38052,7 +37906,7 @@ Data Directory: ${system.dataDirectory}`
38052
37906
  } = t0;
38053
37907
  let t1;
38054
37908
  if ($[0] !== title) {
38055
- t1 = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
37909
+ t1 = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", {
38056
37910
  className: "\n flex items-center justify-center bg-sigil-bg-light p-1\n writing-mode-vertical-rl\n ",
38057
37911
  children: title
38058
37912
  });
@@ -38063,7 +37917,7 @@ Data Directory: ${system.dataDirectory}`
38063
37917
  }
38064
37918
  let t2;
38065
37919
  if ($[2] !== children) {
38066
- t2 = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
37920
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", {
38067
37921
  className: "flex grow flex-col gap-px",
38068
37922
  children
38069
37923
  });
@@ -38074,7 +37928,7 @@ Data Directory: ${system.dataDirectory}`
38074
37928
  }
38075
37929
  let t3;
38076
37930
  if ($[4] !== buttons) {
38077
- t3 = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
37931
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", {
38078
37932
  className: "flex w-full flex-wrap gap-1 bg-sigil-bg-light p-1",
38079
37933
  children: buttons
38080
37934
  });
@@ -38085,7 +37939,7 @@ Data Directory: ${system.dataDirectory}`
38085
37939
  }
38086
37940
  let t4;
38087
37941
  if ($[6] !== t2 || $[7] !== t3) {
38088
- t4 = /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
37942
+ t4 = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", {
38089
37943
  className: "flex grow flex-col gap-px",
38090
37944
  children: [t2, t3]
38091
37945
  });
@@ -38097,7 +37951,7 @@ Data Directory: ${system.dataDirectory}`
38097
37951
  }
38098
37952
  let t5;
38099
37953
  if ($[9] !== t1 || $[10] !== t4) {
38100
- t5 = /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
37954
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", {
38101
37955
  className: "flex grow gap-px",
38102
37956
  children: [t1, t4]
38103
37957
  });
@@ -38125,38 +37979,131 @@ Data Directory: ${system.dataDirectory}`
38125
37979
  }
38126
37980
 
38127
37981
  // src/components/frontend/toolbox/context.tsx
38128
- var import_react32 = __toESM(require_react());
38129
- var ConfigContext = /* @__PURE__ */ (0, import_react32.createContext)(new Proxy({}, {
37982
+ var import_react31 = __toESM(require_react());
37983
+ var ConfigContext = /* @__PURE__ */ (0, import_react31.createContext)(new Proxy({}, {
38130
37984
  get() {
38131
37985
  throw new Error("ConfigContext not initialized");
38132
37986
  }
38133
37987
  }));
38134
- var ApplicationStateContext = /* @__PURE__ */ (0, import_react32.createContext)(new Proxy({}, {
37988
+ var ApplicationStateContext = /* @__PURE__ */ (0, import_react31.createContext)(new Proxy({}, {
38135
37989
  get() {
38136
37990
  throw new Error("ApplicationStateContext not initialized");
38137
37991
  }
38138
37992
  }));
38139
37993
  var useApplicationState = () => {
38140
- return (0, import_react32.useContext)(ApplicationStateContext);
37994
+ return (0, import_react31.useContext)(ApplicationStateContext);
38141
37995
  };
38142
- var ApplicationHandlersContext = /* @__PURE__ */ (0, import_react32.createContext)(new Proxy({}, {
37996
+ var ApplicationHandlersContext = /* @__PURE__ */ (0, import_react31.createContext)(new Proxy({}, {
38143
37997
  get() {
38144
37998
  throw new Error("ApplicationHandlersContext not initialized");
38145
37999
  }
38146
38000
  }));
38147
38001
  var useApplicationHandlers = () => {
38148
- return (0, import_react32.useContext)(ApplicationHandlersContext);
38002
+ return (0, import_react31.useContext)(ApplicationHandlersContext);
38149
38003
  };
38150
- var NetworkContext = /* @__PURE__ */ (0, import_react32.createContext)(new Proxy({}, {
38004
+ var NetworkContext = /* @__PURE__ */ (0, import_react31.createContext)(new Proxy({}, {
38151
38005
  get() {
38152
38006
  throw new Error("NetworkContext not initialized");
38153
38007
  }
38154
38008
  }));
38155
38009
 
38156
38010
  // src/components/frontend/toolbox/core/timecode-display.tsx
38157
- var import_compiler_runtime9 = __toESM(require_compiler_runtime());
38011
+ var import_compiler_runtime8 = __toESM(require_compiler_runtime());
38158
38012
  var import_react33 = __toESM(require_react());
38159
38013
 
38014
+ // src/components/frontend/toolbox/core/size-aware-div.tsx
38015
+ var import_compiler_runtime7 = __toESM(require_compiler_runtime());
38016
+ var import_react32 = __toESM(require_react());
38017
+ var import_jsx_runtime42 = __toESM(require_jsx_runtime());
38018
+ var SizeAwareDiv = (t0) => {
38019
+ const $ = (0, import_compiler_runtime7.c)(16);
38020
+ let children;
38021
+ let rest;
38022
+ let style;
38023
+ if ($[0] !== t0) {
38024
+ ({
38025
+ children,
38026
+ style,
38027
+ ...rest
38028
+ } = t0);
38029
+ $[0] = t0;
38030
+ $[1] = children;
38031
+ $[2] = rest;
38032
+ $[3] = style;
38033
+ } else {
38034
+ children = $[1];
38035
+ rest = $[2];
38036
+ style = $[3];
38037
+ }
38038
+ const [div, setDiv] = (0, import_react32.useState)(null);
38039
+ const [rect, setRect] = (0, import_react32.useState)(null);
38040
+ let t1;
38041
+ let t2;
38042
+ if ($[4] !== div) {
38043
+ t1 = () => {
38044
+ if (!div) {
38045
+ return;
38046
+ }
38047
+ const resizeObserver = new ResizeObserver((entries) => {
38048
+ for (const entry of entries) {
38049
+ setRect(entry.contentRect);
38050
+ }
38051
+ });
38052
+ resizeObserver.observe(div);
38053
+ return () => {
38054
+ resizeObserver.disconnect();
38055
+ };
38056
+ };
38057
+ t2 = [div];
38058
+ $[4] = div;
38059
+ $[5] = t1;
38060
+ $[6] = t2;
38061
+ } else {
38062
+ t1 = $[5];
38063
+ t2 = $[6];
38064
+ }
38065
+ (0, import_react32.useEffect)(t1, t2);
38066
+ let t3;
38067
+ if ($[7] !== rect) {
38068
+ t3 = rect && cssVariables({
38069
+ "--size-aware-div-width": rect.width + "px",
38070
+ "--size-aware-div-height": rect.height + "px"
38071
+ });
38072
+ $[7] = rect;
38073
+ $[8] = t3;
38074
+ } else {
38075
+ t3 = $[8];
38076
+ }
38077
+ let t4;
38078
+ if ($[9] !== style || $[10] !== t3) {
38079
+ t4 = {
38080
+ ...style,
38081
+ ...t3
38082
+ };
38083
+ $[9] = style;
38084
+ $[10] = t3;
38085
+ $[11] = t4;
38086
+ } else {
38087
+ t4 = $[11];
38088
+ }
38089
+ let t5;
38090
+ if ($[12] !== children || $[13] !== rest || $[14] !== t4) {
38091
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", {
38092
+ ref: setDiv,
38093
+ ...rest,
38094
+ style: t4,
38095
+ children
38096
+ });
38097
+ $[12] = children;
38098
+ $[13] = rest;
38099
+ $[14] = t4;
38100
+ $[15] = t5;
38101
+ } else {
38102
+ t5 = $[15];
38103
+ }
38104
+ return t5;
38105
+ };
38106
+
38160
38107
  // src/tree.ts
38161
38108
  var isTreeNode = (node) => "children" in node && typeof node.children === "object" && node.children !== null;
38162
38109
  var getTreeValue = (current, path) => {
@@ -38264,9 +38211,9 @@ Data Directory: ${system.dataDirectory}`
38264
38211
  };
38265
38212
 
38266
38213
  // src/components/frontend/toolbox/core/timecode-display.tsx
38267
- var import_jsx_runtime44 = __toESM(require_jsx_runtime());
38214
+ var import_jsx_runtime43 = __toESM(require_jsx_runtime());
38268
38215
  var ActiveTimecodeText = (t0) => {
38269
- const $ = (0, import_compiler_runtime9.c)(7);
38216
+ const $ = (0, import_compiler_runtime8.c)(7);
38270
38217
  const {
38271
38218
  effectiveStartTimeMillis,
38272
38219
  speed
@@ -38315,7 +38262,7 @@ Data Directory: ${system.dataDirectory}`
38315
38262
  return t3;
38316
38263
  };
38317
38264
  var Timeline2 = (t0) => {
38318
- const $ = (0, import_compiler_runtime9.c)(11);
38265
+ const $ = (0, import_compiler_runtime8.c)(11);
38319
38266
  const {
38320
38267
  state,
38321
38268
  totalTime
@@ -38371,11 +38318,11 @@ Data Directory: ${system.dataDirectory}`
38371
38318
  const t3 = `${Math.min(millis / totalTime.timeMillis * 100, 100)}%`;
38372
38319
  let t4;
38373
38320
  if ($[9] !== t3) {
38374
- t4 = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38321
+ t4 = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38375
38322
  className: "w-full border border-timecode-usage-foreground p-px",
38376
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38323
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38377
38324
  className: "relative h-1 w-full overflow-hidden",
38378
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38325
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38379
38326
  className: "absolute inset-y-0 left-0 bg-timecode-usage-foreground",
38380
38327
  style: {
38381
38328
  width: t3
@@ -38391,7 +38338,7 @@ Data Directory: ${system.dataDirectory}`
38391
38338
  return t4;
38392
38339
  };
38393
38340
  var TimecodeDisplay = (t0) => {
38394
- const $ = (0, import_compiler_runtime9.c)(71);
38341
+ const $ = (0, import_compiler_runtime8.c)(71);
38395
38342
  const {
38396
38343
  id,
38397
38344
  timecode: t1,
@@ -38538,7 +38485,7 @@ Data Directory: ${system.dataDirectory}`
38538
38485
  }
38539
38486
  let t11;
38540
38487
  if ($[26] !== headerComponents) {
38541
- t11 = headerComponents && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38488
+ t11 = headerComponents && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38542
38489
  className: "flex flex-wrap gap-0.25",
38543
38490
  children: headerComponents
38544
38491
  });
@@ -38570,7 +38517,7 @@ Data Directory: ${system.dataDirectory}`
38570
38517
  }
38571
38518
  let t15;
38572
38519
  if ($[33] !== state.effectiveStartTimeMillis || $[34] !== state.positionMillis || $[35] !== state.speed || $[36] !== state.state) {
38573
- t15 = state.state === "none" ? "--:--:--:---" : state.state === "stopped" ? displayMillis(state.positionMillis) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ActiveTimecodeText, {
38520
+ t15 = state.state === "none" ? "--:--:--:---" : state.state === "stopped" ? displayMillis(state.positionMillis) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ActiveTimecodeText, {
38574
38521
  effectiveStartTimeMillis: state.effectiveStartTimeMillis,
38575
38522
  speed: state.speed
38576
38523
  });
@@ -38584,9 +38531,9 @@ Data Directory: ${system.dataDirectory}`
38584
38531
  }
38585
38532
  let t16;
38586
38533
  if ($[38] !== t15) {
38587
- t16 = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38534
+ t16 = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38588
38535
  className: "absolute inset-0 flex items-center justify-center",
38589
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", {
38536
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", {
38590
38537
  className: t14,
38591
38538
  children: t15
38592
38539
  })
@@ -38598,7 +38545,7 @@ Data Directory: ${system.dataDirectory}`
38598
38545
  }
38599
38546
  let t17;
38600
38547
  if ($[40] !== t13 || $[41] !== t16 || $[42] !== toggle) {
38601
- t17 = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(SizeAwareDiv, {
38548
+ t17 = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SizeAwareDiv, {
38602
38549
  className: t13,
38603
38550
  onClick: toggle,
38604
38551
  children: t16
@@ -38612,37 +38559,37 @@ Data Directory: ${system.dataDirectory}`
38612
38559
  }
38613
38560
  let t18;
38614
38561
  if ($[44] !== back5seconds || $[45] !== beginning || $[46] !== forward5seconds || $[47] !== hooks || $[48] !== pause || $[49] !== play || $[50] !== state.state) {
38615
- t18 = hooks?.pause || hooks?.play ? /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38562
+ t18 = hooks?.pause || hooks?.play ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38616
38563
  className: "flex justify-center gap-px",
38617
- children: [hooks.beginning && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ControlButton, {
38564
+ children: [hooks.beginning && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ControlButton, {
38618
38565
  onClick: beginning,
38619
38566
  variant: "large",
38620
38567
  icon: "skip_previous",
38621
38568
  disabled: !hooks?.beginning,
38622
38569
  title: STRINGS.controls.beginning,
38623
38570
  className: "text-timecode-usage-foreground!"
38624
- }), hooks.seekRelative && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ControlButton, {
38571
+ }), hooks.seekRelative && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ControlButton, {
38625
38572
  onClick: back5seconds,
38626
38573
  variant: "large",
38627
38574
  icon: "replay_5",
38628
38575
  disabled: !hooks?.seekRelative,
38629
38576
  title: STRINGS.controls.back5seconds,
38630
38577
  className: "text-timecode-usage-foreground!"
38631
- }), state.state === "none" || state.state === "stopped" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ControlButton, {
38578
+ }), state.state === "none" || state.state === "stopped" ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ControlButton, {
38632
38579
  onClick: play,
38633
38580
  variant: "large",
38634
38581
  icon: "play_arrow",
38635
38582
  disabled: !hooks?.play,
38636
38583
  title: STRINGS.controls.play,
38637
38584
  className: "text-timecode-usage-foreground!"
38638
- }) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ControlButton, {
38585
+ }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ControlButton, {
38639
38586
  onClick: pause,
38640
38587
  variant: "large",
38641
38588
  icon: "pause",
38642
38589
  disabled: !hooks?.pause,
38643
38590
  title: STRINGS.controls.pause,
38644
38591
  className: "text-timecode-usage-foreground!"
38645
- }), hooks.seekRelative && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ControlButton, {
38592
+ }), hooks.seekRelative && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ControlButton, {
38646
38593
  onClick: forward5seconds,
38647
38594
  variant: "large",
38648
38595
  icon: "forward_5",
@@ -38664,7 +38611,7 @@ Data Directory: ${system.dataDirectory}`
38664
38611
  }
38665
38612
  let t19;
38666
38613
  if ($[52] !== metadata || $[53] !== state) {
38667
- t19 = metadata?.totalTime && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Timeline2, {
38614
+ t19 = metadata?.totalTime && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Timeline2, {
38668
38615
  state,
38669
38616
  totalTime: metadata.totalTime
38670
38617
  });
@@ -38676,7 +38623,7 @@ Data Directory: ${system.dataDirectory}`
38676
38623
  }
38677
38624
  let t20;
38678
38625
  if ($[55] !== t10 || $[56] !== t11 || $[57] !== t17 || $[58] !== t18 || $[59] !== t19) {
38679
- t20 = /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38626
+ t20 = /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38680
38627
  className: t10,
38681
38628
  children: [t11, t17, t18, t19]
38682
38629
  });
@@ -38691,15 +38638,15 @@ Data Directory: ${system.dataDirectory}`
38691
38638
  }
38692
38639
  let t21;
38693
38640
  if ($[61] !== config || $[62] !== state.accuracyMillis || $[63] !== state.smpteMode) {
38694
- t21 = (state.smpteMode !== null || state.accuracyMillis !== null || config.delayMs !== null) && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38641
+ t21 = (state.smpteMode !== null || state.accuracyMillis !== null || config.delayMs !== null) && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38695
38642
  className: "flex gap-px",
38696
- children: [config.delayMs !== null && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38643
+ children: [config.delayMs !== null && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38697
38644
  className: "grow basis-0 truncate bg-sigil-bg-light p-0.5",
38698
38645
  children: STRINGS.delay(config.delayMs)
38699
- }), state.smpteMode !== null && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38646
+ }), state.smpteMode !== null && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38700
38647
  className: "grow basis-0 truncate bg-sigil-bg-light p-0.5",
38701
38648
  children: STRINGS.smtpeModes[state.smpteMode]
38702
- }), state.accuracyMillis !== null && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38649
+ }), state.accuracyMillis !== null && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38703
38650
  className: "grow basis-0 truncate bg-sigil-bg-light p-0.5",
38704
38651
  children: STRINGS.accuracy(state.accuracyMillis)
38705
38652
  })]
@@ -38713,26 +38660,26 @@ Data Directory: ${system.dataDirectory}`
38713
38660
  }
38714
38661
  let t22;
38715
38662
  if ($[65] !== metadata) {
38716
- t22 = metadata?.artist || metadata?.title ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(TooltipWrapper, {
38717
- tooltip: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, {
38718
- children: [metadata.title && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38719
- children: [/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", {
38663
+ t22 = metadata?.artist || metadata?.title ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(TooltipWrapper, {
38664
+ tooltip: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, {
38665
+ children: [metadata.title && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38666
+ children: [/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", {
38720
38667
  className: "font-bold",
38721
38668
  children: "Title:"
38722
38669
  }), " ", metadata.title]
38723
- }), metadata.artist && /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38724
- children: [/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", {
38670
+ }), metadata.artist && /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38671
+ children: [/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", {
38725
38672
  className: "font-bold",
38726
38673
  children: "Artist:"
38727
38674
  }), " ", metadata.artist]
38728
38675
  })]
38729
38676
  }),
38730
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38677
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38731
38678
  className: "flex gap-px",
38732
- children: [metadata.title && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38679
+ children: [metadata.title && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38733
38680
  className: "grow truncate bg-sigil-bg-light p-0.5 font-bold",
38734
38681
  children: metadata.title
38735
- }), metadata.artist && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38682
+ }), metadata.artist && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38736
38683
  className: "grow truncate bg-sigil-bg-light p-0.5",
38737
38684
  children: metadata.artist
38738
38685
  })]
@@ -38745,7 +38692,7 @@ Data Directory: ${system.dataDirectory}`
38745
38692
  }
38746
38693
  let t23;
38747
38694
  if ($[67] !== t20 || $[68] !== t21 || $[69] !== t22) {
38748
- t23 = /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38695
+ t23 = /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38749
38696
  className: "flex grow flex-col gap-px",
38750
38697
  children: [t20, t21, t22]
38751
38698
  });
@@ -38799,7 +38746,7 @@ Data Directory: ${system.dataDirectory}`
38799
38746
  }, [id, openNewWidow]);
38800
38747
  name = timecode?.name ? [...name, timecode.name] : name;
38801
38748
  if (isTimecodeGroup(timecode) && Object.values(timecode.timecodes).length) {
38802
- return Object.entries(timecode.timecodes).map(([key, child]) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(TimecodeTreeDisplay, {
38749
+ return Object.entries(timecode.timecodes).map(([key, child]) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(TimecodeTreeDisplay, {
38803
38750
  config,
38804
38751
  id: extendId(id, key),
38805
38752
  type,
@@ -38811,26 +38758,26 @@ Data Directory: ${system.dataDirectory}`
38811
38758
  assignToOutput
38812
38759
  }, key));
38813
38760
  }
38814
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38761
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38815
38762
  className: "relative flex grow flex-col text-timecode-usage-foreground",
38816
38763
  style: color && cssSigilColorUsageVariables("timecode-usage", sigilColorUsage(color)),
38817
- children: [/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(TimecodeDisplay, {
38764
+ children: [/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(TimecodeDisplay, {
38818
38765
  id,
38819
38766
  timecode: isTimecodeInstance(timecode) ? timecode : EMPTY_TIMECODE,
38820
38767
  config,
38821
- headerComponents: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, {
38822
- children: [/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", {
38768
+ headerComponents: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, {
38769
+ children: [/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", {
38823
38770
  className: "flex grow items-start gap-0.25",
38824
- children: [/* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38771
+ children: [/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38825
38772
  className: " m-0.25 rounded-md border border-sigil-bg-light bg-timecode-usage-foreground px-1 py-0.25 text-sigil-control text-timecode-usage-text ",
38826
38773
  children: type
38827
- }), /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38774
+ }), /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
38828
38775
  className: cn("grow basis-0 truncate p-0.5", cnd(name.length, "font-bold", "italic opacity-50")),
38829
38776
  children: name.length ? name.join(" / ") : namePlaceholder
38830
38777
  })]
38831
- }), /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(ControlButtonGroup, {
38778
+ }), /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(ControlButtonGroup, {
38832
38779
  className: "rounded-md bg-sigil-bg-light",
38833
- children: [/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(ControlButton, {
38780
+ children: [/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(ControlButton, {
38834
38781
  variant: "toolbar",
38835
38782
  icon: "open_in_new",
38836
38783
  title: STRINGS.openInNewWindow,
@@ -38838,10 +38785,10 @@ Data Directory: ${system.dataDirectory}`
38838
38785
  }), buttons]
38839
38786
  })]
38840
38787
  })
38841
- }), assignToOutput && id && !isOutputInstanceId(id) && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(SizeAwareDiv, {
38788
+ }), assignToOutput && id && !isOutputInstanceId(id) && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SizeAwareDiv, {
38842
38789
  className: " absolute inset-0 flex cursor-pointer items-center justify-center bg-timecode-backdrop text-timecode-usage-text hover:bg-timecode-backdrop-hover ",
38843
38790
  onClick: () => assignToOutput(id),
38844
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Icon2, {
38791
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon2, {
38845
38792
  icon: "link",
38846
38793
  className: "text-block-icon"
38847
38794
  })
@@ -38849,7 +38796,7 @@ Data Directory: ${system.dataDirectory}`
38849
38796
  });
38850
38797
  };
38851
38798
  var FullscreenTimecodeDisplay = (t0) => {
38852
- const $ = (0, import_compiler_runtime9.c)(38);
38799
+ const $ = (0, import_compiler_runtime8.c)(38);
38853
38800
  const {
38854
38801
  id
38855
38802
  } = t0;
@@ -39027,12 +38974,12 @@ Data Directory: ${system.dataDirectory}`
39027
38974
  if (!instanceConfig) {
39028
38975
  let t32;
39029
38976
  if ($[33] === Symbol.for("react.memo_cache_sentinel")) {
39030
- t32 = /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(SizeAwareDiv, {
38977
+ t32 = /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(SizeAwareDiv, {
39031
38978
  className: "\n flex grow flex-col items-center justify-center gap-1 bg-sigil-bg-light\n p-1 text-sigil-foreground-muted\n ",
39032
- children: [/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Icon2, {
38979
+ children: [/* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon2, {
39033
38980
  icon: "question_mark",
39034
38981
  className: "text-block-icon"
39035
- }), /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38982
+ }), /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
39036
38983
  className: "text-center",
39037
38984
  children: STRINGS.errors.unknownTimecodeID
39038
38985
  })]
@@ -39045,9 +38992,9 @@ Data Directory: ${system.dataDirectory}`
39045
38992
  }
39046
38993
  let t3;
39047
38994
  if ($[34] !== id || $[35] !== instanceConfig || $[36] !== timecode) {
39048
- t3 = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
38995
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", {
39049
38996
  className: "\n flex h-0 grow flex-col gap-px overflow-y-auto bg-sigil-border\n scrollbar-sigil\n ",
39050
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(TimecodeTreeDisplay, {
38997
+ children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(TimecodeTreeDisplay, {
39051
38998
  id,
39052
38999
  timecode,
39053
39000
  assignToOutput: null,
@@ -39117,6 +39064,102 @@ Data Directory: ${system.dataDirectory}`
39117
39064
  }
39118
39065
  var v4_default = v4;
39119
39066
 
39067
+ // src/components/frontend/toolbox/content.tsx
39068
+ var import_compiler_runtime9 = __toESM(require_compiler_runtime());
39069
+ var import_jsx_runtime44 = __toESM(require_jsx_runtime());
39070
+ var ExternalLink = (t0) => {
39071
+ const $ = (0, import_compiler_runtime9.c)(7);
39072
+ const {
39073
+ href,
39074
+ children
39075
+ } = t0;
39076
+ const {
39077
+ openExternalLink
39078
+ } = useBrowserContext();
39079
+ let t1;
39080
+ if ($[0] !== href || $[1] !== openExternalLink) {
39081
+ t1 = (e) => {
39082
+ e.preventDefault();
39083
+ openExternalLink(href);
39084
+ };
39085
+ $[0] = href;
39086
+ $[1] = openExternalLink;
39087
+ $[2] = t1;
39088
+ } else {
39089
+ t1 = $[2];
39090
+ }
39091
+ let t2;
39092
+ if ($[3] !== children || $[4] !== href || $[5] !== t1) {
39093
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("a", {
39094
+ href,
39095
+ target: "_blank",
39096
+ rel: "noopener noreferrer",
39097
+ onClick: t1,
39098
+ className: "\n text-sigil-usage-hint-foreground no-underline\n hover:underline\n ",
39099
+ children
39100
+ });
39101
+ $[3] = children;
39102
+ $[4] = href;
39103
+ $[5] = t1;
39104
+ $[6] = t2;
39105
+ } else {
39106
+ t2 = $[6];
39107
+ }
39108
+ return t2;
39109
+ };
39110
+ var TextButton = (t0) => {
39111
+ const $ = (0, import_compiler_runtime9.c)(3);
39112
+ const {
39113
+ onClick,
39114
+ children
39115
+ } = t0;
39116
+ let t1;
39117
+ if ($[0] !== children || $[1] !== onClick) {
39118
+ t1 = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", {
39119
+ onClick,
39120
+ className: "\n cursor-pointer text-sigil-usage-hint-foreground\n hover:underline\n ",
39121
+ children
39122
+ });
39123
+ $[0] = children;
39124
+ $[1] = onClick;
39125
+ $[2] = t1;
39126
+ } else {
39127
+ t1 = $[2];
39128
+ }
39129
+ return t1;
39130
+ };
39131
+ var NoToolboxChildren = (t0) => {
39132
+ const $ = (0, import_compiler_runtime9.c)(3);
39133
+ const {
39134
+ text
39135
+ } = t0;
39136
+ let t1;
39137
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
39138
+ t1 = /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Icon2, {
39139
+ icon: "handyman",
39140
+ className: "text-block-icon"
39141
+ });
39142
+ $[0] = t1;
39143
+ } else {
39144
+ t1 = $[0];
39145
+ }
39146
+ let t2;
39147
+ if ($[1] !== text) {
39148
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(SizeAwareDiv, {
39149
+ className: "\n flex grow flex-col items-center justify-center gap-1 bg-sigil-bg-light\n p-1 text-sigil-foreground-muted\n ",
39150
+ children: [t1, /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", {
39151
+ className: "text-center",
39152
+ children: text
39153
+ })]
39154
+ });
39155
+ $[1] = text;
39156
+ $[2] = t2;
39157
+ } else {
39158
+ t2 = $[2];
39159
+ }
39160
+ return t2;
39161
+ };
39162
+
39120
39163
  // src/components/frontend/toolbox/outputs.tsx
39121
39164
  var import_jsx_runtime45 = __toESM(require_jsx_runtime());
39122
39165
  var DmxConnectionSettings = (t0) => {
@@ -41000,6 +41043,7 @@ Data Directory: ${system.dataDirectory}`
41000
41043
 
41001
41044
  // src/components/frontend/toolbox/settings.tsx
41002
41045
  var import_compiler_runtime14 = __toESM(require_compiler_runtime());
41046
+ var import_react39 = __toESM(require_react());
41003
41047
 
41004
41048
  // ../../packages/sigil/dist/frontend/appearance.js
41005
41049
  var import_compiler_runtime13 = __toESM(require_compiler_runtime(), 1);
@@ -41182,8 +41226,18 @@ Data Directory: ${system.dataDirectory}`
41182
41226
 
41183
41227
  // src/components/frontend/toolbox/settings.tsx
41184
41228
  var import_jsx_runtime49 = __toESM(require_jsx_runtime());
41229
+ var ENABLED_DISABLED_OPTIONS = [{
41230
+ value: "enabled",
41231
+ label: STRINGS.general.enabled
41232
+ }, {
41233
+ value: "disabled",
41234
+ label: STRINGS.general.disabled
41235
+ }];
41236
+ var DATE_FORMATTER = new Intl.DateTimeFormat(void 0, {
41237
+ timeStyle: "medium"
41238
+ });
41185
41239
  var Settings = (t0) => {
41186
- const $ = (0, import_compiler_runtime14.c)(16);
41240
+ const $ = (0, import_compiler_runtime14.c)(29);
41187
41241
  const {
41188
41242
  setWindowMode
41189
41243
  } = t0;
@@ -41191,6 +41245,13 @@ Data Directory: ${system.dataDirectory}`
41191
41245
  preferences,
41192
41246
  updateBrowserPrefs
41193
41247
  } = useBrowserPreferences();
41248
+ const {
41249
+ config,
41250
+ updateConfig
41251
+ } = (0, import_react39.useContext)(ConfigContext);
41252
+ const {
41253
+ updates
41254
+ } = useApplicationState();
41194
41255
  let t1;
41195
41256
  let t2;
41196
41257
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
@@ -41259,15 +41320,9 @@ Data Directory: ${system.dataDirectory}`
41259
41320
  }
41260
41321
  let t8;
41261
41322
  if ($[10] !== preferences.color || $[11] !== t7) {
41262
- t8 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", {
41263
- className: "\n grow basis-0 overflow-y-auto bg-sigil-bg-light scrollbar-sigil\n ",
41264
- children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
41265
- className: "control-grid-large",
41266
- children: [t6, /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AppearanceSwitcher, {
41267
- color: preferences.color,
41268
- onColorChange: t7
41269
- })]
41270
- })
41323
+ t8 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AppearanceSwitcher, {
41324
+ color: preferences.color,
41325
+ onColorChange: t7
41271
41326
  });
41272
41327
  $[10] = preferences.color;
41273
41328
  $[11] = t7;
@@ -41276,44 +41331,1061 @@ Data Directory: ${system.dataDirectory}`
41276
41331
  t8 = $[12];
41277
41332
  }
41278
41333
  let t9;
41279
- if ($[13] !== t5 || $[14] !== t8) {
41280
- t9 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
41334
+ if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
41335
+ t9 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ControlLabel, {
41336
+ children: STRINGS.updates.settingsLabel
41337
+ });
41338
+ $[13] = t9;
41339
+ } else {
41340
+ t9 = $[13];
41341
+ }
41342
+ const t10 = config.checkForUpdates ? "enabled" : "disabled";
41343
+ let t11;
41344
+ if ($[14] !== updateConfig) {
41345
+ t11 = (value) => updateConfig((current_0) => ({
41346
+ ...current_0,
41347
+ checkForUpdates: value === "enabled"
41348
+ }));
41349
+ $[14] = updateConfig;
41350
+ $[15] = t11;
41351
+ } else {
41352
+ t11 = $[15];
41353
+ }
41354
+ let t12;
41355
+ if ($[16] !== t10 || $[17] !== t11) {
41356
+ t12 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ControlSelect, {
41357
+ value: t10,
41358
+ options: ENABLED_DISABLED_OPTIONS,
41359
+ onChange: t11,
41360
+ variant: "large"
41361
+ });
41362
+ $[16] = t10;
41363
+ $[17] = t11;
41364
+ $[18] = t12;
41365
+ } else {
41366
+ t12 = $[18];
41367
+ }
41368
+ let t13;
41369
+ if ($[19] === Symbol.for("react.memo_cache_sentinel")) {
41370
+ t13 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ControlDetails, {
41371
+ children: STRINGS.updates.settingsDetails
41372
+ });
41373
+ $[19] = t13;
41374
+ } else {
41375
+ t13 = $[19];
41376
+ }
41377
+ let t14;
41378
+ if ($[20] !== updates) {
41379
+ t14 = updates && "lastCheckedMillis" in updates && /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ControlDetails, {
41380
+ children: STRINGS.updates.lastChecked(DATE_FORMATTER.format(updates.lastCheckedMillis))
41381
+ });
41382
+ $[20] = updates;
41383
+ $[21] = t14;
41384
+ } else {
41385
+ t14 = $[21];
41386
+ }
41387
+ let t15;
41388
+ if ($[22] !== t12 || $[23] !== t14 || $[24] !== t8) {
41389
+ t15 = /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", {
41390
+ className: "\n grow basis-0 overflow-y-auto bg-sigil-bg-light scrollbar-sigil\n ",
41391
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
41392
+ className: "control-grid-large",
41393
+ children: [t6, t8, t9, t12, t13, t14]
41394
+ })
41395
+ });
41396
+ $[22] = t12;
41397
+ $[23] = t14;
41398
+ $[24] = t8;
41399
+ $[25] = t15;
41400
+ } else {
41401
+ t15 = $[25];
41402
+ }
41403
+ let t16;
41404
+ if ($[26] !== t15 || $[27] !== t5) {
41405
+ t16 = /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", {
41281
41406
  className: "flex grow flex-col",
41282
- children: [t5, t8]
41407
+ children: [t5, t15]
41283
41408
  });
41284
- $[13] = t5;
41285
- $[14] = t8;
41286
- $[15] = t9;
41409
+ $[26] = t15;
41410
+ $[27] = t5;
41411
+ $[28] = t16;
41287
41412
  } else {
41288
- t9 = $[15];
41413
+ t16 = $[28];
41289
41414
  }
41290
- return t9;
41415
+ return t16;
41291
41416
  };
41292
41417
 
41293
- // src/components/frontend/toolbox/root.tsx
41418
+ // src/components/frontend/toolbox/license.tsx
41419
+ var import_compiler_runtime18 = __toESM(require_compiler_runtime());
41420
+ var import_react41 = __toESM(require_react());
41421
+
41422
+ // src/components/frontend/toolbox/logo.tsx
41423
+ var import_compiler_runtime15 = __toESM(require_compiler_runtime());
41294
41424
  var import_jsx_runtime50 = __toESM(require_jsx_runtime());
41295
- var ToolboxRoot = (t0) => {
41296
- const $ = (0, import_compiler_runtime15.c)(64);
41425
+ var TimecodeToolboxLogo = (props) => {
41426
+ const $ = (0, import_compiler_runtime15.c)(33);
41427
+ let t0;
41428
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
41429
+ t0 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41430
+ id: "b",
41431
+ maskUnits: "userSpaceOnUse",
41432
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41433
+ fill: "#fff",
41434
+ "stroke-linecap": "round",
41435
+ "stroke-linejoin": "round",
41436
+ "stroke-width": "50.12",
41437
+ d: "m347.83 438.376 11.825 188.138-36.885 62.692v411.759h986.987v-411.76l-36.886-62.691 11.825-188.138z"
41438
+ })
41439
+ });
41440
+ $[0] = t0;
41441
+ } else {
41442
+ t0 = $[0];
41443
+ }
41444
+ let t1;
41445
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
41446
+ t1 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41447
+ id: "g",
41448
+ maskUnits: "userSpaceOnUse",
41449
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41450
+ fill: "#fff",
41451
+ "stroke-linecap": "round",
41452
+ "stroke-linejoin": "round",
41453
+ "stroke-width": "5.581",
41454
+ d: "m523.18 899.13 300.24-394.065s34.365-35.915 46.091-69.549c11.727-33.634.988-72.204-2.46-104.403-5.358-50.016 59.283-109.877 59.283-109.877s69.906-48.692 76.993-40.385-46.397 95.284-39.707 122.272c10.605 42.782 80.61 74.691 115.162 58.516s54.191-119.781 68.45-123.27c14.259-3.49 31.217 85.629 29.104 137.042s-52.322 83.478-83.625 93.094-71.227 10.846-102.507 35.2-361.42 471.203-361.42 471.203z"
41455
+ })
41456
+ });
41457
+ $[1] = t1;
41458
+ } else {
41459
+ t1 = $[1];
41460
+ }
41461
+ let t2;
41462
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
41463
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41464
+ id: "f",
41465
+ maskUnits: "userSpaceOnUse",
41466
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41467
+ fill: "#fff",
41468
+ "stroke-linecap": "round",
41469
+ "stroke-linejoin": "round",
41470
+ "stroke-width": "5.581",
41471
+ d: "m523.18 899.13 300.24-394.065s34.365-35.915 46.091-69.549c11.727-33.634.988-72.204-2.46-104.403-5.358-50.016 59.283-109.877 59.283-109.877s69.906-48.692 76.993-40.385-46.397 95.284-39.707 122.272c10.605 42.782 80.61 74.691 115.162 58.516s54.191-119.781 68.45-123.27c14.259-3.49 31.217 85.629 29.104 137.042s-52.322 83.478-83.625 93.094-71.227 10.846-102.507 35.2-361.42 471.203-361.42 471.203z"
41472
+ })
41473
+ });
41474
+ $[2] = t2;
41475
+ } else {
41476
+ t2 = $[2];
41477
+ }
41478
+ let t3;
41479
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
41480
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41481
+ id: "e",
41482
+ maskUnits: "userSpaceOnUse",
41483
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41484
+ fill: "#fff",
41485
+ "stroke-linecap": "round",
41486
+ "stroke-linejoin": "round",
41487
+ "stroke-width": "5.581",
41488
+ d: "m523.18 899.13 300.24-394.065s34.365-35.915 46.091-69.549c11.727-33.634.988-72.204-2.46-104.403-5.358-50.016 59.283-109.877 59.283-109.877s69.906-48.692 76.993-40.385-46.397 95.284-39.707 122.272c10.605 42.782 80.61 74.691 115.162 58.516s54.191-119.781 68.45-123.27c14.259-3.49 31.217 85.629 29.104 137.042s-52.322 83.478-83.625 93.094-71.227 10.846-102.507 35.2-361.42 471.203-361.42 471.203z"
41489
+ })
41490
+ });
41491
+ $[3] = t3;
41492
+ } else {
41493
+ t3 = $[3];
41494
+ }
41495
+ let t4;
41496
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
41497
+ t4 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41498
+ id: "d",
41499
+ maskUnits: "userSpaceOnUse",
41500
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41501
+ fill: "#fff",
41502
+ "stroke-linecap": "round",
41503
+ "stroke-linejoin": "round",
41504
+ "stroke-width": "5.581",
41505
+ d: "m523.18 899.13 300.24-394.065s34.365-35.915 46.091-69.549c11.727-33.634.988-72.204-2.46-104.403-5.358-50.016 59.283-109.877 59.283-109.877s69.906-48.692 76.993-40.385-46.397 95.284-39.707 122.272c10.605 42.782 80.61 74.691 115.162 58.516s54.191-119.781 68.45-123.27c14.259-3.49 31.217 85.629 29.104 137.042s-52.322 83.478-83.625 93.094-71.227 10.846-102.507 35.2-361.42 471.203-361.42 471.203z"
41506
+ })
41507
+ });
41508
+ $[4] = t4;
41509
+ } else {
41510
+ t4 = $[4];
41511
+ }
41512
+ let t5;
41513
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
41514
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41515
+ id: "c",
41516
+ maskUnits: "userSpaceOnUse",
41517
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41518
+ fill: "#fff",
41519
+ "stroke-linecap": "round",
41520
+ "stroke-linejoin": "round",
41521
+ "stroke-width": "5.581",
41522
+ d: "m523.18 899.13 300.24-394.065s34.365-35.915 46.091-69.549c11.727-33.634.988-72.204-2.46-104.403-5.358-50.016 59.283-109.877 59.283-109.877s69.906-48.692 76.993-40.385-46.397 95.284-39.707 122.272c10.605 42.782 80.61 74.691 115.162 58.516s54.191-119.781 68.45-123.27c14.259-3.49 31.217 85.629 29.104 137.042s-52.322 83.478-83.625 93.094-71.227 10.846-102.507 35.2-361.42 471.203-361.42 471.203z"
41523
+ })
41524
+ });
41525
+ $[5] = t5;
41526
+ } else {
41527
+ t5 = $[5];
41528
+ }
41529
+ let t6;
41530
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
41531
+ t6 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41532
+ id: "k",
41533
+ maskUnits: "userSpaceOnUse",
41534
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41535
+ fill: "#fff",
41536
+ "stroke-linecap": "round",
41537
+ "stroke-linejoin": "round",
41538
+ "stroke-width": "7.033",
41539
+ d: "m209.947 266.846 76.909 154.59 31.315-12.212 281.763 384.488 39.973-29.294-281.646-384.327 21.561-26.783-124.246-119.9Z"
41540
+ })
41541
+ });
41542
+ $[6] = t6;
41543
+ } else {
41544
+ t6 = $[6];
41545
+ }
41546
+ let t7;
41547
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
41548
+ t7 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41549
+ id: "j",
41550
+ maskUnits: "userSpaceOnUse",
41551
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41552
+ fill: "#fff",
41553
+ "stroke-linecap": "round",
41554
+ "stroke-linejoin": "round",
41555
+ "stroke-width": "7.033",
41556
+ d: "m209.947 266.846 76.909 154.59 31.315-12.212 281.763 384.488 39.973-29.294-281.646-384.327 21.561-26.783-124.246-119.9Z"
41557
+ })
41558
+ });
41559
+ $[7] = t7;
41560
+ } else {
41561
+ t7 = $[7];
41562
+ }
41563
+ let t8;
41564
+ if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
41565
+ t8 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41566
+ id: "i",
41567
+ maskUnits: "userSpaceOnUse",
41568
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41569
+ fill: "#fff",
41570
+ "stroke-linecap": "round",
41571
+ "stroke-linejoin": "round",
41572
+ "stroke-width": "7.033",
41573
+ d: "m209.947 266.846 76.909 154.59 31.315-12.212 281.763 384.488 39.973-29.294-281.646-384.327 21.561-26.783-124.246-119.9Z"
41574
+ })
41575
+ });
41576
+ $[8] = t8;
41577
+ } else {
41578
+ t8 = $[8];
41579
+ }
41580
+ let t9;
41581
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
41582
+ t9 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("mask", {
41583
+ id: "h",
41584
+ maskUnits: "userSpaceOnUse",
41585
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41586
+ fill: "#fff",
41587
+ "stroke-linecap": "round",
41588
+ "stroke-linejoin": "round",
41589
+ "stroke-width": "7.033",
41590
+ d: "m209.947 266.846 76.909 154.59 31.315-12.212 281.763 384.488 39.973-29.294-281.646-384.327 21.561-26.783-124.246-119.9Z"
41591
+ })
41592
+ });
41593
+ $[9] = t9;
41594
+ } else {
41595
+ t9 = $[9];
41596
+ }
41597
+ let t10;
41598
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
41599
+ t10 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("defs", {
41600
+ children: [t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("filter", {
41601
+ id: "a",
41602
+ width: "1.201",
41603
+ height: "1.19",
41604
+ x: "-.101",
41605
+ y: "-.074",
41606
+ "color-interpolation-filters": "sRGB",
41607
+ children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("feGaussianBlur", {
41608
+ stdDeviation: "10.298"
41609
+ })
41610
+ })]
41611
+ });
41612
+ $[10] = t10;
41613
+ } else {
41614
+ t10 = $[10];
41615
+ }
41616
+ let t11;
41617
+ if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
41618
+ t11 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("g", {
41619
+ stroke: "#000",
41620
+ "stroke-linecap": "round",
41621
+ "stroke-linejoin": "round",
41622
+ filter: "url(#a)",
41623
+ opacity: ".25",
41624
+ transform: "translate(-216.03 -84.295)scale(1.10099)",
41625
+ children: [/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41626
+ "stroke-width": "153.76517303999998",
41627
+ d: "m337.226 438.886 12.093 192.397-37.72 64.11v421.08h1009.328v-421.08l-37.72-64.11 12.093-192.397z",
41628
+ opacity: "1"
41629
+ }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41630
+ "stroke-width": "80.096",
41631
+ d: "m671.405 893.22 272.7-357.92s31.213-32.62 41.864-63.169.898-65.581-2.235-94.827c-4.866-45.427 53.846-99.798 53.846-99.798s63.494-44.226 69.93-36.68-42.14 86.544-36.064 111.056c9.632 38.858 73.216 67.84 104.599 53.149 31.382-14.691 49.22-108.795 62.171-111.964s28.353 77.775 26.435 124.473-47.523 75.82-75.955 84.554-64.694 9.851-93.104 31.972c-28.41 22.12-328.269 427.981-328.269 427.981z"
41632
+ }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41633
+ "stroke-width": "80.096",
41634
+ d: "m386.903 318.933 69.855 140.41 28.443-11.092 255.918 349.22 36.307-26.606L521.614 421.79l19.583-24.326-112.85-108.903z"
41635
+ })]
41636
+ });
41637
+ $[11] = t11;
41638
+ } else {
41639
+ t11 = $[11];
41640
+ }
41641
+ let t12;
41642
+ let t13;
41643
+ let t14;
41644
+ let t15;
41645
+ let t16;
41646
+ let t17;
41647
+ let t18;
41648
+ let t19;
41649
+ let t20;
41650
+ let t21;
41651
+ let t22;
41652
+ let t23;
41653
+ let t24;
41654
+ let t25;
41655
+ let t26;
41656
+ let t27;
41657
+ let t28;
41658
+ let t29;
41659
+ let t30;
41660
+ if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
41661
+ t12 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("g", {
41662
+ stroke: "#fff",
41663
+ "stroke-linecap": "round",
41664
+ "stroke-linejoin": "round",
41665
+ children: [/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41666
+ fill: "#8c63d9",
41667
+ "stroke-width": "165.54595738999998",
41668
+ d: "m166.927 398.352 13.02 207.137-40.611 69.024v453.341h1086.661V674.513l-40.61-69.024 13.02-207.137H424.595Z"
41669
+ }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41670
+ fill: "none",
41671
+ "stroke-width": "73.48667853999999",
41672
+ d: "m209.947 266.846 76.909 154.59 31.315-12.212 281.763 384.488 39.973-29.294-281.646-384.327 21.561-26.783-124.246-119.9z"
41673
+ }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41674
+ fill: "none",
41675
+ "stroke-width": "66.746",
41676
+ d: "m671.405 893.22 272.7-357.92s31.213-32.62 41.864-63.169.898-65.581-2.235-94.827c-4.866-45.427 53.846-99.798 53.846-99.798s63.494-44.226 69.93-36.68-42.14 86.544-36.064 111.056c9.632 38.858 73.216 67.84 104.599 53.149 31.382-14.691 49.22-108.795 62.171-111.964s28.353 77.775 26.435 124.473-47.523 75.82-75.955 84.554-64.694 9.851-93.104 31.972c-28.41 22.12-328.269 427.981-328.269 427.981z",
41677
+ transform: "translate(-216.03 -84.295)scale(1.10099)"
41678
+ })]
41679
+ });
41680
+ t13 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41681
+ fill: "#8c63d9",
41682
+ stroke: "#263238",
41683
+ "stroke-linecap": "round",
41684
+ "stroke-linejoin": "round",
41685
+ "stroke-width": "55.182",
41686
+ d: "m166.927 398.352 13.02 207.137-40.611 69.023v453.342h1086.661V674.512l-40.61-69.023 13.02-207.137z"
41687
+ });
41688
+ t14 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41689
+ fill: "#cc7000",
41690
+ stroke: "#ffba66",
41691
+ "stroke-linecap": "round",
41692
+ "stroke-linejoin": "round",
41693
+ "stroke-width": "38.593",
41694
+ d: "M322.77 689.206h986.986l-36.885-62.693H359.655Z",
41695
+ mask: "url(#b)",
41696
+ transform: "translate(-216.03 -84.295)scale(1.10099)"
41697
+ });
41698
+ t15 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41699
+ fill: "#ff8c00",
41700
+ d: "m1185.387 605.49 13.02-207.138H166.926l13.02 207.137z"
41701
+ });
41702
+ t16 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41703
+ fill: "none",
41704
+ stroke: "#263238",
41705
+ "stroke-linecap": "round",
41706
+ "stroke-linejoin": "round",
41707
+ "stroke-width": "29.395",
41708
+ d: "m523.18 899.13 300.24-394.065s34.365-35.915 46.091-69.549c11.727-33.634.988-72.204-2.46-104.403-5.358-50.016 59.283-109.877 59.283-109.877s69.906-48.692 76.993-40.385-46.397 95.284-39.707 122.272c10.605 42.782 80.61 74.691 115.162 58.516s54.191-119.781 68.45-123.27c14.259-3.49 31.217 85.629 29.104 137.042s-52.322 83.478-83.625 93.094-71.227 10.846-102.507 35.2-361.42 471.203-361.42 471.203z"
41709
+ });
41710
+ t17 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41711
+ fill: "#eceff1",
41712
+ d: "m916.084 52.25 420.493 180.531-532.698 916.066-476.546-308.58Z",
41713
+ mask: "url(#c)"
41714
+ });
41715
+ t18 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41716
+ fill: "#fff",
41717
+ d: "M856.06 362.55s35.273 37.417 44.671 47.481 30.133 23.878 30.133 23.878-19.577-12.395-133.162 132.35c-113.586 144.744-274.29 356.33-274.29 356.33l-74.43-62.208z",
41718
+ mask: "url(#d)"
41719
+ });
41720
+ t19 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41721
+ fill: "#fff",
41722
+ d: "M1003.804 214.75s-61.324 47.811-85.42 85.1c-24.096 37.29-8.4 134.552-8.4 134.552l-119.375-94.095 193.083-235.652 92.963 84.914z",
41723
+ mask: "url(#e)"
41724
+ });
41725
+ t20 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41726
+ fill: "#cfd8dc",
41727
+ d: "M1128.958 213.086s18.838 96.946 18.548 125.56c-.29 28.612-8.26 73.801-33.74 89.024s-63.802 38.756-115.38 20.88-172.024-84.115-172.024-84.115S981.864 470.314 1006.22 474.08s112.252 10.05 112.252 10.05l90.662-46.814 21.129-221.796z",
41728
+ mask: "url(#f)"
41729
+ });
41730
+ t21 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41731
+ fill: "#cfd8dc",
41732
+ d: "M1041.552 459.425s-36.954 8.644-65.379 28.54-170.117 214.54-170.117 214.54L582.36 996.25l52.042 26.094 450.026-523.432z",
41733
+ mask: "url(#g)"
41734
+ });
41735
+ t22 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41736
+ fill: "none",
41737
+ stroke: "#263238",
41738
+ "stroke-linecap": "round",
41739
+ "stroke-linejoin": "round",
41740
+ "stroke-width": "29.395",
41741
+ d: "m209.947 266.846 76.909 154.59 31.315-12.212 281.763 384.488 39.973-29.294-281.646-384.327 21.561-26.783-124.246-119.9Z"
41742
+ });
41743
+ t23 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41744
+ fill: "#eceff1",
41745
+ d: "m105.922 257.574 152.745-109.918 438.66 518.005-348.484 67.536Z",
41746
+ mask: "url(#h)"
41747
+ });
41748
+ t24 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41749
+ fill: "#fff",
41750
+ d: "M326.613 211.828s-59.58 39.097-77.947 64.605C232.303 299.16 204.56 380.52 204.56 380.52l-48.272-119.485 119.003-77.722z",
41751
+ mask: "url(#i)"
41752
+ });
41753
+ t25 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41754
+ fill: "#cfd8dc",
41755
+ d: "M248.625 369.326s24.346 28.663 44.076 34.332c15.33 4.405 30.118-5.584 30.118-5.584l212.415 286.577-185.65 5.65z",
41756
+ mask: "url(#j)"
41757
+ });
41758
+ t26 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41759
+ fill: "#cfd8dc",
41760
+ d: "M355.22 375.68s11.46-16.196 12.454-25.01c3.052-27.043-32.344-49.296-32.344-49.296l77.092 54.069-53.634 24.84z",
41761
+ mask: "url(#k)"
41762
+ });
41763
+ t27 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41764
+ fill: "#ffba66",
41765
+ d: "M170.482 652.84h1025.265v453.341H170.482Z"
41766
+ });
41767
+ t28 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41768
+ fill: "#ff8c00",
41769
+ d: "M139.336 674.512h1086.662v453.342H139.336Z"
41770
+ });
41771
+ t29 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("rect", {
41772
+ width: "875.482",
41773
+ height: "332.3",
41774
+ x: "244.926",
41775
+ y: "735.033",
41776
+ fill: "#cc7000",
41777
+ rx: "77.883",
41778
+ ry: "77.883"
41779
+ });
41780
+ t30 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", {
41781
+ fill: "#fff",
41782
+ d: "M316.789 901.245q0-47.968 15.206-71.828 15.206-23.984 45.743-23.984 30.66 0 45.866 23.86t15.206 71.952q0 47.968-15.206 71.828-15.207 23.86-45.866 23.86-30.537 0-45.743-23.86-15.206-23.984-15.206-71.828m42.528 49.328q5.81 15.453 18.42 15.453 12.734 0 18.545-15.453 5.81-15.454 5.81-49.328 0-12.857-.865-22.995l-43.146 68.737q.618 1.978 1.236 3.586m18.42-114.233q-12.61 0-18.42 15.453-5.81 15.454-5.81 49.452 0 10.508.494 19.162l42.528-67.872-.247-.742q-5.81-15.453-18.544-15.453m91.486 64.905q0-47.968 15.206-71.828 15.206-23.984 45.742-23.984 30.66 0 45.867 23.86t15.206 71.952q0 47.968-15.206 71.828-15.207 23.86-45.867 23.86-30.536 0-45.742-23.86-15.206-23.984-15.206-71.828m42.528 49.328q5.81 15.453 18.42 15.453 12.734 0 18.545-15.453 5.81-15.454 5.81-49.328 0-12.858-.865-22.995l-43.147 68.737q.619 1.978 1.237 3.586m18.42-114.233q-12.61 0-18.42 15.453-5.81 15.454-5.81 49.452 0 10.508.494 19.162l42.528-67.872-.247-.742q-5.81-15.453-18.545-15.453M661.96 861.93h41.169v45.124h-41.169Zm0 86.045h41.169v45.372h-41.169Zm112.131-46.731q0-47.968 15.207-71.828 15.206-23.984 45.742-23.984 30.66 0 45.866 23.86 15.207 23.86 15.207 71.952 0 47.968-15.207 71.828-15.206 23.86-45.866 23.86-30.536 0-45.742-23.86-15.207-23.984-15.207-71.828m42.528 49.328q5.811 15.453 18.421 15.453 12.734 0 18.544-15.453 5.81-15.454 5.81-49.328 0-12.858-.865-22.995l-43.146 68.737q.618 1.978 1.236 3.586M835.04 836.34q-12.61 0-18.42 15.453-5.811 15.454-5.811 49.452 0 10.508.494 19.162l42.529-67.872-.248-.742q-5.81-15.453-18.544-15.453m91.485 64.905q0-47.968 15.206-71.828 15.207-23.984 45.743-23.984 30.66 0 45.866 23.86t15.206 71.952q0 47.968-15.206 71.828t-45.866 23.86q-30.536 0-45.743-23.86-15.206-23.984-15.206-71.828m42.528 49.328q5.81 15.453 18.42 15.453 12.735 0 18.545-15.453 5.81-15.454 5.81-49.328 0-12.858-.865-22.995l-43.146 68.737q.618 1.978 1.236 3.586m18.42-114.233q-12.61 0-18.42 15.453-5.81 15.454-5.81 49.452 0 10.508.494 19.162l42.528-67.872-.247-.742q-5.81-15.453-18.544-15.453",
41783
+ "aria-label": "00:00"
41784
+ });
41785
+ $[12] = t12;
41786
+ $[13] = t13;
41787
+ $[14] = t14;
41788
+ $[15] = t15;
41789
+ $[16] = t16;
41790
+ $[17] = t17;
41791
+ $[18] = t18;
41792
+ $[19] = t19;
41793
+ $[20] = t20;
41794
+ $[21] = t21;
41795
+ $[22] = t22;
41796
+ $[23] = t23;
41797
+ $[24] = t24;
41798
+ $[25] = t25;
41799
+ $[26] = t26;
41800
+ $[27] = t27;
41801
+ $[28] = t28;
41802
+ $[29] = t29;
41803
+ $[30] = t30;
41804
+ } else {
41805
+ t12 = $[12];
41806
+ t13 = $[13];
41807
+ t14 = $[14];
41808
+ t15 = $[15];
41809
+ t16 = $[16];
41810
+ t17 = $[17];
41811
+ t18 = $[18];
41812
+ t19 = $[19];
41813
+ t20 = $[20];
41814
+ t21 = $[21];
41815
+ t22 = $[22];
41816
+ t23 = $[23];
41817
+ t24 = $[24];
41818
+ t25 = $[25];
41819
+ t26 = $[26];
41820
+ t27 = $[27];
41821
+ t28 = $[28];
41822
+ t29 = $[29];
41823
+ t30 = $[30];
41824
+ }
41825
+ let t31;
41826
+ if ($[31] !== props) {
41827
+ t31 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("svg", {
41828
+ xmlns: "http://www.w3.org/2000/svg",
41829
+ viewBox: "0 0 1365.333 1365.333",
41830
+ ...props,
41831
+ children: [t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21, t22, t23, t24, t25, t26, t27, t28, t29, t30]
41832
+ });
41833
+ $[31] = props;
41834
+ $[32] = t31;
41835
+ } else {
41836
+ t31 = $[32];
41837
+ }
41838
+ return t31;
41839
+ };
41840
+
41841
+ // src/components/frontend/toolbox/core/layout.tsx
41842
+ var import_compiler_runtime17 = __toESM(require_compiler_runtime());
41843
+ var import_react40 = __toESM(require_react());
41844
+
41845
+ // src/components/frontend/toolbox/core/footer.tsx
41846
+ var import_compiler_runtime16 = __toESM(require_compiler_runtime());
41847
+ var import_jsx_runtime51 = __toESM(require_jsx_runtime());
41848
+ var Footer = (t0) => {
41849
+ const $ = (0, import_compiler_runtime16.c)(7);
41297
41850
  const {
41298
- info
41851
+ openLicenseDetails
41299
41852
  } = t0;
41300
- const [windowMode, setWindowMode] = (0, import_react39.useState)(null);
41853
+ let t1;
41854
+ let t2;
41855
+ let t3;
41856
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
41857
+ t1 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", {
41858
+ children: ["Created by", "\xA0", /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ExternalLink, {
41859
+ href: "https://arcanewizards.com",
41860
+ children: "Arcane Wizards"
41861
+ })]
41862
+ });
41863
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ToolbarDivider, {});
41864
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ExternalLink, {
41865
+ href: SOURCE_CODE_URL,
41866
+ children: STRINGS.sourceCode
41867
+ });
41868
+ $[0] = t1;
41869
+ $[1] = t2;
41870
+ $[2] = t3;
41871
+ } else {
41872
+ t1 = $[0];
41873
+ t2 = $[1];
41874
+ t3 = $[2];
41875
+ }
41876
+ let t4;
41877
+ if ($[3] !== openLicenseDetails) {
41878
+ t4 = openLicenseDetails && /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_jsx_runtime51.Fragment, {
41879
+ children: [/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ToolbarDivider, {}), /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TextButton, {
41880
+ onClick: openLicenseDetails,
41881
+ children: STRINGS.license
41882
+ })]
41883
+ });
41884
+ $[3] = openLicenseDetails;
41885
+ $[4] = t4;
41886
+ } else {
41887
+ t4 = $[4];
41888
+ }
41889
+ let t5;
41890
+ if ($[5] !== t4) {
41891
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", {
41892
+ className: "\n flex items-center justify-center gap-1 border-t border-sigil-border\n bg-sigil-bg-dark p-1 text-[80%]\n ",
41893
+ children: [t1, t2, t3, t4]
41894
+ });
41895
+ $[5] = t4;
41896
+ $[6] = t5;
41897
+ } else {
41898
+ t5 = $[6];
41899
+ }
41900
+ return t5;
41901
+ };
41902
+
41903
+ // src/components/frontend/toolbox/core/layout.tsx
41904
+ var import_jsx_runtime52 = __toESM(require_jsx_runtime());
41905
+ var Layout = (t0) => {
41906
+ const $ = (0, import_compiler_runtime17.c)(21);
41301
41907
  const {
41302
- config
41303
- } = info;
41908
+ modes,
41909
+ children,
41910
+ licenseMode,
41911
+ footer
41912
+ } = t0;
41913
+ const [windowMode, setWindowMode] = (0, import_react40.useState)(null);
41304
41914
  const {
41305
- sendMessage,
41306
- call,
41307
41915
  connection,
41308
41916
  reconnect
41309
- } = (0, import_react39.useContext)(StageContext);
41310
- const [dialogMode, setDialogMode] = (0, import_react39.useState)(null);
41311
- const [assignToOutput, setAssignToOutput] = (0, import_react39.useState)(null);
41917
+ } = (0, import_react40.useContext)(StageContext);
41312
41918
  const {
41313
41919
  preferences
41314
41920
  } = useBrowserPreferences();
41315
41921
  useRootHintVariables(preferences.color);
41316
41922
  let t1;
41923
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
41924
+ t1 = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {
41925
+ className: "\n flex h-full min-h-[36px] grow items-center justify-center px-1\n app-title-bar\n ",
41926
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", {
41927
+ className: "font-bold text-hint-gradient",
41928
+ children: STRINGS.title
41929
+ })
41930
+ });
41931
+ $[0] = t1;
41932
+ } else {
41933
+ t1 = $[0];
41934
+ }
41935
+ let t2;
41936
+ if ($[1] !== modes || $[2] !== windowMode) {
41937
+ t2 = modes && /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_jsx_runtime52.Fragment, {
41938
+ children: [/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ToolbarDivider, {}), Object.entries(modes).map((t32) => {
41939
+ const [key, t42] = t32;
41940
+ const {
41941
+ icon,
41942
+ title
41943
+ } = t42;
41944
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ControlButton, {
41945
+ onClick: () => setWindowMode((mode) => mode === key ? null : key),
41946
+ variant: "titlebar",
41947
+ icon,
41948
+ active: windowMode === key,
41949
+ title: STRINGS.toggle(title)
41950
+ }, key);
41951
+ })]
41952
+ });
41953
+ $[1] = modes;
41954
+ $[2] = windowMode;
41955
+ $[3] = t2;
41956
+ } else {
41957
+ t2 = $[3];
41958
+ }
41959
+ let t3;
41960
+ if ($[4] !== t2) {
41961
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ToolbarWrapper, {
41962
+ children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(ToolbarRow, {
41963
+ children: [t1, t2]
41964
+ })
41965
+ });
41966
+ $[4] = t2;
41967
+ $[5] = t3;
41968
+ } else {
41969
+ t3 = $[5];
41970
+ }
41971
+ let t4;
41972
+ if ($[6] !== children || $[7] !== connection.state || $[8] !== modes || $[9] !== reconnect || $[10] !== windowMode) {
41973
+ t4 = connection.state !== "connected" ? /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(SizeAwareDiv, {
41974
+ className: "\n flex grow flex-col items-center justify-center gap-1\n bg-sigil-bg-light p-1 text-sigil-foreground-muted\n ",
41975
+ children: [/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon2, {
41976
+ icon: "signal_disconnected",
41977
+ className: "text-block-icon"
41978
+ }), /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {
41979
+ className: "text-center",
41980
+ children: STRINGS.connectionError
41981
+ }), /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(ControlButton, {
41982
+ onClick: reconnect,
41983
+ variant: "large",
41984
+ icon: "replay",
41985
+ children: STRINGS.reconnect
41986
+ })]
41987
+ }) : windowMode && modes?.[windowMode] ? modes[windowMode].child(setWindowMode) : children;
41988
+ $[6] = children;
41989
+ $[7] = connection.state;
41990
+ $[8] = modes;
41991
+ $[9] = reconnect;
41992
+ $[10] = windowMode;
41993
+ $[11] = t4;
41994
+ } else {
41995
+ t4 = $[11];
41996
+ }
41997
+ let t5;
41998
+ if ($[12] !== t4) {
41999
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", {
42000
+ className: "relative flex h-0 grow flex-col",
42001
+ children: t4
42002
+ });
42003
+ $[12] = t4;
42004
+ $[13] = t5;
42005
+ } else {
42006
+ t5 = $[13];
42007
+ }
42008
+ let t6;
42009
+ if ($[14] !== footer || $[15] !== licenseMode) {
42010
+ t6 = footer && /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Footer, {
42011
+ openLicenseDetails: licenseMode && (() => setWindowMode((mode_0) => mode_0 === licenseMode ? null : licenseMode))
42012
+ });
42013
+ $[14] = footer;
42014
+ $[15] = licenseMode;
42015
+ $[16] = t6;
42016
+ } else {
42017
+ t6 = $[16];
42018
+ }
42019
+ let t7;
42020
+ if ($[17] !== t3 || $[18] !== t5 || $[19] !== t6) {
42021
+ t7 = /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("div", {
42022
+ className: "flex h-screen flex-col",
42023
+ children: [t3, t5, t6]
42024
+ });
42025
+ $[17] = t3;
42026
+ $[18] = t5;
42027
+ $[19] = t6;
42028
+ $[20] = t7;
42029
+ } else {
42030
+ t7 = $[20];
42031
+ }
42032
+ return t7;
42033
+ };
42034
+
42035
+ // src/components/frontend/toolbox/license.tsx
42036
+ var import_jsx_runtime53 = __toESM(require_jsx_runtime());
42037
+ var LicenseContent = (t0) => {
42038
+ const $ = (0, import_compiler_runtime18.c)(4);
42039
+ const {
42040
+ license
42041
+ } = t0;
42042
+ let t1;
42043
+ if ($[0] !== license) {
42044
+ t1 = license.split("\n\n").map(_temp4);
42045
+ $[0] = license;
42046
+ $[1] = t1;
42047
+ } else {
42048
+ t1 = $[1];
42049
+ }
42050
+ let t2;
42051
+ if ($[2] !== t1) {
42052
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", {
42053
+ className: "flex flex-col gap-2 rounded-md bg-sigil-bg-light p-2",
42054
+ children: t1
42055
+ });
42056
+ $[2] = t1;
42057
+ $[3] = t2;
42058
+ } else {
42059
+ t2 = $[3];
42060
+ }
42061
+ return t2;
42062
+ };
42063
+ var License = (t0) => {
42064
+ const $ = (0, import_compiler_runtime18.c)(11);
42065
+ const {
42066
+ license,
42067
+ setWindowMode
42068
+ } = t0;
42069
+ let t1;
42070
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
42071
+ t1 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(TimecodeToolboxLogo, {
42072
+ className: "h-[20%] max-h-[420px] min-h-[110px] w-full"
42073
+ });
42074
+ $[0] = t1;
42075
+ } else {
42076
+ t1 = $[0];
42077
+ }
42078
+ let t2;
42079
+ if ($[1] !== license) {
42080
+ t2 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(LicenseContent, {
42081
+ license
42082
+ });
42083
+ $[1] = license;
42084
+ $[2] = t2;
42085
+ } else {
42086
+ t2 = $[2];
42087
+ }
42088
+ let t3;
42089
+ if ($[3] !== setWindowMode) {
42090
+ t3 = () => setWindowMode(null);
42091
+ $[3] = setWindowMode;
42092
+ $[4] = t3;
42093
+ } else {
42094
+ t3 = $[4];
42095
+ }
42096
+ let t4;
42097
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
42098
+ t4 = STRINGS.close(STRINGS.license);
42099
+ $[5] = t4;
42100
+ } else {
42101
+ t4 = $[5];
42102
+ }
42103
+ let t5;
42104
+ if ($[6] !== t3) {
42105
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", {
42106
+ className: "flex justify-center p-2",
42107
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ControlButton, {
42108
+ onClick: t3,
42109
+ variant: "large",
42110
+ icon: "close",
42111
+ children: t4
42112
+ })
42113
+ });
42114
+ $[6] = t3;
42115
+ $[7] = t5;
42116
+ } else {
42117
+ t5 = $[7];
42118
+ }
42119
+ let t6;
42120
+ if ($[8] !== t2 || $[9] !== t5) {
42121
+ t6 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", {
42122
+ className: "flex grow flex-col",
42123
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", {
42124
+ className: "\n flex grow basis-0 flex-col overflow-y-auto px-2 pb-2 scrollbar-sigil\n ",
42125
+ children: [t1, t2, t5]
42126
+ })
42127
+ });
42128
+ $[8] = t2;
42129
+ $[9] = t5;
42130
+ $[10] = t6;
42131
+ } else {
42132
+ t6 = $[10];
42133
+ }
42134
+ return t6;
42135
+ };
42136
+ var LicenseGate = (t0) => {
42137
+ const $ = (0, import_compiler_runtime18.c)(14);
42138
+ const {
42139
+ info
42140
+ } = t0;
42141
+ const {
42142
+ sendMessage
42143
+ } = (0, import_react41.useContext)(StageContext);
42144
+ let t1;
42145
+ if ($[0] !== info.hash || $[1] !== info.key || $[2] !== sendMessage) {
42146
+ t1 = () => {
42147
+ sendMessage?.({
42148
+ type: "component-message",
42149
+ namespace: "timecode-toolbox",
42150
+ component: "license-gate",
42151
+ componentKey: info.key,
42152
+ action: "accept-license",
42153
+ hash: info.hash
42154
+ });
42155
+ };
42156
+ $[0] = info.hash;
42157
+ $[1] = info.key;
42158
+ $[2] = sendMessage;
42159
+ $[3] = t1;
42160
+ } else {
42161
+ t1 = $[3];
42162
+ }
42163
+ const acceptLicense = t1;
42164
+ let t2;
42165
+ if ($[4] === Symbol.for("react.memo_cache_sentinel")) {
42166
+ t2 = {
42167
+ debug: {
42168
+ child: _temp23,
42169
+ icon: "bug_report",
42170
+ title: STRINGS.debugger
42171
+ }
42172
+ };
42173
+ $[4] = t2;
42174
+ } else {
42175
+ t2 = $[4];
42176
+ }
42177
+ let t3;
42178
+ let t4;
42179
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
42180
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(TimecodeToolboxLogo, {
42181
+ className: "h-[20%] max-h-[420px] min-h-[110px] w-full"
42182
+ });
42183
+ t4 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h2", {
42184
+ className: "text-center text-sigil-usage-hint-foreground",
42185
+ children: STRINGS.licensePrompt
42186
+ });
42187
+ $[5] = t3;
42188
+ $[6] = t4;
42189
+ } else {
42190
+ t3 = $[5];
42191
+ t4 = $[6];
42192
+ }
42193
+ let t5;
42194
+ if ($[7] !== info.license) {
42195
+ t5 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(LicenseContent, {
42196
+ license: info.license
42197
+ });
42198
+ $[7] = info.license;
42199
+ $[8] = t5;
42200
+ } else {
42201
+ t5 = $[8];
42202
+ }
42203
+ let t6;
42204
+ if ($[9] !== acceptLicense) {
42205
+ t6 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", {
42206
+ className: "flex justify-center p-2",
42207
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ControlButton, {
42208
+ onClick: acceptLicense,
42209
+ variant: "large",
42210
+ icon: "check",
42211
+ primary: true,
42212
+ children: STRINGS.acceptLicense
42213
+ })
42214
+ });
42215
+ $[9] = acceptLicense;
42216
+ $[10] = t6;
42217
+ } else {
42218
+ t6 = $[10];
42219
+ }
42220
+ let t7;
42221
+ if ($[11] !== t5 || $[12] !== t6) {
42222
+ t7 = /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Layout, {
42223
+ footer: true,
42224
+ modes: t2,
42225
+ children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", {
42226
+ className: "\n flex grow basis-0 flex-col overflow-y-auto px-2 pb-2 scrollbar-sigil\n ",
42227
+ children: [t3, t4, t5, t6]
42228
+ })
42229
+ });
42230
+ $[11] = t5;
42231
+ $[12] = t6;
42232
+ $[13] = t7;
42233
+ } else {
42234
+ t7 = $[13];
42235
+ }
42236
+ return t7;
42237
+ };
42238
+ function _temp4(paragraph, index2) {
42239
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", {
42240
+ className: "m-0",
42241
+ children: paragraph.replace(/\n/g, " ").trim()
42242
+ }, index2);
42243
+ }
42244
+ function _temp23() {
42245
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Debugger, {
42246
+ title: STRINGS.debugger,
42247
+ className: "size-full"
42248
+ });
42249
+ }
42250
+
42251
+ // src/components/frontend/toolbox/core/updates.tsx
42252
+ var import_compiler_runtime19 = __toESM(require_compiler_runtime());
42253
+ var import_react42 = __toESM(require_react());
42254
+ var import_jsx_runtime54 = __toESM(require_jsx_runtime());
42255
+ var UpdateBanner = () => {
42256
+ const $ = (0, import_compiler_runtime19.c)(19);
42257
+ const {
42258
+ updates
42259
+ } = useApplicationState();
42260
+ const {
42261
+ version
42262
+ } = useSystemInformation();
42263
+ const {
42264
+ openExternalLink
42265
+ } = useBrowserContext();
42266
+ const [displayState, setDisplayState] = (0, import_react42.useState)();
42267
+ let t0;
42268
+ let t1;
42269
+ if ($[0] !== updates) {
42270
+ t0 = () => {
42271
+ if (updates?.type !== "loading") {
42272
+ setDisplayState(updates);
42273
+ }
42274
+ };
42275
+ t1 = [updates];
42276
+ $[0] = updates;
42277
+ $[1] = t0;
42278
+ $[2] = t1;
42279
+ } else {
42280
+ t0 = $[1];
42281
+ t1 = $[2];
42282
+ }
42283
+ (0, import_react42.useEffect)(t0, t1);
42284
+ let t2;
42285
+ if ($[3] !== displayState || $[4] !== openExternalLink) {
42286
+ t2 = () => {
42287
+ if (displayState?.type === "updates-available" && displayState.response.downloadUrl) {
42288
+ openExternalLink(displayState.response.downloadUrl);
42289
+ }
42290
+ };
42291
+ $[3] = displayState;
42292
+ $[4] = openExternalLink;
42293
+ $[5] = t2;
42294
+ } else {
42295
+ t2 = $[5];
42296
+ }
42297
+ const openDownloadLink = t2;
42298
+ if (displayState?.type === "error") {
42299
+ let t3;
42300
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
42301
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon2, {
42302
+ icon: "error"
42303
+ });
42304
+ $[6] = t3;
42305
+ } else {
42306
+ t3 = $[6];
42307
+ }
42308
+ let t4;
42309
+ if ($[7] !== displayState.error) {
42310
+ t4 = /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", {
42311
+ className: "\n flex items-center justify-center gap-2 border-b\n border-sigil-usage-orange-border bg-sigil-usage-orange-background p-1\n text-sigil-usage-orange-text\n ",
42312
+ children: [t3, displayState.error]
42313
+ });
42314
+ $[7] = displayState.error;
42315
+ $[8] = t4;
42316
+ } else {
42317
+ t4 = $[8];
42318
+ }
42319
+ return t4;
42320
+ }
42321
+ if (displayState?.type === "updates-available") {
42322
+ let t3;
42323
+ if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
42324
+ t3 = /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon2, {
42325
+ icon: "upgrade"
42326
+ });
42327
+ $[9] = t3;
42328
+ } else {
42329
+ t3 = $[9];
42330
+ }
42331
+ let t4;
42332
+ if ($[10] !== displayState.response.latestVersion || $[11] !== version) {
42333
+ t4 = STRINGS.updates.updateAvailable(version, displayState.response.latestVersion);
42334
+ $[10] = displayState.response.latestVersion;
42335
+ $[11] = version;
42336
+ $[12] = t4;
42337
+ } else {
42338
+ t4 = $[12];
42339
+ }
42340
+ let t5;
42341
+ if ($[13] !== displayState.response.downloadUrl || $[14] !== openDownloadLink) {
42342
+ t5 = displayState.response.downloadUrl && /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("button", {
42343
+ className: "\n flex cursor-pointer items-center gap-0.5 rounded-md border\n border-sigil-usage-blue-selected-border\n bg-sigil-usage-blue-selected-background px-1 py-0.5\n text-sigil-usage-blue-text\n hover:bg-sigil-usage-blue-selected-border\n ",
42344
+ onClick: openDownloadLink,
42345
+ children: [/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(Icon2, {
42346
+ icon: "download"
42347
+ }), STRINGS.updates.download]
42348
+ });
42349
+ $[13] = displayState.response.downloadUrl;
42350
+ $[14] = openDownloadLink;
42351
+ $[15] = t5;
42352
+ } else {
42353
+ t5 = $[15];
42354
+ }
42355
+ let t6;
42356
+ if ($[16] !== t4 || $[17] !== t5) {
42357
+ t6 = /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", {
42358
+ className: "\n flex items-center justify-center gap-2 border-b\n border-sigil-usage-blue-border bg-sigil-usage-blue-background p-1\n text-sigil-usage-blue-text\n ",
42359
+ children: [t3, t4, t5]
42360
+ });
42361
+ $[16] = t4;
42362
+ $[17] = t5;
42363
+ $[18] = t6;
42364
+ } else {
42365
+ t6 = $[18];
42366
+ }
42367
+ return t6;
42368
+ }
42369
+ return null;
42370
+ };
42371
+
42372
+ // src/components/frontend/toolbox/root.tsx
42373
+ var import_jsx_runtime55 = __toESM(require_jsx_runtime());
42374
+ var ToolboxRoot = (t0) => {
42375
+ const $ = (0, import_compiler_runtime20.c)(43);
42376
+ const {
42377
+ info
42378
+ } = t0;
42379
+ const {
42380
+ config
42381
+ } = info;
42382
+ const {
42383
+ sendMessage,
42384
+ call
42385
+ } = (0, import_react43.useContext)(StageContext);
42386
+ const [dialogMode, setDialogMode] = (0, import_react43.useState)(null);
42387
+ const [assignToOutput, setAssignToOutput] = (0, import_react43.useState)(null);
42388
+ let t1;
41317
42389
  let t2;
41318
42390
  if ($[0] !== assignToOutput) {
41319
42391
  t1 = () => {
@@ -41337,7 +42409,7 @@ Data Directory: ${system.dataDirectory}`
41337
42409
  t1 = $[1];
41338
42410
  t2 = $[2];
41339
42411
  }
41340
- (0, import_react39.useEffect)(t1, t2);
42412
+ (0, import_react43.useEffect)(t1, t2);
41341
42413
  let t3;
41342
42414
  if ($[3] !== config || $[4] !== info.key || $[5] !== sendMessage) {
41343
42415
  t3 = (change) => {
@@ -41505,237 +42577,142 @@ Data Directory: ${system.dataDirectory}`
41505
42577
  }
41506
42578
  t14 = t15;
41507
42579
  const windowedTimecodeId = t14;
41508
- const isMainWindow = windowedTimecodeId === null;
41509
42580
  let t16;
41510
42581
  let t17;
41511
- if ($[26] === Symbol.for("react.memo_cache_sentinel")) {
41512
- t17 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", {
41513
- className: "\n flex h-full min-h-[36px] grow items-center justify-center px-1\n app-title-bar\n ",
41514
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", {
41515
- className: "font-bold text-hint-gradient",
41516
- children: STRINGS.title
41517
- })
41518
- });
41519
- $[26] = t17;
41520
- } else {
41521
- t17 = $[26];
41522
- }
41523
- let t18;
41524
- if ($[27] !== windowMode) {
41525
- t18 = isMainWindow && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, {
41526
- children: [/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ToolbarDivider, {}), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ControlButton, {
41527
- onClick: () => setWindowMode(_temp4),
41528
- variant: "titlebar",
41529
- icon: "settings",
41530
- active: windowMode === "settings",
41531
- title: STRINGS.toggle(STRINGS.settings.title)
41532
- }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ControlButton, {
41533
- onClick: () => setWindowMode(_temp23),
41534
- variant: "titlebar",
41535
- icon: "bug_report",
41536
- active: windowMode === "debug",
41537
- title: STRINGS.toggle(STRINGS.debugger)
41538
- })]
41539
- });
41540
- $[27] = windowMode;
41541
- $[28] = t18;
41542
- } else {
41543
- t18 = $[28];
41544
- }
41545
- let t19;
41546
- if ($[29] !== t18) {
41547
- t19 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ToolbarWrapper, {
41548
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(ToolbarRow, {
41549
- children: [t17, t18]
42582
+ if ($[26] !== assignToOutput || $[27] !== assignToOutputCallback || $[28] !== dialogMode || $[29] !== info.license) {
42583
+ t17 = windowedTimecodeId ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Layout, {
42584
+ modes: null,
42585
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(FullscreenTimecodeDisplay, {
42586
+ id: windowedTimecodeId
41550
42587
  })
41551
- });
41552
- $[29] = t18;
41553
- $[30] = t19;
41554
- } else {
41555
- t19 = $[30];
41556
- }
41557
- let t20;
41558
- if ($[31] !== assignToOutput || $[32] !== assignToOutputCallback || $[33] !== connection.state || $[34] !== reconnect || $[35] !== windowMode) {
41559
- t20 = connection.state !== "connected" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(SizeAwareDiv, {
41560
- className: "\n flex grow flex-col items-center justify-center gap-1\n bg-sigil-bg-light p-1 text-sigil-foreground-muted\n ",
41561
- children: [/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Icon2, {
41562
- icon: "signal_disconnected",
41563
- className: "text-block-icon"
41564
- }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", {
41565
- className: "text-center",
41566
- children: STRINGS.connectionError
41567
- }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ControlButton, {
41568
- onClick: reconnect,
41569
- variant: "large",
41570
- icon: "replay",
41571
- children: STRINGS.reconnect
41572
- })]
41573
- }) : windowMode === "debug" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Debugger, {
41574
- title: STRINGS.debugger,
41575
- className: "size-full"
41576
- }) : windowMode === "settings" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Settings, {
41577
- setWindowMode
41578
- }) : windowedTimecodeId ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(FullscreenTimecodeDisplay, {
41579
- id: windowedTimecodeId
41580
- }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", {
41581
- className: "\n flex h-0 grow flex-col gap-px overflow-y-auto bg-sigil-border\n scrollbar-sigil\n ",
41582
- children: [/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(InputsSection, {
41583
- setDialogMode,
41584
- assignToOutput: assignToOutputCallback
41585
- }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(GeneratorsSection, {
41586
- setDialogMode,
41587
- assignToOutput: assignToOutputCallback
41588
- }), /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(OutputsSection, {
41589
- setDialogMode,
41590
- assignToOutput,
41591
- setAssignToOutput
41592
- })]
41593
- });
41594
- $[31] = assignToOutput;
41595
- $[32] = assignToOutputCallback;
41596
- $[33] = connection.state;
41597
- $[34] = reconnect;
41598
- $[35] = windowMode;
41599
- $[36] = t20;
41600
- } else {
41601
- t20 = $[36];
41602
- }
41603
- let t21;
41604
- if ($[37] !== dialogMode) {
41605
- t21 = dialogMode?.section.type === "inputs" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(InputSettingsDialog, {
41606
- close: closeDialog,
41607
- input: dialogMode.section.input,
41608
- target: dialogMode.target
41609
- });
41610
- $[37] = dialogMode;
41611
- $[38] = t21;
41612
- } else {
41613
- t21 = $[38];
41614
- }
41615
- let t22;
41616
- if ($[39] !== dialogMode) {
41617
- t22 = dialogMode?.section.type === "generators" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(GeneratorSettingsDialog, {
41618
- close: closeDialog,
41619
- generator: dialogMode.section.generator,
41620
- target: dialogMode.target
41621
- });
41622
- $[39] = dialogMode;
41623
- $[40] = t22;
41624
- } else {
41625
- t22 = $[40];
41626
- }
41627
- let t23;
41628
- if ($[41] !== dialogMode) {
41629
- t23 = dialogMode?.section.type === "outputs" && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(OutputSettingsDialog, {
41630
- close: closeDialog,
41631
- output: dialogMode.section.output,
41632
- target: dialogMode.target
41633
- });
41634
- $[41] = dialogMode;
41635
- $[42] = t23;
41636
- } else {
41637
- t23 = $[42];
41638
- }
41639
- let t24;
41640
- if ($[43] !== t20 || $[44] !== t21 || $[45] !== t22 || $[46] !== t23) {
41641
- t24 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", {
41642
- className: "relative flex h-0 grow flex-col",
41643
- children: [t20, t21, t22, t23]
41644
- });
41645
- $[43] = t20;
41646
- $[44] = t21;
41647
- $[45] = t22;
41648
- $[46] = t23;
41649
- $[47] = t24;
41650
- } else {
41651
- t24 = $[47];
41652
- }
41653
- let t25;
41654
- if ($[48] === Symbol.for("react.memo_cache_sentinel")) {
41655
- t25 = isMainWindow && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", {
41656
- className: "\n flex justify-center border-t border-sigil-border bg-sigil-bg-dark\n p-1 text-[80%]\n ",
41657
- children: ["Created by", "\xA0", /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ExternalLink, {
41658
- href: "https://arcanewizards.com",
41659
- children: "Arcane Wizards"
42588
+ }) : /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, {
42589
+ children: [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Layout, {
42590
+ footer: true,
42591
+ modes: {
42592
+ license: {
42593
+ child: (setWindowMode) => /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(License, {
42594
+ license: info.license,
42595
+ setWindowMode
42596
+ }),
42597
+ icon: "info",
42598
+ title: STRINGS.license
42599
+ },
42600
+ settings: {
42601
+ child: _temp5,
42602
+ icon: "settings",
42603
+ title: STRINGS.settings.title
42604
+ },
42605
+ debug: {
42606
+ child: _temp24,
42607
+ icon: "bug_report",
42608
+ title: STRINGS.debugger
42609
+ }
42610
+ },
42611
+ licenseMode: "license",
42612
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_jsx_runtime55.Fragment, {
42613
+ children: [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(UpdateBanner, {}), /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", {
42614
+ className: "\n flex h-0 grow flex-col gap-px overflow-y-auto bg-sigil-border\n scrollbar-sigil\n ",
42615
+ children: [/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(InputsSection, {
42616
+ setDialogMode,
42617
+ assignToOutput: assignToOutputCallback
42618
+ }), /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(GeneratorsSection, {
42619
+ setDialogMode,
42620
+ assignToOutput: assignToOutputCallback
42621
+ }), /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OutputsSection, {
42622
+ setDialogMode,
42623
+ assignToOutput,
42624
+ setAssignToOutput
42625
+ })]
42626
+ })]
42627
+ })
42628
+ }), dialogMode?.section.type === "inputs" && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(InputSettingsDialog, {
42629
+ close: closeDialog,
42630
+ input: dialogMode.section.input,
42631
+ target: dialogMode.target
42632
+ }), dialogMode?.section.type === "generators" && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(GeneratorSettingsDialog, {
42633
+ close: closeDialog,
42634
+ generator: dialogMode.section.generator,
42635
+ target: dialogMode.target
42636
+ }), dialogMode?.section.type === "outputs" && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(OutputSettingsDialog, {
42637
+ close: closeDialog,
42638
+ output: dialogMode.section.output,
42639
+ target: dialogMode.target
41660
42640
  })]
41661
42641
  });
41662
- $[48] = t25;
41663
- } else {
41664
- t25 = $[48];
41665
- }
41666
- let t26;
41667
- if ($[49] !== t19 || $[50] !== t24) {
41668
- t26 = /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", {
41669
- className: "flex h-screen flex-col",
41670
- children: [t19, t24, t25]
41671
- });
41672
- $[49] = t19;
41673
- $[50] = t24;
41674
- $[51] = t26;
42642
+ $[26] = assignToOutput;
42643
+ $[27] = assignToOutputCallback;
42644
+ $[28] = dialogMode;
42645
+ $[29] = info.license;
42646
+ $[30] = t17;
41675
42647
  } else {
41676
- t26 = $[51];
42648
+ t17 = $[30];
41677
42649
  }
41678
- t16 = t26;
42650
+ t16 = t17;
41679
42651
  const root = t16;
41680
- let t27;
41681
- if ($[52] !== handlers || $[53] !== root) {
41682
- t27 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ApplicationHandlersContext.Provider, {
42652
+ let t18;
42653
+ if ($[31] !== handlers || $[32] !== root) {
42654
+ t18 = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ApplicationHandlersContext.Provider, {
41683
42655
  value: handlers,
41684
42656
  children: root
41685
42657
  });
41686
- $[52] = handlers;
41687
- $[53] = root;
41688
- $[54] = t27;
42658
+ $[31] = handlers;
42659
+ $[32] = root;
42660
+ $[33] = t18;
41689
42661
  } else {
41690
- t27 = $[54];
42662
+ t18 = $[33];
41691
42663
  }
41692
- let t28;
41693
- if ($[55] !== info.state || $[56] !== t27) {
41694
- t28 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ApplicationStateContext.Provider, {
42664
+ let t19;
42665
+ if ($[34] !== info.state || $[35] !== t18) {
42666
+ t19 = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ApplicationStateContext.Provider, {
41695
42667
  value: info.state,
41696
- children: t27
42668
+ children: t18
41697
42669
  });
41698
- $[55] = info.state;
41699
- $[56] = t27;
41700
- $[57] = t28;
42670
+ $[34] = info.state;
42671
+ $[35] = t18;
42672
+ $[36] = t19;
41701
42673
  } else {
41702
- t28 = $[57];
42674
+ t19 = $[36];
41703
42675
  }
41704
- let t29;
41705
- if ($[58] !== networkContextValue || $[59] !== t28) {
41706
- t29 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(NetworkContext.Provider, {
42676
+ let t20;
42677
+ if ($[37] !== networkContextValue || $[38] !== t19) {
42678
+ t20 = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(NetworkContext.Provider, {
41707
42679
  value: networkContextValue,
41708
- children: t28
42680
+ children: t19
41709
42681
  });
41710
- $[58] = networkContextValue;
41711
- $[59] = t28;
41712
- $[60] = t29;
42682
+ $[37] = networkContextValue;
42683
+ $[38] = t19;
42684
+ $[39] = t20;
41713
42685
  } else {
41714
- t29 = $[60];
42686
+ t20 = $[39];
41715
42687
  }
41716
- let t30;
41717
- if ($[61] !== configContext || $[62] !== t29) {
41718
- t30 = /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ConfigContext.Provider, {
42688
+ let t21;
42689
+ if ($[40] !== configContext || $[41] !== t20) {
42690
+ t21 = /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(ConfigContext.Provider, {
41719
42691
  value: configContext,
41720
- children: t29
42692
+ children: t20
41721
42693
  });
41722
- $[61] = configContext;
41723
- $[62] = t29;
41724
- $[63] = t30;
42694
+ $[40] = configContext;
42695
+ $[41] = t20;
42696
+ $[42] = t21;
41725
42697
  } else {
41726
- t30 = $[63];
42698
+ t21 = $[42];
41727
42699
  }
41728
- return t30;
42700
+ return t21;
41729
42701
  };
41730
- function _temp4(mode) {
41731
- return mode === "settings" ? null : "settings";
42702
+ function _temp5(setWindowMode_0) {
42703
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Settings, {
42704
+ setWindowMode: setWindowMode_0
42705
+ });
41732
42706
  }
41733
- function _temp23(mode_0) {
41734
- return mode_0 === "debug" ? null : "debug";
42707
+ function _temp24() {
42708
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Debugger, {
42709
+ title: STRINGS.debugger,
42710
+ className: "size-full"
42711
+ });
41735
42712
  }
41736
42713
 
41737
42714
  // src/components/frontend/index.tsx
41738
- var import_jsx_runtime51 = __toESM(require_jsx_runtime());
42715
+ var import_jsx_runtime56 = __toESM(require_jsx_runtime());
41739
42716
  var timecodeToolboxFrontendComponents = () => ({
41740
42717
  namespace: NAMESPACE,
41741
42718
  render: (info) => {
@@ -41744,7 +42721,11 @@ Data Directory: ${system.dataDirectory}`
41744
42721
  }
41745
42722
  switch (info.component) {
41746
42723
  case "toolbox-root":
41747
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(ToolboxRoot, {
42724
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ToolboxRoot, {
42725
+ info
42726
+ });
42727
+ case "license-gate":
42728
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(LicenseGate, {
41748
42729
  info
41749
42730
  });
41750
42731
  }
@@ -41754,7 +42735,7 @@ Data Directory: ${system.dataDirectory}`
41754
42735
  startSigilFrontend({
41755
42736
  browser,
41756
42737
  appRenderers: [timecodeToolboxFrontendComponents()],
41757
- loadingState: () => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", {
42738
+ loadingState: () => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", {
41758
42739
  style: {
41759
42740
  width: "100%",
41760
42741
  textAlign: "center",