webtau 0.1.4 → 0.2.1

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.
@@ -0,0 +1,19 @@
1
+ /**
2
+ * webtau/assets — Asset loading foundation module for web builds.
3
+ *
4
+ * Includes caching helpers for text/json/binary/image payloads with
5
+ * optional fetch/image injection points for tests.
6
+ */
7
+ export interface AssetLoader {
8
+ clear(): void;
9
+ loadText(url: string, init?: RequestInit): Promise<string>;
10
+ loadJson<T>(url: string, init?: RequestInit): Promise<T>;
11
+ loadBytes(url: string, init?: RequestInit): Promise<ArrayBuffer>;
12
+ loadImage(url: string): Promise<HTMLImageElement>;
13
+ }
14
+ export interface AssetLoaderOptions {
15
+ fetchImpl?: (input: string, init?: RequestInit) => Promise<Response>;
16
+ imageFactory?: () => HTMLImageElement;
17
+ }
18
+ export declare function createAssetLoader(options?: AssetLoaderOptions): AssetLoader;
19
+ //# sourceMappingURL=assets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,IAAI,CAAC;IACd,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,QAAQ,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACzD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,gBAAgB,CAAC;CACvC;AAiBD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAgE/E"}
package/dist/assets.js ADDED
@@ -0,0 +1,76 @@
1
+ /**
2
+ * webtau/assets — Asset loading foundation module for web builds.
3
+ *
4
+ * Includes caching helpers for text/json/binary/image payloads with
5
+ * optional fetch/image injection points for tests.
6
+ */
7
+ function defaultFetch(input, init) {
8
+ if (typeof fetch !== "function") {
9
+ throw new Error("[webtau/assets] Fetch API is not available.");
10
+ }
11
+ return fetch(input, init);
12
+ }
13
+ function createDefaultImage() {
14
+ const ImageCtor = globalThis.Image;
15
+ if (!ImageCtor) {
16
+ throw new Error("[webtau/assets] Image constructor is not available.");
17
+ }
18
+ return new ImageCtor();
19
+ }
20
+ export function createAssetLoader(options = {}) {
21
+ const fetchImpl = options.fetchImpl ?? defaultFetch;
22
+ const imageFactory = options.imageFactory ?? createDefaultImage;
23
+ const cache = new Map();
24
+ async function fetchOrThrow(url, init) {
25
+ const response = await fetchImpl(url, init);
26
+ if (!response.ok) {
27
+ throw new Error(`[webtau/assets] Failed to load "${url}" (HTTP ${response.status}).`);
28
+ }
29
+ return response;
30
+ }
31
+ function cached(key, loader) {
32
+ if (!cache.has(key)) {
33
+ cache.set(key, loader());
34
+ }
35
+ return cache.get(key);
36
+ }
37
+ const clear = () => {
38
+ cache.clear();
39
+ };
40
+ const loadText = (url, init) => {
41
+ return cached(`text:${url}`, async () => {
42
+ const response = await fetchOrThrow(url, init);
43
+ return response.text();
44
+ });
45
+ };
46
+ const loadJson = (url, init) => {
47
+ return cached(`json:${url}`, async () => {
48
+ const text = await loadText(url, init);
49
+ return JSON.parse(text);
50
+ });
51
+ };
52
+ const loadBytes = (url, init) => {
53
+ return cached(`bytes:${url}`, async () => {
54
+ const response = await fetchOrThrow(url, init);
55
+ return response.arrayBuffer();
56
+ });
57
+ };
58
+ const loadImage = (url) => {
59
+ return cached(`image:${url}`, async () => {
60
+ const image = imageFactory();
61
+ return new Promise((resolve, reject) => {
62
+ image.onload = () => resolve(image);
63
+ image.onerror = () => reject(new Error(`[webtau/assets] Failed to load image "${url}".`));
64
+ image.src = url;
65
+ });
66
+ });
67
+ };
68
+ return {
69
+ clear,
70
+ loadText,
71
+ loadJson,
72
+ loadBytes,
73
+ loadImage,
74
+ };
75
+ }
76
+ //# sourceMappingURL=assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assets.js","sourceRoot":"","sources":["../src/assets.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * webtau/audio — Audio foundation module for web builds.
3
+ *
4
+ * Provides a lightweight wrapper over Web Audio that works as a no-op
5
+ * in non-audio environments (tests/SSR).
6
+ */
7
+ export interface PlayToneOptions {
8
+ type?: OscillatorType;
9
+ gain?: number;
10
+ }
11
+ export interface AudioController {
12
+ isSupported(): boolean;
13
+ isMuted(): boolean;
14
+ setMuted(muted: boolean): void;
15
+ getMasterVolume(): number;
16
+ setMasterVolume(volume: number): void;
17
+ resume(): Promise<void>;
18
+ suspend(): Promise<void>;
19
+ playTone(frequency: number, durationMs: number, options?: PlayToneOptions): Promise<void>;
20
+ }
21
+ interface GainNodeLike {
22
+ gain: {
23
+ value: number;
24
+ };
25
+ connect(destination: unknown): void;
26
+ }
27
+ interface OscillatorNodeLike {
28
+ type: OscillatorType;
29
+ frequency: {
30
+ value: number;
31
+ };
32
+ connect(destination: unknown): void;
33
+ start(when?: number): void;
34
+ stop(when?: number): void;
35
+ }
36
+ interface AudioContextLike {
37
+ currentTime: number;
38
+ destination: unknown;
39
+ createGain(): GainNodeLike;
40
+ createOscillator(): OscillatorNodeLike;
41
+ resume?(): Promise<void>;
42
+ suspend?(): Promise<void>;
43
+ }
44
+ export interface AudioControllerOptions {
45
+ contextFactory?: () => AudioContextLike | null;
46
+ }
47
+ export declare function createAudioController(options?: AudioControllerOptions): AudioController;
48
+ export {};
49
+ //# sourceMappingURL=audio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,IAAI,OAAO,CAAC;IACvB,OAAO,IAAI,OAAO,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,eAAe,IAAI,MAAM,CAAC;IAC1B,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3F;AAED,UAAU,YAAY;IACpB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxB,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;CACrC;AAED,UAAU,kBAAkB;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7B,OAAO,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,UAAU,gBAAgB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,IAAI,YAAY,CAAC;IAC3B,gBAAgB,IAAI,kBAAkB,CAAC;IACvC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,MAAM,gBAAgB,GAAG,IAAI,CAAC;CAChD;AAYD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAmF3F"}
package/dist/audio.js ADDED
@@ -0,0 +1,88 @@
1
+ /**
2
+ * webtau/audio — Audio foundation module for web builds.
3
+ *
4
+ * Provides a lightweight wrapper over Web Audio that works as a no-op
5
+ * in non-audio environments (tests/SSR).
6
+ */
7
+ function clamp01(value) {
8
+ return Math.max(0, Math.min(1, value));
9
+ }
10
+ function defaultContextFactory() {
11
+ const Ctor = globalThis.AudioContext;
12
+ if (!Ctor)
13
+ return null;
14
+ return new Ctor();
15
+ }
16
+ export function createAudioController(options = {}) {
17
+ const contextFactory = options.contextFactory ?? defaultContextFactory;
18
+ let context = null;
19
+ let masterGain = null;
20
+ let muted = false;
21
+ let masterVolume = 1;
22
+ function ensureContext() {
23
+ if (context)
24
+ return context;
25
+ context = contextFactory();
26
+ if (!context)
27
+ return null;
28
+ masterGain = context.createGain();
29
+ masterGain.gain.value = muted ? 0 : masterVolume;
30
+ masterGain.connect(context.destination);
31
+ return context;
32
+ }
33
+ function syncMasterGain() {
34
+ if (!masterGain)
35
+ return;
36
+ masterGain.gain.value = muted ? 0 : masterVolume;
37
+ }
38
+ return {
39
+ isSupported() {
40
+ return ensureContext() !== null;
41
+ },
42
+ isMuted() {
43
+ return muted;
44
+ },
45
+ setMuted(value) {
46
+ muted = value;
47
+ syncMasterGain();
48
+ },
49
+ getMasterVolume() {
50
+ return masterVolume;
51
+ },
52
+ setMasterVolume(volume) {
53
+ masterVolume = clamp01(volume);
54
+ syncMasterGain();
55
+ },
56
+ async resume() {
57
+ const ctx = ensureContext();
58
+ if (!ctx?.resume)
59
+ return;
60
+ await ctx.resume();
61
+ },
62
+ async suspend() {
63
+ const ctx = ensureContext();
64
+ if (!ctx?.suspend)
65
+ return;
66
+ await ctx.suspend();
67
+ },
68
+ async playTone(frequency, durationMs, toneOptions = {}) {
69
+ if (muted)
70
+ return;
71
+ const ctx = ensureContext();
72
+ if (!ctx || !masterGain)
73
+ return;
74
+ const oscillator = ctx.createOscillator();
75
+ const gainNode = ctx.createGain();
76
+ oscillator.type = toneOptions.type ?? "sine";
77
+ oscillator.frequency.value = frequency;
78
+ gainNode.gain.value = clamp01(toneOptions.gain ?? 0.1);
79
+ oscillator.connect(gainNode);
80
+ gainNode.connect(masterGain);
81
+ const now = ctx.currentTime;
82
+ const durationSeconds = Math.max(0, durationMs) / 1000;
83
+ oscillator.start(now);
84
+ oscillator.stop(now + durationSeconds);
85
+ },
86
+ };
87
+ }
88
+ //# sourceMappingURL=audio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * webtau/dialog — Web shim for @tauri-apps/api/dialog.
3
+ *
4
+ * Uses HTML <dialog> when available, with safe browser fallbacks.
5
+ */
6
+ export interface DialogFilter {
7
+ name?: string;
8
+ extensions: string[];
9
+ }
10
+ export interface OpenDialogOptions {
11
+ title?: string;
12
+ multiple?: boolean;
13
+ directory?: boolean;
14
+ filters?: DialogFilter[];
15
+ }
16
+ export interface SaveDialogOptions {
17
+ title?: string;
18
+ defaultPath?: string;
19
+ }
20
+ export interface MessageDialogOptions {
21
+ title?: string;
22
+ okLabel?: string;
23
+ cancelLabel?: string;
24
+ }
25
+ export declare function message(messageText: string, options?: MessageDialogOptions): Promise<void>;
26
+ export declare function ask(messageText: string, options?: MessageDialogOptions): Promise<boolean>;
27
+ export declare function confirm(messageText: string, options?: MessageDialogOptions): Promise<boolean>;
28
+ export declare function open(options?: OpenDialogOptions): Promise<string | string[] | null>;
29
+ export declare function save(options?: SaveDialogOptions): Promise<string | null>;
30
+ //# sourceMappingURL=dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAqMD,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,GAAG,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,wBAAsB,OAAO,CAC3B,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,IAAI,CACxB,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,CAwCnC;AAED,wBAAsB,IAAI,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAElF"}
package/dist/dialog.js ADDED
@@ -0,0 +1,219 @@
1
+ /**
2
+ * webtau/dialog — Web shim for @tauri-apps/api/dialog.
3
+ *
4
+ * Uses HTML <dialog> when available, with safe browser fallbacks.
5
+ */
6
+ function hasDom() {
7
+ return (typeof document !== "undefined" &&
8
+ typeof document.createElement === "function" &&
9
+ !!document.body);
10
+ }
11
+ function hasHtmlDialog() {
12
+ if (!hasDom())
13
+ return false;
14
+ try {
15
+ const el = document.createElement("dialog");
16
+ return typeof el.showModal === "function";
17
+ }
18
+ catch {
19
+ return false;
20
+ }
21
+ }
22
+ function fallbackAlert(messageText) {
23
+ if (typeof globalThis.alert === "function") {
24
+ globalThis.alert(messageText);
25
+ }
26
+ else {
27
+ console.info(`[webtau/dialog] ${messageText}`);
28
+ }
29
+ }
30
+ function fallbackConfirm(messageText) {
31
+ if (typeof globalThis.confirm === "function") {
32
+ return globalThis.confirm(messageText);
33
+ }
34
+ return true;
35
+ }
36
+ function fallbackPrompt(messageText, value) {
37
+ if (typeof globalThis.prompt === "function") {
38
+ return globalThis.prompt(messageText, value);
39
+ }
40
+ return value || null;
41
+ }
42
+ async function showChoiceDialog(messageText, options, choices) {
43
+ if (!hasHtmlDialog()) {
44
+ if (choices.length === 1) {
45
+ fallbackAlert(messageText);
46
+ return choices[0].value;
47
+ }
48
+ return fallbackConfirm(messageText) ? choices[0].value : choices[1].value;
49
+ }
50
+ return new Promise((resolve) => {
51
+ const dialog = document.createElement("dialog");
52
+ dialog.style.padding = "1rem";
53
+ dialog.style.border = "1px solid #666";
54
+ dialog.style.borderRadius = "0.5rem";
55
+ dialog.style.maxWidth = "min(90vw, 28rem)";
56
+ const title = document.createElement("h3");
57
+ title.textContent = options.title ?? "Dialog";
58
+ title.style.margin = "0 0 0.75rem 0";
59
+ dialog.appendChild(title);
60
+ const body = document.createElement("p");
61
+ body.textContent = messageText;
62
+ body.style.margin = "0 0 1rem 0";
63
+ body.style.whiteSpace = "pre-wrap";
64
+ dialog.appendChild(body);
65
+ const actions = document.createElement("div");
66
+ actions.style.display = "flex";
67
+ actions.style.justifyContent = "flex-end";
68
+ actions.style.gap = "0.5rem";
69
+ for (const choice of choices) {
70
+ const button = document.createElement("button");
71
+ button.type = "button";
72
+ button.textContent = choice.label;
73
+ button.addEventListener("click", () => {
74
+ dialog.returnValue = choice.value;
75
+ dialog.close(choice.value);
76
+ });
77
+ actions.appendChild(button);
78
+ }
79
+ dialog.appendChild(actions);
80
+ document.body.appendChild(dialog);
81
+ const cleanup = () => {
82
+ dialog.removeEventListener("close", onClose);
83
+ dialog.remove();
84
+ };
85
+ const onClose = () => {
86
+ const value = dialog.returnValue || choices[choices.length - 1].value;
87
+ cleanup();
88
+ resolve(value);
89
+ };
90
+ dialog.addEventListener("close", onClose);
91
+ dialog.showModal();
92
+ });
93
+ }
94
+ async function showInputDialog(messageText, options) {
95
+ if (!hasHtmlDialog()) {
96
+ return fallbackPrompt(messageText, options.defaultPath ?? "");
97
+ }
98
+ return new Promise((resolve) => {
99
+ const dialog = document.createElement("dialog");
100
+ dialog.style.padding = "1rem";
101
+ dialog.style.border = "1px solid #666";
102
+ dialog.style.borderRadius = "0.5rem";
103
+ dialog.style.maxWidth = "min(90vw, 28rem)";
104
+ const title = document.createElement("h3");
105
+ title.textContent = options.title ?? "Save";
106
+ title.style.margin = "0 0 0.75rem 0";
107
+ dialog.appendChild(title);
108
+ const body = document.createElement("p");
109
+ body.textContent = messageText;
110
+ body.style.margin = "0 0 0.75rem 0";
111
+ dialog.appendChild(body);
112
+ const input = document.createElement("input");
113
+ input.type = "text";
114
+ input.value = options.defaultPath ?? "";
115
+ input.style.width = "100%";
116
+ input.style.marginBottom = "1rem";
117
+ dialog.appendChild(input);
118
+ const actions = document.createElement("div");
119
+ actions.style.display = "flex";
120
+ actions.style.justifyContent = "flex-end";
121
+ actions.style.gap = "0.5rem";
122
+ const cancelBtn = document.createElement("button");
123
+ cancelBtn.type = "button";
124
+ cancelBtn.textContent = "Cancel";
125
+ cancelBtn.addEventListener("click", () => {
126
+ dialog.returnValue = "cancel";
127
+ dialog.close("cancel");
128
+ });
129
+ const saveBtn = document.createElement("button");
130
+ saveBtn.type = "button";
131
+ saveBtn.textContent = "Save";
132
+ saveBtn.addEventListener("click", () => {
133
+ dialog.returnValue = "save";
134
+ dialog.close("save");
135
+ });
136
+ actions.appendChild(cancelBtn);
137
+ actions.appendChild(saveBtn);
138
+ dialog.appendChild(actions);
139
+ document.body.appendChild(dialog);
140
+ const cleanup = () => {
141
+ dialog.removeEventListener("close", onClose);
142
+ dialog.remove();
143
+ };
144
+ const onClose = () => {
145
+ const accepted = dialog.returnValue === "save";
146
+ const value = input.value.trim();
147
+ cleanup();
148
+ resolve(accepted && value ? value : null);
149
+ };
150
+ dialog.addEventListener("close", onClose);
151
+ dialog.showModal();
152
+ input.focus();
153
+ input.select();
154
+ });
155
+ }
156
+ function filterToAccept(filters) {
157
+ if (!filters || filters.length === 0)
158
+ return undefined;
159
+ const extensions = filters.flatMap((filter) => filter.extensions || []);
160
+ if (extensions.length === 0)
161
+ return undefined;
162
+ return extensions.map((ext) => `.${ext.replace(/^\./, "")}`).join(",");
163
+ }
164
+ export async function message(messageText, options = {}) {
165
+ await showChoiceDialog(messageText, options, [
166
+ { value: "ok", label: options.okLabel ?? "OK" },
167
+ ]);
168
+ }
169
+ export async function ask(messageText, options = {}) {
170
+ const value = await showChoiceDialog(messageText, options, [
171
+ { value: "ok", label: options.okLabel ?? "OK" },
172
+ { value: "cancel", label: options.cancelLabel ?? "Cancel" },
173
+ ]);
174
+ return value === "ok";
175
+ }
176
+ export async function confirm(messageText, options = {}) {
177
+ return ask(messageText, options);
178
+ }
179
+ export async function open(options = {}) {
180
+ if (!hasDom())
181
+ return null;
182
+ return new Promise((resolve) => {
183
+ const input = document.createElement("input");
184
+ input.type = "file";
185
+ input.style.display = "none";
186
+ input.multiple = !!options.multiple;
187
+ if (options.directory) {
188
+ // Non-standard but widely supported by Chromium/WebKit.
189
+ input.webkitdirectory = true;
190
+ }
191
+ const accept = filterToAccept(options.filters);
192
+ if (accept)
193
+ input.accept = accept;
194
+ const cleanup = () => {
195
+ input.removeEventListener("change", onChange);
196
+ input.remove();
197
+ };
198
+ const onChange = () => {
199
+ const files = input.files ? Array.from(input.files) : [];
200
+ cleanup();
201
+ if (files.length === 0) {
202
+ resolve(null);
203
+ return;
204
+ }
205
+ const values = files.map((file) => {
206
+ const rel = file.webkitRelativePath;
207
+ return rel || file.name;
208
+ });
209
+ resolve(options.multiple ? values : values[0]);
210
+ };
211
+ input.addEventListener("change", onChange);
212
+ document.body.appendChild(input);
213
+ input.click();
214
+ });
215
+ }
216
+ export async function save(options = {}) {
217
+ return showInputDialog("Select a file path to save.", options);
218
+ }
219
+ //# sourceMappingURL=dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog.js","sourceRoot":"","sources":["../src/dialog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * webtau/event — Web shim for @tauri-apps/api/event.
3
+ *
4
+ * Uses a CustomEvent bridge in browser environments, with a
5
+ * lightweight in-memory fallback for non-browser test environments.
6
+ */
7
+ export interface Event<T> {
8
+ event: string;
9
+ id: number;
10
+ payload: T;
11
+ }
12
+ export type EventCallback<T> = (event: Event<T>) => void;
13
+ export type UnlistenFn = () => void;
14
+ export declare function listen<T>(event: string, handler: EventCallback<T>): Promise<UnlistenFn>;
15
+ export declare function once<T>(event: string, handler: EventCallback<T>): Promise<UnlistenFn>;
16
+ export declare function emit<T>(event: string, payload?: T): Promise<void>;
17
+ export declare function emitTo<T>(_target: string, event: string, payload?: T): Promise<void>;
18
+ //# sourceMappingURL=event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,KAAK,CAAC,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACzD,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC;AA+DpC,wBAAsB,MAAM,CAAC,CAAC,EAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,UAAU,CAAC,CAqBrB;AAED,wBAAsB,IAAI,CAAC,CAAC,EAC1B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,OAAO,CAAC,UAAU,CAAC,CAOrB;AAED,wBAAsB,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAMvE;AAED,wBAAsB,MAAM,CAAC,CAAC,EAC5B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,CAAC,GACV,OAAO,CAAC,IAAI,CAAC,CAEf"}
package/dist/event.js ADDED
@@ -0,0 +1,87 @@
1
+ /**
2
+ * webtau/event — Web shim for @tauri-apps/api/event.
3
+ *
4
+ * Uses a CustomEvent bridge in browser environments, with a
5
+ * lightweight in-memory fallback for non-browser test environments.
6
+ */
7
+ const domListeners = new Map();
8
+ const fallbackListeners = new Map();
9
+ let nextListenerId = 1;
10
+ function hasCustomEventBridge() {
11
+ return (typeof window !== "undefined" &&
12
+ typeof window.addEventListener === "function" &&
13
+ typeof window.removeEventListener === "function" &&
14
+ typeof window.dispatchEvent === "function" &&
15
+ typeof CustomEvent !== "undefined");
16
+ }
17
+ function removeFallbackListener(event, id) {
18
+ const listeners = fallbackListeners.get(event);
19
+ if (!listeners)
20
+ return;
21
+ listeners.delete(id);
22
+ if (listeners.size === 0) {
23
+ fallbackListeners.delete(event);
24
+ }
25
+ }
26
+ function addFallbackListener(event, id, callback, once) {
27
+ const listeners = fallbackListeners.get(event) ?? new Map();
28
+ listeners.set(id, { id, once, callback: callback });
29
+ fallbackListeners.set(event, listeners);
30
+ return () => {
31
+ removeFallbackListener(event, id);
32
+ };
33
+ }
34
+ function emitFallback(event, payload) {
35
+ const listeners = fallbackListeners.get(event);
36
+ if (!listeners || listeners.size === 0)
37
+ return;
38
+ const snapshot = Array.from(listeners.values());
39
+ for (const listener of snapshot) {
40
+ listener.callback({
41
+ event,
42
+ id: listener.id,
43
+ payload: payload,
44
+ });
45
+ if (listener.once) {
46
+ removeFallbackListener(event, listener.id);
47
+ }
48
+ }
49
+ }
50
+ export async function listen(event, handler) {
51
+ const id = nextListenerId++;
52
+ if (!hasCustomEventBridge()) {
53
+ return addFallbackListener(event, id, handler, false);
54
+ }
55
+ const listener = (nativeEvent) => {
56
+ const payload = nativeEvent instanceof CustomEvent ? nativeEvent.detail : undefined;
57
+ handler({ event, id, payload });
58
+ };
59
+ window.addEventListener(event, listener);
60
+ domListeners.set(id, { event, listener });
61
+ return () => {
62
+ const current = domListeners.get(id);
63
+ if (!current)
64
+ return;
65
+ window.removeEventListener(current.event, current.listener);
66
+ domListeners.delete(id);
67
+ };
68
+ }
69
+ export async function once(event, handler) {
70
+ let unlisten = () => { };
71
+ unlisten = await listen(event, (payload) => {
72
+ unlisten();
73
+ handler(payload);
74
+ });
75
+ return unlisten;
76
+ }
77
+ export async function emit(event, payload) {
78
+ if (!hasCustomEventBridge()) {
79
+ emitFallback(event, payload);
80
+ return;
81
+ }
82
+ window.dispatchEvent(new CustomEvent(event, { detail: payload }));
83
+ }
84
+ export async function emitTo(_target, event, payload) {
85
+ await emit(event, payload);
86
+ }
87
+ //# sourceMappingURL=event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.js","sourceRoot":"","sources":["../src/event.ts"],"names":[],"mappings":"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"}
package/dist/fs.d.ts ADDED
@@ -0,0 +1,33 @@
1
+ /**
2
+ * webtau/fs — Web shim for @tauri-apps/api/fs.
3
+ *
4
+ * Uses IndexedDB when available, with an in-memory fallback for
5
+ * non-browser test environments.
6
+ */
7
+ export interface ReadDirOptions {
8
+ recursive?: boolean;
9
+ }
10
+ export interface CreateDirOptions {
11
+ recursive?: boolean;
12
+ }
13
+ export interface RemoveOptions {
14
+ recursive?: boolean;
15
+ }
16
+ export interface FsEntry {
17
+ path: string;
18
+ name: string;
19
+ isFile: boolean;
20
+ isDirectory: boolean;
21
+ children?: FsEntry[];
22
+ }
23
+ export declare function writeTextFile(path: string, contents: string, _options?: unknown): Promise<void>;
24
+ export declare function readTextFile(path: string, _options?: unknown): Promise<string>;
25
+ export declare function writeFile(path: string, contents: Uint8Array | ArrayBuffer | number[] | string, _options?: unknown): Promise<void>;
26
+ export declare function readFile(path: string, _options?: unknown): Promise<Uint8Array>;
27
+ export declare function exists(path: string, _options?: unknown): Promise<boolean>;
28
+ export declare function mkdir(path: string, options?: CreateDirOptions): Promise<void>;
29
+ export declare function createDir(path: string, options?: CreateDirOptions): Promise<void>;
30
+ export declare function readDir(path?: string, options?: ReadDirOptions): Promise<FsEntry[]>;
31
+ export declare function remove(path: string, options?: RemoveOptions): Promise<void>;
32
+ export declare function removeDir(path: string, options?: RemoveOptions): Promise<void>;
33
+ //# sourceMappingURL=fs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AA+LD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CASpF;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,UAAU,GAAG,WAAW,GAAG,MAAM,EAAE,GAAG,MAAM,EACtD,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,CAQpF;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAI/E;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvF;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,OAAO,CAAC,IAAI,SAAK,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAOzF;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BrF;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAExF"}
package/dist/fs.js ADDED
@@ -0,0 +1,267 @@
1
+ /**
2
+ * webtau/fs — Web shim for @tauri-apps/api/fs.
3
+ *
4
+ * Uses IndexedDB when available, with an in-memory fallback for
5
+ * non-browser test environments.
6
+ */
7
+ const DB_NAME = "webtau-fs";
8
+ const DB_VERSION = 1;
9
+ const STORE_NAME = "entries";
10
+ const memoryStore = new Map();
11
+ let dbPromise = null;
12
+ function hasIndexedDb() {
13
+ return typeof indexedDB !== "undefined";
14
+ }
15
+ function normalizePath(path) {
16
+ const normalized = path
17
+ .replace(/\\/g, "/")
18
+ .replace(/^\.\/+/, "")
19
+ .replace(/\/+/g, "/")
20
+ .replace(/^\/+/, "")
21
+ .replace(/\/+$/, "");
22
+ return normalized === "." ? "" : normalized;
23
+ }
24
+ function requirePath(path) {
25
+ const normalized = normalizePath(path);
26
+ if (!normalized) {
27
+ throw new Error("[webtau/fs] Path cannot be empty.");
28
+ }
29
+ return normalized;
30
+ }
31
+ function parentPath(path) {
32
+ const idx = path.lastIndexOf("/");
33
+ return idx === -1 ? "" : path.slice(0, idx);
34
+ }
35
+ function toUint8Array(data) {
36
+ if (data instanceof Uint8Array)
37
+ return data;
38
+ if (data instanceof ArrayBuffer)
39
+ return new Uint8Array(data);
40
+ if (Array.isArray(data))
41
+ return Uint8Array.from(data);
42
+ return new TextEncoder().encode(data);
43
+ }
44
+ function cloneEntry(entry) {
45
+ if (entry.bytes) {
46
+ return { ...entry, bytes: entry.bytes.slice(0) };
47
+ }
48
+ return { ...entry };
49
+ }
50
+ function asArrayBuffer(bytes) {
51
+ return bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
52
+ }
53
+ async function openDb() {
54
+ if (!hasIndexedDb()) {
55
+ throw new Error("[webtau/fs] IndexedDB is not available.");
56
+ }
57
+ if (dbPromise)
58
+ return dbPromise;
59
+ dbPromise = new Promise((resolve, reject) => {
60
+ const request = indexedDB.open(DB_NAME, DB_VERSION);
61
+ request.onupgradeneeded = () => {
62
+ const db = request.result;
63
+ if (!db.objectStoreNames.contains(STORE_NAME)) {
64
+ db.createObjectStore(STORE_NAME, { keyPath: "path" });
65
+ }
66
+ };
67
+ request.onsuccess = () => resolve(request.result);
68
+ request.onerror = () => reject(request.error ?? new Error("[webtau/fs] Failed to open IndexedDB."));
69
+ });
70
+ return dbPromise;
71
+ }
72
+ function requestToPromise(request) {
73
+ return new Promise((resolve, reject) => {
74
+ request.onsuccess = () => resolve(request.result);
75
+ request.onerror = () => reject(request.error ?? new Error("[webtau/fs] IndexedDB request failed."));
76
+ });
77
+ }
78
+ async function getEntry(path) {
79
+ if (!hasIndexedDb()) {
80
+ return memoryStore.has(path) ? cloneEntry(memoryStore.get(path)) : null;
81
+ }
82
+ const db = await openDb();
83
+ const tx = db.transaction(STORE_NAME, "readonly");
84
+ const store = tx.objectStore(STORE_NAME);
85
+ const result = await requestToPromise(store.get(path));
86
+ return result ? cloneEntry(result) : null;
87
+ }
88
+ async function putEntry(entry) {
89
+ const cloned = cloneEntry(entry);
90
+ if (!hasIndexedDb()) {
91
+ memoryStore.set(cloned.path, cloned);
92
+ return;
93
+ }
94
+ const db = await openDb();
95
+ const tx = db.transaction(STORE_NAME, "readwrite");
96
+ const store = tx.objectStore(STORE_NAME);
97
+ await requestToPromise(store.put(cloned));
98
+ }
99
+ async function deleteEntry(path) {
100
+ if (!hasIndexedDb()) {
101
+ memoryStore.delete(path);
102
+ return;
103
+ }
104
+ const db = await openDb();
105
+ const tx = db.transaction(STORE_NAME, "readwrite");
106
+ const store = tx.objectStore(STORE_NAME);
107
+ await requestToPromise(store.delete(path));
108
+ }
109
+ async function listEntries() {
110
+ if (!hasIndexedDb()) {
111
+ return Array.from(memoryStore.values()).map(cloneEntry);
112
+ }
113
+ const db = await openDb();
114
+ const tx = db.transaction(STORE_NAME, "readonly");
115
+ const store = tx.objectStore(STORE_NAME);
116
+ const all = await requestToPromise(store.getAll());
117
+ return all.map(cloneEntry);
118
+ }
119
+ async function ensureDirChain(path) {
120
+ if (!path)
121
+ return;
122
+ const parts = path.split("/");
123
+ let current = "";
124
+ for (const part of parts) {
125
+ current = current ? `${current}/${part}` : part;
126
+ const existing = await getEntry(current);
127
+ if (existing?.kind === "file") {
128
+ throw new Error(`[webtau/fs] "${current}" is a file, expected directory.`);
129
+ }
130
+ if (!existing) {
131
+ await putEntry({ path: current, kind: "dir" });
132
+ }
133
+ }
134
+ }
135
+ function buildDirEntries(basePath, allEntries, recursive) {
136
+ const normalizedBase = normalizePath(basePath);
137
+ const prefix = normalizedBase ? `${normalizedBase}/` : "";
138
+ const childMap = new Map();
139
+ for (const entry of allEntries) {
140
+ if (entry.path === normalizedBase)
141
+ continue;
142
+ if (normalizedBase && !entry.path.startsWith(prefix))
143
+ continue;
144
+ const relative = normalizedBase ? entry.path.slice(prefix.length) : entry.path;
145
+ if (!relative)
146
+ continue;
147
+ const segments = relative.split("/");
148
+ const first = segments[0];
149
+ const childPath = normalizedBase ? `${normalizedBase}/${first}` : first;
150
+ const child = childMap.get(childPath);
151
+ const isImmediate = segments.length === 1;
152
+ const isDirectory = isImmediate ? entry.kind === "dir" : true;
153
+ if (!child) {
154
+ childMap.set(childPath, {
155
+ path: childPath,
156
+ name: first,
157
+ isFile: !isDirectory,
158
+ isDirectory,
159
+ });
160
+ }
161
+ else if (isDirectory) {
162
+ child.isDirectory = true;
163
+ child.isFile = false;
164
+ }
165
+ }
166
+ const entries = Array.from(childMap.values()).sort((a, b) => a.name.localeCompare(b.name));
167
+ if (!recursive)
168
+ return entries;
169
+ for (const entry of entries) {
170
+ if (entry.isDirectory) {
171
+ entry.children = buildDirEntries(entry.path, allEntries, true);
172
+ }
173
+ }
174
+ return entries;
175
+ }
176
+ export async function writeTextFile(path, contents, _options) {
177
+ const normalized = requirePath(path);
178
+ await ensureDirChain(parentPath(normalized));
179
+ await putEntry({ path: normalized, kind: "file", text: contents });
180
+ }
181
+ export async function readTextFile(path, _options) {
182
+ const normalized = requirePath(path);
183
+ const entry = await getEntry(normalized);
184
+ if (!entry || entry.kind !== "file") {
185
+ throw new Error(`[webtau/fs] File not found: ${normalized}`);
186
+ }
187
+ if (typeof entry.text === "string")
188
+ return entry.text;
189
+ if (entry.bytes)
190
+ return new TextDecoder().decode(new Uint8Array(entry.bytes));
191
+ return "";
192
+ }
193
+ export async function writeFile(path, contents, _options) {
194
+ const normalized = requirePath(path);
195
+ await ensureDirChain(parentPath(normalized));
196
+ const bytes = toUint8Array(contents);
197
+ await putEntry({
198
+ path: normalized,
199
+ kind: "file",
200
+ bytes: asArrayBuffer(bytes),
201
+ });
202
+ }
203
+ export async function readFile(path, _options) {
204
+ const normalized = requirePath(path);
205
+ const entry = await getEntry(normalized);
206
+ if (!entry || entry.kind !== "file") {
207
+ throw new Error(`[webtau/fs] File not found: ${normalized}`);
208
+ }
209
+ if (entry.bytes)
210
+ return new Uint8Array(entry.bytes);
211
+ return new TextEncoder().encode(entry.text ?? "");
212
+ }
213
+ export async function exists(path, _options) {
214
+ const normalized = normalizePath(path);
215
+ if (!normalized)
216
+ return true;
217
+ return (await getEntry(normalized)) !== null;
218
+ }
219
+ export async function mkdir(path, options = {}) {
220
+ const normalized = requirePath(path);
221
+ const parent = parentPath(normalized);
222
+ if (!options.recursive && parent && !(await exists(parent))) {
223
+ throw new Error(`[webtau/fs] Parent directory does not exist: ${parent}`);
224
+ }
225
+ await ensureDirChain(normalized);
226
+ }
227
+ export async function createDir(path, options = {}) {
228
+ await mkdir(path, options);
229
+ }
230
+ export async function readDir(path = "", options = {}) {
231
+ const normalized = normalizePath(path);
232
+ if (normalized && !(await exists(normalized))) {
233
+ throw new Error(`[webtau/fs] Directory not found: ${normalized}`);
234
+ }
235
+ const all = await listEntries();
236
+ return buildDirEntries(normalized, all, !!options.recursive);
237
+ }
238
+ export async function remove(path, options = {}) {
239
+ const normalized = normalizePath(path);
240
+ if (!normalized) {
241
+ if (!options.recursive) {
242
+ throw new Error("[webtau/fs] Removing root requires { recursive: true }.");
243
+ }
244
+ const all = await listEntries();
245
+ await Promise.all(all.map((entry) => deleteEntry(entry.path)));
246
+ return;
247
+ }
248
+ const entry = await getEntry(normalized);
249
+ const prefix = `${normalized}/`;
250
+ const all = await listEntries();
251
+ const descendants = all
252
+ .filter((candidate) => candidate.path.startsWith(prefix))
253
+ .map((candidate) => candidate.path);
254
+ if (!entry && descendants.length === 0)
255
+ return;
256
+ if ((entry?.kind === "dir" || descendants.length > 0) && !options.recursive) {
257
+ throw new Error(`[webtau/fs] "${normalized}" is not empty. Pass { recursive: true }.`);
258
+ }
259
+ if (entry) {
260
+ await deleteEntry(normalized);
261
+ }
262
+ await Promise.all(descendants.map((candidatePath) => deleteEntry(candidatePath)));
263
+ }
264
+ export async function removeDir(path, options = {}) {
265
+ await remove(path, options);
266
+ }
267
+ //# sourceMappingURL=fs.js.map
package/dist/fs.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * webtau/input — Input foundation module for web builds.
3
+ *
4
+ * Provides unified helpers for keyboard, gamepad, touch, and pointer-lock
5
+ * mouse input so gameplay code can consume a single abstraction.
6
+ */
7
+ export interface TouchPoint {
8
+ id: number;
9
+ x: number;
10
+ y: number;
11
+ }
12
+ export interface PointerDelta {
13
+ x: number;
14
+ y: number;
15
+ }
16
+ export interface GamepadAxisOptions {
17
+ gamepadIndex?: number;
18
+ deadzone?: number;
19
+ invert?: boolean;
20
+ }
21
+ export interface InputController {
22
+ destroy(): void;
23
+ isPressed(key: string): boolean;
24
+ keyAxis(negative: string | string[], positive: string | string[]): number;
25
+ gamepadAxis(axisIndex: number, options?: GamepadAxisOptions): number;
26
+ touches(): TouchPoint[];
27
+ requestPointerLock(element: Element): Promise<boolean>;
28
+ isPointerLocked(element?: Element): boolean;
29
+ consumePointerDelta(): PointerDelta;
30
+ }
31
+ export interface InputControllerOptions {
32
+ windowObj?: Pick<Window, "addEventListener" | "removeEventListener">;
33
+ documentObj?: Pick<Document, "pointerLockElement">;
34
+ navigatorObj?: Pick<Navigator, "getGamepads">;
35
+ }
36
+ export declare function createInputController(options?: InputControllerOptions): InputController;
37
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,IAAI,IAAI,CAAC;IAChB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAAC;IAC1E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC;IACrE,OAAO,IAAI,UAAU,EAAE,CAAC;IACxB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,eAAe,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5C,mBAAmB,IAAI,YAAY,CAAC;CACrC;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,kBAAkB,GAAG,qBAAqB,CAAC,CAAC;IACrE,WAAW,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;IACnD,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;CAC/C;AAqDD,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,sBAA2B,GAAG,eAAe,CAkI3F"}
package/dist/input.js ADDED
@@ -0,0 +1,143 @@
1
+ /**
2
+ * webtau/input — Input foundation module for web builds.
3
+ *
4
+ * Provides unified helpers for keyboard, gamepad, touch, and pointer-lock
5
+ * mouse input so gameplay code can consume a single abstraction.
6
+ */
7
+ function normalizeKeys(keys) {
8
+ return Array.isArray(keys) ? keys : [keys];
9
+ }
10
+ function applyDeadzone(value, deadzone) {
11
+ if (Math.abs(value) < deadzone)
12
+ return 0;
13
+ return value;
14
+ }
15
+ function axisFromKeys(pressed, negative, positive) {
16
+ const negDown = normalizeKeys(negative).some((key) => pressed.has(key));
17
+ const posDown = normalizeKeys(positive).some((key) => pressed.has(key));
18
+ if (negDown === posDown)
19
+ return 0;
20
+ return posDown ? 1 : -1;
21
+ }
22
+ function addListener(target, event, handler, cleanup) {
23
+ if (!target)
24
+ return;
25
+ target.addEventListener(event, handler);
26
+ cleanup.push(() => target.removeEventListener(event, handler));
27
+ }
28
+ function touchListToArray(touchList) {
29
+ if (Array.isArray(touchList))
30
+ return touchList;
31
+ const result = [];
32
+ for (let i = 0; i < touchList.length; i++) {
33
+ const touch = touchList.item(i);
34
+ if (touch) {
35
+ result.push({
36
+ identifier: touch.identifier,
37
+ clientX: touch.clientX,
38
+ clientY: touch.clientY,
39
+ });
40
+ }
41
+ }
42
+ return result;
43
+ }
44
+ export function createInputController(options = {}) {
45
+ const windowObj = options.windowObj ?? (typeof window !== "undefined" ? window : undefined);
46
+ const documentObj = options.documentObj ?? (typeof document !== "undefined" ? document : undefined);
47
+ const navigatorObj = options.navigatorObj ?? (typeof navigator !== "undefined" ? navigator : undefined);
48
+ const cleanup = [];
49
+ const pressedKeys = new Set();
50
+ const activeTouches = new Map();
51
+ let pointerDeltaX = 0;
52
+ let pointerDeltaY = 0;
53
+ addListener(windowObj, "keydown", ((event) => {
54
+ pressedKeys.add(event.key);
55
+ }), cleanup);
56
+ addListener(windowObj, "keyup", ((event) => {
57
+ pressedKeys.delete(event.key);
58
+ }), cleanup);
59
+ function upsertTouches(touchEvent) {
60
+ const changedTouches = touchListToArray(touchEvent.changedTouches);
61
+ for (const touch of changedTouches) {
62
+ activeTouches.set(touch.identifier, {
63
+ id: touch.identifier,
64
+ x: touch.clientX,
65
+ y: touch.clientY,
66
+ });
67
+ }
68
+ }
69
+ function removeTouches(touchEvent) {
70
+ const changedTouches = touchListToArray(touchEvent.changedTouches);
71
+ for (const touch of changedTouches) {
72
+ activeTouches.delete(touch.identifier);
73
+ }
74
+ }
75
+ addListener(windowObj, "touchstart", (event) => upsertTouches(event), cleanup);
76
+ addListener(windowObj, "touchmove", (event) => upsertTouches(event), cleanup);
77
+ addListener(windowObj, "touchend", (event) => removeTouches(event), cleanup);
78
+ addListener(windowObj, "touchcancel", (event) => removeTouches(event), cleanup);
79
+ addListener(windowObj, "mousemove", ((event) => {
80
+ if (!documentObj?.pointerLockElement)
81
+ return;
82
+ pointerDeltaX += event.movementX ?? 0;
83
+ pointerDeltaY += event.movementY ?? 0;
84
+ }), cleanup);
85
+ return {
86
+ destroy() {
87
+ for (const dispose of cleanup)
88
+ dispose();
89
+ cleanup.length = 0;
90
+ pressedKeys.clear();
91
+ activeTouches.clear();
92
+ pointerDeltaX = 0;
93
+ pointerDeltaY = 0;
94
+ },
95
+ isPressed(key) {
96
+ return pressedKeys.has(key);
97
+ },
98
+ keyAxis(negative, positive) {
99
+ return axisFromKeys(pressedKeys, negative, positive);
100
+ },
101
+ gamepadAxis(axisIndex, options = {}) {
102
+ const gamepads = navigatorObj?.getGamepads?.();
103
+ if (!gamepads)
104
+ return 0;
105
+ const gamepadIndex = options.gamepadIndex ?? 0;
106
+ const gamepad = gamepads[gamepadIndex];
107
+ if (!gamepad)
108
+ return 0;
109
+ const raw = gamepad.axes?.[axisIndex] ?? 0;
110
+ const deadzone = options.deadzone ?? 0.15;
111
+ const value = applyDeadzone(raw, deadzone);
112
+ return options.invert ? -value : value;
113
+ },
114
+ touches() {
115
+ return Array.from(activeTouches.values());
116
+ },
117
+ async requestPointerLock(element) {
118
+ const request = element
119
+ .requestPointerLock;
120
+ if (!request)
121
+ return false;
122
+ const result = request.call(element);
123
+ if (result && typeof result.then === "function") {
124
+ await result;
125
+ }
126
+ return true;
127
+ },
128
+ isPointerLocked(element) {
129
+ if (!documentObj?.pointerLockElement)
130
+ return false;
131
+ if (!element)
132
+ return true;
133
+ return documentObj.pointerLockElement === element;
134
+ },
135
+ consumePointerDelta() {
136
+ const delta = { x: pointerDeltaX, y: pointerDeltaY };
137
+ pointerDeltaX = 0;
138
+ pointerDeltaY = 0;
139
+ return delta;
140
+ },
141
+ };
142
+ }
143
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webtau",
3
- "version": "0.1.4",
3
+ "version": "0.2.1",
4
4
  "description": "Deploy Tauri games to web + desktop from one codebase",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -25,6 +25,30 @@
25
25
  "./dpi": {
26
26
  "types": "./dist/dpi.d.ts",
27
27
  "import": "./dist/dpi.js"
28
+ },
29
+ "./fs": {
30
+ "types": "./dist/fs.d.ts",
31
+ "import": "./dist/fs.js"
32
+ },
33
+ "./dialog": {
34
+ "types": "./dist/dialog.d.ts",
35
+ "import": "./dist/dialog.js"
36
+ },
37
+ "./event": {
38
+ "types": "./dist/event.d.ts",
39
+ "import": "./dist/event.js"
40
+ },
41
+ "./input": {
42
+ "types": "./dist/input.d.ts",
43
+ "import": "./dist/input.js"
44
+ },
45
+ "./audio": {
46
+ "types": "./dist/audio.d.ts",
47
+ "import": "./dist/audio.js"
48
+ },
49
+ "./assets": {
50
+ "types": "./dist/assets.d.ts",
51
+ "import": "./dist/assets.js"
28
52
  }
29
53
  },
30
54
  "files": [