+ ⚠️ Please make sure that your runtime environment supports the latest version of Wasm GC and Exception-Handling proposals.
+ For more information, see
https://kotl.in/wasm-help.
+
+
+
+ - For Chrome and Chromium-based browsers (Edge, Brave etc.), it should just work since version 119.
+ - For Firefox 120 it should just work.
+ - For Firefox 119:
+
+ - Open about:config in the browser.
+ - Enable javascript.options.wasm_gc.
+ - Refresh this page.
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/jetsnack/web/src/wasmJsMain/resources/karla_bold.ttf b/examples/jetsnack/web/src/wasmJsMain/resources/karla_bold.ttf
new file mode 100644
index 0000000000..052231c165
Binary files /dev/null and b/examples/jetsnack/web/src/wasmJsMain/resources/karla_bold.ttf differ
diff --git a/examples/jetsnack/web/src/wasmJsMain/resources/karla_regular.ttf b/examples/jetsnack/web/src/wasmJsMain/resources/karla_regular.ttf
new file mode 100644
index 0000000000..4269aa069e
Binary files /dev/null and b/examples/jetsnack/web/src/wasmJsMain/resources/karla_regular.ttf differ
diff --git a/examples/jetsnack/web/src/wasmJsMain/resources/load.mjs b/examples/jetsnack/web/src/wasmJsMain/resources/load.mjs
new file mode 100644
index 0000000000..67510ce7da
--- /dev/null
+++ b/examples/jetsnack/web/src/wasmJsMain/resources/load.mjs
@@ -0,0 +1,5 @@
+import { instantiate } from './jetsnackwasmapp.uninstantiated.mjs';
+
+await wasmSetup;
+
+instantiate({ skia: Module['asm'] });
diff --git a/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_light.ttf b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_light.ttf
new file mode 100644
index 0000000000..990857de8e
Binary files /dev/null and b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_light.ttf differ
diff --git a/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_medium.ttf b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_medium.ttf
new file mode 100644
index 0000000000..6e079f6984
Binary files /dev/null and b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_medium.ttf differ
diff --git a/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_regular.ttf b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_regular.ttf
new file mode 100644
index 0000000000..8d443d5d56
Binary files /dev/null and b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_regular.ttf differ
diff --git a/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_semibold.ttf b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_semibold.ttf
new file mode 100644
index 0000000000..f8a43f2b20
Binary files /dev/null and b/examples/jetsnack/web/src/wasmJsMain/resources/montserrat_semibold.ttf differ
diff --git a/examples/jetsnack/web/webpack.config.d/boilerplate.js b/examples/jetsnack/web/webpack.config.d/boilerplate.js
new file mode 100644
index 0000000000..e88b7f938c
--- /dev/null
+++ b/examples/jetsnack/web/webpack.config.d/boilerplate.js
@@ -0,0 +1,7 @@
+config.entry = {
+ main: [require('path').resolve(__dirname, "kotlin/load.mjs")]
+};
+
+config.resolve ?? (config.resolve = {});
+config.resolve.alias ?? (config.resolve.alias = {});
+config.resolve.alias.skia = false;
diff --git a/examples/jetsnack/web/webpack.config.d/cleanupSourcemap.js b/examples/jetsnack/web/webpack.config.d/cleanupSourcemap.js
new file mode 100644
index 0000000000..144d487278
--- /dev/null
+++ b/examples/jetsnack/web/webpack.config.d/cleanupSourcemap.js
@@ -0,0 +1,31 @@
+// Replace paths unavailable during compilation with `null`, so they will not be shown in devtools
+;
+(() => {
+ const fs = require("fs");
+ const path = require("path");
+
+ const outDir = __dirname + "/kotlin/"
+ const projecName = path.basename(__dirname);
+ const mapFile = outDir + projecName + ".map"
+
+ const sourcemap = JSON.parse(fs.readFileSync(mapFile))
+ const sources = sourcemap["sources"]
+ srcLoop: for (let i in sources) {
+ const srcFilePath = sources[i];
+ if (srcFilePath == null) continue;
+
+ const srcFileCandidates = [
+ outDir + srcFilePath,
+ outDir + srcFilePath.substring("../".length),
+ outDir + "../" + srcFilePath,
+ ];
+
+ for (let srcFile of srcFileCandidates) {
+ if (fs.existsSync(srcFile)) continue srcLoop;
+ }
+
+ sources[i] = null;
+ }
+
+ fs.writeFileSync(mapFile, JSON.stringify(sourcemap));
+})();