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,139 +1,156 @@
1
1
  <script>
2
- import { rendering, SIZES, monitors } from "../stores/rendering.js";
3
- import { sketchesCount } from "../stores/sketches.js";
4
- import Field from "./Field.svelte";
5
- import presets, { getDimensionsForPreset } from "../lib/presets";
6
- import { exports } from "../stores";
7
- import ParamsMultisampling from "./ParamsMultisampling.svelte";
2
+ import { rendering, SIZES, monitors } from '../stores/rendering.js';
3
+ import { sketchesCount } from '../stores/sketches.js';
4
+ import Field from './Field.svelte';
5
+ import presets, {
6
+ PRESET_ORIENTATIONS,
7
+ getDimensionsForPreset,
8
+ } from '../lib/presets';
9
+ import { exports } from '../stores';
10
+ import ParamsMultisampling from './ParamsMultisampling.svelte';
11
+ import Select from './fields/Select.svelte';
12
+ import FieldInputRow from './fields/FieldInputRow.svelte';
8
13
 
9
- let canvasWidth = $rendering.width;
10
- let canvasHeight = $rendering.height;
14
+ let canvasWidth = $rendering.width;
15
+ let canvasHeight = $rendering.height;
11
16
 
12
- function handleChangeDimensions(event) {
13
- const [width, height] = event.detail;
14
- const needsUpdate = canvasWidth !== width || canvasHeight !== height;
17
+ function handleChangeDimensions(event) {
18
+ const [width, height] = event.detail;
19
+ const needsUpdate = canvasWidth !== width || canvasHeight !== height;
15
20
 
16
- if (needsUpdate) {
17
- canvasWidth = width;
18
- canvasHeight = height;
21
+ if (needsUpdate) {
22
+ canvasWidth = width;
23
+ canvasHeight = height;
19
24
 
20
- rendering.update((curr) => {
21
- return {
22
- ...curr,
23
- width,
24
- height
25
- }
26
- });
27
- }
28
- }
25
+ rendering.update((curr) => {
26
+ return {
27
+ ...curr,
28
+ width,
29
+ height,
30
+ };
31
+ });
32
+ }
33
+ }
29
34
 
30
- let sizes = Object.values(SIZES);
31
- $: dimensionsEnabled = [SIZES.FIXED, SIZES.SCALE].includes($rendering.resizing);
35
+ let sizes = Object.values(SIZES);
36
+ $: dimensionsEnabled = [SIZES.FIXED, SIZES.SCALE].includes(
37
+ $rendering.resizing,
38
+ );
32
39
 
33
- $: {
34
- if ($rendering.resizing === SIZES.PRESET) {
35
- const { preset } = $rendering;
36
- const [ width, height ] = getDimensionsForPreset(preset, { pixelsPerInch: 300 });
37
-
38
- rendering.update((curr) => {
39
- return {
40
- ...curr,
41
- width,
42
- height,
43
- };
44
- });
45
- }
46
- }
40
+ $: {
41
+ if ($rendering.resizing === SIZES.PRESET) {
42
+ const { preset } = $rendering;
43
+ const [width, height] = getDimensionsForPreset(preset, {
44
+ pixelsPerInch: 300,
45
+ orientation: $rendering.presetOrientation,
46
+ });
47
47
 
48
+ rendering.update((curr) => {
49
+ return {
50
+ ...curr,
51
+ width,
52
+ height,
53
+ };
54
+ });
55
+ }
56
+ }
48
57
  </script>
49
58
 
50
59
  <Field
51
- key="dimensions"
52
- value={[
53
- $rendering.width,
54
- $rendering.height,
55
- ]}
56
- on:change={handleChangeDimensions}
57
- params={{
58
- step: 1,
59
- suffix: "px",
60
- locked: false,
61
- disabled: !dimensionsEnabled,
62
- }}
60
+ key="dimensions"
61
+ value={[$rendering.width, $rendering.height]}
62
+ on:change={handleChangeDimensions}
63
+ params={{
64
+ step: 1,
65
+ suffix: 'px',
66
+ locked: false,
67
+ }}
68
+ disabled={!dimensionsEnabled}
63
69
  />
64
70
  <Field
65
- key="canvasSize"
66
- value={$rendering.resizing}
67
- on:change={(event) => {
68
- const resizing = event.detail;
69
- let aspectRatio = 1;
71
+ key="canvasSize"
72
+ value={$rendering.resizing}
73
+ on:change={(event) => {
74
+ const resizing = event.detail;
75
+ let aspectRatio = 1;
70
76
 
71
- if (resizing === SIZES.ASPECT_RATIO) {
72
- // compute aspect ratio based on previous props
73
- aspectRatio = $rendering.width / $rendering.height;
74
- }
77
+ if (resizing === SIZES.ASPECT_RATIO) {
78
+ // compute aspect ratio based on previous props
79
+ aspectRatio = $rendering.width / $rendering.height;
80
+ }
75
81
 
76
- $exports.pixelsPerInch = resizing === SIZES.PRESET ? 300 : 72;
82
+ $exports.pixelsPerInch = resizing === SIZES.PRESET ? 300 : 72;
77
83
 
78
- rendering.update((curr) => {
79
- return {
80
- ...curr,
81
- resizing,
82
- aspectRatio,
83
- }
84
- });
85
- }}
86
- params={{
87
- options: sizes,
88
- }}
84
+ rendering.update((curr) => {
85
+ return {
86
+ ...curr,
87
+ resizing,
88
+ aspectRatio,
89
+ };
90
+ });
91
+ }}
92
+ params={{
93
+ options: sizes,
94
+ }}
89
95
  />
