joopjs 2.0.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.
Files changed (259) hide show
  1. package/CHANGELOG.md +678 -0
  2. package/README.md +583 -0
  3. package/dist/a11y.service-C-DQQfgO.d.mts +143 -0
  4. package/dist/a11y.service-CauEJrJe.d.ts +143 -0
  5. package/dist/adapters-B6slG6hQ.d.mts +84 -0
  6. package/dist/adapters-B6slG6hQ.d.ts +84 -0
  7. package/dist/aes.service-CkoupAww.d.mts +95 -0
  8. package/dist/aes.service-CkoupAww.d.ts +95 -0
  9. package/dist/ai/index.d.mts +99 -0
  10. package/dist/ai/index.d.ts +99 -0
  11. package/dist/ai/index.js +307 -0
  12. package/dist/ai/index.js.map +1 -0
  13. package/dist/ai/index.mjs +304 -0
  14. package/dist/ai/index.mjs.map +1 -0
  15. package/dist/analytics/index.d.mts +42 -0
  16. package/dist/analytics/index.d.ts +42 -0
  17. package/dist/analytics/index.js +139 -0
  18. package/dist/analytics/index.js.map +1 -0
  19. package/dist/analytics/index.mjs +136 -0
  20. package/dist/analytics/index.mjs.map +1 -0
  21. package/dist/angular/index.d.mts +148 -0
  22. package/dist/angular/index.d.ts +148 -0
  23. package/dist/angular/index.js +122 -0
  24. package/dist/angular/index.js.map +1 -0
  25. package/dist/angular/index.mjs +101 -0
  26. package/dist/angular/index.mjs.map +1 -0
  27. package/dist/api/index.d.mts +128 -0
  28. package/dist/api/index.d.ts +128 -0
  29. package/dist/api/index.js +1358 -0
  30. package/dist/api/index.js.map +1 -0
  31. package/dist/api/index.mjs +1332 -0
  32. package/dist/api/index.mjs.map +1 -0
  33. package/dist/auth/index.d.mts +105 -0
  34. package/dist/auth/index.d.ts +105 -0
  35. package/dist/auth/index.js +989 -0
  36. package/dist/auth/index.js.map +1 -0
  37. package/dist/auth/index.mjs +979 -0
  38. package/dist/auth/index.mjs.map +1 -0
  39. package/dist/auth.service-DNVB-L4U.d.mts +16 -0
  40. package/dist/auth.service-PjUUSUIt.d.ts +16 -0
  41. package/dist/banking/index.d.mts +1530 -0
  42. package/dist/banking/index.d.ts +1530 -0
  43. package/dist/banking/index.js +4739 -0
  44. package/dist/banking/index.js.map +1 -0
  45. package/dist/banking/index.mjs +4661 -0
  46. package/dist/banking/index.mjs.map +1 -0
  47. package/dist/cache/index.d.mts +40 -0
  48. package/dist/cache/index.d.ts +40 -0
  49. package/dist/cache/index.js +174 -0
  50. package/dist/cache/index.js.map +1 -0
  51. package/dist/cache/index.mjs +172 -0
  52. package/dist/cache/index.mjs.map +1 -0
  53. package/dist/client-profile.service-BuPeXVp5.d.mts +28 -0
  54. package/dist/client-profile.service-D5bRRYQp.d.ts +28 -0
  55. package/dist/config.models-Cqg04fAQ.d.mts +84 -0
  56. package/dist/config.models-Cqg04fAQ.d.ts +84 -0
  57. package/dist/config.service-CrCvI-JS.d.ts +31 -0
  58. package/dist/config.service-Cz4QQLlf.d.mts +31 -0
  59. package/dist/core/index.d.mts +4 -0
  60. package/dist/core/index.d.ts +4 -0
  61. package/dist/core/index.js +631 -0
  62. package/dist/core/index.js.map +1 -0
  63. package/dist/core/index.mjs +619 -0
  64. package/dist/core/index.mjs.map +1 -0
  65. package/dist/crypto-utils-DriNhLdx.d.mts +30 -0
  66. package/dist/crypto-utils-DriNhLdx.d.ts +30 -0
  67. package/dist/data-storage.service-DT6xaTxE.d.ts +51 -0
  68. package/dist/data-storage.service-LvhGRCmw.d.mts +51 -0
  69. package/dist/deeplink/index.d.mts +39 -0
  70. package/dist/deeplink/index.d.ts +39 -0
  71. package/dist/deeplink/index.js +268 -0
  72. package/dist/deeplink/index.js.map +1 -0
  73. package/dist/deeplink/index.mjs +265 -0
  74. package/dist/deeplink/index.mjs.map +1 -0
  75. package/dist/deeplink.service-Ctd5u243.d.mts +35 -0
  76. package/dist/deeplink.service-uUuTnY9_.d.ts +35 -0
  77. package/dist/dev/index.d.mts +20 -0
  78. package/dist/dev/index.d.ts +20 -0
  79. package/dist/dev/index.js +51 -0
  80. package/dist/dev/index.js.map +1 -0
  81. package/dist/dev/index.mjs +49 -0
  82. package/dist/dev/index.mjs.map +1 -0
  83. package/dist/device/index.d.mts +108 -0
  84. package/dist/device/index.d.ts +108 -0
  85. package/dist/device/index.js +960 -0
  86. package/dist/device/index.js.map +1 -0
  87. package/dist/device/index.mjs +951 -0
  88. package/dist/device/index.mjs.map +1 -0
  89. package/dist/differential-privacy-BcAv1G80.d.mts +210 -0
  90. package/dist/differential-privacy-C8mAUjZr.d.ts +210 -0
  91. package/dist/encryption/index.d.mts +75 -0
  92. package/dist/encryption/index.d.ts +75 -0
  93. package/dist/encryption/index.js +605 -0
  94. package/dist/encryption/index.js.map +1 -0
  95. package/dist/encryption/index.mjs +598 -0
  96. package/dist/encryption/index.mjs.map +1 -0
  97. package/dist/form-validator-3tkmzr_o.d.mts +72 -0
  98. package/dist/form-validator-3tkmzr_o.d.ts +72 -0
  99. package/dist/forms/index.d.mts +59 -0
  100. package/dist/forms/index.d.ts +59 -0
  101. package/dist/forms/index.js +446 -0
  102. package/dist/forms/index.js.map +1 -0
  103. package/dist/forms/index.mjs +442 -0
  104. package/dist/forms/index.mjs.map +1 -0
  105. package/dist/i18n/index.d.mts +37 -0
  106. package/dist/i18n/index.d.ts +37 -0
  107. package/dist/i18n/index.js +147 -0
  108. package/dist/i18n/index.js.map +1 -0
  109. package/dist/i18n/index.mjs +145 -0
  110. package/dist/i18n/index.mjs.map +1 -0
  111. package/dist/idempotency.service-_6LqhivP.d.mts +372 -0
  112. package/dist/idempotency.service-eOKoISRD.d.ts +372 -0
  113. package/dist/index-B_ksKpS1.d.mts +202 -0
  114. package/dist/index-CqDKWTUP.d.mts +28 -0
  115. package/dist/index-CqDKWTUP.d.ts +28 -0
  116. package/dist/index-DFqEoX_l.d.ts +202 -0
  117. package/dist/index-Dz0gOur2.d.mts +36 -0
  118. package/dist/index-Dz0gOur2.d.ts +36 -0
  119. package/dist/index.d.mts +1336 -0
  120. package/dist/index.d.ts +1336 -0
  121. package/dist/index.js +19464 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/index.mjs +19155 -0
  124. package/dist/index.mjs.map +1 -0
  125. package/dist/india/index.d.mts +75 -0
  126. package/dist/india/index.d.ts +75 -0
  127. package/dist/india/index.js +325 -0
  128. package/dist/india/index.js.map +1 -0
  129. package/dist/india/index.mjs +303 -0
  130. package/dist/india/index.mjs.map +1 -0
  131. package/dist/joop-Bx7Iwj5p.d.mts +155 -0
  132. package/dist/joop-CA3DMeOO.d.ts +155 -0
  133. package/dist/native-bridge/index.d.mts +27 -0
  134. package/dist/native-bridge/index.d.ts +27 -0
  135. package/dist/native-bridge/index.js +98 -0
  136. package/dist/native-bridge/index.js.map +1 -0
  137. package/dist/native-bridge/index.mjs +96 -0
  138. package/dist/native-bridge/index.mjs.map +1 -0
  139. package/dist/network/index.d.mts +85 -0
  140. package/dist/network/index.d.ts +85 -0
  141. package/dist/network/index.js +454 -0
  142. package/dist/network/index.js.map +1 -0
  143. package/dist/network/index.mjs +451 -0
  144. package/dist/network/index.mjs.map +1 -0
  145. package/dist/network-monitor-BIwPSXme.d.mts +179 -0
  146. package/dist/network-monitor-Bqp2hvZr.d.ts +179 -0
  147. package/dist/notification.service-Dm4fvfZf.d.mts +25 -0
  148. package/dist/notification.service-tEMKatWJ.d.ts +25 -0
  149. package/dist/observability/index.d.mts +179 -0
  150. package/dist/observability/index.d.ts +179 -0
  151. package/dist/observability/index.js +559 -0
  152. package/dist/observability/index.js.map +1 -0
  153. package/dist/observability/index.mjs +552 -0
  154. package/dist/observability/index.mjs.map +1 -0
  155. package/dist/oidc-client-DIJcClmB.d.mts +190 -0
  156. package/dist/oidc-client-DxhyE59t.d.ts +190 -0
  157. package/dist/platform/index.d.mts +73 -0
  158. package/dist/platform/index.d.ts +73 -0
  159. package/dist/platform/index.js +127 -0
  160. package/dist/platform/index.js.map +1 -0
  161. package/dist/platform/index.mjs +125 -0
  162. package/dist/platform/index.mjs.map +1 -0
  163. package/dist/pwa/index.d.mts +31 -0
  164. package/dist/pwa/index.d.ts +31 -0
  165. package/dist/pwa/index.js +247 -0
  166. package/dist/pwa/index.js.map +1 -0
  167. package/dist/pwa/index.mjs +244 -0
  168. package/dist/pwa/index.mjs.map +1 -0
  169. package/dist/react/index.d.mts +133 -0
  170. package/dist/react/index.d.ts +133 -0
  171. package/dist/react/index.js +632 -0
  172. package/dist/react/index.js.map +1 -0
  173. package/dist/react/index.mjs +630 -0
  174. package/dist/react/index.mjs.map +1 -0
  175. package/dist/router/index.d.mts +39 -0
  176. package/dist/router/index.d.ts +39 -0
  177. package/dist/router/index.js +168 -0
  178. package/dist/router/index.js.map +1 -0
  179. package/dist/router/index.mjs +166 -0
  180. package/dist/router/index.mjs.map +1 -0
  181. package/dist/security/index.d.mts +206 -0
  182. package/dist/security/index.d.ts +206 -0
  183. package/dist/security/index.js +1297 -0
  184. package/dist/security/index.js.map +1 -0
  185. package/dist/security/index.mjs +1285 -0
  186. package/dist/security/index.mjs.map +1 -0
  187. package/dist/session/index.d.mts +115 -0
  188. package/dist/session/index.d.ts +115 -0
  189. package/dist/session/index.js +297 -0
  190. package/dist/session/index.js.map +1 -0
  191. package/dist/session/index.mjs +292 -0
  192. package/dist/session/index.mjs.map +1 -0
  193. package/dist/state/index.d.mts +43 -0
  194. package/dist/state/index.d.ts +43 -0
  195. package/dist/state/index.js +156 -0
  196. package/dist/state/index.js.map +1 -0
  197. package/dist/state/index.mjs +152 -0
  198. package/dist/state/index.mjs.map +1 -0
  199. package/dist/statement-parser-BHQtXwCM.d.ts +260 -0
  200. package/dist/statement-parser-C2qNmb49.d.mts +260 -0
  201. package/dist/storage/index.d.mts +40 -0
  202. package/dist/storage/index.d.ts +40 -0
  203. package/dist/storage/index.js +256 -0
  204. package/dist/storage/index.js.map +1 -0
  205. package/dist/storage/index.mjs +252 -0
  206. package/dist/storage/index.mjs.map +1 -0
  207. package/dist/sync/index.d.mts +69 -0
  208. package/dist/sync/index.d.ts +69 -0
  209. package/dist/sync/index.js +330 -0
  210. package/dist/sync/index.js.map +1 -0
  211. package/dist/sync/index.mjs +323 -0
  212. package/dist/sync/index.mjs.map +1 -0
  213. package/dist/sync-engine-DCIMRG5s.d.ts +61 -0
  214. package/dist/sync-engine-DZqyKHkK.d.mts +61 -0
  215. package/dist/theme/index.d.mts +53 -0
  216. package/dist/theme/index.d.ts +53 -0
  217. package/dist/theme/index.js +169 -0
  218. package/dist/theme/index.js.map +1 -0
  219. package/dist/theme/index.mjs +167 -0
  220. package/dist/theme/index.mjs.map +1 -0
  221. package/dist/ui/index.d.mts +66 -0
  222. package/dist/ui/index.d.ts +66 -0
  223. package/dist/ui/index.js +811 -0
  224. package/dist/ui/index.js.map +1 -0
  225. package/dist/ui/index.mjs +803 -0
  226. package/dist/ui/index.mjs.map +1 -0
  227. package/dist/utilities/index.d.mts +199 -0
  228. package/dist/utilities/index.d.ts +199 -0
  229. package/dist/utilities/index.js +1991 -0
  230. package/dist/utilities/index.js.map +1 -0
  231. package/dist/utilities/index.mjs +1923 -0
  232. package/dist/utilities/index.mjs.map +1 -0
  233. package/dist/validation/index.d.mts +60 -0
  234. package/dist/validation/index.d.ts +60 -0
  235. package/dist/validation/index.js +460 -0
  236. package/dist/validation/index.js.map +1 -0
  237. package/dist/validation/index.mjs +455 -0
  238. package/dist/validation/index.mjs.map +1 -0
  239. package/dist/vue/index.d.mts +135 -0
  240. package/dist/vue/index.d.ts +135 -0
  241. package/dist/vue/index.js +621 -0
  242. package/dist/vue/index.js.map +1 -0
  243. package/dist/vue/index.mjs +619 -0
  244. package/dist/vue/index.mjs.map +1 -0
  245. package/dist/watermark.service-Detur5tq.d.ts +235 -0
  246. package/dist/watermark.service-QNegMeQZ.d.mts +235 -0
  247. package/dist/workers/index.d.mts +42 -0
  248. package/dist/workers/index.d.ts +42 -0
  249. package/dist/workers/index.js +359 -0
  250. package/dist/workers/index.js.map +1 -0
  251. package/dist/workers/index.mjs +356 -0
  252. package/dist/workers/index.mjs.map +1 -0
  253. package/dist/workflow/index.d.mts +99 -0
  254. package/dist/workflow/index.d.ts +99 -0
  255. package/dist/workflow/index.js +282 -0
  256. package/dist/workflow/index.js.map +1 -0
  257. package/dist/workflow/index.mjs +279 -0
  258. package/dist/workflow/index.mjs.map +1 -0
  259. package/package.json +226 -0
@@ -0,0 +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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,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,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EAAc,aAAA;AAAA,EACx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","file":"index.js","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, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#039;');\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"]}