@seniorsistemas/angular-components 19.1.1 → 19.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +58 -25
  2. package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +8 -8
  3. package/dynamic-form/dynamic-form/dynamic-form.directive.d.ts +3 -0
  4. package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +7 -0
  5. package/dynamic-form/public-api.d.ts +2 -3
  6. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +140 -99
  7. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +12 -12
  8. package/esm2022/dynamic-form/dynamic-form/dynamic-form.directive.mjs +17 -1
  9. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -1
  10. package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
  11. package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
  12. package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
  13. package/esm2022/dynamic-form/public-api.mjs +3 -4
  14. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
  15. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +2 -3
  16. package/esm2022/lib/locale/fallback.mjs +10 -2
  17. package/esm2022/locale/lib/locale/apply-localized-mask.mjs +19 -0
  18. package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
  19. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +5 -4
  20. package/esm2022/locale/public-api.mjs +2 -1
  21. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +12 -148
  22. package/esm2022/number-input/lib/number-input/number-input.module.mjs +5 -5
  23. package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +32 -35
  24. package/esm2022/spotlight/lib/spotlight/spotlight-overlay/spotlight-overlay.component.mjs +460 -0
  25. package/esm2022/spotlight/lib/spotlight/spotlight-step.directive.mjs +50 -0
  26. package/esm2022/spotlight/lib/spotlight/spotlight-tour.service.mjs +251 -0
  27. package/esm2022/spotlight/lib/spotlight/spotlight.component.mjs +193 -0
  28. package/esm2022/spotlight/lib/spotlight/types/spotlight-position.mjs +2 -0
  29. package/esm2022/spotlight/lib/spotlight/types/spotlight-step.mjs +2 -0
  30. package/esm2022/spotlight/lib/spotlight/types/spotlight-stop-event.mjs +2 -0
  31. package/esm2022/spotlight/public-api.mjs +4 -0
  32. package/esm2022/spotlight/seniorsistemas-angular-components-spotlight.mjs +5 -0
  33. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +20 -4
  34. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +139 -98
  35. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
  36. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +35 -19
  37. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  38. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -3
  39. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  40. package/fesm2022/seniorsistemas-angular-components-locale.mjs +22 -4
  41. package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
  42. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +14 -151
  43. package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
  44. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +31 -34
  45. package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
  46. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs +947 -0
  47. package/fesm2022/seniorsistemas-angular-components-spotlight.mjs.map +1 -0
  48. package/fesm2022/seniorsistemas-angular-components-table.mjs +20 -5
  49. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  50. package/fesm2022/seniorsistemas-angular-components.mjs +9 -1
  51. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  52. package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -3
  53. package/locale/lib/locale/apply-localized-mask.d.ts +9 -0
  54. package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -3
  55. package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +3 -2
  56. package/locale/public-api.d.ts +1 -0
  57. package/number-input/lib/number-input/number-input.directive.d.ts +7 -47
  58. package/number-input/lib/number-input/number-input.module.d.ts +2 -2
  59. package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +8 -9
  60. package/package.json +13 -7
  61. package/spotlight/README.md +311 -0
  62. package/spotlight/index.d.ts +5 -0
  63. package/spotlight/lib/spotlight/spotlight-overlay/spotlight-overlay.component.d.ts +70 -0
  64. package/spotlight/lib/spotlight/spotlight-step.directive.d.ts +28 -0
  65. package/spotlight/lib/spotlight/spotlight-tour.service.d.ts +146 -0
  66. package/spotlight/lib/spotlight/spotlight.component.d.ts +82 -0
  67. package/spotlight/lib/spotlight/types/spotlight-position.d.ts +1 -0
  68. package/spotlight/lib/spotlight/types/spotlight-step.d.ts +21 -0
  69. package/spotlight/lib/spotlight/types/spotlight-stop-event.d.ts +13 -0
  70. package/spotlight/public-api.d.ts +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seniorsistemas-angular-components-spotlight.mjs","sources":["../../projects/angular-components/spotlight/src/lib/spotlight/spotlight.component.ts","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight.component.html","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-overlay/spotlight-overlay.component.ts","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-overlay/spotlight-overlay.component.html","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-tour.service.ts","../../projects/angular-components/spotlight/src/lib/spotlight/spotlight-step.directive.ts","../../projects/angular-components/spotlight/src/seniorsistemas-angular-components-spotlight.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, input, output, signal, TemplateRef } from '@angular/core';\n\nimport { TranslateModule } from '@ngx-translate/core';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { CheckboxComponent } from '@seniorsistemas/angular-components/checkbox';\n\nimport { SpotlightPosition } from './types/spotlight-position';\nimport { SpotlightStepAction } from './types/spotlight-step';\n\n/**\n * Componente de popover do Spotlight.\n *\n * Exibe o card de destaque com título, mensagem, seta direcional, contador de passos,\n * botões de navegação e, em modo simples (passo único), o checkbox \"não mostrar novamente\".\n *\n * Este componente é instanciado programaticamente pelo `SpotlightOverlayComponent`\n * via CDK Overlay. Normalmente não é usado diretamente no template.\n */\n@Component({\n selector: 's-spotlight',\n templateUrl: './spotlight.component.html',\n standalone: true,\n imports: [CommonModule, ButtonModule, CheckboxComponent, TranslateModule],\n})\nexport class SpotlightComponent {\n /** Título do popover. Aceita string ou `TemplateRef` para conteúdo dinâmico. */\n title = input<string | TemplateRef<any>>('');\n\n /** Mensagem principal do popover. Aceita string ou `TemplateRef` para conteúdo dinâmico. */\n message = input<string | TemplateRef<any>>();\n\n /** Template opcional para área de mídia/conteúdo customizado acima da mensagem. */\n content = input<TemplateRef<any> | null>(null);\n\n /** Posição do popover em relação ao elemento alvo. @default 'bottom-center' */\n position = input<SpotlightPosition>('bottom-center');\n\n /** Número do passo atual (1-based) exibido no contador. @default 1 */\n currentStep = input(1);\n\n /** Total de passos do tour, usado no contador e para controle de botões. @default 1 */\n totalSteps = input(1);\n\n /**\n * Exibe o checkbox \"não mostrar novamente\" (apenas em passo único).\n * Passe `false` para suprimir o checkbox quando não for necessário persistir a preferência.\n * @default true\n */\n showDoNotShowAgain = input(true);\n\n /** Lista de botões de ação adicionais exibidos na área de rodapé. */\n actions = input<SpotlightStepAction[]>([]);\n\n /**\n * Deslocamento em pixels para posicionar a seta manualmente no eixo principal.\n * Quando `null`, o alinhamento é controlado pela `position`. @default null\n */\n arrowOffsetPx = input<number | null>(null);\n\n /** Emitido ao clicar no botão de fechar (X). */\n closed = output<void>();\n\n /** Emitido ao clicar em \"Próximo\". */\n next = output<void>();\n\n /** Emitido ao clicar em \"Voltar\". */\n previous = output<void>();\n\n /** Emitido ao clicar em \"Entendido\" (modo simples, passo único). */\n understand = output<void>();\n\n /** Estado atual do checkbox \"não mostrar novamente\". */\n isDoNotShowAgainChecked = signal(false);\n\n private static instanceCount = 0;\n\n /** @internal */\n protected readonly instanceId = `spotlight-${++SpotlightComponent.instanceCount}`;\n\n /** @internal */\n readonly titleId = `${this.instanceId}-title`;\n\n /** @internal */\n readonly descId = `${this.instanceId}-desc`;\n\n get titleTemplate(): TemplateRef<any> | null {\n const v = this.title();\n return v instanceof TemplateRef ? v : null;\n }\n\n get titleString(): string {\n const v = this.title();\n return v instanceof TemplateRef ? '' : (v ?? '');\n }\n\n get messageTemplate(): TemplateRef<any> | null {\n const v = this.message();\n return v instanceof TemplateRef ? v : null;\n }\n\n get messageString(): string {\n const v = this.message();\n return v instanceof TemplateRef ? '' : (v ?? '');\n }\n\n get arrowPosition(): SpotlightPosition {\n const [direction] = this.position().split('-') as [string, string];\n const [, alignment] = this.position().split('-') as [string, string];\n const oppositeDirection = this.getOppositeDirection(direction);\n\n return `${oppositeDirection}-${alignment}` as SpotlightPosition;\n }\n\n get isArrowTop(): boolean {\n return this.arrowPosition.startsWith('top-');\n }\n\n get isArrowBottom(): boolean {\n return this.arrowPosition.startsWith('bottom-');\n }\n\n get isArrowLeft(): boolean {\n return this.arrowPosition.startsWith('left-');\n }\n\n get isArrowRight(): boolean {\n return this.arrowPosition.startsWith('right-');\n }\n\n get arrowRotation(): string {\n const direction = this.arrowPosition.split('-')[0];\n\n switch (direction) {\n case 'top':\n return '';\n case 'bottom':\n return 'rotate-180';\n case 'left':\n return '-rotate-90';\n case 'right':\n return 'rotate-90';\n default:\n return '';\n }\n }\n\n get arrowAlignmentClass(): string {\n const offset = this.arrowOffsetPx();\n\n if (offset !== null) {\n return 'justify-start';\n }\n\n const alignment = this.arrowPosition.split('-')[1];\n\n if (this.isArrowTop || this.isArrowBottom) {\n switch (alignment) {\n case 'start':\n return 'justify-start';\n case 'center':\n return 'justify-center';\n case 'end':\n return 'justify-end';\n default:\n return '';\n }\n } else {\n switch (alignment) {\n case 'start':\n return 'items-start justify-start';\n case 'center':\n return 'items-center justify-center';\n case 'end':\n return 'items-end justify-end';\n default:\n return '';\n }\n }\n }\n\n get arrowPaddingStyle(): Record<string, string> {\n const offset = this.arrowOffsetPx();\n if (offset === null) {\n return {};\n }\n\n if (this.isArrowTop || this.isArrowBottom) {\n return { 'padding-left': `${offset}px`, 'padding-right': '0' };\n }\n\n return { 'padding-top': `${offset}px`, 'padding-bottom': '0' };\n }\n\n /** Emite o evento `closed`. Chamado pelo botão de fechar no template. */\n onClose(): void {\n this.closed.emit();\n }\n\n /** Emite o evento `next`. Chamado pelo botão \"Próximo\" no template. */\n onNext(): void {\n this.next.emit();\n }\n\n /** Emite o evento `previous`. Chamado pelo botão \"Voltar\" no template. */\n onPrevious(): void {\n this.previous.emit();\n }\n\n /** Emite o evento `understand`. Chamado pelo botão \"Entendido\" no template. */\n onUnderstand(): void {\n this.understand.emit();\n }\n\n /** Alterna o estado de `isDoNotShowAgainChecked`. */\n toggleDoNotShowAgain(): void {\n this.isDoNotShowAgainChecked.update((v) => !v);\n }\n\n private getOppositeDirection(direction: string): string {\n switch (direction) {\n case 'top':\n return 'bottom';\n case 'bottom':\n return 'top';\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n default:\n return direction;\n }\n }\n}\n\n","<div\n [attr.role]=\"totalSteps() > 1 ? 'dialog' : 'tooltip'\"\n [attr.aria-modal]=\"totalSteps() > 1 ? 'true' : null\"\n [attr.aria-labelledby]=\"titleId\"\n [attr.aria-describedby]=\"descId\"\n class=\"flex max-w-[342px]\"\n [ngClass]=\"isArrowLeft || isArrowRight ? 'flex-row' : 'flex-col'\"\n>\n @if (isArrowTop) {\n <ng-container *ngTemplateOutlet=\"arrowTopTemplate\"></ng-container>\n }\n\n @if (isArrowLeft) {\n <ng-container *ngTemplateOutlet=\"arrowLeftTemplate\"></ng-container>\n }\n\n <div\n class=\"relative flex w-full flex-col overflow-hidden rounded-[4px] bg-grayscale-0\"\n style=\"\n box-shadow:\n 0 3px 5px rgba(0, 0, 0, 0.2),\n 0 1px 18px rgba(0, 0, 0, 0.12),\n 0 6px 10px rgba(0, 0, 0, 0.14);\n \"\n >\n <!-- Região aria-live para anunciação de mudança de passo para leitores de tela -->\n <span\n class=\"sr-only\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n @if (totalSteps() > 1) {\n {{\n 'platform.angular_components.step_progress'\n | translate: { current: currentStep(), total: totalSteps() }\n }}\n }\n </span>\n <div class=\"flex h-[40px] w-full items-center justify-between p-[12px]\">\n <div class=\"flex min-w-0 flex-1 items-center gap-[8px]\">\n <h2\n [id]=\"titleId\"\n class=\"flex-1 overflow-hidden overflow-ellipsis whitespace-nowrap font-open-sans text-[14px] font-bold leading-[1.5] text-grayscale-90\"\n >\n @if (titleTemplate) {\n <ng-container *ngTemplateOutlet=\"titleTemplate\"></ng-container>\n } @else {\n {{ titleString }}\n }\n </h2>\n </div>\n <button\n (click)=\"onClose()\"\n class=\"flex h-[16px] w-[16px] flex-none items-center justify-center text-grayscale-90 transition-colors hover:text-grayscale-100\"\n [attr.aria-label]=\"'platform.angular_components.close' | translate\"\n >\n <i class=\"fas fa-times\"></i>\n </button>\n </div>\n\n @if (content()) {\n <ng-container *ngTemplateOutlet=\"content()\"></ng-container>\n }\n\n <div class=\"flex w-full flex-col items-start gap-[20px] bg-grayscale-0 p-[12px]\">\n <div\n [id]=\"descId\"\n class=\"w-full whitespace-pre-wrap font-open-sans text-[14px] font-normal leading-[1.5] text-grayscale-90\"\n >\n @if (messageTemplate) {\n <ng-container *ngTemplateOutlet=\"messageTemplate\"></ng-container>\n } @else {\n {{ messageString }}\n }\n </div>\n\n <div class=\"flex w-full flex-wrap gap-3\">\n @if (totalSteps() > 1) {\n <p class=\"font-open-sans text-[14px] font-normal leading-[1.5] text-grayscale-90\">\n {{\n 'platform.angular_components.step_counter'\n | translate: { current: currentStep(), total: totalSteps() }\n }}\n </p>\n }\n\n @if (totalSteps() === 1 && showDoNotShowAgain()) {\n <s-checkbox\n [checked]=\"isDoNotShowAgainChecked()\"\n (checkedChange)=\"toggleDoNotShowAgain()\"\n [label]=\"'platform.angular_components.dont_show_again' | translate\"\n ></s-checkbox>\n }\n\n <div\n class=\"flex flex-wrap items-start justify-end gap-[8px]\"\n [ngClass]=\"totalSteps() > 1 ? 'w-full' : ''\"\n >\n @for (action of actions(); track action.label) {\n <s-button\n [label]=\"action.label\"\n (clicked)=\"action.handler()\"\n priority=\"default\"\n size=\"small\"\n class=\"flex-none\"\n ></s-button>\n }\n\n @if (totalSteps() > 1 && currentStep() > 1) {\n <s-button\n [label]=\"'platform.angular_components.back' | translate\"\n (clicked)=\"onPrevious()\"\n priority=\"default\"\n size=\"small\"\n class=\"flex-none\"\n ></s-button>\n }\n\n <s-button\n [label]=\"\n totalSteps() <= 1\n ? ('platform.angular_components.understood' | translate)\n : currentStep() < totalSteps()\n ? ('platform.angular_components.next' | translate)\n : ('platform.angular_components.complete' | translate)\n \"\n (clicked)=\"totalSteps() > 1 ? onNext() : onUnderstand()\"\n priority=\"secondary\"\n size=\"small\"\n class=\"flex-none\"\n ></s-button>\n </div>\n </div>\n </div>\n </div>\n\n @if (isArrowBottom) {\n <ng-container *ngTemplateOutlet=\"arrowBottomTemplate\"></ng-container>\n }\n\n @if (isArrowRight) {\n <ng-container *ngTemplateOutlet=\"arrowRightTemplate\"></ng-container>\n }\n</div>\n\n<!-- Arrow Templates -->\n<ng-template #arrowTopTemplate>\n <div\n class=\"relative z-10 flex h-[8px] w-full px-[12px] py-0\"\n [ngClass]=\"arrowAlignmentClass\"\n [ngStyle]=\"arrowPaddingStyle\"\n >\n <svg\n width=\"16\"\n height=\"8\"\n viewBox=\"0 0 16 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"text-grayscale-0\"\n [ngClass]=\"arrowRotation\"\n >\n <path\n d=\"M0 8L8 0L16 8\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n</ng-template>\n\n<ng-template #arrowBottomTemplate>\n <div\n class=\"relative z-10 flex h-[8px] w-full px-[12px] py-0\"\n [ngClass]=\"arrowAlignmentClass\"\n [ngStyle]=\"arrowPaddingStyle\"\n >\n <svg\n width=\"16\"\n height=\"8\"\n viewBox=\"0 0 16 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"text-grayscale-0\"\n [ngClass]=\"arrowRotation\"\n >\n <path\n d=\"M0 8L8 0L16 8\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n</ng-template>\n\n<ng-template #arrowLeftTemplate>\n <div\n class=\"relative z-10 flex w-[8px] flex-col items-center self-stretch px-0\"\n [ngClass]=\"arrowAlignmentClass\"\n [ngStyle]=\"arrowPaddingStyle\"\n >\n <svg\n width=\"16\"\n height=\"8\"\n viewBox=\"0 0 16 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"text-grayscale-0\"\n [ngClass]=\"arrowRotation\"\n >\n <path\n d=\"M0 8L8 0L16 8\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n</ng-template>\n\n<ng-template #arrowRightTemplate>\n <div\n class=\"relative z-10 flex w-[8px] flex-col items-center self-stretch px-0\"\n [ngClass]=\"arrowAlignmentClass\"\n [ngStyle]=\"arrowPaddingStyle\"\n >\n <svg\n width=\"16\"\n height=\"8\"\n viewBox=\"0 0 16 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"text-grayscale-0\"\n [ngClass]=\"arrowRotation\"\n >\n <path\n d=\"M0 8L8 0L16 8\"\n fill=\"currentColor\"\n />\n </svg>\n </div>\n</ng-template>\n\n","import { NgStyle } from '@angular/common';\nimport {\n Component,\n ComponentRef,\n computed,\n DestroyRef,\n EnvironmentInjector,\n inject,\n NgZone,\n OnDestroy,\n OnInit,\n signal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FocusTrap, FocusTrapFactory } from '@angular/cdk/a11y';\nimport { ConnectedPosition, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { combineLatest, debounceTime, fromEvent } from 'rxjs';\n\nimport { SpotlightComponent } from '../spotlight.component';\nimport { SpotlightTourService } from '../spotlight-tour.service';\nimport { SpotlightPosition } from '../types/spotlight-position';\nimport { SpotlightStep } from '../types/spotlight-step';\n\nconst POPOVER_WIDTH = 342;\nconst SPOTLIGHT_PADDING = 8;\nconst ARROW_HALF_SIZE = 8;\nconst ARROW_OFFSET_MIN = 4;\nconst ARROW_OFFSET_MAX = POPOVER_WIDTH - 4 - 16;\nconst MASK_BG = 'rgba(0,0,0,0.5)';\nconst MASK_TRANSITION = 'all 0.2s ease';\nconst OVERLAY_Z = '10000';\nconst POPOVER_Z = '10001';\n\nfunction toConnectedPositions(position: SpotlightPosition): ConnectedPosition[] {\n const [direction, alignment] = position.split('-');\n const p = SPOTLIGHT_PADDING + 2;\n const hAlign = alignment as 'start' | 'center' | 'end';\n const vAlignMap: Record<string, 'top' | 'center' | 'bottom'> = { start: 'top', center: 'center', end: 'bottom' };\n const vAlign = vAlignMap[alignment] ?? 'center';\n\n let primary: ConnectedPosition;\n let opposite: ConnectedPosition;\n\n switch (direction) {\n case 'top':\n primary = { originX: hAlign, originY: 'top', overlayX: hAlign, overlayY: 'bottom', offsetY: -p };\n opposite = { originX: hAlign, originY: 'bottom', overlayX: hAlign, overlayY: 'top', offsetY: p };\n break;\n case 'right':\n primary = { originX: 'end', originY: vAlign, overlayX: 'start', overlayY: vAlign, offsetX: p };\n opposite = { originX: 'start', originY: vAlign, overlayX: 'end', overlayY: vAlign, offsetX: -p };\n break;\n case 'left':\n primary = { originX: 'start', originY: vAlign, overlayX: 'end', overlayY: vAlign, offsetX: -p };\n opposite = { originX: 'end', originY: vAlign, overlayX: 'start', overlayY: vAlign, offsetX: p };\n break;\n default: // 'bottom'\n primary = { originX: hAlign, originY: 'bottom', overlayX: hAlign, overlayY: 'top', offsetY: p };\n opposite = { originX: hAlign, originY: 'top', overlayX: hAlign, overlayY: 'bottom', offsetY: -p };\n }\n\n return [\n primary,\n opposite,\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: p },\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -p },\n { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: p },\n { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -p },\n ];\n}\n\n@Component({\n selector: 's-spotlight-overlay',\n templateUrl: './spotlight-overlay.component.html',\n standalone: true,\n imports: [NgStyle],\n})\nexport class SpotlightOverlayComponent implements OnInit, OnDestroy {\n private readonly tourService = inject(SpotlightTourService);\n private readonly destroyRef = inject(DestroyRef);\n private readonly zone = inject(NgZone);\n private readonly cdkOverlay = inject(Overlay);\n private readonly environmentInjector = inject(EnvironmentInjector);\n private readonly focusTrapFactory = inject(FocusTrapFactory);\n\n /** @internal */\n readonly isActive = this.tourService.isActive;\n /** @internal */\n readonly currentStep = this.tourService.currentStep;\n /** @internal */\n readonly currentIndex = this.tourService.currentIndex;\n /** @internal */\n readonly totalSteps = this.tourService.totalSteps;\n\n /** @internal*/\n readonly targetRect = signal<DOMRect | null>(null);\n\n /** @internal */\n readonly topMaskStyle = computed<Record<string, string>>(() => {\n const rect = this.targetRect();\n const base = {\n position: 'fixed',\n 'z-index': OVERLAY_Z,\n background: MASK_BG,\n transition: MASK_TRANSITION,\n cursor: 'default',\n };\n if (!rect) {\n return { ...base, top: '0', left: '0', right: '0', bottom: '0' };\n }\n const top = Math.max(0, rect.top - SPOTLIGHT_PADDING);\n return { ...base, top: '0', left: '0', right: '0', height: `${top}px` };\n });\n\n /** @internal */\n readonly leftMaskStyle = computed<Record<string, string>>(() => {\n const rect = this.targetRect();\n\n if (!rect) {\n return {} as Record<string, string>;\n }\n\n const p = SPOTLIGHT_PADDING;\n const top = Math.max(0, rect.top - p);\n const bottom = Math.min(window.innerHeight, rect.bottom + p);\n const left = Math.max(0, rect.left - p);\n\n return {\n position: 'fixed',\n 'z-index': OVERLAY_Z,\n background: MASK_BG,\n transition: MASK_TRANSITION,\n cursor: 'default',\n top: `${top}px`,\n left: '0',\n width: `${left}px`,\n height: `${bottom - top}px`,\n };\n });\n\n /** @internal */\n readonly rightMaskStyle = computed<Record<string, string>>(() => {\n const rect = this.targetRect();\n\n if (!rect) {\n return {} as Record<string, string>;\n }\n\n const p = SPOTLIGHT_PADDING;\n const top = Math.max(0, rect.top - p);\n const bottom = Math.min(window.innerHeight, rect.bottom + p);\n const right = Math.min(window.innerWidth, rect.right + p);\n\n return {\n position: 'fixed',\n 'z-index': OVERLAY_Z,\n background: MASK_BG,\n transition: MASK_TRANSITION,\n cursor: 'default',\n top: `${top}px`,\n left: `${right}px`,\n right: '0',\n height: `${bottom - top}px`,\n };\n });\n\n /** @internal */\n readonly bottomMaskStyle = computed<Record<string, string>>(() => {\n const rect = this.targetRect();\n\n if (!rect) {\n return {} as Record<string, string>;\n }\n\n const p = SPOTLIGHT_PADDING;\n const bottom = Math.min(window.innerHeight, rect.bottom + p);\n\n return {\n position: 'fixed',\n 'z-index': OVERLAY_Z,\n background: MASK_BG,\n transition: MASK_TRANSITION,\n cursor: 'default',\n top: `${bottom}px`,\n left: '0',\n right: '0',\n bottom: '0',\n };\n });\n\n /** @internal */\n readonly transparentBlockerStyle = computed<Record<string, string>>(() => ({\n position: 'fixed',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n 'z-index': OVERLAY_Z,\n cursor: 'default',\n }));\n\n private resizeObserver: ResizeObserver | null = null;\n private popoverOverlayRef: OverlayRef | null = null;\n private popoverComponentRef: ComponentRef<SpotlightComponent> | null = null;\n private popoverSubs: Array<{ unsubscribe(): void }> = [];\n private focusTrap: FocusTrap | null = null;\n private previouslyFocusedElement: HTMLElement | null = null;\n\n constructor() {\n combineLatest([\n toObservable(this.currentStep),\n toObservable(this.isActive),\n toObservable(this.tourService.registrationVersion),\n ])\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(([step, active]) => {\n this.disconnectResizeObserver();\n\n if (!step || !active) {\n this.targetRect.set(null);\n this.destroyPopoverOverlay();\n return;\n }\n\n const el = this.tourService.getElement(step.stepId);\n if (el?.nativeElement) {\n el.nativeElement.scrollIntoView({ block: 'nearest' });\n\n const target = el.nativeElement;\n\n this.zone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n this.zone.run(() => {\n if (!this.isActive()) {\n return;\n }\n\n this.updateTargetRect(target);\n this.observeElement(target);\n this.updatePopoverOverlay(target, step);\n });\n });\n });\n } else {\n this.targetRect.set(null);\n this.updatePopoverOverlay(null, step);\n }\n });\n }\n\n ngOnInit(): void {\n this.zone.runOutsideAngular(() => {\n const scrollOpts = { capture: true, passive: true } as AddEventListenerOptions;\n\n fromEvent(document, 'scroll', scrollOpts)\n .pipe(debounceTime(16), takeUntilDestroyed(this.destroyRef))\n .subscribe(() =>\n this.zone.run(() => {\n this.refreshRect();\n this.popoverOverlayRef?.updatePosition();\n this.scheduleSync();\n }),\n );\n\n fromEvent(window, 'resize', { passive: true } as AddEventListenerOptions)\n .pipe(debounceTime(16), takeUntilDestroyed(this.destroyRef))\n .subscribe(() =>\n this.zone.run(() => {\n this.refreshRect();\n this.popoverOverlayRef?.updatePosition();\n this.scheduleSync();\n }),\n );\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n if (event.key === 'Escape') {\n this.zone.run(() => this.onDismiss());\n }\n });\n });\n }\n\n ngOnDestroy(): void {\n this.destroyPopoverOverlay();\n }\n\n /** @internal */\n onNext(): void {\n this.tourService.next();\n }\n\n /** @internal */\n onPrevious(): void {\n this.tourService.previous();\n }\n\n /** @internal */\n onClose(): void {\n this.tourService.stop();\n }\n\n /** @internal */\n onDismiss(): void {\n const step = this.currentStep();\n\n if (!step || step.dismissible === false) {\n return;\n }\n\n this.tourService.stop({\n reason: this.totalSteps() === 1 ? 'dismissed' : 'interrupted',\n doNotShowAgain: false,\n });\n }\n\n private updatePopoverOverlay(targetEl: HTMLElement | null, step: SpotlightStep): void {\n const strategy = targetEl\n ? this.cdkOverlay\n .position()\n .flexibleConnectedTo(targetEl)\n .withPositions(toConnectedPositions(step.position ?? 'bottom-center'))\n .withFlexibleDimensions(false)\n .withPush(true)\n .withViewportMargin(8)\n : this.cdkOverlay.position().global().centerHorizontally().centerVertically();\n\n if (!this.popoverOverlayRef) {\n this.popoverOverlayRef = this.cdkOverlay.create({\n hasBackdrop: false,\n scrollStrategy: targetEl\n ? this.cdkOverlay.scrollStrategies.reposition()\n : this.cdkOverlay.scrollStrategies.noop(),\n positionStrategy: strategy,\n width: POPOVER_WIDTH,\n });\n\n this.setPopoverZIndex();\n this.attachPopoverPortal(step);\n } else {\n this.popoverOverlayRef.updatePositionStrategy(strategy);\n this.popoverOverlayRef.updatePosition();\n this.updatePopoverInputs(step);\n if (targetEl) {\n this.scheduleSync();\n }\n this.scheduleFocusTrapRefocus();\n }\n }\n\n private setPopoverZIndex(): void {\n if (!this.popoverOverlayRef) {\n return;\n }\n\n this.popoverOverlayRef.overlayElement.style.zIndex = POPOVER_Z;\n\n const host = this.popoverOverlayRef.hostElement;\n\n if (host !== this.popoverOverlayRef.overlayElement) {\n host.style.zIndex = POPOVER_Z;\n }\n }\n\n private attachPopoverPortal(step: SpotlightStep): void {\n this.previouslyFocusedElement = document.activeElement as HTMLElement;\n\n const portal = new ComponentPortal(SpotlightComponent, null, this.environmentInjector);\n this.popoverComponentRef = this.popoverOverlayRef!.attach(portal);\n this.updatePopoverInputs(step);\n this.scheduleSync();\n\n if (this.totalSteps() > 1) {\n this.activateTourMode();\n }\n this.popoverSubs.push(\n this.popoverComponentRef.instance.next.subscribe(() => {\n const doNotShowAgain = this.popoverComponentRef?.instance.isDoNotShowAgainChecked() ?? false;\n this.tourService.next(doNotShowAgain);\n }),\n this.popoverComponentRef.instance.previous.subscribe(() => this.tourService.previous()),\n this.popoverComponentRef.instance.closed.subscribe(() =>\n this.tourService.stop({\n reason: this.totalSteps() === 1 ? 'dismissed' : 'interrupted',\n doNotShowAgain: false,\n }),\n ),\n this.popoverComponentRef.instance.understand.subscribe(() => {\n const doNotShowAgain = this.popoverComponentRef?.instance.isDoNotShowAgainChecked() ?? false;\n this.tourService.stop({ reason: 'completed', doNotShowAgain });\n }),\n );\n }\n\n private updatePopoverInputs(step: SpotlightStep & { showDoNotShowAgain?: boolean }): void {\n const ref = this.popoverComponentRef;\n\n if (!ref) {\n return;\n }\n\n ref.setInput('title', step.title);\n ref.setInput('message', step.message);\n ref.setInput('position', step.position ?? 'bottom-center');\n ref.setInput('currentStep', this.currentIndex() + 1);\n ref.setInput('totalSteps', this.totalSteps());\n ref.setInput('content', step.content ?? null);\n ref.setInput('actions', step.actions ?? []);\n ref.setInput('showDoNotShowAgain', step.showDoNotShowAgain ?? true);\n ref.setInput('arrowOffsetPx', null);\n }\n\n private scheduleSync(): void {\n this.zone.runOutsideAngular(() => {\n requestAnimationFrame(() => this.zone.run(() => this.syncDirectionAndArrow()));\n });\n }\n\n private activateTourMode(): void {\n document.body.style.overflow = 'hidden';\n this.zone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n this.zone.run(() => {\n const paneEl = this.popoverOverlayRef?.overlayElement;\n if (paneEl) {\n this.focusTrap = this.focusTrapFactory.create(paneEl);\n this.focusTrap.focusInitialElementWhenReady();\n }\n });\n });\n });\n }\n\n /**\n * After a step change, moves focus back to the first tabbable element inside the\n * popover so the user does not lose keyboard position.\n * No-op when there is no active focus trap (simple spotlight mode).\n */\n private scheduleFocusTrapRefocus(): void {\n if (!this.focusTrap) return;\n this.zone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n this.zone.run(() => this.focusTrap?.focusFirstTabbableElement());\n });\n });\n }\n\n private syncDirectionAndArrow(): void {\n const ref = this.popoverComponentRef;\n const paneEl = this.popoverOverlayRef?.overlayElement;\n const rect = this.targetRect();\n\n if (!ref || !paneEl || !rect) {\n ref?.setInput('arrowOffsetPx', null);\n return;\n }\n\n const pane = paneEl.getBoundingClientRect();\n const tol = SPOTLIGHT_PADDING + 4;\n\n let dir: 'top' | 'bottom' | 'left' | 'right';\n\n if (pane.top >= rect.bottom - tol) {\n dir = 'bottom';\n } else if (pane.bottom <= rect.top + tol) {\n dir = 'top';\n } else if (pane.left >= rect.right - tol) {\n dir = 'right';\n } else if (pane.right <= rect.left + tol) {\n dir = 'left';\n } else {\n const dy = Math.abs(pane.top + pane.height / 2 - (rect.top + rect.height / 2));\n const dx = Math.abs(pane.left + pane.width / 2 - (rect.left + rect.width / 2));\n dir =\n dy >= dx\n ? pane.top + pane.height / 2 < rect.top + rect.height / 2\n ? 'top'\n : 'bottom'\n : pane.left + pane.width / 2 < rect.left + rect.width / 2\n ? 'left'\n : 'right';\n }\n\n ref.setInput('position', `${dir}-center` as SpotlightPosition);\n\n const tgtCX = rect.left + rect.width / 2;\n const tgtCY = rect.top + rect.height / 2;\n const offset =\n dir === 'top' || dir === 'bottom'\n ? tgtCX - pane.left - ARROW_HALF_SIZE\n : tgtCY - pane.top - ARROW_HALF_SIZE;\n ref.setInput('arrowOffsetPx', Math.max(ARROW_OFFSET_MIN, Math.min(ARROW_OFFSET_MAX, offset)));\n }\n\n private destroyPopoverOverlay(): void {\n this.popoverSubs.forEach((s) => s.unsubscribe());\n this.popoverSubs = [];\n this.popoverComponentRef = null;\n\n if (this.focusTrap) {\n this.focusTrap.destroy();\n this.focusTrap = null;\n }\n\n document.body.style.overflow = '';\n\n if (this.previouslyFocusedElement) {\n this.previouslyFocusedElement.focus();\n this.previouslyFocusedElement = null;\n }\n\n if (this.popoverOverlayRef) {\n this.popoverOverlayRef.detach();\n this.popoverOverlayRef.dispose();\n this.popoverOverlayRef = null;\n }\n }\n\n private updateTargetRect(el: HTMLElement): void {\n this.targetRect.set(el.getBoundingClientRect());\n }\n\n private refreshRect(): void {\n const step = this.currentStep();\n\n if (!step || !this.isActive()) {\n return;\n }\n const el = this.tourService.getElement(step.stepId);\n\n if (el?.nativeElement) {\n this.updateTargetRect(el.nativeElement);\n }\n }\n\n private observeElement(el: HTMLElement): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.zone.run(() => this.updateTargetRect(el));\n });\n this.resizeObserver.observe(el);\n }\n\n private disconnectResizeObserver(): void {\n if (this.resizeObserver) {\n this.resizeObserver.disconnect();\n this.resizeObserver = null;\n }\n }\n}\n\n","@if (isActive() && currentStep(); as step) {\n @if (step.showBackdrop !== false) {\n <div\n [ngStyle]=\"topMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n\n @if (targetRect()) {\n <div\n [ngStyle]=\"leftMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"rightMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n <div\n [ngStyle]=\"bottomMaskStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n\n @if (step.showBackdrop === false) {\n @if (step.dismissible === false) {\n <div [ngStyle]=\"transparentBlockerStyle()\"></div>\n } @else {\n <div\n [ngStyle]=\"transparentBlockerStyle()\"\n (click)=\"onDismiss()\"\n ></div>\n }\n }\n}\n\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { computed, ElementRef, EnvironmentInjector, inject, Injectable, signal } from '@angular/core';\n\nimport { Observable, Subject } from 'rxjs';\n\nimport { SpotlightOverlayComponent } from './spotlight-overlay/spotlight-overlay.component';\nimport { SpotlightConfig, SpotlightStep } from './types/spotlight-step';\nimport { SpotlightStepChangedEvent, SpotlightStopEvent } from './types/spotlight-stop-event';\n\n/** @internal */\ntype SpotlightStepInternal = SpotlightStep & { showDoNotShowAgain?: boolean };\n\n/**\n * Serviço central do Spotlight Tour.\n *\n * Gerencia o estado do tour (passos, índice atual, ativo/inativo), a navegação entre\n * passos e o registro de elementos do DOM associados a cada `stepId`.\n *\n * Use `start()` para iniciar um tour com múltiplos passos ou `spotlight()` para\n * exibir um destaque simples em um único elemento.\n *\n * @example\n * ```typescript\n * // Tour com múltiplos passos\n * this.tourService.start([\n * { stepId: 'passo-1', title: 'Título', message: 'Mensagem' },\n * { stepId: 'passo-2', title: 'Título', message: 'Mensagem' },\n * ]);\n *\n * // Destaque simples\n * this.tourService.spotlight('meu-elemento', { title: 'Dica', message: 'Detalhes' });\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class SpotlightTourService {\n private readonly overlay = inject(Overlay);\n private readonly environmentInjector = inject(EnvironmentInjector);\n\n private overlayRef: OverlayRef | null = null;\n\n private readonly _steps = signal<SpotlightStepInternal[]>([]);\n private readonly _currentIndex = signal(0);\n private readonly _isActive = signal(false);\n private readonly _registrationVersion = signal(0);\n\n private readonly _registeredElements = new Map<string, ElementRef>();\n\n private _pendingDoNotShowAgain = false;\n\n private readonly _stopped$ = new Subject<SpotlightStopEvent>();\n private readonly _stepChanged$ = new Subject<SpotlightStepChangedEvent>();\n\n /** Signal somente-leitura que indica se o tour está ativo no momento. */\n readonly isActive = this._isActive.asReadonly();\n\n /** Signal somente-leitura com o índice (0-based) do passo exibido atualmente. */\n readonly currentIndex = this._currentIndex.asReadonly();\n\n /** Signal computado com o total de passos do tour em andamento. */\n readonly totalSteps = computed(() => this._steps().length);\n\n /** Signal computado com os dados do passo atualmente exibido. */\n readonly currentStep = computed<SpotlightStepInternal | undefined>(() => this._steps()[this._currentIndex()]);\n\n /**\n * Observable emitido quando o tour é encerrado, seja por conclusão, interrupção\n * ou descarte. Carrega um `SpotlightStopEvent` com o motivo e o estado final.\n */\n readonly stopped$: Observable<SpotlightStopEvent> = this._stopped$.asObservable();\n\n /**\n * Observable emitido sempre que o passo exibido muda, incluindo o início do tour.\n * Carrega um `SpotlightStepChangedEvent` com o `stepId` e o índice do novo passo.\n */\n readonly stepChanged$: Observable<SpotlightStepChangedEvent> = this._stepChanged$.asObservable();\n\n /**\n * Signal somente-leitura incrementado a cada chamada de `registerElement` ou\n * `unregisterElement`. Permite que outros componentes reajam a mudanças no\n * registro de elementos sem polling.\n */\n readonly registrationVersion = this._registrationVersion.asReadonly();\n\n /**\n * Inicia um tour com a lista de passos fornecida.\n *\n * O tour começa pelo primeiro passo da lista. Emite `stepChanged$` para o passo inicial.\n * Se `steps` for um array vazio, o método não faz nada.\n * Se já houver um tour ativo, ele é encerrado (emitindo `stopped$` com `reason: 'interrupted'`)\n * antes de o novo tour começar.\n *\n * @param steps Lista de passos a percorrer em ordem.\n */\n start(steps: SpotlightStep[]): void {\n if (steps.length === 0) return;\n\n if (this._isActive()) {\n this.stop();\n }\n\n this._steps.set(steps as SpotlightStepInternal[]);\n this._currentIndex.set(0);\n this._isActive.set(true);\n this.attachOverlay();\n this._stepChanged$.next({ stepId: steps[0].stepId, stepIndex: 0, totalSteps: steps.length });\n }\n\n /**\n * Exibe um destaque simples (passo único) no elemento identificado por `stepId`.\n *\n * Equivalente a chamar `start()` com um array de um único passo.\n * O checkbox \"Não mostrar novamente\" é exibido por padrão (`showDoNotShowAgain: true`);\n * passe `showDoNotShowAgain: false` em `config` para suprimi-lo.\n *\n * @param stepId ID do elemento registrado via `sSpotlightStep` ou `registerElement`.\n * @param config Configuração visual e comportamental do destaque.\n */\n spotlight(stepId: string, config: SpotlightConfig): void {\n const step: SpotlightStepInternal = { stepId, ...config };\n this.start([step]);\n }\n\n /**\n * Avança para o próximo passo do tour.\n *\n * Se o passo atual definir `beforeNext`, aguarda sua resolução antes de avançar.\n * No último passo, encerra o tour com `reason: 'completed'`.\n *\n * @param doNotShowAgain Quando `true`, o evento `stopped$` será emitido com\n * `doNotShowAgain: true` ao concluir o tour. Relevante apenas no último passo.\n */\n next(doNotShowAgain = false): void {\n const current = this.currentStep();\n this._pendingDoNotShowAgain = doNotShowAgain;\n\n if (current?.beforeNext) {\n const result = current.beforeNext();\n if (result instanceof Promise) {\n result.then(() => this.advance()).catch(() => {});\n } else {\n this.advance();\n }\n } else {\n this.advance();\n }\n }\n\n /**\n * Retorna ao passo anterior do tour.\n *\n * Se o passo atual definir `beforePrevious`, aguarda sua resolução antes de voltar.\n * Não faz nada se o tour estiver no primeiro passo.\n */\n previous(): void {\n if (this._currentIndex() <= 0) return;\n\n const current = this.currentStep();\n\n if (current?.beforePrevious) {\n const result = current.beforePrevious();\n if (result instanceof Promise) {\n result.then(() => this.retreat()).catch(() => {});\n } else {\n this.retreat();\n }\n } else {\n this.retreat();\n }\n }\n\n /**\n * Encerra o tour imediatamente e emite o evento `stopped$`.\n *\n * @param event Dados parciais do evento de parada. Valores não fornecidos são\n * preenchidos com os defaults: `reason: 'interrupted'`, `doNotShowAgain: false`\n * e o `stepId`/`stepIndex`/`totalSteps` do momento atual.\n */\n stop(event?: Partial<SpotlightStopEvent>): void {\n const steps = this._steps();\n const index = this._currentIndex();\n const fullEvent: SpotlightStopEvent = {\n reason: 'interrupted',\n doNotShowAgain: false,\n stepId: steps[index]?.stepId ?? '',\n stepIndex: index,\n totalSteps: steps.length,\n ...event,\n };\n this._isActive.set(false);\n this._steps.set([]);\n this._currentIndex.set(0);\n this._pendingDoNotShowAgain = false;\n this._stopped$.next(fullEvent);\n this.detachOverlay();\n }\n\n /**\n * Registra um elemento do DOM como alvo do passo identificado por `stepId`.\n *\n * Normalmente chamado pela diretiva `sSpotlightStep`. Use diretamente apenas\n * quando precisar registrar elementos criados programaticamente.\n *\n * @param stepId ID único do passo ao qual o elemento pertence.\n * @param el Referência ao elemento do DOM.\n */\n registerElement(stepId: string, el: ElementRef): void {\n this._registeredElements.set(stepId, el);\n this._registrationVersion.update((v) => v + 1);\n }\n\n /**\n * Remove o registro do elemento associado a `stepId`.\n *\n * Normalmente chamado pela diretiva `sSpotlightStep` no `ngOnDestroy`.\n *\n * @param stepId ID do passo cujo elemento deve ser removido.\n */\n unregisterElement(stepId: string): void {\n this._registeredElements.delete(stepId);\n this._registrationVersion.update((v) => v + 1);\n }\n\n /**\n * Retorna o `ElementRef` registrado para o `stepId` informado,\n * ou `undefined` se nenhum elemento estiver registrado.\n *\n * @param stepId ID do passo a buscar.\n */\n getElement(stepId: string): ElementRef | undefined {\n return this._registeredElements.get(stepId);\n }\n\n private advance(): void {\n const steps = this._steps();\n const currentIndex = this._currentIndex();\n if (currentIndex < steps.length - 1) {\n const newIndex = currentIndex + 1;\n this._pendingDoNotShowAgain = false;\n this._currentIndex.set(newIndex);\n this._stepChanged$.next({ stepId: steps[newIndex].stepId, stepIndex: newIndex, totalSteps: steps.length });\n } else {\n this.stop({ reason: 'completed', doNotShowAgain: this._pendingDoNotShowAgain });\n }\n }\n\n private retreat(): void {\n const steps = this._steps();\n const newIndex = this._currentIndex() - 1;\n this._currentIndex.set(newIndex);\n this._stepChanged$.next({ stepId: steps[newIndex].stepId, stepIndex: newIndex, totalSteps: steps.length });\n }\n\n private attachOverlay(): void {\n if (this.overlayRef) {\n return;\n }\n\n this.overlayRef = this.overlay.create({\n hasBackdrop: false,\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n positionStrategy: this.overlay.position().global(),\n });\n\n const portal = new ComponentPortal(SpotlightOverlayComponent, null, this.environmentInjector);\n this.overlayRef.attach(portal);\n }\n\n private detachOverlay(): void {\n if (this.overlayRef) {\n this.overlayRef.detach();\n this.overlayRef.dispose();\n this.overlayRef = null;\n }\n }\n}\n\n","import { Directive, effect, ElementRef, inject, input, OnDestroy } from '@angular/core';\n\nimport { SpotlightTourService } from './spotlight-tour.service';\n\n/**\n * Diretiva que registra um elemento do DOM como alvo de um passo do Spotlight Tour.\n *\n * Aplique a diretiva em qualquer elemento e forneça um ID único que corresponda\n * ao `stepId` configurado no `SpotlightTourService`. O elemento será automaticamente\n * registrado ao ser criado e atualizado caso o ID mude dinamicamente.\n *\n * @example\n * ```html\n * <button [sSpotlightStep]=\"'meu-botao'\">Clique aqui</button>\n * ```\n */\n@Directive({\n selector: '[sSpotlightStep]',\n standalone: true,\n})\nexport class SpotlightStepDirective implements OnDestroy {\n /**\n * ID único do passo do tour ao qual este elemento está associado.\n * Deve corresponder ao `stepId` definido em `SpotlightStep`.\n */\n sSpotlightStep = input.required<string>();\n\n private readonly el = inject(ElementRef);\n private readonly tourService = inject(SpotlightTourService);\n\n private currentId: string | null = null;\n\n constructor() {\n effect(\n () => {\n const newId = this.sSpotlightStep();\n if (this.currentId !== null && this.currentId !== newId) {\n this.tourService.unregisterElement(this.currentId);\n }\n this.currentId = newId;\n this.tourService.registerElement(newId, this.el);\n },\n { allowSignalWrites: true },\n );\n }\n\n ngOnDestroy(): void {\n if (this.currentId !== null) {\n this.tourService.unregisterElement(this.currentId);\n }\n }\n}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -3,12 +3,11 @@ import { Directive, HostListener, Input, Component, Inject, ViewChild, NgModule