90
96
  {#if $rendering.resizing === SIZES.ASPECT_RATIO}
91
- <Field
92
- key="aspectRatio"
93
- value={$rendering.aspectRatio}
94
- on:change={(event) => {
95
- $rendering.aspectRatio = event.detail;
96
- }}
97
- params={{
98
- step: 0.01,
99
- }}
100
- />
97
+ <Field
98
+ key="aspectRatio"
99
+ value={$rendering.aspectRatio}
100
+ on:change={(event) => {
101
+ $rendering.aspectRatio = event.detail;
102
+ }}
103
+ params={{
104
+ step: 0.01,
105
+ }}
106
+ />
101
107
  {/if}
102
108
  {#if $rendering.resizing === SIZES.SCALE}
103
- <Field
104
- key="zoom"
105
- value={$rendering.scale}
106
- on:change={(event) => {
107
- $rendering.scale = event.detail;
108
- }}
109
- params={{
110
- step: 0.01,
111
- }}
112
- />
109
+ <Field
110
+ key="zoom"
111
+ value={$rendering.scale}
112
+ on:change={(event) => {
113
+ $rendering.scale = event.detail;
114
+ }}
115
+ params={{
116
+ step: 0.01,
117
+ }}
118
+ />
113
119
  {/if}
114
120
  {#if $rendering.resizing === SIZES.PRESET}
115
- <Field
116
- key="preset"
117
- value={$rendering.preset}
118
- on:change={(event) => {
119
- $rendering.preset = event.detail;
120
- }}
121
- params={{
122
- options: presets,
123
- }}
124
- />
121
+ <Field key="preset">
122
+ <FieldInputRow --grid-template-columns="1fr 1fr">
123
+ <Select
124
+ value={$rendering.preset}
125
+ options={presets}
126
+ on:change={(event) => {
127
+ $rendering.preset = event.detail;
128
+ }}
129
+ />
130
+ <Select
131
+ value={$rendering.presetOrientation}
132
+ options={[
133
+ PRESET_ORIENTATIONS.PORTRAIT,
134
+ PRESET_ORIENTATIONS.LANDSCAPE,
135
+ ]}
136
+ on:change={(event) => {
137
+ $rendering.presetOrientation = event.detail;
138
+ }}
139
+ />
140
+ </FieldInputRow>
141
+ </Field>
125
142
  {/if}
126
143
 
127
- {#if $rendering.resizing !== SIZES.PRESET }
128
- <Field
129
- key="pixelRatio"
130
- value={Number($rendering.pixelRatio)}
131
- on:change={(event) => $rendering.pixelRatio = event.detail }
132
- params={{
133
- step: 0.1,
134
- }}
135
- />
144
+ {#if $rendering.resizing !== SIZES.PRESET}
145
+ <Field
146
+ key="pixelRatio"
147
+ value={Number($rendering.pixelRatio)}
148
+ on:change={(event) => ($rendering.pixelRatio = event.detail)}
149
+ params={{
150
+ step: 0.1,
151
+ }}
152
+ />
136
153
  {/if}
137
- {#if $sketchesCount > 1 && $monitors.length > 1 }
138
- <ParamsMultisampling />
154
+ {#if $sketchesCount > 1 && $monitors.length > 1}
155
+ <ParamsMultisampling />
139
156
  {/if}
@@ -1,15 +1,14 @@
1
1
  <script>
2
- import { onDestroy } from "svelte";
2
+ import { onDestroy } from 'svelte';
3
3
 
4
- import { rendering } from "../stores/rendering";
5
- import Build from "./Build.svelte";
4
+ import { rendering } from '../stores/rendering';
5
+ import Build from './Build.svelte';
6
6
 
7
- let saved = $rendering;
8
-
9
- onDestroy(() => {
10
- $rendering = saved;
11
- });
7
+ let saved = $rendering;
12
8
 
9
+ onDestroy(() => {
10
+ $rendering = saved;
11
+ });
13
12
  </script>
14
13
 
15
14
  <Build />
@@ -1,25 +1,37 @@
1
1
  <script>
2
- export let width = 24;
3
- export let height = 24;
2
+ export let width = 24;
3
+ export let height = 24;
4
4
  </script>
5
5
 
6
6
  <div class="chevrons" style={`width: ${width}px;`}>
7
- <svg class="chevron chevron-bottom" width={width} height={height} fill="none" viewBox="0 0 24 24">
8
- <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M15.25 10.75L12 14.25L8.75 10.75"></path>
7
+ <svg
8
+ class="chevron chevron-bottom"
9
+ {width}
10
+ {height}
11
+ fill="none"
12
+ viewBox="0 0 24 24"
13
+ >
14
+ <path
15
+ stroke="currentColor"
16
+ stroke-linecap="round"
17
+ stroke-linejoin="round"
18
+ stroke-width="1.5"
19
+ d="M15.25 10.75L12 14.25L8.75 10.75"
20
+ />
9
21
  </svg>
10
22
  </div>
11
23
 
12
24
  <style>
13
- .chevrons {
14
- position: absolute;
15
- top: 0;
16
- right: 0;
17
- bottom: 0;
18
- display: flex;
19
- align-items: center;
20
- width: 15px;
25
+ .chevrons {
26
+ position: absolute;
27
+ top: 0;
28
+ right: 0;
29
+ bottom: 0;
30
+ display: flex;
31
+ align-items: center;
32
+ width: 15px;
21
33
 
22
- color: var(--color, currentColor);
23
- pointer-events: none;
24
- }
34
+ color: inherit;
35
+ pointer-events: none;
36
+ }
25
37
  </style>