fragment-tools 0.1.13 → 0.1.15

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 (184) hide show
  1. package/.prettierignore +1 -2
  2. package/.prettierrc +23 -7
  3. package/README.md +28 -9
  4. package/bin/index.js +70 -10
  5. package/package.json +14 -6
  6. package/src/cli/build.js +125 -0
  7. package/src/cli/create.js +238 -0
  8. package/src/cli/createConfig.js +82 -0
  9. package/src/cli/createFragmentFile.js +70 -0
  10. package/src/cli/getEntries.js +85 -0
  11. package/src/cli/log.js +36 -24
  12. package/src/cli/plugins/check-dependencies.js +88 -42
  13. package/src/cli/plugins/hot-shader-replacement.js +408 -0
  14. package/src/cli/plugins/hot-sketch-reload.js +21 -25
  15. package/src/cli/plugins/save.js +101 -0
  16. package/src/cli/preview.js +55 -0
  17. package/src/cli/prompts.js +260 -0
  18. package/src/cli/run.js +131 -0
  19. package/src/cli/templates/blank/index.js +33 -0
  20. package/src/cli/templates/blank/meta.json +4 -0
  21. package/src/cli/templates/default/index.js +39 -0
  22. package/src/cli/templates/default/meta.json +5 -0
  23. package/src/cli/templates/fragment-gl/index.js +37 -0
  24. package/src/cli/templates/fragment-gl/meta.json +4 -0
  25. package/src/cli/templates/p5/index.js +32 -0
  26. package/src/cli/templates/p5/meta.json +5 -0
  27. package/src/cli/templates/p5-webgl/fragment.fs +14 -0
  28. package/src/cli/templates/p5-webgl/index.js +67 -0
  29. package/src/cli/templates/p5-webgl/meta.json +5 -0
  30. package/src/cli/templates/three-fragment/fragment.fs +10 -0
  31. package/src/cli/templates/three-fragment/index.js +95 -0
  32. package/src/cli/templates/three-fragment/meta.json +5 -0
  33. package/src/cli/templates/three-orthographic/index.js +55 -0
  34. package/src/cli/templates/three-orthographic/meta.json +5 -0
  35. package/src/cli/templates/three-perspective/index.js +52 -0
  36. package/src/cli/templates/three-perspective/meta.json +5 -0
  37. package/src/cli/utils.js +70 -0
  38. package/src/cli/ws.js +87 -78
  39. package/src/client/app/App.svelte +3 -3
  40. package/src/client/app/client.js +55 -39
  41. package/src/client/app/components/IconCross.svelte +18 -18
  42. package/src/client/app/components/Init.svelte +40 -8
  43. package/src/client/app/components/KeyBinding.svelte +22 -22
  44. package/src/client/app/helpers.js +42 -0
  45. package/src/client/app/hooks.js +20 -0
  46. package/src/client/app/inputs/Input.js +9 -9
  47. package/src/client/app/inputs/Keyboard.js +13 -15
  48. package/src/client/app/inputs/MIDI.js +14 -15
  49. package/src/client/app/inputs/Mouse.js +1 -1
  50. package/src/client/app/inputs/Webcam.js +89 -88
  51. package/src/client/app/lib/canvas-recorder/CanvasRecorder.js +41 -21
  52. package/src/client/app/lib/canvas-recorder/FrameRecorder.js +7 -6
  53. package/src/client/app/lib/canvas-recorder/H264Recorder.js +45 -0
  54. package/src/client/app/lib/canvas-recorder/MP4Recorder.js +7 -9
  55. package/src/client/app/lib/canvas-recorder/WebMRecorder.js +3 -4
  56. package/src/client/app/lib/canvas-recorder/mp4.js +1649 -15
  57. package/src/client/app/lib/canvas-recorder/utils.js +33 -17
  58. package/src/client/app/lib/gl/Geometry.js +11 -8
  59. package/src/client/app/lib/gl/Program.js +38 -19
  60. package/src/client/app/lib/gl/Renderer.js +163 -156
  61. package/src/client/app/lib/gl/Texture.js +113 -85
  62. package/src/client/app/lib/gl/index.js +12 -12
  63. package/src/client/app/lib/gl/utils.js +1 -3
  64. package/src/client/app/lib/helpers/frameDebounce.js +30 -30
  65. package/src/client/app/lib/loader/index.js +10 -10
  66. package/src/client/app/lib/loader/loadImage.js +15 -15
  67. package/src/client/app/lib/loader/loadScript.js +1 -1
  68. package/src/client/app/lib/paper-sizes.js +75 -76
  69. package/src/client/app/lib/presets.js +25 -5
  70. package/src/client/app/lib/tempo/Analyser.js +18 -17
  71. package/src/client/app/lib/tempo/Range.js +15 -12
  72. package/src/client/app/lib/tempo/index.js +34 -27
  73. package/src/client/app/modules/AudioAnalyser/Range.svelte +69 -72
  74. package/src/client/app/modules/AudioAnalyser/Spectrum.svelte +20 -19
  75. package/src/client/app/modules/AudioAnalyser.svelte +52 -35
  76. package/src/client/app/modules/Console/ConsoleLine.svelte +193 -172
  77. package/src/client/app/modules/Console.svelte +76 -74
  78. package/src/client/app/modules/Exports.svelte +62 -43
  79. package/src/client/app/modules/MidiPanel.svelte +100 -101
  80. package/src/client/app/modules/Monitor.svelte +57 -57
  81. package/src/client/app/modules/Params.svelte +128 -103
  82. package/src/client/app/renderers/2DRenderer.js +3 -3
  83. package/src/client/app/renderers/FragmentRenderer.js +30 -23
  84. package/src/client/app/renderers/P5GLRenderer.js +144 -0
  85. package/src/client/app/renderers/P5Renderer.js +10 -7
  86. package/src/client/app/renderers/THREERenderer.js +136 -94
  87. package/src/client/app/stores/audioAnalysis.js +3 -4
  88. package/src/client/app/stores/console.js +9 -10
  89. package/src/client/app/stores/errors.js +1 -1
  90. package/src/client/app/stores/exports.js +36 -20
  91. package/src/client/app/stores/index.js +2 -2
  92. package/src/client/app/stores/layout.js +143 -138
  93. package/src/client/app/stores/multisampling.js +4 -4
  94. package/src/client/app/stores/props.js +76 -13
  95. package/src/client/app/stores/renderers.js +26 -15
  96. package/src/client/app/stores/rendering.js +108 -89
  97. package/src/client/app/stores/sketches.js +7 -9
  98. package/src/client/app/stores/time.js +18 -18
  99. package/src/client/app/stores/utils.js +95 -38
  100. package/src/client/app/transitions/fade.js +3 -3
  101. package/src/client/app/transitions/index.js +6 -7
  102. package/src/client/app/transitions/splitX.js +2 -2
  103. package/src/client/app/transitions/splitY.js +2 -2
  104. package/src/client/app/triggers/Keyboard.js +88 -79
  105. package/src/client/app/triggers/MIDI.js +110 -84
  106. package/src/client/app/triggers/Mouse.js +73 -65
  107. package/src/client/app/triggers/Trigger.js +59 -58
  108. package/src/client/app/triggers/index.js +7 -7
  109. package/src/client/app/triggers/shared.js +5 -5
  110. package/src/client/app/ui/Build.svelte +70 -71
  111. package/src/client/app/ui/ErrorOverlay.svelte +118 -104
  112. package/src/client/app/ui/Field.svelte +393 -258
  113. package/src/client/app/ui/FieldGroup.svelte +106 -94
  114. package/src/client/app/ui/FieldSection.svelte +127 -116
  115. package/src/client/app/ui/FieldSpace.svelte +29 -30
  116. package/src/client/app/ui/FieldTrigger.svelte +256 -244
  117. package/src/client/app/ui/FieldTriggers.svelte +46 -46
  118. package/src/client/app/ui/FloatingParams.svelte +29 -30
  119. package/src/client/app/ui/Layout.svelte +31 -32
  120. package/src/client/app/ui/LayoutColumn.svelte +4 -4
  121. package/src/client/app/ui/LayoutComponent.svelte +239 -225
  122. package/src/client/app/ui/LayoutResizer.svelte +195 -176
  123. package/src/client/app/ui/LayoutRoot.svelte +6 -6
  124. package/src/client/app/ui/LayoutRow.svelte +4 -4
  125. package/src/client/app/ui/LayoutToolbar.svelte +191 -194
  126. package/src/client/app/ui/Module.svelte +134 -135
  127. package/src/client/app/ui/ModuleHeaderAction.svelte +81 -78
  128. package/src/client/app/ui/ModuleHeaderButton.svelte +12 -12
  129. package/src/client/app/ui/ModuleHeaderSelect.svelte +47 -37
  130. package/src/client/app/ui/ModuleRenderer.svelte +26 -27
  131. package/src/client/app/ui/OutputRenderer.svelte +112 -105
  132. package/src/client/app/ui/ParamsMultisampling.svelte +96 -95
  133. package/src/client/app/ui/ParamsOutput.svelte +130 -113
  134. package/src/client/app/ui/Preview.svelte +7 -8
  135. package/src/client/app/ui/SelectChevrons.svelte +27 -15
  136. package/src/client/app/ui/SketchRenderer.svelte +780 -667
  137. package/src/client/app/ui/SketchSelect.svelte +50 -44
  138. package/src/client/app/ui/fields/ButtonInput.svelte +61 -48
  139. package/src/client/app/ui/fields/CheckboxInput.svelte +67 -61
  140. package/src/client/app/ui/fields/ColorInput.svelte +294 -238
  141. package/src/client/app/ui/fields/FieldInputRow.svelte +8 -8
  142. package/src/client/app/ui/fields/ImageInput.svelte +123 -121
  143. package/src/client/app/ui/fields/Input.svelte +100 -111
  144. package/src/client/app/ui/fields/IntervalInput.svelte +268 -0
  145. package/src/client/app/ui/fields/ListInput.svelte +96 -96
  146. package/src/client/app/ui/fields/NumberInput.svelte +120 -116
  147. package/src/client/app/ui/fields/ProgressInput.svelte +99 -73
  148. package/src/client/app/ui/fields/Select.svelte +137 -124
  149. package/src/client/app/ui/fields/TextInput.svelte +10 -11
  150. package/src/client/app/ui/fields/VectorInput.svelte +86 -82
  151. package/src/client/app/utils/canvas.utils.js +189 -208
  152. package/src/client/app/utils/color.utils.js +138 -101
  153. package/src/client/app/utils/fields.utils.js +131 -0
  154. package/src/client/app/utils/file.utils.js +209 -37
  155. package/src/client/app/utils/glsl.utils.js +2 -2
  156. package/src/client/app/utils/glslErrors.js +49 -31
  157. package/src/client/app/utils/index.js +32 -29
  158. package/src/client/app/utils/math.utils.js +14 -10
  159. package/src/client/index.html +16 -16
  160. package/src/client/main.js +4 -4
  161. package/src/client/public/css/global.css +26 -16
  162. package/src/cli/db.js +0 -17
  163. package/src/cli/index.js +0 -198
  164. package/src/cli/plugins/db.js +0 -12
  165. package/src/cli/plugins/hot-shader-reload.js +0 -86
  166. package/src/cli/plugins/screenshot.js +0 -46
  167. package/src/cli/server.js +0 -153
  168. package/src/cli/templates/2d.js +0 -15
  169. package/src/cli/templates/blank.js +0 -13
  170. package/src/cli/templates/fragment.js +0 -18
  171. package/src/cli/templates/index.js +0 -27
  172. package/src/cli/templates/p5.js +0 -13
  173. package/src/cli/templates/three-fragment.js +0 -53
  174. package/src/cli/templates/three-orthographic.js +0 -23
  175. package/src/cli/templates/three-perspective.js +0 -20
  176. package/src/client/app/lib/canvas-recorder/FFMPEGRecorder.js +0 -56
  177. package/src/client/app/utils/props.utils.js +0 -51
  178. package/src/client/public/fonts/Inter-Bold.woff2 +0 -0
  179. package/src/client/public/fonts/Inter-Italic.woff2 +0 -0
  180. package/src/client/public/fonts/Inter-Regular.woff2 +0 -0
  181. package/src/client/public/fonts/Inter-SemiBold.woff2 +0 -0
  182. package/src/client/public/js/ffmpeg.min.js +0 -2
  183. package/src/client/public/js/ffmpeg.min.js.map +0 -1
  184. /package/src/cli/templates/{fragment.fs → fragment-gl/fragment.fs} +0 -0
