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,95 +1,104 @@
1
- import Trigger from "./Trigger";
2
- import Keyboard from "../inputs/Keyboard";
3
- import { wildcard, getContext } from "./shared";
4
- import { addToMapArray, removeFromMapArray } from "../utils";
1
+ import Trigger from './Trigger';
2
+ import Keyboard from '../inputs/Keyboard';
3
+ import { wildcard, getContext } from './shared';
4
+ import { addToMapArray, removeFromMapArray } from '../utils';
5
5
 
6
6
  const pressedKeys = new Map();
7
7
  const upKeys = new Map();
8
8
  const downKeys = new Map();
9
9
 
10
10
  export const removeHotListeners = (context) => {
11
- function removeHotFrom(collection) {
12
- for (let trigger of collection) {
13
- const [key, triggers] = trigger;
14
-
15
- collection.set(key, triggers.filter((trigger) => trigger.context !== context));
16
- }
17
- }
18
-
19
- removeHotFrom(pressedKeys);
20
- removeHotFrom(upKeys);
21
- removeHotFrom(downKeys);
11
+ function removeHotFrom(collection) {
12
+ for (let trigger of collection) {
13
+ const [key, triggers] = trigger;
14
+
15
+ collection.set(
16
+ key,
17
+ triggers.filter((trigger) => trigger.context !== context),
18
+ );
19
+ }
20
+ }
21
+
22
+ removeHotFrom(pressedKeys);
23
+ removeHotFrom(upKeys);
24
+ removeHotFrom(downKeys);
22
25
  };
23
26
 
24
27
  function createEventListener(collection) {
25
- return (event) => {
26
- const { key, target } = event;
27
-
28
- if (!target.classList.contains('input')) {
29
- const triggers = [
30
- ...(collection.has(key) ? collection.get(key) : []),
31
- ...(collection.has(wildcard) ? collection.get(wildcard) : []),
32
- ];
33
-
34
- triggers.forEach(trigger => {
35
- if (!Keyboard.enabled) return;
36
-
37
- trigger.run(event);
38
- });
39
- }
40
- };
28
+ return (event) => {
29
+ const { key, target } = event;
30
+
31
+ if (!target.classList.contains('input')) {
32
+ const triggers = [
33
+ ...(collection.has(key) ? collection.get(key) : []),
34
+ ...(collection.has(wildcard) ? collection.get(wildcard) : []),
35
+ ];
36
+
37
+ triggers.forEach((trigger) => {
38
+ if (!Keyboard.enabled) return;
39
+
40
+ trigger.run(event);
41
+ });
42
+ }
43
+ };
41
44
  }
42
45
 
43
46
  function createTrigger(eventName, collection) {
44
- return (key, fn, options = {}) => {
45
- if (typeof key === "function") {
46
- if (typeof fn === "object") {
47
- options = {
48
- ...options,
49
- ...fn,
50
- };
51
- }
52
-
53
- fn = key;
54
- key = "*";
55
-
56
- if (options.key) {
57
- key = options.key;
58
- }
59
- }
60
-
61
- const { hot, enabled, ...params } = options;
62
- const context = getContext();
63
-
64
- const keys = Array.isArray(key) ? key : [...key.split(',').map(k => k !== " " ? k.trim() : k)];
65
-
66
- const trigger = new Trigger({
67
- inputType: 'Keyboard',
68
- eventName,
69
- fn,
70
- context,
71
- params: {...params, key: keys },
72
- hot,
73
- enabled,
74
- destroy: () => {
75
- keys.forEach((key) => {
76
- removeFromMapArray(collection, key, (item) => item.id === trigger.id);
77
- });
78
- }
79
- });
80
-
81
- keys.forEach(key => {
82
- addToMapArray(collection, key, trigger);
83
- });
84
-
85
- return trigger;
86
- };
87
- };
47
+ return (key, fn, options = {}) => {
48
+ if (typeof key === 'function') {
49
+ if (typeof fn === 'object') {
50
+ options = {
51
+ ...options,
52
+ ...fn,
53
+ };
54
+ }
55
+
56
+ fn = key;
57
+ key = '*';
58
+
59
+ if (options.key) {
60
+ key = options.key;
61
+ }
62
+ }
63
+
64
+ const { hot, enabled, ...params } = options;
65
+ const context = getContext();
66
+
67
+ const keys = Array.isArray(key)
68
+ ? key
69
+ : [...`${key}`.split(',').map((k) => (k !== ' ' ? k.trim() : k))];
70
+
71
+ const trigger = new Trigger({
72
+ inputType: 'Keyboard',
73
+ eventName,
74
+ fn,
75
+ context,
76
+ params: { ...params, key: keys },
77
+ hot,
78
+ enabled,
79
+ destroy: () => {
80
+ keys.forEach((key) => {
81
+ removeFromMapArray(
82
+ collection,
83
+ key,
84
+ (item) => item.id === trigger.id,
85
+ );
86
+ });
87
+ },
88
+ });
89
+
90
+ keys.forEach((key) => {
91
+ addToMapArray(collection, key, trigger);
92
+ });
93
+
94
+ return trigger;
95
+ };
96
+ }
88
97
 
