@muxima-ui/core 1.5.0 → 2.0.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.
Files changed (33) hide show
  1. package/README.md +45 -16
  2. package/fesm2022/muxima-ui-core-color-picker.mjs +3 -3
  3. package/fesm2022/muxima-ui-core-color-picker.mjs.map +1 -1
  4. package/fesm2022/muxima-ui-core-date-picker.mjs +10 -5
  5. package/fesm2022/muxima-ui-core-date-picker.mjs.map +1 -1
  6. package/fesm2022/muxima-ui-core-file-upload.mjs +2 -2
  7. package/fesm2022/muxima-ui-core-file-upload.mjs.map +1 -1
  8. package/fesm2022/muxima-ui-core-form-field.mjs +2 -2
  9. package/fesm2022/muxima-ui-core-form-field.mjs.map +1 -1
  10. package/fesm2022/muxima-ui-core-i18n.mjs +1 -1
  11. package/fesm2022/muxima-ui-core-i18n.mjs.map +1 -1
  12. package/fesm2022/muxima-ui-core-notification-center.mjs +3 -3
  13. package/fesm2022/muxima-ui-core-notification-center.mjs.map +1 -1
  14. package/fesm2022/muxima-ui-core-slider.mjs +2 -2
  15. package/fesm2022/muxima-ui-core-slider.mjs.map +1 -1
  16. package/fesm2022/muxima-ui-core-table.mjs +2 -2
  17. package/fesm2022/muxima-ui-core-table.mjs.map +1 -1
  18. package/fesm2022/muxima-ui-core-tour.mjs +3 -8
  19. package/fesm2022/muxima-ui-core-tour.mjs.map +1 -1
  20. package/fesm2022/muxima-ui-core.mjs +1 -1
  21. package/fesm2022/muxima-ui-core.mjs.map +1 -1
  22. package/package.json +1 -1
  23. package/types/muxima-ui-core-color-picker.d.ts +1 -1
  24. package/types/muxima-ui-core-data-grid.d.ts +1 -1
  25. package/types/muxima-ui-core-date-picker.d.ts +6 -2
  26. package/types/muxima-ui-core-file-upload.d.ts +1 -1
  27. package/types/muxima-ui-core-form-field.d.ts +2 -2
  28. package/types/muxima-ui-core-i18n.d.ts +1 -1
  29. package/types/muxima-ui-core-notification-center.d.ts +1 -1
  30. package/types/muxima-ui-core-slider.d.ts +2 -2
  31. package/types/muxima-ui-core-table.d.ts +1 -1
  32. package/types/muxima-ui-core-tour.d.ts +1 -6
  33. package/types/muxima-ui-core.d.ts +1 -1
@@ -116,9 +116,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
116
116
  }], propDecorators: { key: [{ type: i0.Input, args: [{ isSignal: true, alias: "mxSortHeader", required: true }] }] } });
117
117
  /**
118
118
  * Ordena uma lista segundo o estado de `MxTable`. Texto é comparado segundo `locale`
119
- * (português por omissão; acentos e maiúsculas contam como a mesma letra), números numericamente.
119
+ * (inglês por omissão; acentos e maiúsculas contam como a mesma letra), números numericamente.
120
120
  */
