@arcanewizards/timecode-toolbox 0.0.3 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +21 -0
  2. package/dist/components/frontend/index.d.mts +13 -0
  3. package/dist/components/frontend/index.d.ts +13 -0
  4. package/dist/components/frontend/index.js +18978 -0
  5. package/dist/components/frontend/index.mjs +19016 -0
  6. package/dist/entrypoint.css +2788 -0
  7. package/dist/entrypoint.js +42821 -0
  8. package/dist/entrypoint.js.map +7 -0
  9. package/dist/frontend.js +42818 -0
  10. package/dist/frontend.js.map +7 -0
  11. package/dist/index.d.mts +59 -0
  12. package/dist/index.d.ts +59 -0
  13. package/dist/index.js +14894 -0
  14. package/dist/index.mjs +14921 -0
  15. package/dist/start.d.mts +1 -0
  16. package/dist/start.d.ts +1 -0
  17. package/dist/start.js +14886 -0
  18. package/dist/start.mjs +14918 -0
  19. package/package.json +37 -28
  20. package/.turbo/turbo-build.log +0 -55
  21. package/CHANGELOG.md +0 -24
  22. package/eslint.config.mjs +0 -49
  23. package/src/app.tsx +0 -147
  24. package/src/components/backend/index.ts +0 -6
  25. package/src/components/backend/toolbox-root.ts +0 -119
  26. package/src/components/frontend/constants.ts +0 -81
  27. package/src/components/frontend/entrypoint.ts +0 -12
  28. package/src/components/frontend/frontend.css +0 -108
  29. package/src/components/frontend/index.tsx +0 -46
  30. package/src/components/frontend/toolbox/content.tsx +0 -45
  31. package/src/components/frontend/toolbox/context.tsx +0 -63
  32. package/src/components/frontend/toolbox/core/size-aware-div.tsx +0 -51
  33. package/src/components/frontend/toolbox/core/timecode-display.tsx +0 -592
  34. package/src/components/frontend/toolbox/generators.tsx +0 -318
  35. package/src/components/frontend/toolbox/inputs.tsx +0 -484
  36. package/src/components/frontend/toolbox/outputs.tsx +0 -581
  37. package/src/components/frontend/toolbox/preferences.ts +0 -25
  38. package/src/components/frontend/toolbox/root.tsx +0 -335
  39. package/src/components/frontend/toolbox/settings.tsx +0 -54
  40. package/src/components/frontend/toolbox/types.ts +0 -28
  41. package/src/components/frontend/toolbox/util.tsx +0 -61
  42. package/src/components/proto.ts +0 -420
  43. package/src/config.ts +0 -7
  44. package/src/generators/clock.tsx +0 -206
  45. package/src/generators/index.tsx +0 -15
  46. package/src/index.ts +0 -38
  47. package/src/inputs/artnet.tsx +0 -305
  48. package/src/inputs/index.tsx +0 -13
  49. package/src/inputs/tcnet.tsx +0 -272
  50. package/src/outputs/artnet.tsx +0 -170
  51. package/src/outputs/index.tsx +0 -11
  52. package/src/start.ts +0 -47
  53. package/src/tree.ts +0 -133
  54. package/src/types.ts +0 -12
  55. package/src/urls.ts +0 -49
  56. package/src/util.ts +0 -82
  57. package/tailwind.config.cjs +0 -7
  58. package/tsconfig.json +0 -10
  59. package/tsup.config.ts +0 -10