@@ -1,49 +1,55 @@
1
1
  <script>
2
- import ModuleHeaderAction from "./ModuleHeaderAction.svelte";
3
- import { sketches, sketchesKeys, sketchesCount } from "../stores/sketches.js";
4
- import { monitors } from "../stores/rendering";
5
-
6
- export let monitorID;
7
- export let selected;
8
-
9
- $: options = [
10
- ...$sketchesKeys.map((key) => ({
11
- value: key,
12
- label: $sketches[key] && $sketches[key].name ? $sketches[key].name : key,
13
- })),
14
- ];
15
-
16
- $: {
17
- if ($sketchesCount > 1 && !options.some((opt) => opt.value === "output")) {
18
- options = [
19
- ...options,
20
- { value: "output", label: "output" },
21
- ];
22
- }
23
-
24
- if (options.length > 0 && selected === undefined) {
25
- selected = options[0].value;
26
- }
27
- }
28
-
29
- $: {
30
- monitors.update((all) => {
31
- return all.map((monitor) => {
32
- if (monitor.id === monitorID) {
33
- monitor.selected = selected;
34
- }
35
-
36
- return monitor;
37
- });
38
- });
39
- }
40
-
2
+ import ModuleHeaderAction from './ModuleHeaderAction.svelte';
3
+ import {
4
+ sketches,
5
+ sketchesKeys,
6
+ sketchesCount,
7
+ } from '../stores/sketches.js';
8
+ import { monitors } from '../stores/rendering';
9
+
10
+ export let monitorID;
11
+ export let selected;
12
+
13
+ $: options = [
14
+ ...$sketchesKeys.map((key) => ({
15
+ value: key,
16
+ label:
17
+ $sketches[key] && $sketches[key].name
18
+ ? $sketches[key].name
19
+ : key,
20
+ })),
21
+ ];
22
+
23
+ $: {
24
+ if (
25
+ $sketchesCount > 1 &&
26
+ !options.some((opt) => opt.value === 'output')
27
+ ) {
28
+ options = [...options, { value: 'output', label: 'output' }];
29
+ }
30
+
31
+ if (options.length > 0 && selected === undefined) {
32
+ selected = options[0].value;
33
+ }
34
+ }
35
+
36
+ $: {
37
+ monitors.update((all) => {
38
+ return all.map((monitor) => {
39
+ if (monitor.id === monitorID) {
40
+ monitor.selected = selected;
41
+ }
42
+
43
+ return monitor;
44
+ });
45
+ });
46
+ }
41
47
  </script>