89
- window.addEventListener("keypress", createEventListener(pressedKeys));
90
- window.addEventListener("keyup", createEventListener(upKeys));
91
- window.addEventListener("keydown", createEventListener(downKeys));
98
+ window.addEventListener('keypress', createEventListener(pressedKeys));
99
+ window.addEventListener('keyup', createEventListener(upKeys));
100
+ window.addEventListener('keydown', createEventListener(downKeys));
92
101
 
93
102
  export const onKeyPress = createTrigger('onKeyPress', pressedKeys);
94
- export const onKeyDown = createTrigger('onKeyDown', downKeys);
103
+ export const onKeyDown = createTrigger('onKeyDown', downKeys);
95
104
  export const onKeyUp = createTrigger('onKeyUp', upKeys);
@@ -1,7 +1,7 @@
1
- import Trigger from "./Trigger";
2
- import MIDI from "../inputs/MIDI.js";
3
- import { addToMapArray, removeFromMapArray } from "../utils";
4
- import { wildcard, getContext } from "./shared";
1
+ import Trigger from './Trigger';
2
+ import MIDI from '../inputs/MIDI.js';
3
+ import { addToMapArray, removeFromMapArray } from '../utils';
4
+ import { wildcard, getContext } from './shared';
5
5
 
6
6
  const noteons = new Map();
7
7
  const noteoffs = new Map();
@@ -11,33 +11,36 @@ const controlchanges = new Map();
11
11
 
12
12
  /**
13
13
  * Remove listeners from a specific context
14
- * @param {string} context
14
+ * @param {string} context
15
15
  */
16
16
  export const removeHotListeners = (context) => {
17
- function removeHotFrom(collection) {
18
- for (let trigger of collection) {
19
- const [key, triggers] = trigger;
20
-
21
- collection.set(key, triggers.filter((trigger) => trigger.context !== context));
22
- }
23
- }
24
-
25
- removeHotFrom(noteons);
26
- removeHotFrom(noteoffs);
27
- removeHotFrom(numberons);
28
- removeHotFrom(numberoffs);
29
- removeHotFrom(controlchanges);
17
+ function removeHotFrom(collection) {
18
+ for (let trigger of collection) {
19
+ const [key, triggers] = trigger;
20
+
21
+ collection.set(
22
+ key,
23
+ triggers.filter((trigger) => trigger.context !== context),
24
+ );
25
+ }
26
+ }
27
+
28
+ removeHotFrom(noteons);
29
+ removeHotFrom(noteoffs);
30
+ removeHotFrom(numberons);
31
+ removeHotFrom(numberoffs);
32
+ removeHotFrom(controlchanges);
30
33
  };
31
34
 
32
35
  /**
33
36
  * Check all registered listeners for a specific key
34
- * @param {Map} collection
35
- * @param {function} getKey
37
+ * @param {Map} collection
38
+ * @param {function} getKey
36
39
  * @returns {function} listener
37
40
  */