package/package.json CHANGED
@@ -1,12 +1,16 @@
1
1
  {
2
2
  "name": "@arcanewizards/timecode-toolbox",
3
- "version": "0.0.3",
3
+ "version": "0.1.1",
4
4
  "private": false,
5
+ "license": "MIT",
5
6
  "repository": {
6
7
  "type": "git",
7
8
  "url": "https://github.com/ArcaneWizards/open-source.git",
8
9
  "directory": "apps/timecode-toolbox"
9
10
  },
11
+ "bin": {
12
+ "timecode-toolbox": "./dist/start.js"
13
+ },
10
14
  "exports": {
11
15
  ".": {
12
16
  "@arcanewizards/source": "./src/index.ts",
@@ -23,30 +27,15 @@
23
27
  "./entrypoint.css": "./dist/entrypoint.css",
24
28
  "./package.json": "./package.json"
25
29
  },
26
- "scripts": {
27
- "build": "pnpm check:types && rm -rf dist && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map",
28
- "build:entrypoint": "arcane-build-frontend --entry src/components/frontend/entrypoint.ts --outfile dist/entrypoint.js --sourcemap",
29
- "build:frontend": "arcane-build-frontend --entry src/components/frontend/index.tsx --outfile dist/frontend.js --sourcemap",
30
- "build:styles": "tailwindcss -i ./src/components/frontend/frontend.css -o ./dist/entrypoint.css",
31
- "check:types": "tsc --noEmit",
32
- "format:fix": "cd .. && pnpm format:fix",
33
- "lint": "eslint . --max-warnings 0",
34
- "lint:fix": "eslint . --max-warnings 0 --fix",
35
- "start": "pnpm build:entrypoint && pnpm build:styles && node --import=tsx --conditions=@arcanewizards/source src/start"
36
- },
30
+ "files": [
31
+ "LICENSE",
32
+ "dist"
33
+ ],
37
34
  "devDependencies": {
38
35
  "@arcanejs/build-utils": "^0.1.2",
39
36
  "@arcanejs/diff": "^0.5.2",
40
37
  "@arcanejs/protocol": "^0.8.0",
41
- "@arcanejs/react-toolkit": "^0.15.1",
42
- "@arcanejs/toolkit": "^8.0.0",
43
38
  "@arcanejs/toolkit-frontend": "^0.11.0",
44
- "@arcanewizards/artnet": "workspace:^",
45
- "@arcanewizards/eslint-config": "workspace:^",
46
- "@arcanewizards/net-utils": "workspace:^",
47
- "@arcanewizards/sigil": "workspace:^",
48
- "@arcanewizards/tcnet": "workspace:^",
49
- "@arcanewizards/typescript-config": "workspace:^",
50
39
  "@types/lodash": "^4.17.13",
51
40
  "@types/node": "^22.19.3",
52
41
  "@types/react": "^19.2.2",
@@ -55,20 +44,40 @@
55
44
  "eslint": "^9",
56
45
  "eslint-plugin-better-tailwindcss": "^4.2.0",
57
46
  "lodash": "^4.17.21",
58
- "pino": "^9.5.0",
59
- "pino-pretty": "^11.3.0",
60
- "react": "^19.2.0",
61
47
  "tailwindcss": "^4.1.13",
62
48
  "tsup": "^8.3.5",
63
49
  "tsx": "^4.19.1",
64
50
  "typescript": "^5.7.3",
65
51
  "uuid": "^11.0.3",
66
- "zod": "^3.22.4"
67
- },
68
- "dependencies": {
52
+ "zod": "^3.22.4",
69
53
  "@tailwindcss/cli": "^4.1.13",
70
54
  "music-metadata": "^11.0.0",
71
55
  "osc-js": "^2.4.1",
72
- "radix-ui": "^1.4.3"
56
+ "radix-ui": "^1.4.3",
57
+ "@arcanewizards/apis": "^0.0.1",
58
+ "@arcanewizards/artnet": "^0.1.3",
59
+ "@arcanewizards/eslint-config": "^0.0.0",
60
+ "@arcanewizards/net-utils": "^0.1.3",
61
+ "@arcanewizards/sigil": "^0.1.3",
62
+ "@arcanewizards/tcnet": "^0.1.3",
63
+ "@arcanewizards/typescript-config": "^0.0.0"
64
+ },
65
+ "dependencies": {
66
+ "@arcanejs/react-toolkit": "^0.15.1",
67
+ "@arcanejs/toolkit": "^8.0.0",
68
+ "pino": "^9.5.0",
69
+ "pino-pretty": "^11.3.0",
70
+ "react": "^19.2.0"
71
+ },
72
+ "scripts": {
73
+ "build": "pnpm check:types && rm -rf dist && cp ../../LICENSE ./LICENSE && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map",
74
+ "build:entrypoint": "arcane-build-frontend --entry src/components/frontend/entrypoint.ts --outfile dist/entrypoint.js --sourcemap",
75
+ "build:frontend": "arcane-build-frontend --entry src/components/frontend/index.tsx --outfile dist/frontend.js --sourcemap",
76
+ "build:styles": "tailwindcss -i ./src/components/frontend/frontend.css -o ./dist/entrypoint.css",
77
+ "check:types": "tsc --noEmit",
78
+ "format:fix": "cd .. && pnpm format:fix",
79
+ "lint": "eslint . --max-warnings 0",
80
+ "lint:fix": "eslint . --max-warnings 0 --fix",
81
+ "start": "pnpm build:entrypoint && pnpm build:styles && node --import=tsx --conditions=@arcanewizards/source src/start"
73
82
  }
74
- }
83
+ }
@@ -1,55 +0,0 @@
1
-
2
- 
3
- > @arcanewizards/timecode-toolbox@0.0.3 build /Users/sam/repos/arcane/open-source/apps/timecode-toolbox
4
- > pnpm check:types && rm -rf dist && tsup && pnpm build:entrypoint && pnpm build:frontend && pnpm build:styles && check-export-map
5
-
6
-
7
- > @arcanewizards/timecode-toolbox@0.0.3 check:types /Users/sam/repos/arcane/open-source/apps/timecode-toolbox
8
- > tsc --noEmit
9
-
10
- CLI Building entry: src/index.ts, src/components/frontend/index.tsx
11
- CLI Using tsconfig: tsconfig.json
12
- CLI tsup v8.3.5
13
- CLI Using tsup config: /Users/sam/repos/arcane/open-source/apps/timecode-toolbox/tsup.config.ts
14
- CLI Target: es2022
15
- CJS Build start
16
- ESM Build start
17
- CJS dist/index.js 2.03 MB
18
- CJS dist/components/frontend/index.js 1.96 MB
19
- CJS ⚡️ Build success in 142ms
20
- ESM dist/components/frontend/index.mjs 1.96 MB
21
- ESM dist/index.mjs 2.03 MB
22
- ESM ⚡️ Build success in 143ms
23
- DTS Build start
24
- DTS ⚡️ Build success in 2650ms
25
- DTS dist/index.d.ts 2.18 KB
26
- DTS dist/components/frontend/index.d.ts 649.00 B
27
- DTS dist/index.d.mts 2.18 KB
28
- DTS dist/components/frontend/index.d.mts 649.00 B
29
-
30
- > @arcanewizards/timecode-toolbox@0.0.3 build:entrypoint /Users/sam/repos/arcane/open-source/apps/timecode-toolbox
31
- > arcane-build-frontend --entry src/components/frontend/entrypoint.ts --outfile dist/entrypoint.js --sourcemap
32
-
33
-
34
- dist/entrypoint.js 1.7mb ⚠️
35
- dist/entrypoint.js.map 2.8mb
36
-
37
- ⚡ Done in 869ms
38
-
39
- > @arcanewizards/timecode-toolbox@0.0.3 build:frontend /Users/sam/repos/arcane/open-source/apps/timecode-toolbox
40
- > arcane-build-frontend --entry src/components/frontend/index.tsx --outfile dist/frontend.js --sourcemap
41
-
42
-
43
- dist/frontend.js 1.7mb ⚠️
44
- dist/frontend.js.map 2.8mb
45
-
46
- ⚡ Done in 802ms
47
-
48
- > @arcanewizards/timecode-toolbox@0.0.3 build:styles /Users/sam/repos/arcane/open-source/apps/timecode-toolbox
49
- > tailwindcss -i ./src/components/frontend/frontend.css -o ./dist/entrypoint.css
50
-
51
- ≈ tailwindcss v4.2.1
52
-
53
- Done in 47ms
54
- Checking export maps...
55
-  PASS  package.json
package/CHANGELOG.md DELETED
@@ -1,24 +0,0 @@
1
- # @arcanewizards/timecode-toolbox
2
-
3
- ## 0.0.3
4
-
5
- ### Patch Changes
6
-
7
- - Introduce Appearance Settings
8
-
9
- Make it possible to choose between light/dark/os mode,
10
- and to pick a primary interface color.
11
-
12
- - Introduce new clock generator
13
-
14
- Introduce a new generator that uses the local time of the system clock,
15
- and can be started, stopped, reset etc...
16
-
17
- This can be connected to an output like all the existing inputs.
18
-
19
- - Allow individual timecodes to be opened in new window
20
-
21
- For cases where users want to be able to focus on one particular timecode,
22
- or have complex multi-window / workspace. /monitor setups where they want to be
23
- able to display specific timecodes in different places,
24
- it's now possible to open a specific timecode in a new window.
package/eslint.config.mjs DELETED
@@ -1,49 +0,0 @@
1
- import { defineConfig } from 'eslint/config';
2
- import { fileURLToPath } from 'url';
3
- import { dirname } from 'path';
4
-
5
- import {
6
- tsParser,
7
- js,
8
- FlatCompat,
9
- } from '@arcanewizards/eslint-config/dependencies.js';
10
- import eslintPluginBetterTailwindcss from 'eslint-plugin-better-tailwindcss';
11
- import reactTailwindConfig from '@arcanewizards/eslint-config/react-tailwind.js';
12
-
13
- const __filename = fileURLToPath(import.meta.url);
14
- const __dirname = dirname(__filename);
15
- const { REACT_TAILWIND_CALLEES } = reactTailwindConfig;
16
-
17
- const compat = new FlatCompat({
18
- baseDirectory: __dirname,
19
- recommendedConfig: js.configs.recommended,
20
- allConfig: js.configs.all,
21
- });
22
-
23
- export default defineConfig([
24
- {
25
- extends: compat.extends('@arcanewizards/eslint-config/library.js'),
26
-
27
- languageOptions: {
28
- parser: tsParser,
29
- },
30
- },
31
- {
32
- extends: [eslintPluginBetterTailwindcss.configs.recommended],
33
- settings: {
34
- 'better-tailwindcss': {
35
- entryPoint: './src/components/frontend/frontend.css',
36
- tsconfig: './tsconfig.json',
37
- callees: REACT_TAILWIND_CALLEES,
38
- },
39
- },
40
- rules: {
41
- 'better-tailwindcss/no-unknown-classes': 'error',
42
- },
43
- },
44
- {
45
- rules: {
46
- 'turbo/no-undeclared-env-vars': 'off',
47
- },
48
- },
49
- ]);
package/src/app.tsx DELETED
@@ -1,147 +0,0 @@
1
- import {
2
- AppShell,
3
- AppListenerManager,
4
- SigilRuntimeAppProps,
5
- } from '@arcanewizards/sigil';
6
- import {
7
- JSX,
8
- ReactNode,
9
- useCallback,
10
- useEffect,
11
- useMemo,
12
- useState,
13
- } from 'react';
14
- import { C } from './components/backend';
15
- import { ToolboxConfigData } from './config';
16
- import path from 'node:path';
17
- import { useDataFileContext } from '@arcanejs/react-toolkit/data';
18
- import {
19
- ApplicationState,
20
- AvailableHandlers,
21
- DEFAULT_CONFIG,
22
- TimecodeHandlerMethods,
23
- ToolboxConfig,
24
- ToolboxRootCallHandler,
25
- } from './components/proto';
26
- import { patchJson, Diff } from '@arcanejs/diff';
27
- import { InputConnections } from './inputs';
28
- import { OutputConnections } from './outputs';
29
- import { Generators } from './generators';
30
- import { TimecodeHandlers } from './types';
31
- import { getTreeValue, mapTree, Tree } from './tree';
32
-
33
- export type AppApi = Record<never, never>;
34
-
35
- export type TimecodeToolboxAppProps = {
36
- dataDirectory: string;
37
- };
38
-
39
- export type AppProps = SigilRuntimeAppProps<AppApi, TimecodeToolboxAppProps>;
40
-
41
- export const App = ({
42
- title,
43
- version,
44
- toolkit,
45
- dataDirectory,
46
- logger,
47
- logEventEmitter,
48
- setWindowUrl,
49
- shutdownContext,
50
- }: AppProps): ReactNode => {
51
- const { data, error, updateData, resetData } =
52
- useDataFileContext(ToolboxConfigData);
53
-
54
- useEffect(() => {
55
- if (error) {
56
- logger.warn('Resetting config to application default');
57
- resetData();
58
- }
59
- }, [logger, error, resetData]);
60
-
61
- const onUpdateConfig = (diff: Diff<ToolboxConfig>) => {
62
- updateData((prev) => patchJson(prev, diff) ?? DEFAULT_CONFIG);
63
- };
64
-
65
- const [state, setState] = useState<Omit<ApplicationState, 'handlers'>>({
66
- inputs: {},
67
- outputs: {},
68
- generators: {},
69
- });
70
-
71
- const [handlers, setHandlers] = useState<TimecodeHandlers>({ children: {} });
72
-
73
- const availableHandlers: Tree<AvailableHandlers> = useMemo(
74
- () =>
75
- mapTree(handlers, (node) =>
76
- Object.fromEntries(
77
- Object.entries(node)
78
- .filter(([_, handler]) => handler)
79
- .map(([key]) => [key, true]),
80
- ),
81
- ),
82
- [handlers],
83
- );
84
-
85
- const callHandler = useCallback(
86
- async <H extends keyof AvailableHandlers>(
87
- call: ToolboxRootCallHandler<H>,
88
- ) => {
89
- const handlerFunc = getTreeValue(handlers, call.path)?.[call.handler];
90
- if (handlerFunc) {
91
- return await (
92
- handlerFunc as (
93
- ...args: Parameters<NonNullable<TimecodeHandlerMethods[H]>>
94
- ) => void
95
- )(...call.args);
96
- }
97
- throw new Error(
98
- `No handler found for path: ${call.path.join(' -> ')} and handler: ${call.handler}`,
99
- );
100
- },
101
- [handlers],
102
- );
103
-
104
- return (
105
- <AppShell
106
- title={title}
107
- version={version}
108
- dataDirectory={dataDirectory}
109
- logger={logger}
110
- logEventEmitter={logEventEmitter}
111
- shutdownContext={shutdownContext}
112
- >
113
- <C.ToolboxRoot
114
- config={data}
115
- state={state}
116
- handlers={availableHandlers}
117
- onUpdateConfig={onUpdateConfig}
118
- onCallHandler={callHandler}
119
- />
120
- <InputConnections state={state} setState={setState} />
121
- <Generators state={state} setState={setState} setHandlers={setHandlers} />
122
- <OutputConnections state={state} setState={setState} />
123
- <AppListenerManager
124
- toolkit={toolkit}
125
- setWindowUrl={setWindowUrl}
126
- listenerConfig={{
127
- default: {
128
- port: {
129
- from: 4100,
130
- to: 4200,
131
- },
132
- },
133
- }}
134
- />
135
- </AppShell>
136
- );
137
- };
138
-
139
- export const createApp = (props: AppProps): JSX.Element => {
140
- return (
141
- <ToolboxConfigData.Provider
142
- path={path.join(props.dataDirectory, 'config.json')}
143
- >
144
- <App {...props} />
145
- </ToolboxConfigData.Provider>
146
- );
147
- };
@@ -1,6 +0,0 @@
1
- import { prepareComponents } from '@arcanejs/react-toolkit';
2
- import { ToolboxRoot } from './toolbox-root';
3
-
4
- export const C = prepareComponents('timecode-toolbox', {
5
- ToolboxRoot,
6
- });
@@ -1,119 +0,0 @@
1
- import { IDMap } from '@arcanejs/toolkit/util';
2
- import { Diff } from '@arcanejs/diff';
3
-
4
- import {
5
- Base,
6
- EventEmitter,
7
- Listenable,
8
- } from '@arcanejs/toolkit/components/base';
9
- import {
10
- TimecodeToolboxComponentCalls,
11
- Namespace,
12
- ToolboxRootComponent,
13
- ToolboxConfig,
14
- isTimecodeToolboxComponentMessage,
15
- DEFAULT_CONFIG,
16
- isTimecodeToolboxComponentCall,
17
- ToolboxRootCallHandler,
18
- } from '../proto';
19
- import {
20
- AnyClientComponentCall,
21
- AnyClientComponentMessage,
22
- } from '@arcanejs/protocol';
23
- import { getNetworkInterfaces } from '@arcanewizards/net-utils';
24
-
25
- export type Events = {
26
- updateConfig: (diff: Diff<ToolboxConfig>) => void;
27
- callHandler: (call: ToolboxRootCallHandler) => Promise<void>;
28
- };
29
-
30
- export type AppRootProps = Pick<
31
- ToolboxRootComponent,
32
- 'config' | 'state' | 'handlers'
33
- > & {
34
- onUpdateConfig?: Events['updateConfig'];
35
- onCallHandler?: Events['callHandler'];
36
- };
37
-
38
- const DEFAULT_PROPS: AppRootProps = {
39
- config: DEFAULT_CONFIG,
40
- state: {
41
- inputs: {},
42
- outputs: {},
43
- generators: {},
44
- },
45
- handlers: { children: {} },
46
- };
47
-
48
- export class ToolboxRoot
49
- extends Base<
50
- Namespace,
51
- ToolboxRootComponent,
52
- AppRootProps,
53
- TimecodeToolboxComponentCalls
54
- >
55
- implements Listenable<Events>
56
- {
57
- /** @hidden */
58
- private readonly events = new EventEmitter<Events>();
59
-
60
- public constructor(props: AppRootProps) {
61
- super(DEFAULT_PROPS, props, {
62
- onPropsUpdated: (oldProps) =>
63
- this.events.processPropChanges(
64
- {
65
- onUpdateConfig: 'updateConfig',
66
- onCallHandler: 'callHandler',
67
- },
68
- oldProps,
69
- this.props,
70
- ),
71
- });
72
- this.triggerInitialPropsUpdate();
73
- }
74
-
75
- addListener = this.events.addListener;
76
- removeListener = this.events.removeListener;
77
-
78
- /** @hidden */
79
- public getProtoInfo(idMap: IDMap): ToolboxRootComponent {
80
- return {
81
- namespace: 'timecode-toolbox',
82
- component: 'toolbox-root',
83
- key: idMap.getId(this),
84
- config: this.props.config,
85
- state: this.props.state,
86
- handlers: this.props.handlers,
87
- };
88
- }
89
-
90
- /** @hidden */
91
- public handleMessage = (message: AnyClientComponentMessage) => {
92
- if (isTimecodeToolboxComponentMessage(message, 'toolbox-root')) {
93
- if (message.action === 'update-config') {
94
- this.events.emit('updateConfig', message.diff);
95
- }
96
- }
97
- };
98
-
99
- /** @hidden */
100
- public handleCall = async (call: AnyClientComponentCall) => {
101
- if (
102
- isTimecodeToolboxComponentCall(
103
- call,
104
- 'toolbox-root-get-network-interfaces',
105
- )
106
- ) {
107
- return getNetworkInterfaces();
108
- } else if (
109
- isTimecodeToolboxComponentCall(call, 'toolbox-root-call-handler')
110
- ) {
111
- const result = await this.events.emit('callHandler', call);
112
- if (result[0]) {
113
- return result[0];
114
- }
115
- throw new Error(`No handler for callHandler`);
116
- }
117
- throw new Error(`Unhandled call action: ${call.action}`);
118
- };
119
- }
@@ -1,81 +0,0 @@
1
- import { TIMECODE_FPS } from '@arcanewizards/artnet/constants';
2
-
3
- const MS_FORMAT = new Intl.NumberFormat(undefined, {
4
- style: 'unit',
5
- unit: 'millisecond',
6
- maximumFractionDigits: 0,
7
- });
8
-
9
- export const STRINGS = {
10
- title: 'Timecode Toolbox',
11
- debugger: 'Debug Tools & Log',
12
- connectionError: 'Disconnected from Timecode Toolbox Server',
13
- reconnect: 'Reconnect',
14
- openInNewWindow: 'Open in new window',
15
- toggle: (text: string) => `Toggle ${text}`,
16
- close: (text: string) => `Close ${text}`,
17
- protocols: {
18
- artnet: {
19
- short: 'ArtNet',
20
- long: 'ArtNet',
21
- },
22
- tcnet: {
23
- short: 'TCNet',
24
- long: 'TCNet (ShowKontrol / Pioneer)',
25
- },
26
- },
27
- inputs: {
28
- title: 'INPUTS',
29
- noChildren: 'No inputs yet. Please add one using the buttons below.',
30
- addButton: (protocol: string) => `Add ${protocol}`,
31
- addDialog: (protocol: string) => `Add ${protocol} Input`,
32
- editDialog: (protocol: string, name: string) =>
33
- `Edit ${protocol} Input ${name}`,
34
- },
35
- smtpeModes: {
36
- SMPTE: `SMPTE ${TIMECODE_FPS.SMPTE}FPS`,
37
- FILM: `FILM ${TIMECODE_FPS.FILM}FPS`,
38
- EBU: `EBU ${TIMECODE_FPS.EBU}FPS`,
39
- DF: `DF ${TIMECODE_FPS.DF}FPS`,
40
- },
41
- smtpeModeOptions: {
42
- SMPTE: `SMPTE (${TIMECODE_FPS.SMPTE}FPS) (Recommended)`,
43
- FILM: `FILM (${TIMECODE_FPS.FILM}FPS)`,
44
- EBU: `EBU (${TIMECODE_FPS.EBU}FPS)`,
45
- DF: `DF (${TIMECODE_FPS.DF}FPS)`,
46
- },
47
- accuracy: (accuracyMillis: number) =>
48
- `Accuracy: ${MS_FORMAT.format(accuracyMillis)}`,
49
- delay: (delayMs: number) => `Delay: ${MS_FORMAT.format(delayMs)}`,
50
- generators: {
51
- title: 'GENERATORS',
52
- noChildren: 'No generators yet. Please add one using the buttons below.',
53
- type: {
54
- clock: 'Clock',
55
- },
56
- addDialog: (protocol: string) => `Add ${protocol} Generator`,
57
- editDialog: (protocol: string, name: string) =>
58
- `Edit ${protocol} Generator ${name}`,
59
- },
60
- outputs: {
61
- title: 'OUTPUTS',
62
- noChildren: 'No outputs yet. Please add one using the buttons below.',
63
- addButton: (protocol: string) => `Add ${protocol}`,
64
- addDialog: (protocol: string) => `Add ${protocol} Output`,
65
- editDialog: (protocol: string, name: string) =>
66
- `Edit ${protocol} Output ${name}`,
67
- },
68
- settings: {
69
- title: 'Settings',
70
- },
71
- controls: {
72
- play: 'Play',
73
- pause: 'Pause',
74
- beginning: 'Reset timecode to start',
75
- back5seconds: 'Back 5 Seconds',
76
- forward5seconds: 'Forward 5 Seconds',
77
- },
78
- errors: {
79
- unknownTimecodeID: 'Unknown timecode ID, please close the window',
80
- },
81
- } as const;
@@ -1,12 +0,0 @@
1
- import {
2
- startTimecodeToolboxServerFrontend,
3
- TimecodeToolboxBrowserContext,
4
- } from '.';
5
-
6
- declare global {
7
- interface Window {
8
- BROWSER_CONTEXT?: TimecodeToolboxBrowserContext;
9
- }
10
- }
11
-
12
- startTimecodeToolboxServerFrontend(window.BROWSER_CONTEXT);