i18next-cli 1.70.0 → 1.70.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/cli.js CHANGED
@@ -37,7 +37,7 @@ const program = new commander.Command();
37
37
  program
38
38
  .name('i18next-cli')
39
39
  .description('A unified, high-performance i18next CLI.')
40
- .version('1.70.0'); // This string is replaced with the actual version at build time by rollup
40
+ .version('1.70.1'); // This string is replaced with the actual version at build time by rollup
41
41
  // new: global config override option
42
42
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
43
43
  program
@@ -611,6 +611,23 @@ class ASTVisitors {
611
611
  return extractStringLiteralValue(node.typeParams[0]);
612
612
  return undefined;
613
613
  };
614
+ // `ReturnType<typeof useTranslation<'ns', 'kp'>>['t']` is `TFunction<'ns', 'kp'>` spelled indirectly.
615
+ if (typeAnn?.type === 'TsIndexedAccessType' && extractStringLiteralValue(typeAnn.indexType) === 't') {
616
+ const obj = typeAnn.objectType;
617
+ const query = obj?.type === 'TsTypeReference' && extractTypeName(obj) === 'ReturnType'
618
+ ? (obj.typeParams?.params?.[0] ?? obj.typeArguments?.params?.[0])
619
+ : undefined;
620
+ const hookName = query?.type === 'TsTypeQuery' ? (query.exprName?.value ?? query.exprName?.name) : undefined;
621
+ const hookNames = this.config.extract.useTranslationNames || ['useTranslation', 'getT', 'useT'];
622
+ if (hookName && hookNames.some(h => (typeof h === 'string' ? h : h.name) === hookName)) {
623
+ const params = query.typeArguments?.params ?? query.typeArgs?.params ?? [];
624
+ const ns = extractStringLiteralValue(params[0]);
625
+ const kp = extractStringLiteralValue(params[1]);
626
+ if (ns || kp)
627
+ this.scopeManager.setVarInScope(paramKey, { defaultNs: ns, keyPrefix: kp });
628
+ }
629
+ return;
630
+ }
614
631
  // Detect TsTypeReference like: TFunction<"my-custom-namespace">