121
- function mxSortData(rows, sort, accessor, locale = 'pt') {
121
+ function mxSortData(rows, sort, accessor, locale = 'en') {
122
122
  if (!sort.active)
123
123
  return [...rows];
124
124
  const key = sort.active;
@@ -1 +1 @@
1
- {"version":3,"file":"muxima-ui-core-table.mjs","sources":["../../../projects/core/table/table.ts","../../../projects/core/table/muxima-ui-core-table.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\n\nexport type MxSortDirection = 'asc' | 'desc';\n\nexport interface MxSortState {\n /** Coluna ordenada, ou null sem ordenação. */\n active: string | null;\n direction: MxSortDirection;\n}\n\n/**\n * Estilo de tabela sobre o `<table>` nativo, com ordenação opcional.\n *\n * ```html\n * <div class=\"mx-table-container\">\n * <table mxTable [(sort)]=\"ordem\">\n * <thead><tr>\n * <th mxSortHeader=\"nome\">Nome</th>\n * <th mxSortHeader=\"valor\" data-align=\"end\">Valor</th>\n * </tr></thead>\n * <tbody>...</tbody>\n * </table>\n * </div>\n * ```\n *\n * A tabela continua a ser HTML: os leitores de ecrã anunciam linhas,\n * colunas e cabeçalhos sem configuração.\n */\n@Directive({\n selector: 'table[mxTable]',\n exportAs: 'mxTable',\n host: {\n class: 'mx-table',\n '[attr.data-density]': 'density() === \"comfortable\" ? null : density()',\n '[attr.data-variant]': 'variant() === \"default\" ? null : variant()',\n '[attr.data-sticky-header]': 'stickyHeader() ? \"\" : null',\n },\n})\nexport class MxTable {\n /** Estado da ordenação. Aceita two-way binding: `[(sort)]`. */\n readonly sort = model<MxSortState>({ active: null, direction: 'asc' });\n readonly density = input<'comfortable' | 'compact'>('comfortable');\n /** default; striped: linhas alternadas; bordered: linhas entre colunas. */\n readonly variant = input<'default' | 'striped' | 'bordered'>('default');\n /** Mantém o cabeçalho visível ao fazer scroll (dá uma altura máxima ao contentor). */\n readonly stickyHeader = input(false, { transform: booleanAttribute });\n\n /** Alterna: ascendente, descendente, sem ordenação. */\n toggleSort(key: string): void {\n const s = this.sort();\n if (s.active !== key) this.sort.set({ active: key, direction: 'asc' });\n else if (s.direction === 'asc') this.sort.set({ active: key, direction: 'desc' });\n else this.sort.set({ active: null, direction: 'asc' });\n }\n}\n\n/**\n * Cabeçalho ordenável. Coloca um botão dentro do `<th>` e mantém `aria-sort` actualizado.\n */\n@Component({\n selector: 'th[mxSortHeader]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.aria-sort]': 'ariaSort()',\n },\n template: `\n <button type=\"button\" class=\"mx-sort-button\" (click)=\"table.toggleSort(key())\">\n <ng-content />\n <svg class=\"mx-sort-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n @switch (ariaSort()) {\n @case ('ascending') {\n <path d=\"M8 12V4M4.5 7.5L8 4l3.5 3.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n @case ('descending') {\n <path d=\"M8 4v8M4.5 8.5L8 12l3.5-3.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n @default {\n <path d=\"M5 6.5L8 3.5l3 3M5 9.5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n }\n </svg>\n </button>\n `,\n})\nexport class MxSortHeader {\n readonly key = input.required<string>({ alias: 'mxSortHeader' });\n protected readonly table = inject(MxTable);\n\n protected readonly ariaSort = computed(() => {\n const s = this.table.sort();\n if (s.active !== this.key()) return 'none';\n return s.direction === 'asc' ? 'ascending' : 'descending';\n });\n}\n\n/**\n * Ordena uma lista segundo o estado de `MxTable`. Texto é comparado segundo `locale`\n * (português por omissão; acentos e maiúsculas contam como a mesma letra), números numericamente.\n */\nexport function mxSortData<T>(\n rows: readonly T[],\n sort: MxSortState,\n accessor?: (row: T, key: string) => unknown,\n locale = 'pt',\n): T[] {\n if (!sort.active) return [...rows];\n const key = sort.active;\n const get = accessor ?? ((row: T, k: string) => (row as Record<string, unknown>)[k]);\n const collator = new Intl.Collator(locale, { numeric: true, sensitivity: 'base' });\n const dir = sort.direction === 'asc' ? 1 : -1;\n return [...rows].sort((a, b) => {\n const x = get(a, key);\n const y = get(b, key);\n if (x == null && y == null) return 0;\n if (x == null) return 1;\n if (y == null) return -1;\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * dir;\n return collator.compare(String(x), String(y)) * dir;\n });\n}\n\nexport const MX_TABLE = [MxTable, MxSortHeader] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"muxima-ui-core-table.mjs","sources":["../../../projects/core/table/table.ts","../../../projects/core/table/muxima-ui-core-table.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Directive,\n ViewEncapsulation,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n} from '@angular/core';\n\nexport type MxSortDirection = 'asc' | 'desc';\n\nexport interface MxSortState {\n /** Coluna ordenada, ou null sem ordenação. */\n active: string | null;\n direction: MxSortDirection;\n}\n\n/**\n * Estilo de tabela sobre o `<table>` nativo, com ordenação opcional.\n *\n * ```html\n * <div class=\"mx-table-container\">\n * <table mxTable [(sort)]=\"ordem\">\n * <thead><tr>\n * <th mxSortHeader=\"nome\">Nome</th>\n * <th mxSortHeader=\"valor\" data-align=\"end\">Valor</th>\n * </tr></thead>\n * <tbody>...</tbody>\n * </table>\n * </div>\n * ```\n *\n * A tabela continua a ser HTML: os leitores de ecrã anunciam linhas,\n * colunas e cabeçalhos sem configuração.\n */\n@Directive({\n selector: 'table[mxTable]',\n exportAs: 'mxTable',\n host: {\n class: 'mx-table',\n '[attr.data-density]': 'density() === \"comfortable\" ? null : density()',\n '[attr.data-variant]': 'variant() === \"default\" ? null : variant()',\n '[attr.data-sticky-header]': 'stickyHeader() ? \"\" : null',\n },\n})\nexport class MxTable {\n /** Estado da ordenação. Aceita two-way binding: `[(sort)]`. */\n readonly sort = model<MxSortState>({ active: null, direction: 'asc' });\n readonly density = input<'comfortable' | 'compact'>('comfortable');\n /** default; striped: linhas alternadas; bordered: linhas entre colunas. */\n readonly variant = input<'default' | 'striped' | 'bordered'>('default');\n /** Mantém o cabeçalho visível ao fazer scroll (dá uma altura máxima ao contentor). */\n readonly stickyHeader = input(false, { transform: booleanAttribute });\n\n /** Alterna: ascendente, descendente, sem ordenação. */\n toggleSort(key: string): void {\n const s = this.sort();\n if (s.active !== key) this.sort.set({ active: key, direction: 'asc' });\n else if (s.direction === 'asc') this.sort.set({ active: key, direction: 'desc' });\n else this.sort.set({ active: null, direction: 'asc' });\n }\n}\n\n/**\n * Cabeçalho ordenável. Coloca um botão dentro do `<th>` e mantém `aria-sort` actualizado.\n */\n@Component({\n selector: 'th[mxSortHeader]',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n '[attr.aria-sort]': 'ariaSort()',\n },\n template: `\n <button type=\"button\" class=\"mx-sort-button\" (click)=\"table.toggleSort(key())\">\n <ng-content />\n <svg class=\"mx-sort-icon\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n @switch (ariaSort()) {\n @case ('ascending') {\n <path d=\"M8 12V4M4.5 7.5L8 4l3.5 3.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n @case ('descending') {\n <path d=\"M8 4v8M4.5 8.5L8 12l3.5-3.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n @default {\n <path d=\"M5 6.5L8 3.5l3 3M5 9.5l3 3 3-3\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n }\n }\n </svg>\n </button>\n `,\n})\nexport class MxSortHeader {\n readonly key = input.required<string>({ alias: 'mxSortHeader' });\n protected readonly table = inject(MxTable);\n\n protected readonly ariaSort = computed(() => {\n const s = this.table.sort();\n if (s.active !== this.key()) return 'none';\n return s.direction === 'asc' ? 'ascending' : 'descending';\n });\n}\n\n/**\n * Ordena uma lista segundo o estado de `MxTable`. Texto é comparado segundo `locale`\n * (inglês por omissão; acentos e maiúsculas contam como a mesma letra), números numericamente.\n */\nexport function mxSortData<T>(\n rows: readonly T[],\n sort: MxSortState,\n accessor?: (row: T, key: string) => unknown,\n locale = 'en',\n): T[] {\n if (!sort.active) return [...rows];\n const key = sort.active;\n const get = accessor ?? ((row: T, k: string) => (row as Record<string, unknown>)[k]);\n const collator = new Intl.Collator(locale, { numeric: true, sensitivity: 'base' });\n const dir = sort.direction === 'asc' ? 1 : -1;\n return [...rows].sort((a, b) => {\n const x = get(a, key);\n const y = get(b, key);\n if (x == null && y == null) return 0;\n if (x == null) return 1;\n if (y == null) return -1;\n if (typeof x === 'number' && typeof y === 'number') return (x - y) * dir;\n return collator.compare(String(x), String(y)) * dir;\n });\n}\n\nexport const MX_TABLE = [MxTable, MxSortHeader] as const;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { signal, InjectionToken, inject, viewChild, NgZone, ChangeDetectorRef, DestroyRef, effect, untracked, afterNextRender, ViewEncapsulation, ChangeDetectionStrategy, Component, Injector, computed, ElementRef, Injectable, input, Directive } from '@angular/core';
3
- import { MX_MESSAGES_PT, MxI18n } from '@muxima-ui/core/i18n';
3
+ import { MX_MESSAGES_EN, MxI18n } from '@muxima-ui/core/i18n';
4
4
  import { NgTemplateOutlet } from '@angular/common';
5
5
  import { CdkTrapFocus } from '@angular/cdk/a11y';
6
6
  import { createOverlayRef, createNoopScrollStrategy, createGlobalPositionStrategy } from '@angular/cdk/overlay';
@@ -8,11 +8,6 @@ import { ComponentPortal } from '@angular/cdk/portal';
8
8
  import { MxButton } from '@muxima-ui/core/button';
9
9
  import { mxUniqueId } from '@muxima-ui/core/form-field';
10
10
 
11
- /**
12
- * Textos em português.
13
- * @deprecated Os textos por omissão vêm agora do idioma activo (`MxI18n`); usa `MX_MESSAGES_PT.tour`.
14
- */
15
- const MX_TOUR_LABELS = MX_MESSAGES_PT.tour;
16
11
  /** Referência a uma visita em curso. */
17
12
  class MxTourRef {
18
13
  steps;
@@ -26,7 +21,7 @@ class MxTourRef {
26
21
  showDots;
27
22
  resolve;
28
23
  done = false;
29
- constructor(steps, options, onClose, defaults = MX_TOUR_LABELS) {
24
+ constructor(steps, options, onClose, defaults = MX_MESSAGES_EN.tour) {
30
25
  this.steps = steps;
31
26
  this.onClose = onClose;
32
27
  this.labels = { ...defaults, ...options.labels };
@@ -531,5 +526,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
531
526
  * Generated bundle index. Do not edit.
532
527
  */
533
528
 
534
- export { MX_TOUR_LABELS, MxTour, MxTourAnchor, MxTourPanel, MxTourRef };
529
+ export { MxTour, MxTourAnchor, MxTourPanel, MxTourRef };
535
530
  //# sourceMappingURL=muxima-ui-core-tour.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"muxima-ui-core-tour.mjs","sources":["../../../projects/core/tour/tour.ts","../../../projects/core/tour/muxima-ui-core-tour.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n TemplateRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MX_MESSAGES_PT, MxI18n } from '@muxima-ui/core/i18n';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport {\n OverlayRef,\n createGlobalPositionStrategy,\n createNoopScrollStrategy,\n createOverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { MxButton } from '@muxima-ui/core/button';\nimport { mxUniqueId } from '@muxima-ui/core/form-field';\n\n/** Onde fica o cartão em relação ao elemento destacado. */\nexport type MxTourPlacement = 'auto' | 'top' | 'bottom' | 'start' | 'end';\n\n/** Nome de um `mxTourAnchor`, um elemento, ou um ElementRef. */\nexport type MxTourTarget = string | Element | ElementRef<Element>;\n\n/** Contexto do modelo de conteúdo de um passo. */\nexport interface MxTourStepContext {\n $implicit: MxTourStep;\n index: number;\n tour: MxTourRef;\n}\n\n/** Um passo da visita guiada. */\nexport interface MxTourStep {\n /** Elemento a destacar. Sem alvo (ou se não existir), o cartão aparece ao centro. */\n target?: MxTourTarget | null;\n title: string;\n /** Texto do passo. */\n content?: string;\n /** Conteúdo rico, em vez de `content`. */\n template?: TemplateRef<MxTourStepContext>;\n placement?: MxTourPlacement;\n /** Espaço à volta do elemento destacado, em px. Por omissão 6. */\n padding?: number;\n /** Corre antes de mostrar o passo (ex.: abrir um separador). Pode devolver uma Promise. */\n beforeShow?: () => void | Promise<unknown>;\n}\n\nexport interface MxTourLabels {\n next: string;\n previous: string;\n done: string;\n skip: string;\n close: string;\n /** Texto do progresso, por exemplo \"Passo 2 de 5\". */\n progress: (current: number, total: number) => string;\n}\n\n/**\n * Textos em português.\n * @deprecated Os textos por omissão vêm agora do idioma activo (`MxI18n`); usa `MX_MESSAGES_PT.tour`.\n */\nexport const MX_TOUR_LABELS: MxTourLabels = MX_MESSAGES_PT.tour;\n\nexport interface MxTourOptions {\n /** Passo inicial (base 0). */\n startAt?: number;\n labels?: Partial<MxTourLabels>;\n /** false: sem Saltar, sem botão de fechar e sem Escape (a visita tem de ser feita até ao fim). */\n dismissible?: boolean;\n /** Mostra os pontos de progresso. Por omissão true. */\n showDots?: boolean;\n}\n\n/** Como terminou a visita. */\nexport interface MxTourResult {\n /** true se chegou ao fim com Concluir. */\n completed: boolean;\n /** Último passo mostrado (base 0). */\n index: number;\n}\n\n/** Referência a uma visita em curso. */\nexport class MxTourRef {\n /** Passo actual (base 0). */\n readonly index = signal(0);\n /** Resolve quando a visita fecha. */\n readonly afterClosed: Promise<MxTourResult>;\n readonly labels: MxTourLabels;\n readonly dismissible: boolean;\n readonly showDots: boolean;\n private resolve!: (r: MxTourResult) => void;\n private done = false;\n\n constructor(\n readonly steps: readonly MxTourStep[],\n options: MxTourOptions,\n private readonly onClose: (r: MxTourResult) => void,\n defaults: MxTourLabels = MX_TOUR_LABELS,\n ) {\n this.labels = { ...defaults, ...options.labels };\n this.dismissible = options.dismissible ?? true;\n this.showDots = options.showDots ?? true;\n this.index.set(Math.min(Math.max(options.startAt ?? 0, 0), Math.max(steps.length - 1, 0)));\n this.afterClosed = new Promise((r) => (this.resolve = r));\n }\n\n get isOpen(): boolean {\n return !this.done;\n }\n get isLast(): boolean {\n return this.index() === this.steps.length - 1;\n }\n\n next(): void {\n if (this.isLast) this.close(true);\n else this.goTo(this.index() + 1);\n }\n previous(): void {\n this.goTo(this.index() - 1);\n }\n goTo(index: number): void {\n if (this.done || index < 0 || index >= this.steps.length) return;\n this.index.set(index);\n }\n /** Fecha a visita; `completed` diz se foi até ao fim. */\n close(completed = false): void {\n if (this.done) return;\n this.done = true;\n const result = { completed, index: this.index() };\n this.onClose(result);\n this.resolve(result);\n }\n}\n\nconst MX_TOUR_REF = new InjectionToken<MxTourRef>('MX_TOUR_REF');\n\ninterface Box {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\n/** requestAnimationFrame, ou um setTimeout onde não exista (testes, SSR). */\nconst nextFrame = (cb: () => void): number =>\n typeof requestAnimationFrame === 'function' ? requestAnimationFrame(cb) : (setTimeout(cb, 16) as unknown as number);\nconst cancelFrame = (id: number): void =>\n typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame(id) : clearTimeout(id);\n\nconst GAP = 12;\nconst MARGIN = 12;\n\n/** Painel da visita: o destaque, o fundo escurecido e o cartão do passo. Uso interno. */\n@Component({\n selector: 'mx-tour-panel',\n imports: [NgTemplateOutlet, CdkTrapFocus, MxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-tour-layer' },\n template: `\n @if (spot(); as s) {\n <div\n class=\"mx-tour-spotlight\"\n aria-hidden=\"true\"\n [style.top.px]=\"s.top\"\n [style.left.px]=\"s.left\"\n [style.width.px]=\"s.width\"\n [style.height.px]=\"s.height\"\n ></div>\n } @else {\n <div class=\"mx-tour-dim\" aria-hidden=\"true\"></div>\n }\n @if (step(); as st) {\n <div\n #card\n class=\"mx-tour-card\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n cdkTrapFocus\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-describedby]=\"progressId + ' ' + bodyId\"\n [attr.data-placement]=\"spot() ? placement() : 'center'\"\n [style.top.px]=\"spot() ? pos().top : null\"\n [style.left.px]=\"spot() ? pos().left : null\"\n [style.visibility]=\"ready() ? null : 'hidden'\"\n (keydown)=\"onKeydown($event)\"\n >\n <div class=\"mx-tour-head\">\n <p class=\"mx-tour-progress\" [id]=\"progressId\">\n {{ ref.labels.progress(ref.index() + 1, ref.steps.length) }}\n </p>\n @if (ref.dismissible) {\n <button\n type=\"button\"\n class=\"mx-tour-close\"\n [attr.aria-label]=\"ref.labels.close\"\n (click)=\"ref.close(false)\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n }\n </div>\n <h2 class=\"mx-tour-title\" [id]=\"titleId\">{{ st.title }}</h2>\n <div class=\"mx-tour-body\" [id]=\"bodyId\">\n @if (st.template) {\n <ng-container\n *ngTemplateOutlet=\"st.template; context: { $implicit: st, index: ref.index(), tour: ref }\"\n />\n } @else if (st.content) {\n <p>{{ st.content }}</p>\n }\n </div>\n <div class=\"mx-tour-foot\">\n @if (ref.showDots && ref.steps.length > 1) {\n <span class=\"mx-tour-dots\" aria-hidden=\"true\">\n @for (s of ref.steps; track $index) {\n <span class=\"mx-tour-dot\" [attr.data-active]=\"$index === ref.index() ? '' : null\"></span>\n }\n </span>\n }\n <span class=\"mx-tour-actions\">\n @if (ref.dismissible && !ref.isLast) {\n <button mxButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"ref.close(false)\">\n {{ ref.labels.skip }}\n </button>\n }\n @if (ref.index() > 0) {\n <button mxButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"ref.previous()\">\n {{ ref.labels.previous }}\n </button>\n }\n <button mxButton size=\"sm\" type=\"button\" (click)=\"ref.next()\">\n {{ ref.isLast ? ref.labels.done : ref.labels.next }}\n </button>\n </span>\n </div>\n </div>\n }\n `,\n})\nexport class MxTourPanel {\n protected readonly ref = inject(MX_TOUR_REF);\n private readonly tour = inject(MxTour);\n\n protected readonly titleId = mxUniqueId('mx-tour-title');\n protected readonly bodyId = mxUniqueId('mx-tour-body');\n protected readonly progressId = mxUniqueId('mx-tour-progress');\n\n private readonly card = viewChild<ElementRef<HTMLElement>>('card');\n private readonly zone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Passo que está desenhado (muda depois de beforeShow). */\n protected readonly step = signal<MxTourStep | null>(null);\n private readonly target = signal<Element | null>(null);\n protected readonly spot = signal<Box | null>(null);\n protected readonly pos = signal({ top: 0, left: 0 });\n protected readonly placement = signal<Exclude<MxTourPlacement, 'auto'>>('bottom');\n protected readonly ready = signal(false);\n\n private frame = 0;\n private resizeObserver?: ResizeObserver;\n private showToken = 0;\n\n constructor() {\n const destroy = inject(DestroyRef);\n // mostra o passo sempre que o índice muda\n effect(() => {\n const i = this.ref.index();\n untracked(() => void this.show(i));\n });\n\n afterNextRender(() => {\n const schedule = () => this.schedule();\n this.zone.runOutsideAngular(() => {\n window.addEventListener('scroll', schedule, { capture: true, passive: true });\n window.addEventListener('resize', schedule, { passive: true });\n });\n if (typeof ResizeObserver !== 'undefined') this.resizeObserver = new ResizeObserver(schedule);\n destroy.onDestroy(() => {\n window.removeEventListener('scroll', schedule, { capture: true });\n window.removeEventListener('resize', schedule);\n this.resizeObserver?.disconnect();\n cancelFrame(this.frame);\n });\n });\n }\n\n private async show(index: number): Promise<void> {\n const token = ++this.showToken;\n const st = this.ref.steps[index];\n if (!st) return;\n // só se esconde antes do primeiro passo (para o posicionar); depois, esconder\n // o cartão tirava-lhe o foco a meio da visita\n if (!this.step()) this.ready.set(false);\n try {\n await st.beforeShow?.();\n } catch {\n // um beforeShow que falha não deve prender a visita\n }\n // espera um frame para o DOM reflectir o que beforeShow mudou\n await new Promise<void>((r) => nextFrame(r));\n if (token !== this.showToken || !this.ref.isOpen) return;\n\n // o alvo pode só aparecer depois de beforeShow (ex.: conteúdo de um separador)\n let el = this.tour.resolve(st.target);\n for (let i = 0; !el && st.target && i < 5; i++) {\n await new Promise<void>((r) => nextFrame(r));\n if (token !== this.showToken || !this.ref.isOpen) return;\n el = this.tour.resolve(st.target);\n }\n this.resizeObserver?.disconnect();\n this.target.set(el);\n if (el) {\n this.resizeObserver?.observe(el);\n const r = el.getBoundingClientRect();\n const fora = r.top < 0 || r.bottom > window.innerHeight || r.left < 0 || r.right > window.innerWidth;\n if (fora) {\n const reduzir = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n el.scrollIntoView?.({ block: 'center', inline: 'nearest', behavior: reduzir ? 'auto' : 'smooth' });\n }\n }\n this.step.set(st);\n // desenha já o cartão para o medir, posicionar e dar-lhe o foco\n this.cdr.detectChanges();\n const card = this.card()?.nativeElement;\n if (card) this.resizeObserver?.observe(card);\n this.update();\n this.ready.set(true);\n this.cdr.detectChanges();\n card?.focus({ preventScroll: true });\n }\n\n private schedule(): void {\n cancelFrame(this.frame);\n this.frame = nextFrame(() => this.zone.run(() => this.update()));\n }\n\n private update(): void {\n const st = this.step();\n const el = this.target();\n const r = el?.getBoundingClientRect();\n if (!st || !r || (r.width === 0 && r.height === 0)) {\n this.spot.set(null);\n return;\n }\n const pad = st.padding ?? 6;\n const spot: Box = { top: r.top - pad, left: r.left - pad, width: r.width + pad * 2, height: r.height + pad * 2 };\n this.spot.set(spot);\n\n const card = this.card()?.nativeElement;\n const cw = card?.offsetWidth ?? 320;\n const ch = card?.offsetHeight ?? 160;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const rtl = getComputedStyle(document.documentElement).direction === 'rtl';\n const side = (p: Exclude<MxTourPlacement, 'auto'>): Exclude<MxTourPlacement, 'auto'> =>\n rtl && (p === 'start' || p === 'end') ? (p === 'start' ? 'end' : 'start') : p;\n\n const fits: Record<Exclude<MxTourPlacement, 'auto'>, boolean> = {\n bottom: spot.top + spot.height + GAP + ch <= vh - MARGIN,\n top: spot.top - GAP - ch >= MARGIN,\n end: spot.left + spot.width + GAP + cw <= vw - MARGIN,\n start: spot.left - GAP - cw >= MARGIN,\n };\n const wanted = st.placement && st.placement !== 'auto' ? side(st.placement) : null;\n const order: Exclude<MxTourPlacement, 'auto'>[] = wanted\n ? [wanted, 'bottom', 'top', 'end', 'start']\n : ['bottom', 'top', 'end', 'start'];\n const p = order.find((o) => fits[o]) ?? 'bottom';\n\n let top: number;\n let left: number;\n if (p === 'bottom' || p === 'top') {\n top = p === 'bottom' ? spot.top + spot.height + GAP : spot.top - GAP - ch;\n left = spot.left + spot.width / 2 - cw / 2;\n } else {\n left = p === 'end' ? spot.left + spot.width + GAP : spot.left - GAP - cw;\n top = spot.top + spot.height / 2 - ch / 2;\n }\n const clamp = (v: number, min: number, max: number) => Math.min(Math.max(v, min), Math.max(min, max));\n this.placement.set(rtl && (p === 'start' || p === 'end') ? (p === 'start' ? 'end' : 'start') : p);\n this.pos.set({ top: clamp(top, MARGIN, vh - ch - MARGIN), left: clamp(left, MARGIN, vw - cw - MARGIN) });\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const t = event.target as HTMLElement;\n const editavel = t.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName);\n if (event.key === 'Escape' && this.ref.dismissible) {\n event.preventDefault();\n event.stopPropagation();\n this.ref.close(false);\n } else if (!editavel && event.key === 'ArrowRight' && !this.ref.isLast) {\n event.preventDefault();\n this.ref.next();\n } else if (!editavel && event.key === 'ArrowLeft' && this.ref.index() > 0) {\n event.preventDefault();\n this.ref.previous();\n }\n }\n}\n\n/**\n * Visita guiada: destaca elementos da página, um passo de cada vez, com um cartão\n * que explica cada um. O cartão é um diálogo modal: o foco fica nele, Escape fecha\n * e, no fim, o foco volta para onde estava.\n *\n * ```html\n * <input mxInput mxTourAnchor=\"pesquisa\" aria-label=\"Pesquisar\" />\n * <button mxButton mxTourAnchor=\"nova\">Nova factura</button>\n * ```\n *\n * ```ts\n * private readonly tour = inject(MxTour);\n * mostrar() {\n * this.tour.start([\n * { title: 'Bem-vindo', content: 'Mostramos o essencial em 2 passos.' },\n * { target: 'pesquisa', title: 'Pesquisa', content: 'Procura clientes e facturas.' },\n * { target: 'nova', title: 'Nova factura', content: 'Começa aqui.' },\n * ]).afterClosed.then((r) => r.completed && guardarQueViu());\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class MxTour {\n private readonly injector = inject(Injector);\n private readonly i18n = inject(MxI18n);\n private readonly anchors = new Map<string, Element>();\n private overlayRef?: OverlayRef;\n /** A visita em curso, ou null. */\n readonly active = signal<MxTourRef | null>(null);\n readonly isOpen = computed(() => !!this.active());\n\n /** Começa uma visita. Se já houver uma aberta, fecha-a primeiro. */\n start(steps: readonly MxTourStep[], options: MxTourOptions = {}): MxTourRef {\n this.active()?.close(false);\n const before = document.activeElement as HTMLElement | null;\n const ref = new MxTourRef(\n steps,\n options,\n () => {\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n this.active.set(null);\n if (before && before.isConnected) before.focus({ preventScroll: true });\n },\n this.i18n.messages().tour,\n );\n if (!steps.length) {\n ref.close(true);\n return ref;\n }\n this.overlayRef = createOverlayRef(this.injector, {\n positionStrategy: createGlobalPositionStrategy(this.injector).top('0').left('0'),\n scrollStrategy: createNoopScrollStrategy(),\n width: '100%',\n height: '100%',\n panelClass: 'mx-tour-pane',\n });\n const injector = Injector.create({\n providers: [{ provide: MX_TOUR_REF, useValue: ref }],\n parent: this.injector,\n });\n this.overlayRef.attach(new ComponentPortal(MxTourPanel, null, injector));\n this.active.set(ref);\n return ref;\n }\n\n /** Regista um elemento com um nome (usado por `mxTourAnchor`). */\n register(name: string, element: Element): void {\n this.anchors.set(name, element);\n }\n unregister(name: string, element: Element): void {\n if (this.anchors.get(name) === element) this.anchors.delete(name);\n }\n\n /** Encontra o elemento de um alvo: nome de âncora, selector CSS, elemento ou ElementRef. */\n resolve(target: MxTourTarget | null | undefined): Element | null {\n if (!target) return null;\n if (target instanceof ElementRef) return target.nativeElement;\n if (typeof target !== 'string') return target;\n return this.anchors.get(target) ?? safeQuery(target);\n }\n}\n\nfunction safeQuery(selector: string): Element | null {\n try {\n return document.querySelector(selector);\n } catch {\n return null;\n }\n}\n\n/** Dá um nome a um elemento para ser alvo de um passo: `mxTourAnchor=\"pesquisa\"`. */\n@Directive({ selector: '[mxTourAnchor]', exportAs: 'mxTourAnchor' })\nexport class MxTourAnchor {\n readonly name = input.required<string>({ alias: 'mxTourAnchor' });\n private readonly tour = inject(MxTour);\n private readonly el = inject<ElementRef<Element>>(ElementRef).nativeElement;\n\n constructor() {\n effect((onCleanup) => {\n const name = this.name();\n this.tour.register(name, this.el);\n onCleanup(() => this.tour.unregister(name, this.el));\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AA0EA;;;AAGG;AACI,MAAM,cAAc,GAAiB,cAAc,CAAC;AAoB3D;MACa,SAAS,CAAA;AAYT,IAAA,KAAA;AAEQ,IAAA,OAAA;;AAZV,IAAA,KAAK,GAAG,MAAM,CAAC,CAAC,4EAAC;;AAEjB,IAAA,WAAW;AACX,IAAA,MAAM;AACN,IAAA,WAAW;AACX,IAAA,QAAQ;AACT,IAAA,OAAO;IACP,IAAI,GAAG,KAAK;AAEpB,IAAA,WAAA,CACW,KAA4B,EACrC,OAAsB,EACL,OAAkC,EACnD,WAAyB,cAAc,EAAA;QAH9B,IAAA,CAAA,KAAK,GAAL,KAAK;QAEG,IAAA,CAAA,OAAO,GAAP,OAAO;AAGxB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE;QAChD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC3D;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI;IACnB;AACA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAC/C;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7B;AACA,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;;IAEA,KAAK,CAAC,SAAS,GAAG,KAAK,EAAA;QACrB,IAAI,IAAI,CAAC,IAAI;YAAE;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACtB;AACD;AAED,MAAM,WAAW,GAAG,IAAI,cAAc,CAAY,aAAa,CAAC;AAShE;AACA,MAAM,SAAS,GAAG,CAAC,EAAc,KAC/B,OAAO,qBAAqB,KAAK,UAAU,GAAG,qBAAqB,CAAC,EAAE,CAAC,GAAI,UAAU,CAAC,EAAE,EAAE,EAAE,CAAuB;AACrH,MAAM,WAAW,GAAG,CAAC,EAAU,KAC7B,OAAO,oBAAoB,KAAK,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;AAE1F,MAAM,GAAG,GAAG,EAAE;AACd,MAAM,MAAM,GAAG,EAAE;AAEjB;MAgGa,WAAW,CAAA;AACH,IAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3B,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAEnB,IAAA,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC;AACrC,IAAA,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC;AACnC,IAAA,UAAU,GAAG,UAAU,CAAC,kBAAkB,CAAC;AAE7C,IAAA,IAAI,GAAG,SAAS,CAA0B,MAAM,2EAAC;AACjD,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG7B,IAAA,IAAI,GAAG,MAAM,CAAoB,IAAI,2EAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAiB,IAAI,6EAAC;AACnC,IAAA,IAAI,GAAG,MAAM,CAAa,IAAI,2EAAC;AAC/B,IAAA,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,0EAAC;AACjC,IAAA,SAAS,GAAG,MAAM,CAAmC,QAAQ,gFAAC;AAC9D,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,4EAAC;IAEhC,KAAK,GAAG,CAAC;AACT,IAAA,cAAc;IACd,SAAS,GAAG,CAAC;AAErB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;;QAElC,MAAM,CAAC,MAAK;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAC1B,YAAA,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,MAAK;YACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,gBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7E,gBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC;YACF,IAAI,OAAO,cAAc,KAAK,WAAW;gBAAE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC;AAC7F,YAAA,OAAO,CAAC,SAAS,CAAC,MAAK;AACrB,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjE,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9C,gBAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,gBAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,MAAM,IAAI,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,SAAS;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,EAAE;YAAE;;;AAGT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,CAAC,UAAU,IAAI;QACzB;AAAE,QAAA,MAAM;;QAER;;AAEA,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE;;AAGlD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC;AACrC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9C,YAAA,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE;YAClD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;AAChC,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU;YACpG,IAAI,IAAI,EAAE;gBACR,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,kCAAkC,CAAC,CAAC,OAAO;gBAC/E,EAAE,CAAC,cAAc,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC;YACpG;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa;AACvC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACtC;IAEQ,QAAQ,GAAA;AACd,QAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE;IAEQ,MAAM,GAAA;AACZ,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,QAAA,MAAM,CAAC,GAAG,EAAE,EAAE,qBAAqB,EAAE;QACrC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB;QACF;AACA,QAAA,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE;AAChH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa;AACvC,QAAA,MAAM,EAAE,GAAG,IAAI,EAAE,WAAW,IAAI,GAAG;AACnC,QAAA,MAAM,EAAE,GAAG,IAAI,EAAE,YAAY,IAAI,GAAG;AACpC,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU;AAC5B,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW;AAC7B,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,SAAS,KAAK,KAAK;AAC1E,QAAA,MAAM,IAAI,GAAG,CAAC,CAAmC,KAC/C,GAAG,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO,IAAI,CAAC;AAE/E,QAAA,MAAM,IAAI,GAAsD;AAC9D,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM;YACxD,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,MAAM;AAClC,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM;YACrD,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,MAAM;SACtC;QACD,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI;QAClF,MAAM,KAAK,GAAuC;cAC9C,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;cACxC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;AACrC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ;AAEhD,QAAA,IAAI,GAAW;AACf,QAAA,IAAI,IAAY;QAChB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE;YACjC,GAAG,GAAG,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE;AACzE,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QAC5C;aAAO;YACL,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE;AACxE,YAAA,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QAC3C;AACA,QAAA,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACrG,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC;AACjG,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1G;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAqB;AACrC,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,iBAAiB,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACnF,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;YAClD,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QACvB;AAAO,aAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACtE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QACjB;AAAO,aAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YACzE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;QACrB;IACF;wGA/JW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzFZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3FS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA6FvC,WAAW,EAAA,UAAA,EAAA,CAAA;kBA/FvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,QAAQ,CAAC;oBACnD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;AAChC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFT,EAAA,CAAA;AACF,iBAAA;4FAS4D,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA0JnE;;;;;;;;;;;;;;;;;;;;AAoBG;MAEU,MAAM,CAAA;AACA,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,OAAO,GAAG,IAAI,GAAG,EAAmB;AAC7C,IAAA,UAAU;;AAET,IAAA,MAAM,GAAG,MAAM,CAAmB,IAAI,6EAAC;AACvC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,6EAAC;;AAGjD,IAAA,KAAK,CAAC,KAA4B,EAAE,OAAA,GAAyB,EAAE,EAAA;QAC7D,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;AAC3B,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAmC;QAC3D,MAAM,GAAG,GAAG,IAAI,SAAS,CACvB,KAAK,EACL,OAAO,EACP,MAAK;AACH,YAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACzE,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC1B;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACf,YAAA,OAAO,GAAG;QACZ;QACA,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChD,YAAA,gBAAgB,EAAE,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChF,cAAc,EAAE,wBAAwB,EAAE;AAC1C,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,cAAc;AAC3B,SAAA,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACpD,MAAM,EAAE,IAAI,CAAC,QAAQ;AACtB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACpB,QAAA,OAAO,GAAG;IACZ;;IAGA,QAAQ,CAAC,IAAY,EAAE,OAAgB,EAAA;QACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IACjC;IACA,UAAU,CAAC,IAAY,EAAE,OAAgB,EAAA;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IACnE;;AAGA,IAAA,OAAO,CAAC,MAAuC,EAAA;AAC7C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACxB,IAAI,MAAM,YAAY,UAAU;YAAE,OAAO,MAAM,CAAC,aAAa;QAC7D,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,YAAA,OAAO,MAAM;AAC7C,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;IACtD;wGA1DW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAN,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAM,cADO,MAAM,EAAA,CAAA;;4FACnB,MAAM,EAAA,UAAA,EAAA,CAAA;kBADlB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA8DlC,SAAS,SAAS,CAAC,QAAgB,EAAA;AACjC,IAAA,IAAI;AACF,QAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACzC;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA;MAEa,YAAY,CAAA;IACd,IAAI,GAAG,KAAK,CAAC,QAAQ,2EAAW,KAAK,EAAE,cAAc,EAAA,CAAG;AAChD,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,EAAE,GAAG,MAAM,CAAsB,UAAU,CAAC,CAAC,aAAa;AAE3E,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACtD,QAAA,CAAC,CAAC;IACJ;wGAXW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE;;;ACvgBnE;;AAEG;;"}
1
+ {"version":3,"file":"muxima-ui-core-tour.mjs","sources":["../../../projects/core/tour/tour.ts","../../../projects/core/tour/muxima-ui-core-tour.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n Directive,\n ElementRef,\n Injectable,\n InjectionToken,\n Injector,\n NgZone,\n TemplateRef,\n ViewEncapsulation,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport { MX_MESSAGES_EN, MxI18n } from '@muxima-ui/core/i18n';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport {\n OverlayRef,\n createGlobalPositionStrategy,\n createNoopScrollStrategy,\n createOverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { MxButton } from '@muxima-ui/core/button';\nimport { mxUniqueId } from '@muxima-ui/core/form-field';\n\n/** Onde fica o cartão em relação ao elemento destacado. */\nexport type MxTourPlacement = 'auto' | 'top' | 'bottom' | 'start' | 'end';\n\n/** Nome de um `mxTourAnchor`, um elemento, ou um ElementRef. */\nexport type MxTourTarget = string | Element | ElementRef<Element>;\n\n/** Contexto do modelo de conteúdo de um passo. */\nexport interface MxTourStepContext {\n $implicit: MxTourStep;\n index: number;\n tour: MxTourRef;\n}\n\n/** Um passo da visita guiada. */\nexport interface MxTourStep {\n /** Elemento a destacar. Sem alvo (ou se não existir), o cartão aparece ao centro. */\n target?: MxTourTarget | null;\n title: string;\n /** Texto do passo. */\n content?: string;\n /** Conteúdo rico, em vez de `content`. */\n template?: TemplateRef<MxTourStepContext>;\n placement?: MxTourPlacement;\n /** Espaço à volta do elemento destacado, em px. Por omissão 6. */\n padding?: number;\n /** Corre antes de mostrar o passo (ex.: abrir um separador). Pode devolver uma Promise. */\n beforeShow?: () => void | Promise<unknown>;\n}\n\nexport interface MxTourLabels {\n next: string;\n previous: string;\n done: string;\n skip: string;\n close: string;\n /** Texto do progresso, por exemplo \"Passo 2 de 5\". */\n progress: (current: number, total: number) => string;\n}\n\nexport interface MxTourOptions {\n /** Passo inicial (base 0). */\n startAt?: number;\n labels?: Partial<MxTourLabels>;\n /** false: sem Saltar, sem botão de fechar e sem Escape (a visita tem de ser feita até ao fim). */\n dismissible?: boolean;\n /** Mostra os pontos de progresso. Por omissão true. */\n showDots?: boolean;\n}\n\n/** Como terminou a visita. */\nexport interface MxTourResult {\n /** true se chegou ao fim com Concluir. */\n completed: boolean;\n /** Último passo mostrado (base 0). */\n index: number;\n}\n\n/** Referência a uma visita em curso. */\nexport class MxTourRef {\n /** Passo actual (base 0). */\n readonly index = signal(0);\n /** Resolve quando a visita fecha. */\n readonly afterClosed: Promise<MxTourResult>;\n readonly labels: MxTourLabels;\n readonly dismissible: boolean;\n readonly showDots: boolean;\n private resolve!: (r: MxTourResult) => void;\n private done = false;\n\n constructor(\n readonly steps: readonly MxTourStep[],\n options: MxTourOptions,\n private readonly onClose: (r: MxTourResult) => void,\n defaults: MxTourLabels = MX_MESSAGES_EN.tour,\n ) {\n this.labels = { ...defaults, ...options.labels };\n this.dismissible = options.dismissible ?? true;\n this.showDots = options.showDots ?? true;\n this.index.set(Math.min(Math.max(options.startAt ?? 0, 0), Math.max(steps.length - 1, 0)));\n this.afterClosed = new Promise((r) => (this.resolve = r));\n }\n\n get isOpen(): boolean {\n return !this.done;\n }\n get isLast(): boolean {\n return this.index() === this.steps.length - 1;\n }\n\n next(): void {\n if (this.isLast) this.close(true);\n else this.goTo(this.index() + 1);\n }\n previous(): void {\n this.goTo(this.index() - 1);\n }\n goTo(index: number): void {\n if (this.done || index < 0 || index >= this.steps.length) return;\n this.index.set(index);\n }\n /** Fecha a visita; `completed` diz se foi até ao fim. */\n close(completed = false): void {\n if (this.done) return;\n this.done = true;\n const result = { completed, index: this.index() };\n this.onClose(result);\n this.resolve(result);\n }\n}\n\nconst MX_TOUR_REF = new InjectionToken<MxTourRef>('MX_TOUR_REF');\n\ninterface Box {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\n/** requestAnimationFrame, ou um setTimeout onde não exista (testes, SSR). */\nconst nextFrame = (cb: () => void): number =>\n typeof requestAnimationFrame === 'function' ? requestAnimationFrame(cb) : (setTimeout(cb, 16) as unknown as number);\nconst cancelFrame = (id: number): void =>\n typeof cancelAnimationFrame === 'function' ? cancelAnimationFrame(id) : clearTimeout(id);\n\nconst GAP = 12;\nconst MARGIN = 12;\n\n/** Painel da visita: o destaque, o fundo escurecido e o cartão do passo. Uso interno. */\n@Component({\n selector: 'mx-tour-panel',\n imports: [NgTemplateOutlet, CdkTrapFocus, MxButton],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: { class: 'mx-tour-layer' },\n template: `\n @if (spot(); as s) {\n <div\n class=\"mx-tour-spotlight\"\n aria-hidden=\"true\"\n [style.top.px]=\"s.top\"\n [style.left.px]=\"s.left\"\n [style.width.px]=\"s.width\"\n [style.height.px]=\"s.height\"\n ></div>\n } @else {\n <div class=\"mx-tour-dim\" aria-hidden=\"true\"></div>\n }\n @if (step(); as st) {\n <div\n #card\n class=\"mx-tour-card\"\n role=\"dialog\"\n aria-modal=\"true\"\n tabindex=\"-1\"\n cdkTrapFocus\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-describedby]=\"progressId + ' ' + bodyId\"\n [attr.data-placement]=\"spot() ? placement() : 'center'\"\n [style.top.px]=\"spot() ? pos().top : null\"\n [style.left.px]=\"spot() ? pos().left : null\"\n [style.visibility]=\"ready() ? null : 'hidden'\"\n (keydown)=\"onKeydown($event)\"\n >\n <div class=\"mx-tour-head\">\n <p class=\"mx-tour-progress\" [id]=\"progressId\">\n {{ ref.labels.progress(ref.index() + 1, ref.steps.length) }}\n </p>\n @if (ref.dismissible) {\n <button\n type=\"button\"\n class=\"mx-tour-close\"\n [attr.aria-label]=\"ref.labels.close\"\n (click)=\"ref.close(false)\"\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <path\n d=\"M4 4l8 8M12 4l-8 8\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n }\n </div>\n <h2 class=\"mx-tour-title\" [id]=\"titleId\">{{ st.title }}</h2>\n <div class=\"mx-tour-body\" [id]=\"bodyId\">\n @if (st.template) {\n <ng-container\n *ngTemplateOutlet=\"st.template; context: { $implicit: st, index: ref.index(), tour: ref }\"\n />\n } @else if (st.content) {\n <p>{{ st.content }}</p>\n }\n </div>\n <div class=\"mx-tour-foot\">\n @if (ref.showDots && ref.steps.length > 1) {\n <span class=\"mx-tour-dots\" aria-hidden=\"true\">\n @for (s of ref.steps; track $index) {\n <span class=\"mx-tour-dot\" [attr.data-active]=\"$index === ref.index() ? '' : null\"></span>\n }\n </span>\n }\n <span class=\"mx-tour-actions\">\n @if (ref.dismissible && !ref.isLast) {\n <button mxButton variant=\"ghost\" size=\"sm\" type=\"button\" (click)=\"ref.close(false)\">\n {{ ref.labels.skip }}\n </button>\n }\n @if (ref.index() > 0) {\n <button mxButton variant=\"outline\" size=\"sm\" type=\"button\" (click)=\"ref.previous()\">\n {{ ref.labels.previous }}\n </button>\n }\n <button mxButton size=\"sm\" type=\"button\" (click)=\"ref.next()\">\n {{ ref.isLast ? ref.labels.done : ref.labels.next }}\n </button>\n </span>\n </div>\n </div>\n }\n `,\n})\nexport class MxTourPanel {\n protected readonly ref = inject(MX_TOUR_REF);\n private readonly tour = inject(MxTour);\n\n protected readonly titleId = mxUniqueId('mx-tour-title');\n protected readonly bodyId = mxUniqueId('mx-tour-body');\n protected readonly progressId = mxUniqueId('mx-tour-progress');\n\n private readonly card = viewChild<ElementRef<HTMLElement>>('card');\n private readonly zone = inject(NgZone);\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Passo que está desenhado (muda depois de beforeShow). */\n protected readonly step = signal<MxTourStep | null>(null);\n private readonly target = signal<Element | null>(null);\n protected readonly spot = signal<Box | null>(null);\n protected readonly pos = signal({ top: 0, left: 0 });\n protected readonly placement = signal<Exclude<MxTourPlacement, 'auto'>>('bottom');\n protected readonly ready = signal(false);\n\n private frame = 0;\n private resizeObserver?: ResizeObserver;\n private showToken = 0;\n\n constructor() {\n const destroy = inject(DestroyRef);\n // mostra o passo sempre que o índice muda\n effect(() => {\n const i = this.ref.index();\n untracked(() => void this.show(i));\n });\n\n afterNextRender(() => {\n const schedule = () => this.schedule();\n this.zone.runOutsideAngular(() => {\n window.addEventListener('scroll', schedule, { capture: true, passive: true });\n window.addEventListener('resize', schedule, { passive: true });\n });\n if (typeof ResizeObserver !== 'undefined') this.resizeObserver = new ResizeObserver(schedule);\n destroy.onDestroy(() => {\n window.removeEventListener('scroll', schedule, { capture: true });\n window.removeEventListener('resize', schedule);\n this.resizeObserver?.disconnect();\n cancelFrame(this.frame);\n });\n });\n }\n\n private async show(index: number): Promise<void> {\n const token = ++this.showToken;\n const st = this.ref.steps[index];\n if (!st) return;\n // só se esconde antes do primeiro passo (para o posicionar); depois, esconder\n // o cartão tirava-lhe o foco a meio da visita\n if (!this.step()) this.ready.set(false);\n try {\n await st.beforeShow?.();\n } catch {\n // um beforeShow que falha não deve prender a visita\n }\n // espera um frame para o DOM reflectir o que beforeShow mudou\n await new Promise<void>((r) => nextFrame(r));\n if (token !== this.showToken || !this.ref.isOpen) return;\n\n // o alvo pode só aparecer depois de beforeShow (ex.: conteúdo de um separador)\n let el = this.tour.resolve(st.target);\n for (let i = 0; !el && st.target && i < 5; i++) {\n await new Promise<void>((r) => nextFrame(r));\n if (token !== this.showToken || !this.ref.isOpen) return;\n el = this.tour.resolve(st.target);\n }\n this.resizeObserver?.disconnect();\n this.target.set(el);\n if (el) {\n this.resizeObserver?.observe(el);\n const r = el.getBoundingClientRect();\n const fora = r.top < 0 || r.bottom > window.innerHeight || r.left < 0 || r.right > window.innerWidth;\n if (fora) {\n const reduzir = window.matchMedia?.('(prefers-reduced-motion: reduce)').matches;\n el.scrollIntoView?.({ block: 'center', inline: 'nearest', behavior: reduzir ? 'auto' : 'smooth' });\n }\n }\n this.step.set(st);\n // desenha já o cartão para o medir, posicionar e dar-lhe o foco\n this.cdr.detectChanges();\n const card = this.card()?.nativeElement;\n if (card) this.resizeObserver?.observe(card);\n this.update();\n this.ready.set(true);\n this.cdr.detectChanges();\n card?.focus({ preventScroll: true });\n }\n\n private schedule(): void {\n cancelFrame(this.frame);\n this.frame = nextFrame(() => this.zone.run(() => this.update()));\n }\n\n private update(): void {\n const st = this.step();\n const el = this.target();\n const r = el?.getBoundingClientRect();\n if (!st || !r || (r.width === 0 && r.height === 0)) {\n this.spot.set(null);\n return;\n }\n const pad = st.padding ?? 6;\n const spot: Box = { top: r.top - pad, left: r.left - pad, width: r.width + pad * 2, height: r.height + pad * 2 };\n this.spot.set(spot);\n\n const card = this.card()?.nativeElement;\n const cw = card?.offsetWidth ?? 320;\n const ch = card?.offsetHeight ?? 160;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const rtl = getComputedStyle(document.documentElement).direction === 'rtl';\n const side = (p: Exclude<MxTourPlacement, 'auto'>): Exclude<MxTourPlacement, 'auto'> =>\n rtl && (p === 'start' || p === 'end') ? (p === 'start' ? 'end' : 'start') : p;\n\n const fits: Record<Exclude<MxTourPlacement, 'auto'>, boolean> = {\n bottom: spot.top + spot.height + GAP + ch <= vh - MARGIN,\n top: spot.top - GAP - ch >= MARGIN,\n end: spot.left + spot.width + GAP + cw <= vw - MARGIN,\n start: spot.left - GAP - cw >= MARGIN,\n };\n const wanted = st.placement && st.placement !== 'auto' ? side(st.placement) : null;\n const order: Exclude<MxTourPlacement, 'auto'>[] = wanted\n ? [wanted, 'bottom', 'top', 'end', 'start']\n : ['bottom', 'top', 'end', 'start'];\n const p = order.find((o) => fits[o]) ?? 'bottom';\n\n let top: number;\n let left: number;\n if (p === 'bottom' || p === 'top') {\n top = p === 'bottom' ? spot.top + spot.height + GAP : spot.top - GAP - ch;\n left = spot.left + spot.width / 2 - cw / 2;\n } else {\n left = p === 'end' ? spot.left + spot.width + GAP : spot.left - GAP - cw;\n top = spot.top + spot.height / 2 - ch / 2;\n }\n const clamp = (v: number, min: number, max: number) => Math.min(Math.max(v, min), Math.max(min, max));\n this.placement.set(rtl && (p === 'start' || p === 'end') ? (p === 'start' ? 'end' : 'start') : p);\n this.pos.set({ top: clamp(top, MARGIN, vh - ch - MARGIN), left: clamp(left, MARGIN, vw - cw - MARGIN) });\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n const t = event.target as HTMLElement;\n const editavel = t.isContentEditable || /^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName);\n if (event.key === 'Escape' && this.ref.dismissible) {\n event.preventDefault();\n event.stopPropagation();\n this.ref.close(false);\n } else if (!editavel && event.key === 'ArrowRight' && !this.ref.isLast) {\n event.preventDefault();\n this.ref.next();\n } else if (!editavel && event.key === 'ArrowLeft' && this.ref.index() > 0) {\n event.preventDefault();\n this.ref.previous();\n }\n }\n}\n\n/**\n * Visita guiada: destaca elementos da página, um passo de cada vez, com um cartão\n * que explica cada um. O cartão é um diálogo modal: o foco fica nele, Escape fecha\n * e, no fim, o foco volta para onde estava.\n *\n * ```html\n * <input mxInput mxTourAnchor=\"pesquisa\" aria-label=\"Pesquisar\" />\n * <button mxButton mxTourAnchor=\"nova\">Nova factura</button>\n * ```\n *\n * ```ts\n * private readonly tour = inject(MxTour);\n * mostrar() {\n * this.tour.start([\n * { title: 'Bem-vindo', content: 'Mostramos o essencial em 2 passos.' },\n * { target: 'pesquisa', title: 'Pesquisa', content: 'Procura clientes e facturas.' },\n * { target: 'nova', title: 'Nova factura', content: 'Começa aqui.' },\n * ]).afterClosed.then((r) => r.completed && guardarQueViu());\n * }\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class MxTour {\n private readonly injector = inject(Injector);\n private readonly i18n = inject(MxI18n);\n private readonly anchors = new Map<string, Element>();\n private overlayRef?: OverlayRef;\n /** A visita em curso, ou null. */\n readonly active = signal<MxTourRef | null>(null);\n readonly isOpen = computed(() => !!this.active());\n\n /** Começa uma visita. Se já houver uma aberta, fecha-a primeiro. */\n start(steps: readonly MxTourStep[], options: MxTourOptions = {}): MxTourRef {\n this.active()?.close(false);\n const before = document.activeElement as HTMLElement | null;\n const ref = new MxTourRef(\n steps,\n options,\n () => {\n this.overlayRef?.dispose();\n this.overlayRef = undefined;\n this.active.set(null);\n if (before && before.isConnected) before.focus({ preventScroll: true });\n },\n this.i18n.messages().tour,\n );\n if (!steps.length) {\n ref.close(true);\n return ref;\n }\n this.overlayRef = createOverlayRef(this.injector, {\n positionStrategy: createGlobalPositionStrategy(this.injector).top('0').left('0'),\n scrollStrategy: createNoopScrollStrategy(),\n width: '100%',\n height: '100%',\n panelClass: 'mx-tour-pane',\n });\n const injector = Injector.create({\n providers: [{ provide: MX_TOUR_REF, useValue: ref }],\n parent: this.injector,\n });\n this.overlayRef.attach(new ComponentPortal(MxTourPanel, null, injector));\n this.active.set(ref);\n return ref;\n }\n\n /** Regista um elemento com um nome (usado por `mxTourAnchor`). */\n register(name: string, element: Element): void {\n this.anchors.set(name, element);\n }\n unregister(name: string, element: Element): void {\n if (this.anchors.get(name) === element) this.anchors.delete(name);\n }\n\n /** Encontra o elemento de um alvo: nome de âncora, selector CSS, elemento ou ElementRef. */\n resolve(target: MxTourTarget | null | undefined): Element | null {\n if (!target) return null;\n if (target instanceof ElementRef) return target.nativeElement;\n if (typeof target !== 'string') return target;\n return this.anchors.get(target) ?? safeQuery(target);\n }\n}\n\nfunction safeQuery(selector: string): Element | null {\n try {\n return document.querySelector(selector);\n } catch {\n return null;\n }\n}\n\n/** Dá um nome a um elemento para ser alvo de um passo: `mxTourAnchor=\"pesquisa\"`. */\n@Directive({ selector: '[mxTourAnchor]', exportAs: 'mxTourAnchor' })\nexport class MxTourAnchor {\n readonly name = input.required<string>({ alias: 'mxTourAnchor' });\n private readonly tour = inject(MxTour);\n private readonly el = inject<ElementRef<Element>>(ElementRef).nativeElement;\n\n constructor() {\n effect((onCleanup) => {\n const name = this.name();\n this.tour.register(name, this.el);\n onCleanup(() => this.tour.unregister(name, this.el));\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AA4FA;MACa,SAAS,CAAA;AAYT,IAAA,KAAA;AAEQ,IAAA,OAAA;;AAZV,IAAA,KAAK,GAAG,MAAM,CAAC,CAAC,4EAAC;;AAEjB,IAAA,WAAW;AACX,IAAA,MAAM;AACN,IAAA,WAAW;AACX,IAAA,QAAQ;AACT,IAAA,OAAO;IACP,IAAI,GAAG,KAAK;IAEpB,WAAA,CACW,KAA4B,EACrC,OAAsB,EACL,OAAkC,EACnD,QAAA,GAAyB,cAAc,CAAC,IAAI,EAAA;QAHnC,IAAA,CAAA,KAAK,GAAL,KAAK;QAEG,IAAA,CAAA,OAAO,GAAP,OAAO;AAGxB,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE;QAChD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,IAAI;QAC9C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI;AACxC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC3D;AAEA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,CAAC,IAAI,CAAC,IAAI;IACnB;AACA,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;IAC/C;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,MAAM;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;;YAC5B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAClC;IACA,QAAQ,GAAA;QACN,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC7B;AACA,IAAA,IAAI,CAAC,KAAa,EAAA;AAChB,QAAA,IAAI,IAAI,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;;IAEA,KAAK,CAAC,SAAS,GAAG,KAAK,EAAA;QACrB,IAAI,IAAI,CAAC,IAAI;YAAE;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,MAAM,MAAM,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE;AACjD,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AACpB,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACtB;AACD;AAED,MAAM,WAAW,GAAG,IAAI,cAAc,CAAY,aAAa,CAAC;AAShE;AACA,MAAM,SAAS,GAAG,CAAC,EAAc,KAC/B,OAAO,qBAAqB,KAAK,UAAU,GAAG,qBAAqB,CAAC,EAAE,CAAC,GAAI,UAAU,CAAC,EAAE,EAAE,EAAE,CAAuB;AACrH,MAAM,WAAW,GAAG,CAAC,EAAU,KAC7B,OAAO,oBAAoB,KAAK,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC;AAE1F,MAAM,GAAG,GAAG,EAAE;AACd,MAAM,MAAM,GAAG,EAAE;AAEjB;MAgGa,WAAW,CAAA;AACH,IAAA,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC;AAC3B,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AAEnB,IAAA,OAAO,GAAG,UAAU,CAAC,eAAe,CAAC;AACrC,IAAA,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC;AACnC,IAAA,UAAU,GAAG,UAAU,CAAC,kBAAkB,CAAC;AAE7C,IAAA,IAAI,GAAG,SAAS,CAA0B,MAAM,2EAAC;AACjD,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,GAAG,GAAG,MAAM,CAAC,iBAAiB,CAAC;;AAG7B,IAAA,IAAI,GAAG,MAAM,CAAoB,IAAI,2EAAC;AACxC,IAAA,MAAM,GAAG,MAAM,CAAiB,IAAI,6EAAC;AACnC,IAAA,IAAI,GAAG,MAAM,CAAa,IAAI,2EAAC;AAC/B,IAAA,GAAG,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,0EAAC;AACjC,IAAA,SAAS,GAAG,MAAM,CAAmC,QAAQ,gFAAC;AAC9D,IAAA,KAAK,GAAG,MAAM,CAAC,KAAK,4EAAC;IAEhC,KAAK,GAAG,CAAC;AACT,IAAA,cAAc;IACd,SAAS,GAAG,CAAC;AAErB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC;;QAElC,MAAM,CAAC,MAAK;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAC1B,YAAA,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,QAAA,CAAC,CAAC;QAEF,eAAe,CAAC,MAAK;YACnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE;AACtC,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,gBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7E,gBAAA,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAChE,YAAA,CAAC,CAAC;YACF,IAAI,OAAO,cAAc,KAAK,WAAW;gBAAE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC;AAC7F,YAAA,OAAO,CAAC,SAAS,CAAC,MAAK;AACrB,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACjE,gBAAA,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,CAAC;AAC9C,gBAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,gBAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;AACzB,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;IACJ;IAEQ,MAAM,IAAI,CAAC,KAAa,EAAA;AAC9B,QAAA,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,SAAS;QAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;AAChC,QAAA,IAAI,CAAC,EAAE;YAAE;;;AAGT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAAE,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;AACvC,QAAA,IAAI;AACF,YAAA,MAAM,EAAE,CAAC,UAAU,IAAI;QACzB;AAAE,QAAA,MAAM;;QAER;;AAEA,QAAA,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;YAAE;;AAGlD,QAAA,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC;AACrC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9C,YAAA,MAAM,IAAI,OAAO,CAAO,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM;gBAAE;YAClD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC;QACnC;AACA,QAAA,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE;AACjC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,IAAI,EAAE,EAAE;AACN,YAAA,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,EAAE,CAAC;AAChC,YAAA,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE;AACpC,YAAA,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU;YACpG,IAAI,IAAI,EAAE;gBACR,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,GAAG,kCAAkC,CAAC,CAAC,OAAO;gBAC/E,EAAE,CAAC,cAAc,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAC;YACpG;QACF;AACA,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;;AAEjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa;AACvC,QAAA,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,IAAI,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;AACpB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE;QACxB,IAAI,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IACtC;IAEQ,QAAQ,GAAA;AACd,QAAA,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE;IAEQ,MAAM,GAAA;AACZ,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE;AACtB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;AACxB,QAAA,MAAM,CAAC,GAAG,EAAE,EAAE,qBAAqB,EAAE;QACrC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;YACnB;QACF;AACA,QAAA,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,IAAI,CAAC;AAC3B,QAAA,MAAM,IAAI,GAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,GAAG,GAAG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,GAAG,GAAG,CAAC,EAAE;AAChH,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa;AACvC,QAAA,MAAM,EAAE,GAAG,IAAI,EAAE,WAAW,IAAI,GAAG;AACnC,QAAA,MAAM,EAAE,GAAG,IAAI,EAAE,YAAY,IAAI,GAAG;AACpC,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU;AAC5B,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW;AAC7B,QAAA,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,SAAS,KAAK,KAAK;AAC1E,QAAA,MAAM,IAAI,GAAG,CAAC,CAAmC,KAC/C,GAAG,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO,IAAI,CAAC;AAE/E,QAAA,MAAM,IAAI,GAAsD;AAC9D,YAAA,MAAM,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM;YACxD,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE,IAAI,MAAM;AAClC,YAAA,GAAG,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,EAAE,IAAI,EAAE,GAAG,MAAM;YACrD,KAAK,EAAE,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,IAAI,MAAM;SACtC;QACD,MAAM,MAAM,GAAG,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,SAAS,KAAK,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI;QAClF,MAAM,KAAK,GAAuC;cAC9C,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;cACxC,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;AACrC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ;AAEhD,QAAA,IAAI,GAAW;AACf,QAAA,IAAI,IAAY;QAChB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,KAAK,EAAE;YACjC,GAAG,GAAG,CAAC,KAAK,QAAQ,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,GAAG,EAAE;AACzE,YAAA,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QAC5C;aAAO;YACL,IAAI,GAAG,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE;AACxE,YAAA,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC;QAC3C;AACA,QAAA,MAAM,KAAK,GAAG,CAAC,CAAS,EAAE,GAAW,EAAE,GAAW,KAAK,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACrG,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO,IAAI,CAAC,CAAC;AACjG,QAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1G;AAEU,IAAA,SAAS,CAAC,KAAoB,EAAA;AACtC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,MAAqB;AACrC,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,iBAAiB,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;AACnF,QAAA,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;YAClD,KAAK,CAAC,cAAc,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;AACvB,YAAA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC;QACvB;AAAO,aAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,YAAY,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;YACtE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;QACjB;AAAO,aAAA,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,KAAK,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;YACzE,KAAK,CAAC,cAAc,EAAE;AACtB,YAAA,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;QACrB;IACF;wGA/JW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAX,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,WAAW,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,eAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,eAAA,EAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,MAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,MAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAzFZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EA3FS,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,YAAY,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,+BAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA;;4FA6FvC,WAAW,EAAA,UAAA,EAAA,CAAA;kBA/FvB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,QAAQ,CAAC;oBACnD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAE,iBAAiB,CAAC,IAAI;AACrC,oBAAA,IAAI,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE;AAChC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFT,EAAA,CAAA;AACF,iBAAA;4FAS4D,MAAM,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;AA0JnE;;;;;;;;;;;;;;;;;;;;AAoBG;MAEU,MAAM,CAAA;AACA,IAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,OAAO,GAAG,IAAI,GAAG,EAAmB;AAC7C,IAAA,UAAU;;AAET,IAAA,MAAM,GAAG,MAAM,CAAmB,IAAI,6EAAC;AACvC,IAAA,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,6EAAC;;AAGjD,IAAA,KAAK,CAAC,KAA4B,EAAE,OAAA,GAAyB,EAAE,EAAA;QAC7D,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC;AAC3B,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAmC;QAC3D,MAAM,GAAG,GAAG,IAAI,SAAS,CACvB,KAAK,EACL,OAAO,EACP,MAAK;AACH,YAAA,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,UAAU,GAAG,SAAS;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AACrB,YAAA,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW;gBAAE,MAAM,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;QACzE,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,CAC1B;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;AACjB,YAAA,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;AACf,YAAA,OAAO,GAAG;QACZ;QACA,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE;AAChD,YAAA,gBAAgB,EAAE,4BAA4B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;YAChF,cAAc,EAAE,wBAAwB,EAAE;AAC1C,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,UAAU,EAAE,cAAc;AAC3B,SAAA,CAAC;AACF,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC/B,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;YACpD,MAAM,EAAE,IAAI,CAAC,QAAQ;AACtB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,eAAe,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AACxE,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC;AACpB,QAAA,OAAO,GAAG;IACZ;;IAGA,QAAQ,CAAC,IAAY,EAAE,OAAgB,EAAA;QACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC;IACjC;IACA,UAAU,CAAC,IAAY,EAAE,OAAgB,EAAA;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC;IACnE;;AAGA,IAAA,OAAO,CAAC,MAAuC,EAAA;AAC7C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,IAAI;QACxB,IAAI,MAAM,YAAY,UAAU;YAAE,OAAO,MAAM,CAAC,aAAa;QAC7D,IAAI,OAAO,MAAM,KAAK,QAAQ;AAAE,YAAA,OAAO,MAAM;AAC7C,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC;IACtD;wGA1DW,MAAM,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAN,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAM,cADO,MAAM,EAAA,CAAA;;4FACnB,MAAM,EAAA,UAAA,EAAA,CAAA;kBADlB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA8DlC,SAAS,SAAS,CAAC,QAAgB,EAAA;AACjC,IAAA,IAAI;AACF,QAAA,OAAO,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;IACzC;AAAE,IAAA,MAAM;AACN,QAAA,OAAO,IAAI;IACb;AACF;AAEA;MAEa,YAAY,CAAA;IACd,IAAI,GAAG,KAAK,CAAC,QAAQ,2EAAW,KAAK,EAAE,cAAc,EAAA,CAAG;AAChD,IAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,IAAA,EAAE,GAAG,MAAM,CAAsB,UAAU,CAAC,CAAC,aAAa;AAE3E,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,CAAC,CAAC,SAAS,KAAI;AACnB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;AACjC,YAAA,SAAS,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AACtD,QAAA,CAAC,CAAC;IACJ;wGAXW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA,EAAE,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,cAAc,EAAE;;;ACjgBnE;;AAEG;;"}
@@ -3,7 +3,7 @@
3
3
  * Os componentes vivem em entradas secundárias, para só incluíres o que usas:
4
4
  * import { MxButton } from '@muxima-ui/core/button';
5
5
  */
6
- const MUXIMA_VERSION = '1.5.0';
6
+ const MUXIMA_VERSION = '2.0.1';
7
7
 
8
8
  /**
9
9
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"muxima-ui-core.mjs","sources":["../../../projects/core/src/public-api.ts","../../../projects/core/src/muxima-ui-core.ts"],"sourcesContent":["/*\n * Muxima UI — ponto de entrada principal.\n * Os componentes vivem em entradas secundárias, para só incluíres o que usas:\n * import { MxButton } from '@muxima-ui/core/button';\n */\nexport const MUXIMA_VERSION = '1.5.0';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;;AAIG;AACI,MAAM,cAAc,GAAG;;ACL9B;;AAEG;;"}
1
+ {"version":3,"file":"muxima-ui-core.mjs","sources":["../../../projects/core/src/public-api.ts","../../../projects/core/src/muxima-ui-core.ts"],"sourcesContent":["/*\n * Muxima UI — ponto de entrada principal.\n * Os componentes vivem em entradas secundárias, para só incluíres o que usas:\n * import { MxButton } from '@muxima-ui/core/button';\n */\nexport const MUXIMA_VERSION = '2.0.1';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"AAAA;;;;AAIG;AACI,MAAM,cAAc,GAAG;;ACL9B;;AAEG;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@muxima-ui/core",
3
- "version": "1.5.0",
3
+ "version": "2.0.1",
4
4
  "description": "Componentes Angular acessíveis e sóbrios para aplicações empresariais.",
5
5
  "keywords": [
6
6
  "angular",
@@ -29,7 +29,7 @@ declare function mxHsvaToHex({ h, s, v, a }: MxHsva): string;
29
29
  declare function mxContrast(a: string, b: string): number;
30
30
  /**
31
31
  * Nome aproximado da cor, para o leitor de ecrã: "azul escuro", "cinzento claro".
32
- * Por omissão em português; passa `names` para outro idioma (ex.: `MX_MESSAGES_EN.colorPicker.names`).
32
+ * Por omissão em inglês; passa `names` para outro idioma (ex.: `MX_MESSAGES_PT.colorPicker.names`).
33
33
  */
34
34
  declare function mxColorName(hex: string, names?: MxColorNames): string;
35
35
 
@@ -135,7 +135,7 @@ declare class MxDataGrid<T = any> {
135
135
  /** Célula activa: linha e coluna na grelha (0 = cabeçalho). */
136
136
  private readonly active;
137
137
  protected readonly showToolbar: _angular_core.Signal<boolean>;
138
- protected readonly offset: _angular_core.Signal<0 | 1>;
138
+ protected readonly offset: _angular_core.Signal<1 | 0>;
139
139
  protected readonly hasFilters: _angular_core.Signal<boolean>;
140
140
  protected readonly headerRows: _angular_core.Signal<number>;
141
141
  protected readonly hideableColumns: _angular_core.Signal<MxGridColumn<T>[]>;
@@ -101,10 +101,14 @@ declare class MxCalendar {
101
101
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MxCalendar, "mx-calendar", ["mxCalendar"], { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "dateDisabled": { "alias": "dateDisabled"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "range": { "alias": "range"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "selected": "selected"; "range": "rangeChange"; "rangeSelected": "rangeSelected"; }, never, never, true, never>;
102
102
  }
103
103
 
104
- /** Converte "dd/mm/aaaa" numa data. Aceita também "-" e "." como separadores. */
105
104
  /** Ordem do dia (d), mês (m) e ano (y) numa data escrita. */
106
105
  type MxDateOrder = 'dmy' | 'mdy' | 'ymd';
106
+ /**
107
+ * Converte uma data escrita (por omissão "mm/dd/aaaa"; "dmy" para "dd/mm/aaaa").
108
+ * Aceita também "-" e "." como separadores.
109
+ */
107
110
  declare function mxParseDate(text: string, order?: MxDateOrder): Date | null;
111
+ /** Escreve a data na ordem indicada (por omissão "mm/dd/aaaa"). */
108
112
  declare function mxFormatDate(d: Date | null, order?: MxDateOrder): string;
109
113
  /**
110
114
  * Campo de data: escreve-se "dd/mm/aaaa" ou escolhe-se no calendário.
@@ -193,7 +197,7 @@ interface MxDateRangePreset {
193
197
  }
194
198
  /**
195
199
  * Atalhos comuns: últimos 7 e 30 dias, este mês e o mês passado.
196
- * Os nomes vêm de `labels` (por omissão em português); para o idioma activo,
200
+ * Os nomes vêm de `labels` (por omissão em inglês); para o idioma activo,
197
201
  * usa `mxDefaultRangePresets(inject(MxI18n).messages().dateRangePicker)`.
198
202
  */
199
203
  declare function mxDefaultRangePresets(labels?: MxMessages['dateRangePicker']): MxDateRangePreset[];
@@ -7,7 +7,7 @@ interface MxFileRejection {
7
7
  reason: 'type' | 'size' | 'count';
8
8
  message: string;
9
9
  }
10
- /** "1,2 MB", "340 kB". */
10
+ /** "1.2 MB", "340 kB" (com locale "pt-AO": "1,2 MB"). */
11
11
  declare function mxFormatBytes(bytes: number, locale?: string): string;
12
12
  /** true se o ficheiro corresponde a `accept` (".pdf,image/*"). */
13
13
  declare function mxFileMatches(file: File, accept: string): boolean;
@@ -157,13 +157,13 @@ declare class MxFieldset {
157
157
  *
158
158
  * ```html
159
159
  * <div mxInputGroup>
160
- * <span mxInputAddon>Kz</span>
160
+ * <span mxInputAddon>US$</span>
161
161
  * <input mxInput inputmode="decimal" aria-label="Valor" />
162
162
  * <span mxInputAddon>,00</span>
163
163
  * </div>
164
164
  * ```
165
165
  *
166
- * O prefixo e o sufixo são só visuais: inclui a unidade no label (ex.: "Valor em Kz").
166
+ * O prefixo e o sufixo são só visuais: inclui a unidade no label (ex.: "Valor em US$").
167
167
  */
168
168
  declare class MxInputGroup {
169
169
  static ɵfac: i0.ɵɵFactoryDeclaration<MxInputGroup, never>;
@@ -267,7 +267,7 @@ declare const MX_MESSAGES_EN: MxMessages;
267
267
  /** Idiomas incluídos na biblioteca. Outros podem ser registados com `messages`. */
268
268
  type MxBuiltInLocale = 'pt' | 'en';
269
269
  interface MxI18nConfig {
270
- /** Idioma inicial: "pt" (por omissão na 1.x) ou "en". Aceita também "pt-BR", "en-GB", etc. */
270
+ /** Idioma inicial: "en" (por omissão) ou "pt". Aceita também "pt-BR", "en-GB", etc. */
271
271
  locale?: string;
272
272
  /**
273
273
  * Textos por idioma. Para "pt" e "en" basta indicar o que muda; um idioma novo
@@ -14,7 +14,7 @@ interface MxNotification<D = unknown> {
14
14
  category?: string;
15
15
  data?: D;
16
16
  }
17
- /** "agora", "há 5 min", "ontem", "há 3 dias" e, depois de uma semana, a data. */
17
+ /** "now", "5 min ago", "yesterday", "3 days ago" e, depois de uma semana, a data (em inglês por omissão). */
18
18
  declare function mxRelativeTime(date: Date, now?: Date, locale?: string, nowText?: string): string;
19
19
  /** Modelo para o conteúdo de cada notificação: `<ng-template mxNotificationContent let-n>`. */
20
20
  declare class MxNotificationContent {
@@ -10,7 +10,7 @@ import { ControlValueAccessor } from '@angular/forms';
10
10
  *
11
11
  * ```html
12
12
  * <mx-form-field>
13
- * <label mxLabel>Orçamento (mil Kz)</label>
13
+ * <label mxLabel>Orçamento (US$)</label>
14
14
  * <input type="range" mxSlider min="0" max="500" step="10" formControlName="orcamento" />
15
15
  * </mx-form-field>
16
16
  * ```
@@ -28,7 +28,7 @@ declare class MxSlider extends MxNativeControl implements OnInit {
28
28
 
29
29
  /**
30
30
  * Intervalo com dois cursores (mínimo e máximo), feito com dois `<input type="range">`
31
- * nativos: cada cursor tem o seu teclado e é anunciado como "Preço, mínimo, 20 000 Kz".
31
+ * nativos: cada cursor tem o seu teclado e é anunciado como "Preço, mínimo, 20 US$".
32
32
  *
33
33
  * ```html
34
34
  * <mx-form-field>
@@ -49,7 +49,7 @@ declare class MxSortHeader {
49
49
  }
50
50
  /**
51
51
  * Ordena uma lista segundo o estado de `MxTable`. Texto é comparado segundo `locale`
52
- * (português por omissão; acentos e maiúsculas contam como a mesma letra), números numericamente.
52
+ * (inglês por omissão; acentos e maiúsculas contam como a mesma letra), números numericamente.
53
53
  */
54
54
  declare function mxSortData<T>(rows: readonly T[], sort: MxSortState, accessor?: (row: T, key: string) => unknown, locale?: string): T[];
55
55
  declare const MX_TABLE: readonly [typeof MxTable, typeof MxSortHeader];
@@ -35,11 +35,6 @@ interface MxTourLabels {
35
35
  /** Texto do progresso, por exemplo "Passo 2 de 5". */
36
36
  progress: (current: number, total: number) => string;
37
37
  }
38
- /**
39
- * Textos em português.
40
- * @deprecated Os textos por omissão vêm agora do idioma activo (`MxI18n`); usa `MX_MESSAGES_PT.tour`.
41
- */
42
- declare const MX_TOUR_LABELS: MxTourLabels;
43
38
  interface MxTourOptions {
44
39
  /** Passo inicial (base 0). */
45
40
  startAt?: number;
@@ -164,5 +159,5 @@ declare class MxTourAnchor {
164
159
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MxTourAnchor, "[mxTourAnchor]", ["mxTourAnchor"], { "name": { "alias": "mxTourAnchor"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
165
160
  }
166
161
 
167
- export { MX_TOUR_LABELS, MxTour, MxTourAnchor, MxTourPanel, MxTourRef };
162
+ export { MxTour, MxTourAnchor, MxTourPanel, MxTourRef };
168
163
  export type { MxTourLabels, MxTourOptions, MxTourPlacement, MxTourResult, MxTourStep, MxTourStepContext, MxTourTarget };
@@ -1,3 +1,3 @@
1
- declare const MUXIMA_VERSION = "1.5.0";
1
+ declare const MUXIMA_VERSION = "2.0.1";
2
2
 
3
3
  export { MUXIMA_VERSION };