@uimaxbai/am-lyrics 1.0.2 → 1.0.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"react.js","sources":["../../node_modules/tslib/tslib.es6.js","../../node_modules/@lit/reactive-element/css-tag.js","../../node_modules/@lit/reactive-element/reactive-element.js","../../node_modules/lit-html/lit-html.js","../../node_modules/lit-element/lit-element.js","../../node_modules/@lit/reactive-element/decorators/property.js","../../node_modules/@lit/reactive-element/decorators/state.js","../../node_modules/@lit/reactive-element/decorators/base.js","../../node_modules/@lit/reactive-element/decorators/query.js","../../../src/GoogleService.ts","../../../src/AmLyrics.ts","../../../src/react.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce(((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1]),t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map((t=>t instanceof CSSStyleSheet?t:t.styleSheet));else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise((t=>this.enableUpdating=t)),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach((t=>t(this)))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach((t=>t.hostConnected?.()))}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach((t=>t.hostDisconnected?.()))}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e,this[e]=h.fromAttribute(s,t.type)??this._$Ej?.get(e)??null,this._$Em=null}}requestUpdate(t,s,i){if(void 0!==t){const e=this.constructor,h=this[t];if(i??=e.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(e._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach((t=>t.hostUpdate?.())),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach((t=>t.hostUpdated?.())),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach((t=>this._$ET(t,this[t]))),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.0\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t.trustedTypes,s=i?i.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,e=\"$lit$\",h=`lit$${Math.random().toFixed(9).slice(2)}$`,o=\"?\"+h,n=`<${o}>`,r=document,l=()=>r.createComment(\"\"),c=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,a=Array.isArray,u=t=>a(t)||\"function\"==typeof t?.[Symbol.iterator],d=\"[ \\t\\n\\f\\r]\",f=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,v=/-->/g,_=/>/g,m=RegExp(`>|${d}(?:([^\\\\s\"'>=/]+)(${d}*=${d}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),p=/'/g,g=/\"/g,$=/^(?:script|style|textarea|title)$/i,y=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),x=y(1),b=y(2),w=y(3),T=Symbol.for(\"lit-noChange\"),E=Symbol.for(\"lit-nothing\"),A=new WeakMap,C=r.createTreeWalker(r,129);function P(t,i){if(!a(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==s?s.createHTML(i):i}const V=(t,i)=>{const s=t.length-1,o=[];let r,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=f;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,y=0;for(;y<s.length&&(c.lastIndex=y,u=c.exec(s),null!==u);)y=c.lastIndex,c===f?\"!--\"===u[1]?c=v:void 0!==u[1]?c=_:void 0!==u[2]?($.test(u[2])&&(r=RegExp(\"</\"+u[2],\"g\")),c=m):void 0!==u[3]&&(c=m):c===m?\">\"===u[0]?(c=r??f,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?m:'\"'===u[3]?g:p):c===g||c===p?c=m:c===v||c===_?c=f:(c=m,r=void 0);const x=c===m&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===f?s+n:d>=0?(o.push(a),s.slice(0,d)+e+s.slice(d)+h+x):s+h+(-2===d?i:x)}return[P(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),o]};class N{constructor({strings:t,_$litType$:s},n){let r;this.parts=[];let c=0,a=0;const u=t.length-1,d=this.parts,[f,v]=V(t,s);if(this.el=N.createElement(f,n),C.currentNode=this.el.content,2===s||3===s){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=C.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(e)){const i=v[a++],s=r.getAttribute(t).split(h),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:c,name:e[2],strings:s,ctor:\".\"===e[1]?H:\"?\"===e[1]?I:\"@\"===e[1]?L:k}),r.removeAttribute(t)}else t.startsWith(h)&&(d.push({type:6,index:c}),r.removeAttribute(t));if($.test(r.tagName)){const t=r.textContent.split(h),s=t.length-1;if(s>0){r.textContent=i?i.emptyScript:\"\";for(let i=0;i<s;i++)r.append(t[i],l()),C.nextNode(),d.push({type:2,index:++c});r.append(t[s],l())}}}else if(8===r.nodeType)if(r.data===o)d.push({type:2,index:c});else{let t=-1;for(;-1!==(t=r.data.indexOf(h,t+1));)d.push({type:7,index:c}),t+=h.length-1}c++}}static createElement(t,i){const s=r.createElement(\"template\");return s.innerHTML=t,s}}function S(t,i,s=t,e){if(i===T)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=c(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=S(t,h._$AS(t,i.values),h,e)),i}class M{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??r).importNode(i,!0);C.currentNode=e;let h=C.nextNode(),o=0,n=0,l=s[0];for(;void 0!==l;){if(o===l.index){let i;2===l.type?i=new R(h,h.nextSibling,this,t):1===l.type?i=new l.ctor(h,l.name,l.strings,this,t):6===l.type&&(i=new z(h,this,t)),this._$AV.push(i),l=s[++n]}o!==l?.index&&(h=C.nextNode(),o++)}return C.currentNode=r,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class R{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=E,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=S(this,t,i),c(t)?t===E||null==t||\"\"===t?(this._$AH!==E&&this._$AR(),this._$AH=E):t!==this._$AH&&t!==T&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):u(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==E&&c(this._$AH)?this._$AA.nextSibling.data=t:this.T(r.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=N.createElement(P(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new M(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=A.get(t.strings);return void 0===i&&A.set(t.strings,i=new N(t)),i}k(t){a(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new R(this.O(l()),this.O(l()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,i){for(this._$AP?.(!1,!0,i);t&&t!==this._$AB;){const i=t.nextSibling;t.remove(),t=i}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class k{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=E,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=E}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=S(this,t,i,0),o=!c(t)||t!==this._$AH&&t!==T,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=S(this,e[s+n],i,n),r===T&&(r=this._$AH[n]),o||=!c(r)||r!==this._$AH[n],r===E?t=E:t!==E&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===E?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class H extends k{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===E?void 0:t}}class I extends k{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==E)}}class L extends k{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=S(this,t,i,0)??E)===T)return;const s=this._$AH,e=t===E&&s!==E||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==E&&(s===E||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){S(this,t)}}const Z={M:e,P:h,A:o,C:1,L:V,R:M,D:u,V:S,I:R,H:k,N:I,U:L,B:H,F:z},j=t.litHtmlPolyfillSupport;j?.(N,R),(t.litHtmlVersions??=[]).push(\"3.3.0\");const B=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new R(i.insertBefore(l(),t),t,void 0,s??{})}return h._$AI(t),h};export{Z as _$LH,x as html,w as mathml,T as noChange,E as nothing,B as render,b as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.0\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{defaultConverter as t,notEqual as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:t,reflect:!1,hasChanged:e},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * Config for GoogleService\n */\nconst CONFIG = {\n GOOGLE: {\n MAX_RETRIES: 3,\n RETRY_DELAY_MS: 1000,\n },\n};\n\n/**\n * Service for translating and romanizing text using Google Translate (unofficial API)\n */\nexport class GoogleService {\n private static delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n }\n\n private static isPurelyLatinScript(text: string): boolean {\n // Basic check for Latin script characters plus common punctuation and numbers\n // eslint-disable-next-line no-control-regex\n return /^[\\u0000-\\u007F\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]*$/.test(\n text,\n );\n }\n\n static async translate(\n textOrArray: string | string[],\n targetLang: string,\n ): Promise<string | string[]> {\n if (\n !textOrArray ||\n (Array.isArray(textOrArray) && textOrArray.length === 0)\n ) {\n return Array.isArray(textOrArray) ? [] : '';\n }\n\n const isArray = Array.isArray(textOrArray);\n const texts = isArray ? (textOrArray as string[]) : [textOrArray as string];\n\n // Check for empty strings to preserve indices\n const nonEmptyIndices: number[] = [];\n const textsToTranslate: string[] = [];\n\n texts.forEach((t, i) => {\n if (t && t.trim()) {\n nonEmptyIndices.push(i);\n textsToTranslate.push(t);\n }\n });\n\n if (textsToTranslate.length === 0) {\n return isArray ? texts : texts[0];\n }\n\n // Batching logic: Google Translate URL limit is roughly 2000 chars.\n // We'll be conservative with 1500 chars per batch.\n const BATCH_SIZE_CHARS = 1500;\n const translatedResults: string[] = new Array(textsToTranslate.length).fill(\n '',\n );\n\n let currentBatch: string[] = [];\n let currentBatchIndices: number[] = [];\n let currentBatchLength = 0;\n\n const processBatch = async (batch: string[], indices: number[]) => {\n if (batch.length === 0) return;\n const joinedText = batch.join('\\n');\n\n let attempt = 0;\n let success = false;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${targetLang}&dt=t&q=${encodeURIComponent(joinedText)}`;\n // eslint-disable-next-line no-await-in-loop\n const response = await fetch(url);\n if (!response.ok) throw new Error(`Status ${response.status}`);\n // eslint-disable-next-line no-await-in-loop\n const data = await response.json();\n\n // data[0] contains segments.\n // With batching/newlines, Google sometimes returns one large segment with newlines,\n // or multiple segments. We need to reconstruct the full text first.\n\n const fullTranslation =\n data?.[0]?.map((seg: any) => seg?.[0]).join('') || '';\n\n // Split by newline to get individual lines back\n const lines = fullTranslation.split('\\n');\n\n // Edge case: Google might strip trailing newlines or add extra.\n // If we sent N lines, we expect N lines back approx.\n // However, empty lines in input were filtered out before sending.\n // So 'lines' should match 'batch'.\n\n // If mismatch, try to align? Or just take what we have.\n // If lines.length < batch.length, we might have lost some.\n // If lines.length > batch.length, maybe some line wrap?\n\n // We'll trust the split for now but ensure we don't overflow.\n\n indices.forEach((originalIdx, i) => {\n // Safe access\n if (i < lines.length) {\n translatedResults[originalIdx] = lines[i];\n } else {\n // Fallback if response is shorter\n translatedResults[originalIdx] = batch[i];\n }\n });\n\n success = true;\n } catch (e) {\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n // eslint-disable-next-line no-await-in-loop\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n );\n } else {\n // Fail: fill with original\n indices.forEach((originalIdx, i) => {\n translatedResults[originalIdx] = batch[i];\n });\n }\n }\n }\n };\n\n for (let i = 0; i < textsToTranslate.length; i += 1) {\n const text = textsToTranslate[i];\n if (currentBatchLength + text.length > BATCH_SIZE_CHARS) {\n // eslint-disable-next-line no-await-in-loop\n await processBatch(currentBatch, currentBatchIndices);\n currentBatch = [];\n currentBatchIndices = [];\n currentBatchLength = 0;\n }\n currentBatch.push(text);\n currentBatchIndices.push(i);\n currentBatchLength += text.length;\n }\n\n if (currentBatch.length > 0) {\n await processBatch(currentBatch, currentBatchIndices);\n }\n\n // Reconstruct final array\n const finalArray = [...texts];\n nonEmptyIndices.forEach((realIdx, mappedIdx) => {\n finalArray[realIdx] = translatedResults[mappedIdx];\n });\n\n return isArray ? finalArray : finalArray[0];\n }\n\n static async romanize(originalLyrics: any): Promise<any> {\n // Determine if we should treat as word-synced (has syllabus) or line-synced\n\n const lines = Array.isArray(originalLyrics)\n ? originalLyrics\n : originalLyrics.data || originalLyrics.content;\n\n if (!lines) return originalLyrics;\n\n // Check if word synced\n const isWordSynced = lines.some(\n (l: any) =>\n l.isWordSynced !== false && Array.isArray(l.text) && l.text.length > 1,\n );\n\n if (isWordSynced) {\n return this.romanizeWordSynced(lines);\n }\n\n return this.romanizeLineSynced(lines);\n }\n\n static async romanizeWordSynced(lines: any[]): Promise<any[]> {\n return Promise.all(\n lines.map(async (line: any) => {\n if (\n !line.text ||\n !Array.isArray(line.text) ||\n line.text.length === 0 ||\n line.romanizedText // Skip if already romanized\n )\n return line;\n\n // Extract text from syllables\n const syllableTexts = line.text.map((s: any) => s.text);\n const romanizedTexts = await this.romanizeTexts(syllableTexts);\n\n const newSyllabus = line.text.map((s: any, index: number) => ({\n ...s,\n romanizedText: romanizedTexts[index]\n ? `${romanizedTexts[index]}`\n : s.text,\n }));\n\n return {\n ...line,\n text: newSyllabus,\n romanizedText: romanizedTexts.join(' '),\n };\n }),\n );\n }\n\n static async romanizeLineSynced(lines: any[]): Promise<any[]> {\n const linesToRomanize = lines.map((line: any) => {\n // If already romanized, skip\n if (line.romanizedText) {\n return '';\n }\n // If it's line-synced, it usually has 1 syllable with the full text.\n if (Array.isArray(line.text) && line.text.length > 0) {\n return line.text.map((s: any) => s.text).join('');\n }\n return '';\n });\n\n const romanizedLines = await this.romanizeTexts(linesToRomanize);\n\n return lines.map((line: any, index: number) => ({\n ...line,\n romanizedText: romanizedLines[index] || '',\n }));\n }\n\n static async romanizeTexts(texts: string[]): Promise<string[]> {\n const contextText = texts.join(' ');\n\n if (GoogleService.isPurelyLatinScript(contextText)) {\n return texts;\n }\n\n const romanizedTexts: string[] = [];\n\n /* eslint-disable no-await-in-loop */\n for (const text of texts) {\n if (!text || GoogleService.isPurelyLatinScript(text)) {\n romanizedTexts.push(text);\n } else {\n let attempt = 0;\n let success = false;\n let lastError = null;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const romanizeUrl = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=rm&q=${encodeURIComponent(\n text,\n )}`;\n const response = await fetch(romanizeUrl);\n const data = await response.json();\n\n // Response format is [[[\"...\",\"...\",\"...\",\"romanization\"]],...]\n // or [null, ...] for English/Latin input where no romanization is needed\n const romanized = data?.[0]?.[0]?.[3] || text;\n\n romanizedTexts.push(romanized);\n success = true;\n } catch (error) {\n lastError = error;\n // eslint-disable-next-line no-console\n console.warn(\n `GoogleService: Error romanizing text \"${text}\" (attempt ${\n attempt + 1\n }/${CONFIG.GOOGLE.MAX_RETRIES}):`,\n error,\n );\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n ); // Exponential backoff\n }\n }\n }\n\n if (!success) {\n // eslint-disable-next-line no-console\n console.error(\n `GoogleService: Failed to romanize text \"${text}\" after ${CONFIG.GOOGLE.MAX_RETRIES} attempts. Last error:`,\n lastError,\n );\n romanizedTexts.push(text); // Fallback to original text\n }\n }\n }\n /* eslint-enable no-await-in-loop */\n\n return romanizedTexts;\n }\n}\n","import { html, css, LitElement } from 'lit';\nimport { property, state, query } from 'lit/decorators.js';\nimport { GoogleService } from './GoogleService.js';\n\nconst VERSION = '1.0.2';\nconst INSTRUMENTAL_THRESHOLD_MS = 7000; // Show dots for gaps >= 7s\n\nconst KPOE_SERVERS = [\n 'https://lyricsplus.binimum.org',\n 'https://lyricsplus.prjktla.workers.dev',\n 'https://lyrics-plus-backend.vercel.app',\n 'https://lyricsplus.onrender.com',\n 'https://lyricsplus.prjktla.online',\n];\nconst DEFAULT_KPOE_SOURCE_ORDER =\n 'apple,lyricsplus,musixmatch,spotify,musixmatch-word';\n\ninterface Syllable {\n text: string;\n part: boolean;\n timestamp: number;\n endtime: number;\n romanizedText?: string;\n}\n\ninterface LyricsLine {\n text: Syllable[];\n background: boolean;\n backgroundText: Syllable[];\n oppositeTurn: boolean;\n timestamp: number;\n endtime: number;\n isWordSynced?: boolean;\n alignment?: 'start' | 'end';\n songPart?: string;\n romanizedText?: string;\n translation?: string;\n}\n\ninterface SongMetadata {\n title: string;\n artist: string;\n album?: string;\n durationMs?: number;\n}\n\ninterface SongCatalogResult {\n title?: string;\n artist?: string;\n album?: string;\n durationMs?: number;\n id?: {\n appleMusic?: string;\n [key: string]: unknown;\n };\n isrc?: string;\n}\n\ninterface ParsedQueryMetadata {\n title?: string;\n artist?: string;\n album?: string;\n}\n\ninterface YouLyPlusLyricsResult {\n lines: LyricsLine[];\n source?: string;\n}\n\ninterface ResolvedMetadata {\n metadata?: SongMetadata;\n appleId?: string;\n appleSong?: any;\n catalogIsrc?: string;\n}\n\nexport class AmLyrics extends LitElement {\n static styles = css`\n /* ==========================================================================\n YOULYPLUS-INSPIRED STYLING - Design Tokens & Variables\n ========================================================================== */\n :host {\n --lyplus-lyrics-palette: var(\n --am-lyrics-highlight-color,\n var(--highlight-color, #ffffff)\n );\n --lyplus-text-primary: var(--lyplus-lyrics-palette);\n /* Use color-mix with the text color rather than just opacity so it adapts */\n --lyplus-text-secondary: color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent 45%\n );\n\n --lyplus-padding-base: 1em;\n --lyplus-padding-line: 10px;\n --lyplus-padding-gap: 0.3em;\n --lyplus-border-radius-base: 0.6em;\n --lyplus-gap-dot-size: 0.4em;\n --lyplus-gap-dot-margin: 0.08em;\n\n --lyplus-font-size-base: 25px;\n --lyplus-font-size-base-grow: 24.5;\n --lyplus-font-size-subtext: 0.6em;\n\n --lyplus-blur-amount: 0.07em;\n --lyplus-blur-amount-near: 0.035em;\n --lyplus-fade-gap-timing-function: ease-out;\n\n --lyrics-scroll-padding-top: 25%;\n\n display: block;\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,\n Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n background: transparent;\n height: 100%;\n overflow: hidden;\n font-weight: bold;\n color: var(--lyplus-text-primary);\n }\n\n /* ==========================================================================\n CONTAINER & SCROLL BEHAVIOR\n ========================================================================== */\n .lyrics-container {\n padding: 20px;\n padding-top: 80px;\n border-radius: 8px;\n background-color: transparent;\n width: 100%;\n height: 100%;\n max-height: 100vh;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n scrollbar-width: none;\n transform: translateZ(0);\n }\n\n .lyrics-container::-webkit-scrollbar {\n display: none;\n }\n\n /* Disable transitions during touch-scrolling for 1:1 feedback */\n .lyrics-container.touch-scrolling .lyrics-line,\n .lyrics-container.touch-scrolling .lyrics-plus-metadata {\n transition: none !important;\n }\n\n /* Apply smooth gliding transition for mouse-wheel scrolling */\n .lyrics-container.wheel-scrolling .lyrics-line {\n transition: transform 0.3s ease-out !important;\n }\n\n .lyrics-line.scroll-animate {\n transition: none !important; /* Fixed: prevent conflict with scroll animation */\n animation-name: lyrics-scroll;\n animation-duration: var(--scroll-duration, 400ms);\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n animation-fill-mode: forwards;\n }\n\n .lyrics-container.user-scrolling .lyrics-line {\n --lyrics-line-delay: 0ms !important;\n transition-delay: 0ms !important;\n }\n\n /* ==========================================================================\n LYRICS LINE BASE STYLES\n ========================================================================== */\n .lyrics-line {\n padding: var(--lyplus-padding-line);\n opacity: 0.8;\n color: var(--lyplus-text-secondary);\n font-size: var(--lyplus-font-size-base);\n cursor: pointer;\n transform-origin: left;\n transform: translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n will-change: transform, filter, opacity;\n content-visibility: auto;\n text-rendering: optimizeLegibility;\n overflow-wrap: break-word;\n mix-blend-mode: lighten;\n border-radius: var(--lyplus-border-radius-base);\n }\n\n .lyrics-line.scroll-animate {\n animation-name: lyrics-scroll;\n animation-duration: 400ms;\n animation-timing-function: cubic-bezier(0.41, 0, 0.12, 0.99);\n animation-fill-mode: both;\n animation-delay: var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-line:not(.scroll-animate) {\n animation: none;\n }\n\n /* --- Line Container & Vocal Containers --- */\n .lyrics-line-container {\n overflow-wrap: break-word;\n transform-origin: left;\n transform: scale3d(0.93, 0.93, 0.95);\n transition:\n transform 0.7s ease,\n background-color 0.7s,\n color 0.7s;\n }\n\n .lyrics-line.active .lyrics-line-container {\n transform: scale3d(1.001, 1.001, 1);\n will-change: transform;\n transition:\n transform 0.5s ease,\n background-color 0.18s,\n color 0.18s;\n }\n\n .main-vocal-container {\n transform-origin: 5% 50%;\n margin: 0;\n }\n\n .background-vocal-container {\n max-height: 0;\n padding-top: 0.2em;\n overflow: visible;\n opacity: 0;\n font-size: var(--lyplus-font-size-subtext);\n transition:\n max-height 0.3s,\n opacity 0.6s,\n padding 0.6s;\n margin: 0;\n }\n\n .lyrics-line.active .background-vocal-container {\n max-height: 4em;\n opacity: 1;\n transition:\n max-height 0.6s,\n opacity 0.6s,\n padding 0.6s;\n will-change: max-height, opacity, padding;\n }\n\n /* --- Line States & Modifiers --- */\n .lyrics-line.active {\n opacity: 1;\n color: var(--lyplus-text-primary);\n will-change: transform, opacity;\n }\n\n .lyrics-line.singer-right {\n text-align: end;\n }\n\n .lyrics-line.singer-right .lyrics-line-container,\n .lyrics-line.singer-right .main-vocal-container {\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text {\n direction: rtl;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .lyrics-line:hover {\n background: var(--hover-background-color, rgba(255, 255, 255, 0.13));\n }\n }\n\n /* --- Blur Effect for Inactive Lines --- */\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line:not(.active):not(.lyrics-gap) {\n filter: blur(var(--lyplus-blur-amount));\n }\n\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.post-active-line:not(.lyrics-gap):not(.active),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.next-active-line:not(.lyrics-gap):not(.active),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.lyrics-activest:not(.active):not(.lyrics-gap) {\n filter: blur(var(--lyplus-blur-amount-near));\n }\n\n /* Unblur all lines when user is scrolling */\n .lyrics-container.user-scrolling .lyrics-line {\n filter: none !important;\n opacity: 0.8 !important;\n }\n\n /* ==========================================================================\n WORD & SYLLABLE STYLES\n ========================================================================== */\n .lyrics-word:not(.allow-break) {\n display: inline-block;\n vertical-align: baseline;\n }\n\n .lyrics-word.allow-break {\n display: inline;\n }\n\n .lyrics-syllable-wrap {\n display: inline;\n }\n\n .lyrics-syllable-wrap:has(.lyrics-syllable.transliteration) {\n display: inline-flex;\n flex-direction: column;\n align-items: start;\n }\n\n .lyrics-syllable {\n display: inline-block;\n vertical-align: baseline;\n color: transparent;\n background-color: var(--lyplus-text-secondary);\n white-space: pre-wrap;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n /* --- Syllable States --- */\n .lyrics-syllable.finished {\n background-color: var(--lyplus-text-primary);\n transition: transform 1s ease !important;\n }\n\n .lyrics-syllable.finished:has(.char) {\n background-color: transparent;\n }\n\n .lyrics-line:not(.active) .lyrics-syllable.finished {\n transition: color 0.18s;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable {\n transform: translateY(0.001%) translateZ(1px);\n transition:\n transform 1s ease,\n background-color 0.5s,\n color 0.5s;\n will-change: transform, background;\n }\n\n /* --- Wipe Highlight Effect --- */\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.highlight:not(:has(.char)),\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight:not(:has(.char)) {\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight.rtl-text {\n direction: rtl;\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 0%,\n transparent 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 100%,\n transparent 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n right;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.highlight,\n .lyrics-word.growable .lyrics-syllable.cleanup .char {\n transform: translateY(-3.5%) translateZ(1px);\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.finished {\n background-image: none;\n }\n\n .lyrics-syllable.pre-highlight {\n animation-name: pre-wipe-universal;\n animation-duration: var(--pre-wipe-duration);\n animation-delay: var(--pre-wipe-delay);\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n }\n\n .lyrics-syllable.pre-highlight.rtl-text {\n animation-name: pre-wipe-universal-rtl;\n }\n\n .lyrics-syllable.transliteration {\n font-size: var(--lyplus-font-size-subtext);\n white-space: pre-wrap;\n pointer-events: none;\n user-select: none;\n }\n\n /* Syllable with chars: make syllable transparent, chars handle color */\n .lyrics-line .lyrics-syllable:has(span.char):not(.finished) {\n background-color: transparent;\n color: transparent;\n }\n\n .lyrics-syllable span.char {\n display: inline-block;\n background-color: var(--lyplus-text-secondary);\n white-space: break-spaces;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n .lyrics-syllable.finished span.char {\n transition: color 0.18s;\n background-color: var(--lyplus-text-primary);\n }\n\n /* Active char spans: structural only, wipe animation sets gradient */\n .lyrics-line.active .lyrics-syllable span.char {\n background-clip: text;\n -webkit-background-clip: text;\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n transform-origin: 50% 80%;\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n transition:\n transform 0.7s ease,\n color 0.18s;\n will-change: background, transform;\n }\n\n .lyrics-line.active .lyrics-syllable span.char.highlight {\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 0%,\n #0000 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n calc(100% + 0.25em) 0%;\n }\n\n .lyrics-line.active .lyrics-syllable.pre-highlight span.char {\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n -0.25em 0%;\n }\n\n /* ==========================================================================\n INSTRUMENTAL GAP STYLES\n ========================================================================== */\n .lyrics-gap {\n height: 0;\n padding: 0 var(--lyplus-padding-gap);\n overflow: hidden;\n opacity: 0;\n box-sizing: content-box;\n background-clip: unset;\n transition:\n padding 0.3s 0.5s,\n height 0.3s 0.5s,\n opacity 0.2s 0.5s,\n transform 0.3s var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-gap.active {\n height: 1.3em;\n padding: var(--lyplus-padding-gap);\n opacity: 1;\n overflow: visible;\n transition:\n padding 0.3s,\n height 0.3s,\n opacity 0.2s 0.3s,\n transform 0.3s;\n will-change: height, opacity, padding;\n }\n\n /* Exiting state: keep gap visible while dots animate out */\n .lyrics-gap.gap-exiting {\n height: 1.3em;\n padding: var(--lyplus-padding-gap);\n opacity: 1;\n overflow: visible;\n transition:\n padding 0.3s 0.5s,\n height 0.3s 0.5s,\n opacity 0.2s 0.5s,\n transform 0.3s;\n }\n\n .lyrics-gap .main-vocal-container {\n transform: translateY(-25%) scale(1) translateZ(0);\n }\n\n /* Jump animation plays during exit */\n .lyrics-gap.gap-exiting .main-vocal-container {\n animation: gap-ended 0.8s ease forwards;\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting) .main-vocal-container {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting)\n .main-vocal-container\n .lyrics-word {\n animation-play-state: paused;\n }\n\n .lyrics-gap.active .main-vocal-container .lyrics-word {\n animation: gap-loop 4s ease infinite alternate;\n will-change: transform;\n }\n\n .lyrics-gap .lyrics-syllable {\n display: inline-block;\n width: var(--lyplus-gap-dot-size);\n height: var(--lyplus-gap-dot-size);\n margin: 0 var(--lyplus-gap-dot-margin);\n overflow: hidden;\n border-radius: 1em;\n background-color: var(--lyplus-text-secondary);\n background-clip: unset;\n }\n\n .lyrics-gap.active .lyrics-syllable.highlight,\n .lyrics-gap.active .lyrics-syllable.finished,\n .lyrics-gap.gap-exiting .lyrics-syllable,\n .lyrics-gap:not(.active).post-active-line .lyrics-syllable,\n .lyrics-gap:not(.active).lyrics-activest .lyrics-syllable {\n background-color: var(--lyplus-text-primary);\n animation: none !important;\n opacity: 1;\n }\n\n .lyrics-gap.active .lyrics-syllable.finished {\n animation: none !important;\n }\n\n /* ==========================================================================\n METADATA & FOOTER STYLES\n ========================================================================== */\n .lyrics-plus-metadata {\n display: block;\n position: relative;\n box-sizing: border-box;\n font-weight: normal;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.6s cubic-bezier(0.23, 1, 0.32, 1)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n }\n\n .lyrics-plus-empty {\n display: block;\n height: 100vh;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n }\n\n .lyrics-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n text-align: left;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.5);\n padding: 10px 0;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n margin-top: 10px;\n font-weight: normal;\n }\n\n .lyrics-footer p {\n margin: 5px 0;\n }\n\n .lyrics-footer a {\n color: rgba(255, 255, 255, 0.7);\n text-decoration: none;\n }\n\n .lyrics-footer a:hover {\n text-decoration: underline;\n }\n\n .footer-content {\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n gap: 8px;\n }\n\n .footer-controls {\n display: flex;\n align-items: center;\n }\n\n /* ==========================================================================\n HEADER & CONTROLS\n ========================================================================== */\n .lyrics-header {\n display: flex;\n padding: 10px 0;\n margin-bottom: 10px;\n gap: 10px;\n justify-content: space-between;\n align-items: center;\n }\n\n .lyrics-header .download-button {\n background: none;\n border: none;\n cursor: pointer;\n color: #aaa;\n padding: 0;\n margin-left: 10px;\n vertical-align: middle;\n display: inline-flex;\n align-items: center;\n }\n\n .lyrics-header .download-button:hover {\n color: rgba(255, 255, 255, 0.9);\n }\n\n .header-controls {\n display: flex;\n gap: 8px;\n }\n\n .download-controls {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .control-button {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n padding: 2px 8px;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.6);\n cursor: pointer;\n transition: all 0.2s;\n font-weight: normal;\n }\n\n .control-button:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .control-button.active {\n background-color: var(--lyplus-text-primary);\n border-color: var(--lyplus-text-primary);\n color: #000;\n }\n\n .format-select {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.8em;\n margin-left: 10px;\n padding: 2px 5px;\n cursor: pointer;\n font-weight: normal;\n }\n\n .format-select:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .format-select option {\n background: #1a1a1a;\n color: #fff;\n }\n\n /* ==========================================================================\n TRANSLATION & ROMANIZATION\n ========================================================================== */\n .lyrics-translation-container,\n .lyrics-romanization-container {\n padding-top: 0.2em;\n opacity: 0.8;\n font-size: var(--lyplus-font-size-subtext);\n overflow-wrap: break-word;\n pointer-events: none;\n user-select: none;\n transition:\n opacity 0.3s ease,\n color 0.3s;\n font-weight: normal;\n }\n\n .lyrics-romanization-container {\n direction: ltr !important;\n }\n\n .lyrics-romanization-container.rtl-text {\n direction: rtl !important;\n }\n\n .lyrics-romanization-container .lyrics-syllable {\n white-space: pre-wrap;\n }\n\n .lyrics-translation-container {\n opacity: 0.5;\n }\n\n .main-line-wrapper.small {\n font-size: 0.5em;\n opacity: 0.8;\n display: block;\n margin-bottom: 0px;\n }\n\n .translation-line {\n font-size: 1em;\n font-weight: bold;\n display: block;\n margin-top: 0px;\n line-height: 1.1;\n }\n\n .romanized-line {\n font-size: 0.5em;\n color: rgba(255, 255, 255, 0.5);\n display: block;\n margin-top: 2px;\n font-weight: normal;\n }\n\n /* ==========================================================================\n SKELETON LOADING\n ========================================================================== */\n @keyframes skeleton-loading {\n 0% {\n background-color: rgba(255, 255, 255, 0.1);\n }\n 100% {\n background-color: rgba(255, 255, 255, 0.2);\n }\n }\n\n .skeleton-line {\n height: 2.5em;\n margin: 20px 0;\n border-radius: 8px;\n animation: skeleton-loading 1s linear infinite alternate;\n opacity: 0.7;\n width: 60%;\n }\n\n .skeleton-line:nth-child(even) {\n width: 80%;\n }\n .skeleton-line:nth-child(3n) {\n width: 50%;\n }\n .skeleton-line:nth-child(5n) {\n width: 70%;\n }\n\n .no-lyrics {\n color: rgba(255, 255, 255, 0.5);\n font-size: 1.2em;\n text-align: center;\n padding: 2em;\n font-weight: normal;\n }\n\n /* ==========================================================================\n KEYFRAME ANIMATIONS\n ========================================================================== */\n\n /* Wipe animation for syllables */\n @keyframes wipe {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes start-wipe {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes wipe-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n calc(100% + 0.36em);\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes start-wipe-rtl {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n calc(100% + 0.5em);\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-universal {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.75em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n }\n\n @keyframes pre-wipe-universal-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n right;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-char {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n }\n\n /* Gap dot animations */\n @keyframes gap-loop {\n from {\n transform: scale(1.15);\n }\n to {\n transform: scale(0.85);\n }\n }\n\n @keyframes gap-ended {\n 0% {\n transform: translateY(-25%) scale(1) translateZ(0);\n }\n 35% {\n transform: translateY(-25%) scale(1.2) translateZ(0);\n }\n 100% {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n }\n\n @keyframes fade-gap {\n from {\n background-color: var(--lyplus-text-secondary);\n }\n to {\n background-color: var(--lyplus-text-primary);\n }\n }\n\n /* Scroll animation */\n @keyframes lyrics-scroll {\n from {\n transform: translateY(var(--scroll-delta)) translateZ(1px);\n }\n to {\n transform: translateY(0) translateZ(1px);\n }\n }\n\n /* Character grow animation - exact copy from YouLyPlus */\n @keyframes grow-dynamic {\n 0% {\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n 25%,\n 30% {\n transform: matrix3d(\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n calc(\n var(--char-offset-x, 0) *\n calc(var(--lyplus-font-size-base-grow) / 25)\n ),\n var(--translate-y-peak, -2),\n 0,\n 1\n );\n filter: drop-shadow(\n 0 0 0.1em\n color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent calc((1 - var(--shadow-intensity, 1)) * 100%)\n )\n );\n }\n 100% {\n transform: translateY(-3.5%) translateZ(1px);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n }\n\n @keyframes grow-static {\n 0%,\n 100% {\n transform: scale3d(1.01, 1.01, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%);\n }\n 30%,\n 40% {\n transform: scale3d(1.1, 1.1, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0.3em\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 50%);\n }\n }\n\n /* Fade in animation */\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 0.7;\n transform: translateY(0);\n }\n }\n\n /* Legacy support */\n .opposite-turn {\n text-align: right;\n }\n\n .singer-right {\n text-align: right;\n justify-content: flex-end;\n }\n\n .singer-left {\n text-align: left;\n justify-content: flex-start;\n }\n\n /* Legacy progress-text for backward compatibility */\n .progress-text {\n position: relative;\n display: inline-block;\n background: linear-gradient(\n to right,\n var(--lyplus-text-primary) 0%,\n var(--lyplus-text-primary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) 100%\n );\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: var(--lyplus-text-secondary);\n transform: translate3d(0, 0, 0);\n will-change: background-size;\n }\n\n .progress-text::before {\n display: none;\n }\n\n .active-line {\n font-weight: bold;\n }\n\n .background-text {\n display: block;\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n font-style: normal;\n margin: 0;\n flex-shrink: 0;\n line-height: 1.1;\n }\n\n .background-text.before {\n order: -1;\n }\n\n .background-text.after {\n order: 1;\n }\n\n .instrumental-line {\n display: inline-flex;\n align-items: baseline;\n gap: 8px;\n color: var(--lyplus-text-secondary);\n font-size: 0.9em;\n padding: 4px 10px;\n animation: fadeInUp 220ms ease;\n font-weight: normal;\n }\n\n .instrumental-duration {\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n }\n `;\n\n @property({ type: String })\n query?: string;\n\n @property({ type: String })\n musicId?: string;\n\n @property({ type: String })\n isrc?: string;\n\n @property({ type: String, attribute: 'song-title' })\n songTitle?: string;\n\n @state()\n private downloadFormat: 'auto' | 'lrc' | 'ttml' = 'auto';\n\n @property({ type: String, attribute: 'song-artist' })\n songArtist?: string;\n\n @property({ type: String, attribute: 'song-album' })\n songAlbum?: string;\n\n @property({ type: Number, attribute: 'song-duration' })\n songDurationMs?: number;\n\n @property({ type: String, attribute: 'highlight-color' })\n highlightColor = '#ffffff';\n\n @property({ type: String, attribute: 'hover-background-color' })\n hoverBackgroundColor = 'rgba(255, 255, 255, 0.13)';\n\n @property({ type: String, attribute: 'font-family' })\n fontFamily?: string;\n\n @property({ type: Boolean })\n autoScroll = true;\n\n @property({ type: Boolean })\n interpolate = true;\n\n @state()\n private showRomanization = false;\n\n @state()\n private showTranslation = false;\n\n private async toggleRomanization() {\n this.showRomanization = !this.showRomanization;\n await this.applyRomanization();\n }\n\n private async applyRomanization() {\n if (this.showRomanization && this.lyrics) {\n const needsRomanization = this.lyrics.some(\n l =>\n !l.romanizedText && (!l.text || !l.text.some(s => s.romanizedText)),\n );\n\n if (needsRomanization) {\n this.isLoading = true;\n try {\n const romanizedLines = await GoogleService.romanize(this.lyrics);\n this.lyrics = romanizedLines;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Romanization failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n private async toggleTranslation() {\n this.showTranslation = !this.showTranslation;\n await this.applyTranslation();\n }\n\n private async applyTranslation() {\n if (this.showTranslation && this.lyrics) {\n const needsTranslation = this.lyrics.some(l => !l.translation);\n if (needsTranslation) {\n this.isLoading = true;\n try {\n // Prepare batch: extract text from all lines\n const textToTranslate = this.lyrics.map(line => {\n if (line.translation) return '';\n return line.text.map(s => s.text).join('');\n });\n\n // If all are empty, skip\n if (textToTranslate.every(t => !t)) {\n this.isLoading = false;\n return;\n }\n\n const result = await GoogleService.translate(textToTranslate, 'en');\n const translations = Array.isArray(result) ? result : [result];\n\n const newLyrics = this.lyrics.map((line, index) => {\n if (line.translation) return line;\n return {\n ...line,\n translation: translations[index] || undefined,\n };\n });\n\n this.lyrics = newLyrics;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Translation failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n @property({ type: Number })\n duration?: number;\n\n private _currentTime = 0;\n\n @property({ type: Number, attribute: 'currenttime', hasChanged: () => false })\n set currentTime(value: number) {\n const oldValue = this._currentTime;\n this._currentTime = value;\n if (oldValue !== value && this.lyrics) {\n this._onTimeChanged(oldValue, value);\n }\n }\n\n get currentTime(): number {\n return this._currentTime;\n }\n\n @state()\n private isLoading = false;\n\n @state()\n private lyrics?: LyricsLine[];\n\n @state()\n private activeLineIndices: number[] = [];\n\n @state()\n private activeMainWordIndices: Map<number, number> = new Map();\n\n @state()\n private activeBackgroundWordIndices: Map<number, number> = new Map();\n\n @state()\n private mainWordProgress: Map<number, number> = new Map();\n\n @state()\n private backgroundWordProgress: Map<number, number> = new Map();\n\n @state()\n private lyricsSource: string | null = null;\n\n private animationFrameId?: number;\n\n private mainWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n private backgroundWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n @query('.lyrics-container')\n private lyricsContainer?: HTMLElement;\n\n private lastInstrumentalIndex: number | null = null;\n\n private userScrollTimeoutId?: number;\n\n @state()\n private isUserScrolling = false;\n\n private isProgrammaticScroll = false;\n\n private isClickSeeking = false;\n\n private clickSeekTimeout?: ReturnType<typeof setTimeout>;\n\n // Cached DOM elements for animation updates\n private cachedLyricsLines: HTMLElement[] = [];\n\n // Active line tracking\n private activeLineIds: Set<string> = new Set();\n\n private currentPrimaryActiveLine: HTMLElement | null = null;\n\n private lastPrimaryActiveLine: HTMLElement | null = null;\n\n // Scroll animation state\n private scrollAnimationState: {\n isAnimating: boolean;\n pendingUpdate: number | null;\n } | null = null;\n\n private currentScrollOffset = 0;\n\n private animatingLines: HTMLElement[] = [];\n\n private scrollUnlockTimeout?: ReturnType<typeof setTimeout>;\n\n private scrollAnimationTimeout?: ReturnType<typeof setTimeout>;\n\n // Syllable animation tracking\n private lastActiveIndex = 0;\n\n private visibleLineIds: Set<string> = new Set();\n\n connectedCallback() {\n super.connectedCallback();\n this.fetchLyrics();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n }\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n }\n }\n\n private async fetchLyrics() {\n this.isLoading = true;\n this.lyrics = undefined;\n this.lyricsSource = null;\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n\n const isMusicIdOnlyRequest =\n Boolean(this.musicId) &&\n !this.songTitle &&\n !this.songArtist &&\n !this.query;\n\n if (resolvedMetadata?.metadata && !isMusicIdOnlyRequest) {\n const youLyResult = await AmLyrics.fetchLyricsFromYouLyPlus(\n resolvedMetadata.metadata,\n );\n\n if (youLyResult && youLyResult.lines.length > 0) {\n this.lyrics = youLyResult.lines;\n this.lyricsSource = youLyResult.source ?? 'LyricsPlus (KPoe)';\n await this.onLyricsLoaded();\n return;\n }\n }\n\n this.lyrics = undefined;\n this.lyricsSource = null;\n } finally {\n this.isLoading = false;\n }\n }\n\n private async onLyricsLoaded() {\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n\n if (this.lyricsContainer) {\n this.isProgrammaticScroll = true;\n this.lyricsContainer.scrollTop = 0;\n window.setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n }\n\n await this.autoProcessLyrics();\n }\n\n private async autoProcessLyrics() {\n if (this.showRomanization) {\n await this.applyRomanization();\n }\n if (this.showTranslation) {\n await this.applyTranslation();\n }\n }\n\n private async resolveSongMetadata(): Promise<ResolvedMetadata> {\n const metadata: SongMetadata = {\n title: this.songTitle?.trim() ?? '',\n artist: this.songArtist?.trim() ?? '',\n album: this.songAlbum?.trim() || undefined,\n durationMs: undefined,\n };\n\n if (typeof this.songDurationMs === 'number' && this.songDurationMs > 0) {\n metadata.durationMs = this.songDurationMs;\n } else if (typeof this.duration === 'number' && this.duration > 0) {\n metadata.durationMs = this.duration;\n }\n\n const appleSong: any = null;\n let appleId = this.musicId;\n let catalogIsrc: string | undefined;\n\n if (\n this.query &&\n (!metadata.title || !metadata.artist || !metadata.album)\n ) {\n const parsed = AmLyrics.parseQueryMetadata(this.query);\n if (parsed) {\n if (!metadata.title && parsed.title) {\n metadata.title = parsed.title;\n }\n if (!metadata.artist && parsed.artist) {\n metadata.artist = parsed.artist;\n }\n if (!metadata.album && parsed.album) {\n metadata.album = parsed.album;\n }\n }\n }\n\n let catalogResult: SongCatalogResult | null = null;\n\n if (this.query && (!metadata.title || !metadata.artist)) {\n catalogResult = await AmLyrics.searchLyricsPlusCatalog(this.query);\n\n if (catalogResult) {\n if (!metadata.title && catalogResult.title) {\n metadata.title = catalogResult.title;\n }\n if (!metadata.artist && catalogResult.artist) {\n metadata.artist = catalogResult.artist;\n }\n if (!metadata.album && catalogResult.album) {\n metadata.album = catalogResult.album;\n }\n if (\n metadata.durationMs == null &&\n typeof catalogResult.durationMs === 'number' &&\n catalogResult.durationMs > 0\n ) {\n metadata.durationMs = catalogResult.durationMs;\n }\n\n if (!appleId && catalogResult.id?.appleMusic) {\n appleId = catalogResult.id.appleMusic;\n }\n\n if (!catalogIsrc && catalogResult.isrc) {\n catalogIsrc = catalogResult.isrc;\n }\n }\n }\n\n const trimmedTitle = metadata.title?.trim() ?? '';\n const trimmedArtist = metadata.artist?.trim() ?? '';\n const trimmedAlbum = metadata.album?.trim();\n const sanitizedDuration =\n typeof metadata.durationMs === 'number' &&\n Number.isFinite(metadata.durationMs) &&\n metadata.durationMs > 0\n ? Math.round(metadata.durationMs)\n : undefined;\n\n const finalMetadata =\n trimmedTitle && trimmedArtist\n ? {\n title: trimmedTitle,\n artist: trimmedArtist,\n album: trimmedAlbum || undefined,\n durationMs: sanitizedDuration,\n }\n : undefined;\n\n return {\n metadata: finalMetadata,\n appleId,\n appleSong,\n catalogIsrc,\n };\n }\n\n private static parseQueryMetadata(\n rawQuery: string,\n ): ParsedQueryMetadata | null {\n const trimmed = rawQuery?.trim();\n if (!trimmed) return null;\n\n const result: ParsedQueryMetadata = {};\n\n const hyphenSplit = trimmed.split(/\\s[-–—]\\s/);\n if (hyphenSplit.length >= 2) {\n const [rawTitle, ...rest] = hyphenSplit;\n const rawArtist = rest.join(' - ');\n const titleCandidate = rawTitle.trim();\n const artistCandidate = rawArtist.trim();\n if (titleCandidate && artistCandidate) {\n result.title = titleCandidate;\n result.artist = artistCandidate;\n return result;\n }\n }\n\n const bySplit = trimmed.split(/\\s+[bB]y\\s+/);\n if (bySplit.length === 2) {\n const [maybeTitle, maybeArtist] = bySplit.map(part => part.trim());\n if (maybeTitle && maybeArtist) {\n result.title = maybeTitle;\n result.artist = maybeArtist;\n return result;\n }\n }\n\n return null;\n }\n\n private static async searchLyricsPlusCatalog(\n searchTerm: string,\n ): Promise<SongCatalogResult | null> {\n const trimmedQuery = searchTerm?.trim();\n if (!trimmedQuery) return null;\n\n for (const base of KPOE_SERVERS) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v1/songlist/search?q=${encodeURIComponent(\n trimmedQuery,\n )}`;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetch(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n const payload = await response.json();\n let results: SongCatalogResult[] = [];\n\n const typedPayload = payload as {\n results?: SongCatalogResult[];\n } | null;\n\n if (Array.isArray(typedPayload?.results)) {\n results = typedPayload.results as SongCatalogResult[];\n } else if (Array.isArray(payload)) {\n results = payload as SongCatalogResult[];\n }\n\n if (results.length > 0) {\n const primary = results.find(\n (item: SongCatalogResult) => item?.id && item.id.appleMusic,\n );\n return (primary ?? results[0]) as SongCatalogResult;\n }\n }\n } catch (error) {\n // Ignore and try next server\n }\n }\n\n return null;\n }\n\n private static async fetchLyricsFromYouLyPlus(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) {\n return null;\n }\n\n const params = new URLSearchParams({ title, artist });\n\n if (metadata.album) {\n params.append('album', metadata.album);\n }\n\n if (metadata.durationMs && metadata.durationMs > 0) {\n params.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n params.append('source', DEFAULT_KPOE_SOURCE_ORDER);\n\n let fallbackResult: YouLyPlusLyricsResult | null = null;\n\n for (const base of KPOE_SERVERS) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v2/lyrics/get?${params.toString()}`;\n\n let payload: any = null;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetch(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n payload = await response.json();\n }\n } catch (error) {\n payload = null;\n }\n\n if (payload) {\n const lines = AmLyrics.convertKPoeLyrics(payload);\n if (lines && lines.length > 0) {\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n\n const result = { lines, source: sourceLabel };\n\n // If source is Apple, return immediately (best quality)\n if (sourceLabel.toLowerCase() === 'apple') {\n return result;\n }\n\n // Otherwise, store as fallback if we don't have one yet\n if (!fallbackResult) {\n fallbackResult = result;\n }\n }\n }\n }\n\n return fallbackResult;\n }\n\n private static convertKPoeLyrics(payload: any): LyricsLine[] | null {\n if (!payload) {\n return null;\n }\n\n let rawLyrics: any[] | null = null;\n if (Array.isArray(payload?.lyrics)) {\n rawLyrics = payload.lyrics;\n } else if (Array.isArray(payload?.data?.lyrics)) {\n rawLyrics = payload.data.lyrics;\n } else if (Array.isArray(payload?.data)) {\n rawLyrics = payload.data;\n }\n\n if (!rawLyrics || rawLyrics.length === 0) {\n return null;\n }\n\n const sanitizedEntries = rawLyrics.filter((item: any) => Boolean(item));\n const lines: LyricsLine[] = [];\n\n const isLineType = payload.type === 'Line';\n\n // Convert metadata.agents to alignment map\n const agents = payload.metadata?.agents ?? {};\n const agentEntries = Object.entries(agents);\n const singerAlignmentMap: Record<string, 'start' | 'end'> = {};\n\n if (agentEntries.length > 0) {\n agentEntries.sort((a, b) => a[0].localeCompare(b[0]));\n\n const personAgents = agentEntries.filter(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, agentData]: [string, any]) => agentData.type === 'person',\n );\n const personIndexMap = new Map();\n personAgents.forEach(([agentKey], personIndex) => {\n personIndexMap.set(agentKey, personIndex);\n });\n\n agentEntries.forEach(([agentKey, agentData]: [string, any]) => {\n if (agentData.type === 'group') {\n singerAlignmentMap[agentKey] = 'start';\n } else if (agentData.type === 'other') {\n singerAlignmentMap[agentKey] = 'end';\n } else if (agentData.type === 'person') {\n const personIndex = personIndexMap.get(agentKey);\n if (personIndex !== undefined) {\n singerAlignmentMap[agentKey] =\n personIndex % 2 === 0 ? 'start' : 'end';\n }\n }\n });\n }\n\n for (const entry of sanitizedEntries) {\n const start = Number(entry.time);\n const duration = Number(entry.duration);\n\n // Determine alignment\n let alignment: 'start' | 'end' | undefined;\n const singerId = entry.element?.singer;\n if (singerId && singerAlignmentMap[singerId]) {\n alignment = singerAlignmentMap[singerId];\n }\n const lineText = typeof entry.text === 'string' ? entry.text : '';\n const lineStart = AmLyrics.toMilliseconds(entry.time);\n const lineDuration = AmLyrics.toMilliseconds(entry.duration);\n const explicitEnd = AmLyrics.toMilliseconds(entry.endTime);\n const lineEnd = explicitEnd || lineStart + (lineDuration || 0);\n\n const syllabus = Array.isArray(entry.syllabus)\n ? entry.syllabus.filter((s: any) => Boolean(s))\n : [];\n const mainSyllables: Syllable[] = [];\n const backgroundSyllables: Syllable[] = [];\n\n if (!isLineType && syllabus.length > 0) {\n for (const syl of syllabus) {\n const sylStart = AmLyrics.toMilliseconds(syl.time, lineStart);\n const sylDuration = AmLyrics.toMilliseconds(syl.duration);\n const sylEnd = sylDuration > 0 ? sylStart + sylDuration : lineEnd;\n const syllable: Syllable = {\n text: typeof syl.text === 'string' ? syl.text : '',\n part: Boolean(syl.part),\n timestamp: sylStart,\n endtime: sylEnd,\n };\n\n if (syl.isBackground) {\n backgroundSyllables.push(syllable);\n } else {\n mainSyllables.push(syllable);\n }\n }\n }\n\n if (mainSyllables.length === 0 && lineText) {\n mainSyllables.push({\n text: lineText,\n part: false,\n timestamp: lineStart,\n endtime: lineEnd || lineStart,\n });\n }\n\n const hasWordSync =\n mainSyllables.length > 0 || backgroundSyllables.length > 0;\n\n const { transliteration } = entry;\n let romanizedTextFromPayload: string | undefined;\n\n if (transliteration) {\n romanizedTextFromPayload = transliteration.text;\n // If syllabus data matches, map it to main syllables\n if (\n Array.isArray(transliteration.syllabus) &&\n transliteration.syllabus.length === mainSyllables.length\n ) {\n transliteration.syllabus.forEach((s: any, i: number) => {\n if (mainSyllables[i]) {\n mainSyllables[i].romanizedText = s.text;\n }\n });\n }\n }\n\n const lineResult: LyricsLine = {\n text: mainSyllables,\n background: backgroundSyllables.length > 0,\n backgroundText: backgroundSyllables,\n oppositeTurn: Array.isArray(entry.element)\n ? entry.element.includes('opposite') ||\n entry.element.includes('right')\n : false,\n timestamp: lineStart,\n endtime: start + duration,\n isWordSynced: isLineType ? false : hasWordSync,\n alignment,\n songPart: entry.element?.songPart,\n romanizedText: romanizedTextFromPayload,\n };\n\n lines.push(lineResult);\n }\n\n return lines;\n }\n\n private static toMilliseconds(value: unknown, fallback = 0): number {\n const num = Number(value);\n if (!Number.isFinite(num) || Number.isNaN(num)) {\n return fallback;\n }\n\n if (!Number.isInteger(num)) {\n return Math.round(num * 1000);\n }\n\n return Math.max(0, Math.round(num));\n }\n\n firstUpdated() {\n // Set up scroll event listener for user scroll detection\n // Use wheel/touchmove which are guaranteed to be user initiated,\n // unlike 'scroll' which fires for both user and programmatic/inertia\n if (this.lyricsContainer) {\n this.lyricsContainer.addEventListener(\n 'wheel',\n this.handleUserScroll.bind(this),\n { passive: true },\n );\n this.lyricsContainer.addEventListener(\n 'touchmove',\n this.handleUserScroll.bind(this),\n { passive: true },\n );\n }\n }\n\n /**\n * Handle currentTime changes imperatively, bypassing Lit's render cycle.\n * This prevents the template from re-rendering on every frame, which would\n * reset imperative animation classes (highlight, finished, etc.) set by\n * updateSyllablesForLine.\n */\n private _onTimeChanged(oldTime: number, newTime: number): void {\n const timeDiff = Math.abs(newTime - oldTime);\n\n const newActiveLines = this.findActiveLineIndices(newTime);\n const oldActiveLines = this.activeLineIndices;\n\n // Reset animation if active lines change or if we skip time.\n // A threshold of 0.5s (500ms) is used to detect a \"skip\".\n const linesChanged = !AmLyrics.arraysEqual(newActiveLines, oldActiveLines);\n\n if (linesChanged || timeDiff > 0.5) {\n // Reset syllables from lines that are no longer active\n if (this.lyricsContainer) {\n for (const lineIndex of oldActiveLines) {\n if (!newActiveLines.includes(lineIndex)) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n AmLyrics.resetSyllables(lineElement);\n }\n }\n }\n }\n this.startAnimationFromTime(newTime);\n }\n\n // YouLyPlus-style syllable animation updates\n if (this.lyricsContainer) {\n // Update syllables in active lines\n for (const lineIndex of this.activeLineIndices) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n AmLyrics.updateSyllablesForLine(lineElement, newTime);\n }\n }\n\n // Also update syllables in active gap lines (breathing dots)\n const activeGaps =\n this.lyricsContainer.querySelectorAll('.lyrics-gap.active');\n activeGaps.forEach(gapLine => {\n AmLyrics.updateSyllablesForLine(gapLine as HTMLElement, newTime);\n });\n\n // Imperatively manage gap active state (template doesn't re-render on time changes)\n const allGaps = this.lyricsContainer.querySelectorAll('.lyrics-gap');\n allGaps.forEach(gap => {\n const gapStartTime = parseFloat(\n gap.getAttribute('data-start-time') || '0',\n );\n const gapEndTime = parseFloat(gap.getAttribute('data-end-time') || '0');\n const shouldBeActive = newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n // Start exit animation early so it completes before the next lyric\n const exitLeadMs = 600;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && !isActive && !isExiting) {\n // Entering gap: remove any leftover exit state, add active\n gap.classList.remove('gap-exiting');\n gap.classList.add('active');\n } else if (shouldStartExiting) {\n // Exiting gap: keep visible while dots animate out\n gap.classList.add('gap-exiting');\n gap.classList.remove('active');\n // After exit animation completes, remove gap-exiting to collapse\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, 800);\n } else if (isActive && !shouldBeActive) {\n // NEW: Immediate cleanup if we seeked out of valid range\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n // NEW: Cleanup exiting state if we seeked backwards before exit window\n gap.classList.remove('gap-exiting');\n }\n });\n\n // Track instrumental gap state\n const currentGap = this.findInstrumentalGapAt(newTime);\n if (currentGap) {\n this.lastInstrumentalIndex = currentGap.insertBeforeIndex;\n } else if (this.lastInstrumentalIndex !== null) {\n this.lastInstrumentalIndex = null;\n }\n\n // Update position classes for YouLyPlus blur/opacity effect\n if (this.activeLineIndices.length > 0) {\n const primaryLineIndex = this.activeLineIndices[0];\n const primaryLine = this.lyricsContainer.querySelector(\n `#lyrics-line-${primaryLineIndex}`,\n ) as HTMLElement;\n\n if (primaryLine && primaryLine !== this.currentPrimaryActiveLine) {\n this.lastPrimaryActiveLine = this.currentPrimaryActiveLine;\n this.currentPrimaryActiveLine = primaryLine;\n this.updatePositionClasses(primaryLine);\n }\n }\n\n // Pre-scroll: scroll to upcoming line ~0.5s before it starts\n // This provides the \"anticipatory scroll\" requested by the user.\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking &&\n this.lyrics\n ) {\n const preScrollLeadMs = 0.5; // 0.5s lead time (adjusted from 1.5s)\n\n // Condition: ONLY pre-scroll if no other lyric is currently playing.\n // If a lyric is playing, we must wait for it to finish (handled by updated()).\n if (this.activeLineIndices.length === 0) {\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const timeUntilStart = line.timestamp - newTime;\n if (timeUntilStart > 0 && timeUntilStart <= preScrollLeadMs) {\n const nextLineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${i}`,\n ) as HTMLElement;\n // Only trigger if we aren't already targeting this line\n if (nextLineEl && nextLineEl !== this.currentPrimaryActiveLine) {\n // We don't set currentPrimaryActiveLine here to avoid triggering\n // styles, just the YouLy scroll.\n this.scrollToActiveLineYouLy(nextLineEl);\n }\n break;\n }\n }\n }\n }\n }\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('lyrics')) {\n // Recalculate timing data for accurate animations whenever lyrics change\n this._updateCharTimingData();\n }\n\n // Handle duration reset (-1 stops playback and resets currentTime to 0)\n if (changedProperties.has('duration') && this.duration === -1) {\n this.currentTime = 0;\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.isUserScrolling = false;\n\n // Cancel any running animations\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n // Clear user scroll timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n // Scroll to top\n if (this.lyricsContainer) {\n this.lyricsContainer.scrollTop = 0;\n }\n\n return; // Exit early, don't process other changes\n }\n\n if (\n (changedProperties.has('query') ||\n changedProperties.has('musicId') ||\n changedProperties.has('isrc') ||\n changedProperties.has('songTitle') ||\n changedProperties.has('songArtist') ||\n changedProperties.has('songAlbum') ||\n changedProperties.has('songDurationMs')) &&\n !changedProperties.has('currentTime')\n ) {\n this.fetchLyrics();\n }\n\n if (changedProperties.has('currentTime') && this.lyrics) {\n // currentTime changes are now handled by the custom setter (_onTimeChanged)\n // This block intentionally left empty — only here for backwards compat with\n // any subclasses that might check changedProperties\n }\n\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking &&\n changedProperties.has('activeLineIndices') &&\n this.activeLineIndices.length > 0\n ) {\n // Logic for concurrent lines:\n // If the new primary line was ALREADY active (e.g. part of an overlap),\n // don't scroll. We only want to scroll when we move to a fresh line/block.\n const oldActiveIndices = changedProperties.get(\n 'activeLineIndices',\n ) as number[];\n const firstActiveIndex = this.activeLineIndices[0]; // Assuming sorted\n\n const wasAlreadyActive =\n oldActiveIndices && oldActiveIndices.includes(firstActiveIndex);\n\n // Use YouLyPlus-style scroll if we have a current primary line\n if (this.currentPrimaryActiveLine) {\n if (!wasAlreadyActive) {\n this.scrollToActiveLineYouLy(this.currentPrimaryActiveLine);\n } else {\n // Concurrent line already active, skipping scroll\n }\n } else {\n this.scrollToActiveLine();\n }\n }\n }\n\n private _textWidthCanvas: HTMLCanvasElement | undefined;\n\n private _textWidthCtx: CanvasRenderingContext2D | null | undefined;\n\n private _getTextWidth(text: string, font: string): number {\n if (!this._textWidthCanvas) {\n this._textWidthCanvas = document.createElement('canvas');\n this._textWidthCtx = this._textWidthCanvas.getContext('2d', {\n willReadFrequently: true,\n });\n }\n if (this._textWidthCtx) {\n this._textWidthCtx.font = font;\n return this._textWidthCtx.measureText(text).width;\n }\n return 0;\n }\n\n private _updateCharTimingData() {\n if (!this.shadowRoot) return;\n\n // Get the computed font from the first syllable to ensure accuracy\n const referenceSyllable = this.shadowRoot.querySelector('.lyrics-syllable');\n if (!referenceSyllable) return;\n\n const computedStyle = getComputedStyle(referenceSyllable);\n const { font } = computedStyle; // Full font string\n const fontSize = parseFloat(computedStyle.fontSize);\n\n const growableWords = this.shadowRoot.querySelectorAll(\n '.lyrics-word.growable',\n );\n if (!growableWords) return;\n\n growableWords.forEach((wordSpan: any) => {\n const syllableWraps = wordSpan.querySelectorAll('.lyrics-syllable-wrap');\n\n // Flatten syllables\n const syllables: HTMLElement[] = [];\n syllableWraps.forEach((wrap: HTMLElement) => {\n const syl = wrap.querySelector('.lyrics-syllable');\n if (syl) syllables.push(syl as HTMLElement);\n });\n\n syllables.forEach(sylSpan => {\n const charSpans = sylSpan.querySelectorAll('.char');\n if (charSpans.length === 0) return;\n\n // Logic from YouLyPlus renderCharWipes:\n // Use textContent from spans to ensure we measure what is rendered\n const chars = Array.from(charSpans).map(span => span.textContent || '');\n const charWidths = chars.map(c => this._getTextWidth(c, font));\n const totalSyllableWidth = charWidths.reduce((a, b) => a + b, 0);\n\n const duration = parseFloat(sylSpan.dataset.duration || '0');\n const velocityPxPerMs =\n duration > 0 ? totalSyllableWidth / duration : 0;\n\n // Gradient width in pixels = 0.375 * fontSize\n // This matches YouLyPlus visual gradient size\n const gradientWidthPx = 0.375 * fontSize;\n const gradientDurationMs =\n velocityPxPerMs > 0 ? gradientWidthPx / velocityPxPerMs : 100;\n\n let cumulativeCharWidth = 0;\n\n charSpans.forEach((spanArg: any, i: number) => {\n const charWidth = charWidths[i];\n const span = spanArg;\n\n if (totalSyllableWidth > 0) {\n const startPercent = cumulativeCharWidth / totalSyllableWidth;\n const durationPercent = charWidth / totalSyllableWidth;\n\n span.dataset.wipeStart = startPercent.toFixed(4);\n span.dataset.wipeDuration = durationPercent.toFixed(4);\n\n // The critical missing piece:\n span.dataset.preWipeArrival = (duration * startPercent).toFixed(2);\n span.dataset.preWipeDuration = gradientDurationMs.toFixed(2);\n }\n\n cumulativeCharWidth += charWidth;\n });\n });\n });\n }\n\n private static arraysEqual(a: number[], b: number[]): boolean {\n return a.length === b.length && a.every((val, i) => val === b[i]);\n }\n\n private handleUserScroll() {\n // Ignore programmatic scrolls and click-seek scrolls\n if (this.isProgrammaticScroll || this.isClickSeeking) {\n return;\n }\n\n // Mark that user is currently scrolling\n this.isUserScrolling = true;\n this.lyricsContainer?.classList.add('user-scrolling');\n\n // Clear any existing timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n }\n\n // Set timeout to re-enable auto-scroll after 2 seconds of no scrolling\n this.userScrollTimeoutId = window.setTimeout(() => {\n this.isUserScrolling = false;\n this.userScrollTimeoutId = undefined;\n\n // Optionally scroll back to current active line when re-enabling auto-scroll\n if (this.activeLineIndices.length > 0) {\n this.scrollToActiveLine();\n }\n }, 2000);\n }\n\n private findActiveLineIndices(time: number): number[] {\n if (!this.lyrics) return [];\n const activeLines: number[] = [];\n for (let i = 0; i < this.lyrics.length; i += 1) {\n if (time >= this.lyrics[i].timestamp && time <= this.lyrics[i].endtime) {\n activeLines.push(i);\n }\n }\n return activeLines;\n }\n\n private findInstrumentalGapAt(\n time: number,\n ): { insertBeforeIndex: number; gapStart: number; gapEnd: number } | null {\n if (!this.lyrics || this.lyrics.length === 0) return null;\n\n // Start-of-song gap: from 0 to first line timestamp\n const first = this.lyrics[0];\n if (time >= 0 && time < first.timestamp) {\n const gapStart = 0;\n const gapEnd = first.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: 0, gapStart, gapEnd };\n }\n return null;\n }\n\n // Find consecutive pair (i, i+1) that bounds the current time\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (time > gapStart && time < gapEnd) {\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: i + 1, gapStart, gapEnd };\n }\n return null;\n }\n }\n\n return null;\n }\n\n /**\n * Find ALL instrumental gaps in the song, regardless of current time.\n * Used by the template to always render gap elements in the DOM.\n */\n private findAllInstrumentalGaps(): Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> {\n if (!this.lyrics || this.lyrics.length === 0) return [];\n const gaps: Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> = [];\n\n // Start-of-song gap\n const first = this.lyrics[0];\n if (first.timestamp >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: 0, gapStart: 0, gapEnd: first.timestamp });\n }\n\n // Inter-line gaps\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: i + 1, gapStart, gapEnd });\n }\n }\n\n return gaps;\n }\n\n private startAnimationFromTime(time: number) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(time);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n\n if (activeLineIndices.length === 0) {\n return;\n }\n\n // Set up animations for each active line\n for (const lineIndex of activeLineIndices) {\n const line = this.lyrics[lineIndex];\n\n // Find main word based on the reset time\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (time >= line.text[i].timestamp && time <= line.text[i].endtime) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIndex, mainWordIdx);\n\n // Find background word based on the reset time\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n time >= line.backgroundText[i].timestamp &&\n time <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIndex, backWordIdx);\n }\n\n // With the state correctly set, configure the animation parameters\n this.setupAnimations();\n\n // Start the animation loop\n if (this.interpolate) {\n this.animateProgress();\n }\n }\n\n private updateActiveLineAndWords() {\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(this.currentTime);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n\n for (const lineIdx of activeLineIndices) {\n const line = this.lyrics[lineIdx];\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (\n this.currentTime >= line.text[i].timestamp &&\n this.currentTime <= line.text[i].endtime\n ) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIdx, mainWordIdx);\n\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n this.currentTime >= line.backgroundText[i].timestamp &&\n this.currentTime <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIdx, backWordIdx);\n }\n }\n\n private setupAnimations() {\n if (this.activeLineIndices.length === 0 || !this.lyrics) {\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n return;\n }\n\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordIndex = this.activeMainWordIndices.get(lineIndex) ?? -1;\n const backgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n\n // Main word animation\n if (mainWordIndex !== -1) {\n const word = line.text[mainWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.mainWordAnimations.set(lineIndex, { startTime: 0, duration: 0 });\n }\n\n // Background word animation\n if (backgroundWordIndex !== -1 && line.backgroundText) {\n const word = line.backgroundText[backgroundWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n }\n\n private handleLineClick(line: LyricsLine) {\n // Reset all syllables to prevent highlighting conflicts during seek\n if (this.lyricsContainer) {\n const allLines = this.lyricsContainer.querySelectorAll('.lyrics-line');\n allLines.forEach(lineEl => {\n AmLyrics.resetSyllables(lineEl as HTMLElement);\n // Remove scroll-animate class to stop any scroll animations\n lineEl.classList.remove('scroll-animate');\n });\n // Ensure container state is clean\n this.lyricsContainer.classList.remove('wheel-scrolling');\n }\n\n // Cancel any ongoing scroll animations\n if (this.scrollAnimationState) {\n this.scrollAnimationState.isAnimating = false;\n this.scrollAnimationState.pendingUpdate = null;\n }\n\n // Clear scroll animation timeouts\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n // Also clear user scroll timeout to prevent stale scrollToActiveLine\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n this.isUserScrolling = false;\n\n // Reset active line tracking to prevent scroll fighting\n this.currentPrimaryActiveLine = null;\n this.lastPrimaryActiveLine = null;\n this.activeLineIds.clear();\n this.animatingLines = [];\n\n // Find the clicked line element and scroll to it with forceScroll (like YouLyPlus)\n const clickedLineElement = this.lyricsContainer?.querySelector(\n `.lyrics-line[data-start-time=\"${line.timestamp * 1000}\"]`,\n ) as HTMLElement | null;\n\n if (clickedLineElement && this.lyricsContainer) {\n // Update active line reference to the clicked line\n this.currentPrimaryActiveLine = clickedLineElement;\n\n // Reset currentScrollOffset to actual scroll position to prevent stale delta\n this.currentScrollOffset = -this.lyricsContainer.scrollTop;\n\n // Set click-seek cooldown to prevent updated() scroll from fighting\n this.isClickSeeking = true;\n if (this.clickSeekTimeout) clearTimeout(this.clickSeekTimeout);\n this.clickSeekTimeout = setTimeout(() => {\n this.isClickSeeking = false;\n }, 800);\n\n this.scrollToActiveLineYouLy(clickedLineElement, true);\n }\n\n const event = new CustomEvent('line-click', {\n detail: {\n timestamp: line.timestamp,\n },\n bubbles: true,\n composed: true,\n });\n this.dispatchEvent(event);\n }\n\n private static getBackgroundTextPlacement(\n line: LyricsLine,\n ): 'before' | 'after' {\n if (\n !line.backgroundText ||\n line.backgroundText.length === 0 ||\n line.text.length === 0\n ) {\n return 'after'; // Default to after if no comparison is possible\n }\n\n // Compare the start times of the first syllables\n const mainTextStartTime = line.text[0].timestamp;\n const backgroundTextStartTime = line.backgroundText[0].timestamp;\n\n return backgroundTextStartTime < mainTextStartTime ? 'before' : 'after';\n }\n\n private scrollToActiveLine() {\n if (!this.lyricsContainer || this.activeLineIndices.length === 0) {\n return;\n }\n\n // Scroll to the first active line\n const firstActiveLineIndex = Math.min(...this.activeLineIndices);\n const activeLineElement = this.lyricsContainer.querySelector(\n `.lyrics-line:nth-child(${firstActiveLineIndex + 1})`,\n ) as HTMLElement;\n\n if (activeLineElement) {\n const containerHeight = this.lyricsContainer.clientHeight;\n const lineTop = activeLineElement.offsetTop;\n const lineHeight = activeLineElement.clientHeight;\n\n // Check if the line has background text placed before the main text\n const hasBackgroundBefore = activeLineElement.querySelector(\n '.background-text.before',\n );\n\n // Calculate the offset to center the main text content, accounting for background text placement\n let offsetAdjustment = 0;\n if (hasBackgroundBefore) {\n const backgroundElement = hasBackgroundBefore as HTMLElement;\n offsetAdjustment = backgroundElement.clientHeight / 2; // Adjust to focus on main content\n }\n\n const top =\n lineTop - containerHeight / 2 + lineHeight / 2 - offsetAdjustment;\n\n // Use requestAnimationFrame for smoother iOS performance\n requestAnimationFrame(() => {\n this.isProgrammaticScroll = true;\n this.lyricsContainer?.scrollTo({ top, behavior: 'smooth' });\n // Reset the flag after a short delay to allow the scroll to complete\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n });\n }\n }\n\n private scrollToInstrumental(insertBeforeIndex: number) {\n if (!this.lyricsContainer) return;\n\n // Find the gap element by ID instead of nth-child\n const gapTarget = this.lyricsContainer.querySelector(\n `#gap-${insertBeforeIndex}`,\n ) as HTMLElement | null;\n\n if (gapTarget) {\n // Use same scroll position as lyrics (scroll-padding-top from top), not center\n // This matches YouLyPlus behavior where gaps don't scroll to a different position\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - gapTarget.offsetTop;\n\n this.isProgrammaticScroll = true;\n this.animateScrollYouLy(targetTranslateY, false);\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 250);\n }\n }\n\n // === YouLyPlus-style Animation Methods ===\n\n /**\n * Get the scroll padding top value from CSS variable\n */\n private getScrollPaddingTop(): number {\n if (!this.lyricsContainer) return 0;\n const style = getComputedStyle(this);\n const paddingTopValue =\n style.getPropertyValue('--lyrics-scroll-padding-top') || '25%';\n if (paddingTopValue.includes('%')) {\n return (\n this.lyricsContainer.clientHeight * (parseFloat(paddingTopValue) / 100)\n );\n }\n return parseFloat(paddingTopValue) || 0;\n }\n\n /**\n * Animate scroll with staggered delay for smooth YouLyPlus-style scrolling\n * (Exact copy from YouLyPlus _animateScroll)\n */\n private animateScrollYouLy(newTranslateY: number, forceScroll = false): void {\n if (!this.lyricsContainer) return;\n const parent = this.lyricsContainer;\n\n if (!this.scrollAnimationState) {\n this.scrollAnimationState = {\n isAnimating: false,\n pendingUpdate: null,\n };\n this.animatingLines = [];\n }\n\n const animState = this.scrollAnimationState;\n\n if (animState.isAnimating && !forceScroll) {\n animState.pendingUpdate = newTranslateY;\n return;\n }\n\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n const { animatingLines } = this;\n if (animatingLines.length > 0) {\n for (let i = 0; i < animatingLines.length; i += 1) {\n const line = animatingLines[i];\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n }\n animatingLines.length = 0;\n }\n\n // Cancel and replay existing scroll animations\n const animations = this.lyricsContainer.getAnimations({ subtree: true });\n for (const anim of animations) {\n if (\n (anim as Animation & { animationName?: string }).animationName ===\n 'lyrics-scroll'\n ) {\n anim.cancel();\n anim.play();\n }\n }\n\n const targetTop = Math.max(0, -newTranslateY);\n // Always use actual scroll position - don't fall back to stale currentScrollOffset\n // The || operator treats 0 as falsy, which caused bounce when scrollTop was 0\n const prevOffset = -parent.scrollTop;\n const delta = prevOffset - newTranslateY;\n this.currentScrollOffset = newTranslateY;\n\n // Skip animation if already at the target position (e.g., first lines at top)\n if (Math.abs(parent.scrollTop - targetTop) < 1 && Math.abs(delta) < 1) {\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n if (forceScroll) {\n parent.scrollTo({ top: targetTop, behavior: 'smooth' });\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n // Get cached lines for staggered animation\n const lineElements = this.lyricsContainer.querySelectorAll('.lyrics-line');\n const lineArray = Array.from(lineElements) as HTMLElement[];\n\n const referenceLine =\n this.currentPrimaryActiveLine ||\n this.lastPrimaryActiveLine ||\n lineArray[0];\n\n if (!referenceLine) return;\n\n const referenceIndex = lineArray.indexOf(referenceLine);\n if (referenceIndex === -1) return;\n\n const delayIncrement = 30;\n const lookBehind = 5;\n const lookAhead = 20;\n const len = lineArray.length;\n\n const start = Math.max(0, referenceIndex - lookBehind);\n const end = Math.min(len, referenceIndex + lookAhead);\n\n let maxAnimationDuration = 0;\n let delayCounter = 0;\n\n for (let i = start; i < end; i += 1) {\n const line = lineArray[i];\n if (i >= referenceIndex) delayCounter += 1;\n const delay =\n i >= referenceIndex ? (delayCounter - 1) * delayIncrement : 0;\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.classList.add('scroll-animate');\n\n animatingLines.push(line);\n\n const lineDuration = 400 + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n\n animState.isAnimating = true;\n const BASE_DURATION = 400;\n\n this.scrollUnlockTimeout = setTimeout(() => {\n animState.isAnimating = false;\n\n if (animState.pendingUpdate !== null) {\n const pendingValue = animState.pendingUpdate;\n animState.pendingUpdate = null;\n this.animateScrollYouLy(pendingValue, false);\n }\n }, BASE_DURATION);\n\n this.scrollAnimationTimeout = setTimeout(() => {\n for (let i = 0; i < animatingLines.length; i += 1) {\n const line = animatingLines[i];\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n }\n animatingLines.length = 0;\n this.scrollAnimationTimeout = undefined;\n }, maxAnimationDuration + 50);\n\n parent.scrollTo({ top: targetTop, behavior: 'instant' });\n }\n\n /**\n * Update position classes for YouLyPlus-style opacity/blur gradients\n */\n private updatePositionClasses(lineToScroll: HTMLElement): void {\n if (!this.lyricsContainer) return;\n\n const positionClasses = [\n 'lyrics-activest',\n 'post-active-line',\n 'next-active-line',\n 'prev-1',\n 'prev-2',\n 'prev-3',\n 'prev-4',\n 'next-1',\n 'next-2',\n 'next-3',\n 'next-4',\n ];\n\n // Remove old position classes\n this.lyricsContainer\n .querySelectorAll(`.${positionClasses.join(', .')}`)\n .forEach(el => el.classList.remove(...positionClasses));\n\n // Add new position classes\n lineToScroll.classList.add('lyrics-activest');\n\n const lineElements = Array.from(\n this.lyricsContainer.querySelectorAll('.lyrics-line'),\n ) as HTMLElement[];\n const scrollLineIndex = lineElements.indexOf(lineToScroll);\n\n for (\n let i = Math.max(0, scrollLineIndex - 4);\n i <= Math.min(lineElements.length - 1, scrollLineIndex + 4);\n i += 1\n ) {\n const position = i - scrollLineIndex;\n if (position !== 0) {\n const element = lineElements[i];\n if (position === -1) element.classList.add('post-active-line');\n else if (position === 1) element.classList.add('next-active-line');\n else if (position < 0)\n element.classList.add(`prev-${Math.abs(position)}`);\n else element.classList.add(`next-${position}`);\n }\n }\n }\n\n /**\n * Scroll to active line with YouLyPlus-style animation\n */\n private scrollToActiveLineYouLy(\n activeLine: HTMLElement,\n forceScroll = false,\n ): void {\n if (!activeLine || !this.lyricsContainer) return;\n\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - activeLine.offsetTop;\n\n const scrollContainerTop = this.lyricsContainer.getBoundingClientRect().top;\n\n // Skip if already at target position\n if (\n !forceScroll &&\n Math.abs(\n activeLine.getBoundingClientRect().top -\n scrollContainerTop -\n paddingTop,\n ) < 1\n ) {\n return;\n }\n\n // Skip scroll if near the bottom of content (prevents footer jitter)\n if (!forceScroll) {\n const parent = this.lyricsContainer;\n const atBottom =\n parent.scrollTop + parent.clientHeight >= parent.scrollHeight - 50;\n if (atBottom) {\n return;\n }\n }\n\n this.lyricsContainer.classList.remove('not-focused', 'user-scrolling');\n this.isProgrammaticScroll = true;\n this.isUserScrolling = false;\n\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 600);\n\n this.animateScrollYouLy(targetTranslateY, forceScroll);\n }\n\n /**\n * Update syllable highlight animation - apply CSS wipe animation\n * (Exact copy from YouLyPlus _updateSyllableAnimation)\n */\n private static updateSyllableAnimation(syllable: HTMLElement): void {\n if (syllable.classList.contains('highlight')) return;\n\n const { classList } = syllable;\n const isRTL = classList.contains('rtl-text');\n const charSpans = Array.from(\n syllable.querySelectorAll('span.char'),\n ) as HTMLElement[];\n const wordElement = syllable.parentElement?.parentElement; // syllable-wrap -> word\n const allWordCharSpans = wordElement\n ? (Array.from(wordElement.querySelectorAll('span.char')) as HTMLElement[])\n : [];\n const isGrowable = wordElement?.classList.contains('growable');\n const isFirstSyllable =\n syllable.getAttribute('data-syllable-index') === '0';\n const isFirstInContainer = isFirstSyllable; // Simplified\n const isGap = syllable.closest('.lyrics-gap') !== null;\n\n // Get duration from data attribute\n const syllableDurationMs =\n parseFloat(syllable.getAttribute('data-duration') || '0') || 300;\n const wordDurationMs =\n parseFloat(\n syllable.getAttribute('data-word-duration') ||\n syllable.getAttribute('data-duration') ||\n '0',\n ) || syllableDurationMs;\n\n // Use a Map to collect animations like YouLyPlus\n const charAnimationsMap = new Map<HTMLElement, string>();\n const styleUpdates: Array<{\n element: HTMLElement;\n property: string;\n value: string;\n }> = [];\n\n // Step 1: Grow Pass - apply grow-dynamic to ALL word chars on first syllable\n if (isGrowable && isFirstSyllable && allWordCharSpans.length > 0) {\n const finalDuration = wordDurationMs;\n const baseDelayPerChar = finalDuration * 0.09;\n const growDurationMs = finalDuration * 1.5;\n\n allWordCharSpans.forEach(span => {\n const horizontalOffset = parseFloat(\n span.dataset.horizontalOffset || '0',\n );\n // Use syllableCharIndex like YouLyPlus, not loop index\n const charIndex = parseFloat(span.dataset.syllableCharIndex || '0');\n const growDelay = baseDelayPerChar * charIndex;\n\n // READ DATA ATTRIBUTES for style values\n const maxScale = span.dataset.maxScale || '1.1';\n const shadowIntensity = span.dataset.shadowIntensity || '0.6';\n const translateYPeak = span.dataset.translateYPeak || '-2';\n\n charAnimationsMap.set(\n span,\n `grow-dynamic ${growDurationMs}ms ease-in-out ${growDelay}ms forwards`,\n );\n\n // Push style updates to be applied imperatively\n styleUpdates.push({\n element: span,\n property: '--char-offset-x',\n value: `${horizontalOffset}`, // Fixed: removed px suitable for matrix3d\n });\n styleUpdates.push({\n element: span,\n property: '--max-scale',\n value: maxScale,\n });\n styleUpdates.push({\n element: span,\n property: '--shadow-intensity',\n value: shadowIntensity,\n });\n styleUpdates.push({\n element: span,\n property: '--translate-y-peak',\n value: `${translateYPeak}`, // Fixed: removed % because matrix3d expects raw number\n });\n });\n }\n\n // Step 2: Wipe Pass\n if (charSpans.length > 0) {\n // Per-character wipe for growable words (matching YouLyPlus)\n charSpans.forEach((span, charIndex) => {\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n\n const wipeDelay = syllableDurationMs * startPct;\n const wipeDuration = syllableDurationMs * durationPct;\n\n const useStartAnimation = isFirstInContainer && charIndex === 0;\n let charWipeAnimation: string;\n if (useStartAnimation) {\n charWipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n // Get existing animation from map (grow-dynamic) and combine with wipe\n const existingAnimation =\n charAnimationsMap.get(span) || span.style.animation || '';\n const animationParts: string[] = [];\n\n if (existingAnimation && existingAnimation.includes('grow-dynamic')) {\n animationParts.push(existingAnimation.split(',')[0].trim());\n }\n\n if (wipeDuration > 0) {\n animationParts.push(\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n\n charAnimationsMap.set(span, animationParts.join(', '));\n });\n } else {\n // Syllable-level wipe for regular (non-growable) words\n const wipeRatio = parseFloat(\n syllable.getAttribute('data-wipe-ratio') || '1',\n );\n const visualDuration = syllableDurationMs * wipeRatio;\n\n let wipeAnimation: string;\n if (isFirstInContainer) {\n wipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n wipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n const currentWipeAnimation = isGap ? 'fade-gap' : wipeAnimation;\n const syllableAnimation = `${currentWipeAnimation} ${visualDuration}ms ${isGap ? 'ease-out' : 'linear'} forwards`;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = syllableAnimation;\n }\n\n // --- WRITE PHASE ---\n classList.remove('pre-highlight');\n classList.add('highlight');\n\n for (const [span, animationString] of charAnimationsMap.entries()) {\n span.style.animation = animationString;\n }\n\n // Apply style updates\n for (const update of styleUpdates) {\n update.element.style.setProperty(update.property, update.value);\n }\n }\n\n /**\n * Reset syllable animation state\n */\n private static resetSyllable(syllable: HTMLElement): void {\n if (!syllable) return;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = '';\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n // Force background to secondary and disable transition to prevent lingering white\n // eslint-disable-next-line no-param-reassign\n syllable.style.transition = 'none';\n // eslint-disable-next-line no-param-reassign\n syllable.style.backgroundColor = 'var(--lyplus-text-secondary)';\n\n // Reset character animations — disable transition so finished chars don't slowly fade\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.animation = '';\n el.style.transition = 'none';\n el.style.backgroundColor = 'var(--lyplus-text-secondary)';\n });\n\n // Immediately remove all state classes\n syllable.classList.remove(\n 'highlight',\n 'finished',\n 'pre-highlight',\n 'cleanup',\n );\n\n // In next frame, clear inline styles so CSS transitions can resume for future use\n requestAnimationFrame(() => {\n syllable.style.removeProperty('background-color');\n syllable.style.removeProperty('transition');\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n });\n });\n }\n\n /**\n * Reset all syllables in a line\n */\n private static resetSyllables(line: HTMLElement): void {\n if (!line) return;\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = null;\n Array.from(line.getElementsByClassName('lyrics-syllable')).forEach(\n syllable => AmLyrics.resetSyllable(syllable as HTMLElement),\n );\n }\n\n /**\n * Update syllables based on current time\n * Uses DOM caching and pre-highlight reset for smooth transitions\n */\n private static updateSyllablesForLine(\n line: HTMLElement,\n currentTimeMs: number,\n ): void {\n // DOM cache: avoid querySelectorAll on every frame\n let syllables: HTMLElement[] = (line as any)._cachedSyllableElements;\n if (!syllables) {\n syllables = Array.from(\n line.querySelectorAll('.lyrics-syllable'),\n ) as HTMLElement[];\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = syllables;\n }\n\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n const startTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n const endTime = parseFloat(syllable.getAttribute('data-end-time') || '0');\n\n if (startTime) {\n const { classList } = syllable;\n const hasHighlight = classList.contains('highlight');\n const hasFinished = classList.contains('finished');\n const hasPreHighlight = classList.contains('pre-highlight');\n const hasActiveState = hasHighlight || hasFinished || hasPreHighlight;\n\n // Early exit check\n if (!(currentTimeMs < startTime - 1000 && !hasActiveState)) {\n let preHighlightReset = false;\n\n // Pre-highlight reset logic\n if (hasPreHighlight && i > 0) {\n const prevSyllable = syllables[i - 1];\n if (!prevSyllable.classList.contains('highlight')) {\n classList.remove('pre-highlight');\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n syllable.style.animation = '';\n preHighlightReset = true;\n }\n }\n\n if (!preHighlightReset) {\n if (currentTimeMs >= startTime && currentTimeMs <= endTime) {\n // Currently active\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n if (hasFinished) {\n classList.remove('finished');\n }\n } else if (currentTimeMs > endTime) {\n // Finished\n if (!hasFinished) {\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n classList.add('finished');\n }\n } else if (hasHighlight || hasFinished) {\n // Not yet started\n AmLyrics.resetSyllable(syllable);\n }\n }\n }\n }\n }\n }\n\n private animateProgress() {\n const now = performance.now();\n let running = false;\n\n if (!this.lyrics || this.activeLineIndices.length === 0) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n return;\n }\n\n // Process each active line\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordAnimation = this.mainWordAnimations.get(lineIndex);\n\n // Main text animation\n if (mainWordAnimation && mainWordAnimation.duration > 0) {\n const elapsed = now - mainWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(1, elapsed / mainWordAnimation.duration);\n this.mainWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentMainWordIndex =\n this.activeMainWordIndices.get(lineIndex) ?? -1;\n const nextWordIndex = currentMainWordIndex + 1;\n if (\n currentMainWordIndex !== -1 &&\n nextWordIndex < line.text.length\n ) {\n const currentWord = line.text[currentMainWordIndex];\n const nextWord = line.text[nextWordIndex];\n\n this.activeMainWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.mainWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.mainWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n\n // Background text animation\n const backgroundWordAnimation =\n this.backgroundWordAnimations.get(lineIndex);\n if (backgroundWordAnimation && backgroundWordAnimation.duration > 0) {\n const elapsed = now - backgroundWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(\n 1,\n elapsed / backgroundWordAnimation.duration,\n );\n this.backgroundWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentBackgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n if (\n line.backgroundText &&\n currentBackgroundWordIndex !== -1 &&\n currentBackgroundWordIndex < line.backgroundText.length - 1\n ) {\n const nextWordIndex = currentBackgroundWordIndex + 1;\n const currentWord =\n line.backgroundText[currentBackgroundWordIndex];\n const nextWord = line.backgroundText[nextWordIndex];\n\n this.activeBackgroundWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.backgroundWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n }\n\n if (running) {\n this.animationFrameId = requestAnimationFrame(\n this.animateProgress.bind(this),\n );\n } else if (this.animationFrameId) {\n // Stop animation if no words are running\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n\n private generateLRC(): string {\n if (!this.lyrics) return '';\n let lrc = '';\n\n // Add metadata if available\n if (this.songTitle) lrc += `[ti:${this.songTitle}]\\n`;\n if (this.songArtist) lrc += `[ar:${this.songArtist}]\\n`;\n if (this.songAlbum) lrc += `[al:${this.songAlbum}]\\n`;\n if (this.lyricsSource) lrc += `[re:${this.lyricsSource}]\\n`;\n\n for (const line of this.lyrics) {\n if (line.text && line.text.length > 0) {\n const timestamp = AmLyrics.formatTimestampLRC(line.timestamp);\n // Construct line text from syllables\n const lineText = line.text\n .map(s => s.text)\n .join('')\n .trim();\n lrc += `[${timestamp}]${lineText}\\n`;\n }\n }\n\n return lrc;\n }\n\n private generateTTML(): string {\n if (!this.lyrics) return '';\n\n // Basic TTML structure\n let ttml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n ttml +=\n '<tt xmlns=\"http://www.w3.org/ns/ttml\" xmlns:itunes=\"http://music.apple.com/lyrics\">\\n';\n ttml += ' <body>\\n';\n\n let currentPart: string | undefined;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const part = line.songPart;\n\n // If part changed (or first line), start new div\n if (part !== currentPart || i === 0) {\n if (i > 0) {\n ttml += ' </div>\\n';\n }\n currentPart = part;\n if (currentPart) {\n ttml += ` <div itunes:song-part=\"${currentPart}\">\\n`;\n } else {\n ttml += ' <div>\\n';\n }\n }\n\n // For TTML, we can represent syllables as spans if word-synced\n const begin = AmLyrics.formatTimestampTTML(line.timestamp);\n const end = AmLyrics.formatTimestampTTML(line.endtime);\n\n ttml += ` <p begin=\"${begin}\" end=\"${end}\">\\n`;\n\n for (const word of line.text) {\n const wBegin = AmLyrics.formatTimestampTTML(word.timestamp);\n const wEnd = AmLyrics.formatTimestampTTML(word.endtime);\n // Escape special characters in text\n const text = word.text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n ttml += ` <span begin=\"${wBegin}\" end=\"${wEnd}\">${text}</span>\\n`;\n }\n\n ttml += ' </p>\\n';\n }\n\n if (this.lyrics.length > 0) {\n ttml += ' </div>\\n';\n }\n\n ttml += ' </body>\\n';\n ttml += '</tt>';\n\n return ttml;\n }\n\n private static formatTimestampLRC(ms: number): string {\n const totalSeconds = ms / 1000;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const hundredths = Math.floor((ms % 1000) / 10);\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n return `${pad(minutes)}:${pad(seconds)}.${pad(hundredths)}`;\n }\n\n private static formatTimestampTTML(ms: number): string {\n // TTML standard format: HH:MM:SS.mmm\n const totalSeconds = ms / 1000;\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const milliseconds = Math.floor(ms % 1000);\n\n const pad = (n: number, width = 2) => n.toString().padStart(width, '0');\n return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}.${pad(milliseconds, 3)}`;\n }\n\n private downloadLyrics() {\n if (!this.lyrics || this.lyrics.length === 0) return;\n\n // Determine format: TTML if ANY line is word-synced, else LRC\n const isWordSynced = this.lyrics.some(l => l.isWordSynced !== false);\n\n let content = '';\n let extension = this.downloadFormat;\n if (extension === 'auto') {\n extension = isWordSynced ? 'ttml' : 'lrc';\n }\n let mimeType = '';\n\n if (extension === 'ttml') {\n content = this.generateTTML();\n mimeType = 'application/xml';\n } else {\n content = this.generateLRC();\n mimeType = 'text/plain';\n }\n\n if (!content) return;\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n\n const filename = this.songTitle\n ? `${this.songTitle}${this.songArtist ? ` - ${this.songArtist}` : ''}.${extension}`\n : `lyrics.${extension}`;\n\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n render() {\n if (this.fontFamily) {\n this.style.fontFamily = this.fontFamily;\n }\n\n // Set both old internal CSS variables (for backward compatibility)\n // and new public CSS variables (which take precedence)\n this.style.setProperty(\n '--hover-background-color',\n this.hoverBackgroundColor,\n );\n this.style.setProperty('--highlight-color', this.highlightColor);\n\n const sourceLabel = this.lyricsSource ?? 'Unavailable';\n\n const renderContent = () => {\n if (this.isLoading) {\n // Render stylized skeleton lines\n return html`\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n `;\n }\n if (!this.lyrics || this.lyrics.length === 0) {\n return html`<div class=\"no-lyrics\">No lyrics found.</div>`;\n }\n\n // Build a lookup map of ALL gaps so they are always in the DOM\n const allGaps = this.findAllInstrumentalGaps();\n const gapByIndex = new Map(\n allGaps.map(g => [g.insertBeforeIndex, g] as const),\n );\n\n return this.lyrics.map((line, lineIndex) => {\n const isLineActive = this.activeLineIndices.includes(lineIndex);\n const lineId = `lyrics-line-${lineIndex}`;\n\n // Calculate line timing\n const lineStartTime = line.text[0]?.timestamp || 0;\n const lineEndTime = line.text[line.text.length - 1]?.endtime || 0;\n\n // Check for background vocals playing\n const bgIsPlayingNow =\n line.backgroundText && line.backgroundText.length > 0\n ? line.backgroundText.some(\n syl =>\n this.currentTime >= syl.timestamp &&\n this.currentTime <= syl.endtime,\n )\n : false;\n\n const shouldShowBackground =\n line.backgroundText &&\n line.backgroundText.length > 0 &&\n (isLineActive || bgIsPlayingNow);\n\n // Create background vocals container\n const backgroundVocalElement = shouldShowBackground\n ? html`<p class=\"background-vocal-container\">\n ${line.backgroundText!.map((syllable, syllableIndex) => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n\n return html`<span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"${syllableIndex}\"\n >${syllable.text}</span\n >\n </span>\n </span>`;\n })}\n </p>`\n : '';\n\n // Create main vocals using YouLyPlus syllable structure\n const mainVocalElement = html`<p class=\"main-vocal-container\">\n ${line.text.map(syllable => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n const text = syllable.text || '';\n const trimmedText = text.trim();\n\n // YouLyPlus growable criteria: short words (<=7 chars), long duration (>=1000ms), not CJK, not RTL\n const isCJK =\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n trimmedText,\n );\n const isRTL =\n /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u0590-\\u05FF]/.test(\n trimmedText,\n );\n const hasHyphen = trimmedText.includes('-');\n const isGrowable =\n !isCJK &&\n !isRTL &&\n !hasHyphen &&\n trimmedText.length <= 7 &&\n trimmedText.length > 0 &&\n durationMs >= 700 &&\n durationMs >= trimmedText.length * 300;\n\n // Optional romanization per syllable\n const romanizedText =\n this.showRomanization && syllable.romanizedText\n ? html`<span\n class=\"lyrics-syllable transliteration\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"1\"\n >${syllable.romanizedText}</span\n >`\n : '';\n\n // For growable words, wrap each character in a span with YouLyPlus applyGrowthStyles\n const syllableContent = isGrowable\n ? html`${text.split('').map((char, charIndex) => {\n if (char === ' ') {\n return ' ';\n }\n const numChars = trimmedText.length;\n const charStartPercent = charIndex / text.length;\n\n // YouLyPlus emphasisMetrics calculation\n const minDuration = 1000;\n const maxDuration = 5000;\n const easingPower = 3;\n const progress = Math.min(\n 1,\n Math.max(\n 0,\n (durationMs - minDuration) / (maxDuration - minDuration),\n ),\n );\n const easedProgress = progress ** easingPower;\n\n // Decay calculation for long/short words\n const isLongWord = numChars > 5;\n const isShortDuration = durationMs < 1500;\n let maxDecayRate = 0;\n if (isLongWord || isShortDuration) {\n let decayStrength = 0;\n if (isLongWord)\n decayStrength += Math.min((numChars - 5) / 3, 1.0) * 0.4;\n if (isShortDuration)\n decayStrength +=\n Math.max(0, 1.0 - (durationMs - 1000) / 500) * 0.4;\n maxDecayRate = Math.min(decayStrength, 0.85);\n }\n\n // Per-character calculations (exact YouLyPlus logic)\n const positionInWord =\n numChars > 1 ? charIndex / (numChars - 1) : 0;\n const decayFactor = 1.0 - positionInWord * maxDecayRate;\n const charProgress = easedProgress * decayFactor;\n\n const baseGrowth = numChars <= 3 ? 0.07 : 0.05;\n const charMaxScale = 1.0 + baseGrowth + charProgress * 0.1;\n const charShadowIntensity = 0.4 + charProgress * 0.4;\n const normalizedGrowth = (charMaxScale - 1.0) / 0.13;\n const charTranslateYPeak = -normalizedGrowth * 6;\n\n // Horizontal offset (simplified - YouLyPlus uses actual text width measurement)\n const position = (charIndex + 0.5) / numChars;\n const horizontalOffset =\n (position - 0.5) * 2 * ((charMaxScale - 1.0) * 25);\n\n // MOVED TO DATA ATTRIBUTES and removed style attribute to avoid Lit conflict\n return html`<span\n class=\"char\"\n data-char-index=\"${charIndex}\"\n data-syllable-char-index=\"${charIndex}\"\n data-wipe-start=\"${charStartPercent.toFixed(4)}\"\n data-wipe-duration=\"${(1 / text.length).toFixed(4)}\"\n data-horizontal-offset=\"${horizontalOffset.toFixed(2)}\"\n data-max-scale=\"${charMaxScale.toFixed(3)}\"\n data-shadow-intensity=\"${charShadowIntensity.toFixed(3)}\"\n data-translate-y-peak=\"${charTranslateYPeak.toFixed(3)}\"\n >${char}</span\n >`;\n })}`\n : text;\n\n return html`<span\n class=\"lyrics-word ${isGrowable ? 'growable' : ''}\"\n >\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"1\"\n >${syllableContent}</span\n >\n ${romanizedText}\n </span>\n </span>`;\n })}\n </p>`;\n\n // Translation container (if enabled)\n const translationElement =\n this.showTranslation && line.translation\n ? html`<div class=\"lyrics-translation-container\">\n ${line.translation}\n </div>`\n : '';\n\n // Line-synced romanization (fallback if no word-level romanization)\n const lineRomanizationElement =\n this.showRomanization &&\n line.romanizedText &&\n !line.text.some(s => s.romanizedText)\n ? html`<div class=\"lyrics-romanization-container\">\n ${line.romanizedText}\n </div>`\n : '';\n\n // Check for instrumental gap before this line\n let maybeInstrumentalBlock: unknown = null;\n const gapForLine = gapByIndex.get(lineIndex);\n if (gapForLine) {\n // Calculate dot timing for fill-up animation (3 dots)\n const dotDuration = (gapForLine.gapEnd - gapForLine.gapStart) / 3;\n\n // Gap starts without 'active' — _onTimeChanged toggles it imperatively\n maybeInstrumentalBlock = html`<div\n id=\"gap-${lineIndex}\"\n class=\"lyrics-line lyrics-gap\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n >\n <div class=\"lyrics-line-container\">\n <p class=\"main-vocal-container\">\n <span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"0\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"1\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"2\"\n ></span>\n </span>\n </span>\n </p>\n </div>\n </div>`;\n }\n\n return html`\n ${maybeInstrumentalBlock}\n <div\n id=\"${lineId}\"\n class=\"lyrics-line ${isLineActive\n ? 'active'\n : ''} ${line.alignment === 'end'\n ? 'singer-right'\n : 'singer-left'}\"\n data-start-time=\"${lineStartTime}\"\n data-end-time=\"${lineEndTime}\"\n @click=${() => this.handleLineClick(line)}\n tabindex=\"0\"\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n this.handleLineClick(line);\n }\n }}\n >\n <div class=\"lyrics-line-container\">\n ${mainVocalElement} ${backgroundVocalElement}\n ${translationElement} ${lineRomanizationElement}\n </div>\n </div>\n `;\n });\n };\n\n return html`\n <div\n class=\"lyrics-container blur-inactive-enabled ${this.isUserScrolling\n ? 'user-scrolling'\n : ''}\"\n >\n ${!this.isLoading && this.lyrics && this.lyrics.length > 0\n ? html`\n <div class=\"lyrics-header\">\n <div class=\"header-controls\">\n <button\n class=\"download-button ${this.showRomanization\n ? 'active'\n : ''}\"\n @click=${this.toggleRomanization}\n title=\"Toggle Romanization\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-speech-icon lucide-speech\"\n >\n <path\n d=\"M8.8 20v-4.1l1.9.2a2.3 2.3 0 0 0 2.164-2.1V8.3A5.37 5.37 0 0 0 2 8.25c0 2.8.656 3.054 1 4.55a5.77 5.77 0 0 1 .029 2.758L2 20\"\n />\n <path d=\"M19.8 17.8a7.5 7.5 0 0 0 .003-10.603\" />\n <path d=\"M17 15a3.5 3.5 0 0 0-.025-4.975\" />\n </svg>\n </button>\n <button\n class=\"download-button ${this.showTranslation\n ? 'active'\n : ''}\"\n @click=${this.toggleTranslation}\n title=\"Toggle Translation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-languages-icon lucide-languages\"\n >\n <path d=\"m5 8 6 6\" />\n <path d=\"m4 14 6-6 2-3\" />\n <path d=\"M2 5h12\" />\n <path d=\"M7 2h1\" />\n <path d=\"m22 22-5-10-5 10\" />\n <path d=\"M14 18h6\" />\n </svg>\n </button>\n </div>\n <div class=\"download-controls\">\n <select\n class=\"format-select\"\n @change=${(e: Event) => {\n this.downloadFormat = (e.target as HTMLSelectElement)\n .value as 'lrc' | 'ttml';\n }}\n .value=${this.downloadFormat}\n @click=${(e: Event) => e.stopPropagation()}\n >\n <option value=\"auto\">Auto</option>\n <option value=\"lrc\">LRC</option>\n <option value=\"ttml\">TTML</option>\n </select>\n <button\n class=\"download-button\"\n @click=${this.downloadLyrics}\n title=\"Download Lyrics\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-download-icon lucide-download\"\n >\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </svg>\n </button>\n </div>\n </div>\n `\n : ''}\n ${renderContent()}\n ${!this.isLoading\n ? html`\n <footer class=\"lyrics-footer\">\n <div class=\"footer-content\">\n <span class=\"source-info\">Source: ${sourceLabel}</span>\n <span class=\"version-info\">\n v${VERSION} •\n\n <a\n href=\"https://github.com/uimaxbai/apple-music-web-components\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >Star me on GitHub</a\n >\n </span>\n </div>\n </footer>\n `\n : ''}\n </div>\n `;\n }\n}\n","import React from 'react';\nimport { createComponent } from '@lit/react';\nimport { AmLyrics as AmLyricsWC } from './AmLyrics.js';\n\n// This creates the React-usable component\nexport const AmLyrics = createComponent({\n tagName: 'am-lyrics',\n elementClass: AmLyricsWC,\n react: React,\n // Map custom events to React-style on<Event> props\n events: {\n onLineClick: 'line-click',\n },\n});\n"],"names":["t","e","s","o","r","n","i","S","c","h","a","l","p","d","u","f","y","LitElement","html","AmLyrics","css","property","state","query","AmLyricsWC"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}
1
+ {"version":3,"file":"react.js","sources":["../../node_modules/tslib/tslib.es6.js","../../node_modules/@lit/reactive-element/css-tag.js","../../node_modules/@lit/reactive-element/reactive-element.js","../../node_modules/lit-html/lit-html.js","../../node_modules/lit-element/lit-element.js","../../node_modules/@lit/reactive-element/decorators/property.js","../../node_modules/@lit/reactive-element/decorators/state.js","../../node_modules/@lit/reactive-element/decorators/base.js","../../node_modules/@lit/reactive-element/decorators/query.js","../../../src/GoogleService.ts","../../../src/AmLyrics.ts","../../../src/react.ts"],"sourcesContent":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * Config for GoogleService\n */\nconst CONFIG = {\n GOOGLE: {\n MAX_RETRIES: 3,\n RETRY_DELAY_MS: 1000,\n },\n};\n\n/**\n * Service for translating and romanizing text using Google Translate (unofficial API)\n */\nexport class GoogleService {\n private static delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n }\n\n private static isPurelyLatinScript(text: string): boolean {\n // Basic check for Latin script characters plus common punctuation and numbers\n // eslint-disable-next-line no-control-regex\n return /^[\\u0000-\\u007F\\u0080-\\u00FF\\u0100-\\u017F\\u0180-\\u024F]*$/.test(\n text,\n );\n }\n\n static async translate(\n textOrArray: string | string[],\n targetLang: string,\n ): Promise<string | string[]> {\n if (\n !textOrArray ||\n (Array.isArray(textOrArray) && textOrArray.length === 0)\n ) {\n return Array.isArray(textOrArray) ? [] : '';\n }\n\n const isArray = Array.isArray(textOrArray);\n const texts = isArray ? (textOrArray as string[]) : [textOrArray as string];\n\n // Check for empty strings to preserve indices\n const nonEmptyIndices: number[] = [];\n const textsToTranslate: string[] = [];\n\n texts.forEach((t, i) => {\n if (t && t.trim()) {\n nonEmptyIndices.push(i);\n textsToTranslate.push(t);\n }\n });\n\n if (textsToTranslate.length === 0) {\n return isArray ? texts : texts[0];\n }\n\n // Batching logic: Google Translate URL limit is roughly 2000 chars.\n // We'll be conservative with 1500 chars per batch.\n const BATCH_SIZE_CHARS = 1500;\n const translatedResults: string[] = new Array(textsToTranslate.length).fill(\n '',\n );\n\n let currentBatch: string[] = [];\n let currentBatchIndices: number[] = [];\n let currentBatchLength = 0;\n\n const processBatch = async (batch: string[], indices: number[]) => {\n if (batch.length === 0) return;\n const joinedText = batch.join('\\n');\n\n let attempt = 0;\n let success = false;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${targetLang}&dt=t&q=${encodeURIComponent(joinedText)}`;\n // eslint-disable-next-line no-await-in-loop\n const response = await fetch(url);\n if (!response.ok) throw new Error(`Status ${response.status}`);\n // eslint-disable-next-line no-await-in-loop\n const data = await response.json();\n\n // data[0] contains segments.\n // With batching/newlines, Google sometimes returns one large segment with newlines,\n // or multiple segments. We need to reconstruct the full text first.\n\n const fullTranslation =\n data?.[0]?.map((seg: any) => seg?.[0]).join('') || '';\n\n // Split by newline to get individual lines back\n const lines = fullTranslation.split('\\n');\n\n // Edge case: Google might strip trailing newlines or add extra.\n // If we sent N lines, we expect N lines back approx.\n // However, empty lines in input were filtered out before sending.\n // So 'lines' should match 'batch'.\n\n // If mismatch, try to align? Or just take what we have.\n // If lines.length < batch.length, we might have lost some.\n // If lines.length > batch.length, maybe some line wrap?\n\n // We'll trust the split for now but ensure we don't overflow.\n\n indices.forEach((originalIdx, i) => {\n // Safe access\n if (i < lines.length) {\n translatedResults[originalIdx] = lines[i];\n } else {\n // Fallback if response is shorter\n translatedResults[originalIdx] = batch[i];\n }\n });\n\n success = true;\n } catch (e) {\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n // eslint-disable-next-line no-await-in-loop\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n );\n } else {\n // Fail: fill with original\n indices.forEach((originalIdx, i) => {\n translatedResults[originalIdx] = batch[i];\n });\n }\n }\n }\n };\n\n for (let i = 0; i < textsToTranslate.length; i += 1) {\n const text = textsToTranslate[i];\n if (currentBatchLength + text.length > BATCH_SIZE_CHARS) {\n // eslint-disable-next-line no-await-in-loop\n await processBatch(currentBatch, currentBatchIndices);\n currentBatch = [];\n currentBatchIndices = [];\n currentBatchLength = 0;\n }\n currentBatch.push(text);\n currentBatchIndices.push(i);\n currentBatchLength += text.length;\n }\n\n if (currentBatch.length > 0) {\n await processBatch(currentBatch, currentBatchIndices);\n }\n\n // Reconstruct final array\n const finalArray = [...texts];\n nonEmptyIndices.forEach((realIdx, mappedIdx) => {\n finalArray[realIdx] = translatedResults[mappedIdx];\n });\n\n return isArray ? finalArray : finalArray[0];\n }\n\n static async romanize(originalLyrics: any): Promise<any> {\n // Determine if we should treat as word-synced (has syllabus) or line-synced\n\n const lines = Array.isArray(originalLyrics)\n ? originalLyrics\n : originalLyrics.data || originalLyrics.content;\n\n if (!lines) return originalLyrics;\n\n // Check if word synced\n const isWordSynced = lines.some(\n (l: any) =>\n l.isWordSynced !== false && Array.isArray(l.text) && l.text.length > 1,\n );\n\n if (isWordSynced) {\n return this.romanizeWordSynced(lines);\n }\n\n return this.romanizeLineSynced(lines);\n }\n\n static async romanizeWordSynced(lines: any[]): Promise<any[]> {\n return Promise.all(\n lines.map(async (line: any) => {\n if (\n !line.text ||\n !Array.isArray(line.text) ||\n line.text.length === 0 ||\n line.romanizedText // Skip if already romanized\n )\n return line;\n\n // Extract text from syllables\n const syllableTexts = line.text.map((s: any) => s.text);\n const romanizedTexts = await this.romanizeTexts(syllableTexts);\n\n const newSyllabus = line.text.map((s: any, index: number) => ({\n ...s,\n romanizedText: romanizedTexts[index]\n ? `${romanizedTexts[index]}`\n : s.text,\n }));\n\n return {\n ...line,\n text: newSyllabus,\n romanizedText: romanizedTexts.join(' '),\n };\n }),\n );\n }\n\n static async romanizeLineSynced(lines: any[]): Promise<any[]> {\n const linesToRomanize = lines.map((line: any) => {\n // If already romanized, skip\n if (line.romanizedText) {\n return '';\n }\n // If it's line-synced, it usually has 1 syllable with the full text.\n if (Array.isArray(line.text) && line.text.length > 0) {\n return line.text.map((s: any) => s.text).join('');\n }\n return '';\n });\n\n const romanizedLines = await this.romanizeTexts(linesToRomanize);\n\n return lines.map((line: any, index: number) => ({\n ...line,\n romanizedText: romanizedLines[index] || '',\n }));\n }\n\n static async romanizeTexts(texts: string[]): Promise<string[]> {\n const contextText = texts.join(' ');\n\n if (GoogleService.isPurelyLatinScript(contextText)) {\n return texts;\n }\n\n const romanizedTexts: string[] = [];\n\n /* eslint-disable no-await-in-loop */\n for (const text of texts) {\n if (!text || GoogleService.isPurelyLatinScript(text)) {\n romanizedTexts.push(text);\n } else {\n let attempt = 0;\n let success = false;\n let lastError = null;\n\n while (attempt < CONFIG.GOOGLE.MAX_RETRIES && !success) {\n try {\n const romanizeUrl = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=en&dt=rm&q=${encodeURIComponent(\n text,\n )}`;\n const response = await fetch(romanizeUrl);\n const data = await response.json();\n\n // Response format is [[[\"...\",\"...\",\"...\",\"romanization\"]],...]\n // or [null, ...] for English/Latin input where no romanization is needed\n const romanized = data?.[0]?.[0]?.[3] || text;\n\n romanizedTexts.push(romanized);\n success = true;\n } catch (error) {\n lastError = error;\n // eslint-disable-next-line no-console\n console.warn(\n `GoogleService: Error romanizing text \"${text}\" (attempt ${\n attempt + 1\n }/${CONFIG.GOOGLE.MAX_RETRIES}):`,\n error,\n );\n attempt += 1;\n if (attempt < CONFIG.GOOGLE.MAX_RETRIES) {\n await GoogleService.delay(\n CONFIG.GOOGLE.RETRY_DELAY_MS * 2 ** (attempt - 1),\n ); // Exponential backoff\n }\n }\n }\n\n if (!success) {\n // eslint-disable-next-line no-console\n console.error(\n `GoogleService: Failed to romanize text \"${text}\" after ${CONFIG.GOOGLE.MAX_RETRIES} attempts. Last error:`,\n lastError,\n );\n romanizedTexts.push(text); // Fallback to original text\n }\n }\n }\n /* eslint-enable no-await-in-loop */\n\n return romanizedTexts;\n }\n}\n","import { html, css, LitElement } from 'lit';\nimport { property, state, query } from 'lit/decorators.js';\nimport { GoogleService } from './GoogleService.js';\n\nconst VERSION = '1.0.3';\nconst INSTRUMENTAL_THRESHOLD_MS = 7000; // Show dots for gaps >= 7s\n\nconst KPOE_SERVERS = [\n 'https://lyricsplus.binimum.org',\n 'https://lyricsplus.prjktla.workers.dev',\n 'https://lyrics-plus-backend.vercel.app',\n 'https://lyricsplus.onrender.com',\n 'https://lyricsplus.prjktla.online',\n];\nconst DEFAULT_KPOE_SOURCE_ORDER =\n 'apple,lyricsplus,musixmatch,spotify,musixmatch-word';\n\ninterface Syllable {\n text: string;\n part: boolean;\n timestamp: number;\n endtime: number;\n romanizedText?: string;\n lineSynced?: boolean; // New flag for line-synced lyrics\n}\n\ninterface LyricsLine {\n text: Syllable[];\n background: boolean;\n backgroundText: Syllable[];\n oppositeTurn: boolean;\n timestamp: number;\n endtime: number;\n isWordSynced?: boolean;\n alignment?: 'start' | 'end';\n songPart?: string;\n romanizedText?: string;\n translation?: string;\n}\n\ninterface SongMetadata {\n title: string;\n artist: string;\n album?: string;\n durationMs?: number;\n}\n\ninterface SongCatalogResult {\n title?: string;\n artist?: string;\n album?: string;\n durationMs?: number;\n id?: {\n appleMusic?: string;\n [key: string]: unknown;\n };\n isrc?: string;\n}\n\ninterface ParsedQueryMetadata {\n title?: string;\n artist?: string;\n album?: string;\n}\n\ninterface YouLyPlusLyricsResult {\n lines: LyricsLine[];\n source?: string;\n}\n\ninterface ResolvedMetadata {\n metadata?: SongMetadata;\n appleId?: string;\n appleSong?: any;\n catalogIsrc?: string;\n}\n\nexport class AmLyrics extends LitElement {\n static styles = css`\n /* ==========================================================================\n YOULYPLUS-INSPIRED STYLING - Design Tokens & Variables\n ========================================================================== */\n :host {\n --lyplus-lyrics-palette: var(\n --am-lyrics-highlight-color,\n var(--highlight-color, #ffffff)\n );\n --lyplus-text-primary: var(--lyplus-lyrics-palette);\n /* Use color-mix with the text color rather than just opacity so it adapts */\n --lyplus-text-secondary: color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent 45%\n );\n\n --lyplus-padding-base: 1em;\n --lyplus-padding-line: 10px;\n --lyplus-padding-gap: 0.3em;\n --lyplus-border-radius-base: 0.6em;\n --lyplus-gap-dot-size: 0.4em;\n --lyplus-gap-dot-margin: 0.08em;\n\n --lyplus-font-size-base: 32px;\n --lyplus-font-size-base-grow: 30;\n --lyplus-font-size-subtext: 0.6em;\n\n --lyplus-blur-amount: 0.07em;\n --lyplus-blur-amount-near: 0.035em;\n --lyplus-fade-gap-timing-function: ease-out;\n\n --lyrics-scroll-padding-top: 25%;\n\n display: block;\n font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu,\n Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n background: transparent;\n height: 100%;\n overflow: hidden;\n font-weight: bold;\n color: var(--lyplus-text-primary);\n }\n\n /* ==========================================================================\n CONTAINER & SCROLL BEHAVIOR\n ========================================================================== */\n .lyrics-container {\n padding: 20px;\n padding-top: 80px;\n border-radius: 8px;\n background-color: transparent;\n width: 100%;\n height: 100%;\n max-height: 100vh;\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n box-sizing: border-box;\n scrollbar-width: none;\n transform: translateZ(0);\n }\n\n .lyrics-container::-webkit-scrollbar {\n display: none;\n }\n\n /* Disable transitions during touch-scrolling for 1:1 feedback */\n .lyrics-container.touch-scrolling .lyrics-line,\n .lyrics-container.touch-scrolling .lyrics-plus-metadata {\n transition: none !important;\n }\n\n /* Apply smooth gliding transition for mouse-wheel scrolling */\n .lyrics-container.wheel-scrolling .lyrics-line {\n transition: transform 0.3s ease-out !important;\n }\n\n .lyrics-line.scroll-animate {\n transition: none !important; /* Fixed: prevent conflict with scroll animation */\n animation-name: lyrics-scroll;\n animation-duration: var(--scroll-duration, 400ms);\n animation-timing-function: cubic-bezier(0.23, 1, 0.32, 1);\n animation-fill-mode: forwards;\n }\n\n .lyrics-container.user-scrolling .lyrics-line {\n --lyrics-line-delay: 0ms !important;\n transition-delay: 0ms !important;\n }\n\n /* ==========================================================================\n LYRICS LINE BASE STYLES\n ========================================================================== */\n .lyrics-line {\n padding: var(--lyplus-padding-line);\n opacity: 0.8;\n color: var(--lyplus-text-secondary);\n font-size: var(--lyplus-font-size-base);\n cursor: pointer;\n transform-origin: left;\n transform: translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.4s cubic-bezier(0.41, 0, 0.12, 0.99)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n will-change: transform, filter, opacity;\n content-visibility: auto;\n text-rendering: optimizeLegibility;\n overflow-wrap: break-word;\n mix-blend-mode: lighten;\n border-radius: var(--lyplus-border-radius-base);\n }\n\n .lyrics-line.scroll-animate {\n animation-name: lyrics-scroll;\n animation-duration: 400ms;\n animation-timing-function: cubic-bezier(0.41, 0, 0.12, 0.99);\n animation-fill-mode: both;\n animation-delay: var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-line:not(.scroll-animate) {\n animation: none;\n }\n\n /* --- Line Container & Vocal Containers --- */\n .lyrics-line-container {\n overflow-wrap: break-word;\n transform-origin: left;\n transform: scale3d(0.93, 0.93, 0.95);\n transition:\n transform 0.7s ease,\n background-color 0.7s,\n color 0.7s;\n }\n\n .lyrics-line.active .lyrics-line-container {\n transform: scale3d(1.001, 1.001, 1);\n will-change: transform;\n transition:\n transform 0.5s ease,\n background-color 0.18s,\n color 0.18s;\n }\n\n .main-vocal-container {\n transform-origin: 5% 50%;\n margin: 0;\n }\n\n .background-vocal-container {\n max-height: 0;\n padding-top: 0.2em;\n overflow: visible;\n opacity: 0;\n font-size: var(--lyplus-font-size-subtext);\n transition:\n max-height 0.3s,\n opacity 0.6s,\n padding 0.6s;\n margin: 0;\n }\n\n .lyrics-line.active .background-vocal-container {\n max-height: 4em;\n opacity: 1;\n transition:\n max-height 0.6s,\n opacity 0.6s,\n padding 0.6s;\n will-change: max-height, opacity, padding;\n }\n\n /* --- Line States & Modifiers --- */\n .lyrics-line.active {\n opacity: 1;\n color: var(--lyplus-text-primary);\n will-change: transform, opacity;\n }\n\n .lyrics-line.singer-right {\n text-align: end;\n }\n\n .lyrics-line.singer-right .lyrics-line-container,\n .lyrics-line.singer-right .main-vocal-container {\n transform-origin: right;\n }\n\n .lyrics-line.rtl-text {\n direction: rtl;\n }\n\n @media (hover: hover) and (pointer: fine) {\n .lyrics-line:hover {\n background: var(--hover-background-color, rgba(255, 255, 255, 0.13));\n }\n }\n\n /* --- Blur Effect for Inactive Lines --- */\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line:not(.active):not(.lyrics-gap) {\n filter: blur(var(--lyplus-blur-amount));\n }\n\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.post-active-line:not(.lyrics-gap):not(.active),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.next-active-line:not(.lyrics-gap):not(.active),\n .lyrics-container.blur-inactive-enabled:not(.not-focused)\n .lyrics-line.lyrics-activest:not(.active):not(.lyrics-gap) {\n filter: blur(var(--lyplus-blur-amount-near));\n }\n\n /* Unblur all lines when user is scrolling */\n .lyrics-container.user-scrolling .lyrics-line {\n filter: none !important;\n opacity: 0.8 !important;\n }\n\n /* ==========================================================================\n WORD & SYLLABLE STYLES\n ========================================================================== */\n .lyrics-word:not(.allow-break) {\n display: inline-block;\n vertical-align: baseline;\n }\n\n .lyrics-word.allow-break {\n display: inline;\n }\n\n .lyrics-syllable-wrap {\n display: inline;\n }\n\n .lyrics-syllable-wrap:has(.lyrics-syllable.transliteration) {\n display: inline-flex;\n flex-direction: column;\n align-items: start;\n }\n\n .lyrics-syllable {\n display: inline-block;\n vertical-align: baseline;\n color: transparent;\n background-color: var(--lyplus-text-secondary);\n white-space: pre-wrap;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n /* --- Syllable States --- */\n .lyrics-syllable.finished {\n background-color: var(--lyplus-text-primary);\n transition: transform 1s ease !important;\n }\n\n .lyrics-syllable.finished:has(.char) {\n background-color: transparent;\n }\n\n .lyrics-line:not(.active) .lyrics-syllable.finished {\n transition: color 0.18s;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable {\n transform: translateY(0.001%) translateZ(1px);\n transition:\n transform 1s ease,\n background-color 0.5s,\n color 0.5s;\n will-change: transform, background;\n }\n\n /* --- Wipe Highlight Effect --- */\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.highlight:not(:has(.char)),\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight:not(:has(.char)) {\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.rtl-text,\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-syllable.pre-highlight.rtl-text {\n direction: rtl;\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 0%,\n transparent 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary) 100%,\n transparent 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n right;\n }\n\n .lyrics-line.active:not(.lyrics-gap)\n .lyrics-word:not(.growable)\n .lyrics-syllable.highlight,\n .lyrics-word.growable .lyrics-syllable.cleanup .char {\n transform: translateY(-3.5%) translateZ(1px);\n }\n\n .lyrics-line.active:not(.lyrics-gap) .lyrics-syllable.highlight.finished {\n background-image: none;\n }\n\n .lyrics-syllable.pre-highlight {\n animation-name: pre-wipe-universal;\n animation-duration: var(--pre-wipe-duration);\n animation-delay: var(--pre-wipe-delay);\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n }\n\n .lyrics-syllable.pre-highlight.rtl-text {\n animation-name: pre-wipe-universal-rtl;\n }\n\n .lyrics-syllable.transliteration {\n font-size: var(--lyplus-font-size-subtext);\n white-space: pre-wrap;\n pointer-events: none;\n user-select: none;\n }\n\n /* Syllable with chars: make syllable transparent, chars handle color */\n .lyrics-line .lyrics-syllable:has(span.char):not(.finished) {\n background-color: transparent;\n color: transparent;\n }\n\n .lyrics-syllable span.char {\n display: inline-block;\n background-color: var(--lyplus-text-secondary);\n white-space: break-spaces;\n font-variant-ligatures: none;\n font-feature-settings: 'liga' 0;\n background-clip: text;\n -webkit-background-clip: text;\n transition:\n color 0.7s,\n background-color 0.7s,\n transform 0.7s ease;\n }\n\n .lyrics-syllable.finished span.char {\n transition: color 0.18s;\n background-color: var(--lyplus-text-primary);\n }\n\n /* Active char spans: structural only, wipe animation sets gradient */\n .lyrics-line.active .lyrics-syllable span.char {\n background-clip: text;\n -webkit-background-clip: text;\n background-repeat: no-repeat;\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.5em 100%,\n 0% 100%;\n background-position:\n -0.5em 0%,\n -0.25em 0%;\n transform-origin: 50% 80%;\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n transition:\n transform 0.7s ease,\n color 0.18s;\n will-change: background, transform;\n }\n\n .lyrics-line.active .lyrics-syllable span.char.highlight {\n background-image:\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 0%,\n #0000 100%\n ),\n linear-gradient(\n -90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-position:\n calc(100% + 0.5em) 0%,\n calc(100% + 0.25em) 0%;\n }\n\n .lyrics-line.active .lyrics-syllable.pre-highlight span.char {\n background-image:\n linear-gradient(\n 90deg,\n #ffffff00 0%,\n var(--lyplus-text-primary, #fff) 50%,\n #0000 100%\n ),\n linear-gradient(\n 90deg,\n var(--lyplus-text-primary, #fff) 100%,\n #0000 100%\n );\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n -0.25em 0%;\n }\n\n /* ==========================================================================\n INSTRUMENTAL GAP STYLES\n ========================================================================== */\n .lyrics-gap {\n height: 0;\n padding: 0 var(--lyplus-padding-gap);\n overflow: hidden;\n opacity: 0;\n box-sizing: content-box;\n background-clip: unset;\n transition:\n padding 0.3s 0.5s,\n height 0.3s 0.5s,\n opacity 0.2s 0.5s,\n transform 0.3s var(--lyrics-line-delay, 0ms);\n }\n\n .lyrics-gap.active {\n height: 1.3em;\n padding: var(--lyplus-padding-gap);\n opacity: 1;\n overflow: visible;\n transition:\n padding 0.3s,\n height 0.3s,\n opacity 0.2s 0.3s,\n transform 0.3s;\n will-change: height, opacity, padding;\n }\n\n /* Exiting state: keep gap visible while dots animate out */\n .lyrics-gap.gap-exiting {\n height: 1.3em;\n padding: var(--lyplus-padding-gap);\n opacity: 1;\n overflow: visible;\n transition:\n padding 0.3s 0.5s,\n height 0.3s 0.5s,\n opacity 0.2s 0.5s,\n transform 0.3s;\n }\n\n .lyrics-gap .main-vocal-container {\n transform: translateY(-25%) scale(1) translateZ(0);\n }\n\n /* Jump animation plays during exit */\n .lyrics-gap.gap-exiting .main-vocal-container {\n animation: gap-ended 0.8s ease forwards;\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting) .main-vocal-container {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n\n .lyrics-gap:not(.active):not(.gap-exiting)\n .main-vocal-container\n .lyrics-word {\n animation-play-state: paused;\n }\n\n .lyrics-gap.active .main-vocal-container .lyrics-word {\n animation: gap-loop 4s ease infinite alternate;\n will-change: transform;\n }\n\n .lyrics-gap .lyrics-syllable {\n display: inline-block;\n width: var(--lyplus-gap-dot-size);\n height: var(--lyplus-gap-dot-size);\n background-color: var(--lyplus-text-primary);\n border-radius: 50%;\n margin: 0 var(--lyplus-gap-dot-margin);\n }\n\n /* Line-synced lyrics should fade in instantly/quickly instead of wiping */\n .lyrics-syllable.line-synced {\n animation: fade-in-line 0.2s ease-out forwards !important;\n background: transparent !important;\n color: var(--lyplus-text-primary) !important;\n }\n\n @keyframes fade-in-line {\n from {\n opacity: 0.5;\n color: var(--lyplus-text-secondary);\n }\n to {\n opacity: 1;\n color: var(--lyplus-lyrics-palette);\n }\n }\n\n .lyrics-gap .lyrics-syllable {\n background-color: var(--lyplus-text-secondary);\n background-clip: unset;\n }\n\n .lyrics-gap.active .lyrics-syllable.highlight,\n .lyrics-gap.active .lyrics-syllable.finished,\n .lyrics-gap.gap-exiting .lyrics-syllable,\n .lyrics-gap:not(.active).post-active-line .lyrics-syllable,\n .lyrics-gap:not(.active).lyrics-activest .lyrics-syllable {\n background-color: var(--lyplus-text-primary);\n animation: none !important;\n opacity: 1;\n }\n\n .lyrics-gap.active .lyrics-syllable.finished {\n animation: none !important;\n }\n\n /* ==========================================================================\n METADATA & FOOTER STYLES\n ========================================================================== */\n .lyrics-plus-metadata {\n display: block;\n position: relative;\n box-sizing: border-box;\n font-weight: normal;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n transition:\n opacity 0.3s ease,\n transform 0.6s cubic-bezier(0.23, 1, 0.32, 1)\n var(--lyrics-line-delay, 0ms),\n filter 0.3s ease;\n }\n\n .lyrics-plus-empty {\n display: block;\n height: 100vh;\n transform: translateY(var(--lyrics-scroll-offset, 0px)) translateZ(1px);\n }\n\n .lyrics-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n text-align: left;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.5);\n padding: 10px 0;\n border-top: 1px solid rgba(255, 255, 255, 0.1);\n margin-top: 10px;\n font-weight: normal;\n }\n\n .lyrics-footer p {\n margin: 5px 0;\n }\n\n .lyrics-footer a {\n color: rgba(255, 255, 255, 0.7);\n text-decoration: none;\n }\n\n .lyrics-footer a:hover {\n text-decoration: underline;\n }\n\n .footer-content {\n display: flex;\n align-items: flex-start;\n flex-direction: column;\n gap: 8px;\n }\n\n .footer-controls {\n display: flex;\n align-items: center;\n }\n\n /* ==========================================================================\n HEADER & CONTROLS\n ========================================================================== */\n .lyrics-header {\n display: flex;\n padding: 10px 0;\n margin-bottom: 10px;\n gap: 10px;\n justify-content: space-between;\n align-items: center;\n }\n\n .lyrics-header .download-button {\n background: none;\n border: none;\n cursor: pointer;\n color: #aaa;\n padding: 0;\n margin-left: 10px;\n vertical-align: middle;\n display: inline-flex;\n align-items: center;\n }\n\n .lyrics-header .download-button:hover {\n color: rgba(255, 255, 255, 0.9);\n }\n\n .header-controls {\n display: flex;\n gap: 8px;\n }\n\n .download-controls {\n display: flex;\n align-items: center;\n gap: 4px;\n }\n\n .control-button {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n padding: 2px 8px;\n font-size: 0.8em;\n color: rgba(255, 255, 255, 0.6);\n cursor: pointer;\n transition: all 0.2s;\n font-weight: normal;\n }\n\n .control-button:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .control-button.active {\n background-color: var(--lyplus-text-primary);\n border-color: var(--lyplus-text-primary);\n color: #000;\n }\n\n .format-select {\n background: transparent;\n border: 1px solid rgba(255, 255, 255, 0.3);\n border-radius: 4px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 0.8em;\n margin-left: 10px;\n padding: 2px 5px;\n cursor: pointer;\n font-weight: normal;\n }\n\n .format-select:hover {\n color: rgba(255, 255, 255, 0.9);\n border-color: rgba(255, 255, 255, 0.5);\n }\n\n .format-select option {\n background: #1a1a1a;\n color: #fff;\n }\n\n /* ==========================================================================\n TRANSLATION & ROMANIZATION\n ========================================================================== */\n .lyrics-translation-container,\n .lyrics-romanization-container {\n padding-top: 0.2em;\n opacity: 0.8;\n font-size: var(--lyplus-font-size-subtext);\n overflow-wrap: break-word;\n pointer-events: none;\n user-select: none;\n transition:\n opacity 0.3s ease,\n color 0.3s;\n font-weight: normal;\n }\n\n .lyrics-romanization-container {\n direction: ltr !important;\n }\n\n .lyrics-romanization-container.rtl-text {\n direction: rtl !important;\n }\n\n .lyrics-romanization-container .lyrics-syllable {\n white-space: pre-wrap;\n }\n\n .lyrics-translation-container {\n opacity: 0.5;\n }\n\n .main-line-wrapper.small {\n font-size: 0.5em;\n opacity: 0.8;\n display: block;\n margin-bottom: 0px;\n }\n\n .translation-line {\n font-size: 1em;\n font-weight: bold;\n display: block;\n margin-top: 0px;\n line-height: 1.1;\n }\n\n .romanized-line {\n font-size: 0.5em;\n color: rgba(255, 255, 255, 0.5);\n display: block;\n margin-top: 2px;\n font-weight: normal;\n }\n\n /* ==========================================================================\n SKELETON LOADING\n ========================================================================== */\n @keyframes skeleton-loading {\n 0% {\n background-color: rgba(255, 255, 255, 0.1);\n }\n 100% {\n background-color: rgba(255, 255, 255, 0.2);\n }\n }\n\n .skeleton-line {\n height: 2.5em;\n margin: 20px 0;\n border-radius: 8px;\n animation: skeleton-loading 1s linear infinite alternate;\n opacity: 0.7;\n width: 60%;\n }\n\n .skeleton-line:nth-child(even) {\n width: 80%;\n }\n .skeleton-line:nth-child(3n) {\n width: 50%;\n }\n .skeleton-line:nth-child(5n) {\n width: 70%;\n }\n\n .no-lyrics {\n color: rgba(255, 255, 255, 0.5);\n font-size: 1.2em;\n text-align: center;\n padding: 2em;\n font-weight: normal;\n }\n\n /* ==========================================================================\n KEYFRAME ANIMATIONS\n ========================================================================== */\n\n /* Wipe animation for syllables */\n @keyframes wipe {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes start-wipe {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n left;\n }\n }\n\n @keyframes wipe-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n calc(100% + 0.36em);\n }\n to {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes start-wipe-rtl {\n 0% {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n calc(100% + 0.5em);\n }\n 100% {\n background-size:\n 0.75em 100%,\n 100% 100%;\n background-position:\n -0.75em 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-universal {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.75em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.375em 0%,\n left;\n }\n }\n\n @keyframes pre-wipe-universal-rtl {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.75em) 0%,\n right;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n calc(100% + 0.375em) 0%,\n right;\n }\n }\n\n @keyframes pre-wipe-char {\n from {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n to {\n background-size:\n 0.75em 100%,\n 0% 100%;\n background-position:\n -0.85em 0%,\n left;\n }\n }\n\n /* Gap dot animations */\n @keyframes gap-loop {\n from {\n transform: scale(1.15);\n }\n to {\n transform: scale(0.85);\n }\n }\n\n @keyframes gap-ended {\n 0% {\n transform: translateY(-25%) scale(1) translateZ(0);\n }\n 35% {\n transform: translateY(-25%) scale(1.2) translateZ(0);\n }\n 100% {\n transform: translateY(-25%) scale(0) translateZ(0);\n }\n }\n\n @keyframes fade-gap {\n from {\n background-color: var(--lyplus-text-secondary);\n }\n to {\n background-color: var(--lyplus-text-primary);\n }\n }\n\n /* Scroll animation */\n @keyframes lyrics-scroll {\n from {\n transform: translateY(var(--scroll-delta)) translateZ(1px);\n }\n to {\n transform: translateY(0) translateZ(1px);\n }\n }\n\n /* Character grow animation - exact copy from YouLyPlus */\n @keyframes grow-dynamic {\n 0% {\n transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n 25%,\n 30% {\n transform: matrix3d(\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n calc(var(--max-scale) * calc(var(--lyplus-font-size-base-grow) / 25)),\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n calc(\n var(--char-offset-x, 0) *\n calc(var(--lyplus-font-size-base-grow) / 25)\n ),\n var(--translate-y-peak, -2),\n 0,\n 1\n );\n filter: drop-shadow(\n 0 0 0.1em\n color-mix(\n in srgb,\n var(--lyplus-lyrics-palette),\n transparent calc((1 - var(--shadow-intensity, 1)) * 100%)\n )\n );\n }\n 100% {\n transform: translateY(-3.5%) translateZ(1px);\n filter: drop-shadow(\n 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%)\n );\n }\n }\n\n @keyframes grow-static {\n 0%,\n 100% {\n transform: scale3d(1.01, 1.01, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 100%);\n }\n 30%,\n 40% {\n transform: scale3d(1.1, 1.1, 1.1) translateY(-0.05%);\n text-shadow: 0 0 0.3em\n color-mix(in srgb, var(--lyplus-lyrics-palette), transparent 50%);\n }\n }\n\n /* Fade in animation */\n @keyframes fadeInUp {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 0.7;\n transform: translateY(0);\n }\n }\n\n /* Legacy support */\n .opposite-turn {\n text-align: right;\n }\n\n .singer-right {\n text-align: right;\n justify-content: flex-end;\n }\n\n .singer-left {\n text-align: left;\n justify-content: flex-start;\n }\n\n /* Legacy progress-text for backward compatibility */\n .progress-text {\n position: relative;\n display: inline-block;\n background: linear-gradient(\n to right,\n var(--lyplus-text-primary) 0%,\n var(--lyplus-text-primary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) var(--line-progress, 0%),\n var(--lyplus-text-secondary) 100%\n );\n -webkit-background-clip: text;\n background-clip: text;\n -webkit-text-fill-color: transparent;\n color: var(--lyplus-text-secondary);\n transform: translate3d(0, 0, 0);\n will-change: background-size;\n }\n\n .progress-text::before {\n display: none;\n }\n\n .active-line {\n font-weight: bold;\n }\n\n .background-text {\n display: block;\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n font-style: normal;\n margin: 0;\n flex-shrink: 0;\n line-height: 1.1;\n }\n\n .background-text.before {\n order: -1;\n }\n\n .background-text.after {\n order: 1;\n }\n\n .instrumental-line {\n display: inline-flex;\n align-items: baseline;\n gap: 8px;\n color: var(--lyplus-text-secondary);\n font-size: 0.9em;\n padding: 4px 10px;\n animation: fadeInUp 220ms ease;\n font-weight: normal;\n }\n\n .instrumental-duration {\n color: var(--lyplus-text-secondary);\n font-size: 0.8em;\n }\n `;\n\n @property({ type: String })\n query?: string;\n\n @property({ type: String })\n musicId?: string;\n\n @property({ type: String })\n isrc?: string;\n\n @property({ type: String, attribute: 'song-title' })\n songTitle?: string;\n\n @state()\n private downloadFormat: 'auto' | 'lrc' | 'ttml' = 'auto';\n\n @property({ type: String, attribute: 'song-artist' })\n songArtist?: string;\n\n @property({ type: String, attribute: 'song-album' })\n songAlbum?: string;\n\n @property({ type: Number, attribute: 'song-duration' })\n songDurationMs?: number;\n\n @property({ type: String, attribute: 'highlight-color' })\n highlightColor = '#ffffff';\n\n @property({ type: String, attribute: 'hover-background-color' })\n hoverBackgroundColor = 'rgba(255, 255, 255, 0.13)';\n\n @property({ type: String, attribute: 'font-family' })\n fontFamily?: string;\n\n @property({ type: Boolean })\n autoScroll = true;\n\n @property({ type: Boolean })\n interpolate = true;\n\n @state()\n private showRomanization = false;\n\n @state()\n private showTranslation = false;\n\n private async toggleRomanization() {\n this.showRomanization = !this.showRomanization;\n await this.applyRomanization();\n }\n\n private async applyRomanization() {\n if (this.showRomanization && this.lyrics) {\n const needsRomanization = this.lyrics.some(\n l =>\n !l.romanizedText && (!l.text || !l.text.some(s => s.romanizedText)),\n );\n\n if (needsRomanization) {\n this.isLoading = true;\n try {\n const romanizedLines = await GoogleService.romanize(this.lyrics);\n this.lyrics = romanizedLines;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Romanization failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n private async toggleTranslation() {\n this.showTranslation = !this.showTranslation;\n await this.applyTranslation();\n }\n\n private async applyTranslation() {\n if (this.showTranslation && this.lyrics) {\n const needsTranslation = this.lyrics.some(l => !l.translation);\n if (needsTranslation) {\n this.isLoading = true;\n try {\n // Prepare batch: extract text from all lines\n const textToTranslate = this.lyrics.map(line => {\n if (line.translation) return '';\n return line.text.map(s => s.text).join('');\n });\n\n // If all are empty, skip\n if (textToTranslate.every(t => !t)) {\n this.isLoading = false;\n return;\n }\n\n const result = await GoogleService.translate(textToTranslate, 'en');\n const translations = Array.isArray(result) ? result : [result];\n\n const newLyrics = this.lyrics.map((line, index) => {\n if (line.translation) return line;\n return {\n ...line,\n translation: translations[index] || undefined,\n };\n });\n\n this.lyrics = newLyrics;\n } catch (e) {\n // eslint-disable-next-line no-console\n console.error('Translation failed', e);\n } finally {\n this.isLoading = false;\n }\n }\n }\n }\n\n @property({ type: Number })\n duration?: number;\n\n private _currentTime = 0;\n\n @property({ type: Number, attribute: 'currenttime', hasChanged: () => false })\n set currentTime(value: number) {\n const oldValue = this._currentTime;\n this._currentTime = value;\n if (oldValue !== value && this.lyrics) {\n this._onTimeChanged(oldValue, value);\n }\n }\n\n get currentTime(): number {\n return this._currentTime;\n }\n\n @state()\n private isLoading = false;\n\n @state()\n private lyrics?: LyricsLine[];\n\n @state()\n private activeLineIndices: number[] = [];\n\n @state()\n private activeMainWordIndices: Map<number, number> = new Map();\n\n @state()\n private activeBackgroundWordIndices: Map<number, number> = new Map();\n\n @state()\n private mainWordProgress: Map<number, number> = new Map();\n\n @state()\n private backgroundWordProgress: Map<number, number> = new Map();\n\n @state()\n private lyricsSource: string | null = null;\n\n private animationFrameId?: number;\n\n private mainWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n private backgroundWordAnimations: Map<\n number,\n { startTime: number; duration: number }\n > = new Map();\n\n @query('.lyrics-container')\n private lyricsContainer?: HTMLElement;\n\n private lastInstrumentalIndex: number | null = null;\n\n private userScrollTimeoutId?: number;\n\n @state()\n private isUserScrolling = false;\n\n private isProgrammaticScroll = false;\n\n private isClickSeeking = false;\n\n private clickSeekTimeout?: ReturnType<typeof setTimeout>;\n\n // Cached DOM elements for animation updates\n private cachedLyricsLines: HTMLElement[] = [];\n\n // Active line tracking\n private activeLineIds: Set<string> = new Set();\n\n private currentPrimaryActiveLine: HTMLElement | null = null;\n\n private lastPrimaryActiveLine: HTMLElement | null = null;\n\n // Scroll animation state\n private scrollAnimationState: {\n isAnimating: boolean;\n pendingUpdate: number | null;\n } | null = null;\n\n private currentScrollOffset = 0;\n\n private animatingLines: HTMLElement[] = [];\n\n private scrollUnlockTimeout?: ReturnType<typeof setTimeout>;\n\n private scrollAnimationTimeout?: ReturnType<typeof setTimeout>;\n\n // Syllable animation tracking\n private lastActiveIndex = 0;\n\n private visibleLineIds: Set<string> = new Set();\n\n connectedCallback() {\n super.connectedCallback();\n this.fetchLyrics();\n }\n\n disconnectedCallback() {\n super.disconnectedCallback();\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n }\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n }\n }\n\n private async fetchLyrics() {\n this.isLoading = true;\n this.lyrics = undefined;\n this.lyricsSource = null;\n try {\n const resolvedMetadata = await this.resolveSongMetadata();\n\n const isMusicIdOnlyRequest =\n Boolean(this.musicId) &&\n !this.songTitle &&\n !this.songArtist &&\n !this.query;\n\n if (resolvedMetadata?.metadata && !isMusicIdOnlyRequest) {\n const youLyResult = await AmLyrics.fetchLyricsFromYouLyPlus(\n resolvedMetadata.metadata,\n );\n\n if (youLyResult && youLyResult.lines.length > 0) {\n this.lyrics = youLyResult.lines;\n this.lyricsSource = youLyResult.source ?? 'LyricsPlus (KPoe)';\n await this.onLyricsLoaded();\n return;\n }\n }\n\n this.lyrics = undefined;\n this.lyricsSource = null;\n } finally {\n this.isLoading = false;\n }\n }\n\n private async onLyricsLoaded() {\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n\n if (this.lyricsContainer) {\n this.isProgrammaticScroll = true;\n this.lyricsContainer.scrollTop = 0;\n window.setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n }\n\n await this.autoProcessLyrics();\n }\n\n private async autoProcessLyrics() {\n if (this.showRomanization) {\n await this.applyRomanization();\n }\n if (this.showTranslation) {\n await this.applyTranslation();\n }\n }\n\n private async resolveSongMetadata(): Promise<ResolvedMetadata> {\n const metadata: SongMetadata = {\n title: this.songTitle?.trim() ?? '',\n artist: this.songArtist?.trim() ?? '',\n album: this.songAlbum?.trim() || undefined,\n durationMs: undefined,\n };\n\n if (typeof this.songDurationMs === 'number' && this.songDurationMs > 0) {\n metadata.durationMs = this.songDurationMs;\n } else if (typeof this.duration === 'number' && this.duration > 0) {\n metadata.durationMs = this.duration;\n }\n\n const appleSong: any = null;\n let appleId = this.musicId;\n let catalogIsrc: string | undefined;\n\n if (\n this.query &&\n (!metadata.title || !metadata.artist || !metadata.album)\n ) {\n const parsed = AmLyrics.parseQueryMetadata(this.query);\n if (parsed) {\n if (!metadata.title && parsed.title) {\n metadata.title = parsed.title;\n }\n if (!metadata.artist && parsed.artist) {\n metadata.artist = parsed.artist;\n }\n if (!metadata.album && parsed.album) {\n metadata.album = parsed.album;\n }\n }\n }\n\n let catalogResult: SongCatalogResult | null = null;\n\n if (this.query && (!metadata.title || !metadata.artist)) {\n catalogResult = await AmLyrics.searchLyricsPlusCatalog(this.query);\n\n if (catalogResult) {\n if (!metadata.title && catalogResult.title) {\n metadata.title = catalogResult.title;\n }\n if (!metadata.artist && catalogResult.artist) {\n metadata.artist = catalogResult.artist;\n }\n if (!metadata.album && catalogResult.album) {\n metadata.album = catalogResult.album;\n }\n if (\n metadata.durationMs == null &&\n typeof catalogResult.durationMs === 'number' &&\n catalogResult.durationMs > 0\n ) {\n metadata.durationMs = catalogResult.durationMs;\n }\n\n if (!appleId && catalogResult.id?.appleMusic) {\n appleId = catalogResult.id.appleMusic;\n }\n\n if (!catalogIsrc && catalogResult.isrc) {\n catalogIsrc = catalogResult.isrc;\n }\n }\n }\n\n const trimmedTitle = metadata.title?.trim() ?? '';\n const trimmedArtist = metadata.artist?.trim() ?? '';\n const trimmedAlbum = metadata.album?.trim();\n const sanitizedDuration =\n typeof metadata.durationMs === 'number' &&\n Number.isFinite(metadata.durationMs) &&\n metadata.durationMs > 0\n ? Math.round(metadata.durationMs)\n : undefined;\n\n const finalMetadata =\n trimmedTitle && trimmedArtist\n ? {\n title: trimmedTitle,\n artist: trimmedArtist,\n album: trimmedAlbum || undefined,\n durationMs: sanitizedDuration,\n }\n : undefined;\n\n return {\n metadata: finalMetadata,\n appleId,\n appleSong,\n catalogIsrc,\n };\n }\n\n private static parseQueryMetadata(\n rawQuery: string,\n ): ParsedQueryMetadata | null {\n const trimmed = rawQuery?.trim();\n if (!trimmed) return null;\n\n const result: ParsedQueryMetadata = {};\n\n const hyphenSplit = trimmed.split(/\\s[-–—]\\s/);\n if (hyphenSplit.length >= 2) {\n const [rawTitle, ...rest] = hyphenSplit;\n const rawArtist = rest.join(' - ');\n const titleCandidate = rawTitle.trim();\n const artistCandidate = rawArtist.trim();\n if (titleCandidate && artistCandidate) {\n result.title = titleCandidate;\n result.artist = artistCandidate;\n return result;\n }\n }\n\n const bySplit = trimmed.split(/\\s+[bB]y\\s+/);\n if (bySplit.length === 2) {\n const [maybeTitle, maybeArtist] = bySplit.map(part => part.trim());\n if (maybeTitle && maybeArtist) {\n result.title = maybeTitle;\n result.artist = maybeArtist;\n return result;\n }\n }\n\n return null;\n }\n\n private static async searchLyricsPlusCatalog(\n searchTerm: string,\n ): Promise<SongCatalogResult | null> {\n const trimmedQuery = searchTerm?.trim();\n if (!trimmedQuery) return null;\n\n for (const base of KPOE_SERVERS) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v1/songlist/search?q=${encodeURIComponent(\n trimmedQuery,\n )}`;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetch(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n const payload = await response.json();\n let results: SongCatalogResult[] = [];\n\n const typedPayload = payload as {\n results?: SongCatalogResult[];\n } | null;\n\n if (Array.isArray(typedPayload?.results)) {\n results = typedPayload.results as SongCatalogResult[];\n } else if (Array.isArray(payload)) {\n results = payload as SongCatalogResult[];\n }\n\n if (results.length > 0) {\n const primary = results.find(\n (item: SongCatalogResult) => item?.id && item.id.appleMusic,\n );\n return (primary ?? results[0]) as SongCatalogResult;\n }\n }\n } catch (error) {\n // Ignore and try next server\n }\n }\n\n return null;\n }\n\n private static async fetchLyricsFromYouLyPlus(\n metadata: SongMetadata,\n ): Promise<YouLyPlusLyricsResult | null> {\n const title = metadata.title?.trim();\n const artist = metadata.artist?.trim();\n\n if (!title || !artist) {\n return null;\n }\n\n const params = new URLSearchParams({ title, artist });\n\n if (metadata.album) {\n params.append('album', metadata.album);\n }\n\n if (metadata.durationMs && metadata.durationMs > 0) {\n params.append(\n 'duration',\n Math.round(metadata.durationMs / 1000).toString(),\n );\n }\n\n params.append('source', DEFAULT_KPOE_SOURCE_ORDER);\n\n let fallbackResult: YouLyPlusLyricsResult | null = null;\n\n for (const base of KPOE_SERVERS) {\n const normalizedBase = base.endsWith('/') ? base.slice(0, -1) : base;\n const url = `${normalizedBase}/v2/lyrics/get?${params.toString()}`;\n\n let payload: any = null;\n\n try {\n // eslint-disable-next-line no-await-in-loop\n const response = await fetch(url);\n if (response.ok) {\n // eslint-disable-next-line no-await-in-loop\n payload = await response.json();\n }\n } catch (error) {\n payload = null;\n }\n\n if (payload) {\n const lines = AmLyrics.convertKPoeLyrics(payload);\n if (lines && lines.length > 0) {\n const sourceLabel =\n payload?.metadata?.source ||\n payload?.metadata?.provider ||\n 'LyricsPlus (KPoe)';\n\n const result = { lines, source: sourceLabel };\n\n // If source is Apple, return immediately (best quality)\n if (sourceLabel.toLowerCase() === 'apple') {\n return result;\n }\n\n // Otherwise, store as fallback if we don't have one yet\n if (!fallbackResult) {\n fallbackResult = result;\n }\n }\n }\n }\n\n return fallbackResult;\n }\n\n private static convertKPoeLyrics(payload: any): LyricsLine[] | null {\n if (!payload) {\n return null;\n }\n\n let rawLyrics: any[] | null = null;\n if (Array.isArray(payload?.lyrics)) {\n rawLyrics = payload.lyrics;\n } else if (Array.isArray(payload?.data?.lyrics)) {\n rawLyrics = payload.data.lyrics;\n } else if (Array.isArray(payload?.data)) {\n rawLyrics = payload.data;\n }\n\n if (!rawLyrics || rawLyrics.length === 0) {\n return null;\n }\n\n const sanitizedEntries = rawLyrics.filter((item: any) => Boolean(item));\n const lines: LyricsLine[] = [];\n\n // If type is 'Line', we revert to line-by-line highlighting by skipping syllabus parsing\n const isLineType = payload.type === 'Line' || payload.type === 'line';\n\n // Convert metadata.agents to alignment map\n const agents = payload.metadata?.agents ?? {};\n const agentEntries = Object.entries(agents);\n const singerAlignmentMap: Record<string, 'start' | 'end'> = {};\n\n if (agentEntries.length > 0) {\n agentEntries.sort((a, b) => a[0].localeCompare(b[0]));\n\n const personAgents = agentEntries.filter(\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ([_, agentData]: [string, any]) => agentData.type === 'person',\n );\n const personIndexMap = new Map();\n personAgents.forEach(([agentKey], personIndex) => {\n personIndexMap.set(agentKey, personIndex);\n });\n\n agentEntries.forEach(([agentKey, agentData]: [string, any]) => {\n if (agentData.type === 'group') {\n singerAlignmentMap[agentKey] = 'start';\n } else if (agentData.type === 'other') {\n singerAlignmentMap[agentKey] = 'end';\n } else if (agentData.type === 'person') {\n const personIndex = personIndexMap.get(agentKey);\n if (personIndex !== undefined) {\n singerAlignmentMap[agentKey] =\n personIndex % 2 === 0 ? 'start' : 'end';\n }\n }\n });\n }\n\n for (const entry of sanitizedEntries) {\n const start = Number(entry.time);\n const duration = Number(entry.duration);\n\n // Determine alignment\n let alignment: 'start' | 'end' | undefined;\n const singerId = entry.element?.singer;\n if (singerId && singerAlignmentMap[singerId]) {\n alignment = singerAlignmentMap[singerId];\n }\n const lineText = typeof entry.text === 'string' ? entry.text : '';\n const lineStart = AmLyrics.toMilliseconds(entry.time);\n const lineDuration = AmLyrics.toMilliseconds(entry.duration);\n const explicitEnd = AmLyrics.toMilliseconds(entry.endTime);\n const lineEnd = explicitEnd || lineStart + (lineDuration || 0);\n\n const syllabus = Array.isArray(entry.syllabus)\n ? entry.syllabus.filter((s: any) => Boolean(s))\n : [];\n const mainSyllables: Syllable[] = [];\n const backgroundSyllables: Syllable[] = [];\n\n if (!isLineType && syllabus.length > 0) {\n for (const syl of syllabus) {\n const sylStart = AmLyrics.toMilliseconds(syl.time, lineStart);\n const sylDuration = AmLyrics.toMilliseconds(syl.duration);\n const sylEnd = sylDuration > 0 ? sylStart + sylDuration : lineEnd;\n const syllable: Syllable = {\n text: typeof syl.text === 'string' ? syl.text : '',\n part: Boolean(syl.part),\n timestamp: sylStart,\n endtime: sylEnd,\n };\n\n if (syl.isBackground) {\n backgroundSyllables.push(syllable);\n } else {\n mainSyllables.push(syllable);\n }\n }\n }\n\n if (mainSyllables.length === 0 && lineText) {\n mainSyllables.push({\n text: lineText,\n part: false,\n timestamp: lineStart,\n endtime: lineEnd || lineStart,\n lineSynced: isLineType, // Mark as line-synced\n });\n }\n\n const hasWordSync =\n mainSyllables.length > 0 || backgroundSyllables.length > 0;\n\n const { transliteration } = entry;\n let romanizedTextFromPayload: string | undefined;\n\n if (transliteration) {\n romanizedTextFromPayload = transliteration.text;\n // If syllabus data matches, map it to main syllables\n if (\n Array.isArray(transliteration.syllabus) &&\n transliteration.syllabus.length === mainSyllables.length\n ) {\n transliteration.syllabus.forEach((s: any, i: number) => {\n if (mainSyllables[i]) {\n mainSyllables[i].romanizedText = s.text;\n }\n });\n }\n }\n\n const lineResult: LyricsLine = {\n text: mainSyllables,\n background: backgroundSyllables.length > 0,\n backgroundText: backgroundSyllables,\n oppositeTurn: Array.isArray(entry.element)\n ? entry.element.includes('opposite') ||\n entry.element.includes('right')\n : false,\n timestamp: lineStart,\n endtime: start + duration,\n isWordSynced: isLineType ? false : hasWordSync,\n alignment,\n songPart: entry.element?.songPart,\n romanizedText: romanizedTextFromPayload,\n };\n\n lines.push(lineResult);\n }\n\n return lines;\n }\n\n private static toMilliseconds(value: unknown, fallback = 0): number {\n const num = Number(value);\n if (!Number.isFinite(num) || Number.isNaN(num)) {\n return fallback;\n }\n\n if (!Number.isInteger(num)) {\n return Math.round(num * 1000);\n }\n\n return Math.max(0, Math.round(num));\n }\n\n firstUpdated() {\n // Set up scroll event listener for user scroll detection\n // Use wheel/touchmove which are guaranteed to be user initiated,\n // unlike 'scroll' which fires for both user and programmatic/inertia\n if (this.lyricsContainer) {\n this.lyricsContainer.addEventListener(\n 'wheel',\n this.handleUserScroll.bind(this),\n { passive: true },\n );\n this.lyricsContainer.addEventListener(\n 'touchmove',\n this.handleUserScroll.bind(this),\n { passive: true },\n );\n }\n }\n\n /**\n * Handle currentTime changes imperatively, bypassing Lit's render cycle.\n * This prevents the template from re-rendering on every frame, which would\n * reset imperative animation classes (highlight, finished, etc.) set by\n * updateSyllablesForLine.\n */\n private _onTimeChanged(oldTime: number, newTime: number): void {\n const timeDiff = Math.abs(newTime - oldTime);\n\n const newActiveLines = this.findActiveLineIndices(newTime);\n const oldActiveLines = this.activeLineIndices;\n\n // Reset animation if active lines change or if we skip time.\n // A threshold of 0.5s (500ms) is used to detect a \"skip\".\n const linesChanged = !AmLyrics.arraysEqual(newActiveLines, oldActiveLines);\n\n if (linesChanged || timeDiff > 0.5) {\n // Reset syllables from lines that are no longer active\n if (this.lyricsContainer) {\n for (const lineIndex of oldActiveLines) {\n if (!newActiveLines.includes(lineIndex)) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n AmLyrics.resetSyllables(lineElement);\n }\n }\n }\n }\n this.startAnimationFromTime(newTime);\n }\n\n // YouLyPlus-style syllable animation updates\n if (this.lyricsContainer) {\n // Update syllables in active lines\n for (const lineIndex of this.activeLineIndices) {\n const lineElement = this.lyricsContainer.querySelector(\n `#lyrics-line-${lineIndex}`,\n ) as HTMLElement;\n if (lineElement) {\n AmLyrics.updateSyllablesForLine(lineElement, newTime);\n }\n }\n\n // Also update syllables in active gap lines (breathing dots)\n const activeGaps =\n this.lyricsContainer.querySelectorAll('.lyrics-gap.active');\n activeGaps.forEach(gapLine => {\n AmLyrics.updateSyllablesForLine(gapLine as HTMLElement, newTime);\n });\n\n // Imperatively manage gap active state (template doesn't re-render on time changes)\n const allGaps = this.lyricsContainer.querySelectorAll('.lyrics-gap');\n allGaps.forEach(gap => {\n const gapStartTime = parseFloat(\n gap.getAttribute('data-start-time') || '0',\n );\n const gapEndTime = parseFloat(gap.getAttribute('data-end-time') || '0');\n const shouldBeActive = newTime >= gapStartTime && newTime < gapEndTime;\n const isActive = gap.classList.contains('active');\n const isExiting = gap.classList.contains('gap-exiting');\n // Start exit animation early so it completes before the next lyric\n const exitLeadMs = 600;\n const shouldStartExiting =\n isActive && !isExiting && newTime >= gapEndTime - exitLeadMs;\n\n if (shouldBeActive && !isActive && !isExiting) {\n // Entering gap: remove any leftover exit state, add active\n gap.classList.remove('gap-exiting');\n gap.classList.add('active');\n } else if (shouldStartExiting) {\n // Exiting gap: keep visible while dots animate out\n gap.classList.add('gap-exiting');\n gap.classList.remove('active');\n // After exit animation completes, remove gap-exiting to collapse\n setTimeout(() => {\n gap.classList.remove('gap-exiting');\n }, 800);\n } else if (isActive && !shouldBeActive) {\n // NEW: Immediate cleanup if we seeked out of valid range\n gap.classList.remove('active');\n gap.classList.remove('gap-exiting');\n } else if (isExiting && newTime < gapEndTime - exitLeadMs) {\n // NEW: Cleanup exiting state if we seeked backwards before exit window\n gap.classList.remove('gap-exiting');\n }\n });\n\n // Track instrumental gap state\n const currentGap = this.findInstrumentalGapAt(newTime);\n if (currentGap) {\n this.lastInstrumentalIndex = currentGap.insertBeforeIndex;\n } else if (this.lastInstrumentalIndex !== null) {\n this.lastInstrumentalIndex = null;\n }\n\n // Update position classes for YouLyPlus blur/opacity effect\n if (this.activeLineIndices.length > 0) {\n const primaryLineIndex = this.activeLineIndices[0];\n const primaryLine = this.lyricsContainer.querySelector(\n `#lyrics-line-${primaryLineIndex}`,\n ) as HTMLElement;\n\n if (primaryLine && primaryLine !== this.currentPrimaryActiveLine) {\n this.lastPrimaryActiveLine = this.currentPrimaryActiveLine;\n this.currentPrimaryActiveLine = primaryLine;\n this.updatePositionClasses(primaryLine);\n }\n }\n\n // Pre-scroll: scroll to upcoming line ~0.5s before it starts\n // This provides the \"anticipatory scroll\" requested by the user.\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking &&\n this.lyrics\n ) {\n const preScrollLeadMs = 0.5; // 0.5s lead time (adjusted from 1.5s)\n\n // Condition: ONLY pre-scroll if no other lyric is currently playing.\n // If a lyric is playing, we must wait for it to finish (handled by updated()).\n if (this.activeLineIndices.length === 0) {\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const timeUntilStart = line.timestamp - newTime;\n if (timeUntilStart > 0 && timeUntilStart <= preScrollLeadMs) {\n const nextLineEl = this.lyricsContainer.querySelector(\n `#lyrics-line-${i}`,\n ) as HTMLElement;\n // Only trigger if we aren't already targeting this line\n if (nextLineEl && nextLineEl !== this.currentPrimaryActiveLine) {\n // We don't set currentPrimaryActiveLine here to avoid triggering\n // styles, just the YouLy scroll.\n this.scrollToActiveLineYouLy(nextLineEl);\n }\n break;\n }\n }\n }\n }\n }\n }\n\n updated(changedProperties: Map<string | number | symbol, unknown>) {\n if (changedProperties.has('lyrics')) {\n // Recalculate timing data for accurate animations whenever lyrics change\n this._updateCharTimingData();\n }\n\n // Handle duration reset (-1 stops playback and resets currentTime to 0)\n if (changedProperties.has('duration') && this.duration === -1) {\n this.currentTime = 0;\n this.activeLineIndices = [];\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.isUserScrolling = false;\n\n // Cancel any running animations\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n // Clear user scroll timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n // Scroll to top\n if (this.lyricsContainer) {\n this.lyricsContainer.scrollTop = 0;\n }\n\n return; // Exit early, don't process other changes\n }\n\n if (\n (changedProperties.has('query') ||\n changedProperties.has('musicId') ||\n changedProperties.has('isrc') ||\n changedProperties.has('songTitle') ||\n changedProperties.has('songArtist') ||\n changedProperties.has('songAlbum') ||\n changedProperties.has('songDurationMs')) &&\n !changedProperties.has('currentTime')\n ) {\n this.fetchLyrics();\n }\n\n if (changedProperties.has('currentTime') && this.lyrics) {\n // currentTime changes are now handled by the custom setter (_onTimeChanged)\n // This block intentionally left empty — only here for backwards compat with\n // any subclasses that might check changedProperties\n }\n\n if (\n this.autoScroll &&\n !this.isUserScrolling &&\n !this.isClickSeeking &&\n changedProperties.has('activeLineIndices') &&\n this.activeLineIndices.length > 0\n ) {\n // Logic for concurrent lines:\n // If the new primary line was ALREADY active (e.g. part of an overlap),\n // don't scroll. We only want to scroll when we move to a fresh line/block.\n const oldActiveIndices = changedProperties.get(\n 'activeLineIndices',\n ) as number[];\n const firstActiveIndex = this.activeLineIndices[0]; // Assuming sorted\n\n const wasAlreadyActive =\n oldActiveIndices && oldActiveIndices.includes(firstActiveIndex);\n\n // Use YouLyPlus-style scroll if we have a current primary line\n if (this.currentPrimaryActiveLine) {\n if (!wasAlreadyActive) {\n this.scrollToActiveLineYouLy(this.currentPrimaryActiveLine);\n } else {\n // Concurrent line already active, skipping scroll\n }\n } else {\n this.scrollToActiveLine();\n }\n }\n }\n\n private _textWidthCanvas: HTMLCanvasElement | undefined;\n\n private _textWidthCtx: CanvasRenderingContext2D | null | undefined;\n\n private _getTextWidth(text: string, font: string): number {\n if (!this._textWidthCanvas) {\n this._textWidthCanvas = document.createElement('canvas');\n this._textWidthCtx = this._textWidthCanvas.getContext('2d', {\n willReadFrequently: true,\n });\n }\n if (this._textWidthCtx) {\n this._textWidthCtx.font = font;\n return this._textWidthCtx.measureText(text).width;\n }\n return 0;\n }\n\n private _updateCharTimingData() {\n if (!this.shadowRoot) return;\n\n // Get the computed font from the first syllable to ensure accuracy\n const referenceSyllable = this.shadowRoot.querySelector('.lyrics-syllable');\n if (!referenceSyllable) return;\n\n const computedStyle = getComputedStyle(referenceSyllable);\n const { font } = computedStyle; // Full font string\n const fontSize = parseFloat(computedStyle.fontSize);\n\n const growableWords = this.shadowRoot.querySelectorAll(\n '.lyrics-word.growable',\n );\n if (!growableWords) return;\n\n growableWords.forEach((wordSpan: any) => {\n const syllableWraps = wordSpan.querySelectorAll('.lyrics-syllable-wrap');\n\n // Flatten syllables\n const syllables: HTMLElement[] = [];\n syllableWraps.forEach((wrap: HTMLElement) => {\n const syl = wrap.querySelector('.lyrics-syllable');\n if (syl) syllables.push(syl as HTMLElement);\n });\n\n syllables.forEach(sylSpan => {\n const charSpans = sylSpan.querySelectorAll('.char');\n if (charSpans.length === 0) return;\n\n // Logic from YouLyPlus renderCharWipes:\n // Use textContent from spans to ensure we measure what is rendered\n const chars = Array.from(charSpans).map(span => span.textContent || '');\n const charWidths = chars.map(c => this._getTextWidth(c, font));\n const totalSyllableWidth = charWidths.reduce((a, b) => a + b, 0);\n\n const duration = parseFloat(sylSpan.dataset.duration || '0');\n const velocityPxPerMs =\n duration > 0 ? totalSyllableWidth / duration : 0;\n\n // Gradient width in pixels = 0.375 * fontSize\n // This matches YouLyPlus visual gradient size\n const gradientWidthPx = 0.375 * fontSize;\n const gradientDurationMs =\n velocityPxPerMs > 0 ? gradientWidthPx / velocityPxPerMs : 100;\n\n let cumulativeCharWidth = 0;\n\n charSpans.forEach((spanArg: any, i: number) => {\n const charWidth = charWidths[i];\n const span = spanArg;\n\n if (totalSyllableWidth > 0) {\n const startPercent = cumulativeCharWidth / totalSyllableWidth;\n const durationPercent = charWidth / totalSyllableWidth;\n\n span.dataset.wipeStart = startPercent.toFixed(4);\n span.dataset.wipeDuration = durationPercent.toFixed(4);\n\n // The critical missing piece:\n span.dataset.preWipeArrival = (duration * startPercent).toFixed(2);\n span.dataset.preWipeDuration = gradientDurationMs.toFixed(2);\n }\n\n cumulativeCharWidth += charWidth;\n });\n });\n });\n }\n\n private static arraysEqual(a: number[], b: number[]): boolean {\n return a.length === b.length && a.every((val, i) => val === b[i]);\n }\n\n private handleUserScroll() {\n // Ignore programmatic scrolls and click-seek scrolls\n if (this.isProgrammaticScroll || this.isClickSeeking) {\n return;\n }\n\n // Mark that user is currently scrolling\n this.isUserScrolling = true;\n this.lyricsContainer?.classList.add('user-scrolling');\n\n // Clear any existing timeout\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n }\n\n // Set timeout to re-enable auto-scroll after 2 seconds of no scrolling\n this.userScrollTimeoutId = window.setTimeout(() => {\n this.isUserScrolling = false;\n this.userScrollTimeoutId = undefined;\n\n // Optionally scroll back to current active line when re-enabling auto-scroll\n if (this.activeLineIndices.length > 0) {\n this.scrollToActiveLine();\n }\n }, 2000);\n }\n\n private findActiveLineIndices(time: number): number[] {\n if (!this.lyrics) return [];\n const activeLines: number[] = [];\n for (let i = 0; i < this.lyrics.length; i += 1) {\n if (time >= this.lyrics[i].timestamp && time <= this.lyrics[i].endtime) {\n activeLines.push(i);\n }\n }\n return activeLines;\n }\n\n private findInstrumentalGapAt(\n time: number,\n ): { insertBeforeIndex: number; gapStart: number; gapEnd: number } | null {\n if (!this.lyrics || this.lyrics.length === 0) return null;\n\n // Start-of-song gap: from 0 to first line timestamp\n const first = this.lyrics[0];\n if (time >= 0 && time < first.timestamp) {\n const gapStart = 0;\n const gapEnd = first.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: 0, gapStart, gapEnd };\n }\n return null;\n }\n\n // Find consecutive pair (i, i+1) that bounds the current time\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (time > gapStart && time < gapEnd) {\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n return { insertBeforeIndex: i + 1, gapStart, gapEnd };\n }\n return null;\n }\n }\n\n return null;\n }\n\n /**\n * Find ALL instrumental gaps in the song, regardless of current time.\n * Used by the template to always render gap elements in the DOM.\n */\n private findAllInstrumentalGaps(): Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> {\n if (!this.lyrics || this.lyrics.length === 0) return [];\n const gaps: Array<{\n insertBeforeIndex: number;\n gapStart: number;\n gapEnd: number;\n }> = [];\n\n // Start-of-song gap\n const first = this.lyrics[0];\n if (first.timestamp >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: 0, gapStart: 0, gapEnd: first.timestamp });\n }\n\n // Inter-line gaps\n for (let i = 0; i < this.lyrics.length - 1; i += 1) {\n const curr = this.lyrics[i];\n const next = this.lyrics[i + 1];\n const gapStart = curr.endtime;\n const gapEnd = next.timestamp;\n if (gapEnd - gapStart >= INSTRUMENTAL_THRESHOLD_MS) {\n gaps.push({ insertBeforeIndex: i + 1, gapStart, gapEnd });\n }\n }\n\n return gaps;\n }\n\n private startAnimationFromTime(time: number) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(time);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n this.mainWordProgress.clear();\n this.backgroundWordProgress.clear();\n\n if (activeLineIndices.length === 0) {\n return;\n }\n\n // Set up animations for each active line\n for (const lineIndex of activeLineIndices) {\n const line = this.lyrics[lineIndex];\n\n // Find main word based on the reset time\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (time >= line.text[i].timestamp && time <= line.text[i].endtime) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIndex, mainWordIdx);\n\n // Find background word based on the reset time\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n time >= line.backgroundText[i].timestamp &&\n time <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIndex, backWordIdx);\n }\n\n // With the state correctly set, configure the animation parameters\n this.setupAnimations();\n\n // Start the animation loop\n if (this.interpolate) {\n this.animateProgress();\n }\n }\n\n private updateActiveLineAndWords() {\n if (!this.lyrics) return;\n\n const activeLineIndices = this.findActiveLineIndices(this.currentTime);\n if (!AmLyrics.arraysEqual(activeLineIndices, this.activeLineIndices)) {\n this.activeLineIndices = activeLineIndices;\n }\n\n // Clear previous state\n this.activeMainWordIndices.clear();\n this.activeBackgroundWordIndices.clear();\n\n for (const lineIdx of activeLineIndices) {\n const line = this.lyrics[lineIdx];\n let mainWordIdx = -1;\n for (let i = 0; i < line.text.length; i += 1) {\n if (\n this.currentTime >= line.text[i].timestamp &&\n this.currentTime <= line.text[i].endtime\n ) {\n mainWordIdx = i;\n break;\n }\n }\n this.activeMainWordIndices.set(lineIdx, mainWordIdx);\n\n let backWordIdx = -1;\n if (line.backgroundText) {\n for (let i = 0; i < line.backgroundText.length; i += 1) {\n if (\n this.currentTime >= line.backgroundText[i].timestamp &&\n this.currentTime <= line.backgroundText[i].endtime\n ) {\n backWordIdx = i;\n break;\n }\n }\n }\n this.activeBackgroundWordIndices.set(lineIdx, backWordIdx);\n }\n }\n\n private setupAnimations() {\n if (this.activeLineIndices.length === 0 || !this.lyrics) {\n this.mainWordAnimations.clear();\n this.backgroundWordAnimations.clear();\n return;\n }\n\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordIndex = this.activeMainWordIndices.get(lineIndex) ?? -1;\n const backgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n\n // Main word animation\n if (mainWordIndex !== -1) {\n const word = line.text[mainWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.mainWordAnimations.set(lineIndex, { startTime: 0, duration: 0 });\n }\n\n // Background word animation\n if (backgroundWordIndex !== -1 && line.backgroundText) {\n const word = line.backgroundText[backgroundWordIndex];\n const wordDuration = word.endtime - word.timestamp;\n const elapsedInWord = this.currentTime - word.timestamp;\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() - elapsedInWord,\n duration: wordDuration,\n });\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n }\n\n private handleLineClick(line: LyricsLine) {\n // Reset all syllables to prevent highlighting conflicts during seek\n if (this.lyricsContainer) {\n const allLines = this.lyricsContainer.querySelectorAll('.lyrics-line');\n allLines.forEach(lineEl => {\n AmLyrics.resetSyllables(lineEl as HTMLElement);\n // Remove scroll-animate class to stop any scroll animations\n lineEl.classList.remove('scroll-animate');\n });\n // Ensure container state is clean\n this.lyricsContainer.classList.remove('wheel-scrolling');\n }\n\n // Cancel any ongoing scroll animations\n if (this.scrollAnimationState) {\n this.scrollAnimationState.isAnimating = false;\n this.scrollAnimationState.pendingUpdate = null;\n }\n\n // Clear scroll animation timeouts\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n // Also clear user scroll timeout to prevent stale scrollToActiveLine\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n this.isUserScrolling = false;\n\n // Reset active line tracking to prevent scroll fighting\n this.currentPrimaryActiveLine = null;\n this.lastPrimaryActiveLine = null;\n this.activeLineIds.clear();\n this.animatingLines = [];\n\n // Find the clicked line element and scroll to it with forceScroll (like YouLyPlus)\n const clickedLineElement = this.lyricsContainer?.querySelector(\n `.lyrics-line[data-start-time=\"${line.timestamp * 1000}\"]`,\n ) as HTMLElement | null;\n\n if (clickedLineElement && this.lyricsContainer) {\n // Update active line reference to the clicked line\n this.currentPrimaryActiveLine = clickedLineElement;\n\n // Reset currentScrollOffset to actual scroll position to prevent stale delta\n this.currentScrollOffset = -this.lyricsContainer.scrollTop;\n\n // Set click-seek cooldown to prevent updated() scroll from fighting\n this.isClickSeeking = true;\n if (this.clickSeekTimeout) clearTimeout(this.clickSeekTimeout);\n this.clickSeekTimeout = setTimeout(() => {\n this.isClickSeeking = false;\n }, 800);\n\n this.scrollToActiveLineYouLy(clickedLineElement, true);\n }\n\n const event = new CustomEvent('line-click', {\n detail: {\n timestamp: line.timestamp,\n },\n bubbles: true,\n composed: true,\n });\n this.dispatchEvent(event);\n }\n\n private static getBackgroundTextPlacement(\n line: LyricsLine,\n ): 'before' | 'after' {\n if (\n !line.backgroundText ||\n line.backgroundText.length === 0 ||\n line.text.length === 0\n ) {\n return 'after'; // Default to after if no comparison is possible\n }\n\n // Compare the start times of the first syllables\n const mainTextStartTime = line.text[0].timestamp;\n const backgroundTextStartTime = line.backgroundText[0].timestamp;\n\n return backgroundTextStartTime < mainTextStartTime ? 'before' : 'after';\n }\n\n private scrollToActiveLine() {\n if (!this.lyricsContainer || this.activeLineIndices.length === 0) {\n return;\n }\n\n // Scroll to the first active line\n const firstActiveLineIndex = Math.min(...this.activeLineIndices);\n const activeLineElement = this.lyricsContainer.querySelector(\n `.lyrics-line:nth-child(${firstActiveLineIndex + 1})`,\n ) as HTMLElement;\n\n if (activeLineElement) {\n const containerHeight = this.lyricsContainer.clientHeight;\n const lineTop = activeLineElement.offsetTop;\n const lineHeight = activeLineElement.clientHeight;\n\n // Check if the line has background text placed before the main text\n const hasBackgroundBefore = activeLineElement.querySelector(\n '.background-text.before',\n );\n\n // Calculate the offset to center the main text content, accounting for background text placement\n let offsetAdjustment = 0;\n if (hasBackgroundBefore) {\n const backgroundElement = hasBackgroundBefore as HTMLElement;\n offsetAdjustment = backgroundElement.clientHeight / 2; // Adjust to focus on main content\n }\n\n const top =\n lineTop - containerHeight / 2 + lineHeight / 2 - offsetAdjustment;\n\n // Use requestAnimationFrame for smoother iOS performance\n requestAnimationFrame(() => {\n this.isProgrammaticScroll = true;\n this.lyricsContainer?.scrollTo({ top, behavior: 'smooth' });\n // Reset the flag after a short delay to allow the scroll to complete\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 100);\n });\n }\n }\n\n private scrollToInstrumental(insertBeforeIndex: number) {\n if (!this.lyricsContainer) return;\n\n // Find the gap element by ID instead of nth-child\n const gapTarget = this.lyricsContainer.querySelector(\n `#gap-${insertBeforeIndex}`,\n ) as HTMLElement | null;\n\n if (gapTarget) {\n // Use same scroll position as lyrics (scroll-padding-top from top), not center\n // This matches YouLyPlus behavior where gaps don't scroll to a different position\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - gapTarget.offsetTop;\n\n this.isProgrammaticScroll = true;\n this.animateScrollYouLy(targetTranslateY, false);\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 250);\n }\n }\n\n // === YouLyPlus-style Animation Methods ===\n\n /**\n * Get the scroll padding top value from CSS variable\n */\n private getScrollPaddingTop(): number {\n if (!this.lyricsContainer) return 0;\n const style = getComputedStyle(this);\n const paddingTopValue =\n style.getPropertyValue('--lyrics-scroll-padding-top') || '25%';\n if (paddingTopValue.includes('%')) {\n return (\n this.lyricsContainer.clientHeight * (parseFloat(paddingTopValue) / 100)\n );\n }\n return parseFloat(paddingTopValue) || 0;\n }\n\n /**\n * Animate scroll with staggered delay for smooth YouLyPlus-style scrolling\n * (Exact copy from YouLyPlus _animateScroll)\n */\n private animateScrollYouLy(newTranslateY: number, forceScroll = false): void {\n if (!this.lyricsContainer) return;\n const parent = this.lyricsContainer;\n\n if (!this.scrollAnimationState) {\n this.scrollAnimationState = {\n isAnimating: false,\n pendingUpdate: null,\n };\n this.animatingLines = [];\n }\n\n const animState = this.scrollAnimationState;\n\n if (animState.isAnimating && !forceScroll) {\n animState.pendingUpdate = newTranslateY;\n return;\n }\n\n if (this.scrollUnlockTimeout) {\n clearTimeout(this.scrollUnlockTimeout);\n this.scrollUnlockTimeout = undefined;\n }\n\n if (this.scrollAnimationTimeout) {\n clearTimeout(this.scrollAnimationTimeout);\n this.scrollAnimationTimeout = undefined;\n }\n\n const { animatingLines } = this;\n if (animatingLines.length > 0) {\n for (let i = 0; i < animatingLines.length; i += 1) {\n const line = animatingLines[i];\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n }\n animatingLines.length = 0;\n }\n\n // Cancel and replay existing scroll animations\n const animations = this.lyricsContainer.getAnimations({ subtree: true });\n for (const anim of animations) {\n if (\n (anim as Animation & { animationName?: string }).animationName ===\n 'lyrics-scroll'\n ) {\n anim.cancel();\n anim.play();\n }\n }\n\n const targetTop = Math.max(0, -newTranslateY);\n // Always use actual scroll position - don't fall back to stale currentScrollOffset\n // The || operator treats 0 as falsy, which caused bounce when scrollTop was 0\n const prevOffset = -parent.scrollTop;\n const delta = prevOffset - newTranslateY;\n this.currentScrollOffset = newTranslateY;\n\n // Skip animation if already at the target position (e.g., first lines at top)\n if (Math.abs(parent.scrollTop - targetTop) < 1 && Math.abs(delta) < 1) {\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n if (forceScroll) {\n parent.scrollTo({ top: targetTop, behavior: 'smooth' });\n animState.isAnimating = false;\n animState.pendingUpdate = null;\n return;\n }\n\n // Get cached lines for staggered animation\n const lineElements = this.lyricsContainer.querySelectorAll('.lyrics-line');\n const lineArray = Array.from(lineElements) as HTMLElement[];\n\n const referenceLine =\n this.currentPrimaryActiveLine ||\n this.lastPrimaryActiveLine ||\n lineArray[0];\n\n if (!referenceLine) return;\n\n const referenceIndex = lineArray.indexOf(referenceLine);\n if (referenceIndex === -1) return;\n\n const delayIncrement = 30;\n const lookBehind = 5;\n const lookAhead = 20;\n const len = lineArray.length;\n\n const start = Math.max(0, referenceIndex - lookBehind);\n const end = Math.min(len, referenceIndex + lookAhead);\n\n let maxAnimationDuration = 0;\n let delayCounter = 0;\n\n for (let i = start; i < end; i += 1) {\n const line = lineArray[i];\n if (i >= referenceIndex) delayCounter += 1;\n const delay =\n i >= referenceIndex ? (delayCounter - 1) * delayIncrement : 0;\n\n line.style.setProperty('--scroll-delta', `${delta}px`);\n line.style.setProperty('--lyrics-line-delay', `${delay}ms`);\n line.classList.add('scroll-animate');\n\n animatingLines.push(line);\n\n const lineDuration = 400 + delay;\n if (lineDuration > maxAnimationDuration) {\n maxAnimationDuration = lineDuration;\n }\n }\n\n animState.isAnimating = true;\n const BASE_DURATION = 400;\n\n this.scrollUnlockTimeout = setTimeout(() => {\n animState.isAnimating = false;\n\n if (animState.pendingUpdate !== null) {\n const pendingValue = animState.pendingUpdate;\n animState.pendingUpdate = null;\n this.animateScrollYouLy(pendingValue, false);\n }\n }, BASE_DURATION);\n\n this.scrollAnimationTimeout = setTimeout(() => {\n for (let i = 0; i < animatingLines.length; i += 1) {\n const line = animatingLines[i];\n line.classList.remove('scroll-animate');\n line.style.removeProperty('--scroll-delta');\n line.style.removeProperty('--lyrics-line-delay');\n }\n animatingLines.length = 0;\n this.scrollAnimationTimeout = undefined;\n }, maxAnimationDuration + 50);\n\n parent.scrollTo({ top: targetTop, behavior: 'instant' });\n }\n\n /**\n * Update position classes for YouLyPlus-style opacity/blur gradients\n */\n private updatePositionClasses(lineToScroll: HTMLElement): void {\n if (!this.lyricsContainer) return;\n\n const positionClasses = [\n 'lyrics-activest',\n 'post-active-line',\n 'next-active-line',\n 'prev-1',\n 'prev-2',\n 'prev-3',\n 'prev-4',\n 'next-1',\n 'next-2',\n 'next-3',\n 'next-4',\n ];\n\n // Remove old position classes\n this.lyricsContainer\n .querySelectorAll(`.${positionClasses.join(', .')}`)\n .forEach(el => el.classList.remove(...positionClasses));\n\n // Add new position classes\n lineToScroll.classList.add('lyrics-activest');\n\n const lineElements = Array.from(\n this.lyricsContainer.querySelectorAll('.lyrics-line'),\n ) as HTMLElement[];\n const scrollLineIndex = lineElements.indexOf(lineToScroll);\n\n for (\n let i = Math.max(0, scrollLineIndex - 4);\n i <= Math.min(lineElements.length - 1, scrollLineIndex + 4);\n i += 1\n ) {\n const position = i - scrollLineIndex;\n if (position !== 0) {\n const element = lineElements[i];\n if (position === -1) element.classList.add('post-active-line');\n else if (position === 1) element.classList.add('next-active-line');\n else if (position < 0)\n element.classList.add(`prev-${Math.abs(position)}`);\n else element.classList.add(`next-${position}`);\n }\n }\n }\n\n /**\n * Scroll to active line with YouLyPlus-style animation\n */\n private scrollToActiveLineYouLy(\n activeLine: HTMLElement,\n forceScroll = false,\n ): void {\n if (!activeLine || !this.lyricsContainer) return;\n\n const paddingTop = this.getScrollPaddingTop();\n const targetTranslateY = paddingTop - activeLine.offsetTop;\n\n const scrollContainerTop = this.lyricsContainer.getBoundingClientRect().top;\n\n // Skip if already at target position\n if (\n !forceScroll &&\n Math.abs(\n activeLine.getBoundingClientRect().top -\n scrollContainerTop -\n paddingTop,\n ) < 1\n ) {\n return;\n }\n\n // Skip scroll if near the bottom of content (prevents footer jitter)\n if (!forceScroll) {\n const parent = this.lyricsContainer;\n const atBottom =\n parent.scrollTop + parent.clientHeight >= parent.scrollHeight - 50;\n if (atBottom) {\n return;\n }\n }\n\n this.lyricsContainer.classList.remove('not-focused', 'user-scrolling');\n this.isProgrammaticScroll = true;\n this.isUserScrolling = false;\n\n if (this.userScrollTimeoutId) {\n clearTimeout(this.userScrollTimeoutId);\n this.userScrollTimeoutId = undefined;\n }\n\n setTimeout(() => {\n this.isProgrammaticScroll = false;\n }, 600);\n\n this.animateScrollYouLy(targetTranslateY, forceScroll);\n }\n\n /**\n * Update syllable highlight animation - apply CSS wipe animation\n * (Exact copy from YouLyPlus _updateSyllableAnimation)\n */\n private static updateSyllableAnimation(syllable: HTMLElement): void {\n if (syllable.classList.contains('highlight')) return;\n\n const { classList } = syllable;\n const isRTL = classList.contains('rtl-text');\n const charSpans = Array.from(\n syllable.querySelectorAll('span.char'),\n ) as HTMLElement[];\n const wordElement = syllable.parentElement?.parentElement; // syllable-wrap -> word\n const allWordCharSpans = wordElement\n ? (Array.from(wordElement.querySelectorAll('span.char')) as HTMLElement[])\n : [];\n const isGrowable = wordElement?.classList.contains('growable');\n const isFirstSyllable =\n syllable.getAttribute('data-syllable-index') === '0';\n const isFirstInContainer = isFirstSyllable; // Simplified\n const isGap = syllable.closest('.lyrics-gap') !== null;\n\n // Get duration from data attribute\n const syllableDurationMs =\n parseFloat(syllable.getAttribute('data-duration') || '0') || 300;\n const wordDurationMs =\n parseFloat(\n syllable.getAttribute('data-word-duration') ||\n syllable.getAttribute('data-duration') ||\n '0',\n ) || syllableDurationMs;\n\n // Use a Map to collect animations like YouLyPlus\n const charAnimationsMap = new Map<HTMLElement, string>();\n const styleUpdates: Array<{\n element: HTMLElement;\n property: string;\n value: string;\n }> = [];\n\n // Step 1: Grow Pass - apply grow-dynamic to ALL word chars on first syllable\n if (isGrowable && isFirstSyllable && allWordCharSpans.length > 0) {\n const finalDuration = wordDurationMs;\n const baseDelayPerChar = finalDuration * 0.09;\n const growDurationMs = finalDuration * 1.5;\n\n allWordCharSpans.forEach(span => {\n const horizontalOffset = parseFloat(\n span.dataset.horizontalOffset || '0',\n );\n // Use syllableCharIndex like YouLyPlus, not loop index\n const charIndex = parseFloat(span.dataset.syllableCharIndex || '0');\n const growDelay = baseDelayPerChar * charIndex;\n\n // READ DATA ATTRIBUTES for style values\n const maxScale = span.dataset.maxScale || '1.1';\n const shadowIntensity = span.dataset.shadowIntensity || '0.6';\n const translateYPeak = span.dataset.translateYPeak || '-2';\n\n charAnimationsMap.set(\n span,\n `grow-dynamic ${growDurationMs}ms ease-in-out ${growDelay}ms forwards`,\n );\n\n // Push style updates to be applied imperatively\n styleUpdates.push({\n element: span,\n property: '--char-offset-x',\n value: `${horizontalOffset}`, // Fixed: removed px suitable for matrix3d\n });\n styleUpdates.push({\n element: span,\n property: '--max-scale',\n value: maxScale,\n });\n styleUpdates.push({\n element: span,\n property: '--shadow-intensity',\n value: shadowIntensity,\n });\n styleUpdates.push({\n element: span,\n property: '--translate-y-peak',\n value: `${translateYPeak}`, // Fixed: removed % because matrix3d expects raw number\n });\n });\n }\n\n // Step 2: Wipe Pass\n if (charSpans.length > 0) {\n // Per-character wipe for growable words (matching YouLyPlus)\n charSpans.forEach((span, charIndex) => {\n const startPct = parseFloat(span.dataset.wipeStart || '0');\n const durationPct = parseFloat(span.dataset.wipeDuration || '0');\n\n const wipeDelay = syllableDurationMs * startPct;\n const wipeDuration = syllableDurationMs * durationPct;\n\n const useStartAnimation = isFirstInContainer && charIndex === 0;\n let charWipeAnimation: string;\n if (useStartAnimation) {\n charWipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n charWipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n // Get existing animation from map (grow-dynamic) and combine with wipe\n const existingAnimation =\n charAnimationsMap.get(span) || span.style.animation || '';\n const animationParts: string[] = [];\n\n if (existingAnimation && existingAnimation.includes('grow-dynamic')) {\n animationParts.push(existingAnimation.split(',')[0].trim());\n }\n\n if (wipeDuration > 0) {\n animationParts.push(\n `${charWipeAnimation} ${wipeDuration}ms linear ${wipeDelay}ms forwards`,\n );\n }\n\n charAnimationsMap.set(span, animationParts.join(', '));\n });\n } else {\n // Syllable-level wipe for regular (non-growable) words\n const wipeRatio = parseFloat(\n syllable.getAttribute('data-wipe-ratio') || '1',\n );\n const visualDuration = syllableDurationMs * wipeRatio;\n\n let wipeAnimation: string;\n if (isFirstInContainer) {\n wipeAnimation = isRTL ? 'start-wipe-rtl' : 'start-wipe';\n } else {\n wipeAnimation = isRTL ? 'wipe-rtl' : 'wipe';\n }\n\n if (syllable.classList.contains('line-synced')) {\n // If line-synced, just add the class for CSS animation, or ensure valid state\n // The CSS rule .lyrics-syllable.line-synced handles the fade\n return;\n }\n\n const currentWipeAnimation = isGap ? 'fade-gap' : wipeAnimation;\n const syllableAnimation = `${currentWipeAnimation} ${visualDuration}ms ${isGap ? 'ease-out' : 'linear'} forwards`;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = syllableAnimation;\n }\n\n // --- WRITE PHASE ---\n classList.remove('pre-highlight');\n classList.add('highlight');\n\n for (const [span, animationString] of charAnimationsMap.entries()) {\n span.style.animation = animationString;\n }\n\n // Apply style updates\n for (const update of styleUpdates) {\n update.element.style.setProperty(update.property, update.value);\n }\n }\n\n /**\n * Reset syllable animation state\n */\n private static resetSyllable(syllable: HTMLElement): void {\n if (!syllable) return;\n // eslint-disable-next-line no-param-reassign\n syllable.style.animation = '';\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n // Force background to secondary and disable transition to prevent lingering white\n // eslint-disable-next-line no-param-reassign\n syllable.style.transition = 'none';\n // eslint-disable-next-line no-param-reassign\n syllable.style.backgroundColor = 'var(--lyplus-text-secondary)';\n\n // Reset character animations — disable transition so finished chars don't slowly fade\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.animation = '';\n el.style.transition = 'none';\n el.style.backgroundColor = 'var(--lyplus-text-secondary)';\n });\n\n // Immediately remove all state classes\n syllable.classList.remove(\n 'highlight',\n 'finished',\n 'pre-highlight',\n 'cleanup',\n );\n\n // In next frame, clear inline styles so CSS transitions can resume for future use\n requestAnimationFrame(() => {\n syllable.style.removeProperty('background-color');\n syllable.style.removeProperty('transition');\n syllable.querySelectorAll('span.char').forEach(span => {\n const el = span as HTMLElement;\n el.style.removeProperty('background-color');\n el.style.removeProperty('transition');\n });\n });\n }\n\n /**\n * Reset all syllables in a line\n */\n private static resetSyllables(line: HTMLElement): void {\n if (!line) return;\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = null;\n Array.from(line.getElementsByClassName('lyrics-syllable')).forEach(\n syllable => AmLyrics.resetSyllable(syllable as HTMLElement),\n );\n }\n\n /**\n * Update syllables based on current time\n * Uses DOM caching and pre-highlight reset for smooth transitions\n */\n private static updateSyllablesForLine(\n line: HTMLElement,\n currentTimeMs: number,\n ): void {\n // DOM cache: avoid querySelectorAll on every frame\n let syllables: HTMLElement[] = (line as any)._cachedSyllableElements;\n if (!syllables) {\n syllables = Array.from(\n line.querySelectorAll('.lyrics-syllable'),\n ) as HTMLElement[];\n // eslint-disable-next-line no-param-reassign\n (line as any)._cachedSyllableElements = syllables;\n }\n\n for (let i = 0; i < syllables.length; i += 1) {\n const syllable = syllables[i];\n const startTime = parseFloat(\n syllable.getAttribute('data-start-time') || '0',\n );\n const endTime = parseFloat(syllable.getAttribute('data-end-time') || '0');\n\n if (startTime) {\n const { classList } = syllable;\n const hasHighlight = classList.contains('highlight');\n const hasFinished = classList.contains('finished');\n const hasPreHighlight = classList.contains('pre-highlight');\n const hasActiveState = hasHighlight || hasFinished || hasPreHighlight;\n\n // Early exit check\n if (!(currentTimeMs < startTime - 1000 && !hasActiveState)) {\n let preHighlightReset = false;\n\n // Pre-highlight reset logic\n if (hasPreHighlight && i > 0) {\n const prevSyllable = syllables[i - 1];\n if (!prevSyllable.classList.contains('highlight')) {\n classList.remove('pre-highlight');\n syllable.style.removeProperty('--pre-wipe-duration');\n syllable.style.removeProperty('--pre-wipe-delay');\n syllable.style.animation = '';\n preHighlightReset = true;\n }\n }\n\n if (!preHighlightReset) {\n if (currentTimeMs >= startTime && currentTimeMs <= endTime) {\n // Currently active\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n if (hasFinished) {\n classList.remove('finished');\n }\n } else if (currentTimeMs > endTime) {\n // Finished\n if (!hasFinished) {\n if (!hasHighlight) {\n AmLyrics.updateSyllableAnimation(syllable);\n }\n classList.add('finished');\n }\n } else if (hasHighlight || hasFinished) {\n // Not yet started\n AmLyrics.resetSyllable(syllable);\n }\n }\n }\n }\n }\n }\n\n private animateProgress() {\n const now = performance.now();\n let running = false;\n\n if (!this.lyrics || this.activeLineIndices.length === 0) {\n if (this.animationFrameId) {\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n return;\n }\n\n // Process each active line\n for (const lineIndex of this.activeLineIndices) {\n const line = this.lyrics[lineIndex];\n const mainWordAnimation = this.mainWordAnimations.get(lineIndex);\n\n // Main text animation\n if (mainWordAnimation && mainWordAnimation.duration > 0) {\n const elapsed = now - mainWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(1, elapsed / mainWordAnimation.duration);\n this.mainWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentMainWordIndex =\n this.activeMainWordIndices.get(lineIndex) ?? -1;\n const nextWordIndex = currentMainWordIndex + 1;\n if (\n currentMainWordIndex !== -1 &&\n nextWordIndex < line.text.length\n ) {\n const currentWord = line.text[currentMainWordIndex];\n const nextWord = line.text[nextWordIndex];\n\n this.activeMainWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.mainWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.mainWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.mainWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n\n // Background text animation\n const backgroundWordAnimation =\n this.backgroundWordAnimations.get(lineIndex);\n if (backgroundWordAnimation && backgroundWordAnimation.duration > 0) {\n const elapsed = now - backgroundWordAnimation.startTime;\n if (elapsed >= 0) {\n const progress = Math.min(\n 1,\n elapsed / backgroundWordAnimation.duration,\n );\n this.backgroundWordProgress.set(lineIndex, progress);\n\n if (progress < 1) {\n running = true;\n } else {\n // Word animation finished. Look for the next word in the same line.\n const currentBackgroundWordIndex =\n this.activeBackgroundWordIndices.get(lineIndex) ?? -1;\n if (\n line.backgroundText &&\n currentBackgroundWordIndex !== -1 &&\n currentBackgroundWordIndex < line.backgroundText.length - 1\n ) {\n const nextWordIndex = currentBackgroundWordIndex + 1;\n const currentWord =\n line.backgroundText[currentBackgroundWordIndex];\n const nextWord = line.backgroundText[nextWordIndex];\n\n this.activeBackgroundWordIndices.set(lineIndex, nextWordIndex);\n const gap = nextWord.timestamp - currentWord.endtime;\n const nextWordDuration = nextWord.endtime - nextWord.timestamp;\n\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: performance.now() + gap,\n duration: nextWordDuration,\n });\n running = true;\n } else {\n this.backgroundWordAnimations.set(lineIndex, {\n startTime: 0,\n duration: 0,\n });\n }\n }\n } else {\n // Waiting in a gap\n this.backgroundWordProgress.set(lineIndex, 0);\n running = true;\n }\n }\n }\n\n if (running) {\n this.animationFrameId = requestAnimationFrame(\n this.animateProgress.bind(this),\n );\n } else if (this.animationFrameId) {\n // Stop animation if no words are running\n cancelAnimationFrame(this.animationFrameId);\n this.animationFrameId = undefined;\n }\n }\n\n private generateLRC(): string {\n if (!this.lyrics) return '';\n let lrc = '';\n\n // Add metadata if available\n if (this.songTitle) lrc += `[ti:${this.songTitle}]\\n`;\n if (this.songArtist) lrc += `[ar:${this.songArtist}]\\n`;\n if (this.songAlbum) lrc += `[al:${this.songAlbum}]\\n`;\n if (this.lyricsSource) lrc += `[re:${this.lyricsSource}]\\n`;\n\n for (const line of this.lyrics) {\n if (line.text && line.text.length > 0) {\n const timestamp = AmLyrics.formatTimestampLRC(line.timestamp);\n // Construct line text from syllables\n const lineText = line.text\n .map(s => s.text)\n .join('')\n .trim();\n lrc += `[${timestamp}]${lineText}\\n`;\n }\n }\n\n return lrc;\n }\n\n private generateTTML(): string {\n if (!this.lyrics) return '';\n\n // Basic TTML structure\n let ttml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n ttml +=\n '<tt xmlns=\"http://www.w3.org/ns/ttml\" xmlns:itunes=\"http://music.apple.com/lyrics\">\\n';\n ttml += ' <body>\\n';\n\n let currentPart: string | undefined;\n\n for (let i = 0; i < this.lyrics.length; i += 1) {\n const line = this.lyrics[i];\n const part = line.songPart;\n\n // If part changed (or first line), start new div\n if (part !== currentPart || i === 0) {\n if (i > 0) {\n ttml += ' </div>\\n';\n }\n currentPart = part;\n if (currentPart) {\n ttml += ` <div itunes:song-part=\"${currentPart}\">\\n`;\n } else {\n ttml += ' <div>\\n';\n }\n }\n\n // For TTML, we can represent syllables as spans if word-synced\n const begin = AmLyrics.formatTimestampTTML(line.timestamp);\n const end = AmLyrics.formatTimestampTTML(line.endtime);\n\n ttml += ` <p begin=\"${begin}\" end=\"${end}\">\\n`;\n\n for (const word of line.text) {\n const wBegin = AmLyrics.formatTimestampTTML(word.timestamp);\n const wEnd = AmLyrics.formatTimestampTTML(word.endtime);\n // Escape special characters in text\n const text = word.text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;');\n\n ttml += ` <span begin=\"${wBegin}\" end=\"${wEnd}\">${text}</span>\\n`;\n }\n\n ttml += ' </p>\\n';\n }\n\n if (this.lyrics.length > 0) {\n ttml += ' </div>\\n';\n }\n\n ttml += ' </body>\\n';\n ttml += '</tt>';\n\n return ttml;\n }\n\n private static formatTimestampLRC(ms: number): string {\n const totalSeconds = ms / 1000;\n const minutes = Math.floor(totalSeconds / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const hundredths = Math.floor((ms % 1000) / 10);\n\n const pad = (n: number) => n.toString().padStart(2, '0');\n return `${pad(minutes)}:${pad(seconds)}.${pad(hundredths)}`;\n }\n\n private static formatTimestampTTML(ms: number): string {\n // TTML standard format: HH:MM:SS.mmm\n const totalSeconds = ms / 1000;\n const hours = Math.floor(totalSeconds / 3600);\n const minutes = Math.floor((totalSeconds % 3600) / 60);\n const seconds = Math.floor(totalSeconds % 60);\n const milliseconds = Math.floor(ms % 1000);\n\n const pad = (n: number, width = 2) => n.toString().padStart(width, '0');\n return `${pad(hours)}:${pad(minutes)}:${pad(seconds)}.${pad(milliseconds, 3)}`;\n }\n\n private downloadLyrics() {\n if (!this.lyrics || this.lyrics.length === 0) return;\n\n // Determine format: TTML if ANY line is word-synced, else LRC\n const isWordSynced = this.lyrics.some(l => l.isWordSynced !== false);\n\n let content = '';\n let extension = this.downloadFormat;\n if (extension === 'auto') {\n extension = isWordSynced ? 'ttml' : 'lrc';\n }\n let mimeType = '';\n\n if (extension === 'ttml') {\n content = this.generateTTML();\n mimeType = 'application/xml';\n } else {\n content = this.generateLRC();\n mimeType = 'text/plain';\n }\n\n if (!content) return;\n\n const blob = new Blob([content], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n\n const filename = this.songTitle\n ? `${this.songTitle}${this.songArtist ? ` - ${this.songArtist}` : ''}.${extension}`\n : `lyrics.${extension}`;\n\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n\n render() {\n if (this.fontFamily) {\n this.style.fontFamily = this.fontFamily;\n }\n\n // Set both old internal CSS variables (for backward compatibility)\n // and new public CSS variables (which take precedence)\n this.style.setProperty(\n '--hover-background-color',\n this.hoverBackgroundColor,\n );\n this.style.setProperty('--highlight-color', this.highlightColor);\n\n const sourceLabel = this.lyricsSource ?? 'Unavailable';\n\n const renderContent = () => {\n if (this.isLoading) {\n // Render stylized skeleton lines\n return html`\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n <div class=\"skeleton-line\"></div>\n `;\n }\n if (!this.lyrics || this.lyrics.length === 0) {\n return html`<div class=\"no-lyrics\">No lyrics found.</div>`;\n }\n\n // Build a lookup map of ALL gaps so they are always in the DOM\n const allGaps = this.findAllInstrumentalGaps();\n const gapByIndex = new Map(\n allGaps.map(g => [g.insertBeforeIndex, g] as const),\n );\n\n return this.lyrics.map((line, lineIndex) => {\n const isLineActive = this.activeLineIndices.includes(lineIndex);\n const lineId = `lyrics-line-${lineIndex}`;\n\n // Calculate line timing\n const lineStartTime = line.text[0]?.timestamp || 0;\n const lineEndTime = line.text[line.text.length - 1]?.endtime || 0;\n\n // Check for background vocals playing\n const bgIsPlayingNow =\n line.backgroundText && line.backgroundText.length > 0\n ? line.backgroundText.some(\n syl =>\n this.currentTime >= syl.timestamp &&\n this.currentTime <= syl.endtime,\n )\n : false;\n\n const shouldShowBackground =\n line.backgroundText &&\n line.backgroundText.length > 0 &&\n (isLineActive || bgIsPlayingNow);\n\n // Create background vocals container\n const backgroundVocalElement = shouldShowBackground\n ? html`<p class=\"background-vocal-container\">\n ${line.backgroundText!.map((syllable, syllableIndex) => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n\n return html`<span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable ${syllable.lineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"${syllableIndex}\"\n >${syllable.text}</span\n >\n </span>\n </span>`;\n })}\n </p>`\n : '';\n\n // Create main vocals using YouLyPlus syllable structure\n const mainVocalElement = html`<p class=\"main-vocal-container\">\n ${line.text.map(syllable => {\n const startTimeMs = syllable.timestamp;\n const endTimeMs = syllable.endtime;\n const durationMs = endTimeMs - startTimeMs;\n const text = syllable.text || '';\n const trimmedText = text.trim();\n\n // YouLyPlus growable criteria: short words (<=7 chars), long duration (>=1000ms), not CJK, not RTL\n const isCJK =\n /[\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\uac00-\\ud7af]/.test(\n trimmedText,\n );\n const isRTL =\n /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u0590-\\u05FF]/.test(\n trimmedText,\n );\n const hasHyphen = trimmedText.includes('-');\n const isGrowable =\n !isCJK &&\n !isRTL &&\n !hasHyphen &&\n trimmedText.length <= 7 &&\n trimmedText.length > 0 &&\n durationMs >= 700 &&\n durationMs >= trimmedText.length * 300;\n\n // Optional romanization per syllable\n const romanizedText =\n this.showRomanization && syllable.romanizedText\n ? html`<span\n class=\"lyrics-syllable transliteration ${syllable.lineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"0\"\n >${syllable.romanizedText}</span\n >`\n : '';\n\n // For growable words, wrap each character in a span with YouLyPlus applyGrowthStyles\n const syllableContent = isGrowable\n ? html`${text.split('').map((char, charIndex) => {\n if (char === ' ') {\n return ' ';\n }\n const numChars = trimmedText.length;\n const charStartPercent = charIndex / text.length;\n\n // YouLyPlus emphasisMetrics calculation\n const minDuration = 1000;\n const maxDuration = 5000;\n const easingPower = 3;\n const progress = Math.min(\n 1,\n Math.max(\n 0,\n (durationMs - minDuration) / (maxDuration - minDuration),\n ),\n );\n const easedProgress = progress ** easingPower;\n\n // Decay calculation for long/short words\n const isLongWord = numChars > 5;\n const isShortDuration = durationMs < 1500;\n let maxDecayRate = 0;\n if (isLongWord || isShortDuration) {\n let decayStrength = 0;\n if (isLongWord)\n decayStrength += Math.min((numChars - 5) / 3, 1.0) * 0.4;\n if (isShortDuration)\n decayStrength +=\n Math.max(0, 1.0 - (durationMs - 1000) / 500) * 0.4;\n maxDecayRate = Math.min(decayStrength, 0.85);\n }\n\n // Per-character calculations (exact YouLyPlus logic)\n const positionInWord =\n numChars > 1 ? charIndex / (numChars - 1) : 0;\n const decayFactor = 1.0 - positionInWord * maxDecayRate;\n const charProgress = easedProgress * decayFactor;\n\n const baseGrowth = numChars <= 3 ? 0.07 : 0.05;\n const charMaxScale = 1.0 + baseGrowth + charProgress * 0.1;\n const charShadowIntensity = 0.4 + charProgress * 0.4;\n const normalizedGrowth = (charMaxScale - 1.0) / 0.13;\n const charTranslateYPeak = -normalizedGrowth * 6;\n\n // Horizontal offset (simplified - YouLyPlus uses actual text width measurement)\n const position = (charIndex + 0.5) / numChars;\n const horizontalOffset =\n (position - 0.5) * 2 * ((charMaxScale - 1.0) * 25);\n\n // MOVED TO DATA ATTRIBUTES and removed style attribute to avoid Lit conflict\n return html`<span\n class=\"char\"\n data-char-index=\"${charIndex}\"\n data-syllable-char-index=\"${charIndex}\"\n data-wipe-start=\"${charStartPercent.toFixed(4)}\"\n data-wipe-duration=\"${(1 / text.length).toFixed(4)}\"\n data-horizontal-offset=\"${horizontalOffset.toFixed(2)}\"\n data-max-scale=\"${charMaxScale.toFixed(3)}\"\n data-shadow-intensity=\"${charShadowIntensity.toFixed(3)}\"\n data-translate-y-peak=\"${charTranslateYPeak.toFixed(3)}\"\n >${char}</span\n >`;\n })}`\n : text;\n\n return html`<span\n class=\"lyrics-word ${isGrowable ? 'growable' : ''}\"\n >\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable ${syllable.lineSynced\n ? 'line-synced'\n : ''}\"\n data-start-time=\"${startTimeMs}\"\n data-end-time=\"${endTimeMs}\"\n data-duration=\"${durationMs}\"\n data-syllable-index=\"0\"\n data-wipe-ratio=\"1\"\n >${syllableContent}</span\n >\n ${romanizedText}\n </span>\n </span>`;\n })}\n </p>`;\n\n // Translation container (if enabled)\n const translationElement =\n this.showTranslation && line.translation\n ? html`<div class=\"lyrics-translation-container\">\n ${line.translation}\n </div>`\n : '';\n\n // Line-synced romanization (fallback if no word-level romanization)\n const lineRomanizationElement =\n this.showRomanization &&\n line.romanizedText &&\n !line.text.some(s => s.romanizedText)\n ? html`<div class=\"lyrics-romanization-container\">\n ${line.romanizedText}\n </div>`\n : '';\n\n // Check for instrumental gap before this line\n let maybeInstrumentalBlock: unknown = null;\n const gapForLine = gapByIndex.get(lineIndex);\n if (gapForLine) {\n // Calculate dot timing for fill-up animation (3 dots)\n const dotDuration = (gapForLine.gapEnd - gapForLine.gapStart) / 3;\n\n // Gap starts without 'active' — _onTimeChanged toggles it imperatively\n maybeInstrumentalBlock = html`<div\n id=\"gap-${lineIndex}\"\n class=\"lyrics-line lyrics-gap\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n >\n <div class=\"lyrics-line-container\">\n <p class=\"main-vocal-container\">\n <span class=\"lyrics-word\">\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"0\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration}\"\n data-end-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"1\"\n ></span>\n </span>\n <span class=\"lyrics-syllable-wrap\">\n <span\n class=\"lyrics-syllable\"\n data-start-time=\"${gapForLine.gapStart + dotDuration * 2}\"\n data-end-time=\"${gapForLine.gapEnd}\"\n data-duration=\"${dotDuration}\"\n data-wipe-ratio=\"1\"\n data-syllable-index=\"2\"\n ></span>\n </span>\n </span>\n </p>\n </div>\n </div>`;\n }\n\n return html`\n ${maybeInstrumentalBlock}\n <div\n id=\"${lineId}\"\n class=\"lyrics-line ${isLineActive\n ? 'active'\n : ''} ${line.alignment === 'end'\n ? 'singer-right'\n : 'singer-left'}\"\n data-start-time=\"${lineStartTime}\"\n data-end-time=\"${lineEndTime}\"\n @click=${() => this.handleLineClick(line)}\n tabindex=\"0\"\n @keydown=${(e: KeyboardEvent) => {\n if (e.key === 'Enter' || e.key === ' ') {\n this.handleLineClick(line);\n }\n }}\n >\n <div class=\"lyrics-line-container\">\n ${mainVocalElement} ${backgroundVocalElement}\n ${translationElement} ${lineRomanizationElement}\n </div>\n </div>\n `;\n });\n };\n\n return html`\n <div\n class=\"lyrics-container blur-inactive-enabled ${this.isUserScrolling\n ? 'user-scrolling'\n : ''}\"\n >\n ${!this.isLoading && this.lyrics && this.lyrics.length > 0\n ? html`\n <div class=\"lyrics-header\">\n <div class=\"header-controls\">\n <button\n class=\"download-button ${this.showRomanization\n ? 'active'\n : ''}\"\n @click=${this.toggleRomanization}\n title=\"Toggle Romanization\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-speech-icon lucide-speech\"\n >\n <path\n d=\"M8.8 20v-4.1l1.9.2a2.3 2.3 0 0 0 2.164-2.1V8.3A5.37 5.37 0 0 0 2 8.25c0 2.8.656 3.054 1 4.55a5.77 5.77 0 0 1 .029 2.758L2 20\"\n />\n <path d=\"M19.8 17.8a7.5 7.5 0 0 0 .003-10.603\" />\n <path d=\"M17 15a3.5 3.5 0 0 0-.025-4.975\" />\n </svg>\n </button>\n <button\n class=\"download-button ${this.showTranslation\n ? 'active'\n : ''}\"\n @click=${this.toggleTranslation}\n title=\"Toggle Translation\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-languages-icon lucide-languages\"\n >\n <path d=\"m5 8 6 6\" />\n <path d=\"m4 14 6-6 2-3\" />\n <path d=\"M2 5h12\" />\n <path d=\"M7 2h1\" />\n <path d=\"m22 22-5-10-5 10\" />\n <path d=\"M14 18h6\" />\n </svg>\n </button>\n </div>\n <div class=\"download-controls\">\n <select\n class=\"format-select\"\n @change=${(e: Event) => {\n this.downloadFormat = (e.target as HTMLSelectElement)\n .value as 'lrc' | 'ttml';\n }}\n .value=${this.downloadFormat}\n @click=${(e: Event) => e.stopPropagation()}\n >\n <option value=\"auto\">Auto</option>\n <option value=\"lrc\">LRC</option>\n <option value=\"ttml\">TTML</option>\n </select>\n <button\n class=\"download-button\"\n @click=${this.downloadLyrics}\n title=\"Download Lyrics\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"lucide lucide-download-icon lucide-download\"\n >\n <path d=\"M12 15V3\" />\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <path d=\"m7 10 5 5 5-5\" />\n </svg>\n </button>\n </div>\n </div>\n `\n : ''}\n ${renderContent()}\n ${!this.isLoading\n ? html`\n <footer class=\"lyrics-footer\">\n <div class=\"footer-content\">\n <span class=\"source-info\">Source: ${sourceLabel}</span>\n <span class=\"version-info\">\n v${VERSION} •\n\n <a\n href=\"https://github.com/uimaxbai/apple-music-web-components\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >Star me on GitHub</a\n >\n </span>\n </div>\n </footer>\n `\n : ''}\n </div>\n `;\n }\n}\n","import React from 'react';\nimport { createComponent } from '@lit/react';\nimport { AmLyrics as AmLyricsWC } from './AmLyrics.js';\n\n// This creates the React-usable component\nexport const AmLyrics = createComponent({\n tagName: 'am-lyrics',\n elementClass: AmLyricsWC,\n react: React,\n // Map custom events to React-style on<Event> props\n events: {\n onLineClick: 'line-click',\n },\n});\n"],"names":["t","e","s","o","r","n","i","S","c","h","a","l","p","d","u","f","b","y","LitElement","html","AmLyrics","css","property","state","query","AmLyricsWC"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8]}