@eudi-verify/embed 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../../client/dist/index.js","../src/styles.ts","../src/render.ts","../src/a11y.ts","../src/element.ts"],"sourcesContent":["/**\n * @eudi-verify/embed\n *\n * <eudi-verify> Custom Element for EUDI Wallet verification.\n *\n * @example\n * ```html\n * <script type=\"module\">\n * import '@eudi-verify/embed';\n * </script>\n *\n * <eudi-verify\n * api-url=\"/api/eudi\"\n * request='{\"age_over_18\":true}'\n * ></eudi-verify>\n * ```\n */\n\nexport const VERSION = '0.1.0';\n\nexport { EudiVerifyElement, type EudiVerifyEventMap } from './element.js';\nexport { createStyles, CSS_VARIABLES } from './styles.js';\nexport {\n announce,\n clearAnnouncement,\n createFocusTrap,\n getFocusableElements,\n STATE_MESSAGES,\n} from './a11y.js';\nexport { renderWidget, updateWidgetState, getStateId } from './render.js';\n\nimport { EudiVerifyElement } from './element.js';\n\nif (typeof customElements !== 'undefined' && !customElements.get('eudi-verify')) {\n customElements.define('eudi-verify', EudiVerifyElement);\n}\n","// src/types.ts\nvar TERMINAL_STATUSES = Object.freeze([\n \"verified\",\n \"rejected\",\n \"expired\",\n \"cancelled\",\n \"error\"\n]);\nfunction isTerminalStatus(status) {\n return TERMINAL_STATUSES.includes(status);\n}\n\n// src/errors.ts\nvar EudiClientError = class extends Error {\n constructor(message) {\n super(message);\n this.name = \"EudiClientError\";\n }\n};\nvar NetworkError = class extends EudiClientError {\n cause;\n constructor(message, cause) {\n super(message);\n this.name = \"NetworkError\";\n this.cause = cause;\n }\n};\nvar ApiResponseError = class extends EudiClientError {\n statusCode;\n errorCode;\n details;\n constructor(statusCode, response) {\n super(response.message);\n this.name = \"ApiResponseError\";\n this.statusCode = statusCode;\n this.errorCode = response.error;\n this.details = response.details;\n }\n};\nvar SessionNotFoundError = class extends ApiResponseError {\n sessionId;\n constructor(sessionId) {\n super(404, { error: \"not_found\", message: `Session ${sessionId} not found` });\n this.name = \"SessionNotFoundError\";\n this.sessionId = sessionId;\n }\n};\nvar RateLimitError = class extends ApiResponseError {\n retryAfterMs;\n constructor(retryAfterMs) {\n super(429, { error: \"rate_limit\", message: \"Rate limit exceeded\" });\n this.name = \"RateLimitError\";\n this.retryAfterMs = retryAfterMs;\n }\n};\nvar VerificationCancelledError = class extends EudiClientError {\n constructor() {\n super(\"Verification was cancelled\");\n this.name = \"VerificationCancelledError\";\n }\n};\nvar SessionExpiredError = class extends EudiClientError {\n constructor() {\n super(\"Session expired\");\n this.name = \"SessionExpiredError\";\n }\n};\n\n// src/api.ts\nfunction createApiClient(config) {\n const { baseUrl, timeoutMs = 3e4 } = config;\n const fetchFn = config.fetch ?? fetch;\n const normalizedBaseUrl = baseUrl.replace(/\\/$/, \"\");\n async function request(method, path, body) {\n const url = `${normalizedBaseUrl}${path}`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const response = await fetchFn(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n body: body ? JSON.stringify(body) : void 0,\n signal: controller.signal\n });\n clearTimeout(timeoutId);\n if (!response.ok) {\n await handleErrorResponse(response, path);\n }\n const data = await response.json();\n return data;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof ApiResponseError) {\n throw error;\n }\n if (error instanceof Error) {\n if (error.name === \"AbortError\") {\n throw new NetworkError(`Request timeout after ${timeoutMs}ms`);\n }\n throw new NetworkError(`Network request failed: ${error.message}`, error);\n }\n throw new NetworkError(\"Unknown network error\");\n }\n }\n async function handleErrorResponse(response, path) {\n const { status } = response;\n if (status === 404) {\n const sessionIdMatch = path.match(/\\/sessions\\/([^/]+)/);\n if (sessionIdMatch) {\n throw new SessionNotFoundError(sessionIdMatch[1]);\n }\n }\n if (status === 429) {\n const retryAfter = response.headers.get(\"Retry-After\");\n const retryAfterMs = retryAfter ? parseInt(retryAfter, 10) * 1e3 : void 0;\n throw new RateLimitError(retryAfterMs);\n }\n let errorBody;\n try {\n errorBody = await response.json();\n } catch {\n errorBody = {\n error: \"unknown_error\",\n message: `HTTP ${status}`\n };\n }\n throw new ApiResponseError(status, errorBody);\n }\n return {\n async createSession(verificationRequest) {\n return request(\"POST\", \"/sessions\", { request: verificationRequest });\n },\n async getSession(sessionId) {\n return request(\"GET\", `/sessions/${encodeURIComponent(sessionId)}`);\n },\n async cancelSession(sessionId) {\n return request(\n \"POST\",\n `/sessions/${encodeURIComponent(sessionId)}/cancel`\n );\n }\n };\n}\n\n// src/polling.ts\nvar DEFAULT_CONFIG = {\n initialIntervalMs: 1e3,\n maxIntervalMs: 1e4,\n backoffMultiplier: 2\n};\nfunction createPoller(fn, config = {}) {\n const { initialIntervalMs, maxIntervalMs, backoffMultiplier } = {\n ...DEFAULT_CONFIG,\n ...config\n };\n let currentInterval = initialIntervalMs;\n let timeoutId = null;\n let running = false;\n async function poll() {\n if (!running) return;\n try {\n const shouldStop = await fn();\n if (shouldStop || !running) {\n running = false;\n return;\n }\n } catch {\n }\n if (!running) return;\n currentInterval = Math.min(\n currentInterval * backoffMultiplier,\n maxIntervalMs\n );\n timeoutId = setTimeout(() => {\n void poll();\n }, currentInterval);\n }\n return {\n start() {\n if (running) return;\n running = true;\n currentInterval = initialIntervalMs;\n void poll();\n },\n stop() {\n running = false;\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n },\n reset() {\n currentInterval = initialIntervalMs;\n }\n };\n}\n\n// src/qr.ts\nvar EC_LEVELS = { L: 0, M: 1, Q: 2, H: 3 };\nvar VERSION_TABLE = {\n L: [\n { version: 1, totalCodewords: 19, ecCodewordsPerBlock: 7, numBlocks: 1 },\n { version: 2, totalCodewords: 34, ecCodewordsPerBlock: 10, numBlocks: 1 },\n { version: 3, totalCodewords: 55, ecCodewordsPerBlock: 15, numBlocks: 1 },\n { version: 4, totalCodewords: 80, ecCodewordsPerBlock: 20, numBlocks: 1 },\n { version: 5, totalCodewords: 108, ecCodewordsPerBlock: 26, numBlocks: 1 },\n { version: 6, totalCodewords: 136, ecCodewordsPerBlock: 18, numBlocks: 2 },\n { version: 7, totalCodewords: 156, ecCodewordsPerBlock: 20, numBlocks: 2 },\n { version: 8, totalCodewords: 194, ecCodewordsPerBlock: 24, numBlocks: 2 },\n { version: 9, totalCodewords: 232, ecCodewordsPerBlock: 30, numBlocks: 2 },\n { version: 10, totalCodewords: 274, ecCodewordsPerBlock: 18, numBlocks: 4 },\n { version: 11, totalCodewords: 401, ecCodewordsPerBlock: 20, numBlocks: 4 },\n { version: 12, totalCodewords: 466, ecCodewordsPerBlock: 24, numBlocks: 4 },\n { version: 13, totalCodewords: 532, ecCodewordsPerBlock: 26, numBlocks: 4 },\n { version: 14, totalCodewords: 588, ecCodewordsPerBlock: 30, numBlocks: 4 }\n ],\n M: [\n { version: 1, totalCodewords: 16, ecCodewordsPerBlock: 10, numBlocks: 1 },\n { version: 2, totalCodewords: 28, ecCodewordsPerBlock: 16, numBlocks: 1 },\n { version: 3, totalCodewords: 44, ecCodewordsPerBlock: 26, numBlocks: 1 },\n { version: 4, totalCodewords: 64, ecCodewordsPerBlock: 18, numBlocks: 2 },\n { version: 5, totalCodewords: 86, ecCodewordsPerBlock: 24, numBlocks: 2 },\n { version: 6, totalCodewords: 108, ecCodewordsPerBlock: 16, numBlocks: 4 },\n { version: 7, totalCodewords: 124, ecCodewordsPerBlock: 18, numBlocks: 4 },\n { version: 8, totalCodewords: 154, ecCodewordsPerBlock: 22, numBlocks: 4 },\n { version: 9, totalCodewords: 182, ecCodewordsPerBlock: 22, numBlocks: 5 },\n { version: 10, totalCodewords: 216, ecCodewordsPerBlock: 26, numBlocks: 5 }\n ],\n Q: [\n { version: 1, totalCodewords: 13, ecCodewordsPerBlock: 13, numBlocks: 1 },\n { version: 2, totalCodewords: 22, ecCodewordsPerBlock: 22, numBlocks: 1 },\n { version: 3, totalCodewords: 34, ecCodewordsPerBlock: 18, numBlocks: 2 },\n { version: 4, totalCodewords: 48, ecCodewordsPerBlock: 26, numBlocks: 2 },\n { version: 5, totalCodewords: 62, ecCodewordsPerBlock: 18, numBlocks: 4 },\n { version: 6, totalCodewords: 76, ecCodewordsPerBlock: 24, numBlocks: 4 },\n { version: 7, totalCodewords: 88, ecCodewordsPerBlock: 18, numBlocks: 6 },\n { version: 8, totalCodewords: 110, ecCodewordsPerBlock: 22, numBlocks: 6 },\n { version: 9, totalCodewords: 132, ecCodewordsPerBlock: 20, numBlocks: 8 },\n { version: 10, totalCodewords: 154, ecCodewordsPerBlock: 24, numBlocks: 8 }\n ],\n H: [\n { version: 1, totalCodewords: 9, ecCodewordsPerBlock: 17, numBlocks: 1 },\n { version: 2, totalCodewords: 16, ecCodewordsPerBlock: 28, numBlocks: 1 },\n { version: 3, totalCodewords: 26, ecCodewordsPerBlock: 22, numBlocks: 2 },\n { version: 4, totalCodewords: 36, ecCodewordsPerBlock: 16, numBlocks: 4 },\n { version: 5, totalCodewords: 46, ecCodewordsPerBlock: 22, numBlocks: 4 },\n { version: 6, totalCodewords: 60, ecCodewordsPerBlock: 28, numBlocks: 4 },\n { version: 7, totalCodewords: 66, ecCodewordsPerBlock: 26, numBlocks: 5 },\n { version: 8, totalCodewords: 86, ecCodewordsPerBlock: 26, numBlocks: 6 },\n { version: 9, totalCodewords: 100, ecCodewordsPerBlock: 24, numBlocks: 8 },\n { version: 10, totalCodewords: 122, ecCodewordsPerBlock: 28, numBlocks: 8 }\n ]\n};\nvar FORMAT_INFO_STRINGS = {\n 0: [1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0],\n 1: [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1],\n 2: [1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0],\n 3: [1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1],\n 4: [1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1],\n 5: [1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0],\n 6: [1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1],\n 7: [1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0],\n 8: [1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0],\n 9: [1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1],\n 10: [1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0],\n 11: [1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1],\n 12: [1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1],\n 13: [1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0],\n 14: [1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 1],\n 15: [1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0],\n 16: [0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1],\n 17: [0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0],\n 18: [0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1],\n 19: [0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0],\n 20: [0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0],\n 21: [0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1],\n 22: [0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0],\n 23: [0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1],\n 24: [0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1],\n 25: [0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0],\n 26: [0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1],\n 27: [0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0],\n 28: [0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0],\n 29: [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1],\n 30: [0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0],\n 31: [0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1]\n};\nvar ALIGNMENT_PATTERNS = [\n [],\n [],\n [6, 18],\n [6, 22],\n [6, 26],\n [6, 30],\n [6, 34],\n [6, 22, 38],\n [6, 24, 42],\n [6, 26, 46],\n [6, 28, 50],\n [6, 30, 54],\n [6, 32, 58],\n [6, 34, 62],\n [6, 26, 46, 66]\n];\nfunction getVersionInfo(dataLength, ecLevel) {\n const table = VERSION_TABLE[ecLevel];\n for (const info of table) {\n const dataCodewords = info.totalCodewords - info.ecCodewordsPerBlock * info.numBlocks;\n const maxBytes = dataCodewords - (info.version < 10 ? 2 : 3);\n if (maxBytes >= dataLength) {\n return info;\n }\n }\n throw new Error(`Data too long for QR code (max ~270 bytes with ${ecLevel} EC)`);\n}\nfunction createByteData(data, version) {\n const bytes = new TextEncoder().encode(data);\n const bits = [];\n bits.push(0, 1, 0, 0);\n const countBits = version < 10 ? 8 : 16;\n for (let i = countBits - 1; i >= 0; i--) {\n bits.push(bytes.length >> i & 1);\n }\n for (const byte of bytes) {\n for (let i = 7; i >= 0; i--) {\n bits.push(byte >> i & 1);\n }\n }\n bits.push(0, 0, 0, 0);\n while (bits.length % 8 !== 0) {\n bits.push(0);\n }\n const codewords = [];\n for (let i = 0; i < bits.length; i += 8) {\n let byte = 0;\n for (let j = 0; j < 8; j++) {\n byte = byte << 1 | (bits[i + j] ?? 0);\n }\n codewords.push(byte);\n }\n return codewords;\n}\nvar GF_EXP = new Uint8Array(512);\nvar GF_LOG = new Uint8Array(256);\n(function initGaloisField() {\n let x = 1;\n for (let i = 0; i < 255; i++) {\n GF_EXP[i] = x;\n GF_LOG[x] = i;\n x <<= 1;\n if (x & 256) x ^= 285;\n }\n for (let i = 255; i < 512; i++) {\n GF_EXP[i] = GF_EXP[i - 255];\n }\n})();\nfunction gfMul(a, b) {\n if (a === 0 || b === 0) return 0;\n return GF_EXP[GF_LOG[a] + GF_LOG[b]];\n}\nfunction generateECCodewords(data, numECCodewords) {\n const gen = [1];\n for (let i = 0; i < numECCodewords; i++) {\n const newGen = new Array(gen.length + 1).fill(0);\n for (let j = 0; j < gen.length; j++) {\n newGen[j] ^= gen[j];\n newGen[j + 1] ^= gfMul(gen[j], GF_EXP[i]);\n }\n gen.length = newGen.length;\n for (let j = 0; j < newGen.length; j++) gen[j] = newGen[j];\n }\n const msg = [...data, ...new Array(numECCodewords).fill(0)];\n for (let i = 0; i < data.length; i++) {\n const coef = msg[i];\n if (coef !== 0) {\n for (let j = 0; j < gen.length; j++) {\n msg[i + j] ^= gfMul(gen[j], coef);\n }\n }\n }\n return msg.slice(data.length);\n}\nfunction interleaveBlocks(dataCodewords, info) {\n const { numBlocks, ecCodewordsPerBlock, totalCodewords } = info;\n const totalDataCodewords = totalCodewords - numBlocks * ecCodewordsPerBlock;\n const smallBlockSize = Math.floor(totalDataCodewords / numBlocks);\n const largeBlockCount = totalDataCodewords % numBlocks;\n const dataBlocks = [];\n const ecBlocks = [];\n let offset = 0;\n for (let i = 0; i < numBlocks; i++) {\n const blockSize = smallBlockSize + (i >= numBlocks - largeBlockCount ? 1 : 0);\n const block = dataCodewords.slice(offset, offset + blockSize);\n offset += blockSize;\n dataBlocks.push(block);\n ecBlocks.push(generateECCodewords(block, ecCodewordsPerBlock));\n }\n const result = [];\n const maxDataLen = Math.max(...dataBlocks.map((b) => b.length));\n for (let i = 0; i < maxDataLen; i++) {\n for (const block of dataBlocks) {\n if (i < block.length) result.push(block[i]);\n }\n }\n for (let i = 0; i < ecCodewordsPerBlock; i++) {\n for (const block of ecBlocks) {\n result.push(block[i]);\n }\n }\n return result;\n}\nfunction createMatrix(version) {\n const size = version * 4 + 17;\n const matrix = Array.from(\n { length: size },\n () => new Array(size).fill(null)\n );\n function setFinderPattern(row, col) {\n for (let r = -1; r <= 7; r++) {\n for (let c = -1; c <= 7; c++) {\n const nr = row + r;\n const nc = col + c;\n if (nr < 0 || nr >= size || nc < 0 || nc >= size) continue;\n const isOuter = r === -1 || r === 7 || c === -1 || c === 7;\n const isInner = r >= 1 && r <= 5 && c >= 1 && c <= 5;\n const isCore = r >= 2 && r <= 4 && c >= 2 && c <= 4;\n matrix[nr][nc] = isOuter ? 0 : isCore ? 1 : isInner ? 0 : 1;\n }\n }\n }\n setFinderPattern(0, 0);\n setFinderPattern(0, size - 7);\n setFinderPattern(size - 7, 0);\n for (let i = 8; i < size - 8; i++) {\n matrix[6][i] = i % 2 === 0 ? 1 : 0;\n matrix[i][6] = i % 2 === 0 ? 1 : 0;\n }\n matrix[size - 8][8] = 1;\n if (version >= 2) {\n const positions = ALIGNMENT_PATTERNS[version];\n for (const row of positions) {\n for (const col of positions) {\n if (matrix[row][col] !== null) continue;\n for (let r = -2; r <= 2; r++) {\n for (let c = -2; c <= 2; c++) {\n const isOuter = Math.abs(r) === 2 || Math.abs(c) === 2;\n const isCore = r === 0 && c === 0;\n matrix[row + r][col + c] = isOuter || isCore ? 1 : 0;\n }\n }\n }\n }\n }\n return matrix;\n}\nfunction placeData(matrix, codewords) {\n const size = matrix.length;\n let bitIndex = 0;\n const bits = [];\n for (const cw of codewords) {\n for (let i = 7; i >= 0; i--) {\n bits.push(cw >> i & 1);\n }\n }\n let col = size - 1;\n let goingUp = true;\n while (col > 0) {\n if (col === 6) col--;\n for (let row = goingUp ? size - 1 : 0; goingUp ? row >= 0 : row < size; row += goingUp ? -1 : 1) {\n for (const offset of [0, -1]) {\n const c = col + offset;\n if (c < 0 || matrix[row][c] !== null) continue;\n matrix[row][c] = bitIndex < bits.length ? bits[bitIndex++] : 0;\n }\n }\n col -= 2;\n goingUp = !goingUp;\n }\n}\nfunction applyMask(matrix, maskPattern) {\n const size = matrix.length;\n const maskFns = [\n (r, c) => (r + c) % 2 === 0,\n (r) => r % 2 === 0,\n (_, c) => c % 3 === 0,\n (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,\n (r, c) => (r * c % 2 + r * c % 3) % 2 === 0,\n (r, c) => ((r + c) % 2 + r * c % 3) % 2 === 0\n ];\n const maskFn = maskFns[maskPattern];\n const reserved = createReservedMask(size);\n for (let r = 0; r < size; r++) {\n for (let c = 0; c < size; c++) {\n if (!reserved[r][c] && maskFn(r, c)) {\n matrix[r][c] ^= 1;\n }\n }\n }\n}\nfunction createReservedMask(size) {\n const reserved = Array.from(\n { length: size },\n () => new Array(size).fill(false)\n );\n for (let i = 0; i < 8; i++) {\n for (let j = 0; j < 8; j++) {\n reserved[i][j] = true;\n reserved[i][size - 8 + j] = true;\n reserved[size - 8 + i][j] = true;\n }\n }\n for (let i = 0; i < 9; i++) {\n reserved[i][8] = true;\n reserved[8][i] = true;\n reserved[size - 8 + i - 1][8] = true;\n reserved[8][size - 8 + i - 1] = true;\n }\n for (let i = 0; i < size; i++) {\n reserved[6][i] = true;\n reserved[i][6] = true;\n }\n return reserved;\n}\nfunction addFormatInfo(matrix, ecLevel, maskPattern) {\n const formatIndex = EC_LEVELS[ecLevel] * 8 + maskPattern;\n const bits = FORMAT_INFO_STRINGS[formatIndex];\n const size = matrix.length;\n for (let i = 0; i < 6; i++) {\n matrix[8][i] = bits[i];\n matrix[i][8] = bits[14 - i];\n }\n matrix[8][7] = bits[6];\n matrix[8][8] = bits[7];\n matrix[7][8] = bits[8];\n for (let i = 0; i < 7; i++) {\n matrix[8][size - 1 - i] = bits[14 - i];\n matrix[size - 1 - i][8] = bits[i];\n }\n matrix[size - 8][8] = bits[7];\n}\nfunction evaluatePenalty(matrix) {\n const size = matrix.length;\n let penalty = 0;\n for (let r = 0; r < size; r++) {\n let count = 1;\n for (let c = 1; c < size; c++) {\n if (matrix[r][c] === matrix[r][c - 1]) {\n count++;\n if (count === 5) penalty += 3;\n else if (count > 5) penalty++;\n } else {\n count = 1;\n }\n }\n }\n for (let c = 0; c < size; c++) {\n let count = 1;\n for (let r = 1; r < size; r++) {\n if (matrix[r][c] === matrix[r - 1][c]) {\n count++;\n if (count === 5) penalty += 3;\n else if (count > 5) penalty++;\n } else {\n count = 1;\n }\n }\n }\n return penalty;\n}\nfunction generateQRMatrix(data, ecLevel) {\n const info = getVersionInfo(data.length, ecLevel);\n const dataCodewords = createByteData(data, info.version);\n const totalDataCodewords = info.totalCodewords - info.numBlocks * info.ecCodewordsPerBlock;\n while (dataCodewords.length < totalDataCodewords) {\n dataCodewords.push(dataCodewords.length % 2 === 0 ? 236 : 17);\n }\n const codewords = interleaveBlocks(dataCodewords, info);\n const baseMatrix = createMatrix(info.version);\n placeData(baseMatrix, codewords);\n let bestMatrix = null;\n let bestPenalty = Infinity;\n for (let mask = 0; mask < 8; mask++) {\n const matrix = baseMatrix.map(\n (row) => row.map((cell) => cell === null ? 0 : cell)\n );\n applyMask(matrix, mask);\n addFormatInfo(matrix, ecLevel, mask);\n const penalty = evaluatePenalty(matrix);\n if (penalty < bestPenalty) {\n bestPenalty = penalty;\n bestMatrix = matrix;\n }\n }\n return bestMatrix;\n}\nfunction generateQRSvg(data, options = {}) {\n const { size = 200, errorCorrection = \"L\", quietZone = 4 } = options;\n const matrix = generateQRMatrix(data, errorCorrection);\n const moduleCount = matrix.length;\n const totalModules = moduleCount + quietZone * 2;\n const moduleSize = size / totalModules;\n let paths = \"\";\n for (let r = 0; r < moduleCount; r++) {\n for (let c = 0; c < moduleCount; c++) {\n if (matrix[r][c] === 1) {\n const x = (c + quietZone) * moduleSize;\n const y = (r + quietZone) * moduleSize;\n paths += `M${x},${y}h${moduleSize}v${moduleSize}h-${moduleSize}z`;\n }\n }\n }\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 ${size} ${size}\" width=\"${size}\" height=\"${size}\"><rect width=\"100%\" height=\"100%\" fill=\"white\"/><path d=\"${paths}\" fill=\"black\"/></svg>`;\n}\nfunction generateQRDataUrl(data, options = {}) {\n const svg = generateQRSvg(data, options);\n const encoded = encodeURIComponent(svg).replace(/'/g, \"%27\").replace(/\"/g, \"%22\");\n return `data:image/svg+xml,${encoded}`;\n}\n\n// src/verification.ts\nfunction createVerification(config) {\n const { apiUrl, polling, qr, fetch: fetchFn } = config;\n const client = createApiClient({ baseUrl: apiUrl, fetch: fetchFn });\n const subscribers = /* @__PURE__ */ new Set();\n let currentState = { status: \"idle\" };\n let currentSessionId = null;\n let poller = null;\n function setState(newState) {\n currentState = newState;\n for (const callback of subscribers) {\n try {\n callback(newState);\n } catch {\n }\n }\n }\n function mapSessionToState(session) {\n switch (session.status) {\n case \"pending\":\n if (session.qrUrl) {\n return {\n status: \"showQR\",\n qrDataUrl: generateQRDataUrl(session.qrUrl, qr),\n qrUrl: session.qrUrl,\n sessionId: session.id\n };\n }\n return { status: \"loading\" };\n case \"waiting_for_wallet\":\n return { status: \"waitingForWallet\", sessionId: session.id };\n case \"verified\":\n return {\n status: \"verified\",\n token: session.token,\n claims: session.claims\n };\n case \"rejected\":\n return { status: \"rejected\", error: session.error };\n case \"expired\":\n return { status: \"expired\" };\n case \"cancelled\":\n return { status: \"idle\" };\n case \"error\":\n return { status: \"error\", error: session.error ?? \"Verification failed\" };\n default:\n return { status: \"error\", error: \"Unknown session status\" };\n }\n }\n async function pollSession() {\n if (!currentSessionId) return true;\n try {\n const session = await client.getSession(currentSessionId);\n const newState = mapSessionToState(session);\n if (newState.status !== currentState.status || newState.status === \"showQR\" && currentState.status === \"showQR\" && newState.sessionId !== currentState.sessionId) {\n setState(newState);\n }\n if (isTerminalStatus(session.status)) {\n return true;\n }\n return false;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n setState({ status: \"error\", error: errorMessage });\n return true;\n }\n }\n function stopPolling() {\n if (poller) {\n poller.stop();\n poller = null;\n }\n }\n function startPolling() {\n stopPolling();\n poller = createPoller(pollSession, polling);\n poller.start();\n }\n return {\n get state() {\n return currentState;\n },\n async start(request) {\n stopPolling();\n currentSessionId = null;\n setState({ status: \"loading\" });\n try {\n const session = await client.createSession(request);\n currentSessionId = session.id;\n const newState = mapSessionToState(session);\n setState(newState);\n if (!isTerminalStatus(session.status)) {\n startPolling();\n }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n setState({ status: \"error\", error: errorMessage });\n }\n },\n async cancel() {\n if (!currentSessionId) return;\n stopPolling();\n try {\n await client.cancelSession(currentSessionId);\n currentSessionId = null;\n setState({ status: \"idle\" });\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Failed to cancel\";\n setState({ status: \"error\", error: errorMessage });\n }\n },\n destroy() {\n stopPolling();\n currentSessionId = null;\n subscribers.clear();\n },\n subscribe(callback) {\n subscribers.add(callback);\n try {\n callback(currentState);\n } catch {\n }\n return () => {\n subscribers.delete(callback);\n };\n }\n };\n}\n\n// src/index.ts\nvar VERSION = \"0.1.0\";\nexport {\n ApiResponseError,\n EudiClientError,\n NetworkError,\n RateLimitError,\n SessionExpiredError,\n SessionNotFoundError,\n TERMINAL_STATUSES,\n VERSION,\n VerificationCancelledError,\n createApiClient,\n createPoller,\n createVerification,\n generateQRDataUrl,\n generateQRSvg,\n isTerminalStatus\n};\n","/**\n * @eudi-verify/embed - Styles\n *\n * CSS template with custom property theming.\n * Uses open Shadow DOM for style encapsulation.\n */\n\n/**\n * CSS custom properties for theming.\n * These can be set on the host element or any ancestor.\n */\nexport const CSS_VARIABLES = {\n '--eudi-primary': '#003399',\n '--eudi-text': '#1a1a1a',\n '--eudi-background': '#ffffff',\n '--eudi-border-radius': '8px',\n '--eudi-font-family': 'system-ui, sans-serif',\n '--eudi-error': '#d32f2f',\n} as const;\n\n/**\n * Generate the internal stylesheet for the shadow DOM.\n * Uses CSS custom properties with fallbacks to defaults.\n */\nexport function createStyles(): string {\n return /* css */ `\n :host {\n display: block;\n font-family: var(--eudi-font-family, ${CSS_VARIABLES['--eudi-font-family']});\n color: var(--eudi-text, ${CSS_VARIABLES['--eudi-text']});\n }\n\n :host([hidden]) {\n display: none;\n }\n\n *,\n *::before,\n *::after {\n box-sizing: border-box;\n }\n\n .eudi-widget {\n background: var(--eudi-background, ${CSS_VARIABLES['--eudi-background']});\n border: 1px solid color-mix(in srgb, var(--eudi-text, ${CSS_VARIABLES['--eudi-text']}) 20%, transparent);\n border-radius: var(--eudi-border-radius, ${CSS_VARIABLES['--eudi-border-radius']});\n padding: 24px;\n text-align: center;\n min-width: 280px;\n max-width: 400px;\n margin-inline: auto;\n }\n\n /* State containers - only one visible at a time */\n .eudi-state {\n display: none;\n }\n\n .eudi-state[data-active] {\n display: block;\n }\n\n /* Start button */\n .eudi-start-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 12px 24px;\n font-size: 16px;\n font-weight: 500;\n font-family: inherit;\n color: #ffffff;\n background: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n border: none;\n border-radius: var(--eudi-border-radius, ${CSS_VARIABLES['--eudi-border-radius']});\n cursor: pointer;\n transition: background-color 0.2s ease, transform 0.1s ease;\n }\n\n .eudi-start-btn:hover {\n background: color-mix(in srgb, var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']}) 85%, black);\n }\n\n .eudi-start-btn:focus-visible {\n outline: 2px solid var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n outline-offset: 2px;\n }\n\n .eudi-start-btn:active {\n transform: scale(0.98);\n }\n\n /* EU stars icon */\n .eudi-icon {\n width: 20px;\n height: 20px;\n flex-shrink: 0;\n }\n\n /* Loading state */\n .eudi-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 16px 0;\n }\n\n .eudi-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid color-mix(in srgb, var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']}) 20%, transparent);\n border-top-color: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n border-radius: 50%;\n animation: eudi-spin 0.8s linear infinite;\n }\n\n @keyframes eudi-spin {\n to {\n transform: rotate(360deg);\n }\n }\n\n /* Reduced motion */\n @media (prefers-reduced-motion: reduce) {\n .eudi-spinner {\n animation: none;\n border-top-color: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n border-right-color: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n }\n\n .eudi-start-btn {\n transition: none;\n }\n }\n\n /* QR code state */\n .eudi-qr {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 16px;\n }\n\n .eudi-qr-img {\n width: 200px;\n height: 200px;\n border: 1px solid color-mix(in srgb, var(--eudi-text, ${CSS_VARIABLES['--eudi-text']}) 15%, transparent);\n border-radius: 4px;\n }\n\n .eudi-qr-text {\n margin: 0;\n font-size: 14px;\n color: color-mix(in srgb, var(--eudi-text, ${CSS_VARIABLES['--eudi-text']}) 80%, transparent);\n }\n\n .eudi-cancel-btn {\n margin-top: 8px;\n padding: 8px 16px;\n font-size: 14px;\n font-family: inherit;\n color: var(--eudi-text, ${CSS_VARIABLES['--eudi-text']});\n background: transparent;\n border: 1px solid color-mix(in srgb, var(--eudi-text, ${CSS_VARIABLES['--eudi-text']}) 30%, transparent);\n border-radius: var(--eudi-border-radius, ${CSS_VARIABLES['--eudi-border-radius']});\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n\n .eudi-cancel-btn:hover {\n background: color-mix(in srgb, var(--eudi-text, ${CSS_VARIABLES['--eudi-text']}) 5%, transparent);\n }\n\n .eudi-cancel-btn:focus-visible {\n outline: 2px solid var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n outline-offset: 2px;\n }\n\n /* Waiting for wallet */\n .eudi-waiting {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 16px 0;\n }\n\n .eudi-waiting-icon {\n width: 48px;\n height: 48px;\n color: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n }\n\n .eudi-waiting-text {\n margin: 0;\n font-size: 16px;\n }\n\n /* Success state */\n .eudi-success {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 16px 0;\n }\n\n .eudi-success-icon {\n width: 48px;\n height: 48px;\n color: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n }\n\n .eudi-success-text {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n color: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n }\n\n /* Error/rejected/expired states */\n .eudi-error {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 12px;\n padding: 16px 0;\n }\n\n .eudi-error-icon {\n width: 48px;\n height: 48px;\n color: var(--eudi-error, ${CSS_VARIABLES['--eudi-error']});\n }\n\n .eudi-error-text {\n margin: 0;\n font-size: 16px;\n color: var(--eudi-error, ${CSS_VARIABLES['--eudi-error']});\n }\n\n .eudi-error-detail {\n margin: 0;\n font-size: 14px;\n color: color-mix(in srgb, var(--eudi-text, ${CSS_VARIABLES['--eudi-text']}) 70%, transparent);\n }\n\n .eudi-retry-btn {\n margin-top: 8px;\n padding: 10px 20px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n color: #ffffff;\n background: var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n border: none;\n border-radius: var(--eudi-border-radius, ${CSS_VARIABLES['--eudi-border-radius']});\n cursor: pointer;\n transition: background-color 0.2s ease;\n }\n\n .eudi-retry-btn:hover {\n background: color-mix(in srgb, var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']}) 85%, black);\n }\n\n .eudi-retry-btn:focus-visible {\n outline: 2px solid var(--eudi-primary, ${CSS_VARIABLES['--eudi-primary']});\n outline-offset: 2px;\n }\n\n /* Screen reader only */\n .eudi-sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n white-space: nowrap;\n border: 0;\n }\n\n /* Demo mode banner */\n .eudi-demo-banner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 8px 12px;\n margin-bottom: 16px;\n font-size: 13px;\n color: #7c5c00;\n background: #fef3cd;\n border: 1px solid #ffe69c;\n border-radius: 4px;\n }\n\n .eudi-demo-banner[hidden] {\n display: none;\n }\n\n .eudi-warning-icon {\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n color: #7c5c00;\n }\n `;\n}\n","/**\n * @eudi-verify/embed - State-based Rendering\n *\n * Renders the widget UI based on verification state.\n */\n\nimport type { VerificationState } from '@eudi-verify/client';\n\n/**\n * SVG icon: EU stars (simplified)\n */\nconst EU_STARS_ICON = /* html */ `\n<svg class=\"eudi-icon\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\"/>\n <g fill=\"currentColor\">\n <polygon points=\"12,4 12.5,5.5 14,5.5 12.75,6.5 13.25,8 12,7 10.75,8 11.25,6.5 10,5.5 11.5,5.5\"/>\n <polygon points=\"17,6.5 17.35,7.6 18.5,7.6 17.6,8.3 17.9,9.4 17,8.7 16.1,9.4 16.4,8.3 15.5,7.6 16.65,7.6\"/>\n <polygon points=\"19,11 19.35,12.1 20.5,12.1 19.6,12.8 19.9,13.9 19,13.2 18.1,13.9 18.4,12.8 17.5,12.1 18.65,12.1\"/>\n <polygon points=\"17,15.5 17.35,16.6 18.5,16.6 17.6,17.3 17.9,18.4 17,17.7 16.1,18.4 16.4,17.3 15.5,16.6 16.65,16.6\"/>\n <polygon points=\"12,18 12.35,19.1 13.5,19.1 12.6,19.8 12.9,20.9 12,20.2 11.1,20.9 11.4,19.8 10.5,19.1 11.65,19.1\"/>\n <polygon points=\"7,15.5 7.35,16.6 8.5,16.6 7.6,17.3 7.9,18.4 7,17.7 6.1,18.4 6.4,17.3 5.5,16.6 6.65,16.6\"/>\n <polygon points=\"5,11 5.35,12.1 6.5,12.1 5.6,12.8 5.9,13.9 5,13.2 4.1,13.9 4.4,12.8 3.5,12.1 4.65,12.1\"/>\n <polygon points=\"7,6.5 7.35,7.6 8.5,7.6 7.6,8.3 7.9,9.4 7,8.7 6.1,9.4 6.4,8.3 5.5,7.6 6.65,7.6\"/>\n </g>\n</svg>\n`;\n\n/**\n * SVG icon: checkmark (success)\n */\nconst SUCCESS_ICON = /* html */ `\n<svg class=\"eudi-success-icon\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2\"/>\n <path d=\"M8 12l3 3 5-6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>\n`;\n\n/**\n * SVG icon: X (error)\n */\nconst ERROR_ICON = /* html */ `\n<svg class=\"eudi-error-icon\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2\"/>\n <path d=\"M15 9l-6 6M9 9l6 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n</svg>\n`;\n\n/**\n * SVG icon: clock (expired)\n */\nconst EXPIRED_ICON = /* html */ `\n<svg class=\"eudi-error-icon\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2\"/>\n <path d=\"M12 6v6l4 2\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>\n</svg>\n`;\n\n/**\n * SVG icon: wallet (waiting)\n */\nconst WALLET_ICON = /* html */ `\n<svg class=\"eudi-waiting-icon\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <rect x=\"2\" y=\"6\" width=\"20\" height=\"14\" rx=\"2\" stroke=\"currentColor\" stroke-width=\"2\"/>\n <path d=\"M2 10h20\" stroke=\"currentColor\" stroke-width=\"2\"/>\n <circle cx=\"17\" cy=\"14\" r=\"1.5\" fill=\"currentColor\"/>\n</svg>\n`;\n\n/**\n * SVG icon: warning (demo banner)\n */\nconst WARNING_ICON = /* html */ `\n<svg class=\"eudi-warning-icon\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 9v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n</svg>\n`;\n\n/**\n * Map of status to state container ID.\n */\ntype RenderableStatus = VerificationState['status'];\n\n/**\n * Get the state container ID for a status.\n */\nexport function getStateId(status: RenderableStatus): string {\n return `eudi-state-${status}`;\n}\n\n/**\n * Render the idle state (start button).\n */\nfunction renderIdle(): string {\n return /* html */ `\n <div id=\"${getStateId('idle')}\" class=\"eudi-state\" data-active>\n <button class=\"eudi-start-btn\" type=\"button\" data-action=\"start\">\n ${EU_STARS_ICON}\n <span>Verify with EU Wallet</span>\n </button>\n </div>\n `;\n}\n\n/**\n * Render the loading state.\n */\nfunction renderLoading(): string {\n return /* html */ `\n <div id=\"${getStateId('loading')}\" class=\"eudi-state\">\n <div class=\"eudi-loading\">\n <div class=\"eudi-spinner\" aria-hidden=\"true\"></div>\n <p>Loading...</p>\n </div>\n </div>\n `;\n}\n\n/**\n * Render the QR code state.\n */\nfunction renderShowQR(): string {\n return /* html */ `\n <div id=\"${getStateId('showQR')}\" class=\"eudi-state\">\n <div class=\"eudi-qr\">\n <img class=\"eudi-qr-img\" src=\"\" alt=\"Scan with EUDI Wallet\" />\n <p class=\"eudi-qr-text\">Scan with your EU Digital Identity Wallet</p>\n <button class=\"eudi-cancel-btn\" type=\"button\" data-action=\"cancel\">Cancel</button>\n </div>\n </div>\n `;\n}\n\n/**\n * Render the waiting for wallet state.\n */\nfunction renderWaitingForWallet(): string {\n return /* html */ `\n <div id=\"${getStateId('waitingForWallet')}\" class=\"eudi-state\">\n <div class=\"eudi-waiting\">\n ${WALLET_ICON}\n <p class=\"eudi-waiting-text\">Waiting for wallet approval...</p>\n <button class=\"eudi-cancel-btn\" type=\"button\" data-action=\"cancel\">Cancel</button>\n </div>\n </div>\n `;\n}\n\n/**\n * Render the verified state.\n */\nfunction renderVerified(): string {\n return /* html */ `\n <div id=\"${getStateId('verified')}\" class=\"eudi-state\">\n <div class=\"eudi-success\">\n ${SUCCESS_ICON}\n <p class=\"eudi-success-text\">Verified</p>\n </div>\n </div>\n `;\n}\n\n/**\n * Render the rejected state.\n */\nfunction renderRejected(): string {\n return /* html */ `\n <div id=\"${getStateId('rejected')}\" class=\"eudi-state\">\n <div class=\"eudi-error\">\n ${ERROR_ICON}\n <p class=\"eudi-error-text\">Verification declined</p>\n <p class=\"eudi-error-detail\"></p>\n <button class=\"eudi-retry-btn\" type=\"button\" data-action=\"reset\">Try again</button>\n </div>\n </div>\n `;\n}\n\n/**\n * Render the expired state.\n */\nfunction renderExpired(): string {\n return /* html */ `\n <div id=\"${getStateId('expired')}\" class=\"eudi-state\">\n <div class=\"eudi-error\">\n ${EXPIRED_ICON}\n <p class=\"eudi-error-text\">Session expired</p>\n <button class=\"eudi-retry-btn\" type=\"button\" data-action=\"reset\">Try again</button>\n </div>\n </div>\n `;\n}\n\n/**\n * Render the error state.\n */\nfunction renderError(): string {\n return /* html */ `\n <div id=\"${getStateId('error')}\" class=\"eudi-state\">\n <div class=\"eudi-error\">\n ${ERROR_ICON}\n <p class=\"eudi-error-text\">Verification failed</p>\n <p class=\"eudi-error-detail\"></p>\n <button class=\"eudi-retry-btn\" type=\"button\" data-action=\"reset\">Try again</button>\n </div>\n </div>\n `;\n}\n\n/**\n * Render the demo mode banner.\n */\nfunction renderDemoBanner(): string {\n return /* html */ `\n <div class=\"eudi-demo-banner\" role=\"status\" aria-live=\"polite\" hidden>\n ${WARNING_ICON}\n <span>Demo mode — credentials are simulated</span>\n </div>\n `;\n}\n\n/**\n * Render the complete widget structure.\n * All states are rendered, only one is visible at a time.\n */\nexport function renderWidget(): string {\n return /* html */ `\n <div class=\"eudi-widget\" role=\"region\" aria-label=\"Identity verification\">\n <div class=\"eudi-sr-only\" aria-live=\"polite\" aria-atomic=\"true\"></div>\n ${renderDemoBanner()}\n ${renderIdle()}\n ${renderLoading()}\n ${renderShowQR()}\n ${renderWaitingForWallet()}\n ${renderVerified()}\n ${renderRejected()}\n ${renderExpired()}\n ${renderError()}\n </div>\n `;\n}\n\n/**\n * Update the visible state and content based on verification state.\n */\nexport function updateWidgetState(\n container: HTMLElement,\n state: VerificationState\n): void {\n const stateContainers = container.querySelectorAll<HTMLElement>('.eudi-state');\n\n for (const stateEl of stateContainers) {\n if (stateEl.id === getStateId(state.status)) {\n stateEl.setAttribute('data-active', '');\n } else {\n stateEl.removeAttribute('data-active');\n }\n }\n\n if (state.status === 'showQR') {\n const img = container.querySelector<HTMLImageElement>('.eudi-qr-img');\n if (img && 'qrDataUrl' in state) {\n img.src = state.qrDataUrl;\n }\n }\n\n if (state.status === 'rejected' && 'error' in state && state.error) {\n const detail = container.querySelector(`#${getStateId('rejected')} .eudi-error-detail`);\n if (detail) {\n detail.textContent = state.error;\n }\n }\n\n if (state.status === 'error' && 'error' in state) {\n const detail = container.querySelector(`#${getStateId('error')} .eudi-error-detail`);\n if (detail) {\n detail.textContent = state.error;\n }\n }\n}\n","/**\n * @eudi-verify/embed - Accessibility Utilities\n *\n * WCAG 2.1 AA compliance helpers for focus management and announcements.\n */\n\n/**\n * Selectors for focusable elements within the widget.\n */\nconst FOCUSABLE_SELECTORS = [\n 'button:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n 'a[href]',\n 'input:not([disabled])',\n].join(', ');\n\n/**\n * Get all focusable elements within a container.\n */\nexport function getFocusableElements(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTORS));\n}\n\n/**\n * Create a focus trap within a container.\n * Returns a cleanup function to remove the trap.\n */\nexport function createFocusTrap(container: HTMLElement): () => void {\n let previouslyFocused: HTMLElement | null = null;\n\n function handleKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Tab') return;\n\n const focusable = getFocusableElements(container);\n if (focusable.length === 0) return;\n\n const firstElement = focusable[0]!;\n const lastElement = focusable[focusable.length - 1]!;\n\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n } else if (!event.shiftKey && document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n\n function activate(): void {\n previouslyFocused = document.activeElement as HTMLElement | null;\n container.addEventListener('keydown', handleKeyDown);\n\n const focusable = getFocusableElements(container);\n if (focusable.length > 0) {\n focusable[0]!.focus();\n }\n }\n\n function deactivate(): void {\n container.removeEventListener('keydown', handleKeyDown);\n if (previouslyFocused && typeof previouslyFocused.focus === 'function') {\n previouslyFocused.focus();\n }\n }\n\n activate();\n return deactivate;\n}\n\n/**\n * Announce a message to screen readers via aria-live region.\n */\nexport function announce(\n liveRegion: HTMLElement,\n message: string,\n priority: 'polite' | 'assertive' = 'polite'\n): void {\n liveRegion.setAttribute('aria-live', priority);\n liveRegion.textContent = '';\n requestAnimationFrame(() => {\n liveRegion.textContent = message;\n });\n}\n\n/**\n * Clear the announcement from a live region.\n */\nexport function clearAnnouncement(liveRegion: HTMLElement): void {\n liveRegion.textContent = '';\n}\n\n/**\n * Messages for each verification state (for screen reader announcements).\n */\nexport const STATE_MESSAGES = {\n idle: '',\n loading: 'Loading verification session...',\n showQR: 'QR code ready. Scan with your EU Digital Identity Wallet.',\n waitingForWallet: 'Waiting for wallet approval...',\n verified: 'Identity verified successfully.',\n rejected: 'Verification was declined.',\n expired: 'Verification session expired.',\n error: 'Verification error occurred.',\n} as const;\n\n/**\n * Get aria-live priority for a state change.\n * Terminal states use assertive, others use polite.\n */\nexport function getAnnouncementPriority(\n status: keyof typeof STATE_MESSAGES\n): 'polite' | 'assertive' {\n switch (status) {\n case 'verified':\n case 'rejected':\n case 'expired':\n case 'error':\n return 'assertive';\n default:\n return 'polite';\n }\n}\n\n/**\n * Check if reduced motion is preferred.\n */\nexport function prefersReducedMotion(): boolean {\n return (\n typeof window !== 'undefined' &&\n window.matchMedia?.('(prefers-reduced-motion: reduce)').matches\n );\n}\n","/**\n * @eudi-verify/embed - Custom Element\n *\n * <eudi-verify> vanilla Custom Element for EUDI Wallet verification.\n * Uses open Shadow DOM with CSS custom property theming.\n */\n\nimport {\n createVerification,\n type Verification,\n type VerificationState,\n type VerificationRequest,\n} from '@eudi-verify/client';\nimport { createStyles } from './styles.js';\nimport { renderWidget, updateWidgetState } from './render.js';\nimport {\n announce,\n clearAnnouncement,\n STATE_MESSAGES,\n getAnnouncementPriority,\n} from './a11y.js';\n\n/**\n * Events dispatched by EudiVerifyElement.\n */\nexport interface EudiVerifyEventMap {\n verified: CustomEvent<{ token: string; claims: Record<string, unknown> }>;\n rejected: CustomEvent<{ error?: string }>;\n expired: CustomEvent<Record<string, never>>;\n error: CustomEvent<{ error: string }>;\n 'state-change': CustomEvent<{ state: VerificationState }>;\n}\n\n/**\n * Observed attributes for the custom element.\n */\nconst OBSERVED_ATTRIBUTES = ['api-url', 'request', 'auto-start'] as const;\ntype ObservedAttribute = (typeof OBSERVED_ATTRIBUTES)[number];\n\n/**\n * <eudi-verify> Custom Element\n *\n * @example\n * ```html\n * <eudi-verify\n * api-url=\"/api/eudi\"\n * request='{\"age_over_18\":true}'\n * ></eudi-verify>\n * ```\n *\n * @fires verified - Verification succeeded\n * @fires rejected - User rejected in wallet\n * @fires expired - Session expired\n * @fires error - Error occurred\n * @fires state-change - Any state change\n */\nexport class EudiVerifyElement extends HTMLElement {\n static get observedAttributes(): readonly string[] {\n return OBSERVED_ATTRIBUTES;\n }\n\n #shadow: ShadowRoot;\n #verification: Verification | null = null;\n #unsubscribe: (() => void) | null = null;\n #container: HTMLElement | null = null;\n #liveRegion: HTMLElement | null = null;\n #lastStatus: VerificationState['status'] | null = null;\n #isDemo: boolean | null = null;\n #demoBanner: HTMLElement | null = null;\n\n constructor() {\n super();\n this.#shadow = this.attachShadow({ mode: 'open' });\n }\n\n /**\n * Get the API URL attribute.\n */\n get apiUrl(): string {\n return this.getAttribute('api-url') ?? '';\n }\n\n /**\n * Set the API URL attribute.\n */\n set apiUrl(value: string) {\n this.setAttribute('api-url', value);\n }\n\n /**\n * Get the request attribute (JSON string).\n */\n get request(): string {\n return this.getAttribute('request') ?? '';\n }\n\n /**\n * Set the request attribute (JSON string).\n */\n set request(value: string) {\n this.setAttribute('request', value);\n }\n\n /**\n * Check if auto-start is enabled.\n */\n get autoStart(): boolean {\n return this.hasAttribute('auto-start');\n }\n\n /**\n * Set auto-start attribute.\n */\n set autoStart(value: boolean) {\n if (value) {\n this.setAttribute('auto-start', '');\n } else {\n this.removeAttribute('auto-start');\n }\n }\n\n /**\n * Current verification state (read-only).\n */\n get state(): VerificationState | null {\n return this.#verification?.state ?? null;\n }\n\n connectedCallback(): void {\n this.#render();\n this.#setupEventListeners();\n\n if (this.autoStart && this.apiUrl && this.request) {\n this.start();\n }\n }\n\n disconnectedCallback(): void {\n this.#cleanup();\n }\n\n attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null\n ): void {\n if (oldValue === newValue) return;\n\n if (name === 'api-url' && this.#verification) {\n this.#cleanup();\n }\n }\n\n /**\n * Start the verification flow.\n */\n start(): void {\n if (!this.apiUrl) {\n console.error('[eudi-verify] api-url attribute is required');\n return;\n }\n\n let requestObj: VerificationRequest;\n try {\n requestObj = this.request ? JSON.parse(this.request) : {};\n } catch {\n console.error('[eudi-verify] Invalid JSON in request attribute');\n this.#dispatchError('Invalid verification request');\n return;\n }\n\n this.#ensureVerification();\n this.#verification!.start(requestObj);\n }\n\n /**\n * Cancel the current verification.\n */\n cancel(): void {\n this.#verification?.cancel();\n }\n\n /**\n * Reset to idle state.\n */\n reset(): void {\n this.#cleanup();\n this.#updateState({ status: 'idle' });\n }\n\n #render(): void {\n this.#shadow.innerHTML = `\n <style>${createStyles()}</style>\n ${renderWidget()}\n `;\n\n this.#container = this.#shadow.querySelector('.eudi-widget');\n this.#liveRegion = this.#shadow.querySelector('[aria-live]');\n this.#demoBanner = this.#shadow.querySelector('.eudi-demo-banner');\n }\n\n #setupEventListeners(): void {\n this.#shadow.addEventListener('click', (event) => {\n const target = event.target as HTMLElement;\n const button = target.closest<HTMLElement>('[data-action]');\n if (!button) return;\n\n const action = button.dataset.action;\n switch (action) {\n case 'start':\n this.start();\n break;\n case 'cancel':\n this.cancel();\n break;\n case 'reset':\n this.reset();\n this.start();\n break;\n }\n });\n }\n\n #ensureVerification(): void {\n if (this.#verification) return;\n\n this.#verification = createVerification({\n apiUrl: this.apiUrl,\n });\n\n this.#unsubscribe = this.#verification.subscribe((state) => {\n this.#handleStateChange(state);\n });\n\n // Detect demo mode on first API interaction\n this.#detectDemoMode();\n }\n\n async #detectDemoMode(): Promise<void> {\n if (this.#isDemo !== null || !this.apiUrl) return;\n\n try {\n const response = await fetch(`${this.apiUrl}/sessions`, {\n method: 'HEAD',\n });\n const mode = response.headers.get('X-Eudi-Mode');\n this.#isDemo = mode === 'demo';\n this.#updateDemoBanner();\n } catch {\n // If detection fails, don't show banner (fail safely)\n this.#isDemo = false;\n }\n }\n\n #updateDemoBanner(): void {\n if (!this.#demoBanner) return;\n\n if (this.#isDemo === true) {\n this.#demoBanner.removeAttribute('hidden');\n } else {\n this.#demoBanner.setAttribute('hidden', '');\n }\n }\n\n #handleStateChange(state: VerificationState): void {\n this.#updateState(state);\n this.#dispatchStateChange(state);\n\n switch (state.status) {\n case 'verified':\n if ('token' in state && 'claims' in state) {\n this.#dispatchVerified(state.token, state.claims);\n }\n break;\n case 'rejected':\n this.#dispatchRejected('error' in state ? state.error : undefined);\n break;\n case 'expired':\n this.#dispatchExpired();\n break;\n case 'error':\n if ('error' in state) {\n this.#dispatchError(state.error);\n }\n break;\n }\n }\n\n #updateState(state: VerificationState): void {\n if (!this.#container) return;\n\n updateWidgetState(this.#container, state);\n\n if (this.#liveRegion && state.status !== this.#lastStatus) {\n const message = STATE_MESSAGES[state.status];\n if (message) {\n const priority = getAnnouncementPriority(state.status);\n announce(this.#liveRegion, message, priority);\n }\n }\n\n this.#lastStatus = state.status;\n\n this.#manageFocus(state);\n }\n\n #manageFocus(state: VerificationState): void {\n if (!this.#container) return;\n\n switch (state.status) {\n case 'showQR': {\n const cancelBtn =\n this.#container.querySelector<HTMLElement>('#eudi-state-showQR .eudi-cancel-btn');\n cancelBtn?.focus();\n break;\n }\n case 'verified':\n case 'rejected':\n case 'expired':\n case 'error': {\n const retryBtn = this.#container.querySelector<HTMLElement>(\n `#eudi-state-${state.status} .eudi-retry-btn`\n );\n retryBtn?.focus();\n break;\n }\n }\n }\n\n #dispatchVerified(token: string, claims: Record<string, unknown>): void {\n this.dispatchEvent(\n new CustomEvent('verified', {\n bubbles: true,\n composed: true,\n detail: { token, claims },\n })\n );\n }\n\n #dispatchRejected(error?: string): void {\n this.dispatchEvent(\n new CustomEvent('rejected', {\n bubbles: true,\n composed: true,\n detail: { error },\n })\n );\n }\n\n #dispatchExpired(): void {\n this.dispatchEvent(\n new CustomEvent('expired', {\n bubbles: true,\n composed: true,\n detail: {},\n })\n );\n }\n\n #dispatchError(error: string): void {\n this.dispatchEvent(\n new CustomEvent('error', {\n bubbles: true,\n composed: true,\n detail: { error },\n })\n );\n }\n\n #dispatchStateChange(state: VerificationState): void {\n this.dispatchEvent(\n new CustomEvent('state-change', {\n bubbles: true,\n composed: true,\n detail: { state },\n })\n );\n }\n\n #cleanup(): void {\n if (this.#unsubscribe) {\n this.#unsubscribe();\n this.#unsubscribe = null;\n }\n\n if (this.#verification) {\n this.#verification.destroy();\n this.#verification = null;\n }\n\n if (this.#liveRegion) {\n clearAnnouncement(this.#liveRegion);\n }\n\n this.#lastStatus = null;\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'eudi-verify': EudiVerifyElement;\n }\n\n interface HTMLElementEventMap extends EudiVerifyEventMap {}\n}\n"],"mappings":"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,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAC/C,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAAA,IAChD,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GA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","names":[]}