@sebgroup/green-angular 4.6.4 → 4.6.6
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/esm2022/lib/accordion/accordion-list-item.component.mjs +6 -3
- package/esm2022/lib/accordion/accordion.component.mjs +1 -1
- package/esm2022/lib/accordion/accordion.module.mjs +1 -1
- package/esm2022/lib/badge/badge.component.mjs +1 -1
- package/esm2022/lib/badge/badge.module.mjs +2 -2
- package/esm2022/lib/button/button.component.mjs +1 -1
- package/esm2022/lib/button/button.module.mjs +2 -2
- package/esm2022/lib/cell-table/cell-table-item.component.mjs +1 -1
- package/esm2022/lib/cell-table/cell-table.component.mjs +1 -1
- package/esm2022/lib/cell-table/cell-table.module.mjs +2 -2
- package/esm2022/lib/cell-table/cell-underline.directive.mjs +1 -1
- package/esm2022/lib/context-menu/context-menu.component.mjs +2 -2
- package/esm2022/lib/context-menu/context-menu.module.mjs +2 -2
- package/esm2022/lib/datepicker/datepicker.component.mjs +3 -3
- package/esm2022/lib/datepicker/datepicker.module.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/lib/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/lib/green-angular.module.mjs +2 -2
- package/esm2022/lib/in-page-wizard/in-page-wizard-step-card.component.mjs +1 -1
- package/esm2022/lib/in-page-wizard/in-page-wizard.module.mjs +2 -2
- package/esm2022/lib/modal/modal.component.mjs +4 -4
- package/esm2022/lib/modal/modal.module.mjs +4 -4
- package/esm2022/lib/pagination/pagination.component.mjs +2 -2
- package/esm2022/lib/pagination/pagination.module.mjs +2 -2
- package/esm2022/lib/progress-circle/progress-circle.component.mjs +1 -1
- package/esm2022/lib/progress-circle/progress-circle.module.mjs +2 -2
- package/esm2022/lib/segmented-control/segmented-control.component.mjs +2 -2
- package/esm2022/lib/segmented-control/segmented-control.module.mjs +3 -3
- package/esm2022/lib/shared/core-element/core-element.directive.mjs +2 -2
- package/esm2022/lib/shared/core-element/core-element.module.mjs +2 -2
- package/esm2022/lib/shared/on-scroll.directive.mjs +2 -2
- package/esm2022/lib/shared/shared.module.mjs +1 -1
- package/esm2022/lib/slider/slider.component.mjs +1 -1
- package/esm2022/lib/sortable-list/sortable-list.component.mjs +2 -2
- package/esm2022/lib/sortable-list/sortable-list.module.mjs +2 -2
- package/esm2022/src/lib/accordion/accordion-list-item.component.mjs +6 -3
- package/esm2022/src/lib/accordion/accordion.component.mjs +1 -1
- package/esm2022/src/lib/accordion/accordion.module.mjs +1 -1
- package/esm2022/src/lib/badge/badge.component.mjs +1 -1
- package/esm2022/src/lib/badge/badge.module.mjs +2 -2
- package/esm2022/src/lib/button/button.component.mjs +1 -1
- package/esm2022/src/lib/button/button.module.mjs +2 -2
- package/esm2022/src/lib/cell-table/cell-table-item.component.mjs +1 -1
- package/esm2022/src/lib/cell-table/cell-table.component.mjs +1 -1
- package/esm2022/src/lib/cell-table/cell-table.module.mjs +2 -2
- package/esm2022/src/lib/cell-table/cell-underline.directive.mjs +1 -1
- package/esm2022/src/lib/context-menu/context-menu.component.mjs +2 -2
- package/esm2022/src/lib/context-menu/context-menu.module.mjs +2 -2
- package/esm2022/src/lib/datepicker/datepicker.component.mjs +3 -3
- package/esm2022/src/lib/datepicker/datepicker.module.mjs +3 -3
- package/esm2022/src/lib/dropdown/dropdown.component.mjs +3 -3
- package/esm2022/src/lib/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/src/lib/in-page-wizard/in-page-wizard-step-card.component.mjs +1 -1
- package/esm2022/src/lib/in-page-wizard/in-page-wizard.module.mjs +2 -2
- package/esm2022/src/lib/modal/modal.component.mjs +4 -4
- package/esm2022/src/lib/modal/modal.module.mjs +4 -4
- package/esm2022/src/lib/pagination/pagination.component.mjs +2 -2
- package/esm2022/src/lib/pagination/pagination.module.mjs +2 -2
- package/esm2022/src/lib/progress-circle/progress-circle.component.mjs +1 -1
- package/esm2022/src/lib/progress-circle/progress-circle.module.mjs +2 -2
- package/esm2022/src/lib/segmented-control/segmented-control.component.mjs +2 -2
- package/esm2022/src/lib/segmented-control/segmented-control.module.mjs +3 -3
- package/esm2022/src/lib/shared/core-element/core-element.directive.mjs +2 -2
- package/esm2022/src/lib/shared/core-element/core-element.module.mjs +2 -2
- package/esm2022/src/lib/shared/on-scroll.directive.mjs +2 -2
- package/esm2022/src/lib/shared/shared.module.mjs +1 -1
- package/esm2022/src/lib/slider/slider.component.mjs +1 -1
- package/esm2022/src/lib/sortable-list/sortable-list.component.mjs +2 -2
- package/esm2022/src/lib/sortable-list/sortable-list.module.mjs +2 -2
- package/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +3 -3
- package/esm2022/src/v-angular/base-control-value-accessor/base-control-value-accessor.module.mjs +1 -1
- package/esm2022/src/v-angular/breadcrumbs/breadcrumbs.module.mjs +3 -3
- package/esm2022/src/v-angular/button/button.component.mjs +3 -3
- package/esm2022/src/v-angular/button/button.module.mjs +3 -3
- package/esm2022/src/v-angular/card/card.module.mjs +2 -2
- package/esm2022/src/v-angular/character-countdown/character-countdown.module.mjs +2 -2
- package/esm2022/src/v-angular/checkbox/checkbox.component.mjs +1 -1
- package/esm2022/src/v-angular/checkbox/checkbox.module.mjs +3 -3
- package/esm2022/src/v-angular/core/core.utils.mjs +1 -1
- package/esm2022/src/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +4 -4
- package/esm2022/src/v-angular/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/src/v-angular/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +5 -5
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.mjs +3 -3
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.mjs +5 -5
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead.directive.mjs +2 -2
- package/esm2022/src/v-angular/dropdown/typeahead/typeahead.module.mjs +4 -4
- package/esm2022/src/v-angular/external-link/external-link.module.mjs +2 -2
- package/esm2022/src/v-angular/i18n/i18n.module.mjs +2 -2
- package/esm2022/src/v-angular/i18n/i18n.test.module.mjs +1 -1
- package/esm2022/src/v-angular/info-circle/info-circle.component.mjs +1 -1
- package/esm2022/src/v-angular/info-circle/info-circle.module.mjs +3 -3
- package/esm2022/src/v-angular/input/input.component.mjs +4 -3
- package/esm2022/src/v-angular/input/input.module.mjs +9 -5
- package/esm2022/src/v-angular/input-mask/config.mjs +1 -1
- package/esm2022/src/v-angular/input-mask/constants.mjs +1 -1
- package/esm2022/src/v-angular/input-mask/input-mask-format.pipe.mjs +1 -1
- package/esm2022/src/v-angular/input-mask/input-mask.directive.mjs +1 -1
- package/esm2022/src/v-angular/input-mask/input-mask.types.mjs +1 -1
- package/esm2022/src/v-angular/modal/fold-out/fold-out.component.mjs +1 -1
- package/esm2022/src/v-angular/modal/modal.module.mjs +3 -3
- package/esm2022/src/v-angular/modal/modal.types.mjs +1 -1
- package/esm2022/src/v-angular/modal/slide-out/slide-out.component.mjs +4 -4
- package/esm2022/src/v-angular/radio/radio.component.mjs +1 -1
- package/esm2022/src/v-angular/radio/radio.module.mjs +3 -3
- package/esm2022/src/v-angular/slug/slug.module.mjs +2 -2
- package/esm2022/src/v-angular/slug/slug.pipe.mjs +1 -1
- package/esm2022/src/v-angular/textarea/textarea.component.mjs +3 -2
- package/esm2022/src/v-angular/textarea/textarea.module.mjs +7 -6
- package/esm2022/src/v-angular/tooltip/tooltip.module.mjs +1 -1
- package/esm2022/v-angular/base-control-value-accessor/base-control-value-accessor.component.mjs +3 -3
- package/esm2022/v-angular/base-control-value-accessor/base-control-value-accessor.module.mjs +1 -1
- package/esm2022/v-angular/breadcrumbs/breadcrumbs.module.mjs +3 -3
- package/esm2022/v-angular/button/button.component.mjs +3 -3
- package/esm2022/v-angular/button/button.module.mjs +3 -3
- package/esm2022/v-angular/card/card.module.mjs +2 -2
- package/esm2022/v-angular/character-countdown/character-countdown.module.mjs +2 -2
- package/esm2022/v-angular/checkbox/checkbox.component.mjs +1 -1
- package/esm2022/v-angular/checkbox/checkbox.module.mjs +3 -3
- package/esm2022/v-angular/dropdown/dropdown-list/dropdown-list.component.mjs +4 -4
- package/esm2022/v-angular/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/v-angular/dropdown/dropdown.module.mjs +5 -5
- package/esm2022/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.mjs +5 -5
- package/esm2022/v-angular/dropdown/typeahead/typeahead-highlight/typeahead-highlight.component.mjs +3 -3
- package/esm2022/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.mjs +5 -5
- package/esm2022/v-angular/dropdown/typeahead/typeahead.directive.mjs +2 -2
- package/esm2022/v-angular/dropdown/typeahead/typeahead.module.mjs +4 -4
- package/esm2022/v-angular/i18n/i18n.module.mjs +2 -2
- package/esm2022/v-angular/i18n/i18n.test.module.mjs +1 -1
- package/esm2022/v-angular/info-circle/info-circle.component.mjs +1 -1
- package/esm2022/v-angular/info-circle/info-circle.module.mjs +3 -3
- package/esm2022/v-angular/input/input.component.mjs +4 -3
- package/esm2022/v-angular/input/input.module.mjs +9 -5
- package/esm2022/v-angular/input-mask/config.mjs +1 -1
- package/esm2022/v-angular/input-mask/constants.mjs +1 -1
- package/esm2022/v-angular/input-mask/input-mask-format.pipe.mjs +1 -1
- package/esm2022/v-angular/input-mask/input-mask.directive.mjs +1 -1
- package/esm2022/v-angular/input-mask/input-mask.types.mjs +1 -1
- package/esm2022/v-angular/modal/fold-out/fold-out.component.mjs +1 -1
- package/esm2022/v-angular/modal/modal.module.mjs +3 -3
- package/esm2022/v-angular/modal/modal.types.mjs +1 -1
- package/esm2022/v-angular/modal/slide-out/slide-out.component.mjs +4 -4
- package/esm2022/v-angular/radio/radio.component.mjs +1 -1
- package/esm2022/v-angular/radio/radio.module.mjs +3 -3
- package/esm2022/v-angular/textarea/textarea.component.mjs +3 -2
- package/esm2022/v-angular/textarea/textarea.module.mjs +7 -6
- package/esm2022/v-angular/tooltip/tooltip.module.mjs +1 -1
- package/esm2022/v-angular/v-angular.module.mjs +3 -3
- package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs +5 -2
- package/fesm2022/sebgroup-green-angular-src-lib-accordion.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-badge.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-button.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-cell-table.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-context-menu.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-datepicker.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs +10 -10
- package/fesm2022/sebgroup-green-angular-src-lib-dropdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-in-page-wizard.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs +12 -12
- package/fesm2022/sebgroup-green-angular-src-lib-modal.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-pagination.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-progress-circle.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-segmented-control.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-shared.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-slider.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs +2 -2
- package/fesm2022/sebgroup-green-angular-src-lib-sortable-list.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-base-control-value-accessor.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-breadcrumbs.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs +2 -2
- package/fesm2022/sebgroup-green-angular-src-v-angular-button.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-card.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-character-countdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-checkbox.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-core.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs +99 -99
- package/fesm2022/sebgroup-green-angular-src-v-angular-dropdown.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-external-link.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-i18n.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-info-circle.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-input-mask.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs +10 -5
- package/fesm2022/sebgroup-green-angular-src-v-angular-input.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs +3 -3
- package/fesm2022/sebgroup-green-angular-src-v-angular-modal.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-radio.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-slug.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs +6 -4
- package/fesm2022/sebgroup-green-angular-src-v-angular-textarea.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-src-v-angular-tooltip.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular-v-angular.mjs +116 -111
- package/fesm2022/sebgroup-green-angular-v-angular.mjs.map +1 -1
- package/fesm2022/sebgroup-green-angular.mjs +290 -287
- package/fesm2022/sebgroup-green-angular.mjs.map +1 -1
- package/lib/accordion/accordion-list-item.component.d.ts +2 -1
- package/lib/cell-table/cell-table-item.component.d.ts +1 -1
- package/lib/cell-table/cell-underline.directive.d.ts +1 -1
- package/lib/datepicker/datepicker.component.d.ts +1 -1
- package/lib/dropdown/dropdown.component.d.ts +1 -1
- package/lib/modal/modal.component.d.ts +2 -2
- package/lib/sortable-list/sortable-list.component.d.ts +1 -1
- package/package.json +2 -2
- package/src/lib/accordion/accordion-list-item.component.d.ts +2 -1
- package/src/lib/cell-table/cell-table-item.component.d.ts +1 -1
- package/src/lib/cell-table/cell-underline.directive.d.ts +1 -1
- package/src/lib/datepicker/datepicker.component.d.ts +1 -1
- package/src/lib/dropdown/dropdown.component.d.ts +1 -1
- package/src/lib/modal/modal.component.d.ts +2 -2
- package/src/lib/sortable-list/sortable-list.component.d.ts +1 -1
- package/src/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +1 -1
- package/src/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +1 -1
- package/src/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +1 -1
- package/src/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +1 -1
- package/src/v-angular/dropdown/typeahead/typeahead.directive.d.ts +1 -1
- package/src/v-angular/input/input.component.d.ts +1 -1
- package/src/v-angular/input/input.module.d.ts +2 -1
- package/src/v-angular/textarea/textarea.module.d.ts +2 -1
- package/v-angular/base-control-value-accessor/base-control-value-accessor.component.d.ts +1 -1
- package/v-angular/dropdown/dropdown-list/dropdown-list.component.d.ts +1 -1
- package/v-angular/dropdown/typeahead/typeahead-dropdown-list/typeahead-dropdown-list.component.d.ts +1 -1
- package/v-angular/dropdown/typeahead/typeahead-input/typeahead-input.component.d.ts +1 -1
- package/v-angular/dropdown/typeahead/typeahead.directive.d.ts +1 -1
- package/v-angular/input/input.component.d.ts +1 -1
- package/v-angular/input/input.module.d.ts +2 -1
- package/v-angular/textarea/textarea.module.d.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sebgroup-green-angular-src-v-angular-radio.mjs","sources":["../../../../libs/angular/src/v-angular/radio/radio.component.ts","../../../../libs/angular/src/v-angular/radio/radio.component.html","../../../../libs/angular/src/v-angular/radio/radio.module.ts","../../../../libs/angular/src/v-angular/radio/sebgroup-green-angular-src-v-angular-radio.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Injectable,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\n\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@ngneat/transloco'\n\nimport { NgvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** @internal Internal class used to uncheck radio buttons with the matching name. */\n@Injectable()\nexport class NgvRadioControlRegistry {\n private _radios: any[] = []\n\n add(control: NgControl, radio: NgvRadioComponent) {\n this._radios.push([control, radio])\n }\n\n remove(radio: NgvRadioComponent) {\n for (let i = this._radios.length - 1; i >= 0; --i) {\n if (this._radios[i][1] === radio) {\n this._radios.splice(i, 1)\n return\n }\n }\n }\n\n select(radio: NgvRadioComponent) {\n this._radios.forEach((controlPair) => {\n if (this._isSameGroup(controlPair, radio) && controlPair[1] !== radio) {\n controlPair[1].writeValue(radio.value)\n }\n })\n }\n\n private _isSameGroup(\n controlPair: [NgControl, NgvRadioComponent],\n radio: NgvRadioComponent,\n ) {\n if (!controlPair[0].control) return false\n return (\n //@ts-expect-error internal properties not exposed\n controlPair[0]._parent === radio.ngControl._parent &&\n controlPair[1].name === radio.name\n )\n }\n}\n\n/**\n * Use radio buttons when users must select one option in a list with exclusive options out of a set of two or more options.\n * https://designlibrary.sebgroup.com/components/component-radiobutton\n */\n@Component({\n selector: 'nggv-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [NgvRadioControlRegistry],\n})\nexport class NgvRadioComponent\n extends NgvBaseControlValueAccessorComponent\n implements OnInit, OnDestroy\n{\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook = 'radio'\n\n /** Syncs a FormControl in an existing FormGroup to a form control element by name. */\n @Input() formControlName?: string\n\n /**\n * Creates a new RadioComponent\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param registry internal registry used to uncheck radio buttons with the matching name, through dependency injection.\n * @param cdr change detection reference for rendering purposes.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected registry: NgvRadioControlRegistry,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this._checkName()\n this.registry.add(this.ngControl, this)\n }\n\n ngOnDestroy() {\n this.registry.remove(this)\n }\n\n /** @internal */\n onInputChange(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.onChange(this.state)\n }\n\n /** Writes a new value of true or false based on if argument matches this components value property. */\n writeValue(value: any): void {\n // Phantom null value on first load https://github.com/angular/angular/pull/38140\n super.writeValue(value === this.value)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (value: any) => any) {\n // Override default to update registry\n this.onChange = () => {\n fn(this.value)\n this.registry.select(this)\n }\n }\n\n /** Checks that the name properties match and updates name property if only formControlName is given. */\n private _checkName(): void {\n if (\n this.name &&\n this.formControlName &&\n this.name !== this.formControlName\n ) {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `)\n }\n if (!this.name && this.formControlName) this.name = this.formControlName\n }\n}\n","<!-- LOCKED INPUT -->\n<div *ngIf=\"locked && state\" class=\"sdv-field-radio-wrap\">\n <div\n [id]=\"id + '-radio'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n >\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl ?? null; context: { $implicit: value }\"\n ></ng-template>\n </div>\n</div>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div class=\"sdv-field-radio-wrap\">\n <!-- RADIO BUTTON FIELD -->\n <label [attr.for]=\"id + '-radio'\" class=\"form-control\">\n <input\n #input\n type=\"radio\"\n [attr.id]=\"id + '-radio'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [attr.required]=\"required\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [attr.aria-label]=\"description\"\n [checked]=\"state\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- LABEL -->\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"\n labelContentTpl ?? null;\n context: { $implicit: value }\n \"\n ></ng-template>\n <i></i>\n </label>\n </div>\n\n <!-- ERRORS -->\n <ng-container *transloco=\"let t; read: scope\">\n <label\n class=\"sdv-field-notice sdv-field-notice--error\"\n [attr.for]=\"id + '-radio'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span *ngIf=\"error; else errorsRef\">{{ error }}</span>\n <ng-template #errorsRef>\n <span *ngIf=\"firstError as error\">\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </label>\n </ng-container>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import { NgModule, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\nimport { NgvRadioComponent } from './radio.component'\nimport { NgvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\n\n@NgModule({\n declarations: [NgvRadioComponent],\n imports: [CommonModule, NgvI18nModule],\n exports: [NgvRadioComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgvRadioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sebgroup-green-angular-src-v-angular-radio.mjs","sources":["../../../../libs/angular/src/v-angular/radio/radio.component.ts","../../../../libs/angular/src/v-angular/radio/radio.component.html","../../../../libs/angular/src/v-angular/radio/radio.module.ts","../../../../libs/angular/src/v-angular/radio/sebgroup-green-angular-src-v-angular-radio.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Injectable,\n Input,\n OnDestroy,\n OnInit,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@ngneat/transloco'\n\nimport { NgvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** @internal Internal class used to uncheck radio buttons with the matching name. */\n@Injectable()\nexport class NgvRadioControlRegistry {\n private _radios: any[] = []\n\n add(control: NgControl, radio: NgvRadioComponent) {\n this._radios.push([control, radio])\n }\n\n remove(radio: NgvRadioComponent) {\n for (let i = this._radios.length - 1; i >= 0; --i) {\n if (this._radios[i][1] === radio) {\n this._radios.splice(i, 1)\n return\n }\n }\n }\n\n select(radio: NgvRadioComponent) {\n this._radios.forEach((controlPair) => {\n if (this._isSameGroup(controlPair, radio) && controlPair[1] !== radio) {\n controlPair[1].writeValue(radio.value)\n }\n })\n }\n\n private _isSameGroup(\n controlPair: [NgControl, NgvRadioComponent],\n radio: NgvRadioComponent,\n ) {\n if (!controlPair[0].control) return false\n return (\n //@ts-expect-error internal properties not exposed\n controlPair[0]._parent === radio.ngControl._parent &&\n controlPair[1].name === radio.name\n )\n }\n}\n\n/**\n * Use radio buttons when users must select one option in a list with exclusive options out of a set of two or more options.\n * https://designlibrary.sebgroup.com/components/component-radiobutton\n */\n@Component({\n selector: 'nggv-radio',\n templateUrl: './radio.component.html',\n styleUrls: ['./radio.component.scss'],\n providers: [NgvRadioControlRegistry],\n})\nexport class NgvRadioComponent\n extends NgvBaseControlValueAccessorComponent\n implements OnInit, OnDestroy\n{\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook = 'radio'\n\n /** Syncs a FormControl in an existing FormGroup to a form control element by name. */\n @Input() formControlName?: string\n\n /**\n * Creates a new RadioComponent\n * @param ngControl optional FormControl provided when component is used in a form, through dependency injection.\n * @param registry internal registry used to uncheck radio buttons with the matching name, through dependency injection.\n * @param cdr change detection reference for rendering purposes.\n */\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected registry: NgvRadioControlRegistry,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n ngOnInit() {\n super.ngOnInit()\n this._checkName()\n this.registry.add(this.ngControl, this)\n }\n\n ngOnDestroy() {\n this.registry.remove(this)\n }\n\n /** @internal */\n onInputChange(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.onChange(this.state)\n }\n\n /** Writes a new value of true or false based on if argument matches this components value property. */\n writeValue(value: any): void {\n // Phantom null value on first load https://github.com/angular/angular/pull/38140\n super.writeValue(value === this.value)\n }\n\n /** Registers a callback function that is called when the child input element's value changes. */\n registerOnChange(fn: (value: any) => any) {\n // Override default to update registry\n this.onChange = () => {\n fn(this.value)\n this.registry.select(this)\n }\n }\n\n /** Checks that the name properties match and updates name property if only formControlName is given. */\n private _checkName(): void {\n if (\n this.name &&\n this.formControlName &&\n this.name !== this.formControlName\n ) {\n throw new Error(`\n If you define both a name and a formControlName attribute on your radio button, their values\n must match. Ex: <input type=\"radio\" formControlName=\"food\" name=\"food\">\n `)\n }\n if (!this.name && this.formControlName) this.name = this.formControlName\n }\n}\n","<!-- LOCKED INPUT -->\n<div *ngIf=\"locked && state\" class=\"sdv-field-radio-wrap\">\n <div\n [id]=\"id + '-radio'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n >\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl ?? null; context: { $implicit: value }\"\n ></ng-template>\n </div>\n</div>\n\n<!-- INPUT WRAPPER -->\n<ng-container *ngIf=\"!locked\">\n <div class=\"sdv-field-radio-wrap\">\n <!-- RADIO BUTTON FIELD -->\n <label [attr.for]=\"id + '-radio'\" class=\"form-control\">\n <input\n #input\n type=\"radio\"\n [attr.id]=\"id + '-radio'\"\n [attr.name]=\"name\"\n [attr.value]=\"value\"\n [attr.required]=\"required\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [attr.aria-label]=\"description\"\n [checked]=\"state\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"onInputChange($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n />\n\n <!-- LABEL -->\n {{ label }}\n <ng-template\n *ngTemplateOutlet=\"\n labelContentTpl ?? null;\n context: { $implicit: value }\n \"\n ></ng-template>\n <i></i>\n </label>\n </div>\n\n <!-- ERRORS -->\n <ng-container *transloco=\"let t; read: scope\">\n <label\n class=\"sdv-field-notice sdv-field-notice--error\"\n [attr.for]=\"id + '-radio'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span *ngIf=\"error; else errorsRef\">{{ error }}</span>\n <ng-template #errorsRef>\n <span *ngIf=\"firstError as error\">\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </label>\n </ng-container>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core'\n\nimport { NgvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NgvRadioComponent } from './radio.component'\n\n@NgModule({\n declarations: [NgvRadioComponent],\n imports: [CommonModule, NgvI18nModule],\n exports: [NgvRadioComponent],\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n})\nexport class NgvRadioModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sebgroup-green-angular-src-v-angular-slug.mjs","sources":["../../../../libs/angular/src/v-angular/slug/slug.pipe.ts","../../../../libs/angular/src/v-angular/slug/slug.module.ts","../../../../libs/angular/src/v-angular/slug/sebgroup-green-angular-src-v-angular-slug.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core'
|
|
1
|
+
{"version":3,"file":"sebgroup-green-angular-src-v-angular-slug.mjs","sources":["../../../../libs/angular/src/v-angular/slug/slug.pipe.ts","../../../../libs/angular/src/v-angular/slug/slug.module.ts","../../../../libs/angular/src/v-angular/slug/sebgroup-green-angular-src-v-angular-slug.ts"],"sourcesContent":["import { Pipe, PipeTransform } from '@angular/core'\n\n/** Pipe used to transform text with special characters into a simple kebab-case id. */\n@Pipe({\n name: 'slug',\n})\nexport class SlugPipe implements PipeTransform {\n /**\n * Function for executing the transformation to kebab-case id.\n * @param value the text with special characters which to transform.\n */\n transform(value?: string): unknown {\n if (!value) {\n return value\n }\n return value\n .toLowerCase()\n .replace(/[^\\w ]+/g, '')\n .replace(/ +/g, '-')\n }\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { SlugPipe } from './slug.pipe'\n\n@NgModule({\n declarations: [SlugPipe],\n imports: [CommonModule],\n exports: [SlugPipe],\n})\nexport class NggSlugPipeModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAEA;MAIa,QAAQ,CAAA;AACnB;;;AAGG;AACH,IAAA,SAAS,CAAC,KAAc,EAAA;QACtB,IAAI,CAAC,KAAK,EAAE;AACV,YAAA,OAAO,KAAK,CAAA;AACb,SAAA;AACD,QAAA,OAAO,KAAK;AACT,aAAA,WAAW,EAAE;AACb,aAAA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AACvB,aAAA,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;KACvB;+GAbU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;6GAAR,QAAQ,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBAHpB,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,MAAM;AACb,iBAAA,CAAA;;;MCKY,iBAAiB,CAAA;+GAAjB,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,EAJb,YAAA,EAAA,CAAA,QAAQ,CACb,EAAA,OAAA,EAAA,CAAA,YAAY,aACZ,QAAQ,CAAA,EAAA,CAAA,CAAA,EAAA;AAEP,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAHlB,YAAY,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAGX,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,QAAQ,CAAC;oBACxB,OAAO,EAAE,CAAC,YAAY,CAAC;oBACvB,OAAO,EAAE,CAAC,QAAQ,CAAC;AACpB,iBAAA,CAAA;;;ACTD;;AAEG;;;;"}
|
|
@@ -6,6 +6,8 @@ import { TRANSLOCO_SCOPE } from '@ngneat/transloco';
|
|
|
6
6
|
import { NgvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor';
|
|
7
7
|
import * as i2 from '@angular/common';
|
|
8
8
|
import { CommonModule } from '@angular/common';
|
|
9
|
+
import * as i4 from '@sebgroup/green-angular/src/v-angular/character-countdown';
|
|
10
|
+
import { NggCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown';
|
|
9
11
|
import { NgvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n';
|
|
10
12
|
|
|
11
13
|
/** Textarea fields allow users to add and edit longer or multiple line text. */
|
|
@@ -67,7 +69,7 @@ class NgvTextareaComponent extends NgvBaseControlValueAccessorComponent {
|
|
|
67
69
|
this.onChange(this.state);
|
|
68
70
|
}
|
|
69
71
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: TRANSLOCO_SCOPE, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
70
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgvTextareaComponent, selector: "nggv-textarea", inputs: { thook: "thook", placeholder: "placeholder", readonly: "readonly", minLength: "minLength", minlength: "minlength", maxLength: "maxLength", maxlength: "maxlength", rows: "rows" }, host: { properties: { "attr.data-thook": "this.thook" } }, usesInheritance: true, ngImport: i0, template: "<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"sdv-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"sdv-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"sdv-field-label--small description\">{{ description }}</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"sdv-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div class=\"error-wrapper\" *transloco=\"let t; read: scope\">\n <label\n class=\"sdv-field-notice sdv-field-notice--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span *ngIf=\"error; else errorsRef\">{{ error }}</span>\n <ng-template #errorsRef>\n <span *ngIf=\"firstError as error\">\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </label>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <label\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"sdv-field-notice\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </label>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host textarea{padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color);align-items:center;background-color:var(--sg-form-control-bg);color:var(--text-primary-color);display:flex;justify-content:center;resize:vertical}:host textarea:focus:not(:focus-visible){box-shadow:none;outline:0}:host textarea:focus,:host textarea:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media screen and (-ms-high-contrast: active){:host textarea{border:2px solid currentcolor}}:host textarea:hover{background-color:var(--gds-ref-pallet-base100)}:host textarea:disabled,:host textarea.disabled,:host textarea[aria-disabled=true]{background:var(--sg-form-control-bg-disabled)!important;color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host textarea:disabled::placeholder,:host textarea.disabled::placeholder,:host textarea[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}:host label:not(.sdv-field-notice){margin-bottom:.5rem}:host label:not(.sdv-field-notice):is(label){margin-bottom:0}:host label:not(.sdv-field-notice).form-control{width:-moz-fit-content;width:fit-content}@supports (-moz-appearance: none){:host label:not(.sdv-field-notice).form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host label:not(.sdv-field-notice).form-control:focus,:host label:not(.sdv-field-notice).form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host label:not(.sdv-field-notice):not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host label:not(.sdv-field-notice)+input,:host label:not(.sdv-field-notice)+textarea,fieldset :host label:not(.sdv-field-notice)+div,:host label:not(.sdv-field-notice)+button,:host label:not(.sdv-field-notice)+.group-stepper,:host label:not(.sdv-field-notice)+.stepper-wrapper,:host label:not(.sdv-field-notice)+.group{margin-top:.5rem}:host label:not(.sdv-field-notice)+.form-info{margin-bottom:.5rem}:host label:is(.sdv-field-label){margin-bottom:.5rem}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .sdv-field-label--optional{font-weight:400}:host textarea{width:100%;max-width:100%}:host .description{margin-bottom:.5rem}:host .error-wrapper{margin-top:.5rem}:host .no-resize{resize:none}:host .no-resize::-webkit-scrollbar{-webkit-appearance:none}:host .no-resize::-webkit-scrollbar-thumb{border-radius:.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }] }); }
|
|
72
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NgvTextareaComponent, selector: "nggv-textarea", inputs: { thook: "thook", placeholder: "placeholder", readonly: "readonly", minLength: "minLength", minlength: "minlength", maxLength: "maxLength", maxlength: "maxlength", rows: "rows" }, host: { properties: { "attr.data-thook": "this.thook" } }, usesInheritance: true, ngImport: i0, template: "<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"sdv-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"sdv-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"sdv-field-label--small description\">{{ description }}</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"sdv-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div class=\"error-wrapper\" *transloco=\"let t; read: scope\">\n <label\n class=\"sdv-field-notice sdv-field-notice--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span *ngIf=\"error; else errorsRef\">{{ error }}</span>\n <ng-template #errorsRef>\n <span *ngIf=\"firstError as error\">\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </label>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <label\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"sdv-field-notice\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </label>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n", styles: [":host textarea{padding:.75rem 1rem;border-radius:var(--sg-border-radius);border:solid var(--sg-border-width) var(--sg-border-color);--border-color: var(--sg-border-color);align-items:center;background-color:var(--sg-form-control-bg);color:var(--text-primary-color);display:flex;justify-content:center;resize:vertical}:host textarea:focus:not(:focus-visible){box-shadow:none;outline:0}:host textarea:focus,:host textarea:focus-visible{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}@media screen and (-ms-high-contrast: active){:host textarea{border:2px solid currentcolor}}:host textarea:hover{background-color:var(--gds-ref-pallet-base100)}:host textarea:disabled,:host textarea.disabled,:host textarea[aria-disabled=true]{background:var(--sg-form-control-bg-disabled)!important;color:var(--text-disabled-color)!important;border-color:var(--border-disabled-color)!important;cursor:not-allowed}:host textarea:disabled::placeholder,:host textarea.disabled::placeholder,:host textarea[aria-disabled=true]::placeholder{color:var(--text-disabled-color)}:host label:not(.sdv-field-notice){margin-bottom:.5rem}:host label:not(.sdv-field-notice):is(label){margin-bottom:0}:host label:not(.sdv-field-notice).form-control{width:-moz-fit-content;width:fit-content}@supports (-moz-appearance: none){:host label:not(.sdv-field-notice).form-control:focus:not(:focus-visible){box-shadow:none;outline:0}:host label:not(.sdv-field-notice).form-control:focus,:host label:not(.sdv-field-notice).form-control:focus-within{outline-color:var(--gds-sys-color-focus-outline);outline-style:solid;outline-width:.125rem;outline-offset:.125rem}}:host label:not(.sdv-field-notice):not(.form-control){font-weight:500;width:100%;line-height:1.25rem}:host label:not(.sdv-field-notice)+input,:host label:not(.sdv-field-notice)+textarea,fieldset :host label:not(.sdv-field-notice)+div,:host label:not(.sdv-field-notice)+button,:host label:not(.sdv-field-notice)+.group-stepper,:host label:not(.sdv-field-notice)+.stepper-wrapper,:host label:not(.sdv-field-notice)+.group{margin-top:.5rem}:host label:not(.sdv-field-notice)+.form-info{margin-bottom:.5rem}:host label:is(.sdv-field-label){margin-bottom:.5rem}:host .hide-if-empty:empty{display:none}:host .unset-state{padding-left:.5rem}:host .sdv-field-label--optional{font-weight:400}:host textarea{width:100%;max-width:100%}:host .description{margin-bottom:.5rem}:host .error-wrapper{margin-top:.5rem}:host .no-resize{resize:none}:host .no-resize::-webkit-scrollbar{-webkit-appearance:none}:host .no-resize::-webkit-scrollbar-thumb{border-radius:.5rem}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: i4.CharacterCountdownDirective, selector: "[nggvCharacterCountdown]", inputs: ["nggvCharacterCountdown", "nggvCharacterCountdownCurrentLength"] }] }); }
|
|
71
73
|
}
|
|
72
74
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaComponent, decorators: [{
|
|
73
75
|
type: Component,
|
|
@@ -104,14 +106,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
104
106
|
|
|
105
107
|
class NgvTextareaModule {
|
|
106
108
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
107
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaModule, declarations: [NgvTextareaComponent], imports: [CommonModule, NgvI18nModule], exports: [NgvTextareaComponent] }); }
|
|
108
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaModule, imports: [CommonModule, NgvI18nModule] }); }
|
|
109
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaModule, declarations: [NgvTextareaComponent], imports: [CommonModule, NgvI18nModule, NggCharacterCountdownDirectiveModule], exports: [NgvTextareaComponent] }); }
|
|
110
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaModule, imports: [CommonModule, NgvI18nModule, NggCharacterCountdownDirectiveModule] }); }
|
|
109
111
|
}
|
|
110
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgvTextareaModule, decorators: [{
|
|
111
113
|
type: NgModule,
|
|
112
114
|
args: [{
|
|
113
115
|
declarations: [NgvTextareaComponent],
|
|
114
|
-
imports: [CommonModule, NgvI18nModule],
|
|
116
|
+
imports: [CommonModule, NgvI18nModule, NggCharacterCountdownDirectiveModule],
|
|
115
117
|
exports: [NgvTextareaComponent],
|
|
116
118
|
}]
|
|
117
119
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sebgroup-green-angular-src-v-angular-textarea.mjs","sources":["../../../../libs/angular/src/v-angular/textarea/textarea.component.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.html","../../../../libs/angular/src/v-angular/textarea/textarea.module.ts","../../../../libs/angular/src/v-angular/textarea/sebgroup-green-angular-src-v-angular-textarea.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\n\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@ngneat/transloco'\n\nimport { NgvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** Textarea fields allow users to add and edit longer or multiple line text. */\n@Component({\n selector: 'nggv-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n})\nexport class NgvTextareaComponent extends NgvBaseControlValueAccessorComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook = 'textarea'\n /** Text shown before input has a written value. */\n @Input() placeholder?: string\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /** Minimum length (number of characters) of value. */\n @Input() set minLength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n get minlength(): number {\n return this._minlength\n }\n\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Sets the height of the textarea and disables resize. A scrollbar will appear if necessary. */\n @Input() rows?: number\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLTextAreaElement).value\n this.onChange(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"sdv-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"sdv-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"sdv-field-label--small description\">{{ description }}</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"sdv-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div class=\"error-wrapper\" *transloco=\"let t; read: scope\">\n <label\n class=\"sdv-field-notice sdv-field-notice--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span *ngIf=\"error; else errorsRef\">{{ error }}</span>\n <ng-template #errorsRef>\n <span *ngIf=\"firstError as error\">\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </label>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <label\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"sdv-field-notice\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </label>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import { NgModule } from '@angular/core'\nimport { CommonModule } from '@angular/common'\n\nimport { NgvTextareaComponent } from './textarea.component'\nimport { NgvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\n\n@NgModule({\n declarations: [NgvTextareaComponent],\n imports: [CommonModule, NgvI18nModule],\n exports: [NgvTextareaComponent],\n})\nexport class NgvTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sebgroup-green-angular-src-v-angular-textarea.mjs","sources":["../../../../libs/angular/src/v-angular/textarea/textarea.component.ts","../../../../libs/angular/src/v-angular/textarea/textarea.component.html","../../../../libs/angular/src/v-angular/textarea/textarea.module.ts","../../../../libs/angular/src/v-angular/textarea/sebgroup-green-angular-src-v-angular-textarea.ts"],"sourcesContent":["import {\n ChangeDetectorRef,\n Component,\n HostBinding,\n Inject,\n Input,\n Optional,\n Self,\n} from '@angular/core'\nimport { NgControl } from '@angular/forms'\nimport { TRANSLOCO_SCOPE, TranslocoScope } from '@ngneat/transloco'\n\nimport { NgvBaseControlValueAccessorComponent } from '@sebgroup/green-angular/src/v-angular/base-control-value-accessor'\n\n/** Textarea fields allow users to add and edit longer or multiple line text. */\n@Component({\n selector: 'nggv-textarea',\n templateUrl: './textarea.component.html',\n styleUrls: ['./textarea.component.scss'],\n})\nexport class NgvTextareaComponent extends NgvBaseControlValueAccessorComponent {\n /** Special property used for selecting DOM elements during automated UI testing. */\n @HostBinding('attr.data-thook') @Input() thook = 'textarea'\n /** Text shown before input has a written value. */\n @Input() placeholder?: string\n /** If set to true, the value will not be editable. */\n @Input() readonly = false\n /** Minimum length (number of characters) of value. */\n @Input() set minLength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n get minlength(): number {\n return this._minlength\n }\n\n /**\n * Minimum length (number of characters) of value.\n * @deprecated minlength triggers angular-template-validation. Use @Input() minLength instead.\n */\n @Input() set minlength(length: number) {\n this._minlength = length\n this.cdr.detectChanges()\n }\n /** Maximum length (number of characters) of value. */\n @Input() set maxLength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n get maxlength(): number {\n return this._maxlength\n }\n /**\n * Maximum length (number of characters) of value.\n * @deprecated maxlength triggers angular-template-validation. Use @Input() maxLength instead.\n */\n @Input() set maxlength(length: number) {\n this._maxlength = length\n this.cdr.detectChanges()\n }\n\n /** Returns if maxlength is used */\n get hasMaxLength(): boolean {\n return !!this.maxlength && this.maxlength !== Number.MAX_SAFE_INTEGER\n }\n\n private _maxlength = Number.MAX_SAFE_INTEGER\n\n private _minlength = 0\n\n /** Sets the height of the textarea and disables resize. A scrollbar will appear if necessary. */\n @Input() rows?: number\n\n constructor(\n @Self() @Optional() public ngControl: NgControl,\n @Optional()\n @Inject(TRANSLOCO_SCOPE)\n protected translocoScope: TranslocoScope,\n protected cdr: ChangeDetectorRef,\n ) {\n super(ngControl, translocoScope, cdr)\n }\n\n /** @internal */\n onInput(event: Event) {\n event.stopPropagation()\n if (this.disabled) return\n this.state = (event.target as HTMLTextAreaElement).value\n this.onChange(this.state)\n }\n}\n","<!-- LABEL -->\n<label\n [id]=\"id + '-label'\"\n class=\"sdv-field-label hide-if-empty\"\n [attr.for]=\"id + '-textarea'\"\n *transloco=\"let t; read: scope\"\n>\n <ng-template\n *ngTemplateOutlet=\"labelContentTpl || basicLabelContentTpl\"\n ></ng-template>\n <ng-template #basicLabelContentTpl>\n <!-- to trigger css:empty if no label was added -->\n <ng-container *ngIf=\"label\">\n {{ label }}\n <span\n *ngIf=\"optional === true || (required !== true && optional !== false)\"\n class=\"sdv-field-label--optional\"\n >\n ({{ t('label.optional') }})\n </span>\n </ng-container>\n </ng-template>\n</label>\n\n<!-- DESCRIPTION -->\n<div class=\"sdv-field-label--small description\">{{ description }}</div>\n\n<!-- LOCKED INPUT -->\n<ng-container *ngIf=\"locked\">\n <div\n [id]=\"id + '-textarea'\"\n class=\"nggv-field--locked\"\n [attr.name]=\"name\"\n [attr.value]=\"state\"\n [attr.role]=\"role\"\n >\n <span *ngIf=\"!state\" class=\"unset-state\">-</span>\n <ng-container *ngIf=\"state\">\n {{ state }}\n </ng-container>\n </div>\n</ng-container>\n\n<!-- INPUT FIELD -->\n<ng-container *ngIf=\"!locked\">\n <textarea\n #input\n [id]=\"id + '-textarea'\"\n class=\"sdv-field\"\n [ngClass]=\"{ 'no-resize': !!rows }\"\n [class.nggv-field--error]=\"invalid\"\n [attr.name]=\"name\"\n [attr.required]=\"required\"\n [disabled]=\"disabled\"\n [autofocus]=\"autofocus\"\n [readOnly]=\"readonly\"\n [attr.maxlength]=\"maxlength\"\n [attr.minlength]=\"minlength\"\n [attr.role]=\"role\"\n [attr.rows]=\"rows\"\n [attr.placeholder]=\"placeholder\"\n [attr.aria-label]=\"description\"\n [value]=\"state\"\n (input)=\"onInput($event)\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n ></textarea>\n\n <!-- ERRORS -->\n <div class=\"error-wrapper\" *transloco=\"let t; read: scope\">\n <label\n class=\"sdv-field-notice sdv-field-notice--error\"\n [attr.for]=\"id + '-textarea'\"\n *ngIf=\"invalid && (error || ngControl?.invalid)\"\n >\n <span *ngIf=\"error; else errorsRef\">{{ error }}</span>\n <ng-template #errorsRef>\n <span *ngIf=\"firstError as error\">\n {{ t('error.field' + error?.code, error?.params) }}\n </span>\n </ng-template>\n </label>\n\n <ng-container *ngIf=\"hasMaxLength\">\n <label\n *nggvCharacterCountdown=\"\n maxlength;\n currentLength: (inputRef?.nativeElement?.value ?? '').length;\n charactersLeft as charactersLeft\n \"\n class=\"sdv-field-notice\"\n style=\"text-align: right\"\n >\n {{ charactersLeft }} {{ t('label.maxlength') }}\n </label>\n </ng-container>\n </div>\n\n <!-- CHILDREN -->\n <ng-content></ng-content>\n</ng-container>\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { NgvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NggCharacterCountdownDirectiveModule } from '@sebgroup/green-angular/src/v-angular/character-countdown';\nimport { NgvTextareaComponent } from './textarea.component'\n\n@NgModule({\n declarations: [NgvTextareaComponent],\n imports: [CommonModule, NgvI18nModule, NggCharacterCountdownDirectiveModule],\n exports: [NgvTextareaComponent],\n})\nexport class NgvTextareaModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sebgroup-green-angular-src-v-angular-tooltip.mjs","sources":["../../../../libs/angular/src/v-angular/tooltip/tooltip.directive.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.module.ts","../../../../libs/angular/src/v-angular/tooltip/sebgroup-green-angular-src-v-angular-tooltip.ts"],"sourcesContent":["import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChange,\n SimpleChanges,\n} from '@angular/core'\n\nexport type Placement = 'top' | 'right' | 'bottom' | 'left'\n\ntype Position = {\n top?: number\n right?: number\n bottom?: number\n left?: number\n}\n\n/**\n * A tooltip is a text label that acts as a helper to a specific item.\n * Recommended to use value `top` or `bottom` with `placement` for responsive design.\n * Dynamic resizing and tooltip position are a work in progress.\n * https://designlibrary.sebgroup.com/components/component-tooltip\n */\n@Directive({\n selector: '[nggvTooltip]',\n})\nexport class NgvTooltipDirective\n implements AfterViewInit, OnChanges, OnDestroy\n{\n /** The text that will be shown in the tooltip. */\n @Input() nggvTooltip?: string\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'tooltip'\n /** The side of the anchor which the tooltip will be rendered.\n * Recommended `top` and `bottom` for responsive designs as these are more stable.\n */\n @Input() placement: Placement = 'top'\n /** Initial state and subsequent updates on wether the tooltip is visible. */\n @Input() shown = false\n /** How far off from the text the tooltip will be rendered. */\n @Input() offset = 10\n /** How frequently the tooltip will be re-rendered when the page size changes. */\n @Input() resizeThrottle = 50\n /** Numeric max-width for tooltip. */\n @Input() maxWidth = 343\n\n /** Emits a show event triggered changing visibility state of the tooltip. */\n @Output() nggvShow = new EventEmitter<HTMLElement>()\n /** Emits a hide event triggered changing visibility state of the tooltip. */\n @Output() nggvHide = new EventEmitter<HTMLElement>()\n\n /** @internal */\n protected timeout = 0\n\n /** @internal */\n protected parentElement: HTMLElement\n\n /** @internal */\n protected anchorElement: HTMLElement\n\n /** @internal */\n protected tooltipElement: HTMLElement | undefined\n\n /** @internal */\n protected arrowElement: HTMLElement | undefined\n\n /** @internal Check if changes should trigger a re-render */\n static shouldUpdate(change: SimpleChange) {\n return (\n change &&\n !change.firstChange &&\n change.previousValue !== change.currentValue\n )\n }\n\n constructor(\n private anchorElementRef: ElementRef,\n private renderer: Renderer2,\n ) {\n this.anchorElement = this.anchorElementRef.nativeElement\n this.parentElement = document.body\n }\n\n ngAfterViewInit() {\n // Set a timeout to allow view to fully render before creating tooltip.\n setTimeout(() => (this.shown ? this.show(true) : this.hide(true)))\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n NgvTooltipDirective.shouldUpdate(changes.nggvTooltip) ||\n NgvTooltipDirective.shouldUpdate(changes.placement) ||\n NgvTooltipDirective.shouldUpdate(changes.thook)\n ) {\n this.shown ? this.show(true) : this.hide(true)\n }\n\n if (NgvTooltipDirective.shouldUpdate(changes.shown)) {\n this.shown ? this.show() : this.hide()\n }\n\n if (NgvTooltipDirective.shouldUpdate(changes.offset)) {\n this.updatePosition()\n }\n }\n\n ngOnDestroy() {\n this.hide(true)\n }\n\n /** @internal */\n @HostListener('mouseenter')\n onMouseEnter() {\n this.show()\n }\n\n /** @internal */\n @HostListener('mouseleave')\n onMouseLeave() {\n this.hide()\n }\n\n /** @internal */\n @HostListener('window:resize')\n resize() {\n if (this.timeout) return\n this.timeout = window.setTimeout(() => {\n this.timeout = 0\n this.updatePosition()\n }, this.resizeThrottle)\n }\n\n /**\n * Sets the visibility state of the tooltip to true and creates a new tooltip if it doesn't exist or `recreate` is set.\n * @param recreate if set to true, destroy any existing tooltip and create a new one.\n */\n show(recreate = false) {\n // Require tooltip text to create\n if (!this.nggvTooltip || this.nggvTooltip.length === 0) return\n\n if (recreate || !this.tooltipElement) {\n this.hide(true)\n this.create(this.nggvTooltip)\n } else {\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n }\n\n this.updatePosition()\n this.shown = true\n this.nggvShow.emit(this.tooltipElement)\n }\n\n /**\n * Sets the visibility state of the tooltip to false and destroys an existing tooltip if `destroy` is set.\n * @param destroy if set to true, destroy any existing tooltip.\n */\n hide(destroy = false) {\n if (!this.tooltipElement) return\n if (this.parentElement.contains(this.tooltipElement))\n this.renderer.removeChild(this.parentElement, this.tooltipElement)\n if (destroy) this.destroy()\n this.shown = false\n this.nggvHide.emit(this.tooltipElement)\n }\n\n /**\n * @internal\n * Creates a new tooltip with the set placement and a given text as its body.\n * @param text the string to be displayed in the tooltip body.\n */\n create(text: string) {\n this.tooltipElement = this.renderer.createElement('div')\n this.renderer.addClass(this.tooltipElement, 'gds-tooltip')\n this.renderer.setAttribute(this.tooltipElement, 'data-thook', this.thook)\n this.renderer.setStyle(this.tooltipElement, 'position', 'absolute')\n this.renderer.setStyle(this.tooltipElement, 'z-index', '1040')\n this.renderer.setStyle(this.tooltipElement, 'border-radius', '.25rem')\n this.renderer.setStyle(this.tooltipElement, 'padding', '.5rem 1rem')\n const relativeMaxWidth = this.pxToRem(this.maxWidth)\n this.renderer.setStyle(this.tooltipElement, 'max-width', relativeMaxWidth)\n this.renderer.appendChild(\n this.tooltipElement,\n this.renderer.createText(text),\n )\n\n // add tooltip to DOM\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n\n this.arrowElement = this.renderer.createElement('div')\n this.renderer.addClass(\n this.arrowElement,\n `gds-tooltip__arrow-${this.placement}`,\n )\n\n // add arrow to tooltip element\n this.renderer.appendChild(this.tooltipElement, this.arrowElement)\n }\n\n /**\n * @internal\n * Destroys the current tooltip by un-setting variables, should only be used after detaching elements from the DOM.\n */\n destroy() {\n this.tooltipElement = undefined\n this.arrowElement = undefined\n }\n\n /**\n * @internal\n * Recalculates the position of the tooltip.\n */\n updatePosition() {\n if (!this.tooltipElement || !this.arrowElement) return\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n this.parentElement.scrollTop ||\n 0\n const anchorRect = this.anchorElement.getBoundingClientRect()\n const tooltipRect = this.tooltipElement.getBoundingClientRect()\n const arrowRect = this.arrowElement.getBoundingClientRect()\n\n switch (this.placement) {\n case 'top':\n this.alignVertical(\n true,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'bottom':\n this.alignVertical(\n false,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'left':\n this.alignHorizontal(true, scrollPos, anchorRect, tooltipRect.height)\n break\n\n case 'right':\n this.alignHorizontal(false, scrollPos, anchorRect, tooltipRect.height)\n break\n\n default:\n return\n }\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `top` or `bottom`.\n */\n alignVertical(\n above: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipWidth: number,\n tooltipHeight: number,\n arrowWidth: number,\n ) {\n const width = this.parentElement.clientWidth\n const anchorMidX = anchor.left + anchor.width / 2\n const tooltip: Position = {}\n const arrow: Position = {}\n\n if (above)\n tooltip.top = anchor.top - tooltipHeight - this.offset + scrollPos\n else tooltip.top = anchor.bottom + this.offset + scrollPos\n\n if (anchorMidX < width / 2) {\n tooltip.left = Math.max(0, anchorMidX - tooltipWidth / 2)\n arrow.left = anchorMidX - tooltip.left\n } else {\n tooltip.right = Math.max(0, width - (anchorMidX + tooltipWidth / 2))\n arrow.right = width - anchorMidX - tooltip.right - arrowWidth\n }\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `left` or `right`.\n */\n alignHorizontal(\n before: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipHeight: number,\n ) {\n const width = this.parentElement.clientWidth\n const top = anchor.top + (anchor.height - tooltipHeight) / 2 + scrollPos\n const tooltip: Position = { top }\n const arrow: Position = { top: tooltipHeight / 2 }\n\n if (before) tooltip.right = width - anchor.left + this.offset\n else tooltip.left = anchor.right + this.offset\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Updates the CSS properties for the tooltip position.\n */\n setStyle(tooltip: Position, arrow: Position) {\n // Tooltip\n Object.entries(tooltip).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.tooltipElement, prop, position)\n })\n\n // Arrow\n Object.entries(arrow).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.arrowElement, prop, position)\n })\n }\n\n private pxToRem(value: number): string {\n const fontSizePx = window\n ?.getComputedStyle(this.parentElement)\n ?.getPropertyValue('font-size')\n const fontSizeNumberMatch = fontSizePx?.match(/\\d{1,}/)\n const fontSize = fontSizeNumberMatch ? +fontSizeNumberMatch[0] : 16\n const remValue = value / fontSize\n return `${remValue}rem`\n }\n}\n","import { NgModule } from '@angular/core'\nimport { NgvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NgvTooltipDirective } from './tooltip.directive'\n\n@NgModule({\n declarations: [NgvTooltipDirective],\n exports: [NgvTooltipDirective],\n imports: [NgvI18nModule],\n})\nexport class NgvTooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;AAwBA;;;;;AAKG;MAIU,mBAAmB,CAAA;;IAyC9B,OAAO,YAAY,CAAC,MAAoB,EAAA;AACtC,QAAA,QACE,MAAM;YACN,CAAC,MAAM,CAAC,WAAW;AACnB,YAAA,MAAM,CAAC,aAAa,KAAK,MAAM,CAAC,YAAY,EAC7C;KACF;IAED,WACU,CAAA,gBAA4B,EAC5B,QAAmB,EAAA;QADnB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAY;QAC5B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAW;;QA7CpB,IAAK,CAAA,KAAA,GAAG,SAAS,CAAA;AAC1B;;AAEG;QACM,IAAS,CAAA,SAAA,GAAc,KAAK,CAAA;;QAE5B,IAAK,CAAA,KAAA,GAAG,KAAK,CAAA;;QAEb,IAAM,CAAA,MAAA,GAAG,EAAE,CAAA;;QAEX,IAAc,CAAA,cAAA,GAAG,EAAE,CAAA;;QAEnB,IAAQ,CAAA,QAAA,GAAG,GAAG,CAAA;;AAGb,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAe,CAAA;;AAE1C,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,YAAY,EAAe,CAAA;;QAG1C,IAAO,CAAA,OAAA,GAAG,CAAC,CAAA;QA2BnB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAA;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAA;KACnC;IAED,eAAe,GAAA;;AAEb,QAAA,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;KACnE;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IACE,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC;AACrD,YAAA,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;AACnD,YAAA,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAC/C;YACA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC/C,SAAA;QAED,IAAI,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACnD,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;AACvC,SAAA;QAED,IAAI,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACpD,IAAI,CAAC,cAAc,EAAE,CAAA;AACtB,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;KAChB;;IAID,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,EAAE,CAAA;KACZ;;IAID,YAAY,GAAA;QACV,IAAI,CAAC,IAAI,EAAE,CAAA;KACZ;;IAID,MAAM,GAAA;QACJ,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QACxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;AACpC,YAAA,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;YAChB,IAAI,CAAC,cAAc,EAAE,CAAA;AACvB,SAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;KACxB;AAED;;;AAGG;IACH,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAA;;QAEnB,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAM;AAE9D,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACpC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AAC9B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;AACnE,SAAA;QAED,IAAI,CAAC,cAAc,EAAE,CAAA;AACrB,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;KACxC;AAED;;;AAGG;IACH,IAAI,CAAC,OAAO,GAAG,KAAK,EAAA;QAClB,IAAI,CAAC,IAAI,CAAC,cAAc;YAAE,OAAM;QAChC,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC;AAClD,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;AACpE,QAAA,IAAI,OAAO;YAAE,IAAI,CAAC,OAAO,EAAE,CAAA;AAC3B,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;KACxC;AAED;;;;AAIG;AACH,IAAA,MAAM,CAAC,IAAY,EAAA;QACjB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACxD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;AACzE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;AAC9D,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAA;AACtE,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,YAAY,CAAC,CAAA;QACpE,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AACpD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAA;AAC1E,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CACvB,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAC/B,CAAA;;AAGD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAElE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;AACtD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,IAAI,CAAC,YAAY,EACjB,sBAAsB,IAAI,CAAC,SAAS,CAAA,CAAE,CACvC,CAAA;;AAGD,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;KAClE;AAED;;;AAGG;IACH,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS,CAAA;AAC/B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS,CAAA;KAC9B;AAED;;;AAGG;IACH,cAAc,GAAA;QACZ,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAM;AACtD,QAAA,MAAM,SAAS,GACb,MAAM,CAAC,WAAW;YAClB,QAAQ,CAAC,eAAe,CAAC,SAAS;YAClC,IAAI,CAAC,aAAa,CAAC,SAAS;AAC5B,YAAA,CAAC,CAAA;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAA;QAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAA;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,CAAA;QAE3D,QAAQ,IAAI,CAAC,SAAS;AACpB,YAAA,KAAK,KAAK;gBACR,IAAI,CAAC,aAAa,CAChB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,MAAM,EAClB,SAAS,CAAC,KAAK,CAChB,CAAA;gBACD,MAAK;AAEP,YAAA,KAAK,QAAQ;gBACX,IAAI,CAAC,aAAa,CAChB,KAAK,EACL,SAAS,EACT,UAAU,EACV,WAAW,CAAC,KAAK,EACjB,WAAW,CAAC,MAAM,EAClB,SAAS,CAAC,KAAK,CAChB,CAAA;gBACD,MAAK;AAEP,YAAA,KAAK,MAAM;AACT,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;gBACrE,MAAK;AAEP,YAAA,KAAK,OAAO;AACV,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;gBACtE,MAAK;AAEP,YAAA;gBACE,OAAM;AACT,SAAA;KACF;AAED;;;AAGG;IACH,aAAa,CACX,KAAc,EACd,SAAiB,EACjB,MAAe,EACf,YAAoB,EACpB,aAAqB,EACrB,UAAkB,EAAA;AAElB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAA;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAA;QACjD,MAAM,OAAO,GAAa,EAAE,CAAA;QAC5B,MAAM,KAAK,GAAa,EAAE,CAAA;AAE1B,QAAA,IAAI,KAAK;AACP,YAAA,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,aAAa,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;;AAC/D,YAAA,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;AAE1D,QAAA,IAAI,UAAU,GAAG,KAAK,GAAG,CAAC,EAAE;AAC1B,YAAA,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC,CAAA;YACzD,KAAK,CAAC,IAAI,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAA;AACvC,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAA;AACpE,YAAA,KAAK,CAAC,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC,KAAK,GAAG,UAAU,CAAA;AAC9D,SAAA;AAED,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;KAC9B;AAED;;;AAGG;AACH,IAAA,eAAe,CACb,MAAe,EACf,SAAiB,EACjB,MAAe,EACf,aAAqB,EAAA;AAErB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAA;AAC5C,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,aAAa,IAAI,CAAC,GAAG,SAAS,CAAA;AACxE,QAAA,MAAM,OAAO,GAAa,EAAE,GAAG,EAAE,CAAA;QACjC,MAAM,KAAK,GAAa,EAAE,GAAG,EAAE,aAAa,GAAG,CAAC,EAAE,CAAA;AAElD,QAAA,IAAI,MAAM;AAAE,YAAA,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;;YACxD,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAA;AAE9C,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;KAC9B;AAED;;;AAGG;IACH,QAAQ,CAAC,OAAiB,EAAE,KAAe,EAAA;;AAEzC,QAAA,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAI;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC7D,SAAC,CAAC,CAAA;;AAGF,QAAA,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,KAAI;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AACpC,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;AAC3D,SAAC,CAAC,CAAA;KACH;AAEO,IAAA,OAAO,CAAC,KAAa,EAAA;QAC3B,MAAM,UAAU,GAAG,MAAM;AACvB,cAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC;AACtC,cAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACjC,MAAM,mBAAmB,GAAG,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;AACvD,QAAA,MAAM,QAAQ,GAAG,mBAAmB,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAA;AACnE,QAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAA;QACjC,OAAO,CAAA,EAAG,QAAQ,CAAA,GAAA,CAAK,CAAA;KACxB;+GAvTU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAnB,mBAAmB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,eAAe;AAC1B,iBAAA,CAAA;yHAKU,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAIG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBAGI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEG,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBA+DP,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;gBAO1B,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;gBAO1B,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,eAAe,CAAA;;;MCzHlB,gBAAgB,CAAA;+GAAhB,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,EAJZ,YAAA,EAAA,CAAA,mBAAmB,CAExB,EAAA,OAAA,EAAA,CAAA,aAAa,aADb,mBAAmB,CAAA,EAAA,CAAA,CAAA,EAAA;AAGlB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,YAFjB,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAEZ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAL5B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,mBAAmB,CAAC;oBACnC,OAAO,EAAE,CAAC,mBAAmB,CAAC;oBAC9B,OAAO,EAAE,CAAC,aAAa,CAAC;AACzB,iBAAA,CAAA;;;ACRD;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"sebgroup-green-angular-src-v-angular-tooltip.mjs","sources":["../../../../libs/angular/src/v-angular/tooltip/tooltip.directive.ts","../../../../libs/angular/src/v-angular/tooltip/tooltip.module.ts","../../../../libs/angular/src/v-angular/tooltip/sebgroup-green-angular-src-v-angular-tooltip.ts"],"sourcesContent":["import {\n AfterViewInit,\n Directive,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n Renderer2,\n SimpleChange,\n SimpleChanges,\n} from '@angular/core'\n\nexport type Placement = 'top' | 'right' | 'bottom' | 'left'\n\ntype Position = {\n top?: number\n right?: number\n bottom?: number\n left?: number\n}\n\n/**\n * A tooltip is a text label that acts as a helper to a specific item.\n * Recommended to use value `top` or `bottom` with `placement` for responsive design.\n * Dynamic resizing and tooltip position are a work in progress.\n * https://designlibrary.sebgroup.com/components/component-tooltip\n */\n@Directive({\n selector: '[nggvTooltip]',\n})\nexport class NgvTooltipDirective\n implements AfterViewInit, OnChanges, OnDestroy\n{\n /** The text that will be shown in the tooltip. */\n @Input() nggvTooltip?: string\n /** Special property used for selecting DOM elements during automated UI testing. */\n @Input() thook = 'tooltip'\n /** The side of the anchor which the tooltip will be rendered.\n * Recommended `top` and `bottom` for responsive designs as these are more stable.\n */\n @Input() placement: Placement = 'top'\n /** Initial state and subsequent updates on wether the tooltip is visible. */\n @Input() shown = false\n /** How far off from the text the tooltip will be rendered. */\n @Input() offset = 10\n /** How frequently the tooltip will be re-rendered when the page size changes. */\n @Input() resizeThrottle = 50\n /** Numeric max-width for tooltip. */\n @Input() maxWidth = 343\n\n /** Emits a show event triggered changing visibility state of the tooltip. */\n @Output() nggvShow = new EventEmitter<HTMLElement>()\n /** Emits a hide event triggered changing visibility state of the tooltip. */\n @Output() nggvHide = new EventEmitter<HTMLElement>()\n\n /** @internal */\n protected timeout = 0\n\n /** @internal */\n protected parentElement: HTMLElement\n\n /** @internal */\n protected anchorElement: HTMLElement\n\n /** @internal */\n protected tooltipElement: HTMLElement | undefined\n\n /** @internal */\n protected arrowElement: HTMLElement | undefined\n\n /** @internal Check if changes should trigger a re-render */\n static shouldUpdate(change: SimpleChange) {\n return (\n change &&\n !change.firstChange &&\n change.previousValue !== change.currentValue\n )\n }\n\n constructor(\n private anchorElementRef: ElementRef,\n private renderer: Renderer2,\n ) {\n this.anchorElement = this.anchorElementRef.nativeElement\n this.parentElement = document.body\n }\n\n ngAfterViewInit() {\n // Set a timeout to allow view to fully render before creating tooltip.\n setTimeout(() => (this.shown ? this.show(true) : this.hide(true)))\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (\n NgvTooltipDirective.shouldUpdate(changes.nggvTooltip) ||\n NgvTooltipDirective.shouldUpdate(changes.placement) ||\n NgvTooltipDirective.shouldUpdate(changes.thook)\n ) {\n this.shown ? this.show(true) : this.hide(true)\n }\n\n if (NgvTooltipDirective.shouldUpdate(changes.shown)) {\n this.shown ? this.show() : this.hide()\n }\n\n if (NgvTooltipDirective.shouldUpdate(changes.offset)) {\n this.updatePosition()\n }\n }\n\n ngOnDestroy() {\n this.hide(true)\n }\n\n /** @internal */\n @HostListener('mouseenter')\n onMouseEnter() {\n this.show()\n }\n\n /** @internal */\n @HostListener('mouseleave')\n onMouseLeave() {\n this.hide()\n }\n\n /** @internal */\n @HostListener('window:resize')\n resize() {\n if (this.timeout) return\n this.timeout = window.setTimeout(() => {\n this.timeout = 0\n this.updatePosition()\n }, this.resizeThrottle)\n }\n\n /**\n * Sets the visibility state of the tooltip to true and creates a new tooltip if it doesn't exist or `recreate` is set.\n * @param recreate if set to true, destroy any existing tooltip and create a new one.\n */\n show(recreate = false) {\n // Require tooltip text to create\n if (!this.nggvTooltip || this.nggvTooltip.length === 0) return\n\n if (recreate || !this.tooltipElement) {\n this.hide(true)\n this.create(this.nggvTooltip)\n } else {\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n }\n\n this.updatePosition()\n this.shown = true\n this.nggvShow.emit(this.tooltipElement)\n }\n\n /**\n * Sets the visibility state of the tooltip to false and destroys an existing tooltip if `destroy` is set.\n * @param destroy if set to true, destroy any existing tooltip.\n */\n hide(destroy = false) {\n if (!this.tooltipElement) return\n if (this.parentElement.contains(this.tooltipElement))\n this.renderer.removeChild(this.parentElement, this.tooltipElement)\n if (destroy) this.destroy()\n this.shown = false\n this.nggvHide.emit(this.tooltipElement)\n }\n\n /**\n * @internal\n * Creates a new tooltip with the set placement and a given text as its body.\n * @param text the string to be displayed in the tooltip body.\n */\n create(text: string) {\n this.tooltipElement = this.renderer.createElement('div')\n this.renderer.addClass(this.tooltipElement, 'gds-tooltip')\n this.renderer.setAttribute(this.tooltipElement, 'data-thook', this.thook)\n this.renderer.setStyle(this.tooltipElement, 'position', 'absolute')\n this.renderer.setStyle(this.tooltipElement, 'z-index', '1040')\n this.renderer.setStyle(this.tooltipElement, 'border-radius', '.25rem')\n this.renderer.setStyle(this.tooltipElement, 'padding', '.5rem 1rem')\n const relativeMaxWidth = this.pxToRem(this.maxWidth)\n this.renderer.setStyle(this.tooltipElement, 'max-width', relativeMaxWidth)\n this.renderer.appendChild(\n this.tooltipElement,\n this.renderer.createText(text),\n )\n\n // add tooltip to DOM\n this.renderer.appendChild(this.parentElement, this.tooltipElement)\n\n this.arrowElement = this.renderer.createElement('div')\n this.renderer.addClass(\n this.arrowElement,\n `gds-tooltip__arrow-${this.placement}`,\n )\n\n // add arrow to tooltip element\n this.renderer.appendChild(this.tooltipElement, this.arrowElement)\n }\n\n /**\n * @internal\n * Destroys the current tooltip by un-setting variables, should only be used after detaching elements from the DOM.\n */\n destroy() {\n this.tooltipElement = undefined\n this.arrowElement = undefined\n }\n\n /**\n * @internal\n * Recalculates the position of the tooltip.\n */\n updatePosition() {\n if (!this.tooltipElement || !this.arrowElement) return\n const scrollPos =\n window.pageYOffset ||\n document.documentElement.scrollTop ||\n this.parentElement.scrollTop ||\n 0\n const anchorRect = this.anchorElement.getBoundingClientRect()\n const tooltipRect = this.tooltipElement.getBoundingClientRect()\n const arrowRect = this.arrowElement.getBoundingClientRect()\n\n switch (this.placement) {\n case 'top':\n this.alignVertical(\n true,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'bottom':\n this.alignVertical(\n false,\n scrollPos,\n anchorRect,\n tooltipRect.width,\n tooltipRect.height,\n arrowRect.width,\n )\n break\n\n case 'left':\n this.alignHorizontal(true, scrollPos, anchorRect, tooltipRect.height)\n break\n\n case 'right':\n this.alignHorizontal(false, scrollPos, anchorRect, tooltipRect.height)\n break\n\n default:\n return\n }\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `top` or `bottom`.\n */\n alignVertical(\n above: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipWidth: number,\n tooltipHeight: number,\n arrowWidth: number,\n ) {\n const width = this.parentElement.clientWidth\n const anchorMidX = anchor.left + anchor.width / 2\n const tooltip: Position = {}\n const arrow: Position = {}\n\n if (above)\n tooltip.top = anchor.top - tooltipHeight - this.offset + scrollPos\n else tooltip.top = anchor.bottom + this.offset + scrollPos\n\n if (anchorMidX < width / 2) {\n tooltip.left = Math.max(0, anchorMidX - tooltipWidth / 2)\n arrow.left = anchorMidX - tooltip.left\n } else {\n tooltip.right = Math.max(0, width - (anchorMidX + tooltipWidth / 2))\n arrow.right = width - anchorMidX - tooltip.right - arrowWidth\n }\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Calculates and set the position of the tooltip when the placement is `left` or `right`.\n */\n alignHorizontal(\n before: boolean,\n scrollPos: number,\n anchor: DOMRect,\n tooltipHeight: number,\n ) {\n const width = this.parentElement.clientWidth\n const top = anchor.top + (anchor.height - tooltipHeight) / 2 + scrollPos\n const tooltip: Position = { top }\n const arrow: Position = { top: tooltipHeight / 2 }\n\n if (before) tooltip.right = width - anchor.left + this.offset\n else tooltip.left = anchor.right + this.offset\n\n this.setStyle(tooltip, arrow)\n }\n\n /**\n * @internal\n * Updates the CSS properties for the tooltip position.\n */\n setStyle(tooltip: Position, arrow: Position) {\n // Tooltip\n Object.entries(tooltip).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.tooltipElement, prop, position)\n })\n\n // Arrow\n Object.entries(arrow).forEach(([prop, value]) => {\n const position = this.pxToRem(value)\n this.renderer.setStyle(this.arrowElement, prop, position)\n })\n }\n\n private pxToRem(value: number): string {\n const fontSizePx = window\n ?.getComputedStyle(this.parentElement)\n ?.getPropertyValue('font-size')\n const fontSizeNumberMatch = fontSizePx?.match(/\\d{1,}/)\n const fontSize = fontSizeNumberMatch ? +fontSizeNumberMatch[0] : 16\n const remValue = value / fontSize\n return `${remValue}rem`\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { NgvI18nModule } from '@sebgroup/green-angular/src/v-angular/i18n'\nimport { NgvTooltipDirective } from './tooltip.directive'\n\n@NgModule({\n declarations: [NgvTooltipDirective],\n exports: [NgvTooltipDirective],\n imports: [NgvI18nModule],\n})\nexport class NgvTooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|