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,154 +1,153 @@
1
1
  <script context="module">
2
- let MODULE_ID = 0;
2
+ let MODULE_ID = 0;
3
3
 
4
- export let getModuleID = () => {
5
- return MODULE_ID++;
6
- };
4
+ export let getModuleID = () => {
5
+ return MODULE_ID++;
6
+ };
7
7
  </script>
8
8
 
9
9
  <script>
10
- import { getContext } from "svelte";
11
- import { layout } from "../stores/layout.js";
10
+ import { getContext } from 'svelte';
11
+ import { layout } from '../stores/layout.js';
12
12
 
13
- export let mID = undefined;
14
- export let name;
15
- export let slug = name;
16
- export let scrollable = true;
17
- export let hasHeader = true;
13
+ export let mID = undefined;
14
+ export let name;
15
+ export let slug = name;
16
+ export let scrollable = true;
17
+ export let hasHeader = true;
18
18
 
19
- const parent = getContext('parent');
19
+ const parent = getContext('parent');
20
20
 
21
- const current = {
22
- mID: !isNaN(mID) ? mID : MODULE_ID++,
23
- type: "module",
24
- name: slug,
25
- hasHeader,
26
- };
21
+ const current = {
22
+ mID: !isNaN(mID) ? mID : MODULE_ID++,
23
+ type: 'module',
24
+ name: slug,
25
+ hasHeader,
26
+ };
27
27
 
28
- MODULE_ID = Math.max(MODULE_ID, !isNaN(current.mID) ? current.mID + 1 : 0);
28
+ MODULE_ID = Math.max(MODULE_ID, !isNaN(current.mID) ? current.mID + 1 : 0);
29
29
 
30
- parent.registerChild(current);
31
-
32
- const m = getContext('module');
33
- m.set(current);
30
+ parent.registerChild(current);
34
31
 
32
+ const m = getContext('module');
33
+ m.set(current);
35
34
  </script>
36
35
 
37
36
  <div
38
- class="module module--{slug}"
39
- class:scrollable={scrollable}
40
- class:no-header={!hasHeader}
41
- class:editing={$layout.editing}
37
+ class="module module--{slug}"
38
+ class:scrollable
39
+ class:no-header={!hasHeader}
40
+ class:editing={$layout.editing}
42
41
  >
