@arcanewizards/timecode-toolbox 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +77 -0
- package/dist/components/frontend/index.js +1035 -442
- package/dist/components/frontend/index.mjs +884 -291
- package/dist/entrypoint.css +163 -53
- package/dist/entrypoint.js +1769 -788
- package/dist/entrypoint.js.map +4 -4
- package/dist/frontend.js +1769 -788
- package/dist/frontend.js.map +4 -4
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +346 -76
- package/dist/index.mjs +348 -69
- package/dist/start.d.mts +1 -2
- package/dist/start.d.ts +1 -2
- package/dist/start.js +349 -77
- package/dist/start.mjs +351 -70
- package/package.json +12 -6
- package/.turbo/turbo-build.log +0 -58
- package/.turbo/turbo-lint.log +0 -4
- package/CHANGELOG.md +0 -40
- package/eslint.config.mjs +0 -49
- package/src/app.tsx +0 -147
- package/src/components/backend/index.ts +0 -6
- package/src/components/backend/toolbox-root.ts +0 -119
- package/src/components/frontend/constants.ts +0 -81
- package/src/components/frontend/entrypoint.ts +0 -12
- package/src/components/frontend/frontend.css +0 -108
- package/src/components/frontend/index.tsx +0 -46
- package/src/components/frontend/toolbox/content.tsx +0 -45
- package/src/components/frontend/toolbox/context.tsx +0 -63
- package/src/components/frontend/toolbox/core/size-aware-div.tsx +0 -51
- package/src/components/frontend/toolbox/core/timecode-display.tsx +0 -592
- package/src/components/frontend/toolbox/generators.tsx +0 -318
- package/src/components/frontend/toolbox/inputs.tsx +0 -484
- package/src/components/frontend/toolbox/outputs.tsx +0 -581
- package/src/components/frontend/toolbox/preferences.ts +0 -25
- package/src/components/frontend/toolbox/root.tsx +0 -335
- package/src/components/frontend/toolbox/settings.tsx +0 -54
- package/src/components/frontend/toolbox/types.ts +0 -28
- package/src/components/frontend/toolbox/util.tsx +0 -61
- package/src/components/proto.ts +0 -420
- package/src/config.ts +0 -7
- package/src/generators/clock.tsx +0 -206
- package/src/generators/index.tsx +0 -15
- package/src/index.ts +0 -38
- package/src/inputs/artnet.tsx +0 -305
- package/src/inputs/index.tsx +0 -13
- package/src/inputs/tcnet.tsx +0 -272
- package/src/outputs/artnet.tsx +0 -170
- package/src/outputs/index.tsx +0 -11
- package/src/start.ts +0 -47
- package/src/tree.ts +0 -133
- package/src/types.ts +0 -12
- package/src/urls.ts +0 -49
- package/src/util.ts +0 -82
- package/tailwind.config.cjs +0 -7
- package/tsconfig.json +0 -10
- package/tsup.config.ts +0 -10
|
@@ -9873,9 +9873,6 @@ var useLongPressable2 = ({
|
|
|
9873
9873
|
);
|
|
9874
9874
|
};
|
|
9875
9875
|
|
|
9876
|
-
// ../../packages/sigil/dist/chunk-H4U4Z4GM.js
|
|
9877
|
-
var import_react11 = require("react");
|
|
9878
|
-
|
|
9879
9876
|
// ../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js
|
|
9880
9877
|
var external_exports = {};
|
|
9881
9878
|
__export(external_exports, {
|
|
@@ -13920,7 +13917,7 @@ var NEVER = INVALID;
|
|
|
13920
13917
|
// ../../node_modules/.pnpm/zod@3.25.76/node_modules/zod/index.js
|
|
13921
13918
|
var zod_default = external_exports;
|
|
13922
13919
|
|
|
13923
|
-
// ../../packages/sigil/dist/chunk-
|
|
13920
|
+
// ../../packages/sigil/dist/chunk-WYUGJOEB.js
|
|
13924
13921
|
var SIGIL_COLOR = external_exports.enum([
|
|
13925
13922
|
"purple",
|
|
13926
13923
|
"blue",
|
|
@@ -13961,22 +13958,13 @@ var cssSigilColorUsageVariables = (prefix, usage) => cssVariables({
|
|
|
13961
13958
|
[`--${prefix}-gradient-dark`]: usage.gradientDark
|
|
13962
13959
|
});
|
|
13963
13960
|
var cssHintColorVariables = (color) => cssSigilColorUsageVariables(`sigil-usage-hint`, sigilColorUsage(color));
|
|
13964
|
-
var useRootHintVariables = (color) => {
|
|
13965
|
-
(0, import_react11.useEffect)(() => {
|
|
13966
|
-
const root = document.querySelector(".arcane-theme-root");
|
|
13967
|
-
if (!root) return;
|
|
13968
|
-
Object.entries(cssHintColorVariables(color)).forEach(([key, value]) => {
|
|
13969
|
-
root.style.setProperty(key, value);
|
|
13970
|
-
});
|
|
13971
|
-
}, [color]);
|
|
13972
|
-
};
|
|
13973
13961
|
var cssVariables = (variables) => variables;
|
|
13974
13962
|
function cnd(condition, truthyClassName, falseyClassName) {
|
|
13975
13963
|
return condition ? truthyClassName : falseyClassName;
|
|
13976
13964
|
}
|
|
13977
13965
|
|
|
13978
|
-
// ../../packages/sigil/dist/chunk-
|
|
13979
|
-
var
|
|
13966
|
+
// ../../packages/sigil/dist/chunk-E3VUC3Q4.js
|
|
13967
|
+
var import_react11 = require("react");
|
|
13980
13968
|
|
|
13981
13969
|
// ../../node_modules/.pnpm/@arcanejs+toolkit-frontend@0.11.0/node_modules/@arcanejs/toolkit-frontend/dist/chunk-DK4BAXVE.mjs
|
|
13982
13970
|
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
@@ -14014,16 +14002,16 @@ var TRANSPARENCY_SVG = `
|
|
|
14014
14002
|
`;
|
|
14015
14003
|
var TRANSPARENCY_SVG_URI = `data:image/svg+xml,${encodeURIComponent(TRANSPARENCY_SVG)}`;
|
|
14016
14004
|
|
|
14017
|
-
// ../../packages/sigil/dist/chunk-
|
|
14018
|
-
var
|
|
14005
|
+
// ../../packages/sigil/dist/chunk-E3VUC3Q4.js
|
|
14006
|
+
var import_react12 = require("react");
|
|
14019
14007
|
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
14020
|
-
var
|
|
14008
|
+
var import_react13 = require("react");
|
|
14021
14009
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
14022
|
-
var
|
|
14010
|
+
var import_react14 = require("react");
|
|
14023
14011
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
14024
|
-
var
|
|
14012
|
+
var import_react15 = require("react");
|
|
14025
14013
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
14026
|
-
var
|
|
14014
|
+
var import_react16 = require("react");
|
|
14027
14015
|
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
14028
14016
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
14029
14017
|
var clsControlPosition = (position) => {
|
|
@@ -14080,7 +14068,8 @@ var clsControlButton = ({
|
|
|
14080
14068
|
active,
|
|
14081
14069
|
touching,
|
|
14082
14070
|
position,
|
|
14083
|
-
className
|
|
14071
|
+
className,
|
|
14072
|
+
primary
|
|
14084
14073
|
}) => cn(
|
|
14085
14074
|
`sigil-control-button`,
|
|
14086
14075
|
cnd(variant === "border", `sigil-control-button-variant-border`),
|
|
@@ -14092,10 +14081,11 @@ var clsControlButton = ({
|
|
|
14092
14081
|
cnd(touching, `sigil-control-button-touching`),
|
|
14093
14082
|
cnd(active, `sigil-control-button-active`),
|
|
14094
14083
|
cnd(touching && active, `sigil-control-button-active-touching`),
|
|
14084
|
+
cnd(primary, `sigil-control-button-primary`),
|
|
14095
14085
|
clsControlPosition(position),
|
|
14096
14086
|
className
|
|
14097
14087
|
);
|
|
14098
|
-
var ControlButtonFrame = (0,
|
|
14088
|
+
var ControlButtonFrame = (0, import_react12.forwardRef)(
|
|
14099
14089
|
({
|
|
14100
14090
|
children,
|
|
14101
14091
|
className,
|
|
@@ -14108,6 +14098,7 @@ var ControlButtonFrame = (0, import_react13.forwardRef)(
|
|
|
14108
14098
|
title,
|
|
14109
14099
|
tooltipSide,
|
|
14110
14100
|
position,
|
|
14101
|
+
primary,
|
|
14111
14102
|
...props
|
|
14112
14103
|
}, ref) => {
|
|
14113
14104
|
const btn = /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
@@ -14122,6 +14113,7 @@ var ControlButtonFrame = (0, import_react13.forwardRef)(
|
|
|
14122
14113
|
active,
|
|
14123
14114
|
touching,
|
|
14124
14115
|
position,
|
|
14116
|
+
primary,
|
|
14125
14117
|
className
|
|
14126
14118
|
}),
|
|
14127
14119
|
children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { children: [
|
|
@@ -14141,7 +14133,7 @@ var ControlButtonFrame = (0, import_react13.forwardRef)(
|
|
|
14141
14133
|
}
|
|
14142
14134
|
);
|
|
14143
14135
|
ControlButtonFrame.displayName = "ControlButtonFrame";
|
|
14144
|
-
var ControlButton = (0,
|
|
14136
|
+
var ControlButton = (0, import_react12.forwardRef)(
|
|
14145
14137
|
({ onClick, disabled, ...props }, ref) => {
|
|
14146
14138
|
const { handlers, touching } = usePressable2(onClick);
|
|
14147
14139
|
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
@@ -14157,12 +14149,12 @@ var ControlButton = (0, import_react13.forwardRef)(
|
|
|
14157
14149
|
}
|
|
14158
14150
|
);
|
|
14159
14151
|
ControlButton.displayName = "ControlButton";
|
|
14160
|
-
var CheckboxControlButton = (0,
|
|
14152
|
+
var CheckboxControlButton = (0, import_react12.forwardRef)(({ active, label, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(ControlButton, { ...props, ref, active, children: [
|
|
14161
14153
|
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon2, { icon: active ? "check_box" : "check_box_outline_blank" }),
|
|
14162
14154
|
label
|
|
14163
14155
|
] }));
|
|
14164
14156
|
CheckboxControlButton.displayName = "CheckboxControlButton";
|
|
14165
|
-
var LongPressableControlButton = (0,
|
|
14157
|
+
var LongPressableControlButton = (0, import_react12.forwardRef)(({ active, disabled, onPress, onRelease, ...props }, ref) => {
|
|
14166
14158
|
const { handlers, touching } = useLongPressable2({ onPress, onRelease });
|
|
14167
14159
|
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14168
14160
|
ControlButtonFrame,
|
|
@@ -14176,7 +14168,7 @@ var LongPressableControlButton = (0, import_react13.forwardRef)(({ active, disab
|
|
|
14176
14168
|
);
|
|
14177
14169
|
});
|
|
14178
14170
|
LongPressableControlButton.displayName = "LongPressableControlButton";
|
|
14179
|
-
var ControlButtonGroup = (0,
|
|
14171
|
+
var ControlButtonGroup = (0, import_react12.forwardRef)(({ children, className, position, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
14180
14172
|
"div",
|
|
14181
14173
|
{
|
|
14182
14174
|
...props,
|
|
@@ -14193,7 +14185,7 @@ var ControlButtonGroup = (0, import_react13.forwardRef)(({ children, className,
|
|
|
14193
14185
|
}
|
|
14194
14186
|
));
|
|
14195
14187
|
ControlButtonGroup.displayName = "ControlButtonGroup";
|
|
14196
|
-
var ControlParagraph = (0,
|
|
14188
|
+
var ControlParagraph = (0, import_react13.forwardRef)(({ className, mode, position = "all", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14197
14189
|
"p",
|
|
14198
14190
|
{
|
|
14199
14191
|
...props,
|
|
@@ -14228,7 +14220,7 @@ var ControlParagraph = (0, import_react14.forwardRef)(({ className, mode, positi
|
|
|
14228
14220
|
}
|
|
14229
14221
|
));
|
|
14230
14222
|
ControlParagraph.displayName = "ControlParagraph";
|
|
14231
|
-
var ControlLabel = (0,
|
|
14223
|
+
var ControlLabel = (0, import_react13.forwardRef)(
|
|
14232
14224
|
({ className, disabled, nonMicro, position = "label", subgrid, ...props }, ref) => {
|
|
14233
14225
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14234
14226
|
"div",
|
|
@@ -14248,7 +14240,7 @@ var ControlLabel = (0, import_react14.forwardRef)(
|
|
|
14248
14240
|
}
|
|
14249
14241
|
);
|
|
14250
14242
|
ControlLabel.displayName = "ControlLabel";
|
|
14251
|
-
var ControlDetails = (0,
|
|
14243
|
+
var ControlDetails = (0, import_react13.forwardRef)(
|
|
14252
14244
|
({ align, className, position = "all", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14253
14245
|
"div",
|
|
14254
14246
|
{
|
|
@@ -14266,7 +14258,7 @@ var ControlDetails = (0, import_react14.forwardRef)(
|
|
|
14266
14258
|
)
|
|
14267
14259
|
);
|
|
14268
14260
|
ControlDetails.displayName = "ControlDetails";
|
|
14269
|
-
var InputSpanningTitle = (0,
|
|
14261
|
+
var InputSpanningTitle = (0, import_react13.forwardRef)(({ className, position = "row", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
14270
14262
|
"div",
|
|
14271
14263
|
{
|
|
14272
14264
|
...props,
|
|
@@ -14279,7 +14271,7 @@ var InputSpanningTitle = (0, import_react14.forwardRef)(({ className, position =
|
|
|
14279
14271
|
}
|
|
14280
14272
|
));
|
|
14281
14273
|
InputSpanningTitle.displayName = "InputSpanningTitle";
|
|
14282
|
-
var ControlDialogButtons = (0,
|
|
14274
|
+
var ControlDialogButtons = (0, import_react14.forwardRef)(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
14283
14275
|
ControlButtonGroup,
|
|
14284
14276
|
{
|
|
14285
14277
|
ref,
|
|
@@ -14309,15 +14301,15 @@ var InputWithDelayedPropagation = ({
|
|
|
14309
14301
|
inputRef: inputRefProp,
|
|
14310
14302
|
...props
|
|
14311
14303
|
}) => {
|
|
14312
|
-
const lastValue = (0,
|
|
14313
|
-
const inputRef = (0,
|
|
14314
|
-
(0,
|
|
14304
|
+
const lastValue = (0, import_react15.useRef)(value);
|
|
14305
|
+
const inputRef = (0, import_react15.useRef)(null);
|
|
14306
|
+
(0, import_react15.useEffect)(() => {
|
|
14315
14307
|
if (inputRef.current && inputRef.current.value !== value) {
|
|
14316
14308
|
inputRef.current.value = value;
|
|
14317
14309
|
}
|
|
14318
14310
|
lastValue.current = value;
|
|
14319
14311
|
}, [value]);
|
|
14320
|
-
const updateRef = (0,
|
|
14312
|
+
const updateRef = (0, import_react15.useCallback)(
|
|
14321
14313
|
(instance) => {
|
|
14322
14314
|
inputRef.current = instance;
|
|
14323
14315
|
if (inputRefProp) {
|
|
@@ -14327,7 +14319,7 @@ var InputWithDelayedPropagation = ({
|
|
|
14327
14319
|
[inputRefProp]
|
|
14328
14320
|
);
|
|
14329
14321
|
const onBlurProp = props.onBlur;
|
|
14330
|
-
const onBlur = (0,
|
|
14322
|
+
const onBlur = (0, import_react15.useCallback)(
|
|
14331
14323
|
(e) => {
|
|
14332
14324
|
if (e.currentTarget.value !== lastValue.current) {
|
|
14333
14325
|
onChange(e.currentTarget.value, false);
|
|
@@ -14337,7 +14329,7 @@ var InputWithDelayedPropagation = ({
|
|
|
14337
14329
|
[onChange, onBlurProp]
|
|
14338
14330
|
);
|
|
14339
14331
|
const onKeyUpProp = props.onKeyUp;
|
|
14340
|
-
const onKeyUp = (0,
|
|
14332
|
+
const onKeyUp = (0, import_react15.useCallback)(
|
|
14341
14333
|
(e) => {
|
|
14342
14334
|
if ((e.key === "Enter" || e.key.startsWith("Arrow")) && e.currentTarget.value !== lastValue.current) {
|
|
14343
14335
|
onChange(e.currentTarget.value, true);
|
|
@@ -14404,7 +14396,7 @@ var ControlSelect = ({
|
|
|
14404
14396
|
triggerClassName: className
|
|
14405
14397
|
}) => {
|
|
14406
14398
|
const selectedOption = options.find((option2) => option2.value === value);
|
|
14407
|
-
const onValueChange = (0,
|
|
14399
|
+
const onValueChange = (0, import_react16.useCallback)(
|
|
14408
14400
|
(val) => {
|
|
14409
14401
|
const matchingOption = options.find(
|
|
14410
14402
|
(option2) => (option2.value ?? NULL_VALUE) === val
|
|
@@ -14559,7 +14551,7 @@ var ControlColorSelect = ({
|
|
|
14559
14551
|
);
|
|
14560
14552
|
};
|
|
14561
14553
|
var isDarkDialog = (variant) => variant === "dark" || variant === "dark-compact";
|
|
14562
|
-
var DialogContext = (0,
|
|
14554
|
+
var DialogContext = (0, import_react11.createContext)({
|
|
14563
14555
|
createDialog: () => {
|
|
14564
14556
|
throw new Error("DialogContext not provided");
|
|
14565
14557
|
},
|
|
@@ -14570,7 +14562,7 @@ var DialogContext = (0, import_react12.createContext)({
|
|
|
14570
14562
|
throw new Error("DialogContext not provided");
|
|
14571
14563
|
}
|
|
14572
14564
|
});
|
|
14573
|
-
var DialogTitle = (0,
|
|
14565
|
+
var DialogTitle = (0, import_react11.forwardRef)(
|
|
14574
14566
|
({ className, variant = "light", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
14575
14567
|
"div",
|
|
14576
14568
|
{
|
|
@@ -14588,7 +14580,7 @@ var DialogTitle = (0, import_react12.forwardRef)(
|
|
|
14588
14580
|
)
|
|
14589
14581
|
);
|
|
14590
14582
|
DialogTitle.displayName = "DialogTitle";
|
|
14591
|
-
var DialogButtons = (0,
|
|
14583
|
+
var DialogButtons = (0, import_react11.forwardRef)(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
14592
14584
|
"div",
|
|
14593
14585
|
{
|
|
14594
14586
|
...props,
|
|
@@ -14604,8 +14596,8 @@ var Dialog = ({
|
|
|
14604
14596
|
title,
|
|
14605
14597
|
variant = "light"
|
|
14606
14598
|
}) => {
|
|
14607
|
-
const [dialogRef, setDialogRef] = (0,
|
|
14608
|
-
(0,
|
|
14599
|
+
const [dialogRef, setDialogRef] = (0, import_react11.useState)(null);
|
|
14600
|
+
(0, import_react11.useEffect)(() => {
|
|
14609
14601
|
if (!dialogRef) return;
|
|
14610
14602
|
dialogRef.showModal();
|
|
14611
14603
|
}, [dialogRef]);
|
|
@@ -14664,27 +14656,27 @@ var Dialog = ({
|
|
|
14664
14656
|
var isCoreComponent = (component) => component.namespace === "core";
|
|
14665
14657
|
|
|
14666
14658
|
// ../../node_modules/.pnpm/@arcanejs+toolkit-frontend@0.11.0/node_modules/@arcanejs/toolkit-frontend/dist/components/index.mjs
|
|
14667
|
-
var
|
|
14668
|
-
var
|
|
14659
|
+
var import_react17 = __toESM(require("react"), 1);
|
|
14660
|
+
var import_react18 = require("react");
|
|
14669
14661
|
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
14662
|
+
var import_react19 = __toESM(require("react"), 1);
|
|
14670
14663
|
var import_react20 = __toESM(require("react"), 1);
|
|
14671
|
-
var import_react21 = __toESM(require("react"), 1);
|
|
14672
14664
|
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
14673
14665
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
14674
14666
|
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
14675
14667
|
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
14676
|
-
var
|
|
14668
|
+
var import_react21 = __toESM(require("react"), 1);
|
|
14677
14669
|
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
14678
|
-
var
|
|
14670
|
+
var import_react22 = __toESM(require("react"), 1);
|
|
14679
14671
|
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
14680
|
-
var
|
|
14672
|
+
var import_react23 = __toESM(require("react"), 1);
|
|
14681
14673
|
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
14682
|
-
var
|
|
14674
|
+
var import_react24 = __toESM(require("react"), 1);
|
|
14683
14675
|
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
14684
|
-
var
|
|
14676
|
+
var import_react25 = __toESM(require("react"), 1);
|
|
14685
14677
|
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
14686
14678
|
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
14687
|
-
var StageContext = (0,
|
|
14679
|
+
var StageContext = (0, import_react18.createContext)(
|
|
14688
14680
|
new Proxy({}, {
|
|
14689
14681
|
get: () => {
|
|
14690
14682
|
throw new Error("Missing StageContext.Provider");
|
|
@@ -14692,8 +14684,8 @@ var StageContext = (0, import_react19.createContext)(
|
|
|
14692
14684
|
})
|
|
14693
14685
|
);
|
|
14694
14686
|
var Button = (props) => {
|
|
14695
|
-
const { call } =
|
|
14696
|
-
const [localState, setLocalState] =
|
|
14687
|
+
const { call } = import_react17.default.useContext(StageContext);
|
|
14688
|
+
const [localState, setLocalState] = import_react17.default.useState(null);
|
|
14697
14689
|
const state = localState ?? props.info.state;
|
|
14698
14690
|
const { touching, handlers } = usePressable(async () => {
|
|
14699
14691
|
try {
|
|
@@ -14764,9 +14756,9 @@ function nextColor(currentColor) {
|
|
|
14764
14756
|
return "dark";
|
|
14765
14757
|
}
|
|
14766
14758
|
}
|
|
14767
|
-
var LastNestedColor =
|
|
14759
|
+
var LastNestedColor = import_react20.default.createContext("dark");
|
|
14768
14760
|
var NestedContent = ({ className, children }) => {
|
|
14769
|
-
const color =
|
|
14761
|
+
const color = import_react20.default.useContext(LastNestedColor);
|
|
14770
14762
|
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
14771
14763
|
"div",
|
|
14772
14764
|
{
|
|
@@ -14782,7 +14774,7 @@ var NestedContent = ({ className, children }) => {
|
|
|
14782
14774
|
);
|
|
14783
14775
|
};
|
|
14784
14776
|
NestedContent.displayName = "NestedContent";
|
|
14785
|
-
var GroupStateContext =
|
|
14777
|
+
var GroupStateContext = import_react19.default.createContext({
|
|
14786
14778
|
isCollapsed: () => {
|
|
14787
14779
|
throw new Error("missing GroupStateContext");
|
|
14788
14780
|
},
|
|
@@ -14791,9 +14783,9 @@ var GroupStateContext = import_react20.default.createContext({
|
|
|
14791
14783
|
}
|
|
14792
14784
|
});
|
|
14793
14785
|
var Group2 = ({ className, info }) => {
|
|
14794
|
-
const groupState = (0,
|
|
14795
|
-
const { renderComponent, sendMessage } = (0,
|
|
14796
|
-
const [editingTitle, setEditingTitle] = (0,
|
|
14786
|
+
const groupState = (0, import_react19.useContext)(GroupStateContext);
|
|
14787
|
+
const { renderComponent, sendMessage } = (0, import_react19.useContext)(StageContext);
|
|
14788
|
+
const [editingTitle, setEditingTitle] = (0, import_react19.useState)(false);
|
|
14797
14789
|
const children = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
14798
14790
|
"div",
|
|
14799
14791
|
{
|
|
@@ -14984,16 +14976,16 @@ var getRelativeCursorPosition = (elem, pageX) => {
|
|
|
14984
14976
|
return pageX - rect.left;
|
|
14985
14977
|
};
|
|
14986
14978
|
var SliderButton = ({ info, className }) => {
|
|
14987
|
-
const { sendMessage } =
|
|
14988
|
-
const [state, setState] =
|
|
14989
|
-
const input =
|
|
14979
|
+
const { sendMessage } = import_react21.default.useContext(StageContext);
|
|
14980
|
+
const [state, setState] = import_react21.default.useState({ state: "closed" });
|
|
14981
|
+
const input = import_react21.default.useRef(null);
|
|
14990
14982
|
const displayValue = (value2) => {
|
|
14991
14983
|
if (info.max === 1 && info.min === 0) {
|
|
14992
14984
|
return `${Math.round(value2 * 100)}%`;
|
|
14993
14985
|
}
|
|
14994
14986
|
return NUMBER_FORMATTER.format(value2);
|
|
14995
14987
|
};
|
|
14996
|
-
const sendValue = (0,
|
|
14988
|
+
const sendValue = (0, import_react21.useCallback)(
|
|
14997
14989
|
(value2) => sendMessage?.({
|
|
14998
14990
|
type: "component-message",
|
|
14999
14991
|
namespace: "core",
|
|
@@ -15003,7 +14995,7 @@ var SliderButton = ({ info, className }) => {
|
|
|
15003
14995
|
}),
|
|
15004
14996
|
[sendMessage, info.key]
|
|
15005
14997
|
);
|
|
15006
|
-
const sanitizeValue = (0,
|
|
14998
|
+
const sanitizeValue = (0, import_react21.useCallback)(
|
|
15007
14999
|
(value2) => {
|
|
15008
15000
|
const i = Math.round((value2 - info.min) / info.step);
|
|
15009
15001
|
const v = i * info.step + info.min;
|
|
@@ -15011,13 +15003,13 @@ var SliderButton = ({ info, className }) => {
|
|
|
15011
15003
|
},
|
|
15012
15004
|
[info.min, info.max, info.step]
|
|
15013
15005
|
);
|
|
15014
|
-
const getNewValue = (0,
|
|
15006
|
+
const getNewValue = (0, import_react21.useCallback)(
|
|
15015
15007
|
(startValue, diff) => {
|
|
15016
15008
|
return sanitizeValue((startValue || 0) + diff);
|
|
15017
15009
|
},
|
|
15018
15010
|
[sanitizeValue]
|
|
15019
15011
|
);
|
|
15020
|
-
const getCurrentInputValue = (0,
|
|
15012
|
+
const getCurrentInputValue = (0, import_react21.useCallback)(
|
|
15021
15013
|
(e) => {
|
|
15022
15014
|
const float = parseFloat(e.currentTarget.value);
|
|
15023
15015
|
return sanitizeValue(isNaN(float) ? info.value || 0 : float);
|
|
@@ -15205,9 +15197,9 @@ var SliderButton = ({ info, className }) => {
|
|
|
15205
15197
|
);
|
|
15206
15198
|
};
|
|
15207
15199
|
var Switch = ({ className, info }) => {
|
|
15208
|
-
const { sendMessage } =
|
|
15209
|
-
const [touching, setTouching] = (0,
|
|
15210
|
-
const onClick = (0,
|
|
15200
|
+
const { sendMessage } = import_react22.default.useContext(StageContext);
|
|
15201
|
+
const [touching, setTouching] = (0, import_react22.useState)(false);
|
|
15202
|
+
const onClick = (0, import_react22.useMemo)(
|
|
15211
15203
|
() => () => {
|
|
15212
15204
|
sendMessage?.({
|
|
15213
15205
|
type: "component-message",
|
|
@@ -15218,14 +15210,14 @@ var Switch = ({ className, info }) => {
|
|
|
15218
15210
|
},
|
|
15219
15211
|
[sendMessage, info.key]
|
|
15220
15212
|
);
|
|
15221
|
-
const onTouchStart = (0,
|
|
15213
|
+
const onTouchStart = (0, import_react22.useMemo)(
|
|
15222
15214
|
() => (event) => {
|
|
15223
15215
|
event.preventDefault();
|
|
15224
15216
|
setTouching(true);
|
|
15225
15217
|
},
|
|
15226
15218
|
[]
|
|
15227
15219
|
);
|
|
15228
|
-
const onTouchEnd = (0,
|
|
15220
|
+
const onTouchEnd = (0, import_react22.useMemo)(
|
|
15229
15221
|
() => (event) => {
|
|
15230
15222
|
event.preventDefault();
|
|
15231
15223
|
setTouching(false);
|
|
@@ -15323,9 +15315,9 @@ var Switch = ({ className, info }) => {
|
|
|
15323
15315
|
);
|
|
15324
15316
|
};
|
|
15325
15317
|
var Tabs = (props) => {
|
|
15326
|
-
const { renderComponent } =
|
|
15327
|
-
const [touching, setTouching] =
|
|
15328
|
-
const [currentTab, setCurrentTab] =
|
|
15318
|
+
const { renderComponent } = import_react23.default.useContext(StageContext);
|
|
15319
|
+
const [touching, setTouching] = import_react23.default.useState(null);
|
|
15320
|
+
const [currentTab, setCurrentTab] = import_react23.default.useState(0);
|
|
15329
15321
|
const tab = props.info.tabs[currentTab];
|
|
15330
15322
|
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
15331
15323
|
"div",
|
|
@@ -15376,9 +15368,9 @@ var Tabs = (props) => {
|
|
|
15376
15368
|
);
|
|
15377
15369
|
};
|
|
15378
15370
|
var TextInput = ({ className, info }) => {
|
|
15379
|
-
const { sendMessage } =
|
|
15380
|
-
const ref =
|
|
15381
|
-
(0,
|
|
15371
|
+
const { sendMessage } = import_react24.default.useContext(StageContext);
|
|
15372
|
+
const ref = import_react24.default.useRef(null);
|
|
15373
|
+
(0, import_react24.useEffect)(() => {
|
|
15382
15374
|
if (ref.current && ref.current.value !== info.value) {
|
|
15383
15375
|
ref.current.value = info.value;
|
|
15384
15376
|
}
|
|
@@ -15408,13 +15400,13 @@ var TextInput = ({ className, info }) => {
|
|
|
15408
15400
|
};
|
|
15409
15401
|
var Timeline = (props) => {
|
|
15410
15402
|
const { className, info } = props;
|
|
15411
|
-
const { timeDifferenceMs } = (0,
|
|
15412
|
-
const frameState =
|
|
15403
|
+
const { timeDifferenceMs } = (0, import_react25.useContext)(StageContext);
|
|
15404
|
+
const frameState = import_react25.default.useRef({
|
|
15413
15405
|
animationFrame: -1,
|
|
15414
15406
|
state: null
|
|
15415
15407
|
});
|
|
15416
|
-
const [currentTimeMillis, setCurrentTimeMillis] = (0,
|
|
15417
|
-
(0,
|
|
15408
|
+
const [currentTimeMillis, setCurrentTimeMillis] = (0, import_react25.useState)(0);
|
|
15409
|
+
(0, import_react25.useEffect)(() => {
|
|
15418
15410
|
frameState.current.state = info.state;
|
|
15419
15411
|
const recalculateCurrentTimeMillis = () => {
|
|
15420
15412
|
if (frameState.current.state !== info.state) {
|
|
@@ -15511,11 +15503,11 @@ var CORE_FRONTEND_COMPONENT_RENDERER = {
|
|
|
15511
15503
|
};
|
|
15512
15504
|
|
|
15513
15505
|
// ../../packages/sigil/dist/frontend.js
|
|
15506
|
+
var import_react26 = require("react");
|
|
15514
15507
|
var import_react27 = require("react");
|
|
15515
|
-
var import_react28 = require("react");
|
|
15516
15508
|
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
15517
15509
|
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
15518
|
-
var
|
|
15510
|
+
var import_react28 = require("react");
|
|
15519
15511
|
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
15520
15512
|
var import_frontend = require("@arcanejs/toolkit/frontend");
|
|
15521
15513
|
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
@@ -15607,7 +15599,7 @@ var createDefaultBrowserContext = (browser) => {
|
|
|
15607
15599
|
...browser
|
|
15608
15600
|
};
|
|
15609
15601
|
};
|
|
15610
|
-
var BrowserContext = (0,
|
|
15602
|
+
var BrowserContext = (0, import_react27.createContext)(
|
|
15611
15603
|
new Proxy({}, {
|
|
15612
15604
|
get: () => {
|
|
15613
15605
|
throw new Error("BrowserContext not provided.");
|
|
@@ -15620,16 +15612,16 @@ var BrowserContextProvider = ({
|
|
|
15620
15612
|
}) => {
|
|
15621
15613
|
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(BrowserContext.Provider, { value: browser, children });
|
|
15622
15614
|
};
|
|
15623
|
-
var useBrowserContext = () => (0,
|
|
15615
|
+
var useBrowserContext = () => (0, import_react27.useContext)(BrowserContext);
|
|
15624
15616
|
var AppRoot = ({
|
|
15625
15617
|
info,
|
|
15626
15618
|
browser
|
|
15627
15619
|
}) => {
|
|
15628
15620
|
const { child, lastLog } = info;
|
|
15629
|
-
const { renderComponent, call } = (0,
|
|
15630
|
-
const [logs, setLogs] = (0,
|
|
15631
|
-
const [debugMode, setDebugMode] = (0,
|
|
15632
|
-
(0,
|
|
15621
|
+
const { renderComponent, call } = (0, import_react26.useContext)(StageContext);
|
|
15622
|
+
const [logs, setLogs] = (0, import_react26.useState)({ lastLog: -1, logs: [] });
|
|
15623
|
+
const [debugMode, setDebugMode] = (0, import_react26.useState)(false);
|
|
15624
|
+
(0, import_react26.useEffect)(() => {
|
|
15633
15625
|
if (!debugMode || !call) return;
|
|
15634
15626
|
const lastLogId = logs.logs[logs.logs.length - 1]?.index ?? -1;
|
|
15635
15627
|
call({
|
|
@@ -15646,7 +15638,7 @@ var AppRoot = ({
|
|
|
15646
15638
|
});
|
|
15647
15639
|
});
|
|
15648
15640
|
}, [call, debugMode, info.key, lastLog, logs]);
|
|
15649
|
-
const debuggerContext = (0,
|
|
15641
|
+
const debuggerContext = (0, import_react26.useMemo)(
|
|
15650
15642
|
() => ({
|
|
15651
15643
|
logs: logs.logs,
|
|
15652
15644
|
setDebugMode
|
|
@@ -15671,12 +15663,12 @@ Caused by: ${unwrapErrorStack(error.cause)}`;
|
|
|
15671
15663
|
return stack;
|
|
15672
15664
|
};
|
|
15673
15665
|
var Debugger = ({ title, className }) => {
|
|
15674
|
-
const scrollRef = (0,
|
|
15675
|
-
const shouldScrollToBottom = (0,
|
|
15666
|
+
const scrollRef = (0, import_react28.useRef)(null);
|
|
15667
|
+
const shouldScrollToBottom = (0, import_react28.useRef)(true);
|
|
15676
15668
|
const { openDevTools } = useBrowserContext();
|
|
15677
15669
|
const { setDebugMode, logs } = useDebuggerContext();
|
|
15678
15670
|
const system = useSystemInformation();
|
|
15679
|
-
(0,
|
|
15671
|
+
(0, import_react28.useEffect)(() => {
|
|
15680
15672
|
setDebugMode(true);
|
|
15681
15673
|
return () => {
|
|
15682
15674
|
setDebugMode(false);
|
|
@@ -15687,19 +15679,19 @@ var Debugger = ({ title, className }) => {
|
|
|
15687
15679
|
const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;
|
|
15688
15680
|
shouldScrollToBottom.current = scrollTop + clientHeight >= scrollHeight - 10;
|
|
15689
15681
|
};
|
|
15690
|
-
const scrollToBottomIfRequired = (0,
|
|
15682
|
+
const scrollToBottomIfRequired = (0, import_react28.useCallback)(() => {
|
|
15691
15683
|
if (shouldScrollToBottom.current && scrollRef.current) {
|
|
15692
15684
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
15693
15685
|
}
|
|
15694
15686
|
}, []);
|
|
15695
|
-
(0,
|
|
15696
|
-
(0,
|
|
15687
|
+
(0, import_react28.useEffect)(scrollToBottomIfRequired, [logs, scrollToBottomIfRequired]);
|
|
15688
|
+
(0, import_react28.useEffect)(() => {
|
|
15697
15689
|
window.addEventListener("resize", scrollToBottomIfRequired);
|
|
15698
15690
|
return () => {
|
|
15699
15691
|
window.removeEventListener("resize", scrollToBottomIfRequired);
|
|
15700
15692
|
};
|
|
15701
15693
|
}, [scrollToBottomIfRequired]);
|
|
15702
|
-
const exportLogs = (0,
|
|
15694
|
+
const exportLogs = (0, import_react28.useCallback)(() => {
|
|
15703
15695
|
const logText = JSON.stringify({ system, logs }, null, 2);
|
|
15704
15696
|
const blob = new Blob([logText], { type: "application/json" });
|
|
15705
15697
|
const url = URL.createObjectURL(blob);
|
|
@@ -15709,7 +15701,7 @@ var Debugger = ({ title, className }) => {
|
|
|
15709
15701
|
link.click();
|
|
15710
15702
|
URL.revokeObjectURL(url);
|
|
15711
15703
|
}, [system, logs]);
|
|
15712
|
-
const handleRequestScrollToBottom = (0,
|
|
15704
|
+
const handleRequestScrollToBottom = (0, import_react28.useCallback)(() => {
|
|
15713
15705
|
shouldScrollToBottom.current = true;
|
|
15714
15706
|
scrollToBottomIfRequired();
|
|
15715
15707
|
}, [scrollToBottomIfRequired]);
|
|
@@ -15890,7 +15882,12 @@ var OUTPUT_CONFIG = zod_default.object({
|
|
|
15890
15882
|
var TOOLBOX_CONFIG = zod_default.object({
|
|
15891
15883
|
inputs: zod_default.record(zod_default.string(), INPUT_CONFIG),
|
|
15892
15884
|
generators: zod_default.record(zod_default.string(), GENERATOR_CONFIG),
|
|
15893
|
-
outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG)
|
|
15885
|
+
outputs: zod_default.record(zod_default.string(), OUTPUT_CONFIG),
|
|
15886
|
+
/**
|
|
15887
|
+
* Hash of the license the user has agreed to.
|
|
15888
|
+
*/
|
|
15889
|
+
agreedToLicense: zod_default.string().optional(),
|
|
15890
|
+
checkForUpdates: zod_default.boolean().optional().default(true)
|
|
15894
15891
|
});
|
|
15895
15892
|
var isTimecodeInstance = (instance) => instance !== null && "state" in instance && "metadata" in instance;
|
|
15896
15893
|
var isTimecodeGroup = (instance) => instance !== null && "timecodes" in instance;
|
|
@@ -15898,83 +15895,7 @@ var NAMESPACE = "timecode-toolbox";
|
|
|
15898
15895
|
var isTimecodeToolboxComponent = (component) => component.namespace === NAMESPACE;
|
|
15899
15896
|
|
|
15900
15897
|
// src/components/frontend/toolbox/root.tsx
|
|
15901
|
-
var
|
|
15902
|
-
|
|
15903
|
-
// src/components/frontend/toolbox/core/size-aware-div.tsx
|
|
15904
|
-
var import_react30 = require("react");
|
|
15905
|
-
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
15906
|
-
var SizeAwareDiv = ({
|
|
15907
|
-
children,
|
|
15908
|
-
style,
|
|
15909
|
-
...rest
|
|
15910
|
-
}) => {
|
|
15911
|
-
const [div, setDiv] = (0, import_react30.useState)(null);
|
|
15912
|
-
const [rect, setRect] = (0, import_react30.useState)(null);
|
|
15913
|
-
(0, import_react30.useEffect)(() => {
|
|
15914
|
-
if (!div) {
|
|
15915
|
-
return;
|
|
15916
|
-
}
|
|
15917
|
-
const resizeObserver = new ResizeObserver((entries) => {
|
|
15918
|
-
for (const entry of entries) {
|
|
15919
|
-
setRect(entry.contentRect);
|
|
15920
|
-
}
|
|
15921
|
-
});
|
|
15922
|
-
resizeObserver.observe(div);
|
|
15923
|
-
return () => {
|
|
15924
|
-
resizeObserver.disconnect();
|
|
15925
|
-
};
|
|
15926
|
-
}, [div]);
|
|
15927
|
-
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
15928
|
-
"div",
|
|
15929
|
-
{
|
|
15930
|
-
ref: setDiv,
|
|
15931
|
-
...rest,
|
|
15932
|
-
style: {
|
|
15933
|
-
...style,
|
|
15934
|
-
...rect && cssVariables({
|
|
15935
|
-
"--size-aware-div-width": rect.width + "px",
|
|
15936
|
-
"--size-aware-div-height": rect.height + "px"
|
|
15937
|
-
})
|
|
15938
|
-
},
|
|
15939
|
-
children
|
|
15940
|
-
}
|
|
15941
|
-
);
|
|
15942
|
-
};
|
|
15943
|
-
|
|
15944
|
-
// src/components/frontend/toolbox/content.tsx
|
|
15945
|
-
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
15946
|
-
var ExternalLink = ({
|
|
15947
|
-
href,
|
|
15948
|
-
children
|
|
15949
|
-
}) => {
|
|
15950
|
-
const { openExternalLink } = useBrowserContext();
|
|
15951
|
-
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
15952
|
-
"a",
|
|
15953
|
-
{
|
|
15954
|
-
href,
|
|
15955
|
-
target: "_blank",
|
|
15956
|
-
rel: "noopener noreferrer",
|
|
15957
|
-
onClick: (e) => {
|
|
15958
|
-
e.preventDefault();
|
|
15959
|
-
openExternalLink(href);
|
|
15960
|
-
},
|
|
15961
|
-
className: "\n text-sigil-usage-hint-foreground no-underline\n hover:underline\n ",
|
|
15962
|
-
children
|
|
15963
|
-
}
|
|
15964
|
-
);
|
|
15965
|
-
};
|
|
15966
|
-
var NoToolboxChildren = ({ text }) => {
|
|
15967
|
-
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
|
|
15968
|
-
SizeAwareDiv,
|
|
15969
|
-
{
|
|
15970
|
-
className: "\n flex grow flex-col items-center justify-center gap-1 bg-sigil-bg-light\n p-1 text-sigil-foreground-muted\n ",
|
|
15971
|
-
children: [
|
|
15972
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Icon2, { icon: "handyman", className: "text-block-icon" }),
|
|
15973
|
-
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "text-center", children: text })
|
|
15974
|
-
]
|
|
15975
|
-
}
|
|
15976
|
-
);
|
|
15977
|
-
};
|
|
15898
|
+
var import_react42 = require("react");
|
|
15978
15899
|
|
|
15979
15900
|
// ../../packages/artnet/dist/chunk-J2HDMITA.js
|
|
15980
15901
|
var ARTNET_PORT = 6454;
|
|
@@ -15991,6 +15912,7 @@ var MS_FORMAT = new Intl.NumberFormat(void 0, {
|
|
|
15991
15912
|
unit: "millisecond",
|
|
15992
15913
|
maximumFractionDigits: 0
|
|
15993
15914
|
});
|
|
15915
|
+
var SOURCE_CODE_URL = "https://github.com/ArcaneWizards/open-source/tree/main/apps/timecode-toolbox";
|
|
15994
15916
|
var STRINGS = {
|
|
15995
15917
|
title: "Timecode Toolbox",
|
|
15996
15918
|
debugger: "Debug Tools & Log",
|
|
@@ -15999,6 +15921,10 @@ var STRINGS = {
|
|
|
15999
15921
|
openInNewWindow: "Open in new window",
|
|
16000
15922
|
toggle: (text) => `Toggle ${text}`,
|
|
16001
15923
|
close: (text) => `Close ${text}`,
|
|
15924
|
+
license: "License & About",
|
|
15925
|
+
acceptLicense: "Accept License",
|
|
15926
|
+
licensePrompt: "Please review and accept the license to use Timecode Toolbox",
|
|
15927
|
+
sourceCode: "Source Code",
|
|
16002
15928
|
protocols: {
|
|
16003
15929
|
artnet: {
|
|
16004
15930
|
short: "ArtNet",
|
|
@@ -16058,30 +15984,41 @@ var STRINGS = {
|
|
|
16058
15984
|
},
|
|
16059
15985
|
errors: {
|
|
16060
15986
|
unknownTimecodeID: "Unknown timecode ID, please close the window"
|
|
15987
|
+
},
|
|
15988
|
+
updates: {
|
|
15989
|
+
updateAvailable: (current, latest) => `Version ${latest} is available! You are currently on version ${current}.`,
|
|
15990
|
+
download: "Download",
|
|
15991
|
+
settingsLabel: "Automatically check for updates",
|
|
15992
|
+
settingsDetails: `When enabled, the app will automatically check for updates periodically and display a message when a new version is available.`,
|
|
15993
|
+
lastChecked: (time) => `Last checked: ${time}`
|
|
15994
|
+
},
|
|
15995
|
+
general: {
|
|
15996
|
+
enabled: "Enabled",
|
|
15997
|
+
disabled: "Disabled"
|
|
16061
15998
|
}
|
|
16062
15999
|
};
|
|
16063
16000
|
|
|
16064
16001
|
// src/components/frontend/toolbox/outputs.tsx
|
|
16065
|
-
var
|
|
16002
|
+
var import_react32 = require("react");
|
|
16066
16003
|
|
|
16067
16004
|
// src/components/frontend/toolbox/util.tsx
|
|
16068
|
-
var
|
|
16005
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
16069
16006
|
var PrimaryToolboxSection = ({
|
|
16070
16007
|
title,
|
|
16071
16008
|
children,
|
|
16072
16009
|
buttons
|
|
16073
16010
|
}) => {
|
|
16074
|
-
return /* @__PURE__ */ (0,
|
|
16075
|
-
/* @__PURE__ */ (0,
|
|
16011
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex grow gap-px", children: [
|
|
16012
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
16076
16013
|
"div",
|
|
16077
16014
|
{
|
|
16078
16015
|
className: "\n flex items-center justify-center bg-sigil-bg-light p-1\n writing-mode-vertical-rl\n ",
|
|
16079
16016
|
children: title
|
|
16080
16017
|
}
|
|
16081
16018
|
),
|
|
16082
|
-
/* @__PURE__ */ (0,
|
|
16083
|
-
/* @__PURE__ */ (0,
|
|
16084
|
-
/* @__PURE__ */ (0,
|
|
16019
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { className: "flex grow flex-col gap-px", children: [
|
|
16020
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "flex grow flex-col gap-px", children }),
|
|
16021
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "flex w-full flex-wrap gap-1 bg-sigil-bg-light p-1", children: buttons })
|
|
16085
16022
|
] })
|
|
16086
16023
|
] });
|
|
16087
16024
|
};
|
|
@@ -16101,31 +16038,31 @@ function displayMillis(totalMilliseconds) {
|
|
|
16101
16038
|
}
|
|
16102
16039
|
|
|
16103
16040
|
// src/components/frontend/toolbox/context.tsx
|
|
16104
|
-
var
|
|
16105
|
-
var ConfigContext = (0,
|
|
16041
|
+
var import_react29 = require("react");
|
|
16042
|
+
var ConfigContext = (0, import_react29.createContext)(
|
|
16106
16043
|
new Proxy({}, {
|
|
16107
16044
|
get() {
|
|
16108
16045
|
throw new Error("ConfigContext not initialized");
|
|
16109
16046
|
}
|
|
16110
16047
|
})
|
|
16111
16048
|
);
|
|
16112
|
-
var ApplicationStateContext = (0,
|
|
16049
|
+
var ApplicationStateContext = (0, import_react29.createContext)(
|
|
16113
16050
|
new Proxy({}, {
|
|
16114
16051
|
get() {
|
|
16115
16052
|
throw new Error("ApplicationStateContext not initialized");
|
|
16116
16053
|
}
|
|
16117
16054
|
})
|
|
16118
16055
|
);
|
|
16119
|
-
var useApplicationState = () => (0,
|
|
16120
|
-
var ApplicationHandlersContext = (0,
|
|
16056
|
+
var useApplicationState = () => (0, import_react29.useContext)(ApplicationStateContext);
|
|
16057
|
+
var ApplicationHandlersContext = (0, import_react29.createContext)(
|
|
16121
16058
|
new Proxy({}, {
|
|
16122
16059
|
get() {
|
|
16123
16060
|
throw new Error("ApplicationHandlersContext not initialized");
|
|
16124
16061
|
}
|
|
16125
16062
|
})
|
|
16126
16063
|
);
|
|
16127
|
-
var useApplicationHandlers = () => (0,
|
|
16128
|
-
var NetworkContext = (0,
|
|
16064
|
+
var useApplicationHandlers = () => (0, import_react29.useContext)(ApplicationHandlersContext);
|
|
16065
|
+
var NetworkContext = (0, import_react29.createContext)(
|
|
16129
16066
|
new Proxy({}, {
|
|
16130
16067
|
get() {
|
|
16131
16068
|
throw new Error("NetworkContext not initialized");
|
|
@@ -16134,7 +16071,48 @@ var NetworkContext = (0, import_react31.createContext)(
|
|
|
16134
16071
|
);
|
|
16135
16072
|
|
|
16136
16073
|
// src/components/frontend/toolbox/core/timecode-display.tsx
|
|
16137
|
-
var
|
|
16074
|
+
var import_react31 = require("react");
|
|
16075
|
+
|
|
16076
|
+
// src/components/frontend/toolbox/core/size-aware-div.tsx
|
|
16077
|
+
var import_react30 = require("react");
|
|
16078
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
16079
|
+
var SizeAwareDiv = ({
|
|
16080
|
+
children,
|
|
16081
|
+
style,
|
|
16082
|
+
...rest
|
|
16083
|
+
}) => {
|
|
16084
|
+
const [div, setDiv] = (0, import_react30.useState)(null);
|
|
16085
|
+
const [rect, setRect] = (0, import_react30.useState)(null);
|
|
16086
|
+
(0, import_react30.useEffect)(() => {
|
|
16087
|
+
if (!div) {
|
|
16088
|
+
return;
|
|
16089
|
+
}
|
|
16090
|
+
const resizeObserver = new ResizeObserver((entries) => {
|
|
16091
|
+
for (const entry of entries) {
|
|
16092
|
+
setRect(entry.contentRect);
|
|
16093
|
+
}
|
|
16094
|
+
});
|
|
16095
|
+
resizeObserver.observe(div);
|
|
16096
|
+
return () => {
|
|
16097
|
+
resizeObserver.disconnect();
|
|
16098
|
+
};
|
|
16099
|
+
}, [div]);
|
|
16100
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
16101
|
+
"div",
|
|
16102
|
+
{
|
|
16103
|
+
ref: setDiv,
|
|
16104
|
+
...rest,
|
|
16105
|
+
style: {
|
|
16106
|
+
...style,
|
|
16107
|
+
...rect && cssVariables({
|
|
16108
|
+
"--size-aware-div-width": rect.width + "px",
|
|
16109
|
+
"--size-aware-div-height": rect.height + "px"
|
|
16110
|
+
})
|
|
16111
|
+
},
|
|
16112
|
+
children
|
|
16113
|
+
}
|
|
16114
|
+
);
|
|
16115
|
+
};
|
|
16138
16116
|
|
|
16139
16117
|
// src/tree.ts
|
|
16140
16118
|
var isTreeNode = (node) => "children" in node && typeof node.children === "object" && node.children !== null;
|
|
@@ -16241,14 +16219,14 @@ var augmentUpstreamTimecodeWithOutputMetadata = (tc, config) => {
|
|
|
16241
16219
|
};
|
|
16242
16220
|
|
|
16243
16221
|
// src/components/frontend/toolbox/core/timecode-display.tsx
|
|
16244
|
-
var
|
|
16222
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
16245
16223
|
var ActiveTimecodeText = ({
|
|
16246
16224
|
effectiveStartTimeMillis,
|
|
16247
16225
|
speed
|
|
16248
16226
|
}) => {
|
|
16249
|
-
const [millis, setMillis] = (0,
|
|
16250
|
-
const { timeDifferenceMs } = (0,
|
|
16251
|
-
(0,
|
|
16227
|
+
const [millis, setMillis] = (0, import_react31.useState)(0);
|
|
16228
|
+
const { timeDifferenceMs } = (0, import_react31.useContext)(StageContext);
|
|
16229
|
+
(0, import_react31.useEffect)(() => {
|
|
16252
16230
|
let animationFrame = null;
|
|
16253
16231
|
const updateMillis = () => {
|
|
16254
16232
|
const newMillis = (Date.now() - (timeDifferenceMs ?? 0) - effectiveStartTimeMillis) * speed;
|
|
@@ -16265,9 +16243,9 @@ var ActiveTimecodeText = ({
|
|
|
16265
16243
|
return displayMillis(millis);
|
|
16266
16244
|
};
|
|
16267
16245
|
var Timeline2 = ({ state, totalTime }) => {
|
|
16268
|
-
const [millis, setMillis] = (0,
|
|
16269
|
-
const { timeDifferenceMs } = (0,
|
|
16270
|
-
(0,
|
|
16246
|
+
const [millis, setMillis] = (0, import_react31.useState)(0);
|
|
16247
|
+
const { timeDifferenceMs } = (0, import_react31.useContext)(StageContext);
|
|
16248
|
+
(0, import_react31.useEffect)(() => {
|
|
16271
16249
|
if (state.state === "none") {
|
|
16272
16250
|
setMillis(0);
|
|
16273
16251
|
return;
|
|
@@ -16289,7 +16267,7 @@ var Timeline2 = ({ state, totalTime }) => {
|
|
|
16289
16267
|
}
|
|
16290
16268
|
};
|
|
16291
16269
|
}, [state, timeDifferenceMs]);
|
|
16292
|
-
return /* @__PURE__ */ (0,
|
|
16270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "w-full border border-timecode-usage-foreground p-px", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "relative h-1 w-full overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16293
16271
|
"div",
|
|
16294
16272
|
{
|
|
16295
16273
|
className: "absolute inset-y-0 left-0 bg-timecode-usage-foreground",
|
|
@@ -16307,32 +16285,32 @@ var TimecodeDisplay = ({
|
|
|
16307
16285
|
}) => {
|
|
16308
16286
|
const { handlers, callHandler } = useApplicationHandlers();
|
|
16309
16287
|
const hooks = id && getTreeValue(handlers, id);
|
|
16310
|
-
const play = (0,
|
|
16288
|
+
const play = (0, import_react31.useCallback)(() => {
|
|
16311
16289
|
if (id) {
|
|
16312
16290
|
callHandler({ handler: "play", path: id, args: [] });
|
|
16313
16291
|
}
|
|
16314
16292
|
}, [callHandler, id]);
|
|
16315
|
-
const pause = (0,
|
|
16293
|
+
const pause = (0, import_react31.useCallback)(() => {
|
|
16316
16294
|
if (id) {
|
|
16317
16295
|
callHandler({ handler: "pause", path: id, args: [] });
|
|
16318
16296
|
}
|
|
16319
16297
|
}, [callHandler, id]);
|
|
16320
|
-
const back5seconds = (0,
|
|
16298
|
+
const back5seconds = (0, import_react31.useCallback)(() => {
|
|
16321
16299
|
if (id) {
|
|
16322
16300
|
callHandler({ handler: "seekRelative", path: id, args: [-5e3] });
|
|
16323
16301
|
}
|
|
16324
16302
|
}, [callHandler, id]);
|
|
16325
|
-
const forward5seconds = (0,
|
|
16303
|
+
const forward5seconds = (0, import_react31.useCallback)(() => {
|
|
16326
16304
|
if (id) {
|
|
16327
16305
|
callHandler({ handler: "seekRelative", path: id, args: [5e3] });
|
|
16328
16306
|
}
|
|
16329
16307
|
}, [callHandler, id]);
|
|
16330
|
-
const beginning = (0,
|
|
16308
|
+
const beginning = (0, import_react31.useCallback)(() => {
|
|
16331
16309
|
if (id) {
|
|
16332
16310
|
callHandler({ handler: "beginning", path: id, args: [] });
|
|
16333
16311
|
}
|
|
16334
16312
|
}, [callHandler, id]);
|
|
16335
|
-
const toggle = (0,
|
|
16313
|
+
const toggle = (0, import_react31.useCallback)(() => {
|
|
16336
16314
|
if (hooks?.play && hooks?.pause) {
|
|
16337
16315
|
if (state.state === "none" || state.state === "stopped") {
|
|
16338
16316
|
play();
|
|
@@ -16341,8 +16319,8 @@ var TimecodeDisplay = ({
|
|
|
16341
16319
|
}
|
|
16342
16320
|
}
|
|
16343
16321
|
}, [hooks, play, pause, state.state]);
|
|
16344
|
-
return /* @__PURE__ */ (0,
|
|
16345
|
-
/* @__PURE__ */ (0,
|
|
16322
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex grow flex-col gap-px", children: [
|
|
16323
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
16346
16324
|
"div",
|
|
16347
16325
|
{
|
|
16348
16326
|
className: cn(
|
|
@@ -16354,8 +16332,8 @@ var TimecodeDisplay = ({
|
|
|
16354
16332
|
)
|
|
16355
16333
|
),
|
|
16356
16334
|
children: [
|
|
16357
|
-
headerComponents && /* @__PURE__ */ (0,
|
|
16358
|
-
/* @__PURE__ */ (0,
|
|
16335
|
+
headerComponents && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "flex flex-wrap gap-0.25", children: headerComponents }),
|
|
16336
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16359
16337
|
SizeAwareDiv,
|
|
16360
16338
|
{
|
|
16361
16339
|
className: cn(
|
|
@@ -16370,7 +16348,7 @@ var TimecodeDisplay = ({
|
|
|
16370
16348
|
)
|
|
16371
16349
|
),
|
|
16372
16350
|
onClick: toggle,
|
|
16373
|
-
children: /* @__PURE__ */ (0,
|
|
16351
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: cn("font-mono text-timecode-adaptive"), children: state.state === "none" ? "--:--:--:---" : state.state === "stopped" ? displayMillis(state.positionMillis) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16374
16352
|
ActiveTimecodeText,
|
|
16375
16353
|
{
|
|
16376
16354
|
effectiveStartTimeMillis: state.effectiveStartTimeMillis,
|
|
@@ -16379,8 +16357,8 @@ var TimecodeDisplay = ({
|
|
|
16379
16357
|
) }) })
|
|
16380
16358
|
}
|
|
16381
16359
|
),
|
|
16382
|
-
hooks?.pause || hooks?.play ? /* @__PURE__ */ (0,
|
|
16383
|
-
hooks.beginning && /* @__PURE__ */ (0,
|
|
16360
|
+
hooks?.pause || hooks?.play ? /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex justify-center gap-px", children: [
|
|
16361
|
+
hooks.beginning && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16384
16362
|
ControlButton,
|
|
16385
16363
|
{
|
|
16386
16364
|
onClick: beginning,
|
|
@@ -16391,7 +16369,7 @@ var TimecodeDisplay = ({
|
|
|
16391
16369
|
className: "text-timecode-usage-foreground!"
|
|
16392
16370
|
}
|
|
16393
16371
|
),
|
|
16394
|
-
hooks.seekRelative && /* @__PURE__ */ (0,
|
|
16372
|
+
hooks.seekRelative && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16395
16373
|
ControlButton,
|
|
16396
16374
|
{
|
|
16397
16375
|
onClick: back5seconds,
|
|
@@ -16402,7 +16380,7 @@ var TimecodeDisplay = ({
|
|
|
16402
16380
|
className: "text-timecode-usage-foreground!"
|
|
16403
16381
|
}
|
|
16404
16382
|
),
|
|
16405
|
-
state.state === "none" || state.state === "stopped" ? /* @__PURE__ */ (0,
|
|
16383
|
+
state.state === "none" || state.state === "stopped" ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16406
16384
|
ControlButton,
|
|
16407
16385
|
{
|
|
16408
16386
|
onClick: play,
|
|
@@ -16412,7 +16390,7 @@ var TimecodeDisplay = ({
|
|
|
16412
16390
|
title: STRINGS.controls.play,
|
|
16413
16391
|
className: "text-timecode-usage-foreground!"
|
|
16414
16392
|
}
|
|
16415
|
-
) : /* @__PURE__ */ (0,
|
|
16393
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16416
16394
|
ControlButton,
|
|
16417
16395
|
{
|
|
16418
16396
|
onClick: pause,
|
|
@@ -16423,7 +16401,7 @@ var TimecodeDisplay = ({
|
|
|
16423
16401
|
className: "text-timecode-usage-foreground!"
|
|
16424
16402
|
}
|
|
16425
16403
|
),
|
|
16426
|
-
hooks.seekRelative && /* @__PURE__ */ (0,
|
|
16404
|
+
hooks.seekRelative && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16427
16405
|
ControlButton,
|
|
16428
16406
|
{
|
|
16429
16407
|
onClick: forward5seconds,
|
|
@@ -16435,33 +16413,33 @@ var TimecodeDisplay = ({
|
|
|
16435
16413
|
}
|
|
16436
16414
|
)
|
|
16437
16415
|
] }) : null,
|
|
16438
|
-
metadata?.totalTime && /* @__PURE__ */ (0,
|
|
16416
|
+
metadata?.totalTime && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Timeline2, { state, totalTime: metadata.totalTime })
|
|
16439
16417
|
]
|
|
16440
16418
|
}
|
|
16441
16419
|
),
|
|
16442
|
-
(state.smpteMode !== null || state.accuracyMillis !== null || config.delayMs !== null) && /* @__PURE__ */ (0,
|
|
16443
|
-
config.delayMs !== null && /* @__PURE__ */ (0,
|
|
16444
|
-
state.smpteMode !== null && /* @__PURE__ */ (0,
|
|
16445
|
-
state.accuracyMillis !== null && /* @__PURE__ */ (0,
|
|
16420
|
+
(state.smpteMode !== null || state.accuracyMillis !== null || config.delayMs !== null) && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex gap-px", children: [
|
|
16421
|
+
config.delayMs !== null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "grow basis-0 truncate bg-sigil-bg-light p-0.5", children: STRINGS.delay(config.delayMs) }),
|
|
16422
|
+
state.smpteMode !== null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "grow basis-0 truncate bg-sigil-bg-light p-0.5", children: STRINGS.smtpeModes[state.smpteMode] }),
|
|
16423
|
+
state.accuracyMillis !== null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "grow basis-0 truncate bg-sigil-bg-light p-0.5", children: STRINGS.accuracy(state.accuracyMillis) })
|
|
16446
16424
|
] }),
|
|
16447
|
-
metadata?.artist || metadata?.title ? /* @__PURE__ */ (0,
|
|
16425
|
+
metadata?.artist || metadata?.title ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16448
16426
|
TooltipWrapper,
|
|
16449
16427
|
{
|
|
16450
|
-
tooltip: /* @__PURE__ */ (0,
|
|
16451
|
-
metadata.title && /* @__PURE__ */ (0,
|
|
16452
|
-
/* @__PURE__ */ (0,
|
|
16428
|
+
tooltip: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
|
|
16429
|
+
metadata.title && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { children: [
|
|
16430
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "font-bold", children: "Title:" }),
|
|
16453
16431
|
" ",
|
|
16454
16432
|
metadata.title
|
|
16455
16433
|
] }),
|
|
16456
|
-
metadata.artist && /* @__PURE__ */ (0,
|
|
16457
|
-
/* @__PURE__ */ (0,
|
|
16434
|
+
metadata.artist && /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { children: [
|
|
16435
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "font-bold", children: "Artist:" }),
|
|
16458
16436
|
" ",
|
|
16459
16437
|
metadata.artist
|
|
16460
16438
|
] })
|
|
16461
16439
|
] }),
|
|
16462
|
-
children: /* @__PURE__ */ (0,
|
|
16463
|
-
metadata.title && /* @__PURE__ */ (0,
|
|
16464
|
-
metadata.artist && /* @__PURE__ */ (0,
|
|
16440
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex gap-px", children: [
|
|
16441
|
+
metadata.title && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "grow truncate bg-sigil-bg-light p-0.5 font-bold", children: metadata.title }),
|
|
16442
|
+
metadata.artist && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "grow truncate bg-sigil-bg-light p-0.5", children: metadata.artist })
|
|
16465
16443
|
] })
|
|
16466
16444
|
}
|
|
16467
16445
|
) : null
|
|
@@ -16492,7 +16470,7 @@ var TimecodeTreeDisplay = ({
|
|
|
16492
16470
|
assignToOutput
|
|
16493
16471
|
}) => {
|
|
16494
16472
|
const { openNewWidow } = useBrowserContext();
|
|
16495
|
-
const openInNewWindow = (0,
|
|
16473
|
+
const openInNewWindow = (0, import_react31.useCallback)(() => {
|
|
16496
16474
|
if (id) {
|
|
16497
16475
|
openNewWidow(withUrlFragment({ values: { tc: id } }).href, {
|
|
16498
16476
|
canUseExisting: false,
|
|
@@ -16502,7 +16480,7 @@ var TimecodeTreeDisplay = ({
|
|
|
16502
16480
|
}, [id, openNewWidow]);
|
|
16503
16481
|
name = timecode?.name ? [...name, timecode.name] : name;
|
|
16504
16482
|
if (isTimecodeGroup(timecode) && Object.values(timecode.timecodes).length) {
|
|
16505
|
-
return Object.entries(timecode.timecodes).map(([key, child]) => /* @__PURE__ */ (0,
|
|
16483
|
+
return Object.entries(timecode.timecodes).map(([key, child]) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16506
16484
|
TimecodeTreeDisplay,
|
|
16507
16485
|
{
|
|
16508
16486
|
config,
|
|
@@ -16518,28 +16496,28 @@ var TimecodeTreeDisplay = ({
|
|
|
16518
16496
|
key
|
|
16519
16497
|
));
|
|
16520
16498
|
}
|
|
16521
|
-
return /* @__PURE__ */ (0,
|
|
16499
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
16522
16500
|
"div",
|
|
16523
16501
|
{
|
|
16524
16502
|
className: "relative flex grow flex-col text-timecode-usage-foreground",
|
|
16525
16503
|
style: color && cssSigilColorUsageVariables("timecode-usage", sigilColorUsage(color)),
|
|
16526
16504
|
children: [
|
|
16527
|
-
/* @__PURE__ */ (0,
|
|
16505
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16528
16506
|
TimecodeDisplay,
|
|
16529
16507
|
{
|
|
16530
16508
|
id,
|
|
16531
16509
|
timecode: isTimecodeInstance(timecode) ? timecode : EMPTY_TIMECODE,
|
|
16532
16510
|
config,
|
|
16533
|
-
headerComponents: /* @__PURE__ */ (0,
|
|
16534
|
-
/* @__PURE__ */ (0,
|
|
16535
|
-
/* @__PURE__ */ (0,
|
|
16511
|
+
headerComponents: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
|
|
16512
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: "flex grow items-start gap-0.25", children: [
|
|
16513
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16536
16514
|
"div",
|
|
16537
16515
|
{
|
|
16538
16516
|
className: "\n m-0.25 rounded-md border border-sigil-bg-light\n bg-timecode-usage-foreground px-1 py-0.25 text-sigil-control\n text-timecode-usage-text\n ",
|
|
16539
16517
|
children: type
|
|
16540
16518
|
}
|
|
16541
16519
|
),
|
|
16542
|
-
/* @__PURE__ */ (0,
|
|
16520
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16543
16521
|
"div",
|
|
16544
16522
|
{
|
|
16545
16523
|
className: cn(
|
|
@@ -16550,8 +16528,8 @@ var TimecodeTreeDisplay = ({
|
|
|
16550
16528
|
}
|
|
16551
16529
|
)
|
|
16552
16530
|
] }),
|
|
16553
|
-
/* @__PURE__ */ (0,
|
|
16554
|
-
/* @__PURE__ */ (0,
|
|
16531
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(ControlButtonGroup, { className: "rounded-md bg-sigil-bg-light", children: [
|
|
16532
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16555
16533
|
ControlButton,
|
|
16556
16534
|
{
|
|
16557
16535
|
variant: "toolbar",
|
|
@@ -16565,12 +16543,12 @@ var TimecodeTreeDisplay = ({
|
|
|
16565
16543
|
] })
|
|
16566
16544
|
}
|
|
16567
16545
|
),
|
|
16568
|
-
assignToOutput && id && !isOutputInstanceId(id) && /* @__PURE__ */ (0,
|
|
16546
|
+
assignToOutput && id && !isOutputInstanceId(id) && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16569
16547
|
SizeAwareDiv,
|
|
16570
16548
|
{
|
|
16571
16549
|
className: "\n absolute inset-0 flex cursor-pointer items-center justify-center\n bg-timecode-backdrop text-timecode-usage-text\n hover:bg-timecode-backdrop-hover\n ",
|
|
16572
16550
|
onClick: () => assignToOutput(id),
|
|
16573
|
-
children: /* @__PURE__ */ (0,
|
|
16551
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon2, { icon: "link", className: "text-block-icon" })
|
|
16574
16552
|
}
|
|
16575
16553
|
)
|
|
16576
16554
|
]
|
|
@@ -16580,9 +16558,9 @@ var TimecodeTreeDisplay = ({
|
|
|
16580
16558
|
var FullscreenTimecodeDisplay = ({
|
|
16581
16559
|
id
|
|
16582
16560
|
}) => {
|
|
16583
|
-
const { config } = (0,
|
|
16584
|
-
const applicationState = (0,
|
|
16585
|
-
const timecode = (0,
|
|
16561
|
+
const { config } = (0, import_react31.useContext)(ConfigContext);
|
|
16562
|
+
const applicationState = (0, import_react31.useContext)(ApplicationStateContext);
|
|
16563
|
+
const timecode = (0, import_react31.useMemo)(() => {
|
|
16586
16564
|
if (isInputInstanceId(id) || isGeneratorInstanceId(id)) {
|
|
16587
16565
|
return getTimecodeInstance(applicationState, id);
|
|
16588
16566
|
} else {
|
|
@@ -16596,7 +16574,7 @@ var FullscreenTimecodeDisplay = ({
|
|
|
16596
16574
|
);
|
|
16597
16575
|
}
|
|
16598
16576
|
}, [applicationState, id, config.outputs]);
|
|
16599
|
-
const instanceConfig = (0,
|
|
16577
|
+
const instanceConfig = (0, import_react31.useMemo)(() => {
|
|
16600
16578
|
if (isInputInstanceId(id)) {
|
|
16601
16579
|
const c = config.inputs[id[1]];
|
|
16602
16580
|
if (!c) {
|
|
@@ -16636,22 +16614,22 @@ var FullscreenTimecodeDisplay = ({
|
|
|
16636
16614
|
}
|
|
16637
16615
|
}, [id, config]);
|
|
16638
16616
|
if (!instanceConfig) {
|
|
16639
|
-
return /* @__PURE__ */ (0,
|
|
16617
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
16640
16618
|
SizeAwareDiv,
|
|
16641
16619
|
{
|
|
16642
16620
|
className: "\n flex grow flex-col items-center justify-center gap-1 bg-sigil-bg-light\n p-1 text-sigil-foreground-muted\n ",
|
|
16643
16621
|
children: [
|
|
16644
|
-
/* @__PURE__ */ (0,
|
|
16645
|
-
/* @__PURE__ */ (0,
|
|
16622
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon2, { icon: "question_mark", className: "text-block-icon" }),
|
|
16623
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "text-center", children: STRINGS.errors.unknownTimecodeID })
|
|
16646
16624
|
]
|
|
16647
16625
|
}
|
|
16648
16626
|
);
|
|
16649
16627
|
}
|
|
16650
|
-
return /* @__PURE__ */ (0,
|
|
16628
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16651
16629
|
"div",
|
|
16652
16630
|
{
|
|
16653
16631
|
className: "\n flex h-0 grow flex-col gap-px overflow-y-auto bg-sigil-border\n scrollbar-sigil\n ",
|
|
16654
|
-
children: /* @__PURE__ */ (0,
|
|
16632
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
16655
16633
|
TimecodeTreeDisplay,
|
|
16656
16634
|
{
|
|
16657
16635
|
id,
|
|
@@ -16716,20 +16694,68 @@ function v4(options, buf, offset4) {
|
|
|
16716
16694
|
}
|
|
16717
16695
|
var v4_default = v4;
|
|
16718
16696
|
|
|
16697
|
+
// src/components/frontend/toolbox/content.tsx
|
|
16698
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
16699
|
+
var ExternalLink = ({
|
|
16700
|
+
href,
|
|
16701
|
+
children
|
|
16702
|
+
}) => {
|
|
16703
|
+
const { openExternalLink } = useBrowserContext();
|
|
16704
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
16705
|
+
"a",
|
|
16706
|
+
{
|
|
16707
|
+
href,
|
|
16708
|
+
target: "_blank",
|
|
16709
|
+
rel: "noopener noreferrer",
|
|
16710
|
+
onClick: (e) => {
|
|
16711
|
+
e.preventDefault();
|
|
16712
|
+
openExternalLink(href);
|
|
16713
|
+
},
|
|
16714
|
+
className: "\n text-sigil-usage-hint-foreground no-underline\n hover:underline\n ",
|
|
16715
|
+
children
|
|
16716
|
+
}
|
|
16717
|
+
);
|
|
16718
|
+
};
|
|
16719
|
+
var TextButton = ({
|
|
16720
|
+
onClick,
|
|
16721
|
+
children
|
|
16722
|
+
}) => {
|
|
16723
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
16724
|
+
"span",
|
|
16725
|
+
{
|
|
16726
|
+
onClick,
|
|
16727
|
+
className: "\n cursor-pointer text-sigil-usage-hint-foreground\n hover:underline\n ",
|
|
16728
|
+
children
|
|
16729
|
+
}
|
|
16730
|
+
);
|
|
16731
|
+
};
|
|
16732
|
+
var NoToolboxChildren = ({ text }) => {
|
|
16733
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
|
|
16734
|
+
SizeAwareDiv,
|
|
16735
|
+
{
|
|
16736
|
+
className: "\n flex grow flex-col items-center justify-center gap-1 bg-sigil-bg-light\n p-1 text-sigil-foreground-muted\n ",
|
|
16737
|
+
children: [
|
|
16738
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon2, { icon: "handyman", className: "text-block-icon" }),
|
|
16739
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "text-center", children: text })
|
|
16740
|
+
]
|
|
16741
|
+
}
|
|
16742
|
+
);
|
|
16743
|
+
};
|
|
16744
|
+
|
|
16719
16745
|
// src/components/frontend/toolbox/outputs.tsx
|
|
16720
16746
|
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
16721
16747
|
var DmxConnectionSettings = ({
|
|
16722
16748
|
data,
|
|
16723
16749
|
updateSettings
|
|
16724
16750
|
}) => {
|
|
16725
|
-
const { commitChanges } = (0,
|
|
16726
|
-
const { getNetworkInterfaces } = (0,
|
|
16727
|
-
const [interfaces, setInterfaces] = (0,
|
|
16728
|
-
const refreshInterfaces = (0,
|
|
16751
|
+
const { commitChanges } = (0, import_react32.useContext)(ChangeCommitContext);
|
|
16752
|
+
const { getNetworkInterfaces } = (0, import_react32.useContext)(NetworkContext);
|
|
16753
|
+
const [interfaces, setInterfaces] = (0, import_react32.useState)(null);
|
|
16754
|
+
const refreshInterfaces = (0, import_react32.useCallback)(() => {
|
|
16729
16755
|
setInterfaces(null);
|
|
16730
16756
|
getNetworkInterfaces().then((ifs) => setInterfaces(ifs));
|
|
16731
16757
|
}, [getNetworkInterfaces]);
|
|
16732
|
-
(0,
|
|
16758
|
+
(0, import_react32.useEffect)(() => {
|
|
16733
16759
|
refreshInterfaces();
|
|
16734
16760
|
}, [refreshInterfaces]);
|
|
16735
16761
|
if (data.type !== "artnet") {
|
|
@@ -16871,8 +16897,8 @@ var OutputSettingsDialog = ({
|
|
|
16871
16897
|
output,
|
|
16872
16898
|
close
|
|
16873
16899
|
}) => {
|
|
16874
|
-
const { config, updateConfig } = (0,
|
|
16875
|
-
const [newData, setNewData] = (0,
|
|
16900
|
+
const { config, updateConfig } = (0, import_react32.useContext)(ConfigContext);
|
|
16901
|
+
const [newData, setNewData] = (0, import_react32.useState)({
|
|
16876
16902
|
name: "",
|
|
16877
16903
|
enabled: true,
|
|
16878
16904
|
definition: {
|
|
@@ -16885,7 +16911,7 @@ var OutputSettingsDialog = ({
|
|
|
16885
16911
|
},
|
|
16886
16912
|
link: null
|
|
16887
16913
|
});
|
|
16888
|
-
const updateSettings = (0,
|
|
16914
|
+
const updateSettings = (0, import_react32.useCallback)(
|
|
16889
16915
|
(change) => {
|
|
16890
16916
|
if (target.type === "add") {
|
|
16891
16917
|
setNewData(change);
|
|
@@ -16907,7 +16933,7 @@ var OutputSettingsDialog = ({
|
|
|
16907
16933
|
},
|
|
16908
16934
|
[target, updateConfig]
|
|
16909
16935
|
);
|
|
16910
|
-
const updateDefinition = (0,
|
|
16936
|
+
const updateDefinition = (0, import_react32.useCallback)(
|
|
16911
16937
|
(change) => {
|
|
16912
16938
|
updateSettings((current) => ({
|
|
16913
16939
|
...current,
|
|
@@ -16916,7 +16942,7 @@ var OutputSettingsDialog = ({
|
|
|
16916
16942
|
},
|
|
16917
16943
|
[updateSettings]
|
|
16918
16944
|
);
|
|
16919
|
-
const addOutput = (0,
|
|
16945
|
+
const addOutput = (0, import_react32.useCallback)(() => {
|
|
16920
16946
|
updateConfig((current) => {
|
|
16921
16947
|
return {
|
|
16922
16948
|
...current,
|
|
@@ -16930,7 +16956,7 @@ var OutputSettingsDialog = ({
|
|
|
16930
16956
|
}, [newData, close, updateConfig]);
|
|
16931
16957
|
const resolvedTarget = target.type === "add" ? "add" : config.outputs?.[target.uuid];
|
|
16932
16958
|
const data = resolvedTarget === "add" ? newData : resolvedTarget;
|
|
16933
|
-
const commitChanges = (0,
|
|
16959
|
+
const commitChanges = (0, import_react32.useCallback)(() => {
|
|
16934
16960
|
if (target.type === "add") {
|
|
16935
16961
|
addOutput();
|
|
16936
16962
|
} else {
|
|
@@ -17031,8 +17057,8 @@ var OutputDisplay = ({
|
|
|
17031
17057
|
setAssignToOutput
|
|
17032
17058
|
}) => {
|
|
17033
17059
|
const applicationState = useApplicationState();
|
|
17034
|
-
const { updateConfig } = (0,
|
|
17035
|
-
const clearLink = (0,
|
|
17060
|
+
const { updateConfig } = (0, import_react32.useContext)(ConfigContext);
|
|
17061
|
+
const clearLink = (0, import_react32.useCallback)(() => {
|
|
17036
17062
|
updateConfig((current) => {
|
|
17037
17063
|
const currentOutput = current.outputs?.[uuid];
|
|
17038
17064
|
if (!currentOutput) {
|
|
@@ -17051,15 +17077,15 @@ var OutputDisplay = ({
|
|
|
17051
17077
|
});
|
|
17052
17078
|
setAssignToOutput(null);
|
|
17053
17079
|
}, [updateConfig, uuid, setAssignToOutput]);
|
|
17054
|
-
const linkCallback = (0,
|
|
17080
|
+
const linkCallback = (0, import_react32.useCallback)(
|
|
17055
17081
|
() => setAssignToOutput((current) => current === uuid ? null : uuid),
|
|
17056
17082
|
[uuid, setAssignToOutput]
|
|
17057
17083
|
);
|
|
17058
|
-
const timecode = (0,
|
|
17084
|
+
const timecode = (0, import_react32.useMemo)(() => {
|
|
17059
17085
|
const tc = config.link && getTimecodeInstance(applicationState, config.link);
|
|
17060
17086
|
return augmentUpstreamTimecodeWithOutputMetadata(tc, config);
|
|
17061
17087
|
}, [applicationState, config]);
|
|
17062
|
-
const toggleEnabled = (0,
|
|
17088
|
+
const toggleEnabled = (0, import_react32.useCallback)(() => {
|
|
17063
17089
|
updateConfig((current) => {
|
|
17064
17090
|
const existing = current.outputs?.[uuid];
|
|
17065
17091
|
if (!existing) {
|
|
@@ -17151,7 +17177,7 @@ var OutputsSection = ({
|
|
|
17151
17177
|
assignToOutput,
|
|
17152
17178
|
setAssignToOutput
|
|
17153
17179
|
}) => {
|
|
17154
|
-
const { config } = (0,
|
|
17180
|
+
const { config } = (0, import_react32.useContext)(ConfigContext);
|
|
17155
17181
|
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
17156
17182
|
PrimaryToolboxSection,
|
|
17157
17183
|
{
|
|
@@ -17191,13 +17217,13 @@ var OutputsSection = ({
|
|
|
17191
17217
|
};
|
|
17192
17218
|
|
|
17193
17219
|
// src/components/frontend/toolbox/generators.tsx
|
|
17194
|
-
var
|
|
17220
|
+
var import_react33 = require("react");
|
|
17195
17221
|
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
17196
17222
|
var ClockSpecificSettings = ({
|
|
17197
17223
|
data,
|
|
17198
17224
|
updateSettings
|
|
17199
17225
|
}) => {
|
|
17200
|
-
const { commitChanges } = (0,
|
|
17226
|
+
const { commitChanges } = (0, import_react33.useContext)(ChangeCommitContext);
|
|
17201
17227
|
if (data.type !== "clock") {
|
|
17202
17228
|
return null;
|
|
17203
17229
|
}
|
|
@@ -17232,15 +17258,15 @@ var GeneratorSettingsDialog = ({
|
|
|
17232
17258
|
generator,
|
|
17233
17259
|
close
|
|
17234
17260
|
}) => {
|
|
17235
|
-
const { config, updateConfig } = (0,
|
|
17236
|
-
const [newData, setNewData] = (0,
|
|
17261
|
+
const { config, updateConfig } = (0, import_react33.useContext)(ConfigContext);
|
|
17262
|
+
const [newData, setNewData] = (0, import_react33.useState)({
|
|
17237
17263
|
name: "",
|
|
17238
17264
|
definition: {
|
|
17239
17265
|
type: generator,
|
|
17240
17266
|
speed: 1
|
|
17241
17267
|
}
|
|
17242
17268
|
});
|
|
17243
|
-
const updateSettings = (0,
|
|
17269
|
+
const updateSettings = (0, import_react33.useCallback)(
|
|
17244
17270
|
(change) => {
|
|
17245
17271
|
if (target.type === "add") {
|
|
17246
17272
|
setNewData(change);
|
|
@@ -17262,7 +17288,7 @@ var GeneratorSettingsDialog = ({
|
|
|
17262
17288
|
},
|
|
17263
17289
|
[target, updateConfig]
|
|
17264
17290
|
);
|
|
17265
|
-
const updateDefinition = (0,
|
|
17291
|
+
const updateDefinition = (0, import_react33.useCallback)(
|
|
17266
17292
|
(change) => {
|
|
17267
17293
|
updateSettings((current) => ({
|
|
17268
17294
|
...current,
|
|
@@ -17271,7 +17297,7 @@ var GeneratorSettingsDialog = ({
|
|
|
17271
17297
|
},
|
|
17272
17298
|
[updateSettings]
|
|
17273
17299
|
);
|
|
17274
|
-
const addGenerator = (0,
|
|
17300
|
+
const addGenerator = (0, import_react33.useCallback)(() => {
|
|
17275
17301
|
updateConfig((current) => {
|
|
17276
17302
|
return {
|
|
17277
17303
|
...current,
|
|
@@ -17285,7 +17311,7 @@ var GeneratorSettingsDialog = ({
|
|
|
17285
17311
|
}, [newData, close, updateConfig]);
|
|
17286
17312
|
const resolvedTarget = target.type === "add" ? "add" : config.generators?.[target.uuid];
|
|
17287
17313
|
const data = resolvedTarget === "add" ? newData : resolvedTarget;
|
|
17288
|
-
const commitChanges = (0,
|
|
17314
|
+
const commitChanges = (0, import_react33.useCallback)(() => {
|
|
17289
17315
|
if (target.type === "add") {
|
|
17290
17316
|
addGenerator();
|
|
17291
17317
|
} else {
|
|
@@ -17396,7 +17422,7 @@ var GeneratorsSection = ({
|
|
|
17396
17422
|
setDialogMode,
|
|
17397
17423
|
assignToOutput
|
|
17398
17424
|
}) => {
|
|
17399
|
-
const { config } = (0,
|
|
17425
|
+
const { config } = (0, import_react33.useContext)(ConfigContext);
|
|
17400
17426
|
return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
17401
17427
|
PrimaryToolboxSection,
|
|
17402
17428
|
{
|
|
@@ -17435,20 +17461,20 @@ var GeneratorsSection = ({
|
|
|
17435
17461
|
};
|
|
17436
17462
|
|
|
17437
17463
|
// src/components/frontend/toolbox/inputs.tsx
|
|
17438
|
-
var
|
|
17464
|
+
var import_react34 = require("react");
|
|
17439
17465
|
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
17440
17466
|
var DmxConnectionSettings2 = ({
|
|
17441
17467
|
data,
|
|
17442
17468
|
updateSettings
|
|
17443
17469
|
}) => {
|
|
17444
|
-
const { commitChanges } = (0,
|
|
17445
|
-
const { getNetworkInterfaces } = (0,
|
|
17446
|
-
const [interfaces, setInterfaces] = (0,
|
|
17447
|
-
const refreshInterfaces = (0,
|
|
17470
|
+
const { commitChanges } = (0, import_react34.useContext)(ChangeCommitContext);
|
|
17471
|
+
const { getNetworkInterfaces } = (0, import_react34.useContext)(NetworkContext);
|
|
17472
|
+
const [interfaces, setInterfaces] = (0, import_react34.useState)(null);
|
|
17473
|
+
const refreshInterfaces = (0, import_react34.useCallback)(() => {
|
|
17448
17474
|
setInterfaces(null);
|
|
17449
17475
|
getNetworkInterfaces().then((ifs) => setInterfaces(ifs));
|
|
17450
17476
|
}, [getNetworkInterfaces]);
|
|
17451
|
-
(0,
|
|
17477
|
+
(0, import_react34.useEffect)(() => {
|
|
17452
17478
|
refreshInterfaces();
|
|
17453
17479
|
}, [refreshInterfaces]);
|
|
17454
17480
|
if (data.type !== "artnet") {
|
|
@@ -17515,13 +17541,13 @@ var TCNetConnectionSettings = ({
|
|
|
17515
17541
|
data,
|
|
17516
17542
|
updateSettings
|
|
17517
17543
|
}) => {
|
|
17518
|
-
const { getNetworkInterfaces } = (0,
|
|
17519
|
-
const [interfaces, setInterfaces] = (0,
|
|
17520
|
-
const refreshInterfaces = (0,
|
|
17544
|
+
const { getNetworkInterfaces } = (0, import_react34.useContext)(NetworkContext);
|
|
17545
|
+
const [interfaces, setInterfaces] = (0, import_react34.useState)(null);
|
|
17546
|
+
const refreshInterfaces = (0, import_react34.useCallback)(() => {
|
|
17521
17547
|
setInterfaces(null);
|
|
17522
17548
|
getNetworkInterfaces().then((ifs) => setInterfaces(ifs));
|
|
17523
17549
|
}, [getNetworkInterfaces]);
|
|
17524
|
-
(0,
|
|
17550
|
+
(0, import_react34.useEffect)(() => {
|
|
17525
17551
|
refreshInterfaces();
|
|
17526
17552
|
}, [refreshInterfaces]);
|
|
17527
17553
|
if (data.type !== "tcnet") {
|
|
@@ -17566,8 +17592,8 @@ var InputSettingsDialog = ({
|
|
|
17566
17592
|
input,
|
|
17567
17593
|
close
|
|
17568
17594
|
}) => {
|
|
17569
|
-
const { config, updateConfig } = (0,
|
|
17570
|
-
const [newData, setNewData] = (0,
|
|
17595
|
+
const { config, updateConfig } = (0, import_react34.useContext)(ConfigContext);
|
|
17596
|
+
const [newData, setNewData] = (0, import_react34.useState)({
|
|
17571
17597
|
name: "",
|
|
17572
17598
|
enabled: true,
|
|
17573
17599
|
definition: input === "artnet" ? {
|
|
@@ -17579,7 +17605,7 @@ var InputSettingsDialog = ({
|
|
|
17579
17605
|
iface: ""
|
|
17580
17606
|
}
|
|
17581
17607
|
});
|
|
17582
|
-
const updateSettings = (0,
|
|
17608
|
+
const updateSettings = (0, import_react34.useCallback)(
|
|
17583
17609
|
(change) => {
|
|
17584
17610
|
if (target.type === "add") {
|
|
17585
17611
|
setNewData(change);
|
|
@@ -17601,7 +17627,7 @@ var InputSettingsDialog = ({
|
|
|
17601
17627
|
},
|
|
17602
17628
|
[target, updateConfig]
|
|
17603
17629
|
);
|
|
17604
|
-
const updateDefinition = (0,
|
|
17630
|
+
const updateDefinition = (0, import_react34.useCallback)(
|
|
17605
17631
|
(change) => {
|
|
17606
17632
|
updateSettings((current) => ({
|
|
17607
17633
|
...current,
|
|
@@ -17610,7 +17636,7 @@ var InputSettingsDialog = ({
|
|
|
17610
17636
|
},
|
|
17611
17637
|
[updateSettings]
|
|
17612
17638
|
);
|
|
17613
|
-
const addInput = (0,
|
|
17639
|
+
const addInput = (0, import_react34.useCallback)(() => {
|
|
17614
17640
|
updateConfig((current) => {
|
|
17615
17641
|
return {
|
|
17616
17642
|
...current,
|
|
@@ -17624,7 +17650,7 @@ var InputSettingsDialog = ({
|
|
|
17624
17650
|
}, [newData, close, updateConfig]);
|
|
17625
17651
|
const resolvedTarget = target.type === "add" ? "add" : config.inputs?.[target.uuid];
|
|
17626
17652
|
const data = resolvedTarget === "add" ? newData : resolvedTarget;
|
|
17627
|
-
const commitChanges = (0,
|
|
17653
|
+
const commitChanges = (0, import_react34.useCallback)(() => {
|
|
17628
17654
|
if (target.type === "add") {
|
|
17629
17655
|
addInput();
|
|
17630
17656
|
} else {
|
|
@@ -17729,10 +17755,10 @@ var InputDisplay = ({
|
|
|
17729
17755
|
setDialogMode,
|
|
17730
17756
|
assignToOutput
|
|
17731
17757
|
}) => {
|
|
17732
|
-
const { updateConfig } = (0,
|
|
17758
|
+
const { updateConfig } = (0, import_react34.useContext)(ConfigContext);
|
|
17733
17759
|
const { inputs } = useApplicationState();
|
|
17734
17760
|
const state = inputs[uuid];
|
|
17735
|
-
const toggleEnabled = (0,
|
|
17761
|
+
const toggleEnabled = (0, import_react34.useCallback)(() => {
|
|
17736
17762
|
updateConfig((current) => {
|
|
17737
17763
|
const existing = current.inputs?.[uuid];
|
|
17738
17764
|
if (!existing) {
|
|
@@ -17791,7 +17817,7 @@ var InputsSection = ({
|
|
|
17791
17817
|
setDialogMode,
|
|
17792
17818
|
assignToOutput
|
|
17793
17819
|
}) => {
|
|
17794
|
-
const { config } = (0,
|
|
17820
|
+
const { config } = (0, import_react34.useContext)(ConfigContext);
|
|
17795
17821
|
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
17796
17822
|
PrimaryToolboxSection,
|
|
17797
17823
|
{
|
|
@@ -17907,24 +17933,27 @@ var diffJson = (a, b) => {
|
|
|
17907
17933
|
return { type: "value", after: b };
|
|
17908
17934
|
};
|
|
17909
17935
|
|
|
17910
|
-
//
|
|
17911
|
-
var
|
|
17936
|
+
// src/components/frontend/toolbox/settings.tsx
|
|
17937
|
+
var import_react37 = require("react");
|
|
17938
|
+
|
|
17939
|
+
// ../../packages/sigil/dist/frontend/appearance.js
|
|
17940
|
+
var import_react35 = require("react");
|
|
17912
17941
|
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
17913
17942
|
var AppearanceSwitcher = ({
|
|
17914
17943
|
color,
|
|
17915
17944
|
onColorChange
|
|
17916
17945
|
}) => {
|
|
17917
17946
|
const { colorSchemePreference, setColorSchemePreference } = useColorSchemePreferences();
|
|
17918
|
-
const selectDarkMode = (0,
|
|
17947
|
+
const selectDarkMode = (0, import_react35.useCallback)(() => {
|
|
17919
17948
|
setColorSchemePreference("dark");
|
|
17920
17949
|
}, [setColorSchemePreference]);
|
|
17921
|
-
const selectLightMode = (0,
|
|
17950
|
+
const selectLightMode = (0, import_react35.useCallback)(() => {
|
|
17922
17951
|
setColorSchemePreference("light");
|
|
17923
17952
|
}, [setColorSchemePreference]);
|
|
17924
|
-
const selectSystemMode = (0,
|
|
17953
|
+
const selectSystemMode = (0, import_react35.useCallback)(() => {
|
|
17925
17954
|
setColorSchemePreference("auto");
|
|
17926
17955
|
}, [setColorSchemePreference]);
|
|
17927
|
-
const updateHintColor = (0,
|
|
17956
|
+
const updateHintColor = (0, import_react35.useCallback)(
|
|
17928
17957
|
(color2) => {
|
|
17929
17958
|
if (onColorChange) {
|
|
17930
17959
|
onColorChange(color2);
|
|
@@ -17984,9 +18013,9 @@ var AppearanceSwitcher = ({
|
|
|
17984
18013
|
};
|
|
17985
18014
|
|
|
17986
18015
|
// ../../packages/sigil/dist/frontend/preferences.js
|
|
17987
|
-
var
|
|
18016
|
+
var import_react36 = require("react");
|
|
17988
18017
|
var createBrowserPreferencesHook = (def) => () => {
|
|
17989
|
-
const [preferences, setPreference] = (0,
|
|
18018
|
+
const [preferences, setPreference] = (0, import_react36.useState)(() => {
|
|
17990
18019
|
const stored = window.localStorage.getItem(def.key);
|
|
17991
18020
|
if (stored) {
|
|
17992
18021
|
try {
|
|
@@ -18007,7 +18036,7 @@ var createBrowserPreferencesHook = (def) => () => {
|
|
|
18007
18036
|
})
|
|
18008
18037
|
);
|
|
18009
18038
|
};
|
|
18010
|
-
(0,
|
|
18039
|
+
(0, import_react36.useEffect)(() => {
|
|
18011
18040
|
const onStorageChange = (event) => {
|
|
18012
18041
|
if (event.key === def.key) {
|
|
18013
18042
|
const newValue = event.newValue;
|
|
@@ -18051,8 +18080,17 @@ var useBrowserPreferences = createBrowserPreferencesHook(TOOLBOX_PREFERENCES);
|
|
|
18051
18080
|
|
|
18052
18081
|
// src/components/frontend/toolbox/settings.tsx
|
|
18053
18082
|
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
18083
|
+
var ENABLED_DISABLED_OPTIONS = [
|
|
18084
|
+
{ value: "enabled", label: STRINGS.general.enabled },
|
|
18085
|
+
{ value: "disabled", label: STRINGS.general.disabled }
|
|
18086
|
+
];
|
|
18087
|
+
var DATE_FORMATTER = new Intl.DateTimeFormat(void 0, {
|
|
18088
|
+
timeStyle: "medium"
|
|
18089
|
+
});
|
|
18054
18090
|
var Settings = ({ setWindowMode }) => {
|
|
18055
18091
|
const { preferences, updateBrowserPrefs } = useBrowserPreferences();
|
|
18092
|
+
const { config, updateConfig } = (0, import_react37.useContext)(ConfigContext);
|
|
18093
|
+
const { updates } = useApplicationState();
|
|
18056
18094
|
return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "flex grow flex-col", children: [
|
|
18057
18095
|
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ToolbarWrapper, { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(ToolbarRow, { children: [
|
|
18058
18096
|
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "grow p-1", children: STRINGS.settings.title }),
|
|
@@ -18079,26 +18117,607 @@ var Settings = ({ setWindowMode }) => {
|
|
|
18079
18117
|
color: preferences.color,
|
|
18080
18118
|
onColorChange: (color) => updateBrowserPrefs((current) => ({ ...current, color }))
|
|
18081
18119
|
}
|
|
18082
|
-
)
|
|
18120
|
+
),
|
|
18121
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ControlLabel, { children: STRINGS.updates.settingsLabel }),
|
|
18122
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
18123
|
+
ControlSelect,
|
|
18124
|
+
{
|
|
18125
|
+
value: config.checkForUpdates ? "enabled" : "disabled",
|
|
18126
|
+
options: ENABLED_DISABLED_OPTIONS,
|
|
18127
|
+
onChange: (value) => updateConfig((current) => ({
|
|
18128
|
+
...current,
|
|
18129
|
+
checkForUpdates: value === "enabled"
|
|
18130
|
+
})),
|
|
18131
|
+
variant: "large"
|
|
18132
|
+
}
|
|
18133
|
+
),
|
|
18134
|
+
/* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ControlDetails, { children: STRINGS.updates.settingsDetails }),
|
|
18135
|
+
updates && "lastCheckedMillis" in updates && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(ControlDetails, { children: STRINGS.updates.lastChecked(
|
|
18136
|
+
DATE_FORMATTER.format(updates.lastCheckedMillis)
|
|
18137
|
+
) })
|
|
18083
18138
|
] })
|
|
18084
18139
|
}
|
|
18085
18140
|
)
|
|
18086
18141
|
] });
|
|
18087
18142
|
};
|
|
18088
18143
|
|
|
18089
|
-
// src/components/frontend/toolbox/
|
|
18144
|
+
// src/components/frontend/toolbox/license.tsx
|
|
18145
|
+
var import_react40 = require("react");
|
|
18146
|
+
|
|
18147
|
+
// src/components/frontend/toolbox/logo.tsx
|
|
18090
18148
|
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
18091
|
-
var
|
|
18092
|
-
|
|
18093
|
-
|
|
18149
|
+
var TimecodeToolboxLogo = (props) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
18150
|
+
"svg",
|
|
18151
|
+
{
|
|
18152
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
18153
|
+
viewBox: "0 0 1365.333 1365.333",
|
|
18154
|
+
...props,
|
|
18155
|
+
children: [
|
|
18156
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("defs", { children: [
|
|
18157
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "b", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18158
|
+
"path",
|
|
18159
|
+
{
|
|
18160
|
+
fill: "#fff",
|
|
18161
|
+
"stroke-linecap": "round",
|
|
18162
|
+
"stroke-linejoin": "round",
|
|
18163
|
+
"stroke-width": "50.12",
|
|
18164
|
+
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"
|
|
18165
|
+
}
|
|
18166
|
+
) }),
|
|
18167
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "g", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18168
|
+
"path",
|
|
18169
|
+
{
|
|
18170
|
+
fill: "#fff",
|
|
18171
|
+
"stroke-linecap": "round",
|
|
18172
|
+
"stroke-linejoin": "round",
|
|
18173
|
+
"stroke-width": "5.581",
|
|
18174
|
+
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"
|
|
18175
|
+
}
|
|
18176
|
+
) }),
|
|
18177
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "f", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18178
|
+
"path",
|
|
18179
|
+
{
|
|
18180
|
+
fill: "#fff",
|
|
18181
|
+
"stroke-linecap": "round",
|
|
18182
|
+
"stroke-linejoin": "round",
|
|
18183
|
+
"stroke-width": "5.581",
|
|
18184
|
+
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"
|
|
18185
|
+
}
|
|
18186
|
+
) }),
|
|
18187
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "e", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18188
|
+
"path",
|
|
18189
|
+
{
|
|
18190
|
+
fill: "#fff",
|
|
18191
|
+
"stroke-linecap": "round",
|
|
18192
|
+
"stroke-linejoin": "round",
|
|
18193
|
+
"stroke-width": "5.581",
|
|
18194
|
+
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"
|
|
18195
|
+
}
|
|
18196
|
+
) }),
|
|
18197
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "d", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18198
|
+
"path",
|
|
18199
|
+
{
|
|
18200
|
+
fill: "#fff",
|
|
18201
|
+
"stroke-linecap": "round",
|
|
18202
|
+
"stroke-linejoin": "round",
|
|
18203
|
+
"stroke-width": "5.581",
|
|
18204
|
+
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"
|
|
18205
|
+
}
|
|
18206
|
+
) }),
|
|
18207
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "c", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18208
|
+
"path",
|
|
18209
|
+
{
|
|
18210
|
+
fill: "#fff",
|
|
18211
|
+
"stroke-linecap": "round",
|
|
18212
|
+
"stroke-linejoin": "round",
|
|
18213
|
+
"stroke-width": "5.581",
|
|
18214
|
+
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"
|
|
18215
|
+
}
|
|
18216
|
+
) }),
|
|
18217
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "k", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18218
|
+
"path",
|
|
18219
|
+
{
|
|
18220
|
+
fill: "#fff",
|
|
18221
|
+
"stroke-linecap": "round",
|
|
18222
|
+
"stroke-linejoin": "round",
|
|
18223
|
+
"stroke-width": "7.033",
|
|
18224
|
+
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"
|
|
18225
|
+
}
|
|
18226
|
+
) }),
|
|
18227
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "j", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18228
|
+
"path",
|
|
18229
|
+
{
|
|
18230
|
+
fill: "#fff",
|
|
18231
|
+
"stroke-linecap": "round",
|
|
18232
|
+
"stroke-linejoin": "round",
|
|
18233
|
+
"stroke-width": "7.033",
|
|
18234
|
+
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"
|
|
18235
|
+
}
|
|
18236
|
+
) }),
|
|
18237
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "i", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18238
|
+
"path",
|
|
18239
|
+
{
|
|
18240
|
+
fill: "#fff",
|
|
18241
|
+
"stroke-linecap": "round",
|
|
18242
|
+
"stroke-linejoin": "round",
|
|
18243
|
+
"stroke-width": "7.033",
|
|
18244
|
+
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"
|
|
18245
|
+
}
|
|
18246
|
+
) }),
|
|
18247
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("mask", { id: "h", maskUnits: "userSpaceOnUse", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18248
|
+
"path",
|
|
18249
|
+
{
|
|
18250
|
+
fill: "#fff",
|
|
18251
|
+
"stroke-linecap": "round",
|
|
18252
|
+
"stroke-linejoin": "round",
|
|
18253
|
+
"stroke-width": "7.033",
|
|
18254
|
+
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"
|
|
18255
|
+
}
|
|
18256
|
+
) }),
|
|
18257
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18258
|
+
"filter",
|
|
18259
|
+
{
|
|
18260
|
+
id: "a",
|
|
18261
|
+
width: "1.201",
|
|
18262
|
+
height: "1.19",
|
|
18263
|
+
x: "-.101",
|
|
18264
|
+
y: "-.074",
|
|
18265
|
+
"color-interpolation-filters": "sRGB",
|
|
18266
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("feGaussianBlur", { stdDeviation: "10.298" })
|
|
18267
|
+
}
|
|
18268
|
+
)
|
|
18269
|
+
] }),
|
|
18270
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
18271
|
+
"g",
|
|
18272
|
+
{
|
|
18273
|
+
stroke: "#000",
|
|
18274
|
+
"stroke-linecap": "round",
|
|
18275
|
+
"stroke-linejoin": "round",
|
|
18276
|
+
filter: "url(#a)",
|
|
18277
|
+
opacity: ".25",
|
|
18278
|
+
transform: "translate(-216.03 -84.295)scale(1.10099)",
|
|
18279
|
+
children: [
|
|
18280
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18281
|
+
"path",
|
|
18282
|
+
{
|
|
18283
|
+
"stroke-width": "153.76517303999998",
|
|
18284
|
+
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",
|
|
18285
|
+
opacity: "1"
|
|
18286
|
+
}
|
|
18287
|
+
),
|
|
18288
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18289
|
+
"path",
|
|
18290
|
+
{
|
|
18291
|
+
"stroke-width": "80.096",
|
|
18292
|
+
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"
|
|
18293
|
+
}
|
|
18294
|
+
),
|
|
18295
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18296
|
+
"path",
|
|
18297
|
+
{
|
|
18298
|
+
"stroke-width": "80.096",
|
|
18299
|
+
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"
|
|
18300
|
+
}
|
|
18301
|
+
)
|
|
18302
|
+
]
|
|
18303
|
+
}
|
|
18304
|
+
),
|
|
18305
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("g", { stroke: "#fff", "stroke-linecap": "round", "stroke-linejoin": "round", children: [
|
|
18306
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18307
|
+
"path",
|
|
18308
|
+
{
|
|
18309
|
+
fill: "#8c63d9",
|
|
18310
|
+
"stroke-width": "165.54595738999998",
|
|
18311
|
+
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"
|
|
18312
|
+
}
|
|
18313
|
+
),
|
|
18314
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18315
|
+
"path",
|
|
18316
|
+
{
|
|
18317
|
+
fill: "none",
|
|
18318
|
+
"stroke-width": "73.48667853999999",
|
|
18319
|
+
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"
|
|
18320
|
+
}
|
|
18321
|
+
),
|
|
18322
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18323
|
+
"path",
|
|
18324
|
+
{
|
|
18325
|
+
fill: "none",
|
|
18326
|
+
"stroke-width": "66.746",
|
|
18327
|
+
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",
|
|
18328
|
+
transform: "translate(-216.03 -84.295)scale(1.10099)"
|
|
18329
|
+
}
|
|
18330
|
+
)
|
|
18331
|
+
] }),
|
|
18332
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18333
|
+
"path",
|
|
18334
|
+
{
|
|
18335
|
+
fill: "#8c63d9",
|
|
18336
|
+
stroke: "#263238",
|
|
18337
|
+
"stroke-linecap": "round",
|
|
18338
|
+
"stroke-linejoin": "round",
|
|
18339
|
+
"stroke-width": "55.182",
|
|
18340
|
+
d: "m166.927 398.352 13.02 207.137-40.611 69.023v453.342h1086.661V674.512l-40.61-69.023 13.02-207.137z"
|
|
18341
|
+
}
|
|
18342
|
+
),
|
|
18343
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18344
|
+
"path",
|
|
18345
|
+
{
|
|
18346
|
+
fill: "#cc7000",
|
|
18347
|
+
stroke: "#ffba66",
|
|
18348
|
+
"stroke-linecap": "round",
|
|
18349
|
+
"stroke-linejoin": "round",
|
|
18350
|
+
"stroke-width": "38.593",
|
|
18351
|
+
d: "M322.77 689.206h986.986l-36.885-62.693H359.655Z",
|
|
18352
|
+
mask: "url(#b)",
|
|
18353
|
+
transform: "translate(-216.03 -84.295)scale(1.10099)"
|
|
18354
|
+
}
|
|
18355
|
+
),
|
|
18356
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18357
|
+
"path",
|
|
18358
|
+
{
|
|
18359
|
+
fill: "#ff8c00",
|
|
18360
|
+
d: "m1185.387 605.49 13.02-207.138H166.926l13.02 207.137z"
|
|
18361
|
+
}
|
|
18362
|
+
),
|
|
18363
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18364
|
+
"path",
|
|
18365
|
+
{
|
|
18366
|
+
fill: "none",
|
|
18367
|
+
stroke: "#263238",
|
|
18368
|
+
"stroke-linecap": "round",
|
|
18369
|
+
"stroke-linejoin": "round",
|
|
18370
|
+
"stroke-width": "29.395",
|
|
18371
|
+
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"
|
|
18372
|
+
}
|
|
18373
|
+
),
|
|
18374
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18375
|
+
"path",
|
|
18376
|
+
{
|
|
18377
|
+
fill: "#eceff1",
|
|
18378
|
+
d: "m916.084 52.25 420.493 180.531-532.698 916.066-476.546-308.58Z",
|
|
18379
|
+
mask: "url(#c)"
|
|
18380
|
+
}
|
|
18381
|
+
),
|
|
18382
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18383
|
+
"path",
|
|
18384
|
+
{
|
|
18385
|
+
fill: "#fff",
|
|
18386
|
+
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",
|
|
18387
|
+
mask: "url(#d)"
|
|
18388
|
+
}
|
|
18389
|
+
),
|
|
18390
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18391
|
+
"path",
|
|
18392
|
+
{
|
|
18393
|
+
fill: "#fff",
|
|
18394
|
+
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",
|
|
18395
|
+
mask: "url(#e)"
|
|
18396
|
+
}
|
|
18397
|
+
),
|
|
18398
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18399
|
+
"path",
|
|
18400
|
+
{
|
|
18401
|
+
fill: "#cfd8dc",
|
|
18402
|
+
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",
|
|
18403
|
+
mask: "url(#f)"
|
|
18404
|
+
}
|
|
18405
|
+
),
|
|
18406
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18407
|
+
"path",
|
|
18408
|
+
{
|
|
18409
|
+
fill: "#cfd8dc",
|
|
18410
|
+
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",
|
|
18411
|
+
mask: "url(#g)"
|
|
18412
|
+
}
|
|
18413
|
+
),
|
|
18414
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18415
|
+
"path",
|
|
18416
|
+
{
|
|
18417
|
+
fill: "none",
|
|
18418
|
+
stroke: "#263238",
|
|
18419
|
+
"stroke-linecap": "round",
|
|
18420
|
+
"stroke-linejoin": "round",
|
|
18421
|
+
"stroke-width": "29.395",
|
|
18422
|
+
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"
|
|
18423
|
+
}
|
|
18424
|
+
),
|
|
18425
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18426
|
+
"path",
|
|
18427
|
+
{
|
|
18428
|
+
fill: "#eceff1",
|
|
18429
|
+
d: "m105.922 257.574 152.745-109.918 438.66 518.005-348.484 67.536Z",
|
|
18430
|
+
mask: "url(#h)"
|
|
18431
|
+
}
|
|
18432
|
+
),
|
|
18433
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18434
|
+
"path",
|
|
18435
|
+
{
|
|
18436
|
+
fill: "#fff",
|
|
18437
|
+
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",
|
|
18438
|
+
mask: "url(#i)"
|
|
18439
|
+
}
|
|
18440
|
+
),
|
|
18441
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18442
|
+
"path",
|
|
18443
|
+
{
|
|
18444
|
+
fill: "#cfd8dc",
|
|
18445
|
+
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",
|
|
18446
|
+
mask: "url(#j)"
|
|
18447
|
+
}
|
|
18448
|
+
),
|
|
18449
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18450
|
+
"path",
|
|
18451
|
+
{
|
|
18452
|
+
fill: "#cfd8dc",
|
|
18453
|
+
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",
|
|
18454
|
+
mask: "url(#k)"
|
|
18455
|
+
}
|
|
18456
|
+
),
|
|
18457
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { fill: "#ffba66", d: "M170.482 652.84h1025.265v453.341H170.482Z" }),
|
|
18458
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { fill: "#ff8c00", d: "M139.336 674.512h1086.662v453.342H139.336Z" }),
|
|
18459
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18460
|
+
"rect",
|
|
18461
|
+
{
|
|
18462
|
+
width: "875.482",
|
|
18463
|
+
height: "332.3",
|
|
18464
|
+
x: "244.926",
|
|
18465
|
+
y: "735.033",
|
|
18466
|
+
fill: "#cc7000",
|
|
18467
|
+
rx: "77.883",
|
|
18468
|
+
ry: "77.883"
|
|
18469
|
+
}
|
|
18470
|
+
),
|
|
18471
|
+
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18472
|
+
"path",
|
|
18473
|
+
{
|
|
18474
|
+
fill: "#fff",
|
|
18475
|
+
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",
|
|
18476
|
+
"aria-label": "00:00"
|
|
18477
|
+
}
|
|
18478
|
+
)
|
|
18479
|
+
]
|
|
18480
|
+
}
|
|
18481
|
+
);
|
|
18482
|
+
|
|
18483
|
+
// src/components/frontend/toolbox/core/layout.tsx
|
|
18484
|
+
var import_react39 = require("react");
|
|
18485
|
+
|
|
18486
|
+
// src/components/frontend/toolbox/core/footer.tsx
|
|
18487
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
18488
|
+
var Footer = ({ openLicenseDetails }) => {
|
|
18489
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
|
|
18490
|
+
"div",
|
|
18491
|
+
{
|
|
18492
|
+
className: "\n flex items-center justify-center gap-1 border-t border-sigil-border\n bg-sigil-bg-dark p-1 text-[80%]\n ",
|
|
18493
|
+
children: [
|
|
18494
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { children: [
|
|
18495
|
+
"Created by",
|
|
18496
|
+
"\xA0",
|
|
18497
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ExternalLink, { href: "https://arcanewizards.com", children: "Arcane Wizards" })
|
|
18498
|
+
] }),
|
|
18499
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ToolbarDivider, {}),
|
|
18500
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ExternalLink, { href: SOURCE_CODE_URL, children: STRINGS.sourceCode }),
|
|
18501
|
+
openLicenseDetails && /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(import_jsx_runtime49.Fragment, { children: [
|
|
18502
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(ToolbarDivider, {}),
|
|
18503
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)(TextButton, { onClick: openLicenseDetails, children: STRINGS.license })
|
|
18504
|
+
] })
|
|
18505
|
+
]
|
|
18506
|
+
}
|
|
18094
18507
|
);
|
|
18095
|
-
|
|
18096
|
-
|
|
18097
|
-
|
|
18098
|
-
|
|
18508
|
+
};
|
|
18509
|
+
|
|
18510
|
+
// ../../packages/sigil/dist/frontend/styling.hooks.js
|
|
18511
|
+
var import_react38 = require("react");
|
|
18512
|
+
var useRootHintVariables = (color) => {
|
|
18513
|
+
(0, import_react38.useEffect)(() => {
|
|
18514
|
+
const root = document.querySelector(".arcane-theme-root");
|
|
18515
|
+
if (!root) return;
|
|
18516
|
+
Object.entries(cssHintColorVariables(color)).forEach(([key, value]) => {
|
|
18517
|
+
root.style.setProperty(key, value);
|
|
18518
|
+
});
|
|
18519
|
+
}, [color]);
|
|
18520
|
+
};
|
|
18521
|
+
|
|
18522
|
+
// src/components/frontend/toolbox/core/layout.tsx
|
|
18523
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
18524
|
+
var Layout = ({
|
|
18525
|
+
modes,
|
|
18526
|
+
children,
|
|
18527
|
+
licenseMode,
|
|
18528
|
+
footer
|
|
18529
|
+
}) => {
|
|
18530
|
+
const [windowMode, setWindowMode] = (0, import_react39.useState)(null);
|
|
18531
|
+
const { connection, reconnect } = (0, import_react39.useContext)(StageContext);
|
|
18099
18532
|
const { preferences } = useBrowserPreferences();
|
|
18100
18533
|
useRootHintVariables(preferences.color);
|
|
18101
|
-
(0,
|
|
18534
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "flex h-screen flex-col", children: [
|
|
18535
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ToolbarWrapper, { children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(ToolbarRow, { children: [
|
|
18536
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
18537
|
+
"div",
|
|
18538
|
+
{
|
|
18539
|
+
className: "\n flex h-full min-h-[36px] grow items-center justify-center px-1\n app-title-bar\n ",
|
|
18540
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "font-bold text-hint-gradient", children: STRINGS.title })
|
|
18541
|
+
}
|
|
18542
|
+
),
|
|
18543
|
+
modes && /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(import_jsx_runtime50.Fragment, { children: [
|
|
18544
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ToolbarDivider, {}),
|
|
18545
|
+
Object.entries(modes).map(([key, { icon, title }]) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
18546
|
+
ControlButton,
|
|
18547
|
+
{
|
|
18548
|
+
onClick: () => setWindowMode((mode) => mode === key ? null : key),
|
|
18549
|
+
variant: "titlebar",
|
|
18550
|
+
icon,
|
|
18551
|
+
active: windowMode === key,
|
|
18552
|
+
title: STRINGS.toggle(title)
|
|
18553
|
+
},
|
|
18554
|
+
key
|
|
18555
|
+
))
|
|
18556
|
+
] })
|
|
18557
|
+
] }) }),
|
|
18558
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "relative flex h-0 grow flex-col", children: connection.state !== "connected" ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
|
|
18559
|
+
SizeAwareDiv,
|
|
18560
|
+
{
|
|
18561
|
+
className: "\n flex grow flex-col items-center justify-center gap-1\n bg-sigil-bg-light p-1 text-sigil-foreground-muted\n ",
|
|
18562
|
+
children: [
|
|
18563
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Icon2, { icon: "signal_disconnected", className: "text-block-icon" }),
|
|
18564
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "text-center", children: STRINGS.connectionError }),
|
|
18565
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(ControlButton, { onClick: reconnect, variant: "large", icon: "replay", children: STRINGS.reconnect })
|
|
18566
|
+
]
|
|
18567
|
+
}
|
|
18568
|
+
) : windowMode && modes?.[windowMode] ? modes[windowMode].child(setWindowMode) : children }),
|
|
18569
|
+
footer && /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
18570
|
+
Footer,
|
|
18571
|
+
{
|
|
18572
|
+
openLicenseDetails: licenseMode && (() => setWindowMode(
|
|
18573
|
+
(mode) => mode === licenseMode ? null : licenseMode
|
|
18574
|
+
))
|
|
18575
|
+
}
|
|
18576
|
+
)
|
|
18577
|
+
] });
|
|
18578
|
+
};
|
|
18579
|
+
|
|
18580
|
+
// src/components/frontend/toolbox/license.tsx
|
|
18581
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
18582
|
+
var LicenseContent = ({ license }) => {
|
|
18583
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex flex-col gap-2 rounded-md bg-sigil-bg-light p-2", children: license.split("\n\n").map((paragraph, index2) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("p", { className: "m-0", children: paragraph.replace(/\n/g, " ").trim() }, index2)) });
|
|
18584
|
+
};
|
|
18585
|
+
var License = ({ license, setWindowMode }) => {
|
|
18586
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex grow flex-col", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
18587
|
+
"div",
|
|
18588
|
+
{
|
|
18589
|
+
className: "\n flex grow basis-0 flex-col overflow-y-auto px-2 pb-2 scrollbar-sigil\n ",
|
|
18590
|
+
children: [
|
|
18591
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TimecodeToolboxLogo, { className: "h-[20%] max-h-[420px] min-h-[110px] w-full" }),
|
|
18592
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(LicenseContent, { license }),
|
|
18593
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex justify-center p-2", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
18594
|
+
ControlButton,
|
|
18595
|
+
{
|
|
18596
|
+
onClick: () => setWindowMode(null),
|
|
18597
|
+
variant: "large",
|
|
18598
|
+
icon: "close",
|
|
18599
|
+
children: STRINGS.close(STRINGS.license)
|
|
18600
|
+
}
|
|
18601
|
+
) })
|
|
18602
|
+
]
|
|
18603
|
+
}
|
|
18604
|
+
) });
|
|
18605
|
+
};
|
|
18606
|
+
var LicenseGate = ({ info }) => {
|
|
18607
|
+
const { sendMessage } = (0, import_react40.useContext)(StageContext);
|
|
18608
|
+
const acceptLicense = (0, import_react40.useCallback)(() => {
|
|
18609
|
+
sendMessage?.({
|
|
18610
|
+
type: "component-message",
|
|
18611
|
+
namespace: "timecode-toolbox",
|
|
18612
|
+
component: "license-gate",
|
|
18613
|
+
componentKey: info.key,
|
|
18614
|
+
action: "accept-license",
|
|
18615
|
+
hash: info.hash
|
|
18616
|
+
});
|
|
18617
|
+
}, [sendMessage, info.key, info.hash]);
|
|
18618
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
18619
|
+
Layout,
|
|
18620
|
+
{
|
|
18621
|
+
footer: true,
|
|
18622
|
+
modes: {
|
|
18623
|
+
debug: {
|
|
18624
|
+
child: () => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Debugger, { title: STRINGS.debugger, className: "size-full" }),
|
|
18625
|
+
icon: "bug_report",
|
|
18626
|
+
title: STRINGS.debugger
|
|
18627
|
+
}
|
|
18628
|
+
},
|
|
18629
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
18630
|
+
"div",
|
|
18631
|
+
{
|
|
18632
|
+
className: "\n flex grow basis-0 flex-col overflow-y-auto px-2 pb-2 scrollbar-sigil\n ",
|
|
18633
|
+
children: [
|
|
18634
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TimecodeToolboxLogo, { className: "h-[20%] max-h-[420px] min-h-[110px] w-full" }),
|
|
18635
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("h2", { className: "text-center text-sigil-usage-hint-foreground", children: STRINGS.licensePrompt }),
|
|
18636
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(LicenseContent, { license: info.license }),
|
|
18637
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "flex justify-center p-2", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
18638
|
+
ControlButton,
|
|
18639
|
+
{
|
|
18640
|
+
onClick: acceptLicense,
|
|
18641
|
+
variant: "large",
|
|
18642
|
+
icon: "check",
|
|
18643
|
+
primary: true,
|
|
18644
|
+
children: STRINGS.acceptLicense
|
|
18645
|
+
}
|
|
18646
|
+
) })
|
|
18647
|
+
]
|
|
18648
|
+
}
|
|
18649
|
+
)
|
|
18650
|
+
}
|
|
18651
|
+
);
|
|
18652
|
+
};
|
|
18653
|
+
|
|
18654
|
+
// src/components/frontend/toolbox/core/updates.tsx
|
|
18655
|
+
var import_react41 = require("react");
|
|
18656
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
18657
|
+
var UpdateBanner = () => {
|
|
18658
|
+
const { updates } = useApplicationState();
|
|
18659
|
+
const { version } = useSystemInformation();
|
|
18660
|
+
const { openExternalLink } = useBrowserContext();
|
|
18661
|
+
const [displayState, setDisplayState] = (0, import_react41.useState)();
|
|
18662
|
+
(0, import_react41.useEffect)(() => {
|
|
18663
|
+
if (updates?.type !== "loading") {
|
|
18664
|
+
setDisplayState(updates);
|
|
18665
|
+
}
|
|
18666
|
+
}, [updates]);
|
|
18667
|
+
const openDownloadLink = (0, import_react41.useCallback)(() => {
|
|
18668
|
+
if (displayState?.type === "updates-available" && displayState.response.downloadUrl) {
|
|
18669
|
+
openExternalLink(displayState.response.downloadUrl);
|
|
18670
|
+
}
|
|
18671
|
+
}, [displayState, openExternalLink]);
|
|
18672
|
+
if (displayState?.type === "error") {
|
|
18673
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
18674
|
+
"div",
|
|
18675
|
+
{
|
|
18676
|
+
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 ",
|
|
18677
|
+
children: [
|
|
18678
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon2, { icon: "error" }),
|
|
18679
|
+
displayState.error
|
|
18680
|
+
]
|
|
18681
|
+
}
|
|
18682
|
+
);
|
|
18683
|
+
}
|
|
18684
|
+
if (displayState?.type === "updates-available") {
|
|
18685
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
18686
|
+
"div",
|
|
18687
|
+
{
|
|
18688
|
+
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 ",
|
|
18689
|
+
children: [
|
|
18690
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon2, { icon: "upgrade" }),
|
|
18691
|
+
STRINGS.updates.updateAvailable(
|
|
18692
|
+
version,
|
|
18693
|
+
displayState.response.latestVersion
|
|
18694
|
+
),
|
|
18695
|
+
displayState.response.downloadUrl && /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
18696
|
+
"button",
|
|
18697
|
+
{
|
|
18698
|
+
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 ",
|
|
18699
|
+
onClick: openDownloadLink,
|
|
18700
|
+
children: [
|
|
18701
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon2, { icon: "download" }),
|
|
18702
|
+
STRINGS.updates.download
|
|
18703
|
+
]
|
|
18704
|
+
}
|
|
18705
|
+
)
|
|
18706
|
+
]
|
|
18707
|
+
}
|
|
18708
|
+
);
|
|
18709
|
+
}
|
|
18710
|
+
return null;
|
|
18711
|
+
};
|
|
18712
|
+
|
|
18713
|
+
// src/components/frontend/toolbox/root.tsx
|
|
18714
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
18715
|
+
var ToolboxRoot = ({ info }) => {
|
|
18716
|
+
const { config } = info;
|
|
18717
|
+
const { sendMessage, call } = (0, import_react42.useContext)(StageContext);
|
|
18718
|
+
const [dialogMode, setDialogMode] = (0, import_react42.useState)(null);
|
|
18719
|
+
const [assignToOutput, setAssignToOutput] = (0, import_react42.useState)(null);
|
|
18720
|
+
(0, import_react42.useEffect)(() => {
|
|
18102
18721
|
if (assignToOutput) {
|
|
18103
18722
|
const onEscape = (e) => {
|
|
18104
18723
|
if (e.key === "Escape") {
|
|
@@ -18111,7 +18730,7 @@ var ToolboxRoot = ({ info }) => {
|
|
|
18111
18730
|
};
|
|
18112
18731
|
}
|
|
18113
18732
|
}, [assignToOutput]);
|
|
18114
|
-
const updateConfig = (0,
|
|
18733
|
+
const updateConfig = (0, import_react42.useCallback)(
|
|
18115
18734
|
(change) => {
|
|
18116
18735
|
const diff = diffJson(config, change(config));
|
|
18117
18736
|
sendMessage?.({
|
|
@@ -18125,15 +18744,15 @@ var ToolboxRoot = ({ info }) => {
|
|
|
18125
18744
|
},
|
|
18126
18745
|
[sendMessage, info.key, config]
|
|
18127
18746
|
);
|
|
18128
|
-
const configContext = (0,
|
|
18747
|
+
const configContext = (0, import_react42.useMemo)(
|
|
18129
18748
|
() => ({
|
|
18130
18749
|
config,
|
|
18131
18750
|
updateConfig
|
|
18132
18751
|
}),
|
|
18133
18752
|
[config, updateConfig]
|
|
18134
18753
|
);
|
|
18135
|
-
const closeDialog = (0,
|
|
18136
|
-
const getNetworkInterfaces = (0,
|
|
18754
|
+
const closeDialog = (0, import_react42.useCallback)(() => setDialogMode(null), []);
|
|
18755
|
+
const getNetworkInterfaces = (0, import_react42.useCallback)(async () => {
|
|
18137
18756
|
if (!call) {
|
|
18138
18757
|
throw new Error("No call function available");
|
|
18139
18758
|
}
|
|
@@ -18144,12 +18763,12 @@ var ToolboxRoot = ({ info }) => {
|
|
|
18144
18763
|
action: "toolbox-root-get-network-interfaces"
|
|
18145
18764
|
});
|
|
18146
18765
|
}, [call, info.key]);
|
|
18147
|
-
const networkContextValue = (0,
|
|
18766
|
+
const networkContextValue = (0, import_react42.useMemo)(() => {
|
|
18148
18767
|
return {
|
|
18149
18768
|
getNetworkInterfaces
|
|
18150
18769
|
};
|
|
18151
18770
|
}, [getNetworkInterfaces]);
|
|
18152
|
-
const assignToOutputCallback = (0,
|
|
18771
|
+
const assignToOutputCallback = (0, import_react42.useMemo)(() => {
|
|
18153
18772
|
if (!assignToOutput) {
|
|
18154
18773
|
return null;
|
|
18155
18774
|
}
|
|
@@ -18174,7 +18793,7 @@ var ToolboxRoot = ({ info }) => {
|
|
|
18174
18793
|
setAssignToOutput(null);
|
|
18175
18794
|
};
|
|
18176
18795
|
}, [assignToOutput, updateConfig]);
|
|
18177
|
-
const callHandler = (0,
|
|
18796
|
+
const callHandler = (0, import_react42.useCallback)(
|
|
18178
18797
|
async ({ path, handler, args }) => {
|
|
18179
18798
|
if (!call) {
|
|
18180
18799
|
throw new Error("No call function available");
|
|
@@ -18191,149 +18810,121 @@ var ToolboxRoot = ({ info }) => {
|
|
|
18191
18810
|
},
|
|
18192
18811
|
[call, info.key]
|
|
18193
18812
|
);
|
|
18194
|
-
const handlers = (0,
|
|
18813
|
+
const handlers = (0, import_react42.useMemo)(
|
|
18195
18814
|
() => ({
|
|
18196
18815
|
handlers: info.handlers,
|
|
18197
18816
|
callHandler
|
|
18198
18817
|
}),
|
|
18199
18818
|
[info.handlers, callHandler]
|
|
18200
18819
|
);
|
|
18201
|
-
const windowedTimecodeId = (0,
|
|
18820
|
+
const windowedTimecodeId = (0, import_react42.useMemo)(
|
|
18202
18821
|
() => getFragmentValue("tc", TIMECODE_INSTANCE_ID),
|
|
18203
18822
|
[]
|
|
18204
18823
|
);
|
|
18205
|
-
const
|
|
18206
|
-
|
|
18207
|
-
|
|
18208
|
-
|
|
18209
|
-
|
|
18210
|
-
|
|
18211
|
-
{
|
|
18212
|
-
|
|
18213
|
-
|
|
18214
|
-
|
|
18215
|
-
|
|
18216
|
-
|
|
18217
|
-
|
|
18218
|
-
|
|
18219
|
-
ControlButton,
|
|
18220
|
-
{
|
|
18221
|
-
onClick: () => setWindowMode(
|
|
18222
|
-
(mode) => mode === "settings" ? null : "settings"
|
|
18824
|
+
const root = (0, import_react42.useMemo)(
|
|
18825
|
+
() => windowedTimecodeId ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Layout, { modes: null, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(FullscreenTimecodeDisplay, { id: windowedTimecodeId }) }) : /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
|
|
18826
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18827
|
+
Layout,
|
|
18828
|
+
{
|
|
18829
|
+
footer: true,
|
|
18830
|
+
modes: {
|
|
18831
|
+
license: {
|
|
18832
|
+
child: (setWindowMode) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18833
|
+
License,
|
|
18834
|
+
{
|
|
18835
|
+
license: info.license,
|
|
18836
|
+
setWindowMode
|
|
18837
|
+
}
|
|
18223
18838
|
),
|
|
18224
|
-
|
|
18839
|
+
icon: "info",
|
|
18840
|
+
title: STRINGS.license
|
|
18841
|
+
},
|
|
18842
|
+
settings: {
|
|
18843
|
+
child: (setWindowMode) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Settings, { setWindowMode }),
|
|
18225
18844
|
icon: "settings",
|
|
18226
|
-
|
|
18227
|
-
|
|
18228
|
-
|
|
18229
|
-
|
|
18230
|
-
/* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18231
|
-
ControlButton,
|
|
18232
|
-
{
|
|
18233
|
-
onClick: () => setWindowMode((mode) => mode === "debug" ? null : "debug"),
|
|
18234
|
-
variant: "titlebar",
|
|
18845
|
+
title: STRINGS.settings.title
|
|
18846
|
+
},
|
|
18847
|
+
debug: {
|
|
18848
|
+
child: () => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Debugger, { title: STRINGS.debugger, className: "size-full" }),
|
|
18235
18849
|
icon: "bug_report",
|
|
18236
|
-
|
|
18237
|
-
title: STRINGS.toggle(STRINGS.debugger)
|
|
18850
|
+
title: STRINGS.debugger
|
|
18238
18851
|
}
|
|
18239
|
-
|
|
18240
|
-
|
|
18241
|
-
|
|
18242
|
-
|
|
18243
|
-
|
|
18244
|
-
|
|
18245
|
-
|
|
18246
|
-
|
|
18247
|
-
|
|
18248
|
-
|
|
18249
|
-
|
|
18250
|
-
|
|
18251
|
-
|
|
18252
|
-
|
|
18253
|
-
|
|
18254
|
-
|
|
18255
|
-
|
|
18256
|
-
|
|
18257
|
-
|
|
18258
|
-
|
|
18259
|
-
|
|
18260
|
-
|
|
18261
|
-
|
|
18262
|
-
|
|
18263
|
-
|
|
18264
|
-
|
|
18265
|
-
|
|
18266
|
-
|
|
18267
|
-
|
|
18268
|
-
|
|
18269
|
-
|
|
18270
|
-
|
|
18271
|
-
|
|
18272
|
-
|
|
18273
|
-
|
|
18274
|
-
|
|
18275
|
-
|
|
18276
|
-
|
|
18277
|
-
|
|
18278
|
-
}
|
|
18279
|
-
)
|
|
18280
|
-
]
|
|
18281
|
-
}
|
|
18282
|
-
),
|
|
18283
|
-
dialogMode?.section.type === "inputs" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18284
|
-
InputSettingsDialog,
|
|
18285
|
-
{
|
|
18286
|
-
close: closeDialog,
|
|
18287
|
-
input: dialogMode.section.input,
|
|
18288
|
-
target: dialogMode.target
|
|
18289
|
-
}
|
|
18290
|
-
),
|
|
18291
|
-
dialogMode?.section.type === "generators" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18292
|
-
GeneratorSettingsDialog,
|
|
18293
|
-
{
|
|
18294
|
-
close: closeDialog,
|
|
18295
|
-
generator: dialogMode.section.generator,
|
|
18296
|
-
target: dialogMode.target
|
|
18297
|
-
}
|
|
18298
|
-
),
|
|
18299
|
-
dialogMode?.section.type === "outputs" && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
18300
|
-
OutputSettingsDialog,
|
|
18301
|
-
{
|
|
18302
|
-
close: closeDialog,
|
|
18303
|
-
output: dialogMode.section.output,
|
|
18304
|
-
target: dialogMode.target
|
|
18305
|
-
}
|
|
18306
|
-
)
|
|
18307
|
-
] }),
|
|
18308
|
-
isMainWindow && /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
|
|
18309
|
-
"div",
|
|
18852
|
+
},
|
|
18853
|
+
licenseMode: "license",
|
|
18854
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
|
|
18855
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(UpdateBanner, {}),
|
|
18856
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
18857
|
+
"div",
|
|
18858
|
+
{
|
|
18859
|
+
className: "\n flex h-0 grow flex-col gap-px overflow-y-auto bg-sigil-border\n scrollbar-sigil\n ",
|
|
18860
|
+
children: [
|
|
18861
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18862
|
+
InputsSection,
|
|
18863
|
+
{
|
|
18864
|
+
setDialogMode,
|
|
18865
|
+
assignToOutput: assignToOutputCallback
|
|
18866
|
+
}
|
|
18867
|
+
),
|
|
18868
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18869
|
+
GeneratorsSection,
|
|
18870
|
+
{
|
|
18871
|
+
setDialogMode,
|
|
18872
|
+
assignToOutput: assignToOutputCallback
|
|
18873
|
+
}
|
|
18874
|
+
),
|
|
18875
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18876
|
+
OutputsSection,
|
|
18877
|
+
{
|
|
18878
|
+
setDialogMode,
|
|
18879
|
+
assignToOutput,
|
|
18880
|
+
setAssignToOutput
|
|
18881
|
+
}
|
|
18882
|
+
)
|
|
18883
|
+
]
|
|
18884
|
+
}
|
|
18885
|
+
)
|
|
18886
|
+
] })
|
|
18887
|
+
}
|
|
18888
|
+
),
|
|
18889
|
+
dialogMode?.section.type === "inputs" && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18890
|
+
InputSettingsDialog,
|
|
18310
18891
|
{
|
|
18311
|
-
|
|
18312
|
-
|
|
18313
|
-
|
|
18314
|
-
|
|
18315
|
-
|
|
18316
|
-
|
|
18892
|
+
close: closeDialog,
|
|
18893
|
+
input: dialogMode.section.input,
|
|
18894
|
+
target: dialogMode.target
|
|
18895
|
+
}
|
|
18896
|
+
),
|
|
18897
|
+
dialogMode?.section.type === "generators" && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18898
|
+
GeneratorSettingsDialog,
|
|
18899
|
+
{
|
|
18900
|
+
close: closeDialog,
|
|
18901
|
+
generator: dialogMode.section.generator,
|
|
18902
|
+
target: dialogMode.target
|
|
18903
|
+
}
|
|
18904
|
+
),
|
|
18905
|
+
dialogMode?.section.type === "outputs" && /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
18906
|
+
OutputSettingsDialog,
|
|
18907
|
+
{
|
|
18908
|
+
close: closeDialog,
|
|
18909
|
+
output: dialogMode.section.output,
|
|
18910
|
+
target: dialogMode.target
|
|
18317
18911
|
}
|
|
18318
18912
|
)
|
|
18319
18913
|
] }),
|
|
18320
18914
|
[
|
|
18321
|
-
connection,
|
|
18322
|
-
reconnect,
|
|
18323
18915
|
assignToOutput,
|
|
18324
18916
|
assignToOutputCallback,
|
|
18325
18917
|
closeDialog,
|
|
18326
18918
|
dialogMode,
|
|
18327
|
-
|
|
18328
|
-
|
|
18329
|
-
windowedTimecodeId
|
|
18919
|
+
windowedTimecodeId,
|
|
18920
|
+
info.license
|
|
18330
18921
|
]
|
|
18331
18922
|
);
|
|
18332
|
-
return /* @__PURE__ */ (0,
|
|
18923
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ConfigContext.Provider, { value: configContext, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(NetworkContext.Provider, { value: networkContextValue, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ApplicationStateContext.Provider, { value: info.state, children: /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(ApplicationHandlersContext.Provider, { value: handlers, children: root }) }) }) });
|
|
18333
18924
|
};
|
|
18334
18925
|
|
|
18335
18926
|
// src/components/frontend/index.tsx
|
|
18336
|
-
var
|
|
18927
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
18337
18928
|
var timecodeToolboxFrontendComponents = () => ({
|
|
18338
18929
|
namespace: NAMESPACE,
|
|
18339
18930
|
render: (info) => {
|
|
@@ -18342,7 +18933,9 @@ var timecodeToolboxFrontendComponents = () => ({
|
|
|
18342
18933
|
}
|
|
18343
18934
|
switch (info.component) {
|
|
18344
18935
|
case "toolbox-root":
|
|
18345
|
-
return /* @__PURE__ */ (0,
|
|
18936
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(ToolboxRoot, { info });
|
|
18937
|
+
case "license-gate":
|
|
18938
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(LicenseGate, { info });
|
|
18346
18939
|
}
|
|
18347
18940
|
}
|
|
18348
18941
|
});
|
|
@@ -18350,7 +18943,7 @@ var startTimecodeToolboxServerFrontend = (browser) => {
|
|
|
18350
18943
|
startSigilFrontend({
|
|
18351
18944
|
browser,
|
|
18352
18945
|
appRenderers: [timecodeToolboxFrontendComponents()],
|
|
18353
|
-
loadingState: () => /* @__PURE__ */ (0,
|
|
18946
|
+
loadingState: () => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { style: { width: "100%", textAlign: "center", padding: "2rem" }, children: "Loading Toolbox..." })
|
|
18354
18947
|
});
|
|
18355
18948
|
};
|
|
18356
18949
|
window.startTimecodeToolboxServerFrontend = startTimecodeToolboxServerFrontend;
|