615
632
  if (typeAnn && (typeAnn.type === 'TsTypeReference' || typeAnn.type === 'TsTypeRef' || typeAnn.type === 'TsTypeReference')) {
616
633
  const finalTypeName = extractTypeName(typeAnn);
@@ -312,7 +312,9 @@ function collectCommentTexts(src) {
312
312
  const commentRegex = /\/\/(.*)|\/\*([\s\S]*?)\*\//g;
313
313
  let cmatch;
314
314
  while ((cmatch = commentRegex.exec(src)) !== null) {
315
- const content = cmatch[1] ?? cmatch[2];
315
+ // Strip fenced code blocks (```…```) from doc comments: they are usage
316
+ // examples, not real call sites, and would otherwise pollute the default namespace.
317
+ const content = (cmatch[1] ?? cmatch[2]).replace(/```[\s\S]*?```/g, '');
316
318
  const s = content.trim();
317
319
  if (s && !seen.has(s)) {
318
320
  seen.add(s);
@@ -267,6 +267,17 @@ class ScopeManager {
267
267
  }
268
268
  // continue processing; still may be a useTranslation/getFixedT call below
269
269
  }
270
+ // Handle: const t = useCallback((key, opts) => tLocal(key, opts), [...]) OR
271
+ // const t = (key, opts) => tLocal(key, opts)
272
+ // A wrapper that forwards its first parameter as the key to an already-scoped
273
+ // translation function inherits that function's scope.
274
+ if (node.id.type === 'Identifier') {
275
+ const wrapped = this.resolveDelegatingWrapperScope(init);
276
+ if (wrapped) {
277
+ this.setVarInScope(node.id.value, wrapped);
278
+ return;
279
+ }
280
+ }
270
281
  // Handle: const { t } = this.#field OR const { t } = this.#field()
271
282
  // Resolve the source `this.<field>` to its previously-registered ScopeInfo
272
283
  // and propagate it onto the destructured variables.
@@ -579,6 +590,51 @@ class ScopeManager {
579
590
  }
580
591
  return {};
581
592
  }
593
+ /**
594
+ * If `init` is a function (optionally wrapped in `useCallback(fn, deps)`) whose
595
+ * first parameter is passed as the first argument to a call of an already-scoped
596
+ * variable (e.g. `tLocal(key, opts)`), return that variable's ScopeInfo.
597
+ */
598
+ resolveDelegatingWrapperScope(init) {
599
+ let fn = ScopeManager.unwrapTsExpression(init);
600
+ if (fn?.type === 'CallExpression' && fn.callee?.type === 'Identifier' && fn.callee.value === 'useCallback') {
601
+ fn = fn.arguments?.[0]?.expression;
602
+ }
603
+ if (fn?.type !== 'ArrowFunctionExpression' && fn?.type !== 'FunctionExpression')
604
+ return undefined;
605
+ const first = fn.params?.[0];
606
+ const pat = first?.pat ?? first;
607
+ const keyParam = pat?.type === 'Identifier' ? pat.value : undefined;
608
+ if (!keyParam)
609
+ return undefined;
610
+ let found;
611
+ const visit = (n) => {
612
+ if (found || !n || typeof n !== 'object')
613
+ return;
614
+ if (Array.isArray(n)) {
615
+ for (const c of n)
616
+ visit(c);
617
+ return;
618
+ }
619
+ if (n.type === 'CallExpression' &&
620
+ n.callee?.type === 'Identifier' &&
621
+ n.arguments?.[0]?.expression?.type === 'Identifier' &&
622
+ n.arguments[0].expression.value === keyParam) {
623
+ const scope = this.getVarFromScope(n.callee.value);
624
+ if (scope) {
625
+ found = scope;
626
+ return;
627
+ }
628
+ }
629
+ for (const k of Object.keys(n)) {
630
+ if (k === 'span')
631
+ continue;
632
+ visit(n[k]);
633
+ }
634
+ };
635
+ visit(fn.body);
636
+ return found;
637
+ }
582
638
  resolveStringArg(node) {
583
639
  if (!node)
584
640
  return undefined;
package/dist/esm/cli.js CHANGED
@@ -31,7 +31,7 @@ const program = new Command();
31
31
  program
32
32
  .name('i18next-cli')
33
33
  .description('A unified, high-performance i18next CLI.')
34
- .version('1.70.0'); // This string is replaced with the actual version at build time by rollup
34
+ .version('1.70.1'); // This string is replaced with the actual version at build time by rollup
35
35
  // new: global config override option
36
36
  program.option('-c, --config <path>', 'Path to i18next-cli config file (overrides detection)');
37
37
  program
@@ -609,6 +609,23 @@ class ASTVisitors {
609
609
  return extractStringLiteralValue(node.typeParams[0]);
610
610
  return undefined;
611
611
  };
612
+ // `ReturnType<typeof useTranslation<'ns', 'kp'>>['t']` is `TFunction<'ns', 'kp'>` spelled indirectly.
613
+ if (typeAnn?.type === 'TsIndexedAccessType' && extractStringLiteralValue(typeAnn.indexType) === 't') {
614
+ const obj = typeAnn.objectType;
615
+ const query = obj?.type === 'TsTypeReference' && extractTypeName(obj) === 'ReturnType'
616
+ ? (obj.typeParams?.params?.[0] ?? obj.typeArguments?.params?.[0])
617
+ : undefined;
618
+ const hookName = query?.type === 'TsTypeQuery' ? (query.exprName?.value ?? query.exprName?.name) : undefined;
619
+ const hookNames = this.config.extract.useTranslationNames || ['useTranslation', 'getT', 'useT'];
620
+ if (hookName && hookNames.some(h => (typeof h === 'string' ? h : h.name) === hookName)) {
621
+ const params = query.typeArguments?.params ?? query.typeArgs?.params ?? [];
622
+ const ns = extractStringLiteralValue(params[0]);
623
+ const kp = extractStringLiteralValue(params[1]);
624
+ if (ns || kp)
625
+ this.scopeManager.setVarInScope(paramKey, { defaultNs: ns, keyPrefix: kp });
626
+ }
627
+ return;
628
+ }
612
629
  // Detect TsTypeReference like: TFunction<"my-custom-namespace">
613
630
  if (typeAnn && (typeAnn.type === 'TsTypeReference' || typeAnn.type === 'TsTypeRef' || typeAnn.type === 'TsTypeReference')) {
614
631
  const finalTypeName = extractTypeName(typeAnn);
@@ -310,7 +310,9 @@ function collectCommentTexts(src) {
310
310
  const commentRegex = /\/\/(.*)|\/\*([\s\S]*?)\*\//g;
311
311
  let cmatch;
312
312
  while ((cmatch = commentRegex.exec(src)) !== null) {
313
- const content = cmatch[1] ?? cmatch[2];
313
+ // Strip fenced code blocks (```…```) from doc comments: they are usage
314
+ // examples, not real call sites, and would otherwise pollute the default namespace.
315
+ const content = (cmatch[1] ?? cmatch[2]).replace(/```[\s\S]*?```/g, '');
314
316
  const s = content.trim();
315
317
  if (s && !seen.has(s)) {
316
318
  seen.add(s);
@@ -265,6 +265,17 @@ class ScopeManager {
265
265
  }
266
266
  // continue processing; still may be a useTranslation/getFixedT call below
267
267
  }
268
+ // Handle: const t = useCallback((key, opts) => tLocal(key, opts), [...]) OR
269
+ // const t = (key, opts) => tLocal(key, opts)
270
+ // A wrapper that forwards its first parameter as the key to an already-scoped
271
+ // translation function inherits that function's scope.
272
+ if (node.id.type === 'Identifier') {
273
+ const wrapped = this.resolveDelegatingWrapperScope(init);
274
+ if (wrapped) {
275
+ this.setVarInScope(node.id.value, wrapped);
276
+ return;
277
+ }
278
+ }
268
279
  // Handle: const { t } = this.#field OR const { t } = this.#field()
269
280
  // Resolve the source `this.<field>` to its previously-registered ScopeInfo
270
281
  // and propagate it onto the destructured variables.
@@ -577,6 +588,51 @@ class ScopeManager {
577
588
  }
578
589
  return {};
579
590
  }
591
+ /**
592
+ * If `init` is a function (optionally wrapped in `useCallback(fn, deps)`) whose
593
+ * first parameter is passed as the first argument to a call of an already-scoped
594
+ * variable (e.g. `tLocal(key, opts)`), return that variable's ScopeInfo.
595
+ */
596
+ resolveDelegatingWrapperScope(init) {
597
+ let fn = ScopeManager.unwrapTsExpression(init);
598
+ if (fn?.type === 'CallExpression' && fn.callee?.type === 'Identifier' && fn.callee.value === 'useCallback') {
599
+ fn = fn.arguments?.[0]?.expression;
600
+ }
601
+ if (fn?.type !== 'ArrowFunctionExpression' && fn?.type !== 'FunctionExpression')
602
+ return undefined;
603
+ const first = fn.params?.[0];
604
+ const pat = first?.pat ?? first;
605
+ const keyParam = pat?.type === 'Identifier' ? pat.value : undefined;
606
+ if (!keyParam)
607
+ return undefined;
608
+ let found;
609
+ const visit = (n) => {
610
+ if (found || !n || typeof n !== 'object')
611
+ return;
612
+ if (Array.isArray(n)) {
613
+ for (const c of n)
614
+ visit(c);
615
+ return;
616
+ }
617
+ if (n.type === 'CallExpression' &&
618
+ n.callee?.type === 'Identifier' &&
619
+ n.arguments?.[0]?.expression?.type === 'Identifier' &&
620
+ n.arguments[0].expression.value === keyParam) {
621
+ const scope = this.getVarFromScope(n.callee.value);
622
+ if (scope) {
623
+ found = scope;
624
+ return;
625
+ }
626
+ }
627
+ for (const k of Object.keys(n)) {
628
+ if (k === 'span')
629
+ continue;
630
+ visit(n[k]);
631
+ }
632
+ };
633
+ visit(fn.body);
634
+ return found;
635
+ }
580
636
  resolveStringArg(node) {
581
637
  if (!node)
582
638
  return undefined;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "i18next-cli",
3
- "version": "1.70.0",
3
+ "version": "1.70.1",
4
4
  "description": "A unified, high-performance i18next CLI.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- {"version":3,"file":"ast-visitors.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/ast-visitors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAQ,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAItE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAE9B,IAAW,UAAU,gBAEpB;IAED,SAAgB,YAAY,EAAE,YAAY,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;IAEhC;;;;;;OAMG;gBAED,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,kBAAkB;IAiCzC;;;;;;;;;;;;;OAaG;IACI,mBAAmB,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;;;;OAKG;IACI,KAAK,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUjC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI;IAoYZ;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAwF1B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;;;;;;OAQG;IACH,OAAO,CAAC,gCAAgC;IAqDxC;;;;;;;;;OASG;IACH,OAAO,CAAC,0BAA0B;IA+ClC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;;;;;;;OAQG;IACI,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxD;;;;;;OAMG;IACI,cAAc,IAAK,MAAM;IAIhC;;OAEG;IACI,cAAc,IAAK,MAAM;CAGjC"}
1
+ {"version":3,"file":"ast-visitors.d.ts","sourceRoot":"","sources":["../../../src/extractor/core/ast-visitors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAQ,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC7G,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAA;AAItE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAe;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAE9B,IAAW,UAAU,gBAEpB;IAED,SAAgB,YAAY,EAAE,YAAY,CAAA;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAuB;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAa;IAEhC;;;;;;OAMG;gBAED,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC,EAC7C,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,eAAe,EACvB,kBAAkB,CAAC,EAAE,kBAAkB;IAiCzC;;;;;;;;;;;;;OAaG;IACI,mBAAmB,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAK/C;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;;;;OAKG;IACI,KAAK,CAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAUjC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,IAAI;IAoYZ;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAyG1B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;;;;;;OAQG;IACH,OAAO,CAAC,gCAAgC;IAqDxC;;;;;;;;;OASG;IACH,OAAO,CAAC,0BAA0B;IA+ClC;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAqB5B;;;;;;;;OAQG;IACI,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAI5D;;OAEG;IACI,cAAc,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKxD;;;;;;OAMG;IACI,cAAc,IAAK,MAAM;IAIhC;;OAEG;IACI,cAAc,IAAK,MAAM;CAGjC"}
@@ -161,6 +161,12 @@ export declare class ScopeManager {
161
161
  * either single form behaves identically downstream.
162
162
  */
163
163
  private resolveNsArg;
164
+ /**
165
+ * If `init` is a function (optionally wrapped in `useCallback(fn, deps)`) whose
166
+ * first parameter is passed as the first argument to a call of an already-scoped
167
+ * variable (e.g. `tLocal(key, opts)`), return that variable's ScopeInfo.
168
+ */
169
+ private resolveDelegatingWrapperScope;
164
170
  private resolveStringArg;
165
171
  /**
166
172
  * Handles cases where a getFixedT-like function is a variable (from a custom hook)
@@ -1 +1 @@
1
- {"version":3,"file":"scope-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/scope-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,kBAAkB,EAMnB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,SAAS,EAA4B,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAG/F,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,KAAK,CAAqE;IAMlF,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,eAAe,CAAiC;IAGxD,OAAO,CAAC,qBAAqB,CAAiD;IAI9E,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,qBAAqB,CAAiD;gBAEjE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAI1D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAgB9C;;;;;;OAMG;IACI,KAAK,IAAK,IAAI;IAQrB;;;;OAIG;IACH,eAAe,IAAK,IAAI;IAIxB;;;OAGG;IACH,cAAc,IAAK,IAAI;IAIvB;;;;;;;OAOG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAMvD;;;;;OAKG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IASvD;;;OAGG;IACH,UAAU,IAAK,IAAI;IAInB;;;OAGG;IACH,SAAS,IAAK,IAAI;IAIlB;;;;;;OAMG;IACH,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAUnD;;;;;;OAMG;IACH,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAkBrD,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACI,6BAA6B,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvE;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAqBrC;;;;;;;;;;OAUG;IACH,wBAAwB,CAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAsGzD;;;;;;;;OAQG;IACH,OAAO,CAAC,+BAA+B;IA8FvC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,8BAA8B;IA0EtC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;;;;OAMG;IACH;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,YAAY;IA8BpB,OAAO,CAAC,gBAAgB;IAexB;;;;;;;;;OASG;IACH,OAAO,CAAC,qCAAqC;IAqB7C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAgBnC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAwBlF;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CA+DrC"}
1
+ {"version":3,"file":"scope-manager.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/scope-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAEV,kBAAkB,EAMnB,MAAM,WAAW,CAAA;AAClB,OAAO,KAAK,EAAE,SAAS,EAA4B,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAG/F,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,MAAM,CAAuC;IACrD,OAAO,CAAC,KAAK,CAAqE;IAMlF,OAAO,CAAC,cAAc,CAAoC;IAG1D,OAAO,CAAC,eAAe,CAAiC;IAGxD,OAAO,CAAC,qBAAqB,CAAiD;IAI9E,OAAO,CAAC,eAAe,CAAiC;IACxD,OAAO,CAAC,qBAAqB,CAAiD;gBAEjE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAI1D;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAcjC;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,+BAA+B;IAgB9C;;;;;;OAMG;IACI,KAAK,IAAK,IAAI;IAQrB;;;;OAIG;IACH,eAAe,IAAK,IAAI;IAIxB;;;OAGG;IACH,cAAc,IAAK,IAAI;IAIvB;;;;;;;OAOG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAMvD;;;;;OAKG;IACH,YAAY,CAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IASvD;;;OAGG;IACH,UAAU,IAAK,IAAI;IAInB;;;OAGG;IACH,SAAS,IAAK,IAAI;IAIlB;;;;;;OAMG;IACH,aAAa,CAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAUnD;;;;;;OAMG;IACH,eAAe,CAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAkBrD,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACI,6BAA6B,CAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvE;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAqBrC;;;;;;;;;;OAUG;IACH,wBAAwB,CAAE,IAAI,EAAE,kBAAkB,GAAG,IAAI;IAkHzD;;;;;;;;OAQG;IACH,OAAO,CAAC,+BAA+B;IA8FvC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,8BAA8B;IA0EtC;;;;;;;;;;OAUG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;;;;;OAMG;IACH;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,YAAY;IA8BpB;;;;OAIG;IACH,OAAO,CAAC,6BAA6B;IAiCrC,OAAO,CAAC,gBAAgB;IAexB;;;;;;;;;OASG;IACH,OAAO,CAAC,qCAAqC;IAqB7C;;;;;;OAMG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAgBnC;;;OAGG;IACH,OAAO,CAAC,6BAA6B;IAyBrC;;;;;;;;;;;OAWG;IACH,kBAAkB,CAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI;IAwBlF;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;CA+DrC"}