43
- {#if hasHeader && name}
44
- <header class="module__header" >
45
- <div class="header__col">
46
- <div class="slot slot--left">
47
- <slot name="header-left"></slot>
48
- </div>
49
- </div>
50
- <div class="header__col">
51
- <h2 class="module__title">{name}</h2>
52
- </div>
53
- <div class="header__col">
54
- <div class="slot slot--right">
55
- <slot name="header-right"></slot>
56
- </div>
57
- </div>
58
- </header>
59
- {/if}
60
- <div class="module__container">
61
- <slot></slot>
62
- </div>
42
+ {#if hasHeader && name}
43
+ <header class="module__header">
44
+ <div class="header__col">
45
+ <div class="slot slot--left">
46
+ <slot name="header-left" />
47
+ </div>
48
+ </div>
49
+ <div class="header__col">
50
+ <h2 class="module__title">{name}</h2>
51
+ </div>
52
+ <div class="header__col">
53
+ <div class="slot slot--right">
54
+ <slot name="header-right" />
55
+ </div>
56
+ </div>
57
+ </header>
58
+ {/if}
59
+ <div class="module__container">
60
+ <slot />
61
+ </div>
63
62
  </div>
64
63
 
65
64
  <style>
66
- .module {
67
- --header-height: 25px;
68
-
69
- display: grid;
70
- grid-template-rows: 25px minmax(0px, auto);
71
- grid-template-columns: minmax(0, 1fr);
72
- align-items: stretch;
73
- }
74
-
75
- .module.no-header {
76
- --header-height: 0px;
77
- grid-template-rows: minmax(0px, auto);
78
- }
79
-
80
- .module__header {
81
- display: grid;
82
- grid-template-columns: 1fr 1fr 1fr;
83
- height: var(--header-height);
84
- flex-shrink: 0;
85
- align-items: center;
86
-
87
- background-color: var(--color-lightblack);
88
- }
89
-
90
- .slot {
91
- display: flex;
92
- align-items: center;
93
- }
94
-
95
- .header__col {
96
- display: flex;
97
- padding: 0 6px;
98
- justify-content: center;
99
- align-items: center;
100
- }
101
-
102
- .header__col:first-child {
103
- justify-content: flex-start;
104
- }
105
-
106
- .header__col:last-child {
107
- justify-content: flex-end;
108
- }
109
-
110
- .module__title {
111
- user-select: none;
112
-
113
- color: white;
114
- font-size: 10px;
115
- text-transform: capitalize;
116
- background-color: transparent;
117
- }
118
-
119
- .module__container {
120
- position: relative;
121
-
122
- background-color: var(--color-background);
123
- }
124
-
125
- .module.scrollable .module__container {
126
- overflow-y: auto;
127
- }
128
-
129
- .module.editing.scrollable .module__container {
130
- overflow-y: hidden;
131
- }
132
-
133
- .module__container::-webkit-scrollbar {
134
- width: 5px;
135
- height: 5px;
136
- }
137
-
138
- .module__container::-webkit-scrollbar-track {
139
- background: transparent; /* color of the tracking area */
140
- }
141
-
142
- .module__container::-webkit-scrollbar-thumb {
143
- background-color: var(--color-active); /* color of the scroll thumb */
144
- border-radius: 20px;/* roundness of the scroll thumb*/
145
- }
146
-
147
- .module.minimized .module__container {
148
- display: none;
149
- }
150
-
151
- .footer {
152
- height: var(--height-input);
153
- }
65
+ .module {
66
+ --header-height: 25px;
67
+
68
+ display: grid;
69
+ grid-template-rows: 25px minmax(0px, auto);
70
+ grid-template-columns: minmax(0, 1fr);
71
+ align-items: stretch;
72
+ }
73
+
74
+ .module.no-header {
75
+ --header-height: 0px;
76
+ grid-template-rows: minmax(0px, auto);
77
+ }
78
+
79
+ .module__header {
80
+ display: grid;
81
+ grid-template-columns: 1fr 1fr 1fr;
82
+ height: var(--header-height);
83
+ flex-shrink: 0;
84
+ align-items: center;
85
+
86
+ background-color: var(--color-lightblack);
87
+ }
88
+
89
+ .slot {
90
+ display: flex;
91
+ align-items: center;
92
+ }
93
+
94
+ .header__col {
95
+ display: flex;
96
+ padding: 0 6px;
97
+ justify-content: center;
98
+ align-items: center;
99
+ }
100
+
101
+ .header__col:first-child {
102
+ justify-content: flex-start;
103
+ }
104
+
105
+ .header__col:last-child {
106
+ justify-content: flex-end;
107
+ }
108
+
109
+ .module__title {
110
+ user-select: none;
111
+
112
+ color: white;
113
+ font-size: 10px;
114
+ text-transform: capitalize;
115
+ background-color: transparent;
116
+ }
117
+
118
+ .module__container {
119
+ position: relative;
120
+
121
+ background-color: var(--color-background);
122
+ }
123
+
124
+ .module.scrollable .module__container {
125
+ overflow-y: auto;
126
+ }
127
+
128
+ .module.editing.scrollable .module__container {
129
+ overflow-y: hidden;
130
+ }
131
+
132
+ .module__container::-webkit-scrollbar {
133
+ width: 5px;
134
+ height: 5px;
135
+ }
136
+
137
+ .module__container::-webkit-scrollbar-track {
138
+ background: transparent; /* color of the tracking area */
139
+ }
140
+
141
+ .module__container::-webkit-scrollbar-thumb {
142
+ background-color: var(--color-active); /* color of the scroll thumb */
143
+ border-radius: 20px; /* roundness of the scroll thumb*/
144
+ }
145
+
146
+ .module.minimized .module__container {
147
+ display: none;
148
+ }
149
+
150
+ .footer {
151
+ height: var(--height-input);
152
+ }
154
153
  </style>
@@ -1,87 +1,90 @@
1
1
  <script>
2
- import ModuleHeaderSelect from "./ModuleHeaderSelect.svelte";
3
- import ModuleHeaderButton from "./ModuleHeaderButton.svelte";
2
+ import ModuleHeaderSelect from './ModuleHeaderSelect.svelte';
3
+ import ModuleHeaderButton from './ModuleHeaderButton.svelte';
4
4
 
5
- export let label = "";
6
- export let permanent = false;
7
- export let value = null;
8
- export let border = false;
9
- export let margin = true;
10
- export let options = [];
11
-
12
- $: disabled = options.length === 1;
5
+ export let label = '';
6
+ export let permanent = false;
7
+ export let value = null;
8
+ export let border = false;
9
+ export let margin = true;
10
+ export let options = [];
13
11
 
12
+ $: disabled = options.length === 1;
14
13
  </script>
15
14
 
16
- <div class="module-header-action" class:permanent={permanent} class:border={border} class:no-margin={!margin} class:disabled={disabled}>
17
- {#if options.length > 0}
18
- <ModuleHeaderSelect {options} {value} {disabled} on:change/>
19
- {:else}
20
- <ModuleHeaderButton label={label} on:click>
21
- <slot name="text">
22
- <div class="text">
23
- <slot></slot>
24
- </div>
25
- </slot>
26
- <slot name="icon"></slot>
27
- </ModuleHeaderButton>
28
- {/if}
15
+ <div
16
+ class="module-header-action"
17
+ class:permanent
18
+ class:border
19
+ class:no-margin={!margin}
20
+ class:disabled
21
+ >
22
+ {#if options.length > 0}
23
+ <ModuleHeaderSelect {options} {value} {disabled} on:change />
24
+ {:else}
25
+ <ModuleHeaderButton {label} on:click>
26
+ <slot name="text">
27
+ <div class="text">
28
+ <slot />
29
+ </div>
30
+ </slot>
31
+ <slot name="icon" />
32
+ </ModuleHeaderButton>
33
+ {/if}
29
34
  </div>
30
35
 
31
-
32
36
  <style>
33
- .module-header-action {
34
- display: flex;
35
- align-items: center;
36
-
37
- color: rgba(255, 255, 255, 0.75);
38
-
39
- margin: 0 2px;
40
- }
41
-
42
- .module-header-action:not(.disabled):hover {
43
- color: rgba(255, 255, 255, 1);
44
- }
45
-
46
- .text:not(:empty) {
47
- color: inherit;
48
- background: transparent;
49
- width: 100%;
50
- font-size: 10px;
51
-
52
- padding: 1px 3px 1px 3px;
53
- }
54
-
55
- .module-header-action.no-margin {
56
- margin: 0;
57
- }
58
-
59
- .module-header-action.border {
60
- border-radius: 2px;
61
- border: 1px solid rgba(255, 255, 255, 0.25);
62
- }
63
-
64
- .module-header-action:not(.disabled).border:hover {
65
- border: 1px solid rgba(255, 255, 255, 0.5);
66
- }
67
-
68
- .module-header-action:first-child {
69
- margin-left: 0;
70
- }
71
-
72
- .module-header-action:last-child {
73
- margin-right: 0;
74
- }
75
-
76
- .module-header-action:not(.permanent) {
77
- opacity: 0;
78
- transition: opacity 0.2s ease;
79
- pointer-events: none;
80
- }
81
-
82
- :global(.module__header:hover .module-header-action:not(.permanent)) {
83
- opacity: 1;
84
- pointer-events: auto;
85
- }
86
-
37
+ .module-header-action {
38
+ display: flex;
39
+ align-items: center;
40
+
41
+ color: rgba(255, 255, 255, 0.75);
42
+
43
+ margin: 0 2px;
44
+ }
45
+
46
+ .module-header-action:not(.disabled):hover {
47
+ color: rgba(255, 255, 255, 1);
48
+ }
49
+
50
+ .text:not(:empty) {
51
+ color: inherit;
52
+ background: transparent;
53
+ width: 100%;
54
+ font-size: 10px;
55
+
56
+ padding: 1px 3px 1px 3px;
57
+ }
58
+
59
+ .module-header-action.no-margin {
60
+ margin: 0;
61
+ }
62
+
63
+ .module-header-action.border {
64
+ border-radius: 2px;
65
+ border: 1px solid rgba(255, 255, 255, 0.25);
66
+ }
67
+
68
+ .module-header-action:not(.disabled).border:hover {
69
+ border: 1px solid rgba(255, 255, 255, 0.5);
70
+ }
71
+
72
+ .module-header-action:first-child {
73
+ margin-left: 0;
74
+ }
75
+
76
+ .module-header-action:last-child {
77
+ margin-right: 0;
78
+ }
79
+
80
+ .module-header-action:not(.permanent) {
81
+ opacity: 0;
82
+ transition: opacity 0.2s ease;
83
+ pointer-events: none;
84
+ }
85
+
86
+ :global(.module__header:hover .module-header-action:not(.permanent)) {
87
+ opacity: 1;
88
+ pointer-events: auto;
89
+ }
87
90
  </style>
@@ -1,21 +1,21 @@
1
1
  <script>
2
- export let label;
2
+ export let label;
3
3
  </script>
4
4
 
5
5
  <button class="module-header-action__button" aria-label={label} on:click>
6
- <slot></slot>
6
+ <slot />
7
7
  </button>
8
8
 
9
9
  <style>
10
- .module-header-action__button {
11
- color: inherit;
12
- background: transparent;
13
- /* opacity: 0.5; */
14
- display: flex;
15
- transition: opacity 0.2s ease;
16
- }
10
+ .module-header-action__button {
11
+ color: inherit;
12
+ background: transparent;
13
+ /* opacity: 0.5; */
14
+ display: flex;
15
+ transition: opacity 0.2s ease;
16
+ }
17
17
 
18
- .module-header-action__button:hover {
19
- opacity: 1;
20
- }
18
+ .module-header-action__button:hover {
19
+ opacity: 1;
20
+ }
21
21
  </style>
@@ -1,50 +1,60 @@
1
1
  <script>
2
- import { createEventDispatcher } from "svelte";
2
+ import { createEventDispatcher } from 'svelte';
3
3
 
4
- import SelectChevrons from "./SelectChevrons.svelte";
4
+ import SelectChevrons from './SelectChevrons.svelte';
5
5
 
6
- export let value;
7
- export let options = [];
8
- export let disabled = false;
6
+ export let value;
7
+ export let options = [];
8
+ export let disabled = false;
9
9
 
10
- const dispatch = createEventDispatcher();
10
+ const dispatch = createEventDispatcher();
11
11
 
12
- function handleChange(event) {
13
- dispatch("change", event.currentTarget.value);
14
- }
12
+ function handleChange(event) {
13
+ dispatch('change', event.currentTarget.value);
14
+ }
15
15
  </script>
16
16
 
17
17
  <div class="module-header-select">
18
- <select class="select" on:change={handleChange} class:single={options.length === 1} disabled={disabled}>
19
- {#each options as option}
20
- <option value={option.value} selected={value === option.value}>{option.label}</option>
21
- {/each}
22
- </select>
23
- {#if options.length > 1 }
24
- <SelectChevrons width={15} height={15} --color="rgba(255, 255, 255, 0.75)" />
25
- {/if}
18
+ <select
19
+ class="select"
20
+ on:change={handleChange}
21
+ class:single={options.length === 1}
22
+ {disabled}
23
+ >
24
+ {#each options as option}
25
+ <option value={option.value} selected={value === option.value}
26
+ >{option.label}</option
27
+ >
28
+ {/each}
29
+ </select>
30
+ {#if options.length > 1}
31
+ <SelectChevrons
32
+ width={15}
33
+ height={15}
34
+ --color="rgba(255, 255, 255, 0.75)"
35
+ />
36
+ {/if}
26
37
  </div>
27
38
 
28
39
  <style>
29
- .module-header-select {
30
- position: relative;
31
-
32
- display: flex;
33
- }
34
-
35
- .select {
36
- font-size: 10px;
37
- padding: 1px 3px;
38
-
39
- color: inherit;
40
- background: transparent;
41
-
42
- outline: 0;
43
- user-select: none;
44
- }
45
-
46
- .select:not(.single) {
47
- padding-right: 15px;
48
- }
40
+ .module-header-select {
41
+ position: relative;
49
42
 
43
+ display: flex;
44
+ }
45
+
46
+ .select {
47
+ font-size: 10px;
48
+ padding: 1px 3px;
49
+
50
+ color: inherit;
51
+ background: transparent;
52
+
53
+ outline: 0;
54
+ user-select: none;
55
+ }
56
+
57
+ .select:not(.single) {
58
+ padding-right: 15px;
59
+ }
50
60
  </style>
@@ -1,38 +1,37 @@
1
1
  <script context="module">
2
- export let moduleNames = [
3
- "monitor",
4
- "params",
5
- "midi",
6
- "console",
7
- "exports",
8
- ];
2
+ export let moduleNames = [
3
+ 'monitor',
4
+ 'params',
5
+ 'midi',
6
+ 'console',
7
+ 'exports',
8
+ ];
9
9
  </script>
10
10
 
11
11
  <script>
12
- import Module from "./Module.svelte";
12
+ import Module from './Module.svelte';
13
13
 
14
- export let mID = undefined;
15
- export let name;
16
- export let hasHeader = true;
17
-
18
- const moduleList = {
19
- "monitor": () => import("../modules/Monitor.svelte"),
20
- "params": () => import("../modules/Params.svelte"),
21
- "midi": () => import("../modules/MidiPanel.svelte"),
22
- "console": () => import("../modules/Console.svelte"),
23
- "exports": () => import("../modules/Exports.svelte"),
24
- };
14
+ export let mID = undefined;
15
+ export let name;
16
+ export let hasHeader = true;
25
17
 
18
+ const moduleList = {
19
+ monitor: () => import('../modules/Monitor.svelte'),
20
+ params: () => import('../modules/Params.svelte'),
21
+ midi: () => import('../modules/MidiPanel.svelte'),
22
+ console: () => import('../modules/Console.svelte'),
23
+ exports: () => import('../modules/Exports.svelte'),
24
+ };
26
25
  </script>
27
26
 
28
27
  {#if moduleList[name]}
29
- {#await moduleList[name]()}
30
- <Module {hasHeader} {mID} {name}/>
31
- {:then value}
32
- <svelte:component this={value.default} {mID} {hasHeader} />
33
- {:catch error}
34
- <p>Something went wrong: {error.message}</p>
35
- {/await}
28
+ {#await moduleList[name]()}
29
+ <Module {hasHeader} {mID} {name} />
30
+ {:then value}
31
+ <svelte:component this={value.default} {mID} {hasHeader} />
32
+ {:catch error}
33
+ <p>Something went wrong: {error.message}</p>
34
+ {/await}
36
35
  {:else}
37
- <Module {hasHeader} {mID} {name}/>
36
+ <Module {hasHeader} {mID} {name} />
38
37
  {/if}