From 5f5f97a0ec495b1d321cfe4bd9ea9c359706b5bb Mon Sep 17 00:00:00 2001 From: abed-daloopa Date: Mon, 6 Apr 2026 09:53:04 +0300 Subject: [PATCH 1/3] fix: add autocomplete types for default haptic pattern names HapticInput now includes DefaultPatternName (a union of preset keys like "success", "error", "warning", etc.) so IDEs provide autocomplete while still accepting arbitrary strings via (string & {}). --- packages/web-haptics/src/index.ts | 1 + packages/web-haptics/src/lib/web-haptics/patterns.ts | 2 ++ packages/web-haptics/src/lib/web-haptics/types.ts | 9 ++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/web-haptics/src/index.ts b/packages/web-haptics/src/index.ts index a285b6e..1267716 100644 --- a/packages/web-haptics/src/index.ts +++ b/packages/web-haptics/src/index.ts @@ -2,6 +2,7 @@ export { version } from "./../package.json"; export { WebHaptics } from "./lib/web-haptics"; export { defaultPatterns } from "./lib/web-haptics/patterns"; +export type { DefaultPatternName } from "./lib/web-haptics/patterns"; export type { Vibration, HapticPattern, diff --git a/packages/web-haptics/src/lib/web-haptics/patterns.ts b/packages/web-haptics/src/lib/web-haptics/patterns.ts index fa1861d..abdd262 100644 --- a/packages/web-haptics/src/lib/web-haptics/patterns.ts +++ b/packages/web-haptics/src/lib/web-haptics/patterns.ts @@ -67,3 +67,5 @@ export const defaultPatterns = { pattern: [{ duration: 1000, intensity: 1 }], }, } as const satisfies Record; + +export type DefaultPatternName = keyof typeof defaultPatterns; diff --git a/packages/web-haptics/src/lib/web-haptics/types.ts b/packages/web-haptics/src/lib/web-haptics/types.ts index b236a3d..8e6ed34 100644 --- a/packages/web-haptics/src/lib/web-haptics/types.ts +++ b/packages/web-haptics/src/lib/web-haptics/types.ts @@ -1,3 +1,5 @@ +import type { DefaultPatternName } from "./patterns"; + export interface Vibration { duration: number; intensity?: number; @@ -10,7 +12,12 @@ export interface HapticPreset { pattern: Vibration[]; } -export type HapticInput = number | string | HapticPattern | HapticPreset; +export type HapticInput = + | number + | DefaultPatternName + | (string & {}) + | HapticPattern + | HapticPreset; export interface TriggerOptions { intensity?: number; From 44e4d1acef7d06831d7fcd337589c2b815b3ed0c Mon Sep 17 00:00:00 2001 From: abed-daloopa Date: Mon, 6 Apr 2026 10:11:12 +0300 Subject: [PATCH 2/3] fix: add autocomplete types for default haptic pattern names HapticInput now uses DefaultPatternName (a union of preset keys like "success", "error", "warning", etc.) instead of bare string, giving IDE autocomplete and compile-time safety. Arbitrary strings are no longer accepted since there is no custom pattern registration API. --- packages/web-haptics/src/lib/web-haptics/index.ts | 6 +----- packages/web-haptics/src/lib/web-haptics/types.ts | 1 - 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/packages/web-haptics/src/lib/web-haptics/index.ts b/packages/web-haptics/src/lib/web-haptics/index.ts index e54ca9e..1fe4fb5 100644 --- a/packages/web-haptics/src/lib/web-haptics/index.ts +++ b/packages/web-haptics/src/lib/web-haptics/index.ts @@ -20,11 +20,7 @@ function normalizeInput(input: HapticInput): { } if (typeof input === "string") { - const preset = defaultPatterns[input as keyof typeof defaultPatterns]; - if (!preset) { - console.warn(`[web-haptics] Unknown preset: "${input}"`); - return null; - } + const preset = defaultPatterns[input]; return { vibrations: preset.pattern.map((v) => ({ ...v })) }; } diff --git a/packages/web-haptics/src/lib/web-haptics/types.ts b/packages/web-haptics/src/lib/web-haptics/types.ts index 8e6ed34..fef5576 100644 --- a/packages/web-haptics/src/lib/web-haptics/types.ts +++ b/packages/web-haptics/src/lib/web-haptics/types.ts @@ -15,7 +15,6 @@ export interface HapticPreset { export type HapticInput = | number | DefaultPatternName - | (string & {}) | HapticPattern | HapticPreset; From 74e97ea0a381e3d436b52027a853fd4be0b6e966 Mon Sep 17 00:00:00 2001 From: abed-daloopa Date: Mon, 6 Apr 2026 10:11:49 +0300 Subject: [PATCH 3/3] fix: restore runtime guard for unknown preset names --- packages/web-haptics/src/lib/web-haptics/index.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/web-haptics/src/lib/web-haptics/index.ts b/packages/web-haptics/src/lib/web-haptics/index.ts index 1fe4fb5..e54ca9e 100644 --- a/packages/web-haptics/src/lib/web-haptics/index.ts +++ b/packages/web-haptics/src/lib/web-haptics/index.ts @@ -20,7 +20,11 @@ function normalizeInput(input: HapticInput): { } if (typeof input === "string") { - const preset = defaultPatterns[input]; + const preset = defaultPatterns[input as keyof typeof defaultPatterns]; + if (!preset) { + console.warn(`[web-haptics] Unknown preset: "${input}"`); + return null; + } return { vibrations: preset.pattern.map((v) => ({ ...v })) }; }