38
41
  function createEventListener(collection, getKey = (event) => event.key) {
39
- return (event) => {
40
- const key = getKey(event);
42
+ return (event) => {
43
+ const key = getKey(event);
41
44
  const { id } = event.srcElement;
42
45
 
43
46
  const triggers = [
@@ -46,78 +49,101 @@ function createEventListener(collection, getKey = (event) => event.key) {
46
49
  ];
47
50
 
48
51
  if (MIDI.enabled && id === MIDI.selectedInputID) {
49
- triggers.forEach(trigger => {
52
+ triggers.forEach((trigger) => {
50
53
  trigger.run(event);
51
54
  });
52
55
  }
53
- };
56
+ };
54
57
  }
55
58
 
56
59
  /**
57
60
  * Create a registering function for a specific event
58
- * @param {string} eventName
59
- * @param {Map} collection
60
- * @returns {function} createListener
61
+ * @param {string} eventName
62
+ * @param {Map} collection
63
+ * @returns {function} createListener
61
64
  */
62
65
  function createTrigger(eventName, collection) {
63
- return (key, fn, options = {}) => {
64
- if (typeof key === "function") {
65
- if (typeof fn === "object") {
66
- options = {
67
- ...options,
68
- ...fn,
69
- };
70
- }
71
-
72
- fn = key;
73
- key = "*";
74
-
75
- if (options.key) {
76
- key = options.key;
77
- }
78
- }
79
-
80
- const { hot, enabled, ...params } = options;
81
- let keys = Array.isArray(key) ? key : [...key.split(',').map(k => k.trim())];
82
-
83
- if (["onControlChange", "onNumberOn", "onNumberOff"].includes(eventName)) {
84
- keys = keys.map((k) => Number(k));
85
- }
86
-
87
- if (!MIDI.enabled) {
88
- MIDI.request();
89
- }
90
-
91
- const context = getContext();
92
-
93
- const trigger = new Trigger({
94
- inputType: 'MIDI',
95
- eventName,
96
- fn,
97
- params: {...params, key: keys },
98
- hot,
99
- context,
100
- enabled,
101
- destroy : () => {
102
- keys.forEach((key) => {
103
- removeFromMapArray(collection, key, (item) => item.id === trigger.id);
104
- });
105
- }
106
- });
107
-
108
- keys.forEach(k => {
109
- addToMapArray(collection, k, trigger);
110
- });
111
-
112
- return trigger;
113
- };
114
- };
66
+ return (key, fn, options = {}) => {
67
+ if (typeof key === 'function') {
68
+ if (typeof fn === 'object') {
69
+ options = {
70
+ ...options,
71
+ ...fn,
72
+ };
73
+ }
74
+
75
+ fn = key;
76
+ key = '*';
77
+
78
+ if (options.key) {
79
+ key = options.key;
80
+ }
81
+ }
82
+
83
+ const { hot, enabled, ...params } = options;
84
+ let keys = Array.isArray(key)
85
+ ? key
86
+ : [...`${key}`.split(',').map((k) => k.trim())];
87
+
88
+ if (
89
+ ['onControlChange', 'onNumberOn', 'onNumberOff'].includes(eventName)
90
+ ) {
91
+ keys = keys.map((k) => (!isNaN(Number(k)) ? Number(k) : k));
92
+ }
93
+
94
+ if (!MIDI.enabled) {
95
+ MIDI.request();
96
+ }
97
+
98
+ const context = getContext();
99
+
100
+ const trigger = new Trigger({
101
+ inputType: 'MIDI',
102
+ eventName,
103
+ fn,
104
+ params: { ...params, key: keys },
105
+ hot,
106
+ context,
107
+ enabled,
108
+ destroy: () => {
109
+ keys.forEach((key) => {
110
+ removeFromMapArray(
111
+ collection,
112
+ key,
113
+ (item) => item.id === trigger.id,
114
+ );
115
+ });
116
+ },
117
+ });
118
+
119
+ keys.forEach((k) => {
120
+ addToMapArray(collection, k, trigger);
121
+ });
122
+
123
+ return trigger;
124
+ };
125
+ }
115
126
 
116
- MIDI.addEventListener("noteon", createEventListener(noteons, (event) => event.note.name));
117
- MIDI.addEventListener("noteoff", createEventListener(noteoffs, (event) => event.note.name));
118
- MIDI.addEventListener("noteon", createEventListener(numberons, (event) => event.note.number));
119
- MIDI.addEventListener("noteoff", createEventListener(numberoffs, (event) => event.note.number));
120
- MIDI.addEventListener("controlchange", createEventListener(controlchanges, (event) => event.note.number));
127
+ MIDI.addEventListener(
128
+ 'noteon',
129
+ createEventListener(noteons, (event) => event.note.name),
130
+ );
131
+ MIDI.addEventListener(
132
+ 'noteoff',
133
+ createEventListener(noteoffs, (event) => event.note.name),
134
+ );
135
+ MIDI.addEventListener(
136
+ 'noteon',
137
+ createEventListener(numberons, (event) => event.note.number),
138
+ );
139
+ MIDI.addEventListener(
140
+ 'noteoff',
141
+ createEventListener(numberoffs, (event) => event.note.number),
142
+ );
143
+ MIDI.addEventListener(
144
+ 'controlchange',
145
+ createEventListener(controlchanges, (event) => event.note.number),
146
+ );
121
147
 
122
148
  export const onNoteOn = createTrigger('onNoteOn', noteons);
123
149
  export const onNoteOff = createTrigger('onNoteOff', noteoffs);
@@ -1,6 +1,6 @@
1
- import Trigger from "./Trigger";
2
- import { wildcard, getContext } from "./shared.js";
3
- import { addToMapArray, removeFromMapArray } from "../utils";
1
+ import Trigger from './Trigger';
2
+ import { wildcard, getContext } from './shared.js';
3
+ import { addToMapArray, removeFromMapArray } from '../utils';
4
4
 
5
5
  window.mouseIsPressed = false;
6
6
  window.mouseX = 0;
@@ -12,83 +12,91 @@ const moves = new Map();
12
12
  const clicks = new Map();
13
13
 
14
14
  export const reset = (context) => {
15
- downs.delete(context);
16
- ups.delete(context);
17
- moves.delete(context);
18
- clicks.delete(context);
19
- }
15
+ downs.delete(context);
16
+ ups.delete(context);
17
+ moves.delete(context);
18
+ clicks.delete(context);
19
+ };
20
20
 
21
21
  export const removeHotListeners = (context) => {
22
- function removeHotFrom(collection) {
23
- const triggers = collection.get(context);
22
+ function removeHotFrom(collection) {
23
+ const triggers = collection.get(context);
24
24
 
25
- if (triggers && triggers.length > 0) {
26
- const hotListeners = triggers.filter(t => t.hot);
27
- const rest = triggers.filter(t => !t.hot);
25
+ if (triggers && triggers.length > 0) {
26
+ const hotListeners = triggers.filter((t) => t.hot);
27
+ const rest = triggers.filter((t) => !t.hot);
28
28
 
29
- hotListeners.forEach(t => t.destroy());
29
+ hotListeners.forEach((t) => t.destroy());
30
30
 
31
- collection.set(context, rest);
32
- }
33
- }
31
+ collection.set(context, rest);
32
+ }
33
+ }
34
34
 
35
- removeHotFrom(downs);
36
- removeHotFrom(ups);
37
- removeHotFrom(moves);
38
- removeHotFrom(clicks);
35
+ removeHotFrom(downs);
36
+ removeHotFrom(ups);
37
+ removeHotFrom(moves);
38
+ removeHotFrom(clicks);
39
39
  };
40
40
 
41
41
  const checkForTriggers = (collection, event, scope) => {
42
- const triggers = [
43
- ...(collection.has(scope) ? collection.get(scope) : []),
44
- ...(collection.has(wildcard) ? collection.get(wildcard) : []),
45
- ];
46
-
47
- triggers.forEach(trigger => {
48
- trigger.run(event)
49
- });
50
- }
42
+ const triggers = [
43
+ ...(collection.has(scope) ? collection.get(scope) : []),
44
+ ...(collection.has(wildcard) ? collection.get(wildcard) : []),
45
+ ];
46
+
47
+ triggers.forEach((trigger) => {
48
+ trigger.run(event);
49
+ });
50
+ };
51
51
 