42
48
 
43
49
  <ModuleHeaderAction
44
- value={selected}
45
- permanent
46
- border
47
- on:change={(event) => selected = event.detail}
48
- options={options}
50
+ value={selected}
51
+ permanent
52
+ border
53
+ on:change={(event) => (selected = event.detail)}
54
+ {options}
49
55
  />
@@ -1,56 +1,69 @@
1
1
  <script>
2
- export let value = null;
3
- export let label;
4
- export let disabled = false;
5
- export let showLabel = true;
6
- export let title = "";
7
- export let context = null;
8
- export let key = "";
9
-
2
+ export let value = null;
3
+ export let label;
4
+ export let disabled = false;
5
+ export let showLabel = true;
6
+ export let title = '';
7
+ export let context = null;
8
+ export let key = '';
10
9
  </script>
11
10
 
12
- <div class="button-container" class:disabled={disabled}>
13
- <button class="button" {disabled} on:click {title} on:mouseenter on:mouseleave>
14
- <span class="label" class:visually-hidden={!showLabel}>{label}</span>
15
- <slot></slot>
16
- </button>
11
+ <div class="button-container" class:disabled>
12
+ <button
13
+ class="button"
14
+ {disabled}
15
+ on:click
16
+ {title}
17
+ on:mouseenter
18
+ on:mouseleave
19
+ >
20
+ <span class="label" class:visually-hidden={!showLabel}>{label}</span>
21
+ <slot />
22
+ </button>
17
23
  </div>
