@seniorsistemas/angular-components 18.0.0 → 18.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/badge/lib/badge/badge.component.d.ts +2 -1
- package/badge/lib/badge/badge.module.d.ts +3 -1
- package/esm2022/badge/lib/badge/badge.component.mjs +6 -4
- package/esm2022/badge/lib/badge/badge.module.mjs +6 -4
- package/esm2022/button/lib/button/button.component.mjs +2 -2
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +10 -15
- package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.mjs +2 -2
- package/esm2022/file-upload/lib/file-upload/file-upload.component.mjs +23 -6
- package/esm2022/file-upload/lib/file-upload/file-upload.module.mjs +7 -3
- package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-card/ia-insight-card.component.mjs +1 -1
- package/esm2022/kanban/lib/kanban/components/kanban-item-dragging/kanban-item-dragging.component.mjs +1 -1
- package/esm2022/label-value/lib/label-value/label-value.component.mjs +1 -1
- package/esm2022/locale/lib/locale/locale.service.mjs +43 -20
- package/esm2022/locale/lib/locale/options/index.mjs +7 -6
- package/esm2022/locale/lib/locale/pipes/localized-date.pipe.mjs +1 -1
- package/esm2022/locale/lib/locale/pipes/localized-time.pipe.mjs +7 -7
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +579 -0
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.module.mjs +16 -0
- package/esm2022/numeric-mask/public-api.mjs +3 -0
- package/esm2022/numeric-mask/seniorsistemas-angular-components-numeric-mask.mjs +5 -0
- package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +7 -4
- package/esm2022/object-card/lib/object-card/object-card.module.mjs +5 -4
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +1 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +26 -20
- package/fesm2022/seniorsistemas-angular-components-badge.mjs +10 -6
- package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +9 -14
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-upload.mjs +27 -6
- package/fesm2022/seniorsistemas-angular-components-file-upload.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-ia-insight.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-ia-insight.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +41 -17
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +599 -0
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -0
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +10 -6
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +23 -17
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/file-upload/lib/file-upload/file-upload.component.d.ts +1 -0
- package/file-upload/lib/file-upload/file-upload.module.d.ts +2 -1
- package/locale/lib/locale/locale.service.d.ts +14 -4
- package/locale/lib/locale/options/index.d.ts +6 -5
- package/locale/lib/locale/pipes/localized-time.pipe.d.ts +2 -2
- package/numeric-mask/README.md +367 -0
- package/numeric-mask/index.d.ts +5 -0
- package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +195 -0
- package/numeric-mask/lib/numeric-mask/numeric-mask.module.d.ts +7 -0
- package/numeric-mask/public-api.d.ts +2 -0
- package/object-card/lib/object-card/elements/field/object-card-field.component.d.ts +4 -1
- package/object-card/lib/object-card/object-card.module.d.ts +2 -1
- package/package.json +7 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-tooltip.mjs","sources":["../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.html","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.directive.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.module.ts","../../projects/angular-components/tooltip/src/seniorsistemas-angular-components-tooltip.ts"],"sourcesContent":["import { Component, signal } from '@angular/core';\n\nimport { TooltipPositions } from './models/tooltip-position';\n\n@Component({\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n})\nexport class TooltipComponent {\n public tooltip = '';\n public position: TooltipPositions = 'top';\n public left = 0;\n public top = 0;\n public visible = false;\n public escape = false;\n}\n","<div\n id=\"tooltip\"\n class=\"tooltip\"\n [ngClass]=\"['tooltip--' + position]\"\n [class.tooltip--visible]=\"visible\"\n [ngStyle]=\"{\n left: left + 'px',\n top: top + 'px',\n }\"\n>\n @if (escape) {\n <span class=\"tooltip__content\">\n {{ tooltip }}\n </span>\n } @else {\n <span\n class=\"tooltip__content\"\n [innerHTML]=\"tooltip\"\n >\n </span>\n }\n</div>\n","import {\n ApplicationRef,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n input,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewContainerRef\n} from '@angular/core';\nimport { DebounceUtils } from '@seniorsistemas/angular-components/common';\nimport { getElementLeftoverContentAvailable, getElementPositionInfo, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\nimport { MobileBehavior } from './models/mobile-behavior';\nimport { TooltipEvent } from './models/tooltip-event';\nimport { TooltipPositions } from './models/tooltip-position';\nimport { TooltipComponent } from './tooltip.component';\n\n@Directive({\n selector: '[sTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnInit, OnDestroy {\n @Input('sTooltip')\n public tooltip?: string;\n\n @Input()\n public tooltipPosition: TooltipPositions = 'top';\n\n @Input()\n public showDelay = 500;\n\n @Input()\n public displayTime?: number;\n\n @Input()\n public tooltipEvent: TooltipEvent = 'hover';\n\n @Input()\n public escape = false;\n\n @Input()\n public visible = true;\n\n @Input()\n public mobileBehavior: MobileBehavior = 'pressing';\n\n @Input()\n public focusedInputRef: HTMLInputElement | null = null;\n\n checkTruncatedText = input(false);\n\n private componentRef: ComponentRef<TooltipComponent> | null = null;\n private showTimeout?: number;\n private touchTimeout?: number;\n private tooltipDivElement: HTMLElement | null = null;\n private readonly debounceCreateTooltipFunction: () => void;\n private tooltipCreatedByFocus = false;\n\n constructor(\n private readonly elementRef: ElementRef,\n private readonly appRef: ApplicationRef,\n private readonly debounceUtils: DebounceUtils,\n private readonly renderer: Renderer2,\n private readonly viewContainerRef: ViewContainerRef,\n ) {\n this.debounceCreateTooltipFunction = this.debounceUtils.debounceLeading(() => this._createTooltip(true, true));\n }\n\n public ngOnInit(): void {\n this.validatePosition();\n this.updateTooltipVisibilityWhenFocusOnInput();\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n /**\n * Manipula a visibilidade do tooltip quando houver uma referência de input.\n */\n private updateTooltipVisibilityWhenFocusOnInput() {\n if (this.focusedInputRef) {\n const inputFocus = this.focusedInputRef;\n const icon = this.getIconFromFocusedInput();\n this.renderer.listen(inputFocus, 'focus', () => {\n if (icon) {\n this._createTooltip(false, false)\n this.tooltipCreatedByFocus = true;\n }\n });\n this.renderer.listen(inputFocus, 'blur', () => {\n if (icon) {\n this.removeTooltip(icon);\n this.destroy();\n this.tooltipCreatedByFocus = false;\n }\n });\n }\n }\n\n /**\n * Obtém o elemento do ícone associado ao label do input em focus.\n * @returns O ícone do input em focus.\n */\n private getIconFromFocusedInput(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /**\n * Remove o tooltip associado ao ícone do input em focus.\n * @param icon O ícone do input em focus.\n */\n private removeTooltip(icon: HTMLElement): void {\n const tooltip = icon.querySelector('.tooltip') as HTMLElement;\n if (tooltip) {\n tooltip.remove();\n }\n }\n\n // whenever the component with the tooltip is clicked I destroy the tooltip.\n // whenever a key is pressed on the component with the tooltip I destroy the tooltip.\n @HostListener('click')\n @HostListener('keydown')\n public onClick(): void {\n if (this.tooltipEvent === 'hover' && !navigator.userAgent.match(/Android/i) && !navigator.userAgent.match(/iPhone/i)) {\n this.destroy();\n }\n }\n\n @HostListener('focus')\n public onFocus(): void {\n if (this.tooltipEvent === 'focus') {\n this._createTooltip(true, true);\n }\n }\n\n @HostListener('blur')\n public onBlur(): void {\n if (this.tooltipEvent === 'focus') {\n this.destroy();\n }\n }\n\n @HostListener(\"mouseenter\")\n public onMouseEnter(): void {\n if (this.tooltipEvent === 'hover' || this.focusedInputRef) {\n this.debounceCreateTooltipFunction();\n }\n }\n\n @HostListener(\"mouseleave\")\n @HostListener(\"wheel\")\n public onMouseLeave(): void {\n if ((this.tooltipEvent === 'hover' || this.focusedInputRef) && !this.tooltipCreatedByFocus) {\n this.destroy();\n }\n }\n\n @HostListener('touchstart')\n public onTouchStart(): void {\n if (this.tooltipEvent === 'hover') {\n window.clearTimeout(this.touchTimeout);\n const _delay = this.mobileBehavior === 'pressing' ? this.showDelay : 0\n this.touchTimeout = window.setTimeout(() => {\n this._createTooltip(true, true);\n }, _delay);\n }\n }\n\n @HostListener('touchend')\n public onTouchEnd(): void {\n if (this.tooltipEvent === 'hover') {\n if (this.mobileBehavior === 'pressing') {\n window.clearTimeout(this.touchTimeout);\n this.destroy();\n }\n }\n }\n\n private validatePosition() {\n const containsPosition = ['top', 'right', 'bottom', 'left'].includes(this.tooltipPosition);\n\n if (!containsPosition) {\n this.tooltipPosition = 'top';\n throw new Error(`Tooltip ${this.tooltipPosition} position is unexpected`);\n }\n }\n\n private getDomElement(): HTMLElement {\n this.componentRef = this.viewContainerRef.createComponent(TooltipComponent);\n return this.componentRef.location.nativeElement;\n }\n\n private _createTooltip(useShowDelay = false, autoDestroy = true) {\n const hasText = (this.tooltip || '').length > 0;\n const hasComponentRef = this.componentRef !== null;\n if (!hasText || hasComponentRef) {\n return;\n }\n const blockIfIsNotTruncatedContent = this.checkTruncatedText() ? !this.contentIsTruncated : false;\n if (blockIfIsNotTruncatedContent) {\n return;\n }\n const domElement = this.getDomElement();\n document.body.appendChild(domElement);\n this.tooltipDivElement = domElement.querySelector(\".tooltip\");\n this.setTooltipComponentProperties();\n const _showDelay = useShowDelay ? this.showDelay : 0;\n setTimeout(() => {\n this.showTooltip()\n }, _showDelay)\n\n\n\n this.renderer.listen(window, \"scroll\", () => {\n this.setTooltipPositionProperty();\n });\n\n if (autoDestroy && this.displayTime) {\n setTimeout(() => {\n this.destroy();\n }, this.displayTime)\n }\n\n }\n\n private showTooltip() {\n if (this.componentRef) {\n this.componentRef.instance.visible = this.visible;\n\n this.setTooltipPositionProperty();\n }\n }\n\n private setTooltipPositionProperty() {\n if (!this.componentRef) {\n return\n }\n const anchorSize = 5;\n const { left, right } = this.elementRef.nativeElement.getBoundingClientRect();\n\n const tooltipElementPosition = getElementPositionInfo(this.tooltipDivElement!);\n const elementLeftover = getElementLeftoverContentAvailable(this.elementRef.nativeElement);\n const elementTriggerPosition = getElementPositionInfo(this.elementRef.nativeElement);\n const horizontalPositions: TooltipPositions[] = ['left', 'right'];\n const isPositionHorizontal = horizontalPositions.includes(this.tooltipPosition);\n const distanceToBorders = isPositionHorizontal ? tooltipElementPosition.elementWidth : tooltipElementPosition.elementHorizontalCenter;\n const canSetAtTop = elementLeftover.freeDistanceToTop > tooltipElementPosition.elementHeight;\n const canSetAtLeft = elementLeftover.freeDistanceToLeft > distanceToBorders;\n const canSetAtRight = elementLeftover.freeDistanceToRight > distanceToBorders;\n const canSetAtBottom = elementLeftover.freeDistanceToBottom > tooltipElementPosition.elementHeight;\n const topVertical = elementTriggerPosition.top + elementTriggerPosition.elementVerticalCenter;\n const checkTopPosition = () => {\n return canSetAtTop && canSetAtLeft && canSetAtRight;\n }\n const checkBottomPosition = () => {\n return canSetAtBottom && canSetAtLeft && canSetAtRight;\n }\n const checkLeftPosition = () => {\n return canSetAtLeft && canSetAtTop && canSetAtBottom;\n }\n\n const checkRightPosition = () => {\n return canSetAtRight && canSetAtTop && canSetAtBottom;\n }\n\n const setTopPosition = (): { left: number, top: number } => {\n return {\n left: left + (right - left) / 2,\n top: elementTriggerPosition.top - anchorSize\n }\n }\n\n const setBottomPosition = (): { left: number, top: number } => {\n return {\n left: left + (right - left) / 2,\n top: elementTriggerPosition.top + elementTriggerPosition.elementHeight\n };\n }\n\n const setLeftPosition = (): { left: number, top: number } => {\n return {\n left: left,\n top: topVertical\n };\n }\n\n const setRightPosition = (): { left: number, top: number } => {\n return {\n left: right,\n top: topVertical\n };\n }\n\n type Position = {\n pos: TooltipPositions,\n check: () => boolean,\n set: () => { left: number, top: number }\n }\n\n const positions: Position[] = [\n {\n pos: 'top',\n check: checkTopPosition,\n set: setTopPosition\n },\n {\n pos: 'bottom',\n check: checkBottomPosition,\n set: setBottomPosition\n },\n {\n pos: 'left',\n check: checkLeftPosition,\n set: setLeftPosition\n },\n {\n pos: 'right',\n check: checkRightPosition,\n set: setRightPosition\n\n }\n ];\n\n const positionDefined = positions.find((position) => position.pos === this.tooltipPosition);\n let validPosition: Position | undefined = positionDefined;\n const canUseDefinedPosition = positionDefined?.check();\n if (canUseDefinedPosition) {\n validPosition = positionDefined;\n } else if (!canUseDefinedPosition) {\n const validAlternativePosition = positions.find((position) => position.check());\n if (validAlternativePosition) {\n validPosition = validAlternativePosition;\n }\n }\n const _position = validPosition!.set();\n const positionLeft = _position.left;\n const positionTop = _position.top;\n this.componentRef.instance.left = Math.round(positionLeft);\n this.componentRef.instance.top = Math.round(positionTop);\n this.componentRef.instance.position = validPosition!.pos;\n }\n\n private setTooltipComponentProperties() {\n if (!this.componentRef) return;\n\n this.componentRef.instance.tooltip = this.tooltip as string;\n this.componentRef.instance.escape = this.escape;\n }\n\n private destroy(): void {\n if (!isNullOrUndefined(this.componentRef)) {\n window.clearTimeout(this.showTimeout);\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n this.tooltipDivElement = null;\n }\n }\n\n private get contentIsTruncated() {\n const element = this.elementRef.nativeElement as HTMLElement;\n return element.scrollWidth > element.clientWidth;\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipDirective } from './tooltip.directive';\n\n@NgModule({\n imports: [CommonModule, TooltipDirective],\n declarations: [TooltipComponent],\n exports: [TooltipDirective],\n})\nexport class TooltipModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-tooltip.mjs","sources":["../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.component.html","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.directive.ts","../../projects/angular-components/tooltip/src/lib/tooltip/tooltip.module.ts","../../projects/angular-components/tooltip/src/seniorsistemas-angular-components-tooltip.ts"],"sourcesContent":["import { Component, signal } from '@angular/core';\n\nimport { TooltipPositions } from './models/tooltip-position';\n\n@Component({\n templateUrl: './tooltip.component.html',\n styleUrls: ['./tooltip.component.scss'],\n})\nexport class TooltipComponent {\n public tooltip = '';\n public position: TooltipPositions = 'top';\n public left = 0;\n public top = 0;\n public visible = false;\n public escape = false;\n}\n","<div\n id=\"tooltip\"\n class=\"tooltip\"\n [ngClass]=\"['tooltip--' + position]\"\n [class.tooltip--visible]=\"visible\"\n [ngStyle]=\"{\n left: left + 'px',\n top: top + 'px',\n }\"\n>\n @if (escape) {\n <span class=\"tooltip__content\">\n {{ tooltip }}\n </span>\n } @else {\n <span\n class=\"tooltip__content\"\n [innerHTML]=\"tooltip\"\n >\n </span>\n }\n</div>\n","import {\n ApplicationRef,\n ComponentRef,\n Directive,\n ElementRef,\n HostListener,\n input,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewContainerRef,\n} from '@angular/core';\nimport { DebounceUtils } from '@seniorsistemas/angular-components/common';\nimport {\n getElementLeftoverContentAvailable,\n getElementPositionInfo,\n isNullOrUndefined,\n} from '@seniorsistemas/angular-components/utils';\nimport { MobileBehavior } from './models/mobile-behavior';\nimport { TooltipEvent } from './models/tooltip-event';\nimport { TooltipPositions } from './models/tooltip-position';\nimport { TooltipComponent } from './tooltip.component';\n\n@Directive({\n selector: '[sTooltip]',\n standalone: true,\n})\nexport class TooltipDirective implements OnInit, OnDestroy {\n @Input('sTooltip')\n public tooltip?: string;\n\n @Input()\n public tooltipPosition: TooltipPositions = 'top';\n\n @Input()\n public showDelay = 500;\n\n @Input()\n public displayTime?: number;\n\n @Input()\n public tooltipEvent: TooltipEvent = 'hover';\n\n @Input()\n public escape = false;\n\n @Input()\n public visible = true;\n\n @Input()\n public mobileBehavior: MobileBehavior = 'pressing';\n\n @Input()\n public focusedInputRef: HTMLInputElement | null = null;\n\n checkTruncatedText = input(false);\n\n private componentRef: ComponentRef<TooltipComponent> | null = null;\n private showTimeout?: number;\n private touchTimeout?: number;\n private tooltipDivElement: HTMLElement | null = null;\n private readonly debounceCreateTooltipFunction: () => void;\n private tooltipCreatedByFocus = false;\n\n constructor(\n private readonly elementRef: ElementRef,\n private readonly appRef: ApplicationRef,\n private readonly debounceUtils: DebounceUtils,\n private readonly renderer: Renderer2,\n private readonly viewContainerRef: ViewContainerRef,\n ) {\n this.debounceCreateTooltipFunction = this.debounceUtils.debounceLeading(() => this._createTooltip(true, true));\n }\n\n public ngOnInit(): void {\n this.validatePosition();\n this.updateTooltipVisibilityWhenFocusOnInput();\n }\n\n public ngOnDestroy(): void {\n this.destroy();\n }\n\n /**\n * Manipula a visibilidade do tooltip quando houver uma referência de input.\n */\n private updateTooltipVisibilityWhenFocusOnInput() {\n if (this.focusedInputRef) {\n const inputFocus = this.focusedInputRef;\n const icon = this.getIconFromFocusedInput();\n this.renderer.listen(inputFocus, 'focus', () => {\n if (icon) {\n this._createTooltip(false, false);\n this.tooltipCreatedByFocus = true;\n }\n });\n this.renderer.listen(inputFocus, 'blur', () => {\n if (icon) {\n this.removeTooltip(icon);\n this.destroy();\n this.tooltipCreatedByFocus = false;\n }\n });\n }\n }\n\n /**\n * Obtém o elemento do ícone associado ao label do input em focus.\n * @returns O ícone do input em focus.\n */\n private getIconFromFocusedInput(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n /**\n * Remove o tooltip associado ao ícone do input em focus.\n * @param icon O ícone do input em focus.\n */\n private removeTooltip(icon: HTMLElement): void {\n const tooltip = icon.querySelector('.tooltip') as HTMLElement;\n if (tooltip) {\n tooltip.remove();\n }\n }\n\n // whenever the component with the tooltip is clicked I destroy the tooltip.\n // whenever a key is pressed on the component with the tooltip I destroy the tooltip.\n @HostListener('click')\n @HostListener('keydown')\n public onClick(): void {\n if (\n this.tooltipEvent === 'hover' &&\n !navigator.userAgent.match(/Android/i) &&\n !navigator.userAgent.match(/iPhone/i)\n ) {\n this.destroy();\n }\n }\n\n @HostListener('focus')\n public onFocus(): void {\n if (this.tooltipEvent === 'focus') {\n this._createTooltip(true, true);\n }\n }\n\n @HostListener('blur')\n public onBlur(): void {\n if (this.tooltipEvent === 'focus') {\n this.destroy();\n }\n }\n\n @HostListener('mouseenter')\n public onMouseEnter(): void {\n if (this.tooltipEvent === 'hover' || this.focusedInputRef) {\n this.debounceCreateTooltipFunction();\n }\n }\n\n @HostListener('mouseleave')\n @HostListener('wheel')\n public onMouseLeave(): void {\n if ((this.tooltipEvent === 'hover' || this.focusedInputRef) && !this.tooltipCreatedByFocus) {\n this.destroy();\n }\n }\n\n @HostListener('touchstart')\n public onTouchStart(): void {\n if (this.tooltipEvent === 'hover') {\n window.clearTimeout(this.touchTimeout);\n const _delay = this.mobileBehavior === 'pressing' ? this.showDelay : 0;\n this.touchTimeout = window.setTimeout(() => {\n this._createTooltip(true, true);\n }, _delay);\n }\n }\n\n @HostListener('touchend')\n public onTouchEnd(): void {\n if (this.tooltipEvent === 'hover') {\n if (this.mobileBehavior === 'pressing') {\n window.clearTimeout(this.touchTimeout);\n this.destroy();\n }\n }\n }\n\n private validatePosition() {\n const containsPosition = ['top', 'right', 'bottom', 'left'].includes(this.tooltipPosition);\n\n if (!containsPosition) {\n this.tooltipPosition = 'top';\n throw new Error(`Tooltip ${this.tooltipPosition} position is unexpected`);\n }\n }\n\n private getDomElement(): HTMLElement {\n this.componentRef = this.viewContainerRef.createComponent(TooltipComponent);\n return this.componentRef.location.nativeElement;\n }\n\n private _createTooltip(useShowDelay = false, autoDestroy = true) {\n const hasText = (this.tooltip || '').length > 0;\n const hasComponentRef = this.componentRef !== null;\n if (!hasText || hasComponentRef) {\n return;\n }\n const blockIfIsNotTruncatedContent = this.checkTruncatedText() ? !this.contentIsTruncated : false;\n if (blockIfIsNotTruncatedContent) {\n return;\n }\n const domElement = this.getDomElement();\n document.body.appendChild(domElement);\n this.tooltipDivElement = domElement.querySelector('.tooltip');\n this.setTooltipComponentProperties();\n const _showDelay = useShowDelay ? this.showDelay : 0;\n setTimeout(() => {\n this.showTooltip();\n }, _showDelay);\n\n this.renderer.listen(window, 'scroll', () => {\n this.setTooltipPositionProperty();\n });\n\n if (autoDestroy && this.displayTime) {\n setTimeout(() => {\n this.destroy();\n }, this.displayTime);\n }\n }\n\n private showTooltip() {\n if (this.componentRef) {\n this.componentRef.instance.visible = this.visible;\n\n this.setTooltipPositionProperty();\n }\n }\n\n private setTooltipPositionProperty() {\n if (!this.componentRef) {\n return;\n }\n const anchorSize = 5;\n const { left, right } = this.elementRef.nativeElement.getBoundingClientRect();\n\n const tooltipElementPosition = getElementPositionInfo(this.tooltipDivElement!);\n const elementLeftover = getElementLeftoverContentAvailable(this.elementRef.nativeElement);\n const elementTriggerPosition = getElementPositionInfo(this.elementRef.nativeElement);\n const horizontalPositions: TooltipPositions[] = ['left', 'right'];\n const isPositionHorizontal = horizontalPositions.includes(this.tooltipPosition);\n const distanceToBorders = isPositionHorizontal\n ? tooltipElementPosition.elementWidth\n : tooltipElementPosition.elementHorizontalCenter;\n const canSetAtTop = elementLeftover.freeDistanceToTop > tooltipElementPosition.elementHeight;\n const canSetAtLeft = elementLeftover.freeDistanceToLeft > distanceToBorders;\n const canSetAtRight = elementLeftover.freeDistanceToRight > distanceToBorders;\n const canSetAtBottom = elementLeftover.freeDistanceToBottom > tooltipElementPosition.elementHeight;\n const topVertical = elementTriggerPosition.top + elementTriggerPosition.elementVerticalCenter;\n const checkTopPosition = () => {\n return canSetAtTop && canSetAtLeft && canSetAtRight;\n };\n const checkBottomPosition = () => {\n return canSetAtBottom && canSetAtLeft && canSetAtRight;\n };\n const checkLeftPosition = () => {\n return canSetAtLeft && canSetAtTop && canSetAtBottom;\n };\n\n const checkRightPosition = () => {\n return canSetAtRight && canSetAtTop && canSetAtBottom;\n };\n\n const setTopPosition = (): { left: number; top: number } => {\n return {\n left: left + (right - left) / 2,\n top: elementTriggerPosition.top - anchorSize,\n };\n };\n\n const setBottomPosition = (): { left: number; top: number } => {\n return {\n left: left + (right - left) / 2,\n top: elementTriggerPosition.top + elementTriggerPosition.elementHeight,\n };\n };\n\n const setLeftPosition = (): { left: number; top: number } => {\n return {\n left: left,\n top: topVertical,\n };\n };\n\n const setRightPosition = (): { left: number; top: number } => {\n return {\n left: right,\n top: topVertical,\n };\n };\n\n type Position = {\n pos: TooltipPositions;\n check: () => boolean;\n set: () => { left: number; top: number };\n };\n\n const positions: Position[] = [\n {\n pos: 'top',\n check: checkTopPosition,\n set: setTopPosition,\n },\n {\n pos: 'bottom',\n check: checkBottomPosition,\n set: setBottomPosition,\n },\n {\n pos: 'left',\n check: checkLeftPosition,\n set: setLeftPosition,\n },\n {\n pos: 'right',\n check: checkRightPosition,\n set: setRightPosition,\n },\n ];\n\n const positionDefined = positions.find((position) => position.pos === this.tooltipPosition);\n let validPosition: Position | undefined = positionDefined;\n const canUseDefinedPosition = positionDefined?.check();\n if (canUseDefinedPosition) {\n validPosition = positionDefined;\n } else if (!canUseDefinedPosition) {\n const validAlternativePosition = positions.find((position) => position.check());\n if (validAlternativePosition) {\n validPosition = validAlternativePosition;\n }\n }\n const _position = validPosition!.set();\n const positionLeft = _position.left;\n const positionTop = _position.top;\n this.componentRef.instance.left = Math.round(positionLeft);\n this.componentRef.instance.top = Math.round(positionTop);\n this.componentRef.instance.position = validPosition!.pos;\n }\n\n private setTooltipComponentProperties() {\n if (!this.componentRef) return;\n\n this.componentRef.instance.tooltip = this.tooltip as string;\n this.componentRef.instance.escape = this.escape;\n }\n\n private destroy(): void {\n if (!isNullOrUndefined(this.componentRef)) {\n window.clearTimeout(this.showTimeout);\n this.appRef.detachView(this.componentRef.hostView);\n this.componentRef.destroy();\n this.componentRef = null;\n this.tooltipDivElement = null;\n }\n }\n\n private get contentIsTruncated() {\n const element = this.elementRef.nativeElement as HTMLElement;\n const truncatedByVertical = element.scrollHeight > element.clientHeight;\n const truncatedByHorizontal = element.scrollWidth > element.clientWidth;\n return truncatedByHorizontal || truncatedByVertical;\n }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { TooltipComponent } from './tooltip.component';\nimport { TooltipDirective } from './tooltip.directive';\n\n@NgModule({\n imports: [CommonModule, TooltipDirective],\n declarations: [TooltipComponent],\n exports: [TooltipDirective],\n})\nexport class TooltipModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
|
|
@@ -66,6 +66,7 @@ export declare class FileUploadComponent implements OnInit, OnDestroy, AfterCont
|
|
|
66
66
|
onCancelUpload(index: number): void;
|
|
67
67
|
onDowloadFile(index: number): void;
|
|
68
68
|
get files(): FileDto[];
|
|
69
|
+
formatFileSize(size: number): string;
|
|
69
70
|
private update;
|
|
70
71
|
private isFileLimitExceeded;
|
|
71
72
|
private isFileCombinedSizeExceeded;
|
|
@@ -5,8 +5,9 @@ import * as i3 from "@seniorsistemas/angular-components/button";
|
|
|
5
5
|
import * as i4 from "primeng/tooltip";
|
|
6
6
|
import * as i5 from "primeng/progressbar";
|
|
7
7
|
import * as i6 from "@ngx-translate/core";
|
|
8
|
+
import * as i7 from "@seniorsistemas/angular-components/locale";
|
|
8
9
|
export declare class FileUploadModule {
|
|
9
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<FileUploadModule, never>;
|
|
10
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<FileUploadModule, [typeof i1.FileUploadComponent], [typeof i2.CommonModule, typeof i3.ButtonModule, typeof i4.TooltipModule, typeof i5.ProgressBarModule, typeof i6.TranslateModule], [typeof i1.FileUploadComponent]>;
|
|
11
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<FileUploadModule, [typeof i1.FileUploadComponent], [typeof i2.CommonModule, typeof i3.ButtonModule, typeof i4.TooltipModule, typeof i5.ProgressBarModule, typeof i6.TranslateModule, typeof i7.LocaleModule], [typeof i1.FileUploadComponent]>;
|
|
11
12
|
static ɵinj: i0.ɵɵInjectorDeclaration<FileUploadModule>;
|
|
12
13
|
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { HttpClient } from
|
|
2
|
-
import { Observable } from
|
|
3
|
-
import { CookieService } from
|
|
4
|
-
import { LocaleOptions } from
|
|
1
|
+
import { HttpClient } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { CookieService } from 'ngx-cookie-service';
|
|
4
|
+
import { LocaleOptions } from './options/index';
|
|
5
|
+
import 'moment/locale/es';
|
|
6
|
+
import 'moment/locale/pt-br';
|
|
5
7
|
import * as i0 from "@angular/core";
|
|
6
8
|
export declare class LocaleService {
|
|
7
9
|
private readonly http;
|
|
@@ -10,6 +12,7 @@ export declare class LocaleService {
|
|
|
10
12
|
private localeOptions?;
|
|
11
13
|
private readonly localeOptionsAddress;
|
|
12
14
|
private readonly localeOptionsVersion;
|
|
15
|
+
private readonly VALID_MOMENT_LANGUAGES;
|
|
13
16
|
constructor(http: HttpClient, cookieService: CookieService);
|
|
14
17
|
get(): Observable<LocaleOptions>;
|
|
15
18
|
getLocale(): Observable<string>;
|
|
@@ -19,6 +22,13 @@ export declare class LocaleService {
|
|
|
19
22
|
*/
|
|
20
23
|
getLocaleOptions(): LocaleOptions | undefined;
|
|
21
24
|
private getUserData;
|
|
25
|
+
/**
|
|
26
|
+
* Set valid locale for moment js locale based on user current locale.
|
|
27
|
+
* Sometimes the locale from user not exists in locale of moment, for example, is valid user with language 'es-CO' but for the momentjs the locale 'es-CO' not exist, so with this function will be applied the 'es' locale.
|
|
28
|
+
* @param userLocale
|
|
29
|
+
* @returns valid locale based in user locale.
|
|
30
|
+
*/
|
|
31
|
+
private parseUserLocaleToMoment;
|
|
22
32
|
private getLocaleConfig;
|
|
23
33
|
getGroupingSeparator(): string | undefined;
|
|
24
34
|
getDecimalSeparator(): string | undefined;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { CalendarLocaleOptions } from
|
|
2
|
-
import { NumberLocaleOptions } from
|
|
1
|
+
import { CalendarLocaleOptions } from './calendar';
|
|
2
|
+
import { NumberLocaleOptions } from './number';
|
|
3
3
|
export interface ILocaleOptions {
|
|
4
|
+
locale?: string;
|
|
4
5
|
calendar?: CalendarLocaleOptions;
|
|
5
6
|
number?: NumberLocaleOptions;
|
|
6
7
|
}
|
|
7
8
|
export declare class LocaleOptions implements ILocaleOptions {
|
|
8
|
-
locale?: string;
|
|
9
|
+
locale?: string | undefined;
|
|
9
10
|
calendar: CalendarLocaleOptions;
|
|
10
11
|
number: NumberLocaleOptions;
|
|
11
12
|
constructor(config?: ILocaleOptions);
|
|
12
13
|
}
|
|
13
|
-
export * from
|
|
14
|
-
export * from
|
|
14
|
+
export * from './calendar';
|
|
15
|
+
export * from './number';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { PipeTransform } from
|
|
2
|
-
import { LocaleService } from
|
|
1
|
+
import { PipeTransform } from '@angular/core';
|
|
2
|
+
import { LocaleService } from '../locale.service';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class LocalizedTimePipe implements PipeTransform {
|
|
5
5
|
private localeService;
|
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
# Numeric Mask Directive
|
|
2
|
+
|
|
3
|
+
Diretiva Angular para formatação de valores numéricos com suporte completo a internacionalização e validação. Funciona com moedas, números decimais, notação científica e muito mais.
|
|
4
|
+
|
|
5
|
+
## Recursos
|
|
6
|
+
|
|
7
|
+
- ✅ Suporte completo a internacionalização (todos os locales)
|
|
8
|
+
- ✅ Formatação automática com separadores de milhar e decimal
|
|
9
|
+
- ✅ Validação integrada com Angular Forms
|
|
10
|
+
- ✅ Suporte a valores negativos
|
|
11
|
+
- ✅ Controle de casas decimais configurável (mínimas e máximas)
|
|
12
|
+
- ✅ Truncamento inteligente de decimais (nunca arredonda)
|
|
13
|
+
- ✅ Precisão arbitrária com BigNumber
|
|
14
|
+
- ✅ Suporte a notação científica com expoentes negativos
|
|
15
|
+
- ✅ Tratamento inteligente de colagem
|
|
16
|
+
- ✅ Teclado numérico em dispositivos móveis
|
|
17
|
+
- ✅ Acessibilidade (ARIA)
|
|
18
|
+
- ✅ Standalone component compatível
|
|
19
|
+
|
|
20
|
+
## Instalação
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install @seniorsistemas/angular-components
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Uso Básico
|
|
27
|
+
|
|
28
|
+
### Standalone Components (Recomendado)
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { Component } from '@angular/core';
|
|
32
|
+
import { FormsModule } from '@angular/forms';
|
|
33
|
+
import { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';
|
|
34
|
+
|
|
35
|
+
@Component({
|
|
36
|
+
selector: 'app-example',
|
|
37
|
+
standalone: true,
|
|
38
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
39
|
+
template: `
|
|
40
|
+
<input
|
|
41
|
+
type="text"
|
|
42
|
+
sNumericMask
|
|
43
|
+
[locale]="'pt-BR'"
|
|
44
|
+
[minDecimalPlaces]="2"
|
|
45
|
+
[maxDecimalPlaces]="2"
|
|
46
|
+
[(ngModel)]="value"
|
|
47
|
+
/>
|
|
48
|
+
`
|
|
49
|
+
})
|
|
50
|
+
export class ExampleComponent {
|
|
51
|
+
value: string | null = null;
|
|
52
|
+
}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## API
|
|
56
|
+
|
|
57
|
+
### Inputs
|
|
58
|
+
|
|
59
|
+
| Input | Tipo | Padrão | Descrição |
|
|
60
|
+
|-------|------|--------|-----------|
|
|
61
|
+
| `locale` | `string \| undefined` | `undefined` | Locale para formatação (ex: 'pt-BR', 'en-US', 'de-DE', 'fr-FR'). Se não fornecido, usa automaticamente o locale do `LocaleService` |
|
|
62
|
+
| `minDecimalPlaces` | `number` | `0` | Quantidade mínima de casas decimais a exibir. Na formatação (blur), ajusta o valor para ter no mínimo esse número de casas decimais |
|
|
63
|
+
| `maxDecimalPlaces` | `number` | `10` | Quantidade máxima de casas decimais permitidas. Na formatação (blur), limita a exibição a esse número de casas decimais |
|
|
64
|
+
| `allowNegative` | `boolean` | `false` | Permite valores negativos. Use `+` e `-` para alternar o sinal |
|
|
65
|
+
| `allowScientificNotation` | `boolean` | `true` | Habilita suporte a notação científica (ex: `1e-6`). Quando `false`, bloqueia digitação e colagem de valores com `e`/`E` |
|
|
66
|
+
| `textAlign` | `'left' \| 'right'` | `'right'` | Alinhamento do texto dentro do input |
|
|
67
|
+
| `min` | `number \| undefined` | `undefined` | Valor mínimo permitido. Quando definido, adiciona validação nativa |
|
|
68
|
+
| `max` | `number \| undefined` | `undefined` | Valor máximo permitido. Quando definido, adiciona validação nativa |
|
|
69
|
+
|
|
70
|
+
## Comportamento
|
|
71
|
+
|
|
72
|
+
### Truncamento de Decimais
|
|
73
|
+
|
|
74
|
+
Ao contrário de outras máscaras numéricas que **arredondam**, a `numeric-mask` **trunca** valores que excedem `maxDecimalPlaces`. Isso é crucial para precisão em valores financeiros e científicos.
|
|
75
|
+
|
|
76
|
+
Exemplo com `maxDecimalPlaces="2"`:
|
|
77
|
+
- Valor digitado: `1,999`
|
|
78
|
+
- Valor no modelo: `1.999` (sem truncamento)
|
|
79
|
+
- Valor exibido (blur): `1,99` (truncado, não arredondado para `2,00`)
|
|
80
|
+
- Valor ao receber foco: `1,999` (mostra completo)
|
|
81
|
+
|
|
82
|
+
### Bloqueio de Caracteres Inválidos
|
|
83
|
+
|
|
84
|
+
A diretiva bloqueia automaticamente a digitação de caracteres que não sejam:
|
|
85
|
+
- Dígitos (0-9)
|
|
86
|
+
- Separador decimal (`,` ou `.` conforme o locale)
|
|
87
|
+
- Caracteres de controle (Tab, Backspace, Delete, etc.)
|
|
88
|
+
- Teclas de seta
|
|
89
|
+
- Ctrl/Cmd/Alt
|
|
90
|
+
|
|
91
|
+
Para **valores negativos**, você pode:
|
|
92
|
+
- Pressionar `-` no início do valor para ativar/desativar o sinal negativo
|
|
93
|
+
- Pressionar `+` para remover o sinal negativo
|
|
94
|
+
|
|
95
|
+
### Focus
|
|
96
|
+
|
|
97
|
+
Quando o input recebe foco:
|
|
98
|
+
- Remove a formatação (separadores de milhar)
|
|
99
|
+
- Exibe o valor com o separador decimal do locale
|
|
100
|
+
- Auto-seleciona todo o valor para fácil substituição
|
|
101
|
+
- Mostra o valor **completo** do modelo (sem truncamento)
|
|
102
|
+
|
|
103
|
+
Exemplo:
|
|
104
|
+
- Valor formatado: `1.234,56`
|
|
105
|
+
- No focus: `1234,56` (apenas separador decimal, valor completo)
|
|
106
|
+
|
|
107
|
+
### Modelo vs Formatação
|
|
108
|
+
|
|
109
|
+
A diretiva separa claramente o valor armazenado do valor exibido:
|
|
110
|
+
|
|
111
|
+
| Situação | Modelo | Display |
|
|
112
|
+
|----------|--------|---------|
|
|
113
|
+
| Digitando | `1.999` | `1,999` |
|
|
114
|
+
| Após blur | `1.999` | `1,99` (truncado) |
|
|
115
|
+
| Com foco | `1.999` | `1,999` (completo) |
|
|
116
|
+
| Notação científica | `0.000000000000000000001` | `0,00000000000000000000` (truncado) |
|
|
117
|
+
|
|
118
|
+
**Garantia:** O modelo **sempre** armazena o valor completo, sem truncamento. As propriedades `minDecimalPlaces` e `maxDecimalPlaces` afetam **apenas** a formatação visual.
|
|
119
|
+
|
|
120
|
+
### Blur
|
|
121
|
+
|
|
122
|
+
Quando o input perde foco:
|
|
123
|
+
- Reaplica a formatação completa com separadores de milhar
|
|
124
|
+
- Valida o valor conforme as regras configuradas
|
|
125
|
+
|
|
126
|
+
### Colagem (Paste)
|
|
127
|
+
|
|
128
|
+
- Processa automaticamente valores copiados
|
|
129
|
+
- Converte notação científica (ex: `1e-6`) em decimal
|
|
130
|
+
- Normaliza separadores para o locale configurado
|
|
131
|
+
|
|
132
|
+
## Exemplos
|
|
133
|
+
|
|
134
|
+
### Exemplo Básico
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
@Component({
|
|
138
|
+
selector: 'app-basic',
|
|
139
|
+
standalone: true,
|
|
140
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
141
|
+
template: `
|
|
142
|
+
<input
|
|
143
|
+
sNumericMask
|
|
144
|
+
[locale]="'pt-BR'"
|
|
145
|
+
[minDecimalPlaces]="2"
|
|
146
|
+
[maxDecimalPlaces]="2"
|
|
147
|
+
[(ngModel)]="value"
|
|
148
|
+
/>
|
|
149
|
+
<p>Valor: {{ value }}</p>
|
|
150
|
+
`
|
|
151
|
+
})
|
|
152
|
+
export class BasicComponent {
|
|
153
|
+
value: string | null = null;
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### Exemplo com Valores Negativos
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
@Component({
|
|
161
|
+
selector: 'app-negative',
|
|
162
|
+
standalone: true,
|
|
163
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
164
|
+
template: `
|
|
165
|
+
<input
|
|
166
|
+
sNumericMask
|
|
167
|
+
[allowNegative]="true"
|
|
168
|
+
[locale]="'pt-BR'"
|
|
169
|
+
[minDecimalPlaces]="2"
|
|
170
|
+
[maxDecimalPlaces]="2"
|
|
171
|
+
[(ngModel)]="value"
|
|
172
|
+
/>
|
|
173
|
+
<p>Pressione - para alternar o sinal</p>
|
|
174
|
+
`
|
|
175
|
+
})
|
|
176
|
+
export class NegativeComponent {
|
|
177
|
+
value: string | null = null;
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Exemplo com Notação Científica
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
@Component({
|
|
185
|
+
selector: 'app-scientific',
|
|
186
|
+
standalone: true,
|
|
187
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
188
|
+
template: `
|
|
189
|
+
<input
|
|
190
|
+
sNumericMask
|
|
191
|
+
[allowScientificNotation]="true"
|
|
192
|
+
[minDecimalPlaces]="0"
|
|
193
|
+
[maxDecimalPlaces]="15"
|
|
194
|
+
[(ngModel)]="value"
|
|
195
|
+
placeholder="Ex: 1e-6, 1.5e-10"
|
|
196
|
+
/>
|
|
197
|
+
<p>Valor: {{ value }}</p>
|
|
198
|
+
`
|
|
199
|
+
})
|
|
200
|
+
export class ScientificComponent {
|
|
201
|
+
value: string | null = null;
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Exemplo sem Notação Científica
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
@Component({
|
|
209
|
+
selector: 'app-no-scientific',
|
|
210
|
+
standalone: true,
|
|
211
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
212
|
+
template: `
|
|
213
|
+
<input
|
|
214
|
+
sNumericMask
|
|
215
|
+
[allowScientificNotation]="false"
|
|
216
|
+
[locale]="'pt-BR'"
|
|
217
|
+
[minDecimalPlaces]="2"
|
|
218
|
+
[maxDecimalPlaces]="2"
|
|
219
|
+
[(ngModel)]="value"
|
|
220
|
+
/>
|
|
221
|
+
`
|
|
222
|
+
})
|
|
223
|
+
export class NoScientificComponent {
|
|
224
|
+
value: string | null = null;
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### Exemplo com Validação Min/Max
|
|
229
|
+
|
|
230
|
+
```typescript
|
|
231
|
+
@Component({
|
|
232
|
+
selector: 'app-min-max',
|
|
233
|
+
standalone: true,
|
|
234
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
235
|
+
template: `
|
|
236
|
+
<input
|
|
237
|
+
sNumericMask
|
|
238
|
+
[minDecimalPlaces]="2"
|
|
239
|
+
[maxDecimalPlaces]="2"
|
|
240
|
+
[min]="0"
|
|
241
|
+
[max]="1000"
|
|
242
|
+
[(ngModel)]="price"
|
|
243
|
+
#priceInput="ngModel"
|
|
244
|
+
/>
|
|
245
|
+
|
|
246
|
+
@if (priceInput.errors?.['min']) {
|
|
247
|
+
<span class="error">
|
|
248
|
+
Valor mínimo: {{ priceInput.errors?.['min'].min }}
|
|
249
|
+
</span>
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
@if (priceInput.errors?.['max']) {
|
|
253
|
+
<span class="error">
|
|
254
|
+
Valor máximo: {{ priceInput.errors?.['max'].max }}
|
|
255
|
+
</span>
|
|
256
|
+
}
|
|
257
|
+
`
|
|
258
|
+
})
|
|
259
|
+
export class MinMaxComponent {
|
|
260
|
+
price: string | null = null;
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### Exemplo com Alta Precisão
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
@Component({
|
|
268
|
+
selector: 'app-high-precision',
|
|
269
|
+
standalone: true,
|
|
270
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
271
|
+
template: `
|
|
272
|
+
<input
|
|
273
|
+
sNumericMask
|
|
274
|
+
[locale]="'pt-BR'"
|
|
275
|
+
[minDecimalPlaces]="0"
|
|
276
|
+
[maxDecimalPlaces]="8"
|
|
277
|
+
[(ngModel)]="cryptoValue"
|
|
278
|
+
/>
|
|
279
|
+
<p>Valor da criptomoeda: {{ cryptoValue }}</p>
|
|
280
|
+
`
|
|
281
|
+
})
|
|
282
|
+
export class HighPrecisionComponent {
|
|
283
|
+
cryptoValue: string | null = null;
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Integração com LocaleService
|
|
288
|
+
|
|
289
|
+
A diretiva se integra automaticamente com o `LocaleService` do `@seniorsistemas/angular-components/locale`. Quando o input `locale` não é fornecido, a diretiva:
|
|
290
|
+
|
|
291
|
+
1. Injeta opcionalmente o `LocaleService`
|
|
292
|
+
2. Chama `localeService.get()` para carregar as configurações de locale
|
|
293
|
+
3. Usa `getLocaleOptions()?.locale` para obter o locale do usuário
|
|
294
|
+
4. Usa 'pt-BR' como fallback se o serviço não estiver disponível
|
|
295
|
+
|
|
296
|
+
### Com LocaleService
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
import { Component } from '@angular/core';
|
|
300
|
+
import { FormsModule } from '@angular/forms';
|
|
301
|
+
import { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';
|
|
302
|
+
import { LocaleModule } from '@seniorsistemas/angular-components/locale';
|
|
303
|
+
|
|
304
|
+
@Component({
|
|
305
|
+
selector: 'app-with-locale-service',
|
|
306
|
+
standalone: true,
|
|
307
|
+
imports: [FormsModule, NumericMaskDirective, LocaleModule],
|
|
308
|
+
template: `
|
|
309
|
+
<!-- Locale automático do usuário -->
|
|
310
|
+
<input sNumericMask [minDecimalPlaces]="2"
|
|
311
|
+
[maxDecimalPlaces]="2" [(ngModel)]="value" />
|
|
312
|
+
`
|
|
313
|
+
})
|
|
314
|
+
export class WithLocaleServiceComponent {
|
|
315
|
+
value: string | null = null;
|
|
316
|
+
}
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Sem LocaleService (Locale Explícito)
|
|
320
|
+
|
|
321
|
+
```typescript
|
|
322
|
+
@Component({
|
|
323
|
+
selector: 'app-explicit-locale',
|
|
324
|
+
standalone: true,
|
|
325
|
+
imports: [FormsModule, NumericMaskDirective],
|
|
326
|
+
template: `
|
|
327
|
+
<!-- Locale explícito, não usa LocaleService -->
|
|
328
|
+
<input sNumericMask [locale]="'en-US'" [minDecimalPlaces]="2"
|
|
329
|
+
[maxDecimalPlaces]="2" [(ngModel)]="value" />
|
|
330
|
+
`
|
|
331
|
+
})
|
|
332
|
+
export class ExplicitLocaleComponent {
|
|
333
|
+
value: string | null = null;
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## Acessibilidade
|
|
338
|
+
|
|
339
|
+
A diretiva configura automaticamente:
|
|
340
|
+
|
|
341
|
+
- `inputmode="decimal"` - Teclado numérico em dispositivos móveis
|
|
342
|
+
- `autocomplete="off"` - Desabilita autocomplete
|
|
343
|
+
|
|
344
|
+
Para melhor acessibilidade, adicione manualmente:
|
|
345
|
+
|
|
346
|
+
```html
|
|
347
|
+
<label for="price">Preço (até 2 casas decimais)</label>
|
|
348
|
+
<input
|
|
349
|
+
id="price"
|
|
350
|
+
type="text"
|
|
351
|
+
sNumericMask
|
|
352
|
+
[locale]="'pt-BR'"
|
|
353
|
+
[minDecimalPlaces]="2"
|
|
354
|
+
[maxDecimalPlaces]="2"
|
|
355
|
+
[(ngModel)]="price"
|
|
356
|
+
aria-label="Digite um número com até 2 casas decimais"
|
|
357
|
+
/>
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
## Compatibilidade
|
|
361
|
+
|
|
362
|
+
- Angular 18+
|
|
363
|
+
- Todos os navegadores modernos com suporte a `Intl.NumberFormat`
|
|
364
|
+
|
|
365
|
+
## Licença
|
|
366
|
+
|
|
367
|
+
MIT
|