3
3
  import * as i1 from 'primeng/table';
4
4
  import { RowToggler } from 'primeng/table';
5
5
  import { HostProjectConfigsInjectionToken } from '@seniorsistemas/angular-components/common';
6
+ import * as i1$1 from '@seniorsistemas/angular-components/locale';
7
+ import { applyLocalizedMask, LocaleService } from '@seniorsistemas/angular-components/locale';
6
8
  import { deepClone, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
7
- import { applyMask } from '@seniorsistemas/ng2-currency-mask';
8
9
  import BigNumber$1 from 'bignumber.js';
9
10
  import moment from 'moment';
10
- import * as i1$1 from '@seniorsistemas/angular-components/locale';
11
- import { LocaleService } from '@seniorsistemas/angular-components/locale';
12
11
  import * as i2 from '@ngx-translate/core';
13
12
  import { TranslateModule } from '@ngx-translate/core';
14
13
  import * as i3 from '@seniorsistemas/angular-components/numeric';
@@ -397,7 +396,15 @@ class TableColumnsComponent {
397
396
  ? this.numericService.instant(attributeValue, {
398
397
  numberFormatOptions,
399
398
  })
400
- : applyMask(attributeValue, numberConfigs, this.isNumber(attributeValue));
399
+ : applyLocalizedMask(attributeValue, {
400
+ decimalSeparator: '.',
401
+ thousandsSeparator: ',',
402
+ scale: 2,
403
+ prefix: '',
404
+ suffix: '',
405
+ allowNegative: true,
406
+ ...numberConfigs,
407
+ }, this.isNumber(attributeValue));
401
408
  }
402
409
  case EnumColumnFieldType.DATE:
403
410
  const dateFormat = this.getDateFormat(column, locale);
@@ -418,7 +425,15 @@ class TableColumnsComponent {
418
425
  ? this.numericService.instant(attributeValue, {
419
426
  numberFormatOptions,
420
427
  })
421
- : applyMask(attributeValue, numberConfigs, this.isNumber(attributeValue));
428
+ : applyLocalizedMask(attributeValue, {
429
+ decimalSeparator: '.',
430
+ thousandsSeparator: ',',
431
+ scale: 2,
432
+ prefix: '',
433
+ suffix: '',
434
+ allowNegative: true,
435
+ ...numberConfigs,
436
+ }, this.isNumber(attributeValue));
422
437
  }
423
438
  case EnumColumnFieldType.TOKENS:
424
439
  return this.getTokens(attributeValue);