52
52
  /**
53
- *
54
- * @param {Map} collection
55
- * @returns
53
+ *
54
+ * @param {Map} collection
55
+ * @returns
56
56
  */
57
57
  const createTrigger = (eventName, collection) => {
58
- return (fn, { context, hot, enabled } = {}) => {
59
- try {
60
- if (!context) {
61
- context = getContext();
62
- }
63
-
64
- const trigger = new Trigger({
65
- inputType: 'Mouse',
66
- eventName,
67
- fn,
68
- params: { context },
69
- context,
70
- hot,
71
- enabled,
72
- destroy: () => {
73
- removeFromMapArray(collection, context, (item) => item.id === trigger.id);
74
- }
75
- });
76
-
77
- addToMapArray(collection, context, trigger);
78
-
79
- return trigger;
80
- } catch(error) {
81
- console.error(error);
82
-
83
- return null;
84
- }
85
- }
58
+ return (fn, { context, hot, enabled } = {}) => {
59
+ try {
60
+ if (!context) {
61
+ context = getContext();
62
+ }
63
+
64
+ const trigger = new Trigger({
65
+ inputType: 'Mouse',
66
+ eventName,
67
+ fn,
68
+ params: { context },
69
+ context,
70
+ hot,
71
+ enabled,
72
+ destroy: () => {
73
+ removeFromMapArray(
74
+ collection,
75
+ context,
76
+ (item) => item.id === trigger.id,
77
+ );
78
+ },
79
+ });
80
+
81
+ addToMapArray(collection, context, trigger);
82
+
83
+ return trigger;
84
+ } catch (error) {
85
+ console.error(error);
86
+
87
+ return null;
88
+ }
89
+ };
86
90
  };
87
91
 
88
- export const checkForTriggersDown = (event, context) => checkForTriggers(downs, event, context);
89
- export const checkForTriggersMove = (event, context) => checkForTriggers(moves, event, context);
90
- export const checkForTriggersUp = (event, context) => checkForTriggers(ups, event, context);
91
- export const checkForTriggersClick = (event, context) => checkForTriggers(clicks, event, context);
92
+ export const checkForTriggersDown = (event, context) =>
93
+ checkForTriggers(downs, event, context);
94
+ export const checkForTriggersMove = (event, context) =>
95
+ checkForTriggers(moves, event, context);
96
+ export const checkForTriggersUp = (event, context) =>
97
+ checkForTriggers(ups, event, context);
98
+ export const checkForTriggersClick = (event, context) =>
99
+ checkForTriggers(clicks, event, context);
92
100
 
93
101
  export const onMouseDown = createTrigger('onMouseDown', downs);
94
102
  export const onMouseUp = createTrigger('onMouseUp', ups);