18
24
 
19
25
  <style>
20
- .button-container {
21
- display: flex;
22
- width: 100%;
23
- }
24
-
25
- .button {
26
- display: flex;
27
- width: 100%;
28
- min-width: var(--height-input);
29
- height: var(--height-input);
30
- justify-content: center;
31
- align-items: center;
32
- padding: 0 4px;
33
-
34
- color: rgba(255, 255, 255, 0.5);
35
- font-size: var(--font-size-input);
36
-
37
- border-radius: var(--border-radius-input);
38
- background-color: var(--background-color, var(--color-background-input));
39
- box-shadow: inset 0 0 0 1px var(--box-shadow-color, var(--color-border-input));
40
- }
41
-
42
- :global(.field.disabled) .button {
43
- color: rgba(255, 255, 255, 0.2);
44
- }
45
-
46
- .button:hover {
47
- color: var(--color-text);
48
-
49
- box-shadow: inset 0 0 0 1px var(--box-shadow-color-active, var(--color-active));
50
- }
51
-
52
- .button:active {
53
- box-shadow: 0 0 0 2px var(--box-shadow-color-active, var(--color-active));
54
- }
26
+ .button-container {
27
+ display: flex;
28
+ width: 100%;
29
+ }
30
+
31
+ .button {
32
+ display: flex;
33
+ width: 100%;
34
+ min-width: var(--height-input);
35
+ height: var(--height-input);
36
+ justify-content: center;
37
+ align-items: center;
38
+ padding: 0 4px;
39
+
40
+ color: var(--color-text-input);
41
+ font-size: var(--font-size-input);
42
+
43
+ border-radius: var(--border-radius-input);
44
+ background-color: var(
45
+ --background-color,
46
+ var(--color-background-input)
47
+ );
48
+ box-shadow: inset 0 0 0 1px
49
+ var(--box-shadow-color, var(--color-border-input));
50
+ outline: 0;
51
+ }
52
+
53
+ .button:disabled {
54
+ color: var(--color-text-input-disabled);
55
+ }
56
+
57
+ .button:hover {
58
+ color: var(--color-text);
59
+
60
+ box-shadow: inset 0 0 0 1px
61
+ var(--box-shadow-color-active, var(--color-active));
62
+ }
55
63
 
