joopjs 2.0.6 → 2.1.0
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.
- package/.claude/skills/observables.md +28 -0
- package/.claude/skills/setup.md +14 -3
- package/.cursor/rules/joopjs.mdc +4 -5
- package/.github/copilot-instructions.md +3 -1
- package/.windsurf/rules/joopjs.md +4 -0
- package/CHANGELOG.md +31 -2
- package/README.md +19 -7
- package/ai-rules/AGENTS.md +21 -0
- package/ai-rules/GEMINI.md +17 -3
- package/dist/ai/index.js +15 -3
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/index.mjs +15 -3
- package/dist/ai/index.mjs.map +1 -1
- package/dist/analytics/index.js +10 -2
- package/dist/analytics/index.js.map +1 -1
- package/dist/analytics/index.mjs +10 -2
- package/dist/analytics/index.mjs.map +1 -1
- package/dist/angular/index.d.mts +98 -27
- package/dist/angular/index.d.ts +98 -27
- package/dist/angular/index.js +44 -0
- package/dist/angular/index.js.map +1 -1
- package/dist/angular/index.mjs +39 -1
- package/dist/angular/index.mjs.map +1 -1
- package/dist/api/index.js +15 -3
- package/dist/api/index.js.map +1 -1
- package/dist/api/index.mjs +15 -3
- package/dist/api/index.mjs.map +1 -1
- package/dist/auth/index.js +15 -3
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/index.mjs +15 -3
- package/dist/auth/index.mjs.map +1 -1
- package/dist/banking/index.js +15 -3
- package/dist/banking/index.js.map +1 -1
- package/dist/banking/index.mjs +15 -3
- package/dist/banking/index.mjs.map +1 -1
- package/dist/cache/index.js +15 -3
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/index.mjs +15 -3
- package/dist/cache/index.mjs.map +1 -1
- package/dist/{index-DFqEoX_l.d.ts → consent.service-CIHNtx9h.d.ts} +1 -2
- package/dist/{index-B_ksKpS1.d.mts → consent.service-DQ-JAEJx.d.mts} +1 -2
- package/dist/core/index.d.mts +34 -1
- package/dist/core/index.d.ts +34 -1
- package/dist/core/index.js +56 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +54 -6
- package/dist/core/index.mjs.map +1 -1
- package/dist/deeplink/index.js +15 -3
- package/dist/deeplink/index.js.map +1 -1
- package/dist/deeplink/index.mjs +15 -3
- package/dist/deeplink/index.mjs.map +1 -1
- package/dist/device/index.js +15 -3
- package/dist/device/index.js.map +1 -1
- package/dist/device/index.mjs +15 -3
- package/dist/device/index.mjs.map +1 -1
- package/dist/forms/index.js +15 -3
- package/dist/forms/index.js.map +1 -1
- package/dist/forms/index.mjs +15 -3
- package/dist/forms/index.mjs.map +1 -1
- package/dist/i18n/index.js +15 -3
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/index.mjs +15 -3
- package/dist/i18n/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +50 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +50 -8
- package/dist/index.mjs.map +1 -1
- package/dist/{joop-CA3DMeOO.d.ts → joop-Dim2yEKG.d.ts} +1 -1
- package/dist/{joop-Bx7Iwj5p.d.mts → joop-GkQw13f9.d.mts} +1 -1
- package/dist/native-bridge/index.js +10 -2
- package/dist/native-bridge/index.js.map +1 -1
- package/dist/native-bridge/index.mjs +10 -2
- package/dist/native-bridge/index.mjs.map +1 -1
- package/dist/network/index.js +15 -3
- package/dist/network/index.js.map +1 -1
- package/dist/network/index.mjs +15 -3
- package/dist/network/index.mjs.map +1 -1
- package/dist/observability/index.js +15 -3
- package/dist/observability/index.js.map +1 -1
- package/dist/observability/index.mjs +15 -3
- package/dist/observability/index.mjs.map +1 -1
- package/dist/pwa/index.js +15 -3
- package/dist/pwa/index.js.map +1 -1
- package/dist/pwa/index.mjs +15 -3
- package/dist/pwa/index.mjs.map +1 -1
- package/dist/react/index.d.mts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +15 -3
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +15 -3
- package/dist/react/index.mjs.map +1 -1
- package/dist/router/index.js +15 -3
- package/dist/router/index.js.map +1 -1
- package/dist/router/index.mjs +15 -3
- package/dist/router/index.mjs.map +1 -1
- package/dist/security/index.js +15 -3
- package/dist/security/index.js.map +1 -1
- package/dist/security/index.mjs +15 -3
- package/dist/security/index.mjs.map +1 -1
- package/dist/session/index.js +15 -3
- package/dist/session/index.js.map +1 -1
- package/dist/session/index.mjs +15 -3
- package/dist/session/index.mjs.map +1 -1
- package/dist/state/index.js +15 -3
- package/dist/state/index.js.map +1 -1
- package/dist/state/index.mjs +15 -3
- package/dist/state/index.mjs.map +1 -1
- package/dist/storage/index.js +15 -3
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/index.mjs +15 -3
- package/dist/storage/index.mjs.map +1 -1
- package/dist/sync/index.js +15 -3
- package/dist/sync/index.js.map +1 -1
- package/dist/sync/index.mjs +15 -3
- package/dist/sync/index.mjs.map +1 -1
- package/dist/theme/index.js +15 -3
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +15 -3
- package/dist/theme/index.mjs.map +1 -1
- package/dist/ui/index.js +15 -3
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +15 -3
- package/dist/ui/index.mjs.map +1 -1
- package/dist/utilities/index.js +46 -4
- package/dist/utilities/index.js.map +1 -1
- package/dist/utilities/index.mjs +46 -4
- package/dist/utilities/index.mjs.map +1 -1
- package/dist/vue/index.d.mts +2 -2
- package/dist/vue/index.d.ts +2 -2
- package/dist/vue/index.js +15 -3
- package/dist/vue/index.js.map +1 -1
- package/dist/vue/index.mjs +15 -3
- package/dist/vue/index.mjs.map +1 -1
- package/dist/workflow/index.js +15 -3
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/index.mjs +15 -3
- package/dist/workflow/index.mjs.map +1 -1
- package/package.json +16 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/utilities/common.utility.ts","../../src/utilities/device.utility.ts","../../src/utilities/sanitizer.utility.ts","../../src/utilities/connection.utility.ts","../../src/events/index.ts","../../src/utilities/clipboard.utility.ts","../../src/utilities/image.utility.ts","../../src/utilities/date.utility.ts","../../src/utilities/qr.utility.ts","../../src/utilities/barcode.utility.ts","../../src/utilities/pdf.utility.ts","../../src/utilities/notification.service.ts","../../src/utilities/geo.service.ts","../../src/utilities/media.service.ts","../../src/encryption/crypto-utils.ts","../../src/utilities/chart-data.utility.ts","../../src/utilities/watermark.service.ts","../../src/utilities/qr-scanner.ts"],"names":["_","window"],"mappings":"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AAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACxD,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","file":"index.mjs","sourcesContent":["/** Remove a trailing slash from a URL string. */\nexport function removeTrailingSlash(url: string): string {\n return url?.endsWith('/') ? url.slice(0, -1) : url;\n}\n\n/** Serialize a plain object to a URL-encoded query string. */\nexport function objectToQueryString(obj: Record<string, any>): string {\n return Object.entries(obj)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n}\n\n/** Deep-clone a JSON-serializable object. */\nexport function deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n\n/** Check if a value is a plain object (not an array, not null). */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Generate a random alphanumeric string of a given length. */\nexport function randomString(length: number, charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'): string {\n let result = '';\n for (let i = 0; i < length; i++) {\n result += charset[Math.floor(Math.random() * charset.length)];\n }\n return result;\n}\n\n/** Convert a string to its hex representation. */\nexport function stringToHex(input: string): string {\n let result = '';\n for (let i = 0; i < input.length; i++) {\n result += input.charCodeAt(i).toString(16).slice(-4);\n }\n return result;\n}\n\n/** Convert an ArrayBuffer to a lowercase hex string. */\nexport function bufferToHex(buffer: ArrayBuffer | Uint8Array): string {\n return [...new Uint8Array(buffer)]\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/** Serialize a nested object into flat form-data-style string segments. */\nexport function flattenObject(obj: Record<string, any>, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n if (isPlainObject(value)) {\n Object.assign(result, flattenObject(value as Record<string, any>, fullKey));\n } else {\n result[fullKey] = String(value);\n }\n }\n return result;\n}\n","export interface JoopDeviceInfo {\n userAgent: string;\n platform: string;\n isIOS: boolean;\n isAndroid: boolean;\n isMobile: boolean;\n isDesktop: boolean;\n language: string;\n}\n\nexport function getDeviceInfo(): JoopDeviceInfo {\n const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n const platform = typeof navigator !== 'undefined' ? navigator.platform ?? '' : '';\n const language = typeof navigator !== 'undefined' ? navigator.language ?? 'en' : 'en';\n\n const isIOS = /iphone|ipad|ipod/i.test(ua);\n const isAndroid = /android/i.test(ua);\n const isMobile = isIOS || isAndroid || /mobi/i.test(ua);\n\n return {\n userAgent: ua,\n platform,\n isIOS,\n isAndroid,\n isMobile,\n isDesktop: !isMobile,\n language,\n };\n}\n\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nexport function isSSR(): boolean {\n return !isBrowser();\n}\n","const SQL_KEYWORDS = /\\b(SELECT|INSERT|UPDATE|DELETE|DROP|TRUNCATE|ALTER|EXEC|UNION|SCRIPT)\\b/gi;\n\nexport function escapeHtml(input: string): string {\n return input\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nexport function stripHtml(input: string): string {\n return input.replace(/<[^>]*>/g, '');\n}\n\nexport function sanitizeInput(input: string): string {\n return escapeHtml(input.trim());\n}\n\nexport function stripSqlKeywords(input: string): string {\n return input.replace(/['\";\\\\]/g, '').replace(SQL_KEYWORDS, '');\n}\n\nexport function sanitizeFileName(name: string): string {\n return name.replace(/[^a-zA-Z0-9._\\-]/g, '_').replace(/_{2,}/g, '_');\n}\n\nexport function isValidUrl(url: string): boolean {\n try {\n const { protocol } = new URL(url);\n return protocol === 'http:' || protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nexport function isValidEmail(email: string): boolean {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/.test(email);\n}\n\nexport function isValidPhone(phone: string): boolean {\n return /^\\+?[\\d\\s\\-()]{7,20}$/.test(phone);\n}\n\nexport function isAlphanumeric(value: string): boolean {\n return /^[a-zA-Z0-9]+$/.test(value);\n}\n\nexport function truncate(value: string, maxLength: number, suffix = '…'): string {\n return value.length > maxLength ? value.slice(0, maxLength - suffix.length) + suffix : value;\n}\n","/** Recursively flatten a nested object — { a: { b: 1 } } → { 'a.b': 1 } */\nexport function flattenObj(\n obj: Record<string, unknown>,\n prefix = '',\n result: Record<string, string> = {},\n): Record<string, string> {\n for (const key of Object.keys(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n const val = obj[key];\n if (val !== null && typeof val === 'object' && !Array.isArray(val)) {\n flattenObj(val as Record<string, unknown>, fullKey, result);\n } else {\n result[fullKey] = val == null ? '' : String(val);\n }\n }\n return result;\n}\n\n/** Build a URL query string from a flat or nested object */\nexport function buildQueryString(\n params: Record<string, unknown>,\n encode = true,\n): string {\n const flat = flattenObj(params as Record<string, unknown>);\n return Object.entries(flat)\n .filter(([, v]) => v !== '')\n .map(([k, v]) => `${encode ? encodeURIComponent(k) : k}=${encode ? encodeURIComponent(v) : v}`)\n .join('&');\n}\n\n/** Build a FormData object from a flat or nested object, with optional file attachments */\nexport function buildFormData(\n params: Record<string, unknown>,\n files?: { field: string; file: File | Blob; name?: string }[],\n): FormData {\n const flat = flattenObj(params as Record<string, unknown>);\n const fd = new FormData();\n for (const [k, v] of Object.entries(flat)) {\n fd.append(k, v);\n }\n if (files) {\n for (const { field, file, name } of files) {\n if (name) {\n fd.append(field, file, name);\n } else {\n fd.append(field, file);\n }\n }\n }\n return fd;\n}\n\n/** Encode query params using encodeURIComponent — replaces space with %20 (not +) */\nexport function urlEncode(params: Record<string, string>): string {\n return Object.entries(params)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join('&');\n}\n\n/** Generate a random integer in [min, max] inclusive */\nexport function getRandomNum(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n","export type Unsubscribe = () => void;\nexport type Listener<T> = (value: T) => void;\n\n/**\n * Lightweight pub/sub subject — emits to all current subscribers.\n * Replaces RxJS Subject without pulling in the full RxJS dependency.\n */\nexport class JoopSubject<T> {\n private _listeners: Listener<T>[] = [];\n\n subscribe(listener: Listener<T>): Unsubscribe {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter(l => l !== listener);\n };\n }\n\n next(value: T): void {\n for (const listener of this._listeners) {\n listener(value);\n }\n }\n\n asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Stateful subject — replays the current value to any new subscriber immediately.\n * Replaces RxJS BehaviorSubject.\n */\nexport class JoopBehaviorSubject<T> extends JoopSubject<T> {\n private _value: T;\n\n constructor(initialValue: T) {\n super();\n this._value = initialValue;\n }\n\n getValue(): T {\n return this._value;\n }\n\n override next(value: T): void {\n this._value = value;\n super.next(value);\n }\n\n override subscribe(listener: Listener<T>): Unsubscribe {\n listener(this._value);\n return super.subscribe(listener);\n }\n\n override asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Read-only observable handle returned from asObservable().\n */\nexport class JoopObservable<T> {\n constructor(private _subscribeFn: (listener: Listener<T>) => Unsubscribe) {}\n\n subscribe(listener: Listener<T>): Unsubscribe {\n return this._subscribeFn(listener);\n }\n\n /** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */\n getOnce(): T | undefined {\n let result: T | undefined;\n const unsub = this.subscribe(v => { result = v; });\n unsub();\n return result;\n }\n}\n","import { JoopSubject } from '../events';\n\nexport type JoopClipboardEvent = { type: 'copy' | 'paste'; text: string };\n\nexport class JoopClipboardService {\n private _events$ = new JoopSubject<JoopClipboardEvent>();\n\n /** Copy text to clipboard. Falls back to execCommand for older browsers. */\n async copy(text: string): Promise<boolean> {\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n this._events$.next({ type: 'copy', text });\n return true;\n }\n return this._execCopy(text);\n } catch {\n return this._execCopy(text);\n }\n }\n\n /** Read text from clipboard */\n async paste(): Promise<string | null> {\n try {\n if (navigator?.clipboard?.readText) {\n const text = await navigator.clipboard.readText();\n this._events$.next({ type: 'paste', text });\n return text;\n }\n return null;\n } catch { return null; }\n }\n\n /** Copy a DOM element's innerText */\n async copyElement(elementOrId: HTMLElement | string): Promise<boolean> {\n const el = typeof elementOrId === 'string'\n ? document.getElementById(elementOrId)\n : elementOrId;\n return el ? this.copy(el.innerText ?? el.textContent ?? '') : false;\n }\n\n /** Observe copy/paste events */\n events$() { return this._events$.asObservable(); }\n\n private _execCopy(text: string): boolean {\n if (typeof document === 'undefined') return false;\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;top:-9999px;left:-9999px;opacity:0';\n document.body.appendChild(ta);\n ta.focus();\n ta.select();\n try {\n const ok = document.execCommand('copy');\n if (ok) this._events$.next({ type: 'copy', text });\n return ok;\n } finally {\n document.body.removeChild(ta);\n }\n }\n}\n\n/** Module-level singleton for quick use without instantiation */\nexport const clipboard = new JoopClipboardService();\n","export interface JoopImageInfo {\n width: number;\n height: number;\n size: number;\n type: string;\n name: string;\n aspectRatio: number;\n}\n\nexport interface JoopImageValidation {\n valid: boolean;\n errors: string[];\n}\n\nexport interface JoopCompressOptions {\n maxWidthOrHeight?: number;\n quality?: number; // 0–1, default 0.8\n outputType?: string; // e.g. 'image/jpeg'\n maxSizeBytes?: number;\n}\n\nexport class JoopImageService {\n /** Compress and optionally resize an image file */\n compress(file: File | Blob, options: JoopCompressOptions = {}): Promise<Blob> {\n const { maxWidthOrHeight = 1920, quality = 0.8, outputType = 'image/jpeg' } = options;\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(file);\n const img = new Image();\n img.onload = () => {\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n let { width, height } = img;\n if (width > maxWidthOrHeight || height > maxWidthOrHeight) {\n if (width > height) { height = Math.round(height * maxWidthOrHeight / width); width = maxWidthOrHeight; }\n else { width = Math.round(width * maxWidthOrHeight / height); height = maxWidthOrHeight; }\n }\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d')!.drawImage(img, 0, 0, width, height);\n canvas.toBlob(b => b ? resolve(b) : reject(new Error('compression failed')), outputType, quality);\n };\n img.onerror = reject;\n img.src = url;\n });\n }\n\n /** Resize to exact dimensions */\n resize(file: File | Blob, width: number, height: number, outputType = 'image/jpeg'): Promise<Blob> {\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(file);\n const img = new Image();\n img.onload = () => {\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n canvas.width = width; canvas.height = height;\n canvas.getContext('2d')!.drawImage(img, 0, 0, width, height);\n canvas.toBlob(b => b ? resolve(b) : reject(new Error('resize failed')), outputType, 0.9);\n };\n img.onerror = reject;\n img.src = url;\n });\n }\n\n /** Convert a blob to base64 data URL */\n toBase64(file: File | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n }\n\n /** Get image dimensions and metadata */\n getInfo(file: File): Promise<JoopImageInfo> {\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(file);\n const img = new Image();\n img.onload = () => {\n URL.revokeObjectURL(url);\n resolve({\n width: img.naturalWidth,\n height: img.naturalHeight,\n size: file.size,\n type: file.type,\n name: file instanceof File ? file.name : '',\n aspectRatio: parseFloat((img.naturalWidth / img.naturalHeight).toFixed(4)),\n });\n };\n img.onerror = reject;\n img.src = url;\n });\n }\n\n /** Validate an image against size/type/dimension constraints */\n async validate(\n file: File,\n options: { maxSizeBytes?: number; allowedTypes?: string[]; maxWidth?: number; maxHeight?: number; minWidth?: number; minHeight?: number } = {},\n ): Promise<JoopImageValidation> {\n const errors: string[] = [];\n if (options.maxSizeBytes && file.size > options.maxSizeBytes) {\n errors.push(`File too large: ${(file.size / 1024).toFixed(1)} KB exceeds ${(options.maxSizeBytes / 1024).toFixed(1)} KB`);\n }\n if (options.allowedTypes && !options.allowedTypes.includes(file.type)) {\n errors.push(`Invalid type: ${file.type}. Allowed: ${options.allowedTypes.join(', ')}`);\n }\n if (options.maxWidth || options.maxHeight || options.minWidth || options.minHeight) {\n try {\n const info = await this.getInfo(file);\n if (options.maxWidth && info.width > options.maxWidth) errors.push(`Width ${info.width}px exceeds max ${options.maxWidth}px`);\n if (options.maxHeight && info.height > options.maxHeight) errors.push(`Height ${info.height}px exceeds max ${options.maxHeight}px`);\n if (options.minWidth && info.width < options.minWidth) errors.push(`Width ${info.width}px below min ${options.minWidth}px`);\n if (options.minHeight && info.height < options.minHeight) errors.push(`Height ${info.height}px below min ${options.minHeight}px`);\n } catch { errors.push('Could not read image dimensions'); }\n }\n return { valid: errors.length === 0, errors };\n }\n\n /** Create thumbnail as data URL */\n async thumbnail(file: File | Blob, size = 128): Promise<string> {\n const thumb = await this.compress(file, { maxWidthOrHeight: size, quality: 0.7 });\n return this.toBase64(thumb);\n }\n}\n","// ── Gregorian / Business-day utilities ─────────────────────────────────────\n\nconst WEEKDAYS = [0, 6]; // Sunday, Saturday — override to [5, 6] for Fri/Sat (Gulf)\n\nexport interface JoopDateRangeResult { days: number; businessDays: number; }\n\nexport type JoopWeekend = [number, number]; // day-of-week indices (0=Sun, 6=Sat)\n\nexport function isBusinessDay(date: Date, holidays: Date[] = [], weekend: JoopWeekend = [0, 6]): boolean {\n const dow = date.getDay();\n if (weekend.includes(dow)) return false;\n const iso = _toIso(date);\n return !holidays.some(h => _toIso(h) === iso);\n}\n\nexport function addBusinessDays(date: Date, days: number, holidays: Date[] = [], weekend: JoopWeekend = [0, 6]): Date {\n const d = new Date(date);\n let remaining = Math.abs(days);\n const step = days >= 0 ? 1 : -1;\n while (remaining > 0) {\n d.setDate(d.getDate() + step);\n if (isBusinessDay(d, holidays, weekend)) remaining--;\n }\n return d;\n}\n\nexport function getBusinessDaysBetween(start: Date, end: Date, holidays: Date[] = [], weekend: JoopWeekend = [0, 6]): number {\n const s = new Date(Math.min(start.getTime(), end.getTime()));\n const e = new Date(Math.max(start.getTime(), end.getTime()));\n let count = 0;\n const cur = new Date(s);\n cur.setDate(cur.getDate() + 1);\n while (cur <= e) {\n if (isBusinessDay(cur, holidays, weekend)) count++;\n cur.setDate(cur.getDate() + 1);\n }\n return count;\n}\n\nexport function daysBetween(a: Date, b: Date): number {\n return Math.round(Math.abs(b.getTime() - a.getTime()) / 86_400_000);\n}\n\nexport function isDateInRange(date: Date, start: Date, end: Date): boolean {\n return date >= start && date <= end;\n}\n\nexport function isExpired(date: Date): boolean { return date < new Date(); }\n\nexport function startOfDay(date: Date): Date {\n const d = new Date(date); d.setHours(0, 0, 0, 0); return d;\n}\nexport function endOfDay(date: Date): Date {\n const d = new Date(date); d.setHours(23, 59, 59, 999); return d;\n}\nexport function startOfMonth(date: Date): Date { return new Date(date.getFullYear(), date.getMonth(), 1); }\nexport function endOfMonth(date: Date): Date { return new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59, 999); }\n\nexport function parseDate(value: string | number): Date | null {\n if (!value) return null;\n const d = new Date(value);\n return isNaN(d.getTime()) ? null : d;\n}\n\nexport function formatDate(date: Date, format: string, locale = 'en-US'): string {\n const p: Record<string, string> = {\n YYYY: String(date.getFullYear()),\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n DD: String(date.getDate()).padStart(2, '0'),\n HH: String(date.getHours()).padStart(2, '0'),\n mm: String(date.getMinutes()).padStart(2, '0'),\n ss: String(date.getSeconds()).padStart(2, '0'),\n M: String(date.getMonth() + 1),\n D: String(date.getDate()),\n // locale-aware month name\n MMM: date.toLocaleDateString(locale, { month: 'short' }),\n MMMM: date.toLocaleDateString(locale, { month: 'long' }),\n };\n return format.replace(/MMMM|MMM|YYYY|MM|DD|HH|mm|ss|M|D/g, k => p[k] ?? k);\n}\n\n// ── Hijri (Islamic / Umm Al-Qura approximation) ────────────────────────────\n\nexport interface JoopHijriDate { year: number; month: number; day: number; monthName: string; }\n\nconst HIJRI_MONTHS = [\n 'Muharram','Safar','Rabi al-Awwal','Rabi al-Thani',\n 'Jumada al-Awwal','Jumada al-Thani','Rajab','Sha\\'ban',\n 'Ramadan','Shawwal','Dhu al-Qi\\'dah','Dhu al-Hijjah',\n];\n\n/** Convert Gregorian date to Hijri (algorithmic approximation — accurate ±1 day) */\nexport function toHijri(date: Date): JoopHijriDate {\n const jd = _toJulian(date.getFullYear(), date.getMonth() + 1, date.getDate());\n let l = jd - 1948440 + 10632;\n const n = Math.floor((l - 1) / 10631);\n l = l - 10631 * n + 354;\n const j = Math.floor((10985 - l) / 5316) * Math.floor((50 * l) / 17719) +\n Math.floor(l / 5670) * Math.floor((43 * l) / 15238);\n l = l - Math.floor((30 - j) / 15) * Math.floor((17719 * j) / 50) -\n Math.floor(j / 16) * Math.floor((15238 * j) / 43) + 29;\n const month = Math.floor((24 * l) / 709);\n const day = l - Math.floor((709 * month) / 24);\n const year = 30 * n + j - 30;\n return { year, month, day, monthName: HIJRI_MONTHS[month - 1] ?? '' };\n}\n\n/** Convert Hijri date back to Gregorian */\nexport function fromHijri(year: number, month: number, day: number): Date {\n const jd = Math.floor((11 * year + 3) / 30) + 354 * year + 30 * month -\n Math.floor((month - 1) / 2) + day + 1948440 - 385;\n return _fromJulian(jd);\n}\n\nexport function formatHijri(date: JoopHijriDate, includeMonthName = true): string {\n const d = String(date.day).padStart(2, '0');\n const m = String(date.month).padStart(2, '0');\n return includeMonthName\n ? `${d} ${date.monthName} ${date.year} AH`\n : `${d}/${m}/${date.year}`;\n}\n\nexport function getHijriMonthName(month: number): string { return HIJRI_MONTHS[month - 1] ?? ''; }\n\n// ── Relative time ─────────────────────────────────────────────────────────\n\nexport function timeAgo(date: Date, locale = 'en'): string {\n const diff = Date.now() - date.getTime();\n const abs = Math.abs(diff);\n const future = diff < 0;\n const pre = future ? 'in ' : '';\n const suf = future ? '' : ' ago';\n if (abs < 60_000) return 'just now';\n if (abs < 3_600_000) return `${pre}${Math.floor(abs / 60_000)}m${suf}`;\n if (abs < 86_400_000) return `${pre}${Math.floor(abs / 3_600_000)}h${suf}`;\n if (abs < 2_592_000_000) return `${pre}${Math.floor(abs / 86_400_000)}d${suf}`;\n return formatDate(date, 'DD MMM YYYY', locale);\n}\n\n// ── Private helpers ─────────────────────────────────────────────────────────\n\nfunction _toIso(date: Date): string { return date.toISOString().slice(0, 10); }\n\nfunction _toJulian(y: number, m: number, d: number): number {\n if (m <= 2) { y--; m += 12; }\n const A = Math.floor(y / 100);\n const B = 2 - A + Math.floor(A / 4);\n return Math.floor(365.25 * (y + 4716)) + Math.floor(30.6001 * (m + 1)) + d + B - 1524;\n}\n\nfunction _fromJulian(jd: number): Date {\n const z = Math.floor(jd + 0.5);\n const a = Math.floor((z - 1867216.25) / 36524.25);\n const A = z + 1 + a - Math.floor(a / 4);\n const B = A + 1524;\n const C = Math.floor((B - 122.1) / 365.25);\n const D = Math.floor(365.25 * C);\n const E = Math.floor((B - D) / 30.6001);\n const day = B - D - Math.floor(30.6001 * E);\n const month = E < 14 ? E - 1 : E - 13;\n const year = month > 2 ? C - 4716 : C - 4715;\n return new Date(year, month - 1, day);\n}\n","// QR code generator — ISO 18004, versions 1-10, byte encoding\n// Pure TypeScript/SVG — no DOM required for generation\n\nexport type JoopQrEcLevel = 'L' | 'M' | 'Q' | 'H';\n\nexport interface JoopQrOptions {\n ecLevel?: JoopQrEcLevel;\n size?: number;\n margin?: number;\n foreground?: string;\n background?: string;\n}\n\n// ── GF(256) ─────────────────────────────────────────────────────────────────\nconst _GFe = new Uint8Array(512), _GFl = new Uint8Array(256);\n(function () {\n let x = 1;\n for (let i = 0; i < 255; i++) { _GFe[i] = x; _GFl[x] = i; x = x << 1; if (x & 0x100) x ^= 0x11d; }\n for (let i = 255; i < 512; i++) _GFe[i] = _GFe[i - 255];\n})();\nconst _gm = (a: number, b: number) => a && b ? _GFe[(_GFl[a] + _GFl[b]) % 255] : 0;\n\nfunction _gen(n: number): number[] {\n let g = [1];\n for (let i = 0; i < n; i++) {\n const next = new Array(g.length + 1).fill(0);\n for (let j = 0; j < g.length; j++) { next[j] ^= g[j]; next[j + 1] ^= _gm(g[j], _GFe[i]); }\n g = next;\n }\n return g;\n}\n\nfunction _rsEnc(data: number[], nec: number): number[] {\n const g = _gen(nec);\n const msg = [...data, ...new Array(nec).fill(0)];\n for (let i = 0; i < data.length; i++) {\n const c = msg[i];\n if (c) for (let j = 0; j < g.length; j++) msg[i + j] ^= _gm(g[j], c);\n }\n return msg.slice(data.length);\n}\n\n// ── Version tables ───────────────────────────────────────────────────────────\n// [ecPerBlock, [[count, dataPerBlock], ...]]\ntype ECD = [number, Array<[number, number]>];\ninterface VD { aln: number[]; L: ECD; M: ECD; Q: ECD; H: ECD; }\n\nconst VT: VD[] = [\n { aln:[], L:[7,[[1,19]]], M:[10,[[1,16]]], Q:[13,[[1,13]]], H:[17,[[1,9]]] },\n { aln:[6,18], L:[10,[[1,34]]], M:[16,[[1,28]]], Q:[22,[[1,22]]], H:[28,[[1,16]]] },\n { aln:[6,22], L:[15,[[1,55]]], M:[26,[[1,44]]], Q:[18,[[2,17]]], H:[22,[[2,13]]] },\n { aln:[6,26], L:[20,[[1,80]]], M:[18,[[2,32]]], Q:[26,[[2,24]]], H:[16,[[4,9]]] },\n { aln:[6,30], L:[26,[[1,108]]], M:[24,[[2,43]]], Q:[18,[[2,15],[2,16]]], H:[22,[[2,11],[2,12]]] },\n { aln:[6,34], L:[18,[[2,68]]], M:[16,[[4,27]]], Q:[24,[[4,19]]], H:[28,[[4,15]]] },\n { aln:[6,22,38],L:[20,[[2,78]]], M:[18,[[4,31]]], Q:[18,[[2,14],[4,15]]], H:[26,[[4,13],[1,14]]] },\n { aln:[6,24,42],L:[24,[[2,97]]], M:[22,[[2,38],[2,39]]], Q:[22,[[4,18],[2,19]]], H:[26,[[4,14],[2,15]]] },\n { aln:[6,26,46],L:[30,[[2,116]]],M:[22,[[3,36],[2,37]]], Q:[20,[[4,16],[4,17]]], H:[24,[[4,12],[4,13]]] },\n { aln:[6,28,50],L:[18,[[2,68],[2,69]]],M:[26,[[4,43],[1,44]]],Q:[24,[[6,19],[2,20]]],H:[28,[[6,15],[2,16]]] },\n];\nconst ECI: Record<JoopQrEcLevel, number> = { L:1, M:0, Q:3, H:2 };\n\nfunction _cap(v: number, ec: JoopQrEcLevel) { return VT[v-1][ec][1].reduce((s,[c,d]) => s + c*d, 0); }\n\nfunction _bestV(len: number, ec: JoopQrEcLevel): number {\n for (let v = 1; v <= 10; v++) if (_cap(v, ec) >= len + 3) return v;\n throw new Error(`JoopQr: text too long (${len} bytes) for versions 1-10`);\n}\n\n// ── Encode data ──────────────────────────────────────────────────────────────\nfunction _encData(text: string, ver: number, ec: JoopQrEcLevel): number[] {\n const bytes = new TextEncoder().encode(text);\n const total = _cap(ver, ec);\n const bits: number[] = [];\n const push = (v: number, n: number) => { for (let i = n-1; i >= 0; i--) bits.push((v >> i) & 1); };\n push(0b0100, 4);\n push(bytes.length, 8);\n for (const b of bytes) push(b, 8);\n push(0, Math.min(4, total * 8 - bits.length));\n while (bits.length % 8) bits.push(0);\n const cw: number[] = [];\n for (let i = 0; i < bits.length; i += 8) { let b = 0; for (let j = 0; j < 8; j++) b = (b << 1) | (bits[i+j] ?? 0); cw.push(b); }\n const pad = [0xec, 0x11];\n while (cw.length < total) cw.push(pad[cw.length % 2]);\n return cw;\n}\n\n// ── Interleave + RS ──────────────────────────────────────────────────────────\nfunction _buildCW(data: number[], ver: number, ec: JoopQrEcLevel): number[] {\n const [ecpb, groups] = VT[ver-1][ec];\n const db: number[][] = [], eb: number[][] = [];\n let di = 0;\n for (const [cnt, dpb] of groups) for (let b = 0; b < cnt; b++) { const bl = data.slice(di, di+dpb); di += dpb; db.push(bl); eb.push(_rsEnc(bl, ecpb)); }\n const r: number[] = [];\n const md = Math.max(...db.map(b => b.length));\n for (let i = 0; i < md; i++) for (const b of db) if (i < b.length) r.push(b[i]);\n for (let i = 0; i < ecpb; i++) for (const b of eb) r.push(b[i]);\n return r;\n}\n\n// ── Matrix ───────────────────────────────────────────────────────────────────\ntype Mat = Int8Array[];\nfunction _mat(sz: number): Mat { return Array.from({length:sz}, () => new Int8Array(sz).fill(-1)); }\n\nfunction _finder(m: Mat, r: number, c: number): void {\n for (let dr = -1; dr <= 7; dr++) for (let dc = -1; dc <= 7; dc++) {\n const row = r+dr, col = c+dc;\n if (row < 0 || col < 0 || row >= m.length || col >= m.length) continue;\n const inF = dr>=0&&dr<=6&&dc>=0&&dc<=6;\n m[row][col] = inF ? ((dr===0||dr===6||dc===0||dc===6||( dr>=2&&dr<=4&&dc>=2&&dc<=4))?1:0) : 0;\n }\n}\n\nfunction _align(m: Mat, r: number, c: number): void {\n for (let dr = -2; dr <= 2; dr++) for (let dc = -2; dc <= 2; dc++) {\n m[r+dr][c+dc] = (Math.abs(dr)===2||Math.abs(dc)===2||(dr===0&&dc===0)) ? 1 : 0;\n }\n}\n\nfunction _funcPat(m: Mat, ver: number): void {\n const sz = m.length;\n _finder(m, 0, 0); _finder(m, 0, sz-7); _finder(m, sz-7, 0);\n for (let i = 8; i < sz-8; i++) { if (m[6][i]===-1) m[6][i]=i%2?0:1; if (m[i][6]===-1) m[i][6]=i%2?0:1; }\n const aln = VT[ver-1].aln;\n for (const r of aln) for (const c of aln) if (m[r][c]===-1) _align(m, r, c);\n m[4*ver+9][8] = 1;\n for (let i = 0; i <= 8; i++) { if (m[8][i]===-1) m[8][i]=0; if (m[i][8]===-1) m[i][8]=0; }\n for (let i = sz-8; i < sz; i++) { if (m[8][i]===-1) m[8][i]=0; if (m[i][8]===-1) m[i][8]=0; }\n}\n\nfunction _placeData(m: Mat, cw: number[]): void {\n const sz = m.length;\n const bits: number[] = [];\n for (const b of cw) for (let i = 7; i >= 0; i--) bits.push((b>>i)&1);\n let bi = 0, up = true;\n for (let col = sz-1; col >= 1; col -= 2) {\n if (col===6) col--;\n for (let ri = 0; ri < sz; ri++) {\n const row = up ? sz-1-ri : ri;\n for (let dc = 0; dc < 2; dc++) { const c = col-dc; if (m[row][c]===-1) m[row][c] = bi < bits.length ? bits[bi++] : 0; }\n }\n up = !up;\n }\n}\n\n// ── Masking ──────────────────────────────────────────────────────────────────\nconst MFN: Array<(r:number,c:number)=>boolean> = [\n (r,c)=>(r+c)%2===0, (r)=>r%2===0, (_,c)=>c%3===0, (r,c)=>(r+c)%3===0,\n (r,c)=>(Math.floor(r/2)+Math.floor(c/3))%2===0,\n (r,c)=>(r*c)%2+(r*c)%3===0, (r,c)=>((r*c)%2+(r*c)%3)%2===0, (r,c)=>((r+c)%2+(r*c)%3)%2===0,\n];\n\nfunction _mask(m: Mat, pat: number, isF: boolean[][]): Mat {\n const sz = m.length;\n const copy: Mat = m.map(r => new Int8Array(r));\n const fn = MFN[pat];\n for (let r = 0; r < sz; r++) for (let c = 0; c < sz; c++) if (!isF[r][c] && copy[r][c]!==-1) if (fn(r,c)) copy[r][c] ^= 1;\n return copy;\n}\n\nfunction _pen(m: Mat): number {\n const sz = m.length; let p = 0;\n for (let r = 0; r < sz; r++) for (const hor of [true,false]) {\n let run=1, prev = hor?m[r][0]:m[0][r];\n for (let i = 1; i < sz; i++) { const cur=hor?m[r][i]:m[i][r]; if(cur===prev){run++;if(run===5)p+=3;else if(run>5)p++;}else{run=1;prev=cur;} }\n }\n for (let r = 0; r < sz-1; r++) for (let c = 0; c < sz-1; c++) { const v=m[r][c]; if(v===m[r][c+1]&&v===m[r+1][c]&&v===m[r+1][c+1])p+=3; }\n let dark=0; for (let r=0;r<sz;r++) for (let c=0;c<sz;c++) if(m[r][c]) dark++;\n p += Math.abs(Math.floor(dark/(sz*sz)*20)-10)*10;\n return p;\n}\n\n// ── Format info ──────────────────────────────────────────────────────────────\nfunction _fmtBits(ec: JoopQrEcLevel, mask: number): number {\n const data = (ECI[ec] << 3) | mask;\n let rem = data << 10;\n for (let i = 14; i >= 10; i--) if (rem & (1<<i)) rem ^= (0x537 << (i-10));\n return ((data << 10) | rem) ^ 0x5412;\n}\n\nfunction _placeFmt(m: Mat, fmt: number): void {\n const sz = m.length;\n const bits: number[] = [];\n for (let i = 14; i >= 0; i--) bits.push((fmt>>i)&1);\n let bi = 0;\n for (let c = 0; c <= 5; c++) m[8][c]=bits[bi++];\n m[8][7]=bits[bi++]; m[8][8]=bits[bi++]; m[7][8]=bits[bi++];\n for (let r = 5; r >= 0; r--) m[r][8]=bits[bi++];\n bi = 0;\n for (let r = sz-1; r >= sz-7; r--) m[r][8]=bits[bi++];\n m[8][sz-8]=bits[bi++];\n for (let c = sz-7; c < sz; c++) m[8][c]=bits[bi++];\n}\n\n// ── SVG output ───────────────────────────────────────────────────────────────\nfunction _svg(m: Mat, o: Required<JoopQrOptions>): string {\n const sz = m.length, tot = sz + 2*o.margin, mod = o.size / tot;\n let rects = '';\n for (let r = 0; r < sz; r++) for (let c = 0; c < sz; c++) {\n if (m[r][c]===1) {\n const x = ((c+o.margin)*mod).toFixed(2), y = ((r+o.margin)*mod).toFixed(2), s = (mod+0.1).toFixed(2);\n rects += `<rect x=\"${x}\" y=\"${y}\" width=\"${s}\" height=\"${s}\"/>`;\n }\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${o.size} ${o.size}\" shape-rendering=\"crispEdges\"><rect width=\"${o.size}\" height=\"${o.size}\" fill=\"${o.background}\"/><g fill=\"${o.foreground}\">${rects}</g></svg>`;\n}\n\n// ── Public API ───────────────────────────────────────────────────────────────\n\n/** Generate a QR code SVG string */\nexport function generateQr(text: string, options: JoopQrOptions = {}): string {\n const ec = options.ecLevel ?? 'M';\n const opts: Required<JoopQrOptions> = {\n ecLevel: ec, size: options.size ?? 300, margin: options.margin ?? 4,\n foreground: options.foreground ?? '#000000', background: options.background ?? '#ffffff',\n };\n const bytes = new TextEncoder().encode(text);\n const ver = _bestV(bytes.length, ec);\n const sz = 4*ver + 17;\n\n const dataCW = _encData(text, ver, ec);\n const allCW = _buildCW(dataCW, ver, ec);\n const m = _mat(sz);\n _funcPat(m, ver);\n\n const isF = Array.from({length:sz}, (_, r) => Array.from({length:sz}, (_, c) => m[r][c] !== -1));\n _placeData(m, allCW);\n\n let bm = 0, bp = Infinity;\n for (let mp = 0; mp < 8; mp++) {\n const masked = _mask(m, mp, isF);\n _placeFmt(masked, _fmtBits(ec, mp));\n const pen = _pen(masked);\n if (pen < bp) { bp = pen; bm = mp; }\n }\n\n const final = _mask(m, bm, isF);\n _placeFmt(final, _fmtBits(ec, bm));\n return _svg(final, opts);\n}\n\n/** Generate a QR code as a base64 SVG data URL */\nexport function generateQrDataUrl(text: string, options: JoopQrOptions = {}): string {\n const svg = generateQr(text, options);\n return 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)));\n}\n\n/** Generate QR for a payment (wraps text with standard payment URI) */\nexport function generatePaymentQr(amount: number, currency: string, reference: string, options?: JoopQrOptions): string {\n const uri = `payment:${currency}:${amount}:${reference}`;\n return generateQr(uri, options);\n}\n","// Code 128B and EAN-13 SVG barcode generators — zero dependencies\n\nexport interface JoopBarcodeOptions {\n width?: number;\n height?: number;\n margin?: number;\n foreground?: string;\n background?: string;\n showText?: boolean;\n fontSize?: number;\n}\n\n// ── Code 128B ────────────────────────────────────────────────────────────────\n\n// Each symbol: 6 elements (3 bars + 3 spaces) of widths 1–4 modules, encoded as a string\n// Quiet zone: 10 modules each side. Start: 11010000100. Stop: 1100011101011.\nconst C128_SYMBOLS = [\n '11011001100','11001101100','11001100110','10010011000','10010001100',\n '10001001100','10011001000','10011000100','10001100100','11001001000',\n '11001000100','11000100100','10110011100','10011011100','10011001110',\n '10111001100','10011101100','10011100110','11001110010','11001011100',\n '11001001110','11011100100','11001110100','11101101110','11101001100',\n '11100101100','11100100110','11101100100','11100110100','11100110010',\n '11011011000','11011000110','11000110110','10100011000','10001011000',\n '10001000110','10110001000','10001101000','10001100010','11010001000',\n '11000101000','11000100010','10110111000','10110001110','10001101110',\n '10111011000','10111000110','10001110110','11101110110','11010001110',\n '11000101110','11011101000','11011100010','11011101110','11101011000',\n '11101000110','11100010110','11101101000','11101100010','11100011010',\n '11101111010','11001000010','11110001010','10100110000','10100001100',\n '10010110000','10010000110','10000101100','10000100110','10110010000',\n '10110000100','10011010000','10011000010','10000110100','10000110010',\n '11000010010','11001010000','11110111010','11000010100','10001111010',\n '10100111100','10010111100','10010011110','10111100100','10011110100',\n '10011110010','11110100100','11110010100','11110010010','11011011110',\n '11011110110','11110110110','10101111000','10100011110','10001011110',\n '10111101000','10111100010','11110101000','11110100010','10111011110',\n '10111101110','11101011110','11110101110','11010000100','11010010000',\n '11010011100','11000111010',\n];\nconst C128_START_B = '11010010000';\nconst C128_STOP = '11000111010';\n\nfunction _code128Bars(text: string): string {\n const codes: number[] = [];\n let checksum = 104; // START B value\n for (let i = 0; i < text.length; i++) {\n const v = text.charCodeAt(i) - 32;\n if (v < 0 || v > 95) throw new Error(`Code128: unsupported char '${text[i]}'`);\n codes.push(v);\n checksum += v * (i + 1);\n }\n codes.push(checksum % 103);\n return C128_START_B + codes.map(c => C128_SYMBOLS[c]).join('') + C128_STOP + '11';\n}\n\nexport function generateCode128(text: string, opts: JoopBarcodeOptions = {}): string {\n const bars = _code128Bars(text);\n const mw = opts.width ? Math.floor((opts.width - 2 * (opts.margin ?? 10)) / bars.length) : 2;\n const margin = opts.margin ?? 10;\n const barH = (opts.height ?? 80) - (opts.showText !== false ? (opts.fontSize ?? 12) + 4 : 0) - margin;\n const totalW = bars.length * mw + margin * 2;\n const totalH = opts.height ?? 80;\n const fg = opts.foreground ?? '#000000';\n const bg = opts.background ?? '#ffffff';\n\n let rects = '';\n for (let i = 0; i < bars.length; i++) {\n if (bars[i] === '1') rects += `<rect x=\"${margin + i * mw}\" y=\"${margin}\" width=\"${mw}\" height=\"${barH}\" fill=\"${fg}\"/>`;\n }\n\n const label = opts.showText !== false\n ? `<text x=\"${totalW / 2}\" y=\"${totalH - 2}\" text-anchor=\"middle\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 12}\" fill=\"${fg}\">${text}</text>`\n : '';\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalW}\" height=\"${totalH}\" viewBox=\"0 0 ${totalW} ${totalH}\"><rect width=\"${totalW}\" height=\"${totalH}\" fill=\"${bg}\"/>${rects}${label}</svg>`;\n}\n\n// ── EAN-13 ────────────────────────────────────────────────────────────────────\n\nconst EAN_L = ['0001101','0011001','0010011','0111101','0100011','0110001','0101111','0111011','0110111','0001011'];\nconst EAN_G = ['0100111','0110011','0011011','0100001','0011101','0111001','0000101','0010001','0001001','0010111'];\nconst EAN_R = ['1110010','1100110','1101100','1000010','1011100','1001110','1010000','1000100','1001000','1110100'];\n// Parity table: 0=L, 1=G for left side digits 1-6 based on first digit\nconst EAN_PARITY = ['LLLLLL','LLGLGG','LLGGLG','LLGGGL','LGLLGG','LGGLLG','LGGGLL','LGLGLG','LGLGGL','LGGLGL'];\n\nfunction _ean13Bars(digits: string): string {\n if (!/^\\d{13}$/.test(digits)) throw new Error('EAN-13: need exactly 13 digits');\n const d = digits.split('').map(Number);\n const parity = EAN_PARITY[d[0]];\n let bars = '101'; // left guard\n for (let i = 0; i < 6; i++) bars += parity[i] === 'G' ? EAN_G[d[i+1]] : EAN_L[d[i+1]];\n bars += '01010'; // center guard\n for (let i = 7; i < 13; i++) bars += EAN_R[d[i]];\n bars += '101'; // right guard\n return bars;\n}\n\nexport function validateEan13(digits: string): boolean {\n if (!/^\\d{12,13}$/.test(digits)) return false;\n const d = digits.slice(0, 12).split('').map(Number);\n const check = (10 - ((d.reduce((s, v, i) => s + (i % 2 === 0 ? v : v * 3), 0)) % 10)) % 10;\n return digits.length === 12 ? true : check === Number(digits[12]);\n}\n\nexport function generateEan13(digits: string, opts: JoopBarcodeOptions = {}): string {\n const bars = _ean13Bars(digits);\n const mw = 2;\n const margin = opts.margin ?? 10;\n const barH = (opts.height ?? 70) - (opts.showText !== false ? (opts.fontSize ?? 12) + 4 : 0) - margin;\n const totalW = bars.length * mw + margin * 2 + 8; // +8 for first-digit label\n const totalH = opts.height ?? 70;\n const fg = opts.foreground ?? '#000000';\n const bg = opts.background ?? '#ffffff';\n\n let rects = '';\n const xOff = margin + 8;\n for (let i = 0; i < bars.length; i++) {\n if (bars[i] === '1') rects += `<rect x=\"${xOff + i * mw}\" y=\"${margin}\" width=\"${mw}\" height=\"${barH}\" fill=\"${fg}\"/>`;\n }\n\n const label = opts.showText !== false\n ? `<text x=\"${margin}\" y=\"${margin + barH - 2}\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 10}\" fill=\"${fg}\">${digits[0]}</text><text x=\"${totalW / 2}\" y=\"${totalH - 2}\" text-anchor=\"middle\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 10}\" fill=\"${fg}\">${digits.slice(1, 7)} ${digits.slice(7)}</text>`\n : '';\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalW}\" height=\"${totalH}\" viewBox=\"0 0 ${totalW} ${totalH}\"><rect width=\"${totalW}\" height=\"${totalH}\" fill=\"${bg}\"/>${rects}${label}</svg>`;\n}\n\n// ── Code 39 (alphanumeric, simpler) ──────────────────────────────────────────\n\nconst C39_MAP: Record<string, string> = {\n '0':'101001101101','1':'110100101011','2':'101100101011','3':'110110010101',\n '4':'101001101011','5':'110100110101','6':'101100110101','7':'101001011011',\n '8':'110100101101','9':'101100101101','A':'110101001011','B':'101101001011',\n 'C':'110110100101','D':'101011001011','E':'110101100101','F':'101101100101',\n 'G':'101010011011','H':'110101001101','I':'101101001101','J':'101011001101',\n 'K':'110101010011','L':'101101010011','M':'110110101001','N':'101011010011',\n 'O':'110101101001','P':'101101101001','Q':'101010110011','R':'110101011001',\n 'S':'101101011001','T':'101011011001','U':'110010101011','V':'100110101011',\n 'W':'110011010101','X':'100101101011','Y':'110010110101','Z':'100110110101',\n '-':'100101011011','.':'110010101101',' ':'100110101101','*':'100101101101',\n};\n\nexport function generateCode39(text: string, opts: JoopBarcodeOptions = {}): string {\n const upper = text.toUpperCase();\n const barsStr = ['*', ...upper.split(''), '*'].map(c => {\n if (!C39_MAP[c]) throw new Error(`Code39: unsupported char '${c}'`);\n return C39_MAP[c];\n }).join('0'); // narrow space between symbols\n\n const mw = 2;\n const margin = opts.margin ?? 10;\n const barH = (opts.height ?? 70) - (opts.showText !== false ? (opts.fontSize ?? 12) + 4 : 0) - margin;\n const totalW = barsStr.length * mw + margin * 2;\n const totalH = opts.height ?? 70;\n const fg = opts.foreground ?? '#000000';\n const bg = opts.background ?? '#ffffff';\n\n let rects = '';\n for (let i = 0; i < barsStr.length; i++) {\n if (barsStr[i] === '1') rects += `<rect x=\"${margin + i * mw}\" y=\"${margin}\" width=\"${mw}\" height=\"${barH}\" fill=\"${fg}\"/>`;\n }\n const label = opts.showText !== false\n ? `<text x=\"${totalW / 2}\" y=\"${totalH - 2}\" text-anchor=\"middle\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 12}\" fill=\"${fg}\">${text}</text>`\n : '';\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalW}\" height=\"${totalH}\" viewBox=\"0 0 ${totalW} ${totalH}\"><rect width=\"${totalW}\" height=\"${totalH}\" fill=\"${bg}\"/>${rects}${label}</svg>`;\n}\n\nexport function generateBarcodeDataUrl(svg: string): string {\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n}\n","// Minimal PDF 1.4 writer — generates valid PDFs with text, lines, and tables.\n// No external dependencies. Coordinate origin: top-left (Y increases downward).\n\nexport interface JoopPdfTextOptions {\n font?: 'Helvetica' | 'Helvetica-Bold' | 'Times-Roman' | 'Courier';\n size?: number;\n color?: [number, number, number]; // RGB 0-1\n}\n\nexport interface JoopPdfLineOptions {\n width?: number;\n color?: [number, number, number];\n dash?: [number, number];\n}\n\nexport interface JoopPdfTableColumn {\n header: string;\n key: string;\n width: number;\n align?: 'left' | 'right' | 'center';\n}\n\nexport interface JoopPdfOptions {\n pageWidth?: number;\n pageHeight?: number;\n margin?: number;\n}\n\nexport interface JoopReceiptLine {\n label: string;\n value: string;\n bold?: boolean;\n}\n\nconst PT = { W: 595.28, H: 841.89 }; // A4 in points\n\nclass _PdfBuilder {\n private _objs: string[] = [];\n private _offsets: number[] = [];\n private _stream = '';\n private _pw: number;\n private _ph: number;\n private _fonts = new Set<string>();\n\n constructor(w = PT.W, h = PT.H) { this._pw = w; this._ph = h; }\n\n private _addObj(body: string): number {\n const id = this._objs.length + 1;\n this._objs.push(body);\n return id;\n }\n\n private _y(y: number): number { return this._ph - y; } // flip Y axis\n\n text(x: number, y: number, content: string, opts: JoopPdfTextOptions = {}): this {\n const font = opts.font ?? 'Helvetica';\n const size = opts.size ?? 10;\n const [r, g, b] = opts.color ?? [0, 0, 0];\n this._fonts.add(font);\n const safe = content.replace(/\\\\/g, '\\\\\\\\').replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)');\n this._stream += `BT\\n/${font.replace('-', '')} ${size} Tf\\n${r} ${g} ${b} rg\\n${x} ${this._y(y) - size} Td\\n(${safe}) Tj\\nET\\n`;\n return this;\n }\n\n line(x1: number, y1: number, x2: number, y2: number, opts: JoopPdfLineOptions = {}): this {\n const [r, g, b] = opts.color ?? [0, 0, 0];\n const w = opts.width ?? 0.5;\n const dash = opts.dash ? `[${opts.dash[0]} ${opts.dash[1]}] 0 d\\n` : '[] 0 d\\n';\n this._stream += `${r} ${g} ${b} RG\\n${w} w\\n${dash}${x1} ${this._y(y1)} m\\n${x2} ${this._y(y2)} l\\nS\\n`;\n return this;\n }\n\n rect(x: number, y: number, w: number, h: number, fill?: [number, number, number], stroke?: [number, number, number]): this {\n if (fill) this._stream += `${fill[0]} ${fill[1]} ${fill[2]} rg\\n${x} ${this._y(y) - h} ${w} ${h} re\\nf\\n`;\n if (stroke) this._stream += `${stroke[0]} ${stroke[1]} ${stroke[2]} RG\\n${x} ${this._y(y) - h} ${w} ${h} re\\nS\\n`;\n return this;\n }\n\n table(x: number, y: number, cols: JoopPdfTableColumn[], rows: Record<string, string>[], opts: { rowHeight?: number; headerBg?: [number, number, number]; fontSize?: number } = {}): number {\n const rh = opts.rowHeight ?? 18;\n const fs = opts.fontSize ?? 9;\n const hbg = opts.headerBg ?? [0.2, 0.4, 0.7];\n const totalW = cols.reduce((s, c) => s + c.width, 0);\n\n // Header background\n this.rect(x, y, totalW, rh, hbg);\n let cx = x;\n for (const col of cols) {\n this.text(cx + 3, y + 4, col.header, { font: 'Helvetica-Bold', size: fs, color: [1, 1, 1] });\n cx += col.width;\n }\n y += rh;\n\n for (let i = 0; i < rows.length; i++) {\n if (i % 2 === 1) this.rect(x, y, totalW, rh, [0.95, 0.95, 0.95]);\n cx = x;\n for (const col of cols) {\n const val = String(rows[i][col.key] ?? '');\n const textX = col.align === 'right' ? cx + col.width - 3 - val.length * fs * 0.5\n : col.align === 'center' ? cx + col.width / 2 - val.length * fs * 0.25\n : cx + 3;\n this.text(textX, y + 4, val, { size: fs });\n cx += col.width;\n }\n this.line(x, y + rh, x + totalW, y + rh, { width: 0.3, color: [0.8, 0.8, 0.8] });\n y += rh;\n }\n return y;\n }\n\n build(): Uint8Array {\n // Font dictionary entries\n const fontNames = ['Helvetica', 'HelveticaBold', 'TimesRoman', 'Courier'];\n const fontObjs: number[] = [];\n for (const fn of fontNames) {\n const baseName = fn === 'HelveticaBold' ? 'Helvetica-Bold' : fn === 'TimesRoman' ? 'Times-Roman' : fn;\n fontObjs.push(this._addObj(`<< /Type /Font /Subtype /Type1 /BaseFont /${baseName} /Encoding /WinAnsiEncoding >>`));\n }\n\n const fontDict = fontNames.map((n, i) => `/${n} ${fontObjs[i]} 0 R`).join('\\n');\n const resources = this._addObj(`<< /Font << ${fontDict} >> >>`);\n\n const streamBytes = new TextEncoder().encode(this._stream);\n const contentObj = this._addObj(`<< /Length ${streamBytes.length} >>\\nstream\\n${this._stream}endstream`);\n const pageObj = this._addObj(`<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${this._pw} ${this._ph}] /Contents ${contentObj} 0 R /Resources ${resources} 0 R >>`);\n const pagesObj = 2; // reserved slot\n const catalogObj = 1; // reserved slot\n\n // Rebuild in order: catalog=1, pages=2, then all others\n const ordered = [\n `<< /Type /Catalog /Pages 2 0 R >>`,\n `<< /Type /Pages /Kids [${pageObj} 0 R] /Count 1 >>`,\n ...this._objs.slice(2),\n ];\n\n let body = '%PDF-1.4\\n';\n const offsets: number[] = [];\n for (let i = 0; i < ordered.length; i++) {\n offsets.push(body.length);\n body += `${i + 1} 0 obj\\n${ordered[i]}\\nendobj\\n`;\n }\n\n const xrefOffset = body.length;\n body += `xref\\n0 ${ordered.length + 1}\\n0000000000 65535 f \\n`;\n for (const off of offsets) body += `${String(off).padStart(10, '0')} 00000 n \\n`;\n body += `trailer\\n<< /Size ${ordered.length + 1} /Root 1 0 R >>\\nstartxref\\n${xrefOffset}\\n%%EOF`;\n\n return new TextEncoder().encode(body);\n }\n}\n\nexport class JoopPdfService {\n private _opts: JoopPdfOptions;\n\n constructor(opts: JoopPdfOptions = {}) { this._opts = opts; }\n\n private _builder(): _PdfBuilder {\n return new _PdfBuilder(this._opts.pageWidth ?? PT.W, this._opts.pageHeight ?? PT.H);\n }\n\n /** Generate a basic receipt PDF */\n receipt(title: string, lines: JoopReceiptLine[], footer?: string): Uint8Array {\n const m = this._opts.margin ?? 60;\n const pw = this._opts.pageWidth ?? PT.W;\n const doc = this._builder();\n let y = m;\n\n doc.text(m, y, title, { font: 'Helvetica-Bold', size: 16 });\n y += 30;\n doc.line(m, y, pw - m, y);\n y += 12;\n\n for (const line of lines) {\n const font = line.bold ? 'Helvetica-Bold' : 'Helvetica';\n doc.text(m, y, line.label, { font, size: 10 });\n doc.text(pw - m - line.value.length * 6, y, line.value, { font, size: 10 });\n y += 16;\n }\n\n doc.line(m, y, pw - m, y);\n y += 14;\n if (footer) doc.text(m, y, footer, { size: 8, color: [0.5, 0.5, 0.5] });\n\n return doc.build();\n }\n\n /** Generate a statement with a table */\n statement(\n title: string,\n subtitle: string,\n columns: JoopPdfTableColumn[],\n rows: Record<string, string>[],\n summary?: JoopReceiptLine[],\n ): Uint8Array {\n const m = this._opts.margin ?? 40;\n const pw = this._opts.pageWidth ?? PT.W;\n const doc = this._builder();\n let y = m;\n\n doc.text(m, y, title, { font: 'Helvetica-Bold', size: 14 });\n y += 20;\n doc.text(m, y, subtitle, { size: 9, color: [0.4, 0.4, 0.4] });\n y += 16;\n doc.line(m, y, pw - m, y);\n y += 12;\n\n y = doc.table(m, y, columns, rows) + 10;\n\n if (summary) {\n for (const line of summary) {\n const font = line.bold ? 'Helvetica-Bold' : 'Helvetica';\n doc.text(m, y, line.label, { font, size: 10 });\n doc.text(pw - m - line.value.length * 6, y, line.value, { font, size: 10 });\n y += 16;\n }\n }\n\n return doc.build();\n }\n\n /** Wrap raw bytes as a base64 data URL */\n toDataUrl(bytes: Uint8Array): string {\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return `data:application/pdf;base64,${btoa(bin)}`;\n }\n\n /** Trigger browser download */\n download(bytes: Uint8Array, filename = 'document.pdf'): void {\n const blob = new Blob([new Uint8Array(bytes)], { type: 'application/pdf' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url; a.download = filename; a.click();\n URL.revokeObjectURL(url);\n }\n\n /** Low-level builder for custom documents */\n builder(): _PdfBuilder { return this._builder(); }\n}\n","import { JoopBehaviorSubject } from '../events';\n\nexport type JoopNotificationPermission = 'default' | 'granted' | 'denied';\n\nexport interface JoopNotificationOptions extends NotificationOptions {\n tag?: string;\n requireInteraction?: boolean;\n}\n\nexport class JoopNotificationService {\n private _permission$ = new JoopBehaviorSubject<JoopNotificationPermission>(\n typeof Notification !== 'undefined' ? Notification.permission as JoopNotificationPermission : 'default',\n );\n private _messageHandlers: Array<(event: MessageEvent) => void> = [];\n private _swReg: ServiceWorkerRegistration | null = null;\n\n isSupported(): boolean { return typeof Notification !== 'undefined'; }\n\n getPermission(): JoopNotificationPermission { return this._permission$.getValue(); }\n permission$() { return this._permission$.asObservable(); }\n\n async requestPermission(): Promise<JoopNotificationPermission> {\n if (!this.isSupported()) return 'denied';\n const result = await Notification.requestPermission() as JoopNotificationPermission;\n this._permission$.next(result);\n return result;\n }\n\n async show(title: string, options: JoopNotificationOptions = {}): Promise<Notification | null> {\n if (this._permission$.getValue() !== 'granted') {\n const p = await this.requestPermission();\n if (p !== 'granted') return null;\n }\n if (this._swReg) {\n await this._swReg.showNotification(title, options);\n return null;\n }\n return new Notification(title, options);\n }\n\n async setServiceWorker(reg: ServiceWorkerRegistration): Promise<void> {\n this._swReg = reg;\n }\n\n async subscribe(vapidPublicKey: string): Promise<PushSubscription | null> {\n if (!this._swReg) throw new Error('JoopNotification: ServiceWorkerRegistration required');\n const key = _urlBase64ToUint8Array(vapidPublicKey);\n return this._swReg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: key });\n }\n\n async unsubscribe(): Promise<boolean> {\n if (!this._swReg) return false;\n const sub = await this._swReg.pushManager.getSubscription();\n if (!sub) return false;\n return sub.unsubscribe();\n }\n\n async getSubscription(): Promise<PushSubscription | null> {\n if (!this._swReg) return null;\n return this._swReg.pushManager.getSubscription();\n }\n\n onMessage(handler: (event: MessageEvent) => void): () => void {\n this._messageHandlers.push(handler);\n navigator.serviceWorker?.addEventListener('message', handler);\n return () => {\n this._messageHandlers = this._messageHandlers.filter(h => h !== handler);\n navigator.serviceWorker?.removeEventListener('message', handler);\n };\n }\n\n destroy(): void {\n for (const h of this._messageHandlers) navigator.serviceWorker?.removeEventListener('message', h);\n this._messageHandlers = [];\n }\n}\n\nfunction _urlBase64ToUint8Array(base64String: string): Uint8Array<ArrayBuffer> {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n const raw = atob(base64);\n return new Uint8Array(Array.from(raw, c => c.charCodeAt(0)));\n}\n","export interface JoopGeoPosition {\n latitude: number;\n longitude: number;\n accuracy: number;\n altitude: number | null;\n speed: number | null;\n heading: number | null;\n timestamp: number;\n}\n\nexport interface JoopGeoOptions extends PositionOptions {\n timeout?: number;\n maximumAge?: number;\n enableHighAccuracy?: boolean;\n}\n\nexport class JoopGeoService {\n isSupported(): boolean { return 'geolocation' in navigator; }\n\n async getPosition(opts: JoopGeoOptions = {}): Promise<JoopGeoPosition> {\n return new Promise((resolve, reject) => {\n if (!this.isSupported()) { reject(new Error('Geolocation not supported')); return; }\n navigator.geolocation.getCurrentPosition(\n (p) => resolve(this._map(p)),\n (e) => reject(e),\n opts,\n );\n });\n }\n\n watchPosition(\n onSuccess: (pos: JoopGeoPosition) => void,\n onError?: (err: GeolocationPositionError) => void,\n opts: JoopGeoOptions = {},\n ): number {\n return navigator.geolocation.watchPosition(\n (p) => onSuccess(this._map(p)),\n onError,\n opts,\n );\n }\n\n clearWatch(id: number): void { navigator.geolocation.clearWatch(id); }\n\n async getPermissionState(): Promise<PermissionState> {\n if (!('permissions' in navigator)) return 'prompt';\n const status = await navigator.permissions.query({ name: 'geolocation' });\n return status.state;\n }\n\n /** Haversine distance in kilometers */\n distance(from: { latitude: number; longitude: number }, to: { latitude: number; longitude: number }): number {\n const R = 6371;\n const dLat = _rad(to.latitude - from.latitude);\n const dLon = _rad(to.longitude - from.longitude);\n const a = Math.sin(dLat / 2) ** 2 +\n Math.cos(_rad(from.latitude)) * Math.cos(_rad(to.latitude)) * Math.sin(dLon / 2) ** 2;\n return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n }\n\n isInRadius(\n point: { latitude: number; longitude: number },\n center: { latitude: number; longitude: number },\n radiusKm: number,\n ): boolean { return this.distance(point, center) <= radiusKm; }\n\n /** Compute compass bearing from `from` to `to` in degrees (0–360) */\n bearing(from: { latitude: number; longitude: number }, to: { latitude: number; longitude: number }): number {\n const dLon = _rad(to.longitude - from.longitude);\n const lat1 = _rad(from.latitude), lat2 = _rad(to.latitude);\n const y = Math.sin(dLon) * Math.cos(lat2);\n const x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);\n return (_deg(Math.atan2(y, x)) + 360) % 360;\n }\n\n formatCoords(lat: number, lon: number, format: 'dms' | 'decimal' = 'decimal'): string {\n if (format === 'decimal') return `${lat.toFixed(6)}, ${lon.toFixed(6)}`;\n const fmt = (d: number, posLabel: string, negLabel: string) => {\n const abs = Math.abs(d);\n const deg = Math.floor(abs), min = Math.floor((abs - deg) * 60);\n const sec = ((abs - deg - min / 60) * 3600).toFixed(2);\n return `${deg}° ${min}' ${sec}\" ${d >= 0 ? posLabel : negLabel}`;\n };\n return `${fmt(lat, 'N', 'S')}, ${fmt(lon, 'E', 'W')}`;\n }\n\n private _map(p: GeolocationPosition): JoopGeoPosition {\n return {\n latitude: p.coords.latitude,\n longitude: p.coords.longitude,\n accuracy: p.coords.accuracy,\n altitude: p.coords.altitude,\n speed: p.coords.speed,\n heading: p.coords.heading,\n timestamp: p.timestamp,\n };\n }\n}\n\nfunction _rad(d: number): number { return d * Math.PI / 180; }\nfunction _deg(r: number): number { return r * 180 / Math.PI; }\n","export interface JoopMediaConstraints {\n video?: boolean | MediaTrackConstraints;\n audio?: boolean | MediaTrackConstraints;\n}\n\nexport interface JoopRecorderOptions {\n mimeType?: string;\n audioBitsPerSecond?: number;\n videoBitsPerSecond?: number;\n timeslice?: number;\n}\n\nexport class JoopMediaRecorder {\n private _recorder: MediaRecorder;\n private _chunks: Blob[] = [];\n\n constructor(stream: MediaStream, opts: JoopRecorderOptions = {}) {\n const mimeType = opts.mimeType ?? (MediaRecorder.isTypeSupported('video/webm') ? 'video/webm' : '');\n this._recorder = new MediaRecorder(stream, { mimeType, audioBitsPerSecond: opts.audioBitsPerSecond, videoBitsPerSecond: opts.videoBitsPerSecond });\n this._recorder.ondataavailable = (e) => { if (e.data.size > 0) this._chunks.push(e.data); };\n }\n\n start(timeslice?: number): void { this._recorder.start(timeslice); }\n\n stop(): Promise<Blob> {\n return new Promise((resolve) => {\n this._recorder.onstop = () => {\n const mimeType = this._recorder.mimeType || 'video/webm';\n resolve(new Blob(this._chunks, { type: mimeType }));\n };\n this._recorder.stop();\n });\n }\n\n pause(): void { this._recorder.pause(); }\n resume(): void { this._recorder.resume(); }\n getState(): RecordingState { return this._recorder.state; }\n}\n\nexport class JoopMediaService {\n isSupported(): boolean { return 'mediaDevices' in navigator; }\n\n async requestStream(constraints: JoopMediaConstraints): Promise<MediaStream> {\n if (!this.isSupported()) throw new Error('MediaDevices not supported');\n return navigator.mediaDevices.getUserMedia(constraints);\n }\n\n async requestCamera(constraints: MediaTrackConstraints = {}): Promise<MediaStream> {\n return this.requestStream({ video: Object.keys(constraints).length ? constraints : true });\n }\n\n async requestMicrophone(constraints: MediaTrackConstraints = {}): Promise<MediaStream> {\n return this.requestStream({ audio: Object.keys(constraints).length ? constraints : true });\n }\n\n async requestScreenShare(withAudio = false): Promise<MediaStream> {\n if (!('getDisplayMedia' in navigator.mediaDevices)) throw new Error('Screen capture not supported');\n return navigator.mediaDevices.getDisplayMedia({ video: true, audio: withAudio });\n }\n\n stopStream(stream: MediaStream): void { stream.getTracks().forEach(t => t.stop()); }\n\n async capturePhoto(stream: MediaStream, quality = 0.92): Promise<Blob> {\n const video = document.createElement('video');\n video.srcObject = stream;\n video.muted = true;\n await video.play();\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d')!.drawImage(video, 0, 0);\n return new Promise((resolve, reject) => canvas.toBlob(b => b ? resolve(b) : reject(new Error('Capture failed')), 'image/jpeg', quality));\n }\n\n createRecorder(stream: MediaStream, opts?: JoopRecorderOptions): JoopMediaRecorder {\n return new JoopMediaRecorder(stream, opts);\n }\n\n async getDevices(kind?: MediaDeviceKind): Promise<MediaDeviceInfo[]> {\n const devices = await navigator.mediaDevices.enumerateDevices();\n return kind ? devices.filter(d => d.kind === kind) : devices;\n }\n\n async checkPermission(kind: 'camera' | 'microphone'): Promise<PermissionState> {\n if (!('permissions' in navigator)) return 'prompt';\n const name = kind === 'camera' ? 'camera' : 'microphone';\n const status = await navigator.permissions.query({ name: name as PermissionName });\n return status.state;\n }\n\n /** Attach a stream to a <video> element */\n attachStream(stream: MediaStream, videoEl: HTMLVideoElement, muted = true): void {\n videoEl.srcObject = stream;\n videoEl.muted = muted;\n videoEl.play().catch(() => {});\n }\n}\n","// Framework-agnostic cryptographic utilities built on WebCrypto\n\nexport interface JoopPasswordHash {\n hash: string; // hex\n salt: string; // hex\n iterations: number;\n keyLen: number;\n}\n\nfunction _hex(buf: ArrayBuffer): string {\n return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join('');\n}\nfunction _hexToBytes(hex: string): Uint8Array<ArrayBuffer> {\n return new Uint8Array(hex.match(/.{2}/g)!.map(h => parseInt(h, 16)));\n}\n\nexport class JoopCryptoUtils {\n\n // ── Hashing ──────────────────────────────────────────────────────────────\n\n async sha256(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-256', buf));\n }\n\n async sha512(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-512', buf));\n }\n\n async sha1(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-1', buf));\n }\n\n // ── HMAC ─────────────────────────────────────────────────────────────────\n\n async hmac(data: string, secret: string, algo: 'SHA-256' | 'SHA-512' | 'SHA-1' = 'SHA-256'): Promise<string> {\n const key = await crypto.subtle.importKey(\n 'raw', new TextEncoder().encode(secret),\n { name: 'HMAC', hash: algo }, false, ['sign'],\n );\n return _hex(await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(data)));\n }\n\n async hmacVerify(data: string, secret: string, signature: string, algo: 'SHA-256' | 'SHA-512' | 'SHA-1' = 'SHA-256'): Promise<boolean> {\n const expected = await this.hmac(data, secret, algo);\n return this.timingSafeEqual(expected, signature);\n }\n\n // ── PBKDF2 ───────────────────────────────────────────────────────────────\n\n async pbkdf2(\n password: string,\n salt: string,\n iterations = 100_000,\n keyLen = 32,\n hash: 'SHA-256' | 'SHA-512' = 'SHA-256',\n ): Promise<string> {\n const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveBits']);\n const bits = await crypto.subtle.deriveBits(\n { name: 'PBKDF2', salt: new TextEncoder().encode(salt), iterations, hash },\n key, keyLen * 8,\n );\n return _hex(bits);\n }\n\n // ── Password hashing ──────────────────────────────────────────────────────\n\n async hashPassword(password: string, salt?: string, iterations = 100_000): Promise<JoopPasswordHash> {\n const s = salt ?? this.generateSalt();\n const hash = await this.pbkdf2(password, s, iterations);\n return { hash, salt: s, iterations, keyLen: 32 };\n }\n\n async verifyPassword(password: string, record: JoopPasswordHash): Promise<boolean> {\n const { hash } = await this.hashPassword(password, record.salt, record.iterations);\n return this.timingSafeEqual(hash, record.hash);\n }\n\n // ── Utilities ──────────────────────────────────────────────────────────────\n\n generateSalt(bytes = 32): string { return _hex(crypto.getRandomValues(new Uint8Array(bytes)).buffer as ArrayBuffer); }\n\n randomBytes(length: number): Uint8Array<ArrayBuffer> {\n return new Uint8Array(crypto.getRandomValues(new Uint8Array(length)));\n }\n\n randomHex(bytes = 16): string { return _hex(this.randomBytes(bytes).buffer as ArrayBuffer); }\n\n uuid(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = _hex(bytes.buffer as ArrayBuffer);\n return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`;\n }\n\n /** Constant-time string comparison to prevent timing attacks */\n timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return diff === 0;\n }\n\n hexToBytes(hex: string): Uint8Array<ArrayBuffer> { return _hexToBytes(hex); }\n bytesToHex(bytes: Uint8Array): string { return _hex(bytes.buffer as ArrayBuffer); }\n\n base64ToHex(b64: string): string { return this.bytesToHex(new Uint8Array(Array.from(atob(b64), c => c.charCodeAt(0)))); }\n hexToBase64(hex: string): string { return btoa(String.fromCharCode(..._hexToBytes(hex))); }\n\n /** Derive an AES-GCM key from a password via PBKDF2 */\n async deriveKey(password: string, salt: string, iterations = 100_000): Promise<CryptoKey> {\n const base = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveKey']);\n return crypto.subtle.deriveKey(\n { name: 'PBKDF2', salt: new TextEncoder().encode(salt), iterations, hash: 'SHA-256' },\n base, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt'],\n );\n }\n}\n","export interface JoopChartBucket {\n label: string;\n value: number;\n count: number;\n start: number;\n end: number;\n}\n\nexport interface JoopCategoryAgg {\n category: string;\n total: number;\n count: number;\n average: number;\n min: number;\n max: number;\n}\n\nexport type JoopTimeInterval = 'hour' | 'day' | 'week' | 'month' | 'year';\n\nfunction _intervalMs(interval: JoopTimeInterval): number {\n const MS = { hour: 3600000, day: 86400000, week: 604800000, month: 2592000000, year: 31536000000 };\n return MS[interval];\n}\n\nfunction _bucketLabel(ts: number, interval: JoopTimeInterval): string {\n const d = new Date(ts);\n if (interval === 'hour') return `${d.toLocaleDateString()} ${d.getHours().toString().padStart(2,'0')}:00`;\n if (interval === 'day') return d.toLocaleDateString();\n if (interval === 'week') return `W${_isoWeek(d)} ${d.getFullYear()}`;\n if (interval === 'month') return `${d.toLocaleString('default', { month: 'short' })} ${d.getFullYear()}`;\n return String(d.getFullYear());\n}\n\nfunction _isoWeek(d: Date): number {\n const jan4 = new Date(d.getFullYear(), 0, 4);\n return Math.ceil((((d.getTime() - jan4.getTime()) / 86400000) + jan4.getDay() + 1) / 7);\n}\n\n/** Aggregate time-series data into fixed-width time buckets */\nexport function bucketByTime(\n data: Record<string, unknown>[],\n interval: JoopTimeInterval,\n valueKey: string,\n dateKey = 'date',\n): JoopChartBucket[] {\n if (!data.length) return [];\n const ms = _intervalMs(interval);\n const buckets = new Map<number, { sum: number; count: number }>();\n\n for (const row of data) {\n const ts = new Date(row[dateKey] as string).getTime();\n const key = Math.floor(ts / ms) * ms;\n const b = buckets.get(key) ?? { sum: 0, count: 0 };\n b.sum += Number(row[valueKey] ?? 0);\n b.count++;\n buckets.set(key, b);\n }\n\n return Array.from(buckets.entries()).sort(([a], [b]) => a - b).map(([key, b]) => ({\n label: _bucketLabel(key, interval),\n value: b.sum,\n count: b.count,\n start: key,\n end: key + ms,\n }));\n}\n\n/** Rolling/moving average over an array of numbers */\nexport function rollingAverage(data: number[], window: number): number[] {\n return data.map((_, i) => {\n const slice = data.slice(Math.max(0, i - window + 1), i + 1);\n return slice.reduce((a, b) => a + b, 0) / slice.length;\n });\n}\n\n/** Normalize values to [0,1] range */\nexport function normalize(data: number[], min?: number, max?: number): number[] {\n const mn = min ?? Math.min(...data);\n const mx = max ?? Math.max(...data);\n const range = mx - mn || 1;\n return data.map(v => (v - mn) / range);\n}\n\n/** Cumulative sum */\nexport function cumulative(data: number[]): number[] {\n let sum = 0;\n return data.map(v => (sum += v));\n}\n\n/** Moving sum over a window */\nexport function movingSum(data: number[], window: number): number[] {\n return data.map((_, i) => data.slice(Math.max(0, i - window + 1), i + 1).reduce((a, b) => a + b, 0));\n}\n\n/** Group by category and compute aggregates */\nexport function aggregateByCategory(\n data: Record<string, unknown>[],\n categoryKey: string,\n valueKey: string,\n): JoopCategoryAgg[] {\n const map = new Map<string, number[]>();\n for (const row of data) {\n const cat = String(row[categoryKey] ?? '');\n const val = Number(row[valueKey] ?? 0);\n if (!map.has(cat)) map.set(cat, []);\n map.get(cat)!.push(val);\n }\n return Array.from(map.entries()).map(([category, vals]) => ({\n category,\n total: vals.reduce((a, b) => a + b, 0),\n count: vals.length,\n average: vals.reduce((a, b) => a + b, 0) / vals.length,\n min: Math.min(...vals),\n max: Math.max(...vals),\n }));\n}\n\n/** Percent change between consecutive values */\nexport function percentChange(values: number[]): number[] {\n return values.map((v, i) => i === 0 ? 0 : ((v - values[i - 1]) / (Math.abs(values[i - 1]) || 1)) * 100);\n}\n\n/** Simple linear trend: 'up' | 'down' | 'flat' */\nexport function detectTrend(data: number[], threshold = 0.05): 'up' | 'down' | 'flat' {\n if (data.length < 2) return 'flat';\n const n = data.length;\n const xMean = (n - 1) / 2;\n const yMean = data.reduce((a, b) => a + b, 0) / n;\n let num = 0, den = 0;\n data.forEach((y, x) => { num += (x - xMean) * (y - yMean); den += (x - xMean) ** 2; });\n const slope = den ? num / den : 0;\n const relativeSlope = Math.abs(slope) / (Math.abs(yMean) || 1);\n return relativeSlope < threshold ? 'flat' : slope > 0 ? 'up' : 'down';\n}\n\n/** Generate SVG polyline points for a sparkline */\nexport function sparklinePoints(data: number[], width: number, height: number): string {\n if (!data.length) return '';\n const mn = Math.min(...data), mx = Math.max(...data), range = mx - mn || 1;\n return data.map((v, i) => {\n const x = (i / (data.length - 1 || 1)) * width;\n const y = height - ((v - mn) / range) * height;\n return `${x.toFixed(2)},${y.toFixed(2)}`;\n }).join(' ');\n}\n\n/** Generate a full sparkline SVG element */\nexport function sparklineSvg(data: number[], width = 100, height = 30, color = '#2563eb'): string {\n if (!data.length) return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\"/>`;\n const pts = sparklinePoints(data, width, height);\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\"><polyline points=\"${pts}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n}\n","export interface JoopWatermarkOptions {\n opacity?: number; // 0–1 for visual watermark\n fontSize?: number;\n color?: string;\n rotation?: number; // degrees\n repeat?: boolean;\n lsb?: boolean; // use LSB steganography (invisible)\n}\n\nexport class JoopWatermarkService {\n private _watermarkedElements = new WeakMap<HTMLElement, HTMLElement>();\n\n /**\n * Apply a visible tiled watermark overlay to an element.\n */\n apply(element: HTMLElement, text: string, opts: JoopWatermarkOptions = {}): void {\n this.remove(element);\n const { opacity = 0.08, fontSize = 16, color = '#000000', rotation = -30, repeat = true } = opts;\n\n const overlay = document.createElement('div');\n Object.assign(overlay.style, {\n position: 'absolute', top: '0', left: '0', width: '100%', height: '100%',\n pointerEvents: 'none', zIndex: '9999', overflow: 'hidden',\n opacity: String(opacity),\n });\n\n if (repeat) {\n const canvas = document.createElement('canvas');\n canvas.width = 200; canvas.height = 100;\n const ctx = canvas.getContext('2d')!;\n ctx.clearRect(0, 0, 200, 100);\n ctx.save();\n ctx.translate(100, 50);\n ctx.rotate((rotation * Math.PI) / 180);\n ctx.font = `${fontSize}px sans-serif`;\n ctx.fillStyle = color;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, 0, 0);\n ctx.restore();\n overlay.style.backgroundImage = `url(${canvas.toDataURL()})`;\n overlay.style.backgroundRepeat = 'repeat';\n } else {\n overlay.style.display = 'flex';\n overlay.style.alignItems = 'center';\n overlay.style.justifyContent = 'center';\n const span = document.createElement('span');\n span.textContent = text;\n span.style.transform = `rotate(${rotation}deg)`;\n span.style.fontSize = `${fontSize}px`;\n span.style.color = color;\n span.style.whiteSpace = 'nowrap';\n overlay.appendChild(span);\n }\n\n if (getComputedStyle(element).position === 'static') element.style.position = 'relative';\n element.appendChild(overlay);\n this._watermarkedElements.set(element, overlay);\n }\n\n remove(element: HTMLElement): void {\n const overlay = this._watermarkedElements.get(element);\n if (overlay && overlay.parentNode === element) element.removeChild(overlay);\n this._watermarkedElements.delete(element);\n }\n\n /**\n * Embed a payload invisibly into an ImageData using LSB steganography.\n * Modifies the least significant bit of the R channel of each pixel.\n */\n embedInImage(imageData: ImageData, payload: string): ImageData {\n const bytes = new TextEncoder().encode(payload + '\\0'); // null-terminated\n const bits = _toBits(bytes);\n const data = new Uint8ClampedArray(imageData.data);\n\n // First 32 pixels encode the length as 32 bits\n const lenBits = _uint32ToBits(bytes.length);\n for (let i = 0; i < 32 && i < data.length / 4; i++) {\n data[i * 4] = (data[i * 4] & 0xfe) | lenBits[i]; // LSB of R channel\n }\n\n for (let i = 0; i < bits.length; i++) {\n const pixelIdx = (i + 32) * 4;\n if (pixelIdx >= data.length) break;\n data[pixelIdx] = (data[pixelIdx] & 0xfe) | bits[i];\n }\n\n return new ImageData(data, imageData.width, imageData.height);\n }\n\n /**\n * Extract a payload from an ImageData that was embedded with embedInImage.\n * Returns null if no valid payload is found.\n */\n extractFromImage(imageData: ImageData): string | null {\n const data = imageData.data;\n\n // Read length from first 32 pixels\n const lenBits: number[] = [];\n for (let i = 0; i < 32; i++) lenBits.push(data[i * 4] & 1);\n const len = _bitsToUint32(lenBits);\n if (len <= 0 || len > (data.length / 4 - 32) / 8) return null;\n\n const totalBits = len * 8;\n const bits: number[] = [];\n for (let i = 0; i < totalBits; i++) {\n const pixelIdx = (i + 32) * 4;\n if (pixelIdx >= data.length) break;\n bits.push(data[pixelIdx] & 1);\n }\n\n const bytes = _fromBits(bits);\n try {\n const text = new TextDecoder().decode(bytes);\n const nullIdx = text.indexOf('\\0');\n return nullIdx >= 0 ? text.slice(0, nullIdx) : text;\n } catch {\n return null;\n }\n }\n\n /** Apply invisible LSB watermark to a canvas element */\n applyToCanvas(canvas: HTMLCanvasElement, payload: string): void {\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const modified = this.embedInImage(imgData, payload);\n ctx.putImageData(modified, 0, 0);\n }\n}\n\nfunction _toBits(bytes: Uint8Array): number[] {\n const bits: number[] = [];\n for (const byte of bytes) for (let i = 7; i >= 0; i--) bits.push((byte >> i) & 1);\n return bits;\n}\n\nfunction _fromBits(bits: number[]): Uint8Array {\n const bytes = new Uint8Array(Math.ceil(bits.length / 8));\n for (let i = 0; i < bytes.length; i++) {\n let val = 0;\n for (let j = 0; j < 8 && i * 8 + j < bits.length; j++) val = (val << 1) | bits[i * 8 + j];\n bytes[i] = val;\n }\n return bytes;\n}\n\nfunction _uint32ToBits(n: number): number[] {\n const bits: number[] = [];\n for (let i = 31; i >= 0; i--) bits.push((n >> i) & 1);\n return bits;\n}\n\nfunction _bitsToUint32(bits: number[]): number {\n let n = 0;\n for (const b of bits) n = (n << 1) | b;\n return n >>> 0;\n}\n","// QR code scanner using camera (getUserMedia) + canvas frame capture.\n// Integrates with the jsQR-compatible pattern — calls an injected decode function,\n// allowing callers to swap in jsQR, ZXing, or any other WASM decoder.\n\nexport type JoopQrDecoder = (\n data: Uint8ClampedArray,\n width: number,\n height: number\n) => string | null | undefined;\n\nexport interface JoopQrScannerConfig {\n /** Canvas-based QR decoder function. Inject jsQR or a similar library. */\n decoder: JoopQrDecoder;\n /** Camera facing mode, default 'environment' (rear camera) */\n facingMode?: 'environment' | 'user';\n /** Scan frequency in Hz (frames per second), default 10 */\n fps?: number;\n /** If true, stop scanning after first successful decode, default true */\n stopOnScan?: boolean;\n /** Video element constraints */\n width?: number;\n height?: number;\n}\n\nexport interface JoopQrScanResult {\n text: string;\n timestamp: number;\n}\n\nexport class JoopQrScanner {\n private _stream: MediaStream | null = null;\n private _video: HTMLVideoElement | null = null;\n private _canvas: HTMLCanvasElement | null = null;\n private _ctx: CanvasRenderingContext2D | null = null;\n private _timer: ReturnType<typeof setInterval> | null = null;\n private _active = false;\n\n private _onResult: ((r: JoopQrScanResult) => void) | null = null;\n private _onError: ((e: Error) => void) | null = null;\n\n private readonly _cfg: Required<JoopQrScannerConfig>;\n\n constructor(config: JoopQrScannerConfig) {\n this._cfg = {\n decoder: config.decoder,\n facingMode: config.facingMode ?? 'environment',\n fps: config.fps ?? 10,\n stopOnScan: config.stopOnScan ?? true,\n width: config.width ?? 1280,\n height: config.height ?? 720,\n };\n }\n\n onResult(fn: (r: JoopQrScanResult) => void): this { this._onResult = fn; return this; }\n onError(fn: (e: Error) => void): this { this._onError = fn; return this; }\n\n async start(container?: HTMLElement): Promise<void> {\n if (this._active) return;\n if (!navigator.mediaDevices?.getUserMedia) throw new Error('Camera not available');\n\n this._stream = await navigator.mediaDevices.getUserMedia({\n video: {\n facingMode: this._cfg.facingMode,\n width: { ideal: this._cfg.width },\n height: { ideal: this._cfg.height },\n },\n });\n\n this._video = document.createElement('video');\n this._video.setAttribute('playsinline', 'true');\n this._video.muted = true;\n this._video.srcObject = this._stream;\n\n if (container) {\n Object.assign(this._video.style, { width: '100%', height: '100%', objectFit: 'cover', display: 'block' });\n container.appendChild(this._video);\n }\n\n await new Promise<void>(res => { this._video!.onloadedmetadata = () => { this._video!.play(); res(); }; });\n\n this._canvas = document.createElement('canvas');\n this._ctx = this._canvas.getContext('2d');\n this._active = true;\n this._scheduleFrames();\n }\n\n stop(): void {\n this._active = false;\n if (this._timer) { clearInterval(this._timer); this._timer = null; }\n this._stream?.getTracks().forEach(t => t.stop());\n this._stream = null;\n this._video?.remove();\n this._video = null;\n }\n\n isActive(): boolean { return this._active; }\n\n /** Scan a static image File / Blob instead of the camera. */\n async scanFile(file: File | Blob): Promise<JoopQrScanResult | null> {\n return new Promise(resolve => {\n const img = new Image();\n const url = URL.createObjectURL(file);\n img.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0);\n const { data } = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const text = this._cfg.decoder(data, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n resolve(text ? { text, timestamp: Date.now() } : null);\n };\n img.src = url;\n });\n }\n\n private _scheduleFrames(): void {\n const interval = Math.round(1000 / this._cfg.fps);\n this._timer = setInterval(() => this._processFrame(), interval);\n }\n\n private _processFrame(): void {\n if (!this._active || !this._video || !this._canvas || !this._ctx) return;\n if (this._video.readyState < 2) return;\n\n this._canvas.width = this._video.videoWidth;\n this._canvas.height = this._video.videoHeight;\n this._ctx.drawImage(this._video, 0, 0);\n\n try {\n const imageData = this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height);\n const text = this._cfg.decoder(imageData.data, this._canvas.width, this._canvas.height);\n if (text) {\n if (this._cfg.stopOnScan) this.stop();\n this._onResult?.({ text, timestamp: Date.now() });\n }\n } catch (err) {\n this._onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }\n}\n\n/** Generate an otpauth:// TOTP enrollment URI (for authenticator app QR codes) */\nexport function generateTotpUri(options: {\n secret: string;\n account: string;\n issuer: string;\n period?: number;\n digits?: number;\n algorithm?: 'SHA1' | 'SHA256' | 'SHA512';\n}): string {\n const { secret, account, issuer, period = 30, digits = 6, algorithm = 'SHA1' } = options;\n const params = new URLSearchParams({\n secret,\n issuer,\n algorithm,\n digits: String(digits),\n period: String(period),\n });\n return `otpauth://totp/${encodeURIComponent(issuer)}:${encodeURIComponent(account)}?${params}`;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/utilities/common.utility.ts","../../src/utilities/device.utility.ts","../../src/utilities/sanitizer.utility.ts","../../src/utilities/connection.utility.ts","../../src/events/index.ts","../../src/core/global-singleton.ts","../../src/utilities/clipboard.utility.ts","../../src/utilities/image.utility.ts","../../src/utilities/date.utility.ts","../../src/utilities/qr.utility.ts","../../src/utilities/barcode.utility.ts","../../src/utilities/pdf.utility.ts","../../src/utilities/notification.service.ts","../../src/utilities/geo.service.ts","../../src/utilities/media.service.ts","../../src/encryption/crypto-utils.ts","../../src/utilities/chart-data.utility.ts","../../src/utilities/watermark.service.ts","../../src/utilities/qr-scanner.ts"],"names":["_","window"],"mappings":"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","file":"index.mjs","sourcesContent":["/** Remove a trailing slash from a URL string. */\nexport function removeTrailingSlash(url: string): string {\n return url?.endsWith('/') ? url.slice(0, -1) : url;\n}\n\n/** Serialize a plain object to a URL-encoded query string. */\nexport function objectToQueryString(obj: Record<string, any>): string {\n return Object.entries(obj)\n .filter(([, v]) => v !== undefined && v !== null)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)\n .join('&');\n}\n\n/** Deep-clone a JSON-serializable object. */\nexport function deepClone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n}\n\n/** Check if a value is a plain object (not an array, not null). */\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/** Generate a random alphanumeric string of a given length. */\nexport function randomString(length: number, charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'): string {\n let result = '';\n for (let i = 0; i < length; i++) {\n result += charset[Math.floor(Math.random() * charset.length)];\n }\n return result;\n}\n\n/** Convert a string to its hex representation. */\nexport function stringToHex(input: string): string {\n let result = '';\n for (let i = 0; i < input.length; i++) {\n result += input.charCodeAt(i).toString(16).slice(-4);\n }\n return result;\n}\n\n/** Convert an ArrayBuffer to a lowercase hex string. */\nexport function bufferToHex(buffer: ArrayBuffer | Uint8Array): string {\n return [...new Uint8Array(buffer)]\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/** Serialize a nested object into flat form-data-style string segments. */\nexport function flattenObject(obj: Record<string, any>, prefix = ''): Record<string, string> {\n const result: Record<string, string> = {};\n for (const [key, value] of Object.entries(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n if (isPlainObject(value)) {\n Object.assign(result, flattenObject(value as Record<string, any>, fullKey));\n } else {\n result[fullKey] = String(value);\n }\n }\n return result;\n}\n","export interface JoopDeviceInfo {\n userAgent: string;\n platform: string;\n isIOS: boolean;\n isAndroid: boolean;\n isMobile: boolean;\n isDesktop: boolean;\n language: string;\n}\n\nexport function getDeviceInfo(): JoopDeviceInfo {\n const ua = typeof navigator !== 'undefined' ? navigator.userAgent : '';\n const platform = typeof navigator !== 'undefined' ? navigator.platform ?? '' : '';\n const language = typeof navigator !== 'undefined' ? navigator.language ?? 'en' : 'en';\n\n const isIOS = /iphone|ipad|ipod/i.test(ua);\n const isAndroid = /android/i.test(ua);\n const isMobile = isIOS || isAndroid || /mobi/i.test(ua);\n\n return {\n userAgent: ua,\n platform,\n isIOS,\n isAndroid,\n isMobile,\n isDesktop: !isMobile,\n language,\n };\n}\n\nexport function isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nexport function isSSR(): boolean {\n return !isBrowser();\n}\n","const SQL_KEYWORDS = /\\b(SELECT|INSERT|UPDATE|DELETE|DROP|TRUNCATE|ALTER|EXEC|UNION|SCRIPT)\\b/gi;\n\nexport function escapeHtml(input: string): string {\n return input\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\nexport function stripHtml(input: string): string {\n return input.replace(/<[^>]*>/g, '');\n}\n\nexport function sanitizeInput(input: string): string {\n return escapeHtml(input.trim());\n}\n\nexport function stripSqlKeywords(input: string): string {\n return input.replace(/['\";\\\\]/g, '').replace(SQL_KEYWORDS, '');\n}\n\nexport function sanitizeFileName(name: string): string {\n return name.replace(/[^a-zA-Z0-9._\\-]/g, '_').replace(/_{2,}/g, '_');\n}\n\nexport function isValidUrl(url: string): boolean {\n try {\n const { protocol } = new URL(url);\n return protocol === 'http:' || protocol === 'https:';\n } catch {\n return false;\n }\n}\n\nexport function isValidEmail(email: string): boolean {\n return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$/.test(email);\n}\n\nexport function isValidPhone(phone: string): boolean {\n return /^\\+?[\\d\\s\\-()]{7,20}$/.test(phone);\n}\n\nexport function isAlphanumeric(value: string): boolean {\n return /^[a-zA-Z0-9]+$/.test(value);\n}\n\nexport function truncate(value: string, maxLength: number, suffix = '…'): string {\n return value.length > maxLength ? value.slice(0, maxLength - suffix.length) + suffix : value;\n}\n","/** Recursively flatten a nested object — { a: { b: 1 } } → { 'a.b': 1 } */\nexport function flattenObj(\n obj: Record<string, unknown>,\n prefix = '',\n result: Record<string, string> = {},\n): Record<string, string> {\n for (const key of Object.keys(obj)) {\n const fullKey = prefix ? `${prefix}.${key}` : key;\n const val = obj[key];\n if (val !== null && typeof val === 'object' && !Array.isArray(val)) {\n flattenObj(val as Record<string, unknown>, fullKey, result);\n } else {\n result[fullKey] = val == null ? '' : String(val);\n }\n }\n return result;\n}\n\n/** Build a URL query string from a flat or nested object */\nexport function buildQueryString(\n params: Record<string, unknown>,\n encode = true,\n): string {\n const flat = flattenObj(params as Record<string, unknown>);\n return Object.entries(flat)\n .filter(([, v]) => v !== '')\n .map(([k, v]) => `${encode ? encodeURIComponent(k) : k}=${encode ? encodeURIComponent(v) : v}`)\n .join('&');\n}\n\n/** Build a FormData object from a flat or nested object, with optional file attachments */\nexport function buildFormData(\n params: Record<string, unknown>,\n files?: { field: string; file: File | Blob; name?: string }[],\n): FormData {\n const flat = flattenObj(params as Record<string, unknown>);\n const fd = new FormData();\n for (const [k, v] of Object.entries(flat)) {\n fd.append(k, v);\n }\n if (files) {\n for (const { field, file, name } of files) {\n if (name) {\n fd.append(field, file, name);\n } else {\n fd.append(field, file);\n }\n }\n }\n return fd;\n}\n\n/** Encode query params using encodeURIComponent — replaces space with %20 (not +) */\nexport function urlEncode(params: Record<string, string>): string {\n return Object.entries(params)\n .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)\n .join('&');\n}\n\n/** Generate a random integer in [min, max] inclusive */\nexport function getRandomNum(min: number, max: number): number {\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n","export type Unsubscribe = () => void;\nexport type Listener<T> = (value: T) => void;\n\n/**\n * Reports a subscriber that threw during emission, without aborting delivery\n * to the remaining subscribers. Defaults to console.error; override to route\n * to your own logger (e.g. in a banking app where dropped events matter).\n */\nlet _onListenerError: (error: unknown) => void = (error) => {\n // eslint-disable-next-line no-console\n console.error('[joopjs] a subject subscriber threw during emission:', error);\n};\n\n/** Override how subscriber errors are reported during emission. */\nexport function setSubjectErrorHandler(handler: (error: unknown) => void): void {\n _onListenerError = handler;\n}\n\n/**\n * Lightweight pub/sub subject — emits to all current subscribers.\n * Replaces RxJS Subject without pulling in the full RxJS dependency.\n */\nexport class JoopSubject<T> {\n private _listeners: Listener<T>[] = [];\n\n subscribe(listener: Listener<T>): Unsubscribe {\n this._listeners.push(listener);\n return () => {\n this._listeners = this._listeners.filter(l => l !== listener);\n };\n }\n\n next(value: T): void {\n // Snapshot so a subscribe()/unsubscribe() triggered by a listener can't\n // disturb this emission, and isolate each listener so one that throws\n // doesn't deprive later subscribers of the value.\n const listeners = this._listeners.slice();\n for (const listener of listeners) {\n try {\n listener(value);\n } catch (error) {\n _onListenerError(error);\n }\n }\n }\n\n asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Stateful subject — replays the current value to any new subscriber immediately.\n * Replaces RxJS BehaviorSubject.\n */\nexport class JoopBehaviorSubject<T> extends JoopSubject<T> {\n private _value: T;\n\n constructor(initialValue: T) {\n super();\n this._value = initialValue;\n }\n\n getValue(): T {\n return this._value;\n }\n\n override next(value: T): void {\n this._value = value;\n super.next(value);\n }\n\n override subscribe(listener: Listener<T>): Unsubscribe {\n try {\n listener(this._value);\n } catch (error) {\n _onListenerError(error);\n }\n return super.subscribe(listener);\n }\n\n override asObservable(): JoopObservable<T> {\n return new JoopObservable<T>(listener => this.subscribe(listener));\n }\n}\n\n/**\n * Read-only observable handle returned from asObservable().\n */\nexport class JoopObservable<T> {\n constructor(private _subscribeFn: (listener: Listener<T>) => Unsubscribe) {}\n\n subscribe(listener: Listener<T>): Unsubscribe {\n return this._subscribeFn(listener);\n }\n\n /** Returns the current value without subscribing (only meaningful for BehaviorSubject-backed observables). */\n getOnce(): T | undefined {\n let result: T | undefined;\n const unsub = this.subscribe(v => { result = v; });\n unsub();\n return result;\n }\n}\n","/**\n * Federation-safe singletons.\n *\n * When joopjs is bundled into multiple micro-frontends (Module Federation,\n * import maps, or simply two npm copies at different versions) and is NOT\n * shared as a singleton, every copy creates its own logger / config / event\n * bus. The consequence is silent and nasty: an event emitted in MFE-A never\n * reaches a subscriber in MFE-B, and config loaded by the host is invisible\n * to a remote.\n *\n * Routing module-level singletons through a versioned `globalThis` registry\n * makes duplicate copies converge on the FIRST instance that registered, so\n * state stays shared even when the bytes are duplicated. The version is keyed\n * to the major version — copies across a major boundary intentionally do NOT\n * share, since their contracts may differ.\n *\n * This is a runtime safety net. The correct primary fix is still to share\n * joopjs as a federation singleton:\n * shared: { joopjs: { singleton: true, requiredVersion: '^2.0.0' } }\n */\n\nconst MAJOR = '2';\nconst REGISTRY_KEY = Symbol.for(`joopjs.singletons.v${MAJOR}`);\n\ninterface GlobalRegistry {\n major: string;\n instances: Map<string, unknown>;\n /** Number of distinct bundled copies of this module that have loaded. */\n copies: number;\n warned: boolean;\n warningsSilenced: boolean;\n}\n\ntype GlobalWithRegistry = typeof globalThis & {\n [REGISTRY_KEY]?: GlobalRegistry;\n};\n\nfunction getRegistry(): GlobalRegistry {\n const g = globalThis as GlobalWithRegistry;\n let reg = g[REGISTRY_KEY];\n if (!reg) {\n reg = { major: MAJOR, instances: new Map(), copies: 0, warned: false, warningsSilenced: false };\n g[REGISTRY_KEY] = reg;\n }\n return reg;\n}\n\n// Each distinct bundled copy of joopjs runs this module's top level exactly\n// once, so this increments per copy across the shared globalThis.\n(() => {\n const reg = getRegistry();\n reg.copies += 1;\n if (reg.copies > 1 && !reg.warned && !reg.warningsSilenced) {\n reg.warned = true;\n // eslint-disable-next-line no-console\n console.warn(\n `[joopjs] ${reg.copies} copies of joopjs detected in one runtime. ` +\n 'Singletons (logger, config, event bus, …) are being de-duplicated via globalThis so ' +\n 'state stays shared, but you are shipping duplicate bytes. Share joopjs as a federation ' +\n \"singleton: shared: { joopjs: { singleton: true, requiredVersion: '^2.0.0' } }. \" +\n 'Call silenceDuplicateCopyWarning() to suppress this.',\n );\n }\n})();\n\n/**\n * Returns the process-wide singleton for `key`, creating it via `factory` on\n * first use. Subsequent calls — including from other bundled copies of joopjs —\n * return the same instance.\n */\nexport function globalSingleton<T>(key: string, factory: () => T): T {\n const reg = getRegistry();\n if (!reg.instances.has(key)) {\n reg.instances.set(key, factory());\n }\n return reg.instances.get(key) as T;\n}\n\n/** How many distinct bundled copies of joopjs have loaded in this runtime (1 is healthy). */\nexport function joopCopyCount(): number {\n return getRegistry().copies;\n}\n\n/** Suppress the multiple-copies console warning (e.g. when duplication is intentional in dev). */\nexport function silenceDuplicateCopyWarning(): void {\n getRegistry().warningsSilenced = true;\n}\n","import { JoopSubject } from '../events';\nimport { globalSingleton } from '../core/global-singleton';\n\nexport type JoopClipboardEvent = { type: 'copy' | 'paste'; text: string };\n\nexport class JoopClipboardService {\n private _events$ = new JoopSubject<JoopClipboardEvent>();\n\n /** Copy text to clipboard. Falls back to execCommand for older browsers. */\n async copy(text: string): Promise<boolean> {\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n this._events$.next({ type: 'copy', text });\n return true;\n }\n return this._execCopy(text);\n } catch {\n return this._execCopy(text);\n }\n }\n\n /** Read text from clipboard */\n async paste(): Promise<string | null> {\n try {\n if (navigator?.clipboard?.readText) {\n const text = await navigator.clipboard.readText();\n this._events$.next({ type: 'paste', text });\n return text;\n }\n return null;\n } catch { return null; }\n }\n\n /** Copy a DOM element's innerText */\n async copyElement(elementOrId: HTMLElement | string): Promise<boolean> {\n const el = typeof elementOrId === 'string'\n ? document.getElementById(elementOrId)\n : elementOrId;\n return el ? this.copy(el.innerText ?? el.textContent ?? '') : false;\n }\n\n /** Observe copy/paste events */\n events$() { return this._events$.asObservable(); }\n\n private _execCopy(text: string): boolean {\n if (typeof document === 'undefined') return false;\n const ta = document.createElement('textarea');\n ta.value = text;\n ta.style.cssText = 'position:fixed;top:-9999px;left:-9999px;opacity:0';\n document.body.appendChild(ta);\n ta.focus();\n ta.select();\n try {\n const ok = document.execCommand('copy');\n if (ok) this._events$.next({ type: 'copy', text });\n return ok;\n } finally {\n document.body.removeChild(ta);\n }\n }\n}\n\n/** Module-level singleton for quick use without instantiation */\nexport const clipboard = globalSingleton('clipboard', () => new JoopClipboardService());\n","export interface JoopImageInfo {\n width: number;\n height: number;\n size: number;\n type: string;\n name: string;\n aspectRatio: number;\n}\n\nexport interface JoopImageValidation {\n valid: boolean;\n errors: string[];\n}\n\nexport interface JoopCompressOptions {\n maxWidthOrHeight?: number;\n quality?: number; // 0–1, default 0.8\n outputType?: string; // e.g. 'image/jpeg'\n maxSizeBytes?: number;\n}\n\nexport class JoopImageService {\n /** Compress and optionally resize an image file */\n compress(file: File | Blob, options: JoopCompressOptions = {}): Promise<Blob> {\n const { maxWidthOrHeight = 1920, quality = 0.8, outputType = 'image/jpeg' } = options;\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(file);\n const img = new Image();\n img.onload = () => {\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n let { width, height } = img;\n if (width > maxWidthOrHeight || height > maxWidthOrHeight) {\n if (width > height) { height = Math.round(height * maxWidthOrHeight / width); width = maxWidthOrHeight; }\n else { width = Math.round(width * maxWidthOrHeight / height); height = maxWidthOrHeight; }\n }\n canvas.width = width;\n canvas.height = height;\n canvas.getContext('2d')!.drawImage(img, 0, 0, width, height);\n canvas.toBlob(b => b ? resolve(b) : reject(new Error('compression failed')), outputType, quality);\n };\n img.onerror = reject;\n img.src = url;\n });\n }\n\n /** Resize to exact dimensions */\n resize(file: File | Blob, width: number, height: number, outputType = 'image/jpeg'): Promise<Blob> {\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(file);\n const img = new Image();\n img.onload = () => {\n URL.revokeObjectURL(url);\n const canvas = document.createElement('canvas');\n canvas.width = width; canvas.height = height;\n canvas.getContext('2d')!.drawImage(img, 0, 0, width, height);\n canvas.toBlob(b => b ? resolve(b) : reject(new Error('resize failed')), outputType, 0.9);\n };\n img.onerror = reject;\n img.src = url;\n });\n }\n\n /** Convert a blob to base64 data URL */\n toBase64(file: File | Blob): Promise<string> {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = reject;\n reader.readAsDataURL(file);\n });\n }\n\n /** Get image dimensions and metadata */\n getInfo(file: File): Promise<JoopImageInfo> {\n return new Promise((resolve, reject) => {\n const url = URL.createObjectURL(file);\n const img = new Image();\n img.onload = () => {\n URL.revokeObjectURL(url);\n resolve({\n width: img.naturalWidth,\n height: img.naturalHeight,\n size: file.size,\n type: file.type,\n name: file instanceof File ? file.name : '',\n aspectRatio: parseFloat((img.naturalWidth / img.naturalHeight).toFixed(4)),\n });\n };\n img.onerror = reject;\n img.src = url;\n });\n }\n\n /** Validate an image against size/type/dimension constraints */\n async validate(\n file: File,\n options: { maxSizeBytes?: number; allowedTypes?: string[]; maxWidth?: number; maxHeight?: number; minWidth?: number; minHeight?: number } = {},\n ): Promise<JoopImageValidation> {\n const errors: string[] = [];\n if (options.maxSizeBytes && file.size > options.maxSizeBytes) {\n errors.push(`File too large: ${(file.size / 1024).toFixed(1)} KB exceeds ${(options.maxSizeBytes / 1024).toFixed(1)} KB`);\n }\n if (options.allowedTypes && !options.allowedTypes.includes(file.type)) {\n errors.push(`Invalid type: ${file.type}. Allowed: ${options.allowedTypes.join(', ')}`);\n }\n if (options.maxWidth || options.maxHeight || options.minWidth || options.minHeight) {\n try {\n const info = await this.getInfo(file);\n if (options.maxWidth && info.width > options.maxWidth) errors.push(`Width ${info.width}px exceeds max ${options.maxWidth}px`);\n if (options.maxHeight && info.height > options.maxHeight) errors.push(`Height ${info.height}px exceeds max ${options.maxHeight}px`);\n if (options.minWidth && info.width < options.minWidth) errors.push(`Width ${info.width}px below min ${options.minWidth}px`);\n if (options.minHeight && info.height < options.minHeight) errors.push(`Height ${info.height}px below min ${options.minHeight}px`);\n } catch { errors.push('Could not read image dimensions'); }\n }\n return { valid: errors.length === 0, errors };\n }\n\n /** Create thumbnail as data URL */\n async thumbnail(file: File | Blob, size = 128): Promise<string> {\n const thumb = await this.compress(file, { maxWidthOrHeight: size, quality: 0.7 });\n return this.toBase64(thumb);\n }\n}\n","// ── Gregorian / Business-day utilities ─────────────────────────────────────\n\nconst WEEKDAYS = [0, 6]; // Sunday, Saturday — override to [5, 6] for Fri/Sat (Gulf)\n\nexport interface JoopDateRangeResult { days: number; businessDays: number; }\n\nexport type JoopWeekend = [number, number]; // day-of-week indices (0=Sun, 6=Sat)\n\nexport function isBusinessDay(date: Date, holidays: Date[] = [], weekend: JoopWeekend = [0, 6]): boolean {\n const dow = date.getDay();\n if (weekend.includes(dow)) return false;\n const iso = _toIso(date);\n return !holidays.some(h => _toIso(h) === iso);\n}\n\nexport function addBusinessDays(date: Date, days: number, holidays: Date[] = [], weekend: JoopWeekend = [0, 6]): Date {\n const d = new Date(date);\n let remaining = Math.abs(days);\n const step = days >= 0 ? 1 : -1;\n while (remaining > 0) {\n d.setDate(d.getDate() + step);\n if (isBusinessDay(d, holidays, weekend)) remaining--;\n }\n return d;\n}\n\nexport function getBusinessDaysBetween(start: Date, end: Date, holidays: Date[] = [], weekend: JoopWeekend = [0, 6]): number {\n const s = new Date(Math.min(start.getTime(), end.getTime()));\n const e = new Date(Math.max(start.getTime(), end.getTime()));\n let count = 0;\n const cur = new Date(s);\n cur.setDate(cur.getDate() + 1);\n while (cur <= e) {\n if (isBusinessDay(cur, holidays, weekend)) count++;\n cur.setDate(cur.getDate() + 1);\n }\n return count;\n}\n\nexport function daysBetween(a: Date, b: Date): number {\n return Math.round(Math.abs(b.getTime() - a.getTime()) / 86_400_000);\n}\n\nexport function isDateInRange(date: Date, start: Date, end: Date): boolean {\n return date >= start && date <= end;\n}\n\nexport function isExpired(date: Date): boolean { return date < new Date(); }\n\nexport function startOfDay(date: Date): Date {\n const d = new Date(date); d.setHours(0, 0, 0, 0); return d;\n}\nexport function endOfDay(date: Date): Date {\n const d = new Date(date); d.setHours(23, 59, 59, 999); return d;\n}\nexport function startOfMonth(date: Date): Date { return new Date(date.getFullYear(), date.getMonth(), 1); }\nexport function endOfMonth(date: Date): Date { return new Date(date.getFullYear(), date.getMonth() + 1, 0, 23, 59, 59, 999); }\n\nexport function parseDate(value: string | number): Date | null {\n if (!value) return null;\n const d = new Date(value);\n return isNaN(d.getTime()) ? null : d;\n}\n\nexport function formatDate(date: Date, format: string, locale = 'en-US'): string {\n const p: Record<string, string> = {\n YYYY: String(date.getFullYear()),\n MM: String(date.getMonth() + 1).padStart(2, '0'),\n DD: String(date.getDate()).padStart(2, '0'),\n HH: String(date.getHours()).padStart(2, '0'),\n mm: String(date.getMinutes()).padStart(2, '0'),\n ss: String(date.getSeconds()).padStart(2, '0'),\n M: String(date.getMonth() + 1),\n D: String(date.getDate()),\n // locale-aware month name\n MMM: date.toLocaleDateString(locale, { month: 'short' }),\n MMMM: date.toLocaleDateString(locale, { month: 'long' }),\n };\n return format.replace(/MMMM|MMM|YYYY|MM|DD|HH|mm|ss|M|D/g, k => p[k] ?? k);\n}\n\n// ── Hijri (Islamic / Umm Al-Qura approximation) ────────────────────────────\n\nexport interface JoopHijriDate { year: number; month: number; day: number; monthName: string; }\n\nconst HIJRI_MONTHS = [\n 'Muharram','Safar','Rabi al-Awwal','Rabi al-Thani',\n 'Jumada al-Awwal','Jumada al-Thani','Rajab','Sha\\'ban',\n 'Ramadan','Shawwal','Dhu al-Qi\\'dah','Dhu al-Hijjah',\n];\n\n/** Convert Gregorian date to Hijri (algorithmic approximation — accurate ±1 day) */\nexport function toHijri(date: Date): JoopHijriDate {\n const jd = _toJulian(date.getFullYear(), date.getMonth() + 1, date.getDate());\n let l = jd - 1948440 + 10632;\n const n = Math.floor((l - 1) / 10631);\n l = l - 10631 * n + 354;\n const j = Math.floor((10985 - l) / 5316) * Math.floor((50 * l) / 17719) +\n Math.floor(l / 5670) * Math.floor((43 * l) / 15238);\n l = l - Math.floor((30 - j) / 15) * Math.floor((17719 * j) / 50) -\n Math.floor(j / 16) * Math.floor((15238 * j) / 43) + 29;\n const month = Math.floor((24 * l) / 709);\n const day = l - Math.floor((709 * month) / 24);\n const year = 30 * n + j - 30;\n return { year, month, day, monthName: HIJRI_MONTHS[month - 1] ?? '' };\n}\n\n/** Convert Hijri date back to Gregorian */\nexport function fromHijri(year: number, month: number, day: number): Date {\n const jd = Math.floor((11 * year + 3) / 30) + 354 * year + 30 * month -\n Math.floor((month - 1) / 2) + day + 1948440 - 385;\n return _fromJulian(jd);\n}\n\nexport function formatHijri(date: JoopHijriDate, includeMonthName = true): string {\n const d = String(date.day).padStart(2, '0');\n const m = String(date.month).padStart(2, '0');\n return includeMonthName\n ? `${d} ${date.monthName} ${date.year} AH`\n : `${d}/${m}/${date.year}`;\n}\n\nexport function getHijriMonthName(month: number): string { return HIJRI_MONTHS[month - 1] ?? ''; }\n\n// ── Relative time ─────────────────────────────────────────────────────────\n\nexport function timeAgo(date: Date, locale = 'en'): string {\n const diff = Date.now() - date.getTime();\n const abs = Math.abs(diff);\n const future = diff < 0;\n const pre = future ? 'in ' : '';\n const suf = future ? '' : ' ago';\n if (abs < 60_000) return 'just now';\n if (abs < 3_600_000) return `${pre}${Math.floor(abs / 60_000)}m${suf}`;\n if (abs < 86_400_000) return `${pre}${Math.floor(abs / 3_600_000)}h${suf}`;\n if (abs < 2_592_000_000) return `${pre}${Math.floor(abs / 86_400_000)}d${suf}`;\n return formatDate(date, 'DD MMM YYYY', locale);\n}\n\n// ── Private helpers ─────────────────────────────────────────────────────────\n\nfunction _toIso(date: Date): string { return date.toISOString().slice(0, 10); }\n\nfunction _toJulian(y: number, m: number, d: number): number {\n if (m <= 2) { y--; m += 12; }\n const A = Math.floor(y / 100);\n const B = 2 - A + Math.floor(A / 4);\n return Math.floor(365.25 * (y + 4716)) + Math.floor(30.6001 * (m + 1)) + d + B - 1524;\n}\n\nfunction _fromJulian(jd: number): Date {\n const z = Math.floor(jd + 0.5);\n const a = Math.floor((z - 1867216.25) / 36524.25);\n const A = z + 1 + a - Math.floor(a / 4);\n const B = A + 1524;\n const C = Math.floor((B - 122.1) / 365.25);\n const D = Math.floor(365.25 * C);\n const E = Math.floor((B - D) / 30.6001);\n const day = B - D - Math.floor(30.6001 * E);\n const month = E < 14 ? E - 1 : E - 13;\n const year = month > 2 ? C - 4716 : C - 4715;\n return new Date(year, month - 1, day);\n}\n","// QR code generator — ISO 18004, versions 1-10, byte encoding\n// Pure TypeScript/SVG — no DOM required for generation\n\nexport type JoopQrEcLevel = 'L' | 'M' | 'Q' | 'H';\n\nexport interface JoopQrOptions {\n ecLevel?: JoopQrEcLevel;\n size?: number;\n margin?: number;\n foreground?: string;\n background?: string;\n}\n\n// ── GF(256) ─────────────────────────────────────────────────────────────────\nconst _GFe = new Uint8Array(512), _GFl = new Uint8Array(256);\n(function () {\n let x = 1;\n for (let i = 0; i < 255; i++) { _GFe[i] = x; _GFl[x] = i; x = x << 1; if (x & 0x100) x ^= 0x11d; }\n for (let i = 255; i < 512; i++) _GFe[i] = _GFe[i - 255];\n})();\nconst _gm = (a: number, b: number) => a && b ? _GFe[(_GFl[a] + _GFl[b]) % 255] : 0;\n\nfunction _gen(n: number): number[] {\n let g = [1];\n for (let i = 0; i < n; i++) {\n const next = new Array(g.length + 1).fill(0);\n for (let j = 0; j < g.length; j++) { next[j] ^= g[j]; next[j + 1] ^= _gm(g[j], _GFe[i]); }\n g = next;\n }\n return g;\n}\n\nfunction _rsEnc(data: number[], nec: number): number[] {\n const g = _gen(nec);\n const msg = [...data, ...new Array(nec).fill(0)];\n for (let i = 0; i < data.length; i++) {\n const c = msg[i];\n if (c) for (let j = 0; j < g.length; j++) msg[i + j] ^= _gm(g[j], c);\n }\n return msg.slice(data.length);\n}\n\n// ── Version tables ───────────────────────────────────────────────────────────\n// [ecPerBlock, [[count, dataPerBlock], ...]]\ntype ECD = [number, Array<[number, number]>];\ninterface VD { aln: number[]; L: ECD; M: ECD; Q: ECD; H: ECD; }\n\nconst VT: VD[] = [\n { aln:[], L:[7,[[1,19]]], M:[10,[[1,16]]], Q:[13,[[1,13]]], H:[17,[[1,9]]] },\n { aln:[6,18], L:[10,[[1,34]]], M:[16,[[1,28]]], Q:[22,[[1,22]]], H:[28,[[1,16]]] },\n { aln:[6,22], L:[15,[[1,55]]], M:[26,[[1,44]]], Q:[18,[[2,17]]], H:[22,[[2,13]]] },\n { aln:[6,26], L:[20,[[1,80]]], M:[18,[[2,32]]], Q:[26,[[2,24]]], H:[16,[[4,9]]] },\n { aln:[6,30], L:[26,[[1,108]]], M:[24,[[2,43]]], Q:[18,[[2,15],[2,16]]], H:[22,[[2,11],[2,12]]] },\n { aln:[6,34], L:[18,[[2,68]]], M:[16,[[4,27]]], Q:[24,[[4,19]]], H:[28,[[4,15]]] },\n { aln:[6,22,38],L:[20,[[2,78]]], M:[18,[[4,31]]], Q:[18,[[2,14],[4,15]]], H:[26,[[4,13],[1,14]]] },\n { aln:[6,24,42],L:[24,[[2,97]]], M:[22,[[2,38],[2,39]]], Q:[22,[[4,18],[2,19]]], H:[26,[[4,14],[2,15]]] },\n { aln:[6,26,46],L:[30,[[2,116]]],M:[22,[[3,36],[2,37]]], Q:[20,[[4,16],[4,17]]], H:[24,[[4,12],[4,13]]] },\n { aln:[6,28,50],L:[18,[[2,68],[2,69]]],M:[26,[[4,43],[1,44]]],Q:[24,[[6,19],[2,20]]],H:[28,[[6,15],[2,16]]] },\n];\nconst ECI: Record<JoopQrEcLevel, number> = { L:1, M:0, Q:3, H:2 };\n\nfunction _cap(v: number, ec: JoopQrEcLevel) { return VT[v-1][ec][1].reduce((s,[c,d]) => s + c*d, 0); }\n\nfunction _bestV(len: number, ec: JoopQrEcLevel): number {\n for (let v = 1; v <= 10; v++) if (_cap(v, ec) >= len + 3) return v;\n throw new Error(`JoopQr: text too long (${len} bytes) for versions 1-10`);\n}\n\n// ── Encode data ──────────────────────────────────────────────────────────────\nfunction _encData(text: string, ver: number, ec: JoopQrEcLevel): number[] {\n const bytes = new TextEncoder().encode(text);\n const total = _cap(ver, ec);\n const bits: number[] = [];\n const push = (v: number, n: number) => { for (let i = n-1; i >= 0; i--) bits.push((v >> i) & 1); };\n push(0b0100, 4);\n push(bytes.length, 8);\n for (const b of bytes) push(b, 8);\n push(0, Math.min(4, total * 8 - bits.length));\n while (bits.length % 8) bits.push(0);\n const cw: number[] = [];\n for (let i = 0; i < bits.length; i += 8) { let b = 0; for (let j = 0; j < 8; j++) b = (b << 1) | (bits[i+j] ?? 0); cw.push(b); }\n const pad = [0xec, 0x11];\n while (cw.length < total) cw.push(pad[cw.length % 2]);\n return cw;\n}\n\n// ── Interleave + RS ──────────────────────────────────────────────────────────\nfunction _buildCW(data: number[], ver: number, ec: JoopQrEcLevel): number[] {\n const [ecpb, groups] = VT[ver-1][ec];\n const db: number[][] = [], eb: number[][] = [];\n let di = 0;\n for (const [cnt, dpb] of groups) for (let b = 0; b < cnt; b++) { const bl = data.slice(di, di+dpb); di += dpb; db.push(bl); eb.push(_rsEnc(bl, ecpb)); }\n const r: number[] = [];\n const md = Math.max(...db.map(b => b.length));\n for (let i = 0; i < md; i++) for (const b of db) if (i < b.length) r.push(b[i]);\n for (let i = 0; i < ecpb; i++) for (const b of eb) r.push(b[i]);\n return r;\n}\n\n// ── Matrix ───────────────────────────────────────────────────────────────────\ntype Mat = Int8Array[];\nfunction _mat(sz: number): Mat { return Array.from({length:sz}, () => new Int8Array(sz).fill(-1)); }\n\nfunction _finder(m: Mat, r: number, c: number): void {\n for (let dr = -1; dr <= 7; dr++) for (let dc = -1; dc <= 7; dc++) {\n const row = r+dr, col = c+dc;\n if (row < 0 || col < 0 || row >= m.length || col >= m.length) continue;\n const inF = dr>=0&&dr<=6&&dc>=0&&dc<=6;\n m[row][col] = inF ? ((dr===0||dr===6||dc===0||dc===6||( dr>=2&&dr<=4&&dc>=2&&dc<=4))?1:0) : 0;\n }\n}\n\nfunction _align(m: Mat, r: number, c: number): void {\n for (let dr = -2; dr <= 2; dr++) for (let dc = -2; dc <= 2; dc++) {\n m[r+dr][c+dc] = (Math.abs(dr)===2||Math.abs(dc)===2||(dr===0&&dc===0)) ? 1 : 0;\n }\n}\n\nfunction _funcPat(m: Mat, ver: number): void {\n const sz = m.length;\n _finder(m, 0, 0); _finder(m, 0, sz-7); _finder(m, sz-7, 0);\n for (let i = 8; i < sz-8; i++) { if (m[6][i]===-1) m[6][i]=i%2?0:1; if (m[i][6]===-1) m[i][6]=i%2?0:1; }\n const aln = VT[ver-1].aln;\n for (const r of aln) for (const c of aln) if (m[r][c]===-1) _align(m, r, c);\n m[4*ver+9][8] = 1;\n for (let i = 0; i <= 8; i++) { if (m[8][i]===-1) m[8][i]=0; if (m[i][8]===-1) m[i][8]=0; }\n for (let i = sz-8; i < sz; i++) { if (m[8][i]===-1) m[8][i]=0; if (m[i][8]===-1) m[i][8]=0; }\n}\n\nfunction _placeData(m: Mat, cw: number[]): void {\n const sz = m.length;\n const bits: number[] = [];\n for (const b of cw) for (let i = 7; i >= 0; i--) bits.push((b>>i)&1);\n let bi = 0, up = true;\n for (let col = sz-1; col >= 1; col -= 2) {\n if (col===6) col--;\n for (let ri = 0; ri < sz; ri++) {\n const row = up ? sz-1-ri : ri;\n for (let dc = 0; dc < 2; dc++) { const c = col-dc; if (m[row][c]===-1) m[row][c] = bi < bits.length ? bits[bi++] : 0; }\n }\n up = !up;\n }\n}\n\n// ── Masking ──────────────────────────────────────────────────────────────────\nconst MFN: Array<(r:number,c:number)=>boolean> = [\n (r,c)=>(r+c)%2===0, (r)=>r%2===0, (_,c)=>c%3===0, (r,c)=>(r+c)%3===0,\n (r,c)=>(Math.floor(r/2)+Math.floor(c/3))%2===0,\n (r,c)=>(r*c)%2+(r*c)%3===0, (r,c)=>((r*c)%2+(r*c)%3)%2===0, (r,c)=>((r+c)%2+(r*c)%3)%2===0,\n];\n\nfunction _mask(m: Mat, pat: number, isF: boolean[][]): Mat {\n const sz = m.length;\n const copy: Mat = m.map(r => new Int8Array(r));\n const fn = MFN[pat];\n for (let r = 0; r < sz; r++) for (let c = 0; c < sz; c++) if (!isF[r][c] && copy[r][c]!==-1) if (fn(r,c)) copy[r][c] ^= 1;\n return copy;\n}\n\nfunction _pen(m: Mat): number {\n const sz = m.length; let p = 0;\n for (let r = 0; r < sz; r++) for (const hor of [true,false]) {\n let run=1, prev = hor?m[r][0]:m[0][r];\n for (let i = 1; i < sz; i++) { const cur=hor?m[r][i]:m[i][r]; if(cur===prev){run++;if(run===5)p+=3;else if(run>5)p++;}else{run=1;prev=cur;} }\n }\n for (let r = 0; r < sz-1; r++) for (let c = 0; c < sz-1; c++) { const v=m[r][c]; if(v===m[r][c+1]&&v===m[r+1][c]&&v===m[r+1][c+1])p+=3; }\n let dark=0; for (let r=0;r<sz;r++) for (let c=0;c<sz;c++) if(m[r][c]) dark++;\n p += Math.abs(Math.floor(dark/(sz*sz)*20)-10)*10;\n return p;\n}\n\n// ── Format info ──────────────────────────────────────────────────────────────\nfunction _fmtBits(ec: JoopQrEcLevel, mask: number): number {\n const data = (ECI[ec] << 3) | mask;\n let rem = data << 10;\n for (let i = 14; i >= 10; i--) if (rem & (1<<i)) rem ^= (0x537 << (i-10));\n return ((data << 10) | rem) ^ 0x5412;\n}\n\nfunction _placeFmt(m: Mat, fmt: number): void {\n const sz = m.length;\n const bits: number[] = [];\n for (let i = 14; i >= 0; i--) bits.push((fmt>>i)&1);\n let bi = 0;\n for (let c = 0; c <= 5; c++) m[8][c]=bits[bi++];\n m[8][7]=bits[bi++]; m[8][8]=bits[bi++]; m[7][8]=bits[bi++];\n for (let r = 5; r >= 0; r--) m[r][8]=bits[bi++];\n bi = 0;\n for (let r = sz-1; r >= sz-7; r--) m[r][8]=bits[bi++];\n m[8][sz-8]=bits[bi++];\n for (let c = sz-7; c < sz; c++) m[8][c]=bits[bi++];\n}\n\n// ── SVG output ───────────────────────────────────────────────────────────────\nfunction _svg(m: Mat, o: Required<JoopQrOptions>): string {\n const sz = m.length, tot = sz + 2*o.margin, mod = o.size / tot;\n let rects = '';\n for (let r = 0; r < sz; r++) for (let c = 0; c < sz; c++) {\n if (m[r][c]===1) {\n const x = ((c+o.margin)*mod).toFixed(2), y = ((r+o.margin)*mod).toFixed(2), s = (mod+0.1).toFixed(2);\n rects += `<rect x=\"${x}\" y=\"${y}\" width=\"${s}\" height=\"${s}\"/>`;\n }\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${o.size} ${o.size}\" shape-rendering=\"crispEdges\"><rect width=\"${o.size}\" height=\"${o.size}\" fill=\"${o.background}\"/><g fill=\"${o.foreground}\">${rects}</g></svg>`;\n}\n\n// ── Public API ───────────────────────────────────────────────────────────────\n\n/** Generate a QR code SVG string */\nexport function generateQr(text: string, options: JoopQrOptions = {}): string {\n const ec = options.ecLevel ?? 'M';\n const opts: Required<JoopQrOptions> = {\n ecLevel: ec, size: options.size ?? 300, margin: options.margin ?? 4,\n foreground: options.foreground ?? '#000000', background: options.background ?? '#ffffff',\n };\n const bytes = new TextEncoder().encode(text);\n const ver = _bestV(bytes.length, ec);\n const sz = 4*ver + 17;\n\n const dataCW = _encData(text, ver, ec);\n const allCW = _buildCW(dataCW, ver, ec);\n const m = _mat(sz);\n _funcPat(m, ver);\n\n const isF = Array.from({length:sz}, (_, r) => Array.from({length:sz}, (_, c) => m[r][c] !== -1));\n _placeData(m, allCW);\n\n let bm = 0, bp = Infinity;\n for (let mp = 0; mp < 8; mp++) {\n const masked = _mask(m, mp, isF);\n _placeFmt(masked, _fmtBits(ec, mp));\n const pen = _pen(masked);\n if (pen < bp) { bp = pen; bm = mp; }\n }\n\n const final = _mask(m, bm, isF);\n _placeFmt(final, _fmtBits(ec, bm));\n return _svg(final, opts);\n}\n\n/** Generate a QR code as a base64 SVG data URL */\nexport function generateQrDataUrl(text: string, options: JoopQrOptions = {}): string {\n const svg = generateQr(text, options);\n return 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)));\n}\n\n/** Generate QR for a payment (wraps text with standard payment URI) */\nexport function generatePaymentQr(amount: number, currency: string, reference: string, options?: JoopQrOptions): string {\n const uri = `payment:${currency}:${amount}:${reference}`;\n return generateQr(uri, options);\n}\n","// Code 128B and EAN-13 SVG barcode generators — zero dependencies\n\nexport interface JoopBarcodeOptions {\n width?: number;\n height?: number;\n margin?: number;\n foreground?: string;\n background?: string;\n showText?: boolean;\n fontSize?: number;\n}\n\n// ── Code 128B ────────────────────────────────────────────────────────────────\n\n// Each symbol: 6 elements (3 bars + 3 spaces) of widths 1–4 modules, encoded as a string\n// Quiet zone: 10 modules each side. Start: 11010000100. Stop: 1100011101011.\nconst C128_SYMBOLS = [\n '11011001100','11001101100','11001100110','10010011000','10010001100',\n '10001001100','10011001000','10011000100','10001100100','11001001000',\n '11001000100','11000100100','10110011100','10011011100','10011001110',\n '10111001100','10011101100','10011100110','11001110010','11001011100',\n '11001001110','11011100100','11001110100','11101101110','11101001100',\n '11100101100','11100100110','11101100100','11100110100','11100110010',\n '11011011000','11011000110','11000110110','10100011000','10001011000',\n '10001000110','10110001000','10001101000','10001100010','11010001000',\n '11000101000','11000100010','10110111000','10110001110','10001101110',\n '10111011000','10111000110','10001110110','11101110110','11010001110',\n '11000101110','11011101000','11011100010','11011101110','11101011000',\n '11101000110','11100010110','11101101000','11101100010','11100011010',\n '11101111010','11001000010','11110001010','10100110000','10100001100',\n '10010110000','10010000110','10000101100','10000100110','10110010000',\n '10110000100','10011010000','10011000010','10000110100','10000110010',\n '11000010010','11001010000','11110111010','11000010100','10001111010',\n '10100111100','10010111100','10010011110','10111100100','10011110100',\n '10011110010','11110100100','11110010100','11110010010','11011011110',\n '11011110110','11110110110','10101111000','10100011110','10001011110',\n '10111101000','10111100010','11110101000','11110100010','10111011110',\n '10111101110','11101011110','11110101110','11010000100','11010010000',\n '11010011100','11000111010',\n];\nconst C128_START_B = '11010010000';\nconst C128_STOP = '11000111010';\n\nfunction _code128Bars(text: string): string {\n const codes: number[] = [];\n let checksum = 104; // START B value\n for (let i = 0; i < text.length; i++) {\n const v = text.charCodeAt(i) - 32;\n if (v < 0 || v > 95) throw new Error(`Code128: unsupported char '${text[i]}'`);\n codes.push(v);\n checksum += v * (i + 1);\n }\n codes.push(checksum % 103);\n return C128_START_B + codes.map(c => C128_SYMBOLS[c]).join('') + C128_STOP + '11';\n}\n\nexport function generateCode128(text: string, opts: JoopBarcodeOptions = {}): string {\n const bars = _code128Bars(text);\n const mw = opts.width ? Math.floor((opts.width - 2 * (opts.margin ?? 10)) / bars.length) : 2;\n const margin = opts.margin ?? 10;\n const barH = (opts.height ?? 80) - (opts.showText !== false ? (opts.fontSize ?? 12) + 4 : 0) - margin;\n const totalW = bars.length * mw + margin * 2;\n const totalH = opts.height ?? 80;\n const fg = opts.foreground ?? '#000000';\n const bg = opts.background ?? '#ffffff';\n\n let rects = '';\n for (let i = 0; i < bars.length; i++) {\n if (bars[i] === '1') rects += `<rect x=\"${margin + i * mw}\" y=\"${margin}\" width=\"${mw}\" height=\"${barH}\" fill=\"${fg}\"/>`;\n }\n\n const label = opts.showText !== false\n ? `<text x=\"${totalW / 2}\" y=\"${totalH - 2}\" text-anchor=\"middle\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 12}\" fill=\"${fg}\">${text}</text>`\n : '';\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalW}\" height=\"${totalH}\" viewBox=\"0 0 ${totalW} ${totalH}\"><rect width=\"${totalW}\" height=\"${totalH}\" fill=\"${bg}\"/>${rects}${label}</svg>`;\n}\n\n// ── EAN-13 ────────────────────────────────────────────────────────────────────\n\nconst EAN_L = ['0001101','0011001','0010011','0111101','0100011','0110001','0101111','0111011','0110111','0001011'];\nconst EAN_G = ['0100111','0110011','0011011','0100001','0011101','0111001','0000101','0010001','0001001','0010111'];\nconst EAN_R = ['1110010','1100110','1101100','1000010','1011100','1001110','1010000','1000100','1001000','1110100'];\n// Parity table: 0=L, 1=G for left side digits 1-6 based on first digit\nconst EAN_PARITY = ['LLLLLL','LLGLGG','LLGGLG','LLGGGL','LGLLGG','LGGLLG','LGGGLL','LGLGLG','LGLGGL','LGGLGL'];\n\nfunction _ean13Bars(digits: string): string {\n if (!/^\\d{13}$/.test(digits)) throw new Error('EAN-13: need exactly 13 digits');\n const d = digits.split('').map(Number);\n const parity = EAN_PARITY[d[0]];\n let bars = '101'; // left guard\n for (let i = 0; i < 6; i++) bars += parity[i] === 'G' ? EAN_G[d[i+1]] : EAN_L[d[i+1]];\n bars += '01010'; // center guard\n for (let i = 7; i < 13; i++) bars += EAN_R[d[i]];\n bars += '101'; // right guard\n return bars;\n}\n\nexport function validateEan13(digits: string): boolean {\n if (!/^\\d{12,13}$/.test(digits)) return false;\n const d = digits.slice(0, 12).split('').map(Number);\n const check = (10 - ((d.reduce((s, v, i) => s + (i % 2 === 0 ? v : v * 3), 0)) % 10)) % 10;\n return digits.length === 12 ? true : check === Number(digits[12]);\n}\n\nexport function generateEan13(digits: string, opts: JoopBarcodeOptions = {}): string {\n const bars = _ean13Bars(digits);\n const mw = 2;\n const margin = opts.margin ?? 10;\n const barH = (opts.height ?? 70) - (opts.showText !== false ? (opts.fontSize ?? 12) + 4 : 0) - margin;\n const totalW = bars.length * mw + margin * 2 + 8; // +8 for first-digit label\n const totalH = opts.height ?? 70;\n const fg = opts.foreground ?? '#000000';\n const bg = opts.background ?? '#ffffff';\n\n let rects = '';\n const xOff = margin + 8;\n for (let i = 0; i < bars.length; i++) {\n if (bars[i] === '1') rects += `<rect x=\"${xOff + i * mw}\" y=\"${margin}\" width=\"${mw}\" height=\"${barH}\" fill=\"${fg}\"/>`;\n }\n\n const label = opts.showText !== false\n ? `<text x=\"${margin}\" y=\"${margin + barH - 2}\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 10}\" fill=\"${fg}\">${digits[0]}</text><text x=\"${totalW / 2}\" y=\"${totalH - 2}\" text-anchor=\"middle\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 10}\" fill=\"${fg}\">${digits.slice(1, 7)} ${digits.slice(7)}</text>`\n : '';\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalW}\" height=\"${totalH}\" viewBox=\"0 0 ${totalW} ${totalH}\"><rect width=\"${totalW}\" height=\"${totalH}\" fill=\"${bg}\"/>${rects}${label}</svg>`;\n}\n\n// ── Code 39 (alphanumeric, simpler) ──────────────────────────────────────────\n\nconst C39_MAP: Record<string, string> = {\n '0':'101001101101','1':'110100101011','2':'101100101011','3':'110110010101',\n '4':'101001101011','5':'110100110101','6':'101100110101','7':'101001011011',\n '8':'110100101101','9':'101100101101','A':'110101001011','B':'101101001011',\n 'C':'110110100101','D':'101011001011','E':'110101100101','F':'101101100101',\n 'G':'101010011011','H':'110101001101','I':'101101001101','J':'101011001101',\n 'K':'110101010011','L':'101101010011','M':'110110101001','N':'101011010011',\n 'O':'110101101001','P':'101101101001','Q':'101010110011','R':'110101011001',\n 'S':'101101011001','T':'101011011001','U':'110010101011','V':'100110101011',\n 'W':'110011010101','X':'100101101011','Y':'110010110101','Z':'100110110101',\n '-':'100101011011','.':'110010101101',' ':'100110101101','*':'100101101101',\n};\n\nexport function generateCode39(text: string, opts: JoopBarcodeOptions = {}): string {\n const upper = text.toUpperCase();\n const barsStr = ['*', ...upper.split(''), '*'].map(c => {\n if (!C39_MAP[c]) throw new Error(`Code39: unsupported char '${c}'`);\n return C39_MAP[c];\n }).join('0'); // narrow space between symbols\n\n const mw = 2;\n const margin = opts.margin ?? 10;\n const barH = (opts.height ?? 70) - (opts.showText !== false ? (opts.fontSize ?? 12) + 4 : 0) - margin;\n const totalW = barsStr.length * mw + margin * 2;\n const totalH = opts.height ?? 70;\n const fg = opts.foreground ?? '#000000';\n const bg = opts.background ?? '#ffffff';\n\n let rects = '';\n for (let i = 0; i < barsStr.length; i++) {\n if (barsStr[i] === '1') rects += `<rect x=\"${margin + i * mw}\" y=\"${margin}\" width=\"${mw}\" height=\"${barH}\" fill=\"${fg}\"/>`;\n }\n const label = opts.showText !== false\n ? `<text x=\"${totalW / 2}\" y=\"${totalH - 2}\" text-anchor=\"middle\" font-family=\"monospace\" font-size=\"${opts.fontSize ?? 12}\" fill=\"${fg}\">${text}</text>`\n : '';\n\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${totalW}\" height=\"${totalH}\" viewBox=\"0 0 ${totalW} ${totalH}\"><rect width=\"${totalW}\" height=\"${totalH}\" fill=\"${bg}\"/>${rects}${label}</svg>`;\n}\n\nexport function generateBarcodeDataUrl(svg: string): string {\n return `data:image/svg+xml;base64,${btoa(svg)}`;\n}\n","// Minimal PDF 1.4 writer — generates valid PDFs with text, lines, and tables.\n// No external dependencies. Coordinate origin: top-left (Y increases downward).\n\nexport interface JoopPdfTextOptions {\n font?: 'Helvetica' | 'Helvetica-Bold' | 'Times-Roman' | 'Courier';\n size?: number;\n color?: [number, number, number]; // RGB 0-1\n}\n\nexport interface JoopPdfLineOptions {\n width?: number;\n color?: [number, number, number];\n dash?: [number, number];\n}\n\nexport interface JoopPdfTableColumn {\n header: string;\n key: string;\n width: number;\n align?: 'left' | 'right' | 'center';\n}\n\nexport interface JoopPdfOptions {\n pageWidth?: number;\n pageHeight?: number;\n margin?: number;\n}\n\nexport interface JoopReceiptLine {\n label: string;\n value: string;\n bold?: boolean;\n}\n\nconst PT = { W: 595.28, H: 841.89 }; // A4 in points\n\nclass _PdfBuilder {\n private _objs: string[] = [];\n private _offsets: number[] = [];\n private _stream = '';\n private _pw: number;\n private _ph: number;\n private _fonts = new Set<string>();\n\n constructor(w = PT.W, h = PT.H) { this._pw = w; this._ph = h; }\n\n private _addObj(body: string): number {\n const id = this._objs.length + 1;\n this._objs.push(body);\n return id;\n }\n\n private _y(y: number): number { return this._ph - y; } // flip Y axis\n\n text(x: number, y: number, content: string, opts: JoopPdfTextOptions = {}): this {\n const font = opts.font ?? 'Helvetica';\n const size = opts.size ?? 10;\n const [r, g, b] = opts.color ?? [0, 0, 0];\n this._fonts.add(font);\n const safe = content.replace(/\\\\/g, '\\\\\\\\').replace(/\\(/g, '\\\\(').replace(/\\)/g, '\\\\)');\n this._stream += `BT\\n/${font.replace('-', '')} ${size} Tf\\n${r} ${g} ${b} rg\\n${x} ${this._y(y) - size} Td\\n(${safe}) Tj\\nET\\n`;\n return this;\n }\n\n line(x1: number, y1: number, x2: number, y2: number, opts: JoopPdfLineOptions = {}): this {\n const [r, g, b] = opts.color ?? [0, 0, 0];\n const w = opts.width ?? 0.5;\n const dash = opts.dash ? `[${opts.dash[0]} ${opts.dash[1]}] 0 d\\n` : '[] 0 d\\n';\n this._stream += `${r} ${g} ${b} RG\\n${w} w\\n${dash}${x1} ${this._y(y1)} m\\n${x2} ${this._y(y2)} l\\nS\\n`;\n return this;\n }\n\n rect(x: number, y: number, w: number, h: number, fill?: [number, number, number], stroke?: [number, number, number]): this {\n if (fill) this._stream += `${fill[0]} ${fill[1]} ${fill[2]} rg\\n${x} ${this._y(y) - h} ${w} ${h} re\\nf\\n`;\n if (stroke) this._stream += `${stroke[0]} ${stroke[1]} ${stroke[2]} RG\\n${x} ${this._y(y) - h} ${w} ${h} re\\nS\\n`;\n return this;\n }\n\n table(x: number, y: number, cols: JoopPdfTableColumn[], rows: Record<string, string>[], opts: { rowHeight?: number; headerBg?: [number, number, number]; fontSize?: number } = {}): number {\n const rh = opts.rowHeight ?? 18;\n const fs = opts.fontSize ?? 9;\n const hbg = opts.headerBg ?? [0.2, 0.4, 0.7];\n const totalW = cols.reduce((s, c) => s + c.width, 0);\n\n // Header background\n this.rect(x, y, totalW, rh, hbg);\n let cx = x;\n for (const col of cols) {\n this.text(cx + 3, y + 4, col.header, { font: 'Helvetica-Bold', size: fs, color: [1, 1, 1] });\n cx += col.width;\n }\n y += rh;\n\n for (let i = 0; i < rows.length; i++) {\n if (i % 2 === 1) this.rect(x, y, totalW, rh, [0.95, 0.95, 0.95]);\n cx = x;\n for (const col of cols) {\n const val = String(rows[i][col.key] ?? '');\n const textX = col.align === 'right' ? cx + col.width - 3 - val.length * fs * 0.5\n : col.align === 'center' ? cx + col.width / 2 - val.length * fs * 0.25\n : cx + 3;\n this.text(textX, y + 4, val, { size: fs });\n cx += col.width;\n }\n this.line(x, y + rh, x + totalW, y + rh, { width: 0.3, color: [0.8, 0.8, 0.8] });\n y += rh;\n }\n return y;\n }\n\n build(): Uint8Array {\n // Font dictionary entries\n const fontNames = ['Helvetica', 'HelveticaBold', 'TimesRoman', 'Courier'];\n const fontObjs: number[] = [];\n for (const fn of fontNames) {\n const baseName = fn === 'HelveticaBold' ? 'Helvetica-Bold' : fn === 'TimesRoman' ? 'Times-Roman' : fn;\n fontObjs.push(this._addObj(`<< /Type /Font /Subtype /Type1 /BaseFont /${baseName} /Encoding /WinAnsiEncoding >>`));\n }\n\n const fontDict = fontNames.map((n, i) => `/${n} ${fontObjs[i]} 0 R`).join('\\n');\n const resources = this._addObj(`<< /Font << ${fontDict} >> >>`);\n\n const streamBytes = new TextEncoder().encode(this._stream);\n const contentObj = this._addObj(`<< /Length ${streamBytes.length} >>\\nstream\\n${this._stream}endstream`);\n const pageObj = this._addObj(`<< /Type /Page /Parent 2 0 R /MediaBox [0 0 ${this._pw} ${this._ph}] /Contents ${contentObj} 0 R /Resources ${resources} 0 R >>`);\n const pagesObj = 2; // reserved slot\n const catalogObj = 1; // reserved slot\n\n // Rebuild in order: catalog=1, pages=2, then all others\n const ordered = [\n `<< /Type /Catalog /Pages 2 0 R >>`,\n `<< /Type /Pages /Kids [${pageObj} 0 R] /Count 1 >>`,\n ...this._objs.slice(2),\n ];\n\n let body = '%PDF-1.4\\n';\n const offsets: number[] = [];\n for (let i = 0; i < ordered.length; i++) {\n offsets.push(body.length);\n body += `${i + 1} 0 obj\\n${ordered[i]}\\nendobj\\n`;\n }\n\n const xrefOffset = body.length;\n body += `xref\\n0 ${ordered.length + 1}\\n0000000000 65535 f \\n`;\n for (const off of offsets) body += `${String(off).padStart(10, '0')} 00000 n \\n`;\n body += `trailer\\n<< /Size ${ordered.length + 1} /Root 1 0 R >>\\nstartxref\\n${xrefOffset}\\n%%EOF`;\n\n return new TextEncoder().encode(body);\n }\n}\n\nexport class JoopPdfService {\n private _opts: JoopPdfOptions;\n\n constructor(opts: JoopPdfOptions = {}) { this._opts = opts; }\n\n private _builder(): _PdfBuilder {\n return new _PdfBuilder(this._opts.pageWidth ?? PT.W, this._opts.pageHeight ?? PT.H);\n }\n\n /** Generate a basic receipt PDF */\n receipt(title: string, lines: JoopReceiptLine[], footer?: string): Uint8Array {\n const m = this._opts.margin ?? 60;\n const pw = this._opts.pageWidth ?? PT.W;\n const doc = this._builder();\n let y = m;\n\n doc.text(m, y, title, { font: 'Helvetica-Bold', size: 16 });\n y += 30;\n doc.line(m, y, pw - m, y);\n y += 12;\n\n for (const line of lines) {\n const font = line.bold ? 'Helvetica-Bold' : 'Helvetica';\n doc.text(m, y, line.label, { font, size: 10 });\n doc.text(pw - m - line.value.length * 6, y, line.value, { font, size: 10 });\n y += 16;\n }\n\n doc.line(m, y, pw - m, y);\n y += 14;\n if (footer) doc.text(m, y, footer, { size: 8, color: [0.5, 0.5, 0.5] });\n\n return doc.build();\n }\n\n /** Generate a statement with a table */\n statement(\n title: string,\n subtitle: string,\n columns: JoopPdfTableColumn[],\n rows: Record<string, string>[],\n summary?: JoopReceiptLine[],\n ): Uint8Array {\n const m = this._opts.margin ?? 40;\n const pw = this._opts.pageWidth ?? PT.W;\n const doc = this._builder();\n let y = m;\n\n doc.text(m, y, title, { font: 'Helvetica-Bold', size: 14 });\n y += 20;\n doc.text(m, y, subtitle, { size: 9, color: [0.4, 0.4, 0.4] });\n y += 16;\n doc.line(m, y, pw - m, y);\n y += 12;\n\n y = doc.table(m, y, columns, rows) + 10;\n\n if (summary) {\n for (const line of summary) {\n const font = line.bold ? 'Helvetica-Bold' : 'Helvetica';\n doc.text(m, y, line.label, { font, size: 10 });\n doc.text(pw - m - line.value.length * 6, y, line.value, { font, size: 10 });\n y += 16;\n }\n }\n\n return doc.build();\n }\n\n /** Wrap raw bytes as a base64 data URL */\n toDataUrl(bytes: Uint8Array): string {\n let bin = '';\n for (const b of bytes) bin += String.fromCharCode(b);\n return `data:application/pdf;base64,${btoa(bin)}`;\n }\n\n /** Trigger browser download */\n download(bytes: Uint8Array, filename = 'document.pdf'): void {\n const blob = new Blob([new Uint8Array(bytes)], { type: 'application/pdf' });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url; a.download = filename; a.click();\n URL.revokeObjectURL(url);\n }\n\n /** Low-level builder for custom documents */\n builder(): _PdfBuilder { return this._builder(); }\n}\n","import { JoopBehaviorSubject } from '../events';\n\nexport type JoopNotificationPermission = 'default' | 'granted' | 'denied';\n\nexport interface JoopNotificationOptions extends NotificationOptions {\n tag?: string;\n requireInteraction?: boolean;\n}\n\nexport class JoopNotificationService {\n private _permission$ = new JoopBehaviorSubject<JoopNotificationPermission>(\n typeof Notification !== 'undefined' ? Notification.permission as JoopNotificationPermission : 'default',\n );\n private _messageHandlers: Array<(event: MessageEvent) => void> = [];\n private _swReg: ServiceWorkerRegistration | null = null;\n\n isSupported(): boolean { return typeof Notification !== 'undefined'; }\n\n getPermission(): JoopNotificationPermission { return this._permission$.getValue(); }\n permission$() { return this._permission$.asObservable(); }\n\n async requestPermission(): Promise<JoopNotificationPermission> {\n if (!this.isSupported()) return 'denied';\n const result = await Notification.requestPermission() as JoopNotificationPermission;\n this._permission$.next(result);\n return result;\n }\n\n async show(title: string, options: JoopNotificationOptions = {}): Promise<Notification | null> {\n if (this._permission$.getValue() !== 'granted') {\n const p = await this.requestPermission();\n if (p !== 'granted') return null;\n }\n if (this._swReg) {\n await this._swReg.showNotification(title, options);\n return null;\n }\n return new Notification(title, options);\n }\n\n async setServiceWorker(reg: ServiceWorkerRegistration): Promise<void> {\n this._swReg = reg;\n }\n\n async subscribe(vapidPublicKey: string): Promise<PushSubscription | null> {\n if (!this._swReg) throw new Error('JoopNotification: ServiceWorkerRegistration required');\n const key = _urlBase64ToUint8Array(vapidPublicKey);\n return this._swReg.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: key });\n }\n\n async unsubscribe(): Promise<boolean> {\n if (!this._swReg) return false;\n const sub = await this._swReg.pushManager.getSubscription();\n if (!sub) return false;\n return sub.unsubscribe();\n }\n\n async getSubscription(): Promise<PushSubscription | null> {\n if (!this._swReg) return null;\n return this._swReg.pushManager.getSubscription();\n }\n\n onMessage(handler: (event: MessageEvent) => void): () => void {\n this._messageHandlers.push(handler);\n navigator.serviceWorker?.addEventListener('message', handler);\n return () => {\n this._messageHandlers = this._messageHandlers.filter(h => h !== handler);\n navigator.serviceWorker?.removeEventListener('message', handler);\n };\n }\n\n destroy(): void {\n for (const h of this._messageHandlers) navigator.serviceWorker?.removeEventListener('message', h);\n this._messageHandlers = [];\n }\n}\n\nfunction _urlBase64ToUint8Array(base64String: string): Uint8Array<ArrayBuffer> {\n const padding = '='.repeat((4 - (base64String.length % 4)) % 4);\n const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');\n const raw = atob(base64);\n return new Uint8Array(Array.from(raw, c => c.charCodeAt(0)));\n}\n","export interface JoopGeoPosition {\n latitude: number;\n longitude: number;\n accuracy: number;\n altitude: number | null;\n speed: number | null;\n heading: number | null;\n timestamp: number;\n}\n\nexport interface JoopGeoOptions extends PositionOptions {\n timeout?: number;\n maximumAge?: number;\n enableHighAccuracy?: boolean;\n}\n\nexport class JoopGeoService {\n isSupported(): boolean { return 'geolocation' in navigator; }\n\n async getPosition(opts: JoopGeoOptions = {}): Promise<JoopGeoPosition> {\n return new Promise((resolve, reject) => {\n if (!this.isSupported()) { reject(new Error('Geolocation not supported')); return; }\n navigator.geolocation.getCurrentPosition(\n (p) => resolve(this._map(p)),\n (e) => reject(e),\n opts,\n );\n });\n }\n\n watchPosition(\n onSuccess: (pos: JoopGeoPosition) => void,\n onError?: (err: GeolocationPositionError) => void,\n opts: JoopGeoOptions = {},\n ): number {\n return navigator.geolocation.watchPosition(\n (p) => onSuccess(this._map(p)),\n onError,\n opts,\n );\n }\n\n clearWatch(id: number): void { navigator.geolocation.clearWatch(id); }\n\n async getPermissionState(): Promise<PermissionState> {\n if (!('permissions' in navigator)) return 'prompt';\n const status = await navigator.permissions.query({ name: 'geolocation' });\n return status.state;\n }\n\n /** Haversine distance in kilometers */\n distance(from: { latitude: number; longitude: number }, to: { latitude: number; longitude: number }): number {\n const R = 6371;\n const dLat = _rad(to.latitude - from.latitude);\n const dLon = _rad(to.longitude - from.longitude);\n const a = Math.sin(dLat / 2) ** 2 +\n Math.cos(_rad(from.latitude)) * Math.cos(_rad(to.latitude)) * Math.sin(dLon / 2) ** 2;\n return R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n }\n\n isInRadius(\n point: { latitude: number; longitude: number },\n center: { latitude: number; longitude: number },\n radiusKm: number,\n ): boolean { return this.distance(point, center) <= radiusKm; }\n\n /** Compute compass bearing from `from` to `to` in degrees (0–360) */\n bearing(from: { latitude: number; longitude: number }, to: { latitude: number; longitude: number }): number {\n const dLon = _rad(to.longitude - from.longitude);\n const lat1 = _rad(from.latitude), lat2 = _rad(to.latitude);\n const y = Math.sin(dLon) * Math.cos(lat2);\n const x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(dLon);\n return (_deg(Math.atan2(y, x)) + 360) % 360;\n }\n\n formatCoords(lat: number, lon: number, format: 'dms' | 'decimal' = 'decimal'): string {\n if (format === 'decimal') return `${lat.toFixed(6)}, ${lon.toFixed(6)}`;\n const fmt = (d: number, posLabel: string, negLabel: string) => {\n const abs = Math.abs(d);\n const deg = Math.floor(abs), min = Math.floor((abs - deg) * 60);\n const sec = ((abs - deg - min / 60) * 3600).toFixed(2);\n return `${deg}° ${min}' ${sec}\" ${d >= 0 ? posLabel : negLabel}`;\n };\n return `${fmt(lat, 'N', 'S')}, ${fmt(lon, 'E', 'W')}`;\n }\n\n private _map(p: GeolocationPosition): JoopGeoPosition {\n return {\n latitude: p.coords.latitude,\n longitude: p.coords.longitude,\n accuracy: p.coords.accuracy,\n altitude: p.coords.altitude,\n speed: p.coords.speed,\n heading: p.coords.heading,\n timestamp: p.timestamp,\n };\n }\n}\n\nfunction _rad(d: number): number { return d * Math.PI / 180; }\nfunction _deg(r: number): number { return r * 180 / Math.PI; }\n","export interface JoopMediaConstraints {\n video?: boolean | MediaTrackConstraints;\n audio?: boolean | MediaTrackConstraints;\n}\n\nexport interface JoopRecorderOptions {\n mimeType?: string;\n audioBitsPerSecond?: number;\n videoBitsPerSecond?: number;\n timeslice?: number;\n}\n\nexport class JoopMediaRecorder {\n private _recorder: MediaRecorder;\n private _chunks: Blob[] = [];\n\n constructor(stream: MediaStream, opts: JoopRecorderOptions = {}) {\n const mimeType = opts.mimeType ?? (MediaRecorder.isTypeSupported('video/webm') ? 'video/webm' : '');\n this._recorder = new MediaRecorder(stream, { mimeType, audioBitsPerSecond: opts.audioBitsPerSecond, videoBitsPerSecond: opts.videoBitsPerSecond });\n this._recorder.ondataavailable = (e) => { if (e.data.size > 0) this._chunks.push(e.data); };\n }\n\n start(timeslice?: number): void { this._recorder.start(timeslice); }\n\n stop(): Promise<Blob> {\n return new Promise((resolve) => {\n this._recorder.onstop = () => {\n const mimeType = this._recorder.mimeType || 'video/webm';\n resolve(new Blob(this._chunks, { type: mimeType }));\n };\n this._recorder.stop();\n });\n }\n\n pause(): void { this._recorder.pause(); }\n resume(): void { this._recorder.resume(); }\n getState(): RecordingState { return this._recorder.state; }\n}\n\nexport class JoopMediaService {\n isSupported(): boolean { return 'mediaDevices' in navigator; }\n\n async requestStream(constraints: JoopMediaConstraints): Promise<MediaStream> {\n if (!this.isSupported()) throw new Error('MediaDevices not supported');\n return navigator.mediaDevices.getUserMedia(constraints);\n }\n\n async requestCamera(constraints: MediaTrackConstraints = {}): Promise<MediaStream> {\n return this.requestStream({ video: Object.keys(constraints).length ? constraints : true });\n }\n\n async requestMicrophone(constraints: MediaTrackConstraints = {}): Promise<MediaStream> {\n return this.requestStream({ audio: Object.keys(constraints).length ? constraints : true });\n }\n\n async requestScreenShare(withAudio = false): Promise<MediaStream> {\n if (!('getDisplayMedia' in navigator.mediaDevices)) throw new Error('Screen capture not supported');\n return navigator.mediaDevices.getDisplayMedia({ video: true, audio: withAudio });\n }\n\n stopStream(stream: MediaStream): void { stream.getTracks().forEach(t => t.stop()); }\n\n async capturePhoto(stream: MediaStream, quality = 0.92): Promise<Blob> {\n const video = document.createElement('video');\n video.srcObject = stream;\n video.muted = true;\n await video.play();\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext('2d')!.drawImage(video, 0, 0);\n return new Promise((resolve, reject) => canvas.toBlob(b => b ? resolve(b) : reject(new Error('Capture failed')), 'image/jpeg', quality));\n }\n\n createRecorder(stream: MediaStream, opts?: JoopRecorderOptions): JoopMediaRecorder {\n return new JoopMediaRecorder(stream, opts);\n }\n\n async getDevices(kind?: MediaDeviceKind): Promise<MediaDeviceInfo[]> {\n const devices = await navigator.mediaDevices.enumerateDevices();\n return kind ? devices.filter(d => d.kind === kind) : devices;\n }\n\n async checkPermission(kind: 'camera' | 'microphone'): Promise<PermissionState> {\n if (!('permissions' in navigator)) return 'prompt';\n const name = kind === 'camera' ? 'camera' : 'microphone';\n const status = await navigator.permissions.query({ name: name as PermissionName });\n return status.state;\n }\n\n /** Attach a stream to a <video> element */\n attachStream(stream: MediaStream, videoEl: HTMLVideoElement, muted = true): void {\n videoEl.srcObject = stream;\n videoEl.muted = muted;\n videoEl.play().catch(() => {});\n }\n}\n","// Framework-agnostic cryptographic utilities built on WebCrypto\n\nexport interface JoopPasswordHash {\n hash: string; // hex\n salt: string; // hex\n iterations: number;\n keyLen: number;\n}\n\nfunction _hex(buf: ArrayBuffer): string {\n return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join('');\n}\nfunction _hexToBytes(hex: string): Uint8Array<ArrayBuffer> {\n return new Uint8Array(hex.match(/.{2}/g)!.map(h => parseInt(h, 16)));\n}\n\nexport class JoopCryptoUtils {\n\n // ── Hashing ──────────────────────────────────────────────────────────────\n\n async sha256(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-256', buf));\n }\n\n async sha512(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-512', buf));\n }\n\n async sha1(data: string | ArrayBuffer): Promise<string> {\n const buf = typeof data === 'string' ? new TextEncoder().encode(data) : data;\n return _hex(await crypto.subtle.digest('SHA-1', buf));\n }\n\n // ── HMAC ─────────────────────────────────────────────────────────────────\n\n async hmac(data: string, secret: string, algo: 'SHA-256' | 'SHA-512' | 'SHA-1' = 'SHA-256'): Promise<string> {\n const key = await crypto.subtle.importKey(\n 'raw', new TextEncoder().encode(secret),\n { name: 'HMAC', hash: algo }, false, ['sign'],\n );\n return _hex(await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(data)));\n }\n\n async hmacVerify(data: string, secret: string, signature: string, algo: 'SHA-256' | 'SHA-512' | 'SHA-1' = 'SHA-256'): Promise<boolean> {\n const expected = await this.hmac(data, secret, algo);\n return this.timingSafeEqual(expected, signature);\n }\n\n // ── PBKDF2 ───────────────────────────────────────────────────────────────\n\n async pbkdf2(\n password: string,\n salt: string,\n iterations = 100_000,\n keyLen = 32,\n hash: 'SHA-256' | 'SHA-512' = 'SHA-256',\n ): Promise<string> {\n const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveBits']);\n const bits = await crypto.subtle.deriveBits(\n { name: 'PBKDF2', salt: new TextEncoder().encode(salt), iterations, hash },\n key, keyLen * 8,\n );\n return _hex(bits);\n }\n\n // ── Password hashing ──────────────────────────────────────────────────────\n\n async hashPassword(password: string, salt?: string, iterations = 100_000): Promise<JoopPasswordHash> {\n const s = salt ?? this.generateSalt();\n const hash = await this.pbkdf2(password, s, iterations);\n return { hash, salt: s, iterations, keyLen: 32 };\n }\n\n async verifyPassword(password: string, record: JoopPasswordHash): Promise<boolean> {\n const { hash } = await this.hashPassword(password, record.salt, record.iterations);\n return this.timingSafeEqual(hash, record.hash);\n }\n\n // ── Utilities ──────────────────────────────────────────────────────────────\n\n generateSalt(bytes = 32): string { return _hex(crypto.getRandomValues(new Uint8Array(bytes)).buffer as ArrayBuffer); }\n\n randomBytes(length: number): Uint8Array<ArrayBuffer> {\n return new Uint8Array(crypto.getRandomValues(new Uint8Array(length)));\n }\n\n randomHex(bytes = 16): string { return _hex(this.randomBytes(bytes).buffer as ArrayBuffer); }\n\n uuid(): string {\n const bytes = crypto.getRandomValues(new Uint8Array(16));\n bytes[6] = (bytes[6] & 0x0f) | 0x40;\n bytes[8] = (bytes[8] & 0x3f) | 0x80;\n const hex = _hex(bytes.buffer as ArrayBuffer);\n return `${hex.slice(0,8)}-${hex.slice(8,12)}-${hex.slice(12,16)}-${hex.slice(16,20)}-${hex.slice(20)}`;\n }\n\n /** Constant-time string comparison to prevent timing attacks */\n timingSafeEqual(a: string, b: string): boolean {\n if (a.length !== b.length) return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++) diff |= a.charCodeAt(i) ^ b.charCodeAt(i);\n return diff === 0;\n }\n\n hexToBytes(hex: string): Uint8Array<ArrayBuffer> { return _hexToBytes(hex); }\n bytesToHex(bytes: Uint8Array): string { return _hex(bytes.buffer as ArrayBuffer); }\n\n base64ToHex(b64: string): string { return this.bytesToHex(new Uint8Array(Array.from(atob(b64), c => c.charCodeAt(0)))); }\n hexToBase64(hex: string): string { return btoa(String.fromCharCode(..._hexToBytes(hex))); }\n\n /** Derive an AES-GCM key from a password via PBKDF2 */\n async deriveKey(password: string, salt: string, iterations = 100_000): Promise<CryptoKey> {\n const base = await crypto.subtle.importKey('raw', new TextEncoder().encode(password), 'PBKDF2', false, ['deriveKey']);\n return crypto.subtle.deriveKey(\n { name: 'PBKDF2', salt: new TextEncoder().encode(salt), iterations, hash: 'SHA-256' },\n base, { name: 'AES-GCM', length: 256 }, false, ['encrypt', 'decrypt'],\n );\n }\n}\n","export interface JoopChartBucket {\n label: string;\n value: number;\n count: number;\n start: number;\n end: number;\n}\n\nexport interface JoopCategoryAgg {\n category: string;\n total: number;\n count: number;\n average: number;\n min: number;\n max: number;\n}\n\nexport type JoopTimeInterval = 'hour' | 'day' | 'week' | 'month' | 'year';\n\nfunction _intervalMs(interval: JoopTimeInterval): number {\n const MS = { hour: 3600000, day: 86400000, week: 604800000, month: 2592000000, year: 31536000000 };\n return MS[interval];\n}\n\nfunction _bucketLabel(ts: number, interval: JoopTimeInterval): string {\n const d = new Date(ts);\n if (interval === 'hour') return `${d.toLocaleDateString()} ${d.getHours().toString().padStart(2,'0')}:00`;\n if (interval === 'day') return d.toLocaleDateString();\n if (interval === 'week') return `W${_isoWeek(d)} ${d.getFullYear()}`;\n if (interval === 'month') return `${d.toLocaleString('default', { month: 'short' })} ${d.getFullYear()}`;\n return String(d.getFullYear());\n}\n\nfunction _isoWeek(d: Date): number {\n const jan4 = new Date(d.getFullYear(), 0, 4);\n return Math.ceil((((d.getTime() - jan4.getTime()) / 86400000) + jan4.getDay() + 1) / 7);\n}\n\n/** Aggregate time-series data into fixed-width time buckets */\nexport function bucketByTime(\n data: Record<string, unknown>[],\n interval: JoopTimeInterval,\n valueKey: string,\n dateKey = 'date',\n): JoopChartBucket[] {\n if (!data.length) return [];\n const ms = _intervalMs(interval);\n const buckets = new Map<number, { sum: number; count: number }>();\n\n for (const row of data) {\n const ts = new Date(row[dateKey] as string).getTime();\n const key = Math.floor(ts / ms) * ms;\n const b = buckets.get(key) ?? { sum: 0, count: 0 };\n b.sum += Number(row[valueKey] ?? 0);\n b.count++;\n buckets.set(key, b);\n }\n\n return Array.from(buckets.entries()).sort(([a], [b]) => a - b).map(([key, b]) => ({\n label: _bucketLabel(key, interval),\n value: b.sum,\n count: b.count,\n start: key,\n end: key + ms,\n }));\n}\n\n/** Rolling/moving average over an array of numbers */\nexport function rollingAverage(data: number[], window: number): number[] {\n return data.map((_, i) => {\n const slice = data.slice(Math.max(0, i - window + 1), i + 1);\n return slice.reduce((a, b) => a + b, 0) / slice.length;\n });\n}\n\n/** Normalize values to [0,1] range */\nexport function normalize(data: number[], min?: number, max?: number): number[] {\n const mn = min ?? Math.min(...data);\n const mx = max ?? Math.max(...data);\n const range = mx - mn || 1;\n return data.map(v => (v - mn) / range);\n}\n\n/** Cumulative sum */\nexport function cumulative(data: number[]): number[] {\n let sum = 0;\n return data.map(v => (sum += v));\n}\n\n/** Moving sum over a window */\nexport function movingSum(data: number[], window: number): number[] {\n return data.map((_, i) => data.slice(Math.max(0, i - window + 1), i + 1).reduce((a, b) => a + b, 0));\n}\n\n/** Group by category and compute aggregates */\nexport function aggregateByCategory(\n data: Record<string, unknown>[],\n categoryKey: string,\n valueKey: string,\n): JoopCategoryAgg[] {\n const map = new Map<string, number[]>();\n for (const row of data) {\n const cat = String(row[categoryKey] ?? '');\n const val = Number(row[valueKey] ?? 0);\n if (!map.has(cat)) map.set(cat, []);\n map.get(cat)!.push(val);\n }\n return Array.from(map.entries()).map(([category, vals]) => ({\n category,\n total: vals.reduce((a, b) => a + b, 0),\n count: vals.length,\n average: vals.reduce((a, b) => a + b, 0) / vals.length,\n min: Math.min(...vals),\n max: Math.max(...vals),\n }));\n}\n\n/** Percent change between consecutive values */\nexport function percentChange(values: number[]): number[] {\n return values.map((v, i) => i === 0 ? 0 : ((v - values[i - 1]) / (Math.abs(values[i - 1]) || 1)) * 100);\n}\n\n/** Simple linear trend: 'up' | 'down' | 'flat' */\nexport function detectTrend(data: number[], threshold = 0.05): 'up' | 'down' | 'flat' {\n if (data.length < 2) return 'flat';\n const n = data.length;\n const xMean = (n - 1) / 2;\n const yMean = data.reduce((a, b) => a + b, 0) / n;\n let num = 0, den = 0;\n data.forEach((y, x) => { num += (x - xMean) * (y - yMean); den += (x - xMean) ** 2; });\n const slope = den ? num / den : 0;\n const relativeSlope = Math.abs(slope) / (Math.abs(yMean) || 1);\n return relativeSlope < threshold ? 'flat' : slope > 0 ? 'up' : 'down';\n}\n\n/** Generate SVG polyline points for a sparkline */\nexport function sparklinePoints(data: number[], width: number, height: number): string {\n if (!data.length) return '';\n const mn = Math.min(...data), mx = Math.max(...data), range = mx - mn || 1;\n return data.map((v, i) => {\n const x = (i / (data.length - 1 || 1)) * width;\n const y = height - ((v - mn) / range) * height;\n return `${x.toFixed(2)},${y.toFixed(2)}`;\n }).join(' ');\n}\n\n/** Generate a full sparkline SVG element */\nexport function sparklineSvg(data: number[], width = 100, height = 30, color = '#2563eb'): string {\n if (!data.length) return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\"/>`;\n const pts = sparklinePoints(data, width, height);\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${width}\" height=\"${height}\" viewBox=\"0 0 ${width} ${height}\"><polyline points=\"${pts}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>`;\n}\n","export interface JoopWatermarkOptions {\n opacity?: number; // 0–1 for visual watermark\n fontSize?: number;\n color?: string;\n rotation?: number; // degrees\n repeat?: boolean;\n lsb?: boolean; // use LSB steganography (invisible)\n}\n\nexport class JoopWatermarkService {\n private _watermarkedElements = new WeakMap<HTMLElement, HTMLElement>();\n\n /**\n * Apply a visible tiled watermark overlay to an element.\n */\n apply(element: HTMLElement, text: string, opts: JoopWatermarkOptions = {}): void {\n this.remove(element);\n const { opacity = 0.08, fontSize = 16, color = '#000000', rotation = -30, repeat = true } = opts;\n\n const overlay = document.createElement('div');\n Object.assign(overlay.style, {\n position: 'absolute', top: '0', left: '0', width: '100%', height: '100%',\n pointerEvents: 'none', zIndex: '9999', overflow: 'hidden',\n opacity: String(opacity),\n });\n\n if (repeat) {\n const canvas = document.createElement('canvas');\n canvas.width = 200; canvas.height = 100;\n const ctx = canvas.getContext('2d')!;\n ctx.clearRect(0, 0, 200, 100);\n ctx.save();\n ctx.translate(100, 50);\n ctx.rotate((rotation * Math.PI) / 180);\n ctx.font = `${fontSize}px sans-serif`;\n ctx.fillStyle = color;\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n ctx.fillText(text, 0, 0);\n ctx.restore();\n overlay.style.backgroundImage = `url(${canvas.toDataURL()})`;\n overlay.style.backgroundRepeat = 'repeat';\n } else {\n overlay.style.display = 'flex';\n overlay.style.alignItems = 'center';\n overlay.style.justifyContent = 'center';\n const span = document.createElement('span');\n span.textContent = text;\n span.style.transform = `rotate(${rotation}deg)`;\n span.style.fontSize = `${fontSize}px`;\n span.style.color = color;\n span.style.whiteSpace = 'nowrap';\n overlay.appendChild(span);\n }\n\n if (getComputedStyle(element).position === 'static') element.style.position = 'relative';\n element.appendChild(overlay);\n this._watermarkedElements.set(element, overlay);\n }\n\n remove(element: HTMLElement): void {\n const overlay = this._watermarkedElements.get(element);\n if (overlay && overlay.parentNode === element) element.removeChild(overlay);\n this._watermarkedElements.delete(element);\n }\n\n /**\n * Embed a payload invisibly into an ImageData using LSB steganography.\n * Modifies the least significant bit of the R channel of each pixel.\n */\n embedInImage(imageData: ImageData, payload: string): ImageData {\n const bytes = new TextEncoder().encode(payload + '\\0'); // null-terminated\n const bits = _toBits(bytes);\n const data = new Uint8ClampedArray(imageData.data);\n\n // First 32 pixels encode the length as 32 bits\n const lenBits = _uint32ToBits(bytes.length);\n for (let i = 0; i < 32 && i < data.length / 4; i++) {\n data[i * 4] = (data[i * 4] & 0xfe) | lenBits[i]; // LSB of R channel\n }\n\n for (let i = 0; i < bits.length; i++) {\n const pixelIdx = (i + 32) * 4;\n if (pixelIdx >= data.length) break;\n data[pixelIdx] = (data[pixelIdx] & 0xfe) | bits[i];\n }\n\n return new ImageData(data, imageData.width, imageData.height);\n }\n\n /**\n * Extract a payload from an ImageData that was embedded with embedInImage.\n * Returns null if no valid payload is found.\n */\n extractFromImage(imageData: ImageData): string | null {\n const data = imageData.data;\n\n // Read length from first 32 pixels\n const lenBits: number[] = [];\n for (let i = 0; i < 32; i++) lenBits.push(data[i * 4] & 1);\n const len = _bitsToUint32(lenBits);\n if (len <= 0 || len > (data.length / 4 - 32) / 8) return null;\n\n const totalBits = len * 8;\n const bits: number[] = [];\n for (let i = 0; i < totalBits; i++) {\n const pixelIdx = (i + 32) * 4;\n if (pixelIdx >= data.length) break;\n bits.push(data[pixelIdx] & 1);\n }\n\n const bytes = _fromBits(bits);\n try {\n const text = new TextDecoder().decode(bytes);\n const nullIdx = text.indexOf('\\0');\n return nullIdx >= 0 ? text.slice(0, nullIdx) : text;\n } catch {\n return null;\n }\n }\n\n /** Apply invisible LSB watermark to a canvas element */\n applyToCanvas(canvas: HTMLCanvasElement, payload: string): void {\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n const imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const modified = this.embedInImage(imgData, payload);\n ctx.putImageData(modified, 0, 0);\n }\n}\n\nfunction _toBits(bytes: Uint8Array): number[] {\n const bits: number[] = [];\n for (const byte of bytes) for (let i = 7; i >= 0; i--) bits.push((byte >> i) & 1);\n return bits;\n}\n\nfunction _fromBits(bits: number[]): Uint8Array {\n const bytes = new Uint8Array(Math.ceil(bits.length / 8));\n for (let i = 0; i < bytes.length; i++) {\n let val = 0;\n for (let j = 0; j < 8 && i * 8 + j < bits.length; j++) val = (val << 1) | bits[i * 8 + j];\n bytes[i] = val;\n }\n return bytes;\n}\n\nfunction _uint32ToBits(n: number): number[] {\n const bits: number[] = [];\n for (let i = 31; i >= 0; i--) bits.push((n >> i) & 1);\n return bits;\n}\n\nfunction _bitsToUint32(bits: number[]): number {\n let n = 0;\n for (const b of bits) n = (n << 1) | b;\n return n >>> 0;\n}\n","// QR code scanner using camera (getUserMedia) + canvas frame capture.\n// Integrates with the jsQR-compatible pattern — calls an injected decode function,\n// allowing callers to swap in jsQR, ZXing, or any other WASM decoder.\n\nexport type JoopQrDecoder = (\n data: Uint8ClampedArray,\n width: number,\n height: number\n) => string | null | undefined;\n\nexport interface JoopQrScannerConfig {\n /** Canvas-based QR decoder function. Inject jsQR or a similar library. */\n decoder: JoopQrDecoder;\n /** Camera facing mode, default 'environment' (rear camera) */\n facingMode?: 'environment' | 'user';\n /** Scan frequency in Hz (frames per second), default 10 */\n fps?: number;\n /** If true, stop scanning after first successful decode, default true */\n stopOnScan?: boolean;\n /** Video element constraints */\n width?: number;\n height?: number;\n}\n\nexport interface JoopQrScanResult {\n text: string;\n timestamp: number;\n}\n\nexport class JoopQrScanner {\n private _stream: MediaStream | null = null;\n private _video: HTMLVideoElement | null = null;\n private _canvas: HTMLCanvasElement | null = null;\n private _ctx: CanvasRenderingContext2D | null = null;\n private _timer: ReturnType<typeof setInterval> | null = null;\n private _active = false;\n\n private _onResult: ((r: JoopQrScanResult) => void) | null = null;\n private _onError: ((e: Error) => void) | null = null;\n\n private readonly _cfg: Required<JoopQrScannerConfig>;\n\n constructor(config: JoopQrScannerConfig) {\n this._cfg = {\n decoder: config.decoder,\n facingMode: config.facingMode ?? 'environment',\n fps: config.fps ?? 10,\n stopOnScan: config.stopOnScan ?? true,\n width: config.width ?? 1280,\n height: config.height ?? 720,\n };\n }\n\n onResult(fn: (r: JoopQrScanResult) => void): this { this._onResult = fn; return this; }\n onError(fn: (e: Error) => void): this { this._onError = fn; return this; }\n\n async start(container?: HTMLElement): Promise<void> {\n if (this._active) return;\n if (!navigator.mediaDevices?.getUserMedia) throw new Error('Camera not available');\n\n this._stream = await navigator.mediaDevices.getUserMedia({\n video: {\n facingMode: this._cfg.facingMode,\n width: { ideal: this._cfg.width },\n height: { ideal: this._cfg.height },\n },\n });\n\n this._video = document.createElement('video');\n this._video.setAttribute('playsinline', 'true');\n this._video.muted = true;\n this._video.srcObject = this._stream;\n\n if (container) {\n Object.assign(this._video.style, { width: '100%', height: '100%', objectFit: 'cover', display: 'block' });\n container.appendChild(this._video);\n }\n\n await new Promise<void>(res => { this._video!.onloadedmetadata = () => { this._video!.play(); res(); }; });\n\n this._canvas = document.createElement('canvas');\n this._ctx = this._canvas.getContext('2d');\n this._active = true;\n this._scheduleFrames();\n }\n\n stop(): void {\n this._active = false;\n if (this._timer) { clearInterval(this._timer); this._timer = null; }\n this._stream?.getTracks().forEach(t => t.stop());\n this._stream = null;\n this._video?.remove();\n this._video = null;\n }\n\n isActive(): boolean { return this._active; }\n\n /** Scan a static image File / Blob instead of the camera. */\n async scanFile(file: File | Blob): Promise<JoopQrScanResult | null> {\n return new Promise(resolve => {\n const img = new Image();\n const url = URL.createObjectURL(file);\n img.onload = () => {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0);\n const { data } = ctx.getImageData(0, 0, canvas.width, canvas.height);\n const text = this._cfg.decoder(data, canvas.width, canvas.height);\n URL.revokeObjectURL(url);\n resolve(text ? { text, timestamp: Date.now() } : null);\n };\n img.src = url;\n });\n }\n\n private _scheduleFrames(): void {\n const interval = Math.round(1000 / this._cfg.fps);\n this._timer = setInterval(() => this._processFrame(), interval);\n }\n\n private _processFrame(): void {\n if (!this._active || !this._video || !this._canvas || !this._ctx) return;\n if (this._video.readyState < 2) return;\n\n this._canvas.width = this._video.videoWidth;\n this._canvas.height = this._video.videoHeight;\n this._ctx.drawImage(this._video, 0, 0);\n\n try {\n const imageData = this._ctx.getImageData(0, 0, this._canvas.width, this._canvas.height);\n const text = this._cfg.decoder(imageData.data, this._canvas.width, this._canvas.height);\n if (text) {\n if (this._cfg.stopOnScan) this.stop();\n this._onResult?.({ text, timestamp: Date.now() });\n }\n } catch (err) {\n this._onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }\n}\n\n/** Generate an otpauth:// TOTP enrollment URI (for authenticator app QR codes) */\nexport function generateTotpUri(options: {\n secret: string;\n account: string;\n issuer: string;\n period?: number;\n digits?: number;\n algorithm?: 'SHA1' | 'SHA256' | 'SHA512';\n}): string {\n const { secret, account, issuer, period = 30, digits = 6, algorithm = 'SHA1' } = options;\n const params = new URLSearchParams({\n secret,\n issuer,\n algorithm,\n digits: String(digits),\n period: String(period),\n });\n return `otpauth://totp/${encodeURIComponent(issuer)}:${encodeURIComponent(account)}?${params}`;\n}\n"]}
|