=
26 | new Map();
27 |
28 | /**
29 | * Initializes a ToolboxSearchCategory.
30 | *
31 | * @param categoryDef The information needed to create a category in the
32 | * toolbox.
33 | * @param parentToolbox The parent toolbox for the category.
34 | * @param opt_parent The parent category or null if the category does not have
35 | * a parent.
36 | */
37 | constructor(
38 | categoryDef: Blockly.utils.toolbox.CategoryInfo,
39 | parentToolbox: Blockly.IToolbox,
40 | opt_parent?: Blockly.ICollapsibleToolboxItem
41 | ) {
42 | super(categoryDef, parentToolbox, opt_parent);
43 | this.initBlockSearcher();
44 | this.registerShortcut();
45 | }
46 |
47 | /**
48 | * Initializes the search field toolbox category.
49 | *
50 | * @returns The that will be displayed in the toolbox.
51 | */
52 | protected override createDom_(): HTMLDivElement {
53 | const dom = super.createDom_();
54 | this.searchField = document.createElement("input");
55 | this.searchField.type = "search";
56 | this.searchField.placeholder = "Search";
57 | this.workspace_.RTL
58 | ? (this.searchField.style.marginRight = "8px")
59 | : (this.searchField.style.marginLeft = "8px");
60 | this.searchField.addEventListener("keyup", (event) => {
61 | if (event.key === "Escape") {
62 | this.parentToolbox_.clearSelection();
63 | return true;
64 | }
65 |
66 | this.matchBlocks();
67 | });
68 | this.rowContents_?.replaceChildren(this.searchField);
69 | return dom;
70 | }
71 |
72 | /**
73 | * Returns the numerical position of this category in its parent toolbox.
74 | *
75 | * @returns The zero-based index of this category in its parent toolbox, or -1
76 | * if it cannot be determined, e.g. if this is a nested category.
77 | */
78 | private getPosition() {
79 | const categories = this.workspace_.options.languageTree?.contents || [];
80 | for (let i = 0; i < categories.length; i++) {
81 | if (categories[i].kind === ToolboxSearchCategory.SEARCH_CATEGORY_KIND) {
82 | return i;
83 | }
84 | }
85 |
86 | return -1;
87 | }
88 |
89 | /**
90 | * Registers a shortcut for displaying the toolbox search category.
91 | */
92 | private registerShortcut() {
93 | const shortcut = Blockly.ShortcutRegistry.registry.createSerializedKey(
94 | Blockly.utils.KeyCodes.B,
95 | [Blockly.utils.KeyCodes.CTRL]
96 | );
97 | Blockly.ShortcutRegistry.registry.register({
98 | name: ToolboxSearchCategory.START_SEARCH_SHORTCUT,
99 | callback: () => {
100 | const position = this.getPosition();
101 | if (position < 0) return false;
102 | this.parentToolbox_.selectItemByPosition(position);
103 | return true;
104 | },
105 | keyCodes: [shortcut],
106 | });
107 | }
108 |
109 | /**
110 | * Returns a list of block types that are present in the toolbox definition.
111 | *
112 | * @param schema A toolbox item definition.
113 | * @param allBlocks The set of all available blocks that have been encountered
114 | * so far.
115 | */
116 | private getAvailableBlocks(
117 | schema: Blockly.utils.toolbox.ToolboxItemInfo,
118 | allBlocks: Set
119 | ) {
120 | if ("contents" in schema) {
121 | schema.contents.forEach((contents) => {
122 | this.getAvailableBlocks(contents, allBlocks);
123 | });
124 | } else if (schema.kind.toLowerCase() === "block") {
125 | if ("type" in schema && schema.type) {
126 | allBlocks.add(schema.type);
127 | this.blockSchemas.set(schema.type, schema); // <-
128 | }
129 | }
130 | }
131 |
132 | /**
133 | * Builds the BlockSearcher index based on the available blocks.
134 | */
135 | private initBlockSearcher() {
136 | const availableBlocks = new Set();
137 | this.workspace_.options.languageTree?.contents?.forEach((item) =>
138 | this.getAvailableBlocks(item, availableBlocks)
139 | );
140 | this.blockSearcher.indexBlocks([...availableBlocks]);
141 | }
142 |
143 | /**
144 | * Handles a click on this toolbox category.
145 | *
146 | * @param e The click event.
147 | */
148 | override onClick(e: Event) {
149 | super.onClick(e);
150 | e.preventDefault();
151 | e.stopPropagation();
152 | this.setSelected(this.parentToolbox_.getSelectedItem() === this);
153 | }
154 |
155 | /**
156 | * Handles changes in the selection state of this category.
157 | *
158 | * @param isSelected Whether or not the category is now selected.
159 | */
160 | override setSelected(isSelected: boolean) {
161 | super.setSelected(isSelected);
162 | if (!this.searchField) return;
163 | if (isSelected) {
164 | this.searchField.focus();
165 | this.matchBlocks();
166 | } else {
167 | this.searchField.value = "";
168 | this.searchField.blur();
169 | }
170 | }
171 |
172 | /**
173 | * Filters the available blocks based on the current query string.
174 | */
175 | private matchBlocks() {
176 | const query = this.searchField?.value || "";
177 |
178 | this.flyoutItems_ = query
179 | ? this.blockSearcher.blockTypesMatching(query).map((blockType) => {
180 | /* {
181 | kind: "block",
182 | type: blockType,
183 | }; */
184 | // this includes the whole block schema, including shadow blocks for example
185 | return this.blockSchemas.get(blockType) as any;
186 | })
187 | : [];
188 |
189 | if (!this.flyoutItems_.length) {
190 | this.flyoutItems_.push({
191 | kind: "label",
192 | text:
193 | query.length < 3
194 | ? "Type to search for blocks"
195 | : "No matching blocks found",
196 | });
197 | }
198 | this.parentToolbox_.refreshSelection();
199 | }
200 |
201 | /**
202 | * Disposes of this category.
203 | */
204 | override dispose() {
205 | super.dispose();
206 | Blockly.ShortcutRegistry.registry.unregister(
207 | ToolboxSearchCategory.START_SEARCH_SHORTCUT
208 | );
209 | }
210 | }
211 |
212 | Blockly.registry.register(
213 | Blockly.registry.Type.TOOLBOX_ITEM,
214 | ToolboxSearchCategory.SEARCH_CATEGORY_KIND,
215 | ToolboxSearchCategory
216 | );
217 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@blockly/theme-dark':
12 | specifier: ^7.0.10
13 | version: 7.0.10(blockly@11.2.1)
14 | '@kabelsalat/web':
15 | specifier: ^0.3.2
16 | version: 0.3.2
17 | blockly:
18 | specifier: ^11.2.1
19 | version: 11.2.1
20 | devDependencies:
21 | vite:
22 | specifier: ^6.1.0
23 | version: 6.1.0
24 |
25 | packages:
26 |
27 | '@asamuzakjp/css-color@2.8.3':
28 | resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==}
29 |
30 | '@blockly/theme-dark@7.0.10':
31 | resolution: {integrity: sha512-Wc6n115vt9alxzPkEwYtvBBGoPUV3gaYE00dvSKhqXTNoy1Xioujj9kT9VkGmdMO2mhgnJNczSpvxG8tcd4zLQ==}
32 | engines: {node: '>=8.17.0'}
33 | peerDependencies:
34 | blockly: ^11.0.0
35 |
36 | '@csstools/color-helpers@5.0.1':
37 | resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==}
38 | engines: {node: '>=18'}
39 |
40 | '@csstools/css-calc@2.1.1':
41 | resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==}
42 | engines: {node: '>=18'}
43 | peerDependencies:
44 | '@csstools/css-parser-algorithms': ^3.0.4
45 | '@csstools/css-tokenizer': ^3.0.3
46 |
47 | '@csstools/css-color-parser@3.0.7':
48 | resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==}
49 | engines: {node: '>=18'}
50 | peerDependencies:
51 | '@csstools/css-parser-algorithms': ^3.0.4
52 | '@csstools/css-tokenizer': ^3.0.3
53 |
54 | '@csstools/css-parser-algorithms@3.0.4':
55 | resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
56 | engines: {node: '>=18'}
57 | peerDependencies:
58 | '@csstools/css-tokenizer': ^3.0.3
59 |
60 | '@csstools/css-tokenizer@3.0.3':
61 | resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
62 | engines: {node: '>=18'}
63 |
64 | '@esbuild/aix-ppc64@0.24.2':
65 | resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
66 | engines: {node: '>=18'}
67 | cpu: [ppc64]
68 | os: [aix]
69 |
70 | '@esbuild/android-arm64@0.24.2':
71 | resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
72 | engines: {node: '>=18'}
73 | cpu: [arm64]
74 | os: [android]
75 |
76 | '@esbuild/android-arm@0.24.2':
77 | resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
78 | engines: {node: '>=18'}
79 | cpu: [arm]
80 | os: [android]
81 |
82 | '@esbuild/android-x64@0.24.2':
83 | resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
84 | engines: {node: '>=18'}
85 | cpu: [x64]
86 | os: [android]
87 |
88 | '@esbuild/darwin-arm64@0.24.2':
89 | resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
90 | engines: {node: '>=18'}
91 | cpu: [arm64]
92 | os: [darwin]
93 |
94 | '@esbuild/darwin-x64@0.24.2':
95 | resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
96 | engines: {node: '>=18'}
97 | cpu: [x64]
98 | os: [darwin]
99 |
100 | '@esbuild/freebsd-arm64@0.24.2':
101 | resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
102 | engines: {node: '>=18'}
103 | cpu: [arm64]
104 | os: [freebsd]
105 |
106 | '@esbuild/freebsd-x64@0.24.2':
107 | resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
108 | engines: {node: '>=18'}
109 | cpu: [x64]
110 | os: [freebsd]
111 |
112 | '@esbuild/linux-arm64@0.24.2':
113 | resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
114 | engines: {node: '>=18'}
115 | cpu: [arm64]
116 | os: [linux]
117 |
118 | '@esbuild/linux-arm@0.24.2':
119 | resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
120 | engines: {node: '>=18'}
121 | cpu: [arm]
122 | os: [linux]
123 |
124 | '@esbuild/linux-ia32@0.24.2':
125 | resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
126 | engines: {node: '>=18'}
127 | cpu: [ia32]
128 | os: [linux]
129 |
130 | '@esbuild/linux-loong64@0.24.2':
131 | resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
132 | engines: {node: '>=18'}
133 | cpu: [loong64]
134 | os: [linux]
135 |
136 | '@esbuild/linux-mips64el@0.24.2':
137 | resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
138 | engines: {node: '>=18'}
139 | cpu: [mips64el]
140 | os: [linux]
141 |
142 | '@esbuild/linux-ppc64@0.24.2':
143 | resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
144 | engines: {node: '>=18'}
145 | cpu: [ppc64]
146 | os: [linux]
147 |
148 | '@esbuild/linux-riscv64@0.24.2':
149 | resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
150 | engines: {node: '>=18'}
151 | cpu: [riscv64]
152 | os: [linux]
153 |
154 | '@esbuild/linux-s390x@0.24.2':
155 | resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
156 | engines: {node: '>=18'}
157 | cpu: [s390x]
158 | os: [linux]
159 |
160 | '@esbuild/linux-x64@0.24.2':
161 | resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
162 | engines: {node: '>=18'}
163 | cpu: [x64]
164 | os: [linux]
165 |
166 | '@esbuild/netbsd-arm64@0.24.2':
167 | resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
168 | engines: {node: '>=18'}
169 | cpu: [arm64]
170 | os: [netbsd]
171 |
172 | '@esbuild/netbsd-x64@0.24.2':
173 | resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
174 | engines: {node: '>=18'}
175 | cpu: [x64]
176 | os: [netbsd]
177 |
178 | '@esbuild/openbsd-arm64@0.24.2':
179 | resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
180 | engines: {node: '>=18'}
181 | cpu: [arm64]
182 | os: [openbsd]
183 |
184 | '@esbuild/openbsd-x64@0.24.2':
185 | resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
186 | engines: {node: '>=18'}
187 | cpu: [x64]
188 | os: [openbsd]
189 |
190 | '@esbuild/sunos-x64@0.24.2':
191 | resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
192 | engines: {node: '>=18'}
193 | cpu: [x64]
194 | os: [sunos]
195 |
196 | '@esbuild/win32-arm64@0.24.2':
197 | resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
198 | engines: {node: '>=18'}
199 | cpu: [arm64]
200 | os: [win32]
201 |
202 | '@esbuild/win32-ia32@0.24.2':
203 | resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
204 | engines: {node: '>=18'}
205 | cpu: [ia32]
206 | os: [win32]
207 |
208 | '@esbuild/win32-x64@0.24.2':
209 | resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
210 | engines: {node: '>=18'}
211 | cpu: [x64]
212 | os: [win32]
213 |
214 | '@kabelsalat/core@0.3.0':
215 | resolution: {integrity: sha512-NgDgWIOtomtiAUPrri9+8Q/5a8RS1OscTaP0PR3xvN35490sdGduVeFNP9RdZx1f9aEoFoTeFr/48ObAV68mJg==}
216 |
217 | '@kabelsalat/lib@0.3.1':
218 | resolution: {integrity: sha512-WNgUX/DgzzcKvG2+88yhUG88D6OEcIqE7gVHUhnp20cuhsIOYV1WLfYMVGqgkmuHbQyJPGuf6/l9deDD0PY2ug==}
219 |
220 | '@kabelsalat/web@0.3.2':
221 | resolution: {integrity: sha512-BuVYv5re1QugaF3fSwRnuurP/nT8FecPIwBS82eZxEEBNMxDGJhcvVxh1Y2pJ+/Cr3tN27oxiDM5vkvyhrgMjQ==}
222 |
223 | '@rollup/rollup-android-arm-eabi@4.34.4':
224 | resolution: {integrity: sha512-gGi5adZWvjtJU7Axs//CWaQbQd/vGy8KGcnEaCWiyCqxWYDxwIlAHFuSe6Guoxtd0SRvSfVTDMPd5H+4KE2kKA==}
225 | cpu: [arm]
226 | os: [android]
227 |
228 | '@rollup/rollup-android-arm64@4.34.4':
229 | resolution: {integrity: sha512-1aRlh1gqtF7vNPMnlf1vJKk72Yshw5zknR/ZAVh7zycRAGF2XBMVDAHmFQz/Zws5k++nux3LOq/Ejj1WrDR6xg==}
230 | cpu: [arm64]
231 | os: [android]
232 |
233 | '@rollup/rollup-darwin-arm64@4.34.4':
234 | resolution: {integrity: sha512-drHl+4qhFj+PV/jrQ78p9ch6A0MfNVZScl/nBps5a7u01aGf/GuBRrHnRegA9bP222CBDfjYbFdjkIJ/FurvSQ==}
235 | cpu: [arm64]
236 | os: [darwin]
237 |
238 | '@rollup/rollup-darwin-x64@4.34.4':
239 | resolution: {integrity: sha512-hQqq/8QALU6t1+fbNmm6dwYsa0PDD4L5r3TpHx9dNl+aSEMnIksHZkSO3AVH+hBMvZhpumIGrTFj8XCOGuIXjw==}
240 | cpu: [x64]
241 | os: [darwin]
242 |
243 | '@rollup/rollup-freebsd-arm64@4.34.4':
244 | resolution: {integrity: sha512-/L0LixBmbefkec1JTeAQJP0ETzGjFtNml2gpQXA8rpLo7Md+iXQzo9kwEgzyat5Q+OG/C//2B9Fx52UxsOXbzw==}
245 | cpu: [arm64]
246 | os: [freebsd]
247 |
248 | '@rollup/rollup-freebsd-x64@4.34.4':
249 | resolution: {integrity: sha512-6Rk3PLRK+b8L/M6m/x6Mfj60LhAUcLJ34oPaxufA+CfqkUrDoUPQYFdRrhqyOvtOKXLJZJwxlOLbQjNYQcRQfw==}
250 | cpu: [x64]
251 | os: [freebsd]
252 |
253 | '@rollup/rollup-linux-arm-gnueabihf@4.34.4':
254 | resolution: {integrity: sha512-kmT3x0IPRuXY/tNoABp2nDvI9EvdiS2JZsd4I9yOcLCCViKsP0gB38mVHOhluzx+SSVnM1KNn9k6osyXZhLoCA==}
255 | cpu: [arm]
256 | os: [linux]
257 |
258 | '@rollup/rollup-linux-arm-musleabihf@4.34.4':
259 | resolution: {integrity: sha512-3iSA9tx+4PZcJH/Wnwsvx/BY4qHpit/u2YoZoXugWVfc36/4mRkgGEoRbRV7nzNBSCOgbWMeuQ27IQWgJ7tRzw==}
260 | cpu: [arm]
261 | os: [linux]
262 |
263 | '@rollup/rollup-linux-arm64-gnu@4.34.4':
264 | resolution: {integrity: sha512-7CwSJW+sEhM9sESEk+pEREF2JL0BmyCro8UyTq0Kyh0nu1v0QPNY3yfLPFKChzVoUmaKj8zbdgBxUhBRR+xGxg==}
265 | cpu: [arm64]
266 | os: [linux]
267 |
268 | '@rollup/rollup-linux-arm64-musl@4.34.4':
269 | resolution: {integrity: sha512-GZdafB41/4s12j8Ss2izofjeFXRAAM7sHCb+S4JsI9vaONX/zQ8cXd87B9MRU/igGAJkKvmFmJJBeeT9jJ5Cbw==}
270 | cpu: [arm64]
271 | os: [linux]
272 |
273 | '@rollup/rollup-linux-loongarch64-gnu@4.34.4':
274 | resolution: {integrity: sha512-uuphLuw1X6ur11675c2twC6YxbzyLSpWggvdawTUamlsoUv81aAXRMPBC1uvQllnBGls0Qt5Siw8reSIBnbdqQ==}
275 | cpu: [loong64]
276 | os: [linux]
277 |
278 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.4':
279 | resolution: {integrity: sha512-KvLEw1os2gSmD6k6QPCQMm2T9P2GYvsMZMRpMz78QpSoEevHbV/KOUbI/46/JRalhtSAYZBYLAnT9YE4i/l4vg==}
280 | cpu: [ppc64]
281 | os: [linux]
282 |
283 | '@rollup/rollup-linux-riscv64-gnu@4.34.4':
284 | resolution: {integrity: sha512-wcpCLHGM9yv+3Dql/CI4zrY2mpQ4WFergD3c9cpRowltEh5I84pRT/EuHZsG0In4eBPPYthXnuR++HrFkeqwkA==}
285 | cpu: [riscv64]
286 | os: [linux]
287 |
288 | '@rollup/rollup-linux-s390x-gnu@4.34.4':
289 | resolution: {integrity: sha512-nLbfQp2lbJYU8obhRQusXKbuiqm4jSJteLwfjnunDT5ugBKdxqw1X9KWwk8xp1OMC6P5d0WbzxzhWoznuVK6XA==}
290 | cpu: [s390x]
291 | os: [linux]
292 |
293 | '@rollup/rollup-linux-x64-gnu@4.34.4':
294 | resolution: {integrity: sha512-JGejzEfVzqc/XNiCKZj14eb6s5w8DdWlnQ5tWUbs99kkdvfq9btxxVX97AaxiUX7xJTKFA0LwoS0KU8C2faZRg==}
295 | cpu: [x64]
296 | os: [linux]
297 |
298 | '@rollup/rollup-linux-x64-musl@4.34.4':
299 | resolution: {integrity: sha512-/iFIbhzeyZZy49ozAWJ1ZR2KW6ZdYUbQXLT4O5n1cRZRoTpwExnHLjlurDXXPKEGxiAg0ujaR9JDYKljpr2fDg==}
300 | cpu: [x64]
301 | os: [linux]
302 |
303 | '@rollup/rollup-win32-arm64-msvc@4.34.4':
304 | resolution: {integrity: sha512-qORc3UzoD5UUTneiP2Afg5n5Ti1GAW9Gp5vHPxzvAFFA3FBaum9WqGvYXGf+c7beFdOKNos31/41PRMUwh1tpA==}
305 | cpu: [arm64]
306 | os: [win32]
307 |
308 | '@rollup/rollup-win32-ia32-msvc@4.34.4':
309 | resolution: {integrity: sha512-5g7E2PHNK2uvoD5bASBD9aelm44nf1w4I5FEI7MPHLWcCSrR8JragXZWgKPXk5i2FU3JFfa6CGZLw2RrGBHs2Q==}
310 | cpu: [ia32]
311 | os: [win32]
312 |
313 | '@rollup/rollup-win32-x64-msvc@4.34.4':
314 | resolution: {integrity: sha512-p0scwGkR4kZ242xLPBuhSckrJ734frz6v9xZzD+kHVYRAkSUmdSLCIJRfql6H5//aF8Q10K+i7q8DiPfZp0b7A==}
315 | cpu: [x64]
316 | os: [win32]
317 |
318 | '@types/estree@1.0.6':
319 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
320 |
321 | agent-base@7.1.3:
322 | resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
323 | engines: {node: '>= 14'}
324 |
325 | asynckit@0.4.0:
326 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
327 |
328 | blockly@11.2.1:
329 | resolution: {integrity: sha512-20sCwSwX2Z6UxR/er0B5y6wRFukuIdvOjc7jMuIwyCO/yT35+UbAqYueMga3JFA9NoWPwQc+3s6/XnLkyceAww==}
330 | engines: {node: '>=18'}
331 |
332 | combined-stream@1.0.8:
333 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
334 | engines: {node: '>= 0.8'}
335 |
336 | cssstyle@4.2.1:
337 | resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==}
338 | engines: {node: '>=18'}
339 |
340 | data-urls@5.0.0:
341 | resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
342 | engines: {node: '>=18'}
343 |
344 | debug@4.4.0:
345 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
346 | engines: {node: '>=6.0'}
347 | peerDependencies:
348 | supports-color: '*'
349 | peerDependenciesMeta:
350 | supports-color:
351 | optional: true
352 |
353 | decimal.js@10.5.0:
354 | resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
355 |
356 | delayed-stream@1.0.0:
357 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
358 | engines: {node: '>=0.4.0'}
359 |
360 | entities@4.5.0:
361 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
362 | engines: {node: '>=0.12'}
363 |
364 | esbuild@0.24.2:
365 | resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
366 | engines: {node: '>=18'}
367 | hasBin: true
368 |
369 | form-data@4.0.1:
370 | resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
371 | engines: {node: '>= 6'}
372 |
373 | fsevents@2.3.3:
374 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
375 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
376 | os: [darwin]
377 |
378 | html-encoding-sniffer@4.0.0:
379 | resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
380 | engines: {node: '>=18'}
381 |
382 | http-proxy-agent@7.0.2:
383 | resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
384 | engines: {node: '>= 14'}
385 |
386 | https-proxy-agent@7.0.6:
387 | resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
388 | engines: {node: '>= 14'}
389 |
390 | iconv-lite@0.6.3:
391 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
392 | engines: {node: '>=0.10.0'}
393 |
394 | is-potential-custom-element-name@1.0.1:
395 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
396 |
397 | jsdom@25.0.1:
398 | resolution: {integrity: sha512-8i7LzZj7BF8uplX+ZyOlIz86V6TAsSs+np6m1kpW9u0JWi4z/1t+FzcK1aek+ybTnAC4KhBL4uXCNT0wcUIeCw==}
399 | engines: {node: '>=18'}
400 | peerDependencies:
401 | canvas: ^2.11.2
402 | peerDependenciesMeta:
403 | canvas:
404 | optional: true
405 |
406 | lru-cache@10.4.3:
407 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
408 |
409 | mime-db@1.52.0:
410 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
411 | engines: {node: '>= 0.6'}
412 |
413 | mime-types@2.1.35:
414 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
415 | engines: {node: '>= 0.6'}
416 |
417 | ms@2.1.3:
418 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
419 |
420 | nanoid@3.3.8:
421 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
422 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
423 | hasBin: true
424 |
425 | nwsapi@2.2.16:
426 | resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==}
427 |
428 | parse5@7.2.1:
429 | resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==}
430 |
431 | picocolors@1.1.1:
432 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
433 |
434 | postcss@8.5.1:
435 | resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
436 | engines: {node: ^10 || ^12 || >=14}
437 |
438 | punycode@2.3.1:
439 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
440 | engines: {node: '>=6'}
441 |
442 | rollup@4.34.4:
443 | resolution: {integrity: sha512-spF66xoyD7rz3o08sHP7wogp1gZ6itSq22SGa/IZTcUDXDlOyrShwMwkVSB+BUxFRZZCUYqdb3KWDEOMVQZxuw==}
444 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
445 | hasBin: true
446 |
447 | rrweb-cssom@0.7.1:
448 | resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
449 |
450 | rrweb-cssom@0.8.0:
451 | resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
452 |
453 | safer-buffer@2.1.2:
454 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
455 |
456 | saxes@6.0.0:
457 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
458 | engines: {node: '>=v12.22.7'}
459 |
460 | source-map-js@1.2.1:
461 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
462 | engines: {node: '>=0.10.0'}
463 |
464 | symbol-tree@3.2.4:
465 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
466 |
467 | tldts-core@6.1.76:
468 | resolution: {integrity: sha512-uzhJ02RaMzgQR3yPoeE65DrcHI6LoM4saUqXOt/b5hmb3+mc4YWpdSeAQqVqRUlQ14q8ZuLRWyBR1ictK1dzzg==}
469 |
470 | tldts@6.1.76:
471 | resolution: {integrity: sha512-6U2ti64/nppsDxQs9hw8ephA3nO6nSQvVVfxwRw8wLQPFtLI1cFI1a1eP22g+LUP+1TA2pKKjUTwWB+K2coqmQ==}
472 | hasBin: true
473 |
474 | tough-cookie@5.1.0:
475 | resolution: {integrity: sha512-rvZUv+7MoBYTiDmFPBrhL7Ujx9Sk+q9wwm22x8c8T5IJaR+Wsyc7TNxbVxo84kZoRJZZMazowFLqpankBEQrGg==}
476 | engines: {node: '>=16'}
477 |
478 | tr46@5.0.0:
479 | resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==}
480 | engines: {node: '>=18'}
481 |
482 | vite@6.1.0:
483 | resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==}
484 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
485 | hasBin: true
486 | peerDependencies:
487 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
488 | jiti: '>=1.21.0'
489 | less: '*'
490 | lightningcss: ^1.21.0
491 | sass: '*'
492 | sass-embedded: '*'
493 | stylus: '*'
494 | sugarss: '*'
495 | terser: ^5.16.0
496 | tsx: ^4.8.1
497 | yaml: ^2.4.2
498 | peerDependenciesMeta:
499 | '@types/node':
500 | optional: true
501 | jiti:
502 | optional: true
503 | less:
504 | optional: true
505 | lightningcss:
506 | optional: true
507 | sass:
508 | optional: true
509 | sass-embedded:
510 | optional: true
511 | stylus:
512 | optional: true
513 | sugarss:
514 | optional: true
515 | terser:
516 | optional: true
517 | tsx:
518 | optional: true
519 | yaml:
520 | optional: true
521 |
522 | w3c-xmlserializer@5.0.0:
523 | resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
524 | engines: {node: '>=18'}
525 |
526 | webidl-conversions@7.0.0:
527 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
528 | engines: {node: '>=12'}
529 |
530 | whatwg-encoding@3.1.1:
531 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
532 | engines: {node: '>=18'}
533 |
534 | whatwg-mimetype@4.0.0:
535 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
536 | engines: {node: '>=18'}
537 |
538 | whatwg-url@14.1.0:
539 | resolution: {integrity: sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==}
540 | engines: {node: '>=18'}
541 |
542 | ws@8.18.0:
543 | resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
544 | engines: {node: '>=10.0.0'}
545 | peerDependencies:
546 | bufferutil: ^4.0.1
547 | utf-8-validate: '>=5.0.2'
548 | peerDependenciesMeta:
549 | bufferutil:
550 | optional: true
551 | utf-8-validate:
552 | optional: true
553 |
554 | xml-name-validator@5.0.0:
555 | resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
556 | engines: {node: '>=18'}
557 |
558 | xmlchars@2.2.0:
559 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
560 |
561 | snapshots:
562 |
563 | '@asamuzakjp/css-color@2.8.3':
564 | dependencies:
565 | '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
566 | '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
567 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
568 | '@csstools/css-tokenizer': 3.0.3
569 | lru-cache: 10.4.3
570 |
571 | '@blockly/theme-dark@7.0.10(blockly@11.2.1)':
572 | dependencies:
573 | blockly: 11.2.1
574 |
575 | '@csstools/color-helpers@5.0.1': {}
576 |
577 | '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
578 | dependencies:
579 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
580 | '@csstools/css-tokenizer': 3.0.3
581 |
582 | '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
583 | dependencies:
584 | '@csstools/color-helpers': 5.0.1
585 | '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
586 | '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
587 | '@csstools/css-tokenizer': 3.0.3
588 |
589 | '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
590 | dependencies:
591 | '@csstools/css-tokenizer': 3.0.3
592 |
593 | '@csstools/css-tokenizer@3.0.3': {}
594 |
595 | '@esbuild/aix-ppc64@0.24.2':
596 | optional: true
597 |
598 | '@esbuild/android-arm64@0.24.2':
599 | optional: true
600 |
601 | '@esbuild/android-arm@0.24.2':
602 | optional: true
603 |
604 | '@esbuild/android-x64@0.24.2':
605 | optional: true
606 |
607 | '@esbuild/darwin-arm64@0.24.2':
608 | optional: true
609 |
610 | '@esbuild/darwin-x64@0.24.2':
611 | optional: true
612 |
613 | '@esbuild/freebsd-arm64@0.24.2':
614 | optional: true
615 |
616 | '@esbuild/freebsd-x64@0.24.2':
617 | optional: true
618 |
619 | '@esbuild/linux-arm64@0.24.2':
620 | optional: true
621 |
622 | '@esbuild/linux-arm@0.24.2':
623 | optional: true
624 |
625 | '@esbuild/linux-ia32@0.24.2':
626 | optional: true
627 |
628 | '@esbuild/linux-loong64@0.24.2':
629 | optional: true
630 |
631 | '@esbuild/linux-mips64el@0.24.2':
632 | optional: true
633 |
634 | '@esbuild/linux-ppc64@0.24.2':
635 | optional: true
636 |
637 | '@esbuild/linux-riscv64@0.24.2':
638 | optional: true
639 |
640 | '@esbuild/linux-s390x@0.24.2':
641 | optional: true
642 |
643 | '@esbuild/linux-x64@0.24.2':
644 | optional: true
645 |
646 | '@esbuild/netbsd-arm64@0.24.2':
647 | optional: true
648 |
649 | '@esbuild/netbsd-x64@0.24.2':
650 | optional: true
651 |
652 | '@esbuild/openbsd-arm64@0.24.2':
653 | optional: true
654 |
655 | '@esbuild/openbsd-x64@0.24.2':
656 | optional: true
657 |
658 | '@esbuild/sunos-x64@0.24.2':
659 | optional: true
660 |
661 | '@esbuild/win32-arm64@0.24.2':
662 | optional: true
663 |
664 | '@esbuild/win32-ia32@0.24.2':
665 | optional: true
666 |
667 | '@esbuild/win32-x64@0.24.2':
668 | optional: true
669 |
670 | '@kabelsalat/core@0.3.0': {}
671 |
672 | '@kabelsalat/lib@0.3.1':
673 | dependencies:
674 | '@kabelsalat/core': 0.3.0
675 |
676 | '@kabelsalat/web@0.3.2':
677 | dependencies:
678 | '@kabelsalat/core': 0.3.0
679 | '@kabelsalat/lib': 0.3.1
680 |
681 | '@rollup/rollup-android-arm-eabi@4.34.4':
682 | optional: true
683 |
684 | '@rollup/rollup-android-arm64@4.34.4':
685 | optional: true
686 |
687 | '@rollup/rollup-darwin-arm64@4.34.4':
688 | optional: true
689 |
690 | '@rollup/rollup-darwin-x64@4.34.4':
691 | optional: true
692 |
693 | '@rollup/rollup-freebsd-arm64@4.34.4':
694 | optional: true
695 |
696 | '@rollup/rollup-freebsd-x64@4.34.4':
697 | optional: true
698 |
699 | '@rollup/rollup-linux-arm-gnueabihf@4.34.4':
700 | optional: true
701 |
702 | '@rollup/rollup-linux-arm-musleabihf@4.34.4':
703 | optional: true
704 |
705 | '@rollup/rollup-linux-arm64-gnu@4.34.4':
706 | optional: true
707 |
708 | '@rollup/rollup-linux-arm64-musl@4.34.4':
709 | optional: true
710 |
711 | '@rollup/rollup-linux-loongarch64-gnu@4.34.4':
712 | optional: true
713 |
714 | '@rollup/rollup-linux-powerpc64le-gnu@4.34.4':
715 | optional: true
716 |
717 | '@rollup/rollup-linux-riscv64-gnu@4.34.4':
718 | optional: true
719 |
720 | '@rollup/rollup-linux-s390x-gnu@4.34.4':
721 | optional: true
722 |
723 | '@rollup/rollup-linux-x64-gnu@4.34.4':
724 | optional: true
725 |
726 | '@rollup/rollup-linux-x64-musl@4.34.4':
727 | optional: true
728 |
729 | '@rollup/rollup-win32-arm64-msvc@4.34.4':
730 | optional: true
731 |
732 | '@rollup/rollup-win32-ia32-msvc@4.34.4':
733 | optional: true
734 |
735 | '@rollup/rollup-win32-x64-msvc@4.34.4':
736 | optional: true
737 |
738 | '@types/estree@1.0.6': {}
739 |
740 | agent-base@7.1.3: {}
741 |
742 | asynckit@0.4.0: {}
743 |
744 | blockly@11.2.1:
745 | dependencies:
746 | jsdom: 25.0.1
747 | transitivePeerDependencies:
748 | - bufferutil
749 | - canvas
750 | - supports-color
751 | - utf-8-validate
752 |
753 | combined-stream@1.0.8:
754 | dependencies:
755 | delayed-stream: 1.0.0
756 |
757 | cssstyle@4.2.1:
758 | dependencies:
759 | '@asamuzakjp/css-color': 2.8.3
760 | rrweb-cssom: 0.8.0
761 |
762 | data-urls@5.0.0:
763 | dependencies:
764 | whatwg-mimetype: 4.0.0
765 | whatwg-url: 14.1.0
766 |
767 | debug@4.4.0:
768 | dependencies:
769 | ms: 2.1.3
770 |
771 | decimal.js@10.5.0: {}
772 |
773 | delayed-stream@1.0.0: {}
774 |
775 | entities@4.5.0: {}
776 |
777 | esbuild@0.24.2:
778 | optionalDependencies:
779 | '@esbuild/aix-ppc64': 0.24.2
780 | '@esbuild/android-arm': 0.24.2
781 | '@esbuild/android-arm64': 0.24.2
782 | '@esbuild/android-x64': 0.24.2
783 | '@esbuild/darwin-arm64': 0.24.2
784 | '@esbuild/darwin-x64': 0.24.2
785 | '@esbuild/freebsd-arm64': 0.24.2
786 | '@esbuild/freebsd-x64': 0.24.2
787 | '@esbuild/linux-arm': 0.24.2
788 | '@esbuild/linux-arm64': 0.24.2
789 | '@esbuild/linux-ia32': 0.24.2
790 | '@esbuild/linux-loong64': 0.24.2
791 | '@esbuild/linux-mips64el': 0.24.2
792 | '@esbuild/linux-ppc64': 0.24.2
793 | '@esbuild/linux-riscv64': 0.24.2
794 | '@esbuild/linux-s390x': 0.24.2
795 | '@esbuild/linux-x64': 0.24.2
796 | '@esbuild/netbsd-arm64': 0.24.2
797 | '@esbuild/netbsd-x64': 0.24.2
798 | '@esbuild/openbsd-arm64': 0.24.2
799 | '@esbuild/openbsd-x64': 0.24.2
800 | '@esbuild/sunos-x64': 0.24.2
801 | '@esbuild/win32-arm64': 0.24.2
802 | '@esbuild/win32-ia32': 0.24.2
803 | '@esbuild/win32-x64': 0.24.2
804 |
805 | form-data@4.0.1:
806 | dependencies:
807 | asynckit: 0.4.0
808 | combined-stream: 1.0.8
809 | mime-types: 2.1.35
810 |
811 | fsevents@2.3.3:
812 | optional: true
813 |
814 | html-encoding-sniffer@4.0.0:
815 | dependencies:
816 | whatwg-encoding: 3.1.1
817 |
818 | http-proxy-agent@7.0.2:
819 | dependencies:
820 | agent-base: 7.1.3
821 | debug: 4.4.0
822 | transitivePeerDependencies:
823 | - supports-color
824 |
825 | https-proxy-agent@7.0.6:
826 | dependencies:
827 | agent-base: 7.1.3
828 | debug: 4.4.0
829 | transitivePeerDependencies:
830 | - supports-color
831 |
832 | iconv-lite@0.6.3:
833 | dependencies:
834 | safer-buffer: 2.1.2
835 |
836 | is-potential-custom-element-name@1.0.1: {}
837 |
838 | jsdom@25.0.1:
839 | dependencies:
840 | cssstyle: 4.2.1
841 | data-urls: 5.0.0
842 | decimal.js: 10.5.0
843 | form-data: 4.0.1
844 | html-encoding-sniffer: 4.0.0
845 | http-proxy-agent: 7.0.2
846 | https-proxy-agent: 7.0.6
847 | is-potential-custom-element-name: 1.0.1
848 | nwsapi: 2.2.16
849 | parse5: 7.2.1
850 | rrweb-cssom: 0.7.1
851 | saxes: 6.0.0
852 | symbol-tree: 3.2.4
853 | tough-cookie: 5.1.0
854 | w3c-xmlserializer: 5.0.0
855 | webidl-conversions: 7.0.0
856 | whatwg-encoding: 3.1.1
857 | whatwg-mimetype: 4.0.0
858 | whatwg-url: 14.1.0
859 | ws: 8.18.0
860 | xml-name-validator: 5.0.0
861 | transitivePeerDependencies:
862 | - bufferutil
863 | - supports-color
864 | - utf-8-validate
865 |
866 | lru-cache@10.4.3: {}
867 |
868 | mime-db@1.52.0: {}
869 |
870 | mime-types@2.1.35:
871 | dependencies:
872 | mime-db: 1.52.0
873 |
874 | ms@2.1.3: {}
875 |
876 | nanoid@3.3.8: {}
877 |
878 | nwsapi@2.2.16: {}
879 |
880 | parse5@7.2.1:
881 | dependencies:
882 | entities: 4.5.0
883 |
884 | picocolors@1.1.1: {}
885 |
886 | postcss@8.5.1:
887 | dependencies:
888 | nanoid: 3.3.8
889 | picocolors: 1.1.1
890 | source-map-js: 1.2.1
891 |
892 | punycode@2.3.1: {}
893 |
894 | rollup@4.34.4:
895 | dependencies:
896 | '@types/estree': 1.0.6
897 | optionalDependencies:
898 | '@rollup/rollup-android-arm-eabi': 4.34.4
899 | '@rollup/rollup-android-arm64': 4.34.4
900 | '@rollup/rollup-darwin-arm64': 4.34.4
901 | '@rollup/rollup-darwin-x64': 4.34.4
902 | '@rollup/rollup-freebsd-arm64': 4.34.4
903 | '@rollup/rollup-freebsd-x64': 4.34.4
904 | '@rollup/rollup-linux-arm-gnueabihf': 4.34.4
905 | '@rollup/rollup-linux-arm-musleabihf': 4.34.4
906 | '@rollup/rollup-linux-arm64-gnu': 4.34.4
907 | '@rollup/rollup-linux-arm64-musl': 4.34.4
908 | '@rollup/rollup-linux-loongarch64-gnu': 4.34.4
909 | '@rollup/rollup-linux-powerpc64le-gnu': 4.34.4
910 | '@rollup/rollup-linux-riscv64-gnu': 4.34.4
911 | '@rollup/rollup-linux-s390x-gnu': 4.34.4
912 | '@rollup/rollup-linux-x64-gnu': 4.34.4
913 | '@rollup/rollup-linux-x64-musl': 4.34.4
914 | '@rollup/rollup-win32-arm64-msvc': 4.34.4
915 | '@rollup/rollup-win32-ia32-msvc': 4.34.4
916 | '@rollup/rollup-win32-x64-msvc': 4.34.4
917 | fsevents: 2.3.3
918 |
919 | rrweb-cssom@0.7.1: {}
920 |
921 | rrweb-cssom@0.8.0: {}
922 |
923 | safer-buffer@2.1.2: {}
924 |
925 | saxes@6.0.0:
926 | dependencies:
927 | xmlchars: 2.2.0
928 |
929 | source-map-js@1.2.1: {}
930 |
931 | symbol-tree@3.2.4: {}
932 |
933 | tldts-core@6.1.76: {}
934 |
935 | tldts@6.1.76:
936 | dependencies:
937 | tldts-core: 6.1.76
938 |
939 | tough-cookie@5.1.0:
940 | dependencies:
941 | tldts: 6.1.76
942 |
943 | tr46@5.0.0:
944 | dependencies:
945 | punycode: 2.3.1
946 |
947 | vite@6.1.0:
948 | dependencies:
949 | esbuild: 0.24.2
950 | postcss: 8.5.1
951 | rollup: 4.34.4
952 | optionalDependencies:
953 | fsevents: 2.3.3
954 |
955 | w3c-xmlserializer@5.0.0:
956 | dependencies:
957 | xml-name-validator: 5.0.0
958 |
959 | webidl-conversions@7.0.0: {}
960 |
961 | whatwg-encoding@3.1.1:
962 | dependencies:
963 | iconv-lite: 0.6.3
964 |
965 | whatwg-mimetype@4.0.0: {}
966 |
967 | whatwg-url@14.1.0:
968 | dependencies:
969 | tr46: 5.0.0
970 | webidl-conversions: 7.0.0
971 |
972 | ws@8.18.0: {}
973 |
974 | xml-name-validator@5.0.0: {}
975 |
976 | xmlchars@2.2.0: {}
977 |
--------------------------------------------------------------------------------
/public/CNAME:
--------------------------------------------------------------------------------
1 | block.salat.dev
--------------------------------------------------------------------------------
/public/assets/recorder-BokptUnY.js:
--------------------------------------------------------------------------------
1 | (function(){"use strict";class n extends AudioWorkletProcessor{static get parameterDescriptors(){return[{name:"isRecording",defaultValue:0}]}constructor(){super(),this._bufferSize=2048,this._buffer=new Float32Array(this._bufferSize),this._initBuffer()}_initBuffer(){this._bytesWritten=0}_isBufferEmpty(){return this._bytesWritten===0}_isBufferFull(){return this._bytesWritten===this._bufferSize}_appendToBuffer(e){this._isBufferFull()&&this._flush(),this._buffer[this._bytesWritten]=e,this._bytesWritten+=1}_flush(){let e=this._buffer;this._bytesWritten=1?s:t+n*(s-t)}function O(n,t,s){return n<=t?0:n>=s?1:s===t?0:(n-t)/(s-t)}function M(n,t){return n1-t?(n=(n-1)/t,n*n+n+n+1):0}function v(n,t){t=Math.min(Math.max(t,0),1),t-=.01;var s=2*t/(1-t),e=(1+s)*n/(1+s*Math.abs(n));return e}function p(n,t,s){return n>=1?s:t+n*(s-t)}function C(){this.state="off",this.startTime=0,this.startVal=0}C.prototype.eval=function(n,t,s,e,i,r){switch(this.state){case"off":return t>0&&(this.state="attack",this.startTime=n,this.startVal=0),0;case"attack":{let h=n-this.startTime;return h>s?(this.state="decay",this.startTime=n,1):p(h/s,this.startVal,1)}case"decay":{let h=n-this.startTime,a=p(h/e,1,i);return t<=0?(this.state="release",this.startTime=n,this.startVal=a,a):h>e?(this.state="sustain",this.startTime=n,i):a}case"sustain":return t<=0&&(this.state="release",this.startTime=n,this.startVal=i),i;case"release":{let h=n-this.startTime;if(h>r)return this.state="off",0;let a=p(h/r,this.startVal,0);return t>0&&(this.state="attack",this.startTime=n,this.startVal=a),a}}throw"invalid envelope state"};function f(){this.s0=0,this.s1=0}f.prototype.apply=function(n,t,s){c(!isNaN(n),"NaN value fed in TwoPoleFilter"),t=Math.min(t,1),s=Math.max(s,0);var e=Math.pow(.5,(1-t)/.125),i=Math.pow(.5,(s+.125)/.125),r=1-i*e,h=this.s0,a=this.s1;return h=r*h-e*a+e*n,a=r*a+e*h,n=a,this.s0=h,this.s1=a,n};let P=class y{constructor(t,s){this.sampleRate=t,s?this.buffer=s.slice(0):(this.buffer=new Float32Array(10*t),this.buffer.fill(0)),this.writeIdx=0,this.readIdx=0}reset(){this.buffer.fill(0),this.writeIdx=0,this.readIdx=0}clone(){const t=new y(this.sampleRate,this.buffer);return t.writeIdx=this.writeIdx,t.readIdx=this.readIdx,t}write(t,s){this.writeIdx=(this.writeIdx+1)%this.buffer.length,this.buffer[this.writeIdx]=t;let e=Math.min(Math.floor(this.sampleRate*s),this.buffer.length-1);this.readIdx=this.writeIdx-e,this.readIdx<0&&(this.readIdx+=this.buffer.length)}read(){return this.buffer[this.readIdx]}};const g=1/44100,m=24,x=m/4;class u{constructor(t,s,e,i){this.nodeId=t,this.state=s,this.sampleRate=e,this.sampleTime=1/e,this.send=i}setState(t){this.state=t}}class T extends u{constructor(t,s,e,i){super(t,s,e,i),this.env=new C}update(t,s,e,i,r,h){return this.env.eval(t,s,e,i,r,h)}}class I extends u{constructor(t,s,e,i){super(t,s,e,i),this.phase=0}update(t){let s=m*t/60,e=.5;return this.phase+=this.sampleTime*s,this.phase%10;return this.inSgn!=e&&(this.clockCnt++,this.clockCnt>=s&&(this.clockCnt=0,this.outSgn=!this.outSgn)),this.inSgn=e,this.outSgn?1:-1}}class E extends u{constructor(t,s,e,i){super(t,s,e,i),this.inSgn=!1}update(t,s){let e=s>0;return e&&this.inSgn!=e&&this.send({type:"CLOCK_PULSE",nodeId:this.nodeId,time:t}),this.inSgn=e,0}}const S=new Map;class N extends u{constructor(t,s,e,i){super(t,s,e,i);const r=s.inputs[2];r&&S.has(r)?this.delay=S.get(r).clone():this.delay=new P(e),r&&S.set(r,this.delay)}update(t,s){return this.delay.write(t,s),this.delay.read()}}class q extends u{constructor(t,s,e,i){super(t,s,e,i)}update(t,s){return v(t,s)}}class L extends u{constructor(t,s,e,i){super(t,s,e,i),this.value=0,this.trigSgn=!1}write(t,s){!this.trigSgn&&s>0&&(this.value=t),this.trigSgn=s>0}read(){return this.value}update(t,s){return this.write(t,s),this.read()}}class D{constructor(){this.value=0}update(t){return this.value=t,this.value}}class _{update(){return Math.random()*2-1}}class A{update(t){return Math.random()=1?1:0;return this.phase=this.phase%1,s}}class U extends u{constructor(t,s,e,i){super(t,s,e,i),this.phase=0}update(t,s){return this.phase+=this.sampleTime*t,this.phase%11&&(this.phase-=1),i}}class $ extends u{constructor(t,s,e,i){super(t,s,e,i),this.phase=0,this.syncSgn=!1}update(t,s,e){!this.syncSgn&&s>0&&(this.phase=0),this.syncSgn=s>0;let i=(this.phase+e)%1;return this.phase+=this.sampleTime*t,Math.sin(i*2*Math.PI)}}class K{dBToLinear(t){return Math.pow(10,t/20)}linearToDB(t){return 20*Math.log10(t)}update(t,s,e){let i=this.linearToDB(Math.abs(t)),r=0;return i>s&&(r=(i-s)*(1-1/e)),this.dBToLinear(-r)}}class H extends u{constructor(t,s,e,i){super(t,s,e,i),this.phase=0}update(t){this.phase+=this.sampleTime*t;let s=this.phase%1;return(s<.5?2*s:1-2*(s-.5))*2-1}}class W{constructor(){this.lagUnit=4410,this.s=0}update(t,s){return s=s*this.lagUnit,s<1&&(s=1),this.s+=1/s*(t-this.s),this.s}}class j{constructor(){this.last=0}update(t,s,e){const i=s*g,r=e*g;let h=t-this.last;return h>i?h=i:h<-r&&(h=-r),this.last+=h,this.last}}class Q extends u{constructor(t,s,e,i){super(t,s,e,i),this.s=0}update(t,s){return s=s*1e3,s<1&&(s=1),this.s+=1/s*(t-this.s),this.s}}class X extends u{constructor(t,s,e,i){super(t,s,e,i),this.filter=new f}update(t,s,e){return this.filter.apply(t,s,e),this.filter.s1}}class Y extends u{constructor(t,s,e,i){super(t,s,e,i),this.filter=new f}update(t,s,e){return this.filter.apply(t,s,e),this.filter.s0}}class Z extends u{constructor(t,s,e,i){super(t,s,e,i)}update(t,s){return s<0&&(s=0),s=s+1,t=t*s,4*(Math.abs(.25*t+.25-Math.round(.25*t+.25))-.25)}}class z extends u{update(t){return t}}class w extends u{constructor(t,s,e,i){super(t,s,e,i),this.note=0,this.freq=0,this.gateState="off",this.type="midiin",this.channel=-1}isFree(){return this.gateState==="off"}noteOn(t,s){s>0?(this.note=t,this.freq=2**((t-69)/12)*440,this.gateState="pretrig"):this.noteOff()}noteOff(){this.note=0,this.gateState="off"}getGate(){switch(this.gateState){case"pretrig":return this.gateState="on",0;case"on":return 1;case"off":return 0;default:c(!1)}}getFreq(){switch(this.gateState){case"pretrig":return this.gateState="on",0;case"on":return this.freq;case"off":return this.freq;default:c(!1)}}}class J extends w{constructor(t,s,e,i){super(t,s,e,i),this.type="midigate"}update(t){return this.channel=t,this.getGate()}}class tt extends w{constructor(t,s,e,i){super(t,s,e,i),this.type="midifreq"}update(t){return this.channel=t,this.getFreq()}}class st{constructor(t,s,e,i){this.up=!1,this.send=i,this.value=0,this.type="cc"}setValue(t){this.value=t}update(t,s,e){return this.id=s,!this.up&&t>0?(this.up=!0,this.send({type:"SIGNAL_TRIGGER",id:s,time:e}),this.value):(this.up=t>0,this.value)}}class et extends u{constructor(t,s,e,i){super(t,s,e,i),this.type="cc",this.value=s.inputs[1]??0}setValue(t){this.value=t}update(t){return this.id=t,this.value}}class it extends u{constructor(t,s,e,i){super(t,s,e,i),this.type="midicc",this.value=-1,this.channel=-1,this.ccnumber=-1}setValue(t){this.value=t}update(t,s){return this.ccnumber=t,this.channel=s,this.value}}class nt extends u{constructor(t,s,e,i){super(t,s,e,i),this.clockSgn=!0,this.step=0,this.first=!0}update(t,...s){return!this.clockSgn&&t>0?(this.step=(this.step+1)%s.length,this.clockSgn=t>0,0):(this.clockSgn=t>0,s[this.step])}}class rt extends u{update(t,...s){return s[Math.floor(t)%s.length]}}class ht{update(t,s,e,i,r){let h=O(t,s,e);return d(h,i,r)}}class at{update(t,s,e){return Math.min(Math.max(t,s),e)}}class ut{constructor(){this.hi=!1}update(t){return!this.hi&&t>0?(this.hi=!0,1):(this.hi&&t<=0&&(this.hi=!1),0)}}var lt=Object.freeze({__proto__:null,ADSRNode:T,AudioIn:z,AudioNode:u,BPF:Y,BrownNoiseOsc:F,CC:et,CLOCK_PPQ:m,CLOCK_PPS:x,Clip:at,Clock:I,ClockDiv:k,ClockOut:E,Delay:N,Distort:q,DustOsc:A,Filter:X,Fold:Z,Hold:L,ImpulseOsc:R,Lag:W,MidiCC:it,MidiFreq:tt,MidiGate:J,MidiIn:w,NoiseOsc:_,Output:D,Pick:rt,PinkNoise:G,PulseOsc:U,Remap:ht,SawOsc:B,Sequence:nt,SidechainCompressor:K,Signal:st,SineOsc:$,Slew:j,Slide:Q,TriOsc:H,Trig:ut,ZawOsc:V});const b=new Map(Object.entries(lt));class ot{constructor(t,s){c(t==44100),this.sampleRate=t,this.playPos=0,this.send=s,this.units=[],this.fadeTime=.1,this.q=[]}fadeOutLastUnit(){this.units.length&&this.units[this.units.length-1].fadeOut(this.playPos,this.fadeTime)}stop(){this.fadeOutLastUnit(),this.send({type:"STOP",fadeTime:this.fadeTime})}newUnit(t){const s=new ct(t,this.sampleRate,this.send);this.fadeOutLastUnit(),s.fadeIn(this.playPos,this.fadeTime),this.units=this.units.filter(e=>e.getLevel(this.playPos)>0),this.units.push(s),console.log(`${t.ugens.length} ugens spawned, ${this.units.length} units alive`)}parseMsg(t){switch(t.type){case"NEW_UNIT":this.newUnit(t.unit);break;case"NOTE_ON":this.noteOn(t);break;case"CC":this.midiCC(t);break;case"SET_CONTROL":this.setControl(t);break;case"FADE_TIME":this.fadeTime=Number(t.fadeTime);break;case"STOP":this.stop();break;case"SET_UGEN":this.addUgen(t.className,t.ugen);break;case"SCHEDULE_MSG":this.scheduleMessage(t);break;case"BATCH_MSG":t.messages.forEach(s=>this.parseMsg(s));break;default:throw new TypeError(`unknown message type ${t.type}`)}}noteOn(t){this.units.forEach(s=>s.noteOn(t))}midiCC(t){this.units.forEach(s=>s.midiCC(t))}setControl(t){this.units.forEach(s=>s.setControl(t))}scheduleMessage(t){if(t.time=this.playPos+t.time,!this.q.length){this.q.push(t);return}let s=0;for(;s0&&this.q[0].time<=this.playPos;)this.parseMsg(this.q[0].msg),this.q.shift();if(!this.units.length)return[0,0];const s=[0,0];for(let e=0;ea.type==="midifreq"&&(a.channel===-1||a.channel===s)),h=this.nodes.filter(a=>a.type==="midigate"&&(a.channel===-1||a.channel===s));if(i>0){let a=r.find(o=>o.isFree())||r[0],l=h.find(o=>o.isFree())||h[0];a?.noteOn(e,i),l?.noteOn(e,i)}else r.find(a=>a.note===e)?.noteOff(),h.find(a=>a.note===e)?.noteOff()}midiCC(t){const{channel:s,cc:e,value:i}=t;this.nodes.forEach(r=>{r.type==="midicc"&&(r.channel===-1||r.channel===s)&&r.ccnumber===e&&r.setValue(i)})}setControl(t){const{value:s,id:e}=t,i=this.nodes.find(r=>r.type==="cc"&&r.id===e);i&&i.setValue(s)}fadeIn(t,s){const e=t,i=t+s;this.getLevel=r=>d((r-e)/(i-e),0,.3)}fadeOut(t,s){const e=t,i=t+s,r=this.getLevel(t);this.getLevel=h=>d((h-e)/(i-e),r,0)}}class dt extends AudioWorkletProcessor{constructor(){super(),this.port.onmessage=this.onmessage.bind(this),this.audioGraph=new ot(44100,this.port.postMessage.bind(this.port))}onmessage(t){let s=t.data;this.audioGraph.parseMsg(s)}process(t,s,e){const i=s[0],r=t[0][0],h=i[0],a=i[1];for(let l=0;l div {
129 | overflow: hidden;
130 | /* max-width: 100%; */
131 | max-width: 800px;
132 | }
133 | .injectionDiv.readonly {
134 | touch-action: inherit;
135 | }
136 | }
137 |
138 | .blocklyToolboxDiv {
139 | padding: 10px;
140 | }
141 |
142 | .playtoggle,
143 | .edittoggle {
144 | cursor: pointer;
145 | position: absolute;
146 | border-radius: 100%;
147 | z-index: 1000;
148 | color: black;
149 | background-color: #eee;
150 | border: 1px solid black;
151 | width: 42px;
152 | height: 42px;
153 | display: flex;
154 | justify-content: center;
155 | align-items: center;
156 | user-select: none;
157 | &.big {
158 | width: 64px;
159 | height: 64px;
160 | }
161 | }
162 |
163 | .playtoggle {
164 | top: 10px;
165 | right: 10px;
166 | }
167 | .edittoggle {
168 | top: 60px;
169 | right: 10px;
170 | }
171 |
--------------------------------------------------------------------------------
/vite.config.js:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "vite";
2 |
3 | export default defineConfig({
4 | build: {
5 | rollupOptions: {
6 | input: {
7 | main: "index.html",
8 | learn: "learn/index.html",
9 | },
10 | },
11 | },
12 | });
13 |
--------------------------------------------------------------------------------