64
+ .button:active,
65
+ .button:focus-visible {
66
+ box-shadow: 0 0 0 2px
67
+ var(--box-shadow-color-active, var(--color-active));
68
+ }
56
69
  </style>
@@ -1,72 +1,78 @@
1
1
  <script>
2
- import { createEventDispatcher } from "svelte";
2
+ import { createEventDispatcher } from 'svelte';
3
3
 
4
- export let value;
5
- export let context = null;
6
- export let key = "";
4
+ export let value;
5
+ export let context = null;
6
+ export let key = '';
7
+ export let disabled = false;
7
8
 
8
- const dispatch = createEventDispatcher();
9
-
10
- function handleChange() {
11
- dispatch("change", value);
12
- }
9
+ const dispatch = createEventDispatcher();
13
10
 
11
+ function handleChange() {
12
+ dispatch('change', value);
13
+ }
14
14
  </script>
15
15
 
16
16
  <div class="checkbox">
17
- <input class="input" bind:checked={value} type="checkbox" on:change={handleChange} />
18
- <div class="checked">
19
- </div>
17
+ <input
18
+ class="input"
19
+ bind:checked={value}
20
+ type="checkbox"
21
+ on:change={handleChange}
22
+ disabled={disabled ? 'disabled' : null}
23
+ />
24
+ <div class="checked" />
20
25
  </div>
21
26
 
22
27
  <style>
23
- .checkbox {
24
- position: relative;
25
-
26
- width: var(--height-input);
27
- height: var(--height-input);
28
- margin-right: calc(var(--padding));
29
- box-shadow: inset 0 0 0 1px var(--color-border-input);
30
-
31
- border-radius: var(--border-radius-input);
32
- background-color: var(--color-background-input);
33
- }
34
-
35
- .checkbox:hover {
36
- box-shadow: inset 0 0 0 1px var(--color-active);
37
- }
38
-
39
- .checkbox:focus-within {
40
- box-shadow: 0 0 0 2px var(--color-active);
41
- }
42
-
43
- .input {
44
- width: 100%;
45
- height: 100%;
46
- border: none;
47
- border-radius: var(--border-radius-input);
48
- background-color: transparent;
49
- }
50
-
51
- /* .input:checked {
52
- background-color: var(--color-active);
53
- } */
54
-
55
- .checked {
56
- position: absolute;
57
- left: 3px;
58
- top: 3px;
59
- bottom: 3px;
60
- right: 3px;
61
-
62
- border-radius: calc(var(--border-radius-input) * 0.5);
63
- background-color: var(--color-active);
64
-
65
- opacity: 0;
66
- pointer-events: none;
67
- }
68
-
69
- .input:checked + .checked {
70
- opacity: 1;
71
- }
28
+ .checkbox {
29
+ position: relative;
30
+
31
+ width: var(--height-input);
32
+ height: var(--height-input);
33
+ margin-right: calc(var(--padding));
34
+ box-shadow: inset 0 0 0 1px var(--color-border-input);
35
+
36
+ border-radius: var(--border-radius-input);
37
+ background-color: var(--color-background-input);
38
+ }
39
+
40
+ .checkbox:hover {
41
+ box-shadow: inset 0 0 0 1px var(--color-active);
42
+ }
43
+
44
+ .checkbox:focus-within {
45
+ box-shadow: 0 0 0 2px var(--color-active);
46
+ }
47
+
48
+ .input {
49
+ width: 100%;
50
+ height: 100%;
51
+ border: none;
52
+ border-radius: var(--border-radius-input);
53
+ background-color: transparent;
54
+ outline: 0;
55
+ }
56
+
57
+ .checked {
58
+ position: absolute;
59
+ left: 3px;
60
+ top: 3px;
61
+ bottom: 3px;
62
+ right: 3px;
63
+
64
+ border-radius: calc(var(--border-radius-input) * 0.5);
65
+ background-color: var(--color-active);
66
+
67
+ opacity: 0;
68
+ pointer-events: none;
69
+ }
70
+
71
+ .input:checked + .checked {
72
+ opacity: 1;
73
+ }
74
+
75
+ .input:checked:disabled + .checked {
76
+ background-color: var(--color-active-disabled);
77
+ }
72
78
  </style>