@seniorsistemas/angular-components 19.0.9 → 19.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/breadcrumb/lib/breadcrumb/breadcrumb-models.d.ts +2 -0
- package/button/lib/button/button.component.d.ts +8 -2
- package/checkbox/lib/checkbox/checkbox.component.d.ts +5 -1
- package/dialog/lib/src/dialog/dialog.component.d.ts +7 -1
- package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +2 -2
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb-models.mjs +1 -1
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +8 -6
- package/esm2022/button/lib/button/button.component.mjs +20 -8
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +8 -5
- package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +2 -2
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +1 -1
- package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +9 -3
- package/esm2022/dynamic-form/dynamic-form/components/grid/row/row.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/button-field/button-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/select/select-field.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +1 -1
- package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +1 -1
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +1 -1
- package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +1 -1
- package/esm2022/global-search/lib/global-search/global-search.component.mjs +1 -1
- package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +1 -1
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +1 -1
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
- package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +1 -1
- package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +1 -1
- package/esm2022/kanban/lib/kanban/components/kanban-item/kanban-item.component.mjs +1 -1
- package/esm2022/lib/locale/fallback.mjs +13 -2
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +1 -1
- package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +1 -1
- package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +1 -1
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +2 -2
- package/esm2022/picklist/lib/picklist/picklist.component.mjs +1 -1
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +1 -1
- package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +3 -3
- package/esm2022/select/lib/select/select.component.mjs +132 -20
- package/esm2022/shared/lib/accessibility/paginator-accessibility.directive.mjs +182 -0
- package/esm2022/shared/lib/accessibility/table-checkbox-accessibility.directive.mjs +174 -0
- package/esm2022/shared/public-api.mjs +6 -4
- package/esm2022/switch/lib/switch/switch.component.mjs +19 -8
- package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +1 -1
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +18 -8
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +1 -1
- package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.service.mjs +1 -1
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +11 -3
- package/esm2022/tooltip/lib/tooltip/tooltip.component.mjs +17 -11
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +108 -241
- package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +4 -6
- package/esm2022/topbar/lib/topbar/topbar.component.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +9 -7
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +19 -7
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +7 -4
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs +8 -2
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +11 -11
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +133 -21
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +354 -2
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +18 -7
- package/fesm2022/seniorsistemas-angular-components-switch.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-tiered-menu.mjs +26 -8
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +125 -254
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components.mjs +12 -1
- package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
- package/package.json +1 -1
- package/select/lib/select/select.component.d.ts +23 -2
- package/shared/lib/accessibility/paginator-accessibility.directive.d.ts +30 -0
- package/shared/lib/accessibility/table-checkbox-accessibility.directive.d.ts +46 -0
- package/shared/public-api.d.ts +7 -5
- package/switch/lib/switch/switch.component.d.ts +9 -5
- package/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +1 -0
- package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +4 -2
- package/tooltip/lib/tooltip/tooltip.component.d.ts +13 -7
- package/tooltip/lib/tooltip/tooltip.directive.d.ts +27 -40
- package/tooltip/lib/tooltip/tooltip.module.d.ts +3 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-button.mjs","sources":["../../projects/angular-components/button/src/lib/button/button.component.ts","../../projects/angular-components/button/src/lib/button/button.component.html","../../projects/angular-components/button/src/lib/button/button.module.ts","../../projects/angular-components/button/src/seniorsistemas-angular-components-button.ts"],"sourcesContent":["import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { NgClass, NgStyle } from '@angular/common';\nimport { BadgeModule } from '@seniorsistemas/angular-components/badge';\nimport { TieredMenuItemData, TieredMenuModule } from '@seniorsistemas/angular-components/tiered-menu';\nimport { TooltipModule, TooltipPositions } from '@seniorsistemas/angular-components/tooltip';\nimport { randomHash } from '@seniorsistemas/angular-components/utils';\nimport { ButtonAnimations } from './models/button-animations';\nimport { ButtonBadgeConfig } from './models/button-badge-config';\nimport { ButtonPriority } from './models/button-priority';\n\n/**\n * @description Componente de botão versátil que suporta ícones, tooltip, menu de opções\n * (tiered menu), badge, animações e diferentes prioridades visuais. Pode ser configurado\n * como botão de ação simples, botão com menu dropdown ou botão deslizante (slide).\n *\n * @example\n * ```html\n * <s-button\n * label=\"Salvar\"\n * iconClass=\"fas fa-save\"\n * priority=\"primary\"\n * (clicked)=\"onSave()\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n host: {\n '[class.s-button-with-badge]': '!!badge',\n },\n standalone: true,\n imports: [NgClass, NgStyle, BadgeModule, TieredMenuModule, TooltipModule],\n})\nexport class ButtonComponent implements OnChanges {\n @HostBinding('style.min-width')\n public minWidth = '40px';\n\n /**\n * @description Identificador único do elemento botão no DOM.\n * Gerado automaticamente se não informado.\n */\n @Input()\n public id? = `s-button-${randomHash()}`;\n\n /**\n * @description Texto exibido dentro do botão.\n */\n @Input()\n public label?: string;\n\n /**\n * @description Texto do tooltip exibido ao passar o mouse sobre o botão.\n */\n @Input()\n public tooltip?: string;\n\n /**\n * @description Posição do tooltip em relação ao botão.\n *\n * @default 'top'\n */\n @Input()\n public tooltipPosition: TooltipPositions = 'top';\n\n /**\n * @description Classe de ícone exibida à esquerda do label (ex.: `'fas fa-save'`).\n */\n @Input()\n public iconClass?: string;\n\n /**\n * @description Classe de ícone exibida à direita do label.\n */\n @Input()\n public rightIconClass?: string;\n\n /**\n * @description Exibe o ícone de caret (seta) quando o botão possui um menu de opções.\n *\n * @default true\n */\n @Input()\n public caret = true;\n\n /**\n * @description Classe CSS adicional aplicada ao elemento `<button>` interno.\n *\n * @default ''\n */\n @Input()\n public styleClass = '';\n\n /**\n * @description Z-index base do painel do menu dropdown associado ao botão.\n *\n * @default 0\n */\n @Input()\n public baseZIndex = 0;\n\n /**\n * @description Desabilita o botão, impedindo cliques e interação do usuário.\n *\n * @default false\n */\n @Input()\n public disabled = false;\n\n /**\n * @description Aplica estilo auxiliar (menos destaque visual) ao botão.\n *\n * @default false\n */\n @Input()\n public auxiliary = false;\n\n /**\n * @description Tipo do elemento `<button>` HTML (`'button'`, `'submit'`, `'reset'`).\n *\n * @default 'button'\n */\n @Input()\n public type? = 'button';\n\n /**\n * @description Prioridade visual do botão, que determina seu estilo.\n * Aceita `'primary'`, `'default'`, `'danger'`, `'link'`, entre outros.\n *\n * @default 'primary'\n */\n @Input()\n public priority?: ButtonPriority = 'primary';\n\n /**\n * @description Lista de itens do menu dropdown exibido ao clicar no caret do botão.\n *\n * @default []\n */\n @Input()\n public menuOptions: TieredMenuItemData[] = [];\n\n /**\n * @description Tamanho visual do botão. Aceita `'default'` ou `'small'`.\n *\n * @default 'default'\n */\n @Input()\n public menuAriaLabel?: string;\n\n @Input()\n public size?: 'default' | 'small' = 'default';\n\n /**\n * @description Habilita o modo slide, que exibe uma animação de deslize ao passar o mouse.\n * Requer `priority` igual a `'default'` ou `'link'` e um `label` definido.\n *\n * @default false\n */\n @Input()\n public slide = false;\n\n /**\n * @description Tipo de animação aplicada ao botão (`'rotate'`, `'pulse'`, etc.).\n */\n @Input()\n public animation?: ButtonAnimations;\n\n /**\n * @description Configuração do badge exibido sobre o botão, com contador ou indicador visual.\n */\n @Input()\n public badge?: ButtonBadgeConfig;\n\n /**\n * @description Cor aplicada ao ícone do botão, sobrescrevendo a cor padrão do tema.\n */\n @Input()\n public iconColor?: string;\n\n /**\n * @description Emitido ao clicar no botão, desde que não esteja desabilitado.\n */\n @Output()\n public clicked: EventEmitter<any> = new EventEmitter();\n\n public validateSlideButton(): boolean {\n return !!(this.slide && (this.priority === 'default' || this.priority === 'link') && this.label?.length);\n }\n\n public ngOnChanges(_: SimpleChanges): void {\n const hasIcon = this.iconClass;\n const hasText = this.label;\n\n const isMultiple = this.menuOptions?.length;\n\n if (hasText || (hasIcon && isMultiple)) this.minWidth = '80px';\n if (hasText && hasIcon && isMultiple) this.minWidth = '100px';\n }\n\n public isRotateAnimation(): boolean {\n return this.animation === 'rotate';\n }\n}\n\n","<button\n [id]=\"id\"\n [type]=\"type\"\n [class]=\"styleClass\"\n [ngClass]=\"{\n 's-button-auxiliary': auxiliary,\n 's-button-with-icon': iconClass,\n 's-button-with-text': label,\n 's-button-only-icon': iconClass && !label && !menuOptions.length,\n 's-button-empty': !iconClass && !label,\n 's-button-size-default': size === 'default',\n 's-button-size-small': size === 'small',\n 's-button-priority-default': priority === 'default',\n 's-button-priority-primary': priority === 'primary',\n 's-button-priority-secondary': priority === 'secondary',\n 's-button-priority-link': priority === 'link',\n 's-button-priority-danger': priority === 'danger',\n 's-button-multiple': (caret && menuOptions.length) || rightIconClass,\n 's-button--slide': validateSlideButton(),\n 's-button--rotate-animation': isRotateAnimation(),\n }\"\n sTieredMenu\n [items]=\"menuOptions\"\n [ariaLabel]=\"menuAriaLabel\"\n [disabled]=\"disabled\"\n [sTooltip]=\"tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (click)=\"clicked.emit($event)\"\n>\n @if (iconClass) {\n <span\n [class]=\"iconClass\"\n [ngClass]=\"{\n 's-button-icon': true,\n 's-button-icon-margin-right': !label && menuOptions.length,\n }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if (label) {\n <span\n class=\"s-button-text\"\n [ngClass]=\"{\n 's-button-icon-margin-right': !!rightIconClass || menuOptions.length,\n 's-button-icon-margin-left': !!iconClass,\n }\"\n >\n {{ label }}\n </span>\n }\n <ng-content></ng-content>\n @if (rightIconClass) {\n <span\n [class]=\"rightIconClass\"\n [ngClass]=\"{ 's-button-right-icon': true }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if ((caret && menuOptions.length) || (menuOptions && menuOptions.length)) {\n <span\n class=\"menu-options-icon fa fa-fw fa-caret-down\"\n aria-hidden=\"true\"\n >\n </span>\n }\n</button>\n@if (badge) {\n <div class=\"badge\">\n <s-badge\n [color]=\"badge.color\"\n [text]=\"badge.text\"\n [iconClass]=\"badge.iconClass\"\n >\n </s-badge>\n </div>\n}\n","import { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from './button.component';\n\n@NgModule({\n imports: [\n ButtonComponent,\n ],\n exports: [ButtonComponent],\n})\nexport class ButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-button.mjs","sources":["../../projects/angular-components/button/src/lib/button/button.component.ts","../../projects/angular-components/button/src/lib/button/button.component.html","../../projects/angular-components/button/src/lib/button/button.module.ts","../../projects/angular-components/button/src/seniorsistemas-angular-components-button.ts"],"sourcesContent":["import { Component, EventEmitter, HostBinding, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\n\nimport { NgClass, NgStyle } from '@angular/common';\nimport { BadgeModule } from '@seniorsistemas/angular-components/badge';\nimport { TieredMenuItemData, TieredMenuModule } from '@seniorsistemas/angular-components/tiered-menu';\nimport { TooltipModule, TooltipPositions } from '@seniorsistemas/angular-components/tooltip';\nimport { randomHash } from '@seniorsistemas/angular-components/utils';\nimport { ButtonAnimations } from './models/button-animations';\nimport { ButtonBadgeConfig } from './models/button-badge-config';\nimport { ButtonPriority } from './models/button-priority';\n\n/**\n * @description Componente de botão versátil que suporta ícones, tooltip, menu de opções\n * (tiered menu), badge, animações e diferentes prioridades visuais. Pode ser configurado\n * como botão de ação simples, botão com menu dropdown ou botão deslizante (slide).\n *\n * @example\n * ```html\n * <s-button\n * label=\"Salvar\"\n * iconClass=\"fas fa-save\"\n * priority=\"primary\"\n * (clicked)=\"onSave()\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-button',\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n host: {\n '[class.s-button-with-badge]': '!!badge',\n },\n standalone: true,\n imports: [NgClass, NgStyle, BadgeModule, TieredMenuModule, TooltipModule],\n})\nexport class ButtonComponent implements OnChanges {\n @HostBinding('style.min-width')\n public minWidth = '40px';\n\n /**\n * @description Identificador único do elemento botão no DOM.\n * Gerado automaticamente se não informado.\n */\n @Input()\n public id? = `s-button-${randomHash()}`;\n\n /**\n * @description Texto exibido dentro do botão.\n */\n @Input()\n public label?: string;\n\n /**\n * @description Texto do tooltip exibido ao passar o mouse sobre o botão.\n */\n @Input()\n public tooltip?: string;\n\n /**\n * @description Posição do tooltip em relação ao botão.\n *\n * @default 'top'\n */\n @Input()\n public tooltipPosition: TooltipPositions = 'top';\n\n /**\n * @description Classe de ícone exibida à esquerda do label (ex.: `'fas fa-save'`).\n */\n @Input()\n public iconClass?: string;\n\n /**\n * @description Classe de ícone exibida à direita do label.\n */\n @Input()\n public rightIconClass?: string;\n\n /**\n * @description Exibe o ícone de caret (seta) quando o botão possui um menu de opções.\n *\n * @default true\n */\n @Input()\n public caret = true;\n\n /**\n * @description Classe CSS adicional aplicada ao elemento `<button>` interno.\n *\n * @default ''\n */\n @Input()\n public styleClass = '';\n\n /**\n * @description Z-index base do painel do menu dropdown associado ao botão.\n *\n * @default 0\n */\n @Input()\n public baseZIndex = 0;\n\n /**\n * @description Desabilita o botão, impedindo cliques e interação do usuário.\n *\n * @default false\n */\n @Input()\n public disabled = false;\n\n /**\n * @description Aplica estilo auxiliar (menos destaque visual) ao botão.\n *\n * @default false\n */\n @Input()\n public auxiliary = false;\n\n /**\n * @description Tipo do elemento `<button>` HTML (`'button'`, `'submit'`, `'reset'`).\n *\n * @default 'button'\n */\n @Input()\n public type? = 'button';\n\n /**\n * @description Prioridade visual do botão, que determina seu estilo.\n * Aceita `'primary'`, `'default'`, `'danger'`, `'link'`, entre outros.\n *\n * @default 'primary'\n */\n @Input()\n public priority?: ButtonPriority = 'primary';\n\n /**\n * @description Lista de itens do menu dropdown exibido ao clicar no caret do botão.\n *\n * @default []\n */\n @Input()\n public menuOptions: TieredMenuItemData[] = [];\n\n /**\n * @description Tamanho visual do botão. Aceita `'default'` ou `'small'`.\n *\n * @default 'default'\n */\n @Input()\n public size?: 'default' | 'small' = 'default';\n\n /**\n * @description Habilita o modo slide, que exibe uma animação de deslize ao passar o mouse.\n * Requer `priority` igual a `'default'` ou `'link'` e um `label` definido.\n *\n * @default false\n */\n @Input()\n public slide = false;\n\n /**\n * @description Tipo de animação aplicada ao botão (`'rotate'`, `'pulse'`, etc.).\n */\n @Input()\n public animation?: ButtonAnimations;\n\n /**\n * @description Configuração do badge exibido sobre o botão, com contador ou indicador visual.\n */\n @Input()\n public badge?: ButtonBadgeConfig;\n\n /**\n * @description Cor aplicada ao ícone do botão, sobrescrevendo a cor padrão do tema.\n */\n @Input()\n public iconColor?: string;\n\n /**\n * @description Texto alternativo para o menu associado ao botão, utilizado para acessibilidade.\n */\n @Input()\n public menuAriaLabel?: string;\n\n /**\n * @description Emitido ao clicar no botão, desde que não esteja desabilitado.\n */\n @Output()\n public clicked: EventEmitter<any> = new EventEmitter();\n\n public isMenuOpen = false;\n\n public validateSlideButton(): boolean {\n return !!(this.slide && (this.priority === 'default' || this.priority === 'link') && this.label?.length);\n }\n\n public ngOnChanges(_: SimpleChanges): void {\n const hasIcon = this.iconClass;\n const hasText = this.label;\n\n const isMultiple = this.menuOptions?.length;\n\n if (hasText || (hasIcon && isMultiple)) {\n this.minWidth = '80px';\n }\n if (hasText && hasIcon && isMultiple) {\n this.minWidth = '100px';\n }\n }\n\n public isRotateAnimation(): boolean {\n return this.animation === 'rotate';\n }\n\n public onTieredMenuOpened(): void {\n this.isMenuOpen = true;\n }\n\n public onTieredMenuClosed(): void {\n this.isMenuOpen = false;\n }\n}\n\n","<button\n [id]=\"id\"\n [type]=\"type\"\n [class]=\"styleClass\"\n [ngClass]=\"{\n 's-button-auxiliary': auxiliary,\n 's-button-with-icon': iconClass,\n 's-button-with-text': label,\n 's-button-only-icon': iconClass && !label && !menuOptions.length,\n 's-button-empty': !iconClass && !label,\n 's-button-size-default': size === 'default',\n 's-button-size-small': size === 'small',\n 's-button-priority-default': priority === 'default',\n 's-button-priority-primary': priority === 'primary',\n 's-button-priority-secondary': priority === 'secondary',\n 's-button-priority-link': priority === 'link',\n 's-button-priority-danger': priority === 'danger',\n 's-button-multiple': (caret && menuOptions.length) || rightIconClass,\n 's-button--slide': validateSlideButton(),\n 's-button--rotate-animation': isRotateAnimation(),\n }\"\n sTieredMenu\n [items]=\"menuOptions\"\n [ariaLabel]=\"menuAriaLabel\"\n [attr.aria-haspopup]=\"menuOptions.length ? 'menu' : null\"\n [attr.aria-expanded]=\"menuOptions.length ? isMenuOpen : null\"\n [disabled]=\"disabled\"\n [sTooltip]=\"tooltip\"\n [tooltipPosition]=\"tooltipPosition\"\n (tieredMenuOpened)=\"onTieredMenuOpened()\"\n (tieredMenuClosed)=\"onTieredMenuClosed()\"\n (click)=\"clicked.emit($event)\"\n>\n @if (iconClass) {\n <span\n [class]=\"iconClass\"\n [ngClass]=\"{\n 's-button-icon': true,\n 's-button-icon-margin-right': !label && menuOptions.length,\n }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if (label) {\n <span\n class=\"s-button-text\"\n [ngClass]=\"{\n 's-button-icon-margin-right': !!rightIconClass || menuOptions.length,\n 's-button-icon-margin-left': !!iconClass,\n }\"\n >\n {{ label }}\n </span>\n }\n <ng-content></ng-content>\n @if (rightIconClass) {\n <span\n [class]=\"rightIconClass\"\n [ngClass]=\"{ 's-button-right-icon': true }\"\n [ngStyle]=\"{ color: iconColor }\"\n aria-hidden=\"true\"\n >\n </span>\n }\n @if ((caret && menuOptions.length) || (menuOptions && menuOptions.length)) {\n <span\n class=\"menu-options-icon fa fa-fw fa-caret-down\"\n aria-hidden=\"true\"\n >\n </span>\n }\n</button>\n@if (badge) {\n <div class=\"badge\">\n <s-badge\n [color]=\"badge.color\"\n [text]=\"badge.text\"\n [iconClass]=\"badge.iconClass\"\n >\n </s-badge>\n </div>\n}\n\n","import { NgModule } from '@angular/core';\n\nimport { ButtonComponent } from './button.component';\n\n@NgModule({\n imports: [\n ButtonComponent,\n ],\n exports: [ButtonComponent],\n})\nexport class ButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as i1 from '@angular/common';
|
|
2
1
|
import { CommonModule } from '@angular/common';
|
|
3
2
|
import * as i0 from '@angular/core';
|
|
4
3
|
import { model, input, output, signal, computed, forwardRef, Component } from '@angular/core';
|
|
@@ -28,6 +27,10 @@ class CheckboxComponent {
|
|
|
28
27
|
indeterminate = input(false);
|
|
29
28
|
/** @description Texto do label exibido ao lado do checkbox. @default '' */
|
|
30
29
|
label = input('');
|
|
30
|
+
/** @description Rótulo acessível para leitores de tela. Opcional, por padrão usa o valor de `label`. */
|
|
31
|
+
ariaLabel = input(undefined);
|
|
32
|
+
/** @description ID do elemento que descreve o checkbox (para usar `<label for="...">`). Opcional. */
|
|
33
|
+
ariaLabelledBy = input(undefined);
|
|
31
34
|
/**
|
|
32
35
|
* @description Emitido quando o valor do checkbox é alterado pelo usuário.
|
|
33
36
|
* Emite o novo valor booleano (`true` para marcado, `false` para desmarcado).
|
|
@@ -76,13 +79,13 @@ class CheckboxComponent {
|
|
|
76
79
|
this._onTouched();
|
|
77
80
|
}
|
|
78
81
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "s-checkbox", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", checked: "checkedChange", checkedChange: "checkedChange" }, providers: [
|
|
82
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "s-checkbox", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, indeterminate: { classPropertyName: "indeterminate", publicName: "indeterminate", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, ariaLabelledBy: { classPropertyName: "ariaLabelledBy", publicName: "ariaLabelledBy", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange", checked: "checkedChange", checkedChange: "checkedChange" }, providers: [
|
|
80
83
|
{
|
|
81
84
|
provide: NG_VALUE_ACCESSOR,
|
|
82
85
|
useExisting: forwardRef(() => CheckboxComponent),
|
|
83
86
|
multi: true,
|
|
84
87
|
},
|
|
85
|
-
], ngImport: i0, template: "<div\n class=\"flex cursor-pointer select-none gap-3\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"flex h-5 w-5 items-center justify-center
|
|
88
|
+
], ngImport: i0, template: "<div\n class=\"group flex cursor-pointer select-none gap-3 outline-none\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || label() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"rounded flex h-5 w-5 flex-shrink-0 items-center justify-center border border-grayscale-30\n transition-all duration-200 hover:border-grayscale-50\n group-focus-visible:ring-2 group-focus-visible:ring-primary group-focus-visible:ring-offset-1\"\n [class.bg-primary]=\"checked() || isIndeterminate()\"\n [class.hover:bg-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.bg-grayscale-0]=\"!checked() && !isIndeterminate()\"\n [class.border-primary]=\"checked() || isIndeterminate()\"\n [class.hover:border-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.opacity-50]=\"disabled()\"\n >\n @if (isIndeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-white h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n\n @if (label()) {\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90 ml-2\"\n aria-hidden=\"true\"\n >\n {{ label() }}\n </span>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }] });
|
|
86
89
|
}
|
|
87
90
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, decorators: [{
|
|
88
91
|
type: Component,
|
|
@@ -92,7 +95,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
92
95
|
useExisting: forwardRef(() => CheckboxComponent),
|
|
93
96
|
multi: true,
|
|
94
97
|
},
|
|
95
|
-
], template: "<div\n class=\"flex cursor-pointer select-none gap-3\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"flex h-5 w-5 items-center justify-center
|
|
98
|
+
], template: "<div\n class=\"group flex cursor-pointer select-none gap-3 outline-none\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || label() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"rounded flex h-5 w-5 flex-shrink-0 items-center justify-center border border-grayscale-30\n transition-all duration-200 hover:border-grayscale-50\n group-focus-visible:ring-2 group-focus-visible:ring-primary group-focus-visible:ring-offset-1\"\n [class.bg-primary]=\"checked() || isIndeterminate()\"\n [class.hover:bg-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.bg-grayscale-0]=\"!checked() && !isIndeterminate()\"\n [class.border-primary]=\"checked() || isIndeterminate()\"\n [class.hover:border-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.opacity-50]=\"disabled()\"\n >\n @if (isIndeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-white h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n\n @if (label()) {\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90 ml-2\"\n aria-hidden=\"true\"\n >\n {{ label() }}\n </span>\n }\n</div>\n" }]
|
|
96
99
|
}] });
|
|
97
100
|
|
|
98
101
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-checkbox.mjs","sources":["../../projects/angular-components/checkbox/src/lib/checkbox/checkbox.component.ts","../../projects/angular-components/checkbox/src/lib/checkbox/checkbox.component.html","../../projects/angular-components/checkbox/src/seniorsistemas-angular-components-checkbox.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, computed, forwardRef, input, model, output, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * @description Componente de caixa de seleção (checkbox) com suporte a três estados:\n * marcado, desmarcado e indeterminado. Implementa {@link ControlValueAccessor} para\n * integração com Reactive Forms e Template-driven Forms do Angular.\n *\n * @example\n * ```html\n * <s-checkbox\n * formControlName=\"aceito\"\n * label=\"Aceito os termos de uso\"\n * [indeterminate]=\"parcialmenteSelecionado\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-checkbox',\n standalone: true,\n imports: [CommonModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true,\n },\n ],\n templateUrl: './checkbox.component.html',\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n /** @description Controla o estado desabilitado via two-way binding. @default false */\n public disabled = model(false);\n /** @description Valor marcado/desmarcado do checkbox via two-way binding. @default false */\n public checked = model(false);\n /** @description Quando `true`, o checkbox inicia no estado indeterminado (traço) até a primeira interação do usuário. @default false */\n public indeterminate = input(false);\n /** @description Texto do label exibido ao lado do checkbox. @default '' */\n public label = input<string>('');\n\n /**\n * @description Emitido quando o valor do checkbox é alterado pelo usuário.\n * Emite o novo valor booleano (`true` para marcado, `false` para desmarcado).\n */\n public readonly checkedChange = output<boolean>();\n\n private _onChange: (value: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n private _hasUserInteracted = signal(false);\n\n /**\n * @description Computed que indica se o estado indeterminado deve ser exibido.\n * Retorna `true` enquanto `indeterminate` for `true` e o usuário não tiver interagido.\n */\n public readonly isIndeterminate = computed(() => this.indeterminate() && !this._hasUserInteracted());\n\n public toggle(): void {\n if (this.disabled()) {\n return;\n }\n\n if (this.indeterminate() && !this._hasUserInteracted()) {\n this._hasUserInteracted.set(true);\n this.checked.set(true);\n this.emit(true);\n } else {\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.emit(newValue);\n }\n }\n\n private emit(value: boolean): void {\n this._onChange(value);\n this.checkedChange.emit(value);\n }\n\n public writeValue(value: any): void {\n this.checked.set(!!value);\n }\n\n public registerOnChange(onChange: (value: boolean) => void): void {\n this._onChange = onChange;\n }\n\n public registerOnTouched(onTouched: () => void): void {\n this._onTouched = onTouched;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled.set(disabled);\n }\n\n public onBlur(): void {\n this._onTouched();\n }\n}\n\n","<div\n class=\"flex cursor-pointer select-none gap-3\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"flex h-5 w-5 items-center justify-center
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-checkbox.mjs","sources":["../../projects/angular-components/checkbox/src/lib/checkbox/checkbox.component.ts","../../projects/angular-components/checkbox/src/lib/checkbox/checkbox.component.html","../../projects/angular-components/checkbox/src/seniorsistemas-angular-components-checkbox.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, computed, forwardRef, input, model, output, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * @description Componente de caixa de seleção (checkbox) com suporte a três estados:\n * marcado, desmarcado e indeterminado. Implementa {@link ControlValueAccessor} para\n * integração com Reactive Forms e Template-driven Forms do Angular.\n *\n * @example\n * ```html\n * <s-checkbox\n * formControlName=\"aceito\"\n * label=\"Aceito os termos de uso\"\n * [indeterminate]=\"parcialmenteSelecionado\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-checkbox',\n standalone: true,\n imports: [CommonModule],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CheckboxComponent),\n multi: true,\n },\n ],\n templateUrl: './checkbox.component.html',\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n /** @description Controla o estado desabilitado via two-way binding. @default false */\n public disabled = model(false);\n /** @description Valor marcado/desmarcado do checkbox via two-way binding. @default false */\n public checked = model(false);\n /** @description Quando `true`, o checkbox inicia no estado indeterminado (traço) até a primeira interação do usuário. @default false */\n public indeterminate = input(false);\n /** @description Texto do label exibido ao lado do checkbox. @default '' */\n public label = input<string>('');\n /** @description Rótulo acessível para leitores de tela. Opcional, por padrão usa o valor de `label`. */\n public ariaLabel = input<string | undefined>(undefined);\n /** @description ID do elemento que descreve o checkbox (para usar `<label for=\"...\">`). Opcional. */\n public ariaLabelledBy = input<string | undefined>(undefined);\n\n /**\n * @description Emitido quando o valor do checkbox é alterado pelo usuário.\n * Emite o novo valor booleano (`true` para marcado, `false` para desmarcado).\n */\n public readonly checkedChange = output<boolean>();\n\n private _onChange: (value: boolean) => void = () => {};\n private _onTouched: () => void = () => {};\n private _hasUserInteracted = signal(false);\n\n /**\n * @description Computed que indica se o estado indeterminado deve ser exibido.\n * Retorna `true` enquanto `indeterminate` for `true` e o usuário não tiver interagido.\n */\n public readonly isIndeterminate = computed(() => this.indeterminate() && !this._hasUserInteracted());\n\n public toggle(): void {\n if (this.disabled()) {\n return;\n }\n\n if (this.indeterminate() && !this._hasUserInteracted()) {\n this._hasUserInteracted.set(true);\n this.checked.set(true);\n this.emit(true);\n } else {\n const newValue = !this.checked();\n this.checked.set(newValue);\n this.emit(newValue);\n }\n }\n\n private emit(value: boolean): void {\n this._onChange(value);\n this.checkedChange.emit(value);\n }\n\n public writeValue(value: any): void {\n this.checked.set(!!value);\n }\n\n public registerOnChange(onChange: (value: boolean) => void): void {\n this._onChange = onChange;\n }\n\n public registerOnTouched(onTouched: () => void): void {\n this._onTouched = onTouched;\n }\n\n public setDisabledState(disabled: boolean): void {\n this.disabled.set(disabled);\n }\n\n public onBlur(): void {\n this._onTouched();\n }\n}\n\n","<div\n class=\"group flex cursor-pointer select-none gap-3 outline-none\"\n [class.cursor-not-allowed]=\"disabled()\"\n tabindex=\"0\"\n role=\"checkbox\"\n [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n [attr.aria-disabled]=\"disabled()\"\n [attr.aria-label]=\"ariaLabel() || label() || null\"\n [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n (click)=\"toggle()\"\n (keydown.space)=\"toggle(); $event.preventDefault()\"\n (blur)=\"onBlur()\"\n>\n <div\n class=\"rounded flex h-5 w-5 flex-shrink-0 items-center justify-center border border-grayscale-30\n transition-all duration-200 hover:border-grayscale-50\n group-focus-visible:ring-2 group-focus-visible:ring-primary group-focus-visible:ring-offset-1\"\n [class.bg-primary]=\"checked() || isIndeterminate()\"\n [class.hover:bg-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.bg-grayscale-0]=\"!checked() && !isIndeterminate()\"\n [class.border-primary]=\"checked() || isIndeterminate()\"\n [class.hover:border-tarawera-500]=\"checked() || isIndeterminate()\"\n [class.opacity-50]=\"disabled()\"\n >\n @if (isIndeterminate()) {\n <svg\n class=\"h-3 w-3 text-grayscale-0\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M6 12h12\" />\n </svg>\n } @else {\n @if (checked()) {\n <svg\n class=\"text-white h-3 w-3\"\n fill=\"none\"\n stroke=\"white\"\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n </svg>\n }\n }\n </div>\n\n @if (label()) {\n <span\n [class.opacity-50]=\"disabled()\"\n class=\"text-grayscale-90 ml-2\"\n aria-hidden=\"true\"\n >\n {{ label() }}\n </span>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ import { take } from 'rxjs';
|
|
|
29
29
|
class PopupConfirmDialogComponent {
|
|
30
30
|
confirmDialog;
|
|
31
31
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PopupConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PopupConfirmDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if (confirmDialog) {\n <s-dialog [header]=\"confirmDialog.header\">\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12\">\n {{ confirmDialog.message }}\n </div>\n </div>\n <ng-template\n sTemplate=\"footer\"\n let-activeDialog=\"activeDialog\"\n >\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12 flex flex-wrap justify-end gap-3\">\n @if (confirmDialog.rejectLabel) {\n <s-button\n [label]=\"confirmDialog.rejectLabel\"\n (clicked)=\"activeDialog.close(false)\"\n label=\"A\u00E7\u00E3o secund\u00E1ria\"\n priority=\"link\"\n />\n }\n <s-button\n [label]=\"confirmDialog.acceptLabel\"\n (clicked)=\"activeDialog.close(true)\"\n priority=\"primary\"\n />\n </div>\n </div>\n </ng-template>\n </s-dialog>\n}\n", dependencies: [{ kind: "component", type: DialogComponent, selector: "s-dialog", inputs: ["header", "visible", "size", "contentClassName", "escapeOnEsc", "destroyClickOutside"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: TemplateModule }, { kind: "directive", type: i1.TemplateDirective, selector: "[sTemplate]", inputs: ["sTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "
|
|
32
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PopupConfirmDialogComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: "@if (confirmDialog) {\n <s-dialog [header]=\"confirmDialog.header\">\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12\">\n {{ confirmDialog.message }}\n </div>\n </div>\n <ng-template\n sTemplate=\"footer\"\n let-activeDialog=\"activeDialog\"\n >\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12 flex flex-wrap justify-end gap-3\">\n @if (confirmDialog.rejectLabel) {\n <s-button\n [label]=\"confirmDialog.rejectLabel\"\n (clicked)=\"activeDialog.close(false)\"\n label=\"A\u00E7\u00E3o secund\u00E1ria\"\n priority=\"link\"\n />\n }\n <s-button\n [label]=\"confirmDialog.acceptLabel\"\n (clicked)=\"activeDialog.close(true)\"\n priority=\"primary\"\n />\n </div>\n </div>\n </ng-template>\n </s-dialog>\n}\n", dependencies: [{ kind: "component", type: DialogComponent, selector: "s-dialog", inputs: ["header", "visible", "size", "contentClassName", "escapeOnEsc", "destroyClickOutside", "closeAriaLabel"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: TemplateModule }, { kind: "directive", type: i1.TemplateDirective, selector: "[sTemplate]", inputs: ["sTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i2.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }] });
|
|
33
33
|
}
|
|
34
34
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PopupConfirmDialogComponent, decorators: [{
|
|
35
35
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-confirm-dialog.mjs","sources":["../../projects/angular-components/confirm-dialog/src/lib/popup-confirm-dialog/popup-confirm-dialog.component.ts","../../projects/angular-components/confirm-dialog/src/lib/popup-confirm-dialog/popup-confirm-dialog.component.html","../../projects/angular-components/confirm-dialog/src/lib/confirm-dialog.service.ts","../../projects/angular-components/confirm-dialog/src/seniorsistemas-angular-components-confirm-dialog.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { ConfirmDialog } from '../confirm-dialog.model';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\n\n/**\n * @description Componente interno do diálogo de confirmação, renderizado pelo `ConfirmDialogService`.\n * Exibe uma janela modal com uma mensagem, título e botões de aceitar e rejeitar configuráveis.\n * Não deve ser instanciado diretamente; utilize `ConfirmDialogService.open()` para exibi-lo.\n *\n * @example\n * ```ts\n * // Uso via serviço\n * this.confirmDialogService.open({\n * header: 'Confirmar exclusão',\n * message: 'Deseja realmente excluir este item?',\n * acceptLabel: 'Excluir',\n * rejectLabel: 'Cancelar',\n * accept: () => this.delete(),\n * });\n * ```\n *\n * @category Overlay\n */\n@Component({\n standalone: true,\n imports: [DialogComponent, TemplateModule, ButtonModule],\n templateUrl: './popup-confirm-dialog.component.html',\n})\nexport class PopupConfirmDialogComponent {\n confirmDialog!: ConfirmDialog;\n}\n\n","@if (confirmDialog) {\n <s-dialog [header]=\"confirmDialog.header\">\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12\">\n {{ confirmDialog.message }}\n </div>\n </div>\n <ng-template\n sTemplate=\"footer\"\n let-activeDialog=\"activeDialog\"\n >\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12 flex flex-wrap justify-end gap-3\">\n @if (confirmDialog.rejectLabel) {\n <s-button\n [label]=\"confirmDialog.rejectLabel\"\n (clicked)=\"activeDialog.close(false)\"\n label=\"Ação secundária\"\n priority=\"link\"\n />\n }\n <s-button\n [label]=\"confirmDialog.acceptLabel\"\n (clicked)=\"activeDialog.close(true)\"\n priority=\"primary\"\n />\n </div>\n </div>\n </ng-template>\n </s-dialog>\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ConfirmDialog } from './confirm-dialog.model';\nimport { DialogService } from '@seniorsistemas/angular-components/dialog';\nimport { PopupConfirmDialogComponent } from './popup-confirm-dialog/popup-confirm-dialog.component';\nimport { take } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfirmDialogService {\n private readonly dialogService = inject(DialogService);\n\n confirm(confirmDialog: ConfirmDialog) {\n const dialogRef = this.dialogService.open(PopupConfirmDialogComponent);\n\n dialogRef.componentInstance.confirmDialog = confirmDialog;\n\n dialogRef.closed.pipe(take(1)).subscribe((response) => {\n if (response) {\n confirmDialog.accept()\n } else if (!response && confirmDialog.reject) {\n confirmDialog.reject();\n }\n })\n\n dialogRef.dismissed.pipe(take(1)).subscribe(() => {\n if (confirmDialog.reject) {\n confirmDialog.reject()\n }\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;AAMA;;;;;;;;;;;;;;;;;;AAkBG;MAMU,2BAA2B,CAAA;AACpC,IAAA,aAAa,CAAiB;wGADrB,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,wEC9BxC,qqCA+BA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDJc,eAAe,EAAE,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,kBAAA,EAAA,aAAA,EAAA,qBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,cAAc,iIAAE,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,IAAA,EAAA,OAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,UAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-confirm-dialog.mjs","sources":["../../projects/angular-components/confirm-dialog/src/lib/popup-confirm-dialog/popup-confirm-dialog.component.ts","../../projects/angular-components/confirm-dialog/src/lib/popup-confirm-dialog/popup-confirm-dialog.component.html","../../projects/angular-components/confirm-dialog/src/lib/confirm-dialog.service.ts","../../projects/angular-components/confirm-dialog/src/seniorsistemas-angular-components-confirm-dialog.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { ConfirmDialog } from '../confirm-dialog.model';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\n\n/**\n * @description Componente interno do diálogo de confirmação, renderizado pelo `ConfirmDialogService`.\n * Exibe uma janela modal com uma mensagem, título e botões de aceitar e rejeitar configuráveis.\n * Não deve ser instanciado diretamente; utilize `ConfirmDialogService.open()` para exibi-lo.\n *\n * @example\n * ```ts\n * // Uso via serviço\n * this.confirmDialogService.open({\n * header: 'Confirmar exclusão',\n * message: 'Deseja realmente excluir este item?',\n * acceptLabel: 'Excluir',\n * rejectLabel: 'Cancelar',\n * accept: () => this.delete(),\n * });\n * ```\n *\n * @category Overlay\n */\n@Component({\n standalone: true,\n imports: [DialogComponent, TemplateModule, ButtonModule],\n templateUrl: './popup-confirm-dialog.component.html',\n})\nexport class PopupConfirmDialogComponent {\n confirmDialog!: ConfirmDialog;\n}\n\n","@if (confirmDialog) {\n <s-dialog [header]=\"confirmDialog.header\">\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12\">\n {{ confirmDialog.message }}\n </div>\n </div>\n <ng-template\n sTemplate=\"footer\"\n let-activeDialog=\"activeDialog\"\n >\n <div class=\"grid grid-cols-12\">\n <div class=\"col-span-12 flex flex-wrap justify-end gap-3\">\n @if (confirmDialog.rejectLabel) {\n <s-button\n [label]=\"confirmDialog.rejectLabel\"\n (clicked)=\"activeDialog.close(false)\"\n label=\"Ação secundária\"\n priority=\"link\"\n />\n }\n <s-button\n [label]=\"confirmDialog.acceptLabel\"\n (clicked)=\"activeDialog.close(true)\"\n priority=\"primary\"\n />\n </div>\n </div>\n </ng-template>\n </s-dialog>\n}\n","import { inject, Injectable } from '@angular/core';\nimport { ConfirmDialog } from './confirm-dialog.model';\nimport { DialogService } from '@seniorsistemas/angular-components/dialog';\nimport { PopupConfirmDialogComponent } from './popup-confirm-dialog/popup-confirm-dialog.component';\nimport { take } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ConfirmDialogService {\n private readonly dialogService = inject(DialogService);\n\n confirm(confirmDialog: ConfirmDialog) {\n const dialogRef = this.dialogService.open(PopupConfirmDialogComponent);\n\n dialogRef.componentInstance.confirmDialog = confirmDialog;\n\n dialogRef.closed.pipe(take(1)).subscribe((response) => {\n if (response) {\n confirmDialog.accept()\n } else if (!response && confirmDialog.reject) {\n confirmDialog.reject();\n }\n })\n\n dialogRef.dismissed.pipe(take(1)).subscribe(() => {\n if (confirmDialog.reject) {\n confirmDialog.reject()\n }\n })\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -236,7 +236,7 @@ class ContentGeneratorComponent {
|
|
|
236
236
|
removalVersion: '20.0.0',
|
|
237
237
|
},
|
|
238
238
|
},
|
|
239
|
-
], viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textAreaElement"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i5.DeprecatedSelectorDirective }], ngImport: i0, template: "<s-loading-state\n [loading]=\"isLoading\"\n [blockWindow]=\"true\"\n>\n</s-loading-state>\n\n<s-dialog\n [(visible)]=\"isVisible\"\n [escapeOnEsc]=\"false\"\n [destroyClickOutside]=\"false\"\n size=\"lg\"\n (visibleChange)=\"onHideDialog()\"\n>\n <ng-template sTemplate=\"header\">\n <div class=\"dialog-header\">\n <span class=\"iassist-icon\">\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </span>\n IAssist - Content Generator\n </div>\n </ng-template>\n\n <form [formGroup]=\"formGroup\">\n <label for=\"context\">{{ 'platform.angular_components.context' | translate }}</label>\n <s-textarea\n inputId=\"context\"\n formControlName=\"context\"\n [speechRecognition]=\"speechRecognition\"\n [keepContext]=\"keepContext\"\n />\n </form>\n\n <ng-template sTemplate=\"footer\">\n <div class=\"footer-content\">\n <s-button\n id=\"-submit-button\"\n type=\"button\"\n [label]=\"'platform.angular_components.generate_text' | translate\"\n (clicked)=\"submitContext()\"\n sTooltip=\"(ALT + SHIFT + S)\"\n showDelay=\"500\"\n >\n </s-button>\n <s-button\n id=\"-cancel-button\"\n type=\"button\"\n priority=\"link\"\n [label]=\"'platform.angular_components.cancel' | translate\"\n (clicked)=\"hideDialog()\"\n sTooltip=\"(ALT + SHIFT + C)\"\n showDelay=\"500\"\n >\n </s-button>\n </div>\n </ng-template>\n</s-dialog>\n\n<div class=\"textarea-ia\">\n <s-textarea\n #textAreaElement\n [inputId]=\"id\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"\n [rows]=\"rows\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [keepContext]=\"keepContext\"\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\n [maxLength]=\"maxLength\"\n [speechRecognition]=\"speechRecognition\"\n >\n </s-textarea>\n <!--TODO: Tooltip em propriedade-->\n <button\n class=\"iassist-button\"\n [class.speech-recognition]=\"speechRecognition && speechRecognitionService.hasSupportSpeechRecognition\"\n (click)=\"showDialog()\"\n sTooltip=\"IAssist - Content Generator\"\n >\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </button>\n</div>\n\n<ng-template #iassistIcon>\n <div style=\"width: 100%; height: 100%;\">\n <span *sSVGFactory=\"'iassist'\"></span>\n </div>\n</ng-template>\n", styles: ["s-content-generator.ng-invalid.ng-dirty .textarea-ia textarea,s-text-area-ia.ng-invalid.ng-dirty .textarea-ia textarea{border-color:#c13018}.footer-content{display:flex;flex-grow:0}.textarea-ia{display:flex;align-items:flex-end;gap:8px}.iassist-button{display:flex;justify-content:center;align-items:center;border:none;border-radius:50%;box-shadow:none;cursor:pointer;height:32px;width:32px}.dialog-header{display:flex;gap:12px}.dialog-header .iassist-icon{display:block;height:24px;width:24px}s-textarea{width:100%}.speech-recognition{margin-bottom:12.5px}\n"], dependencies: [{ kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "
|
|
239
|
+
], viewQueries: [{ propertyName: "textArea", first: true, predicate: ["textAreaElement"], descendants: true, isSignal: true }], hostDirectives: [{ directive: i5.DeprecatedSelectorDirective }], ngImport: i0, template: "<s-loading-state\n [loading]=\"isLoading\"\n [blockWindow]=\"true\"\n>\n</s-loading-state>\n\n<s-dialog\n [(visible)]=\"isVisible\"\n [escapeOnEsc]=\"false\"\n [destroyClickOutside]=\"false\"\n size=\"lg\"\n (visibleChange)=\"onHideDialog()\"\n>\n <ng-template sTemplate=\"header\">\n <div class=\"dialog-header\">\n <span class=\"iassist-icon\">\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </span>\n IAssist - Content Generator\n </div>\n </ng-template>\n\n <form [formGroup]=\"formGroup\">\n <label for=\"context\">{{ 'platform.angular_components.context' | translate }}</label>\n <s-textarea\n inputId=\"context\"\n formControlName=\"context\"\n [speechRecognition]=\"speechRecognition\"\n [keepContext]=\"keepContext\"\n />\n </form>\n\n <ng-template sTemplate=\"footer\">\n <div class=\"footer-content\">\n <s-button\n id=\"-submit-button\"\n type=\"button\"\n [label]=\"'platform.angular_components.generate_text' | translate\"\n (clicked)=\"submitContext()\"\n sTooltip=\"(ALT + SHIFT + S)\"\n showDelay=\"500\"\n >\n </s-button>\n <s-button\n id=\"-cancel-button\"\n type=\"button\"\n priority=\"link\"\n [label]=\"'platform.angular_components.cancel' | translate\"\n (clicked)=\"hideDialog()\"\n sTooltip=\"(ALT + SHIFT + C)\"\n showDelay=\"500\"\n >\n </s-button>\n </div>\n </ng-template>\n</s-dialog>\n\n<div class=\"textarea-ia\">\n <s-textarea\n #textAreaElement\n [inputId]=\"id\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"\n [rows]=\"rows\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [keepContext]=\"keepContext\"\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\n [maxLength]=\"maxLength\"\n [speechRecognition]=\"speechRecognition\"\n >\n </s-textarea>\n <!--TODO: Tooltip em propriedade-->\n <button\n class=\"iassist-button\"\n [class.speech-recognition]=\"speechRecognition && speechRecognitionService.hasSupportSpeechRecognition\"\n (click)=\"showDialog()\"\n sTooltip=\"IAssist - Content Generator\"\n >\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </button>\n</div>\n\n<ng-template #iassistIcon>\n <div style=\"width: 100%; height: 100%;\">\n <span *sSVGFactory=\"'iassist'\"></span>\n </div>\n</ng-template>\n", styles: ["s-content-generator.ng-invalid.ng-dirty .textarea-ia textarea,s-text-area-ia.ng-invalid.ng-dirty .textarea-ia textarea{border-color:#c13018}.footer-content{display:flex;flex-grow:0}.textarea-ia{display:flex;align-items:flex-end;gap:8px}.iassist-button{display:flex;justify-content:center;align-items:center;border:none;border-radius:50%;box-shadow:none;cursor:pointer;height:32px;width:32px}.dialog-header{display:flex;gap:12px}.dialog-header .iassist-icon{display:block;height:24px;width:24px}s-textarea{width:100%}.speech-recognition{margin-bottom:12.5px}\n"], dependencies: [{ kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.ButtonComponent, selector: "s-button", inputs: ["id", "label", "tooltip", "tooltipPosition", "iconClass", "rightIconClass", "caret", "styleClass", "baseZIndex", "disabled", "auxiliary", "type", "priority", "menuOptions", "size", "slide", "animation", "badge", "iconColor", "menuAriaLabel"], outputs: ["clicked"] }, { kind: "component", type: i7.LoadingStateComponent, selector: "s-loading-state", inputs: ["indicator", "id", "blockWindow", "loading"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i9.TextAreaComponent, selector: "s-textarea", inputs: ["inputId", "rows", "speechRecognition", "keyFilter", "keepContext", "speechRecognitionPlaceholder", "maxLength", "placeholder", "inputStyle", "readOnly"] }, { kind: "component", type: i10.DialogComponent, selector: "s-dialog", inputs: ["header", "visible", "size", "contentClassName", "escapeOnEsc", "destroyClickOutside", "closeAriaLabel"], outputs: ["visibleChange"] }, { kind: "directive", type: i11.TemplateDirective, selector: "[sTemplate]", inputs: ["sTemplate"] }, { kind: "directive", type: i12.SVGFactoryDirective, selector: "[sSVGFactory]", inputs: ["sSVGFactory"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None });
|
|
240
240
|
}
|
|
241
241
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ContentGeneratorComponent, decorators: [{
|
|
242
242
|
type: Component,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seniorsistemas-angular-components-content-generator.mjs","sources":["../../projects/angular-components/content-generator/src/lib/services/IAssist/iassist.service.ts","../../projects/angular-components/content-generator/src/lib/content-generator/content-generator.component.ts","../../projects/angular-components/content-generator/src/lib/content-generator/content-generator.component.html","../../projects/angular-components/content-generator/src/lib/content-generator/content-generator.module.ts","../../projects/angular-components/content-generator/src/seniorsistemas-angular-components-content-generator.ts"],"sourcesContent":["/* eslint-disable max-len */\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { IAssistInputData } from './models/iassist-input-data';\nimport { IAssistResponse } from './models/iassist-response';\nimport { ToastService } from \"@seniorsistemas/angular-components/toast\";\n\n@Injectable({ providedIn: 'root' })\nexport class IAssistService {\n\tconstructor(\n\t\tprivate readonly http: HttpClient,\n\t\tprivate readonly toastService: ToastService,\n\t) { }\n\n\tpublic askIA(context: string, data: IAssistInputData): Observable<IAssistResponse> {\n\t\tconst prompt: string = data.prompt\n\t\t\t? this._replacePlaceholder(context, data)\n\t\t\t: this._createPrompt(context, data);\n\n\t\treturn this.http\n\t\t\t.post<IAssistResponse>('platform/iassist/api/latest/completions', {\n\t\t\t\tprompt,\n\t\t\t\tprovider: 'OPEN_AI',\n\t\t\t\tparameters: {\n\t\t\t\t\tmodel: 'gpt-3.5-turbo',\n\t\t\t\t\tmax_tokens: 700,\n\t\t\t\t\ttemperature: 1,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(\n\t\t\t\tcatchError((err: HttpErrorResponse) => {\n\t\t\t\t\tthis.toastService.show({\n\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\ttitle: err.status ? String(err.status) : 'Error',\n\t\t\t\t\t\ttext: (err.error && err.error.message) || err.statusText || err.message || 'Error',\n\t\t\t\t\t});\n\t\t\t\t\treturn throwError(() => new Error(err.message));\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tprivate _replacePlaceholder(context: string, data: IAssistInputData): string {\n\t\tconst values = { ...data, context };\n\t\tdelete (values as Partial<IAssistInputData>).prompt;\n\n\t\tlet result = data.prompt;\n\t\tfor (const key in { ...values, context: context }) {\n\t\t\tconst placeholder = new RegExp(`{{\\\\s*${key}\\\\s*}}`, 'g');\n\t\t\tresult = result.replace(placeholder, values[key as keyof typeof values]);\n\t\t}\n\n\t\tconsole.log('prompt', result);\n\t\treturn result;\n\t}\n\n\tprivate _createPrompt(context: string, data: IAssistInputData): string {\n\t\treturn `Crie um texto genérico para preencher o campo de textarea.\n ${data.label ? `O campo tem o label ${data.label}.` : ''}\n ${data.id ? `O campo tem o id ${data.id}.` : ''}\n ${data.placeholder ? `Considere as instruções/sugestões do placeholder: ${data.placeholder}.` : ''}\n Baseie-se no contexto informado pelo usuário: '${context}'.\n O texto deve ser formal e conter informações pertinentes a um campo como este, como se um usuário real tivesse preenchido com as informações necessárias.\n O texto deve ser neutro com relação a generos, raças, religiões, etc.\n O texto deve ser impessoal e não deve conter informações pessoais do usuário.\n Não direcione o texto a ninguém, não use expressões como: caro, atenciosamente. gostaria, agradeço. O texto deve ser genérico.\n\n Exemplos de texto:\n Um campo de descrição de usuário: \"Usuário com 20 anos, estudante de engenharia, gosta de jogar futebol e assistir filmes.\"\n Outro exemplo de descrição de usuário: \"Usuário administrador, com acesso total ao sistema, responsável por gerenciar os usuários e os produtos.\"\n Um campo de descrição de um produto: \"O produto é um celular, com tela de 6 polegadas, 128GB de armazenamento, 4GB de memória RAM, câmera de 12MP e bateria de 4000mAh.\"\n Outro exemplo de descrição de produto: \"O produto é uma geladeira, com capacidade de 500 litros, 2 portas, cor branca, com freezer e gaveta de legumes.\"\n Outro exemplo de descrição de produto: \"O produto é uma camiseta, tamanho M, cor azul, 100% algodão, com estampa de um gato.\"\n\n Em caso de contexto incompleto crie um texto genérico, como se fosse um exemplo de preenchimento do campo.\n O texto é para um campo de textarea, então escreva um texto sucinto.\n Exiba apenas o texto do output`;\n\t}\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, input, Input, OnInit, viewChild, ViewEncapsulation } from '@angular/core';\n\nimport { Injector } from '@angular/core';\n\nimport { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n DEPRECATED_CONFIG,\n DeprecatedSelectorDirective,\n} from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { SpeechRecognitionService } from '@seniorsistemas/angular-components/speech-recognition';\nimport { TextAreaComponent } from '@seniorsistemas/angular-components/text-area';\nimport { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { IAssistService } from '../services/IAssist/iassist.service';\nimport { IAssistResponse } from '../services/IAssist/models/iassist-response';\n\n/**\n * @description Componente de área de texto com geração de conteúdo por inteligência artificial.\n * Integra-se ao serviço IAssist para sugerir e completar textos com base em um prompt configurável.\n * Suporta reconhecimento de voz opcional e mantém contexto entre gerações quando `keepContext` é `true`.\n * Implementa {@link ControlValueAccessor} para uso em formulários Angular.\n *\n * @example\n * ```html\n * <s-content-generator\n * formControlName=\"descricao\"\n * label=\"Descrição\"\n * prompt=\"Gere uma descrição para o produto\"\n * [rows]=\"5\"\n * [speechRecognition]=\"true\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-content-generator, s-text-area-ia',\n templateUrl: './content-generator.component.html',\n styleUrls: ['./content-generator.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ContentGeneratorComponent),\n multi: true,\n },\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-text-area-ia',\n newSelector: 's-content-generator',\n removalVersion: '20.0.0',\n },\n },\n ],\n hostDirectives: [DeprecatedSelectorDirective],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ContentGeneratorComponent implements OnInit, ControlValueAccessor {\n textArea = viewChild<TextAreaComponent>('textAreaElement');\n private static id = 0;\n\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\n @Input()\n public id = `ContentGenerator_${ContentGeneratorComponent.id--}`;\n\n /** @description Label exibido acima da área de texto. */\n @Input()\n public label!: string;\n\n /** @description Texto de placeholder exibido na área de texto quando vazia. @default '' */\n @Input()\n public placeholder: string = '';\n\n /** @description Instrução (prompt) enviada ao serviço de IA para gerar o conteúdo sugerido. */\n @Input()\n public prompt!: string;\n\n /** @description Torna a área de texto somente leitura. @default false */\n @Input()\n public readonly: boolean = false;\n\n /** @description Número de linhas visíveis da área de texto. @default 10 */\n @Input()\n public rows: number = 10;\n\n /** @description Número de colunas visíveis da área de texto. @default 10 */\n @Input()\n public cols: number = 10;\n\n /** @description Habilita o botão de reconhecimento de voz para ditado de texto. @default false */\n @Input()\n public speechRecognition = false;\n\n /** @description Quando `true`, o histórico de gerações anteriores é enviado ao serviço de IA como contexto. @default false */\n @Input()\n public keepContext = false;\n\n /** @description Texto de placeholder exibido no campo de reconhecimento de voz. @default '' */\n @Input()\n speechRecognitionPlaceholder = '';\n\n /** @description Limite máximo de caracteres permitidos na área de texto. `null` desabilita o limite. @default null */\n @Input()\n maxLength: number | null = null;\n\n /** @description Estilos CSS inline aplicados à área de texto interna. */\n textAreaStyle = input<Partial<CSSStyleDeclaration>>({});\n\n public formGroup: FormGroup = new FormGroup({});\n public contextForm: FormGroup = new FormGroup({});\n public isVisible = false;\n public isLoading = false;\n public value = '';\n\n private _onChange?: (value: string) => void;\n private _onTouched?: () => void;\n\n constructor(\n private readonly _iassistService: IAssistService, // TODO: Mover pra uma pasta global\n private readonly _formBuilder: FormBuilder,\n private readonly _translateService: TranslateService,\n public speechRecognitionService: SpeechRecognitionService,\n\n private injector: Injector, // Necessário para o decorator DeprecatedSelector funcionar\n ) {}\n\n public ngOnInit(): void {\n this._createDialogFormGroup();\n }\n\n public writeValue(value: string): void {\n this.value = value;\n }\n\n public registerOnChange(onChange: (value: string) => void): void {\n this._onChange = onChange;\n }\n\n public registerOnTouched(onTouched: () => void): void {\n this._onTouched = onTouched;\n }\n\n public onValueChange(value: string): void {\n this.value = value;\n this._onChange?.(value);\n }\n\n public showDialog(): void {\n this.isVisible = true;\n if (this._onTouched) {\n this._onTouched();\n }\n }\n\n public hideDialog(): void {\n this.isVisible = false;\n }\n\n public onHideDialog(): void {\n if (this.isVisible === false) {\n this.formGroup.get('context')?.setValue('');\n }\n }\n\n public submitContext(): void {\n const context = this.formGroup.get('context');\n if (!context) {\n return;\n }\n this.isLoading = true;\n\n this._iassistService\n .askIA(context.value, {\n id: this.id,\n label: this.label,\n placeholder: this.placeholder,\n prompt: this.prompt,\n })\n .pipe(\n catchError((err: HttpErrorResponse) => {\n this.isLoading = false;\n return throwError(() => new Error(err.message));\n }),\n )\n .subscribe((res: IAssistResponse) => {\n this.value = res.text;\n this._onChange?.(this.value);\n this.isLoading = false;\n });\n\n this.hideDialog();\n }\n\n private _createDialogFormGroup(): void {\n this.formGroup = this._formBuilder.group({\n context: [''],\n });\n }\n}\n\n","<s-loading-state\n [loading]=\"isLoading\"\n [blockWindow]=\"true\"\n>\n</s-loading-state>\n\n<s-dialog\n [(visible)]=\"isVisible\"\n [escapeOnEsc]=\"false\"\n [destroyClickOutside]=\"false\"\n size=\"lg\"\n (visibleChange)=\"onHideDialog()\"\n>\n <ng-template sTemplate=\"header\">\n <div class=\"dialog-header\">\n <span class=\"iassist-icon\">\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </span>\n IAssist - Content Generator\n </div>\n </ng-template>\n\n <form [formGroup]=\"formGroup\">\n <label for=\"context\">{{ 'platform.angular_components.context' | translate }}</label>\n <s-textarea\n inputId=\"context\"\n formControlName=\"context\"\n [speechRecognition]=\"speechRecognition\"\n [keepContext]=\"keepContext\"\n />\n </form>\n\n <ng-template sTemplate=\"footer\">\n <div class=\"footer-content\">\n <s-button\n id=\"-submit-button\"\n type=\"button\"\n [label]=\"'platform.angular_components.generate_text' | translate\"\n (clicked)=\"submitContext()\"\n sTooltip=\"(ALT + SHIFT + S)\"\n showDelay=\"500\"\n >\n </s-button>\n <s-button\n id=\"-cancel-button\"\n type=\"button\"\n priority=\"link\"\n [label]=\"'platform.angular_components.cancel' | translate\"\n (clicked)=\"hideDialog()\"\n sTooltip=\"(ALT + SHIFT + C)\"\n showDelay=\"500\"\n >\n </s-button>\n </div>\n </ng-template>\n</s-dialog>\n\n<div class=\"textarea-ia\">\n <s-textarea\n #textAreaElement\n [inputId]=\"id\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"\n [rows]=\"rows\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [keepContext]=\"keepContext\"\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\n [maxLength]=\"maxLength\"\n [speechRecognition]=\"speechRecognition\"\n >\n </s-textarea>\n <!--TODO: Tooltip em propriedade-->\n <button\n class=\"iassist-button\"\n [class.speech-recognition]=\"speechRecognition && speechRecognitionService.hasSupportSpeechRecognition\"\n (click)=\"showDialog()\"\n sTooltip=\"IAssist - Content Generator\"\n >\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </button>\n</div>\n\n<ng-template #iassistIcon>\n <div style=\"width: 100%; height: 100%;\">\n <span *sSVGFactory=\"'iassist'\"></span>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { SVGFactoryModule } from '@seniorsistemas/angular-components/common';\nimport { DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { LoadingStateModule } from '@seniorsistemas/angular-components/loading-state';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\nimport { TextAreaModule } from '@seniorsistemas/angular-components/text-area';\nimport { ContentGeneratorComponent } from './content-generator.component';\n\n@NgModule({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n ButtonModule,\n LoadingStateModule,\n NgTemplateOutlet,\n TextAreaModule,\n DialogComponent,\n TemplateModule,\n SVGFactoryModule,\n ],\n declarations: [ContentGeneratorComponent],\n exports: [ContentGeneratorComponent],\n})\nexport class ContentGeneratorModule {}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IAssistService","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"seniorsistemas-angular-components-content-generator.mjs","sources":["../../projects/angular-components/content-generator/src/lib/services/IAssist/iassist.service.ts","../../projects/angular-components/content-generator/src/lib/content-generator/content-generator.component.ts","../../projects/angular-components/content-generator/src/lib/content-generator/content-generator.component.html","../../projects/angular-components/content-generator/src/lib/content-generator/content-generator.module.ts","../../projects/angular-components/content-generator/src/seniorsistemas-angular-components-content-generator.ts"],"sourcesContent":["/* eslint-disable max-len */\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { IAssistInputData } from './models/iassist-input-data';\nimport { IAssistResponse } from './models/iassist-response';\nimport { ToastService } from \"@seniorsistemas/angular-components/toast\";\n\n@Injectable({ providedIn: 'root' })\nexport class IAssistService {\n\tconstructor(\n\t\tprivate readonly http: HttpClient,\n\t\tprivate readonly toastService: ToastService,\n\t) { }\n\n\tpublic askIA(context: string, data: IAssistInputData): Observable<IAssistResponse> {\n\t\tconst prompt: string = data.prompt\n\t\t\t? this._replacePlaceholder(context, data)\n\t\t\t: this._createPrompt(context, data);\n\n\t\treturn this.http\n\t\t\t.post<IAssistResponse>('platform/iassist/api/latest/completions', {\n\t\t\t\tprompt,\n\t\t\t\tprovider: 'OPEN_AI',\n\t\t\t\tparameters: {\n\t\t\t\t\tmodel: 'gpt-3.5-turbo',\n\t\t\t\t\tmax_tokens: 700,\n\t\t\t\t\ttemperature: 1,\n\t\t\t\t},\n\t\t\t})\n\t\t\t.pipe(\n\t\t\t\tcatchError((err: HttpErrorResponse) => {\n\t\t\t\t\tthis.toastService.show({\n\t\t\t\t\t\tseverity: 'error',\n\t\t\t\t\t\ttitle: err.status ? String(err.status) : 'Error',\n\t\t\t\t\t\ttext: (err.error && err.error.message) || err.statusText || err.message || 'Error',\n\t\t\t\t\t});\n\t\t\t\t\treturn throwError(() => new Error(err.message));\n\t\t\t\t}),\n\t\t\t);\n\t}\n\n\tprivate _replacePlaceholder(context: string, data: IAssistInputData): string {\n\t\tconst values = { ...data, context };\n\t\tdelete (values as Partial<IAssistInputData>).prompt;\n\n\t\tlet result = data.prompt;\n\t\tfor (const key in { ...values, context: context }) {\n\t\t\tconst placeholder = new RegExp(`{{\\\\s*${key}\\\\s*}}`, 'g');\n\t\t\tresult = result.replace(placeholder, values[key as keyof typeof values]);\n\t\t}\n\n\t\tconsole.log('prompt', result);\n\t\treturn result;\n\t}\n\n\tprivate _createPrompt(context: string, data: IAssistInputData): string {\n\t\treturn `Crie um texto genérico para preencher o campo de textarea.\n ${data.label ? `O campo tem o label ${data.label}.` : ''}\n ${data.id ? `O campo tem o id ${data.id}.` : ''}\n ${data.placeholder ? `Considere as instruções/sugestões do placeholder: ${data.placeholder}.` : ''}\n Baseie-se no contexto informado pelo usuário: '${context}'.\n O texto deve ser formal e conter informações pertinentes a um campo como este, como se um usuário real tivesse preenchido com as informações necessárias.\n O texto deve ser neutro com relação a generos, raças, religiões, etc.\n O texto deve ser impessoal e não deve conter informações pessoais do usuário.\n Não direcione o texto a ninguém, não use expressões como: caro, atenciosamente. gostaria, agradeço. O texto deve ser genérico.\n\n Exemplos de texto:\n Um campo de descrição de usuário: \"Usuário com 20 anos, estudante de engenharia, gosta de jogar futebol e assistir filmes.\"\n Outro exemplo de descrição de usuário: \"Usuário administrador, com acesso total ao sistema, responsável por gerenciar os usuários e os produtos.\"\n Um campo de descrição de um produto: \"O produto é um celular, com tela de 6 polegadas, 128GB de armazenamento, 4GB de memória RAM, câmera de 12MP e bateria de 4000mAh.\"\n Outro exemplo de descrição de produto: \"O produto é uma geladeira, com capacidade de 500 litros, 2 portas, cor branca, com freezer e gaveta de legumes.\"\n Outro exemplo de descrição de produto: \"O produto é uma camiseta, tamanho M, cor azul, 100% algodão, com estampa de um gato.\"\n\n Em caso de contexto incompleto crie um texto genérico, como se fosse um exemplo de preenchimento do campo.\n O texto é para um campo de textarea, então escreva um texto sucinto.\n Exiba apenas o texto do output`;\n\t}\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { Component, forwardRef, input, Input, OnInit, viewChild, ViewEncapsulation } from '@angular/core';\n\nimport { Injector } from '@angular/core';\n\nimport { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { TranslateService } from '@ngx-translate/core';\nimport {\n DEPRECATED_CONFIG,\n DeprecatedSelectorDirective,\n} from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { SpeechRecognitionService } from '@seniorsistemas/angular-components/speech-recognition';\nimport { TextAreaComponent } from '@seniorsistemas/angular-components/text-area';\nimport { throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { IAssistService } from '../services/IAssist/iassist.service';\nimport { IAssistResponse } from '../services/IAssist/models/iassist-response';\n\n/**\n * @description Componente de área de texto com geração de conteúdo por inteligência artificial.\n * Integra-se ao serviço IAssist para sugerir e completar textos com base em um prompt configurável.\n * Suporta reconhecimento de voz opcional e mantém contexto entre gerações quando `keepContext` é `true`.\n * Implementa {@link ControlValueAccessor} para uso em formulários Angular.\n *\n * @example\n * ```html\n * <s-content-generator\n * formControlName=\"descricao\"\n * label=\"Descrição\"\n * prompt=\"Gere uma descrição para o produto\"\n * [rows]=\"5\"\n * [speechRecognition]=\"true\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n selector: 's-content-generator, s-text-area-ia',\n templateUrl: './content-generator.component.html',\n styleUrls: ['./content-generator.component.scss'],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ContentGeneratorComponent),\n multi: true,\n },\n {\n provide: DEPRECATED_CONFIG,\n useValue: {\n oldSelector: 's-text-area-ia',\n newSelector: 's-content-generator',\n removalVersion: '20.0.0',\n },\n },\n ],\n hostDirectives: [DeprecatedSelectorDirective],\n encapsulation: ViewEncapsulation.None,\n})\nexport class ContentGeneratorComponent implements OnInit, ControlValueAccessor {\n textArea = viewChild<TextAreaComponent>('textAreaElement');\n private static id = 0;\n\n /** @description Identificador único do componente no DOM. Gerado automaticamente se não informado. */\n @Input()\n public id = `ContentGenerator_${ContentGeneratorComponent.id--}`;\n\n /** @description Label exibido acima da área de texto. */\n @Input()\n public label!: string;\n\n /** @description Texto de placeholder exibido na área de texto quando vazia. @default '' */\n @Input()\n public placeholder: string = '';\n\n /** @description Instrução (prompt) enviada ao serviço de IA para gerar o conteúdo sugerido. */\n @Input()\n public prompt!: string;\n\n /** @description Torna a área de texto somente leitura. @default false */\n @Input()\n public readonly: boolean = false;\n\n /** @description Número de linhas visíveis da área de texto. @default 10 */\n @Input()\n public rows: number = 10;\n\n /** @description Número de colunas visíveis da área de texto. @default 10 */\n @Input()\n public cols: number = 10;\n\n /** @description Habilita o botão de reconhecimento de voz para ditado de texto. @default false */\n @Input()\n public speechRecognition = false;\n\n /** @description Quando `true`, o histórico de gerações anteriores é enviado ao serviço de IA como contexto. @default false */\n @Input()\n public keepContext = false;\n\n /** @description Texto de placeholder exibido no campo de reconhecimento de voz. @default '' */\n @Input()\n speechRecognitionPlaceholder = '';\n\n /** @description Limite máximo de caracteres permitidos na área de texto. `null` desabilita o limite. @default null */\n @Input()\n maxLength: number | null = null;\n\n /** @description Estilos CSS inline aplicados à área de texto interna. */\n textAreaStyle = input<Partial<CSSStyleDeclaration>>({});\n\n public formGroup: FormGroup = new FormGroup({});\n public contextForm: FormGroup = new FormGroup({});\n public isVisible = false;\n public isLoading = false;\n public value = '';\n\n private _onChange?: (value: string) => void;\n private _onTouched?: () => void;\n\n constructor(\n private readonly _iassistService: IAssistService, // TODO: Mover pra uma pasta global\n private readonly _formBuilder: FormBuilder,\n private readonly _translateService: TranslateService,\n public speechRecognitionService: SpeechRecognitionService,\n\n private injector: Injector, // Necessário para o decorator DeprecatedSelector funcionar\n ) {}\n\n public ngOnInit(): void {\n this._createDialogFormGroup();\n }\n\n public writeValue(value: string): void {\n this.value = value;\n }\n\n public registerOnChange(onChange: (value: string) => void): void {\n this._onChange = onChange;\n }\n\n public registerOnTouched(onTouched: () => void): void {\n this._onTouched = onTouched;\n }\n\n public onValueChange(value: string): void {\n this.value = value;\n this._onChange?.(value);\n }\n\n public showDialog(): void {\n this.isVisible = true;\n if (this._onTouched) {\n this._onTouched();\n }\n }\n\n public hideDialog(): void {\n this.isVisible = false;\n }\n\n public onHideDialog(): void {\n if (this.isVisible === false) {\n this.formGroup.get('context')?.setValue('');\n }\n }\n\n public submitContext(): void {\n const context = this.formGroup.get('context');\n if (!context) {\n return;\n }\n this.isLoading = true;\n\n this._iassistService\n .askIA(context.value, {\n id: this.id,\n label: this.label,\n placeholder: this.placeholder,\n prompt: this.prompt,\n })\n .pipe(\n catchError((err: HttpErrorResponse) => {\n this.isLoading = false;\n return throwError(() => new Error(err.message));\n }),\n )\n .subscribe((res: IAssistResponse) => {\n this.value = res.text;\n this._onChange?.(this.value);\n this.isLoading = false;\n });\n\n this.hideDialog();\n }\n\n private _createDialogFormGroup(): void {\n this.formGroup = this._formBuilder.group({\n context: [''],\n });\n }\n}\n\n","<s-loading-state\n [loading]=\"isLoading\"\n [blockWindow]=\"true\"\n>\n</s-loading-state>\n\n<s-dialog\n [(visible)]=\"isVisible\"\n [escapeOnEsc]=\"false\"\n [destroyClickOutside]=\"false\"\n size=\"lg\"\n (visibleChange)=\"onHideDialog()\"\n>\n <ng-template sTemplate=\"header\">\n <div class=\"dialog-header\">\n <span class=\"iassist-icon\">\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </span>\n IAssist - Content Generator\n </div>\n </ng-template>\n\n <form [formGroup]=\"formGroup\">\n <label for=\"context\">{{ 'platform.angular_components.context' | translate }}</label>\n <s-textarea\n inputId=\"context\"\n formControlName=\"context\"\n [speechRecognition]=\"speechRecognition\"\n [keepContext]=\"keepContext\"\n />\n </form>\n\n <ng-template sTemplate=\"footer\">\n <div class=\"footer-content\">\n <s-button\n id=\"-submit-button\"\n type=\"button\"\n [label]=\"'platform.angular_components.generate_text' | translate\"\n (clicked)=\"submitContext()\"\n sTooltip=\"(ALT + SHIFT + S)\"\n showDelay=\"500\"\n >\n </s-button>\n <s-button\n id=\"-cancel-button\"\n type=\"button\"\n priority=\"link\"\n [label]=\"'platform.angular_components.cancel' | translate\"\n (clicked)=\"hideDialog()\"\n sTooltip=\"(ALT + SHIFT + C)\"\n showDelay=\"500\"\n >\n </s-button>\n </div>\n </ng-template>\n</s-dialog>\n\n<div class=\"textarea-ia\">\n <s-textarea\n #textAreaElement\n [inputId]=\"id\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"onValueChange($event)\"\n [rows]=\"rows\"\n [readOnly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [keepContext]=\"keepContext\"\n [speechRecognitionPlaceholder]=\"speechRecognitionPlaceholder\"\n [maxLength]=\"maxLength\"\n [speechRecognition]=\"speechRecognition\"\n >\n </s-textarea>\n <!--TODO: Tooltip em propriedade-->\n <button\n class=\"iassist-button\"\n [class.speech-recognition]=\"speechRecognition && speechRecognitionService.hasSupportSpeechRecognition\"\n (click)=\"showDialog()\"\n sTooltip=\"IAssist - Content Generator\"\n >\n <ng-container [ngTemplateOutlet]=\"iassistIcon\"></ng-container>\n </button>\n</div>\n\n<ng-template #iassistIcon>\n <div style=\"width: 100%; height: 100%;\">\n <span *sSVGFactory=\"'iassist'\"></span>\n </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { TranslateModule } from '@ngx-translate/core';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonModule } from '@seniorsistemas/angular-components/button';\nimport { SVGFactoryModule } from '@seniorsistemas/angular-components/common';\nimport { DialogComponent } from '@seniorsistemas/angular-components/dialog';\nimport { LoadingStateModule } from '@seniorsistemas/angular-components/loading-state';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\nimport { TextAreaModule } from '@seniorsistemas/angular-components/text-area';\nimport { ContentGeneratorComponent } from './content-generator.component';\n\n@NgModule({\n imports: [\n FormsModule,\n ReactiveFormsModule,\n TranslateModule,\n ButtonModule,\n LoadingStateModule,\n NgTemplateOutlet,\n TextAreaModule,\n DialogComponent,\n TemplateModule,\n SVGFactoryModule,\n ],\n declarations: [ContentGeneratorComponent],\n exports: [ContentGeneratorComponent],\n})\nexport class ContentGeneratorModule {}\n\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.IAssistService","i2"],"mappings":"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"}
|
|
@@ -202,6 +202,12 @@ class DialogComponent {
|
|
|
202
202
|
* @default true
|
|
203
203
|
*/
|
|
204
204
|
destroyClickOutside = input(true);
|
|
205
|
+
/**
|
|
206
|
+
* @description Valor do aria-label do botão de fechar a dialog.
|
|
207
|
+
*
|
|
208
|
+
* @default 'Fechar'
|
|
209
|
+
*/
|
|
210
|
+
closeAriaLabel = input('Fechar');
|
|
205
211
|
viewContainerRef = inject(ViewContainerRef);
|
|
206
212
|
dialogService = inject(InternalDialogService);
|
|
207
213
|
template = viewChild('dialogTemplate');
|
|
@@ -264,11 +270,11 @@ class DialogComponent {
|
|
|
264
270
|
});
|
|
265
271
|
}
|
|
266
272
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
267
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DialogComponent, isStandalone: true, selector: "s-dialog", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, contentClassName: { classPropertyName: "contentClassName", publicName: "contentClassName", isSignal: true, isRequired: false, transformFunction: null }, escapeOnEsc: { classPropertyName: "escapeOnEsc", publicName: "escapeOnEsc", isSignal: true, isRequired: false, transformFunction: null }, destroyClickOutside: { classPropertyName: "destroyClickOutside", publicName: "destroyClickOutside", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange" }, providers: [{ provide: ActiveDialog, useValue: null }], queries: [{ propertyName: "templateDiretives", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "template", first: true, predicate: ["dialogTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n @if (activeDialog) {\n @let isSm = activeDialog.dialogSize === 'sm';\n @let isMd = activeDialog.dialogSize === 'md';\n @let isLg = activeDialog.dialogSize === 'lg';\n @let isXl = activeDialog.dialogSize === 'xl';\n @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n <div\n [class]=\"contentClassName()\"\n class=\"flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md
|
|
273
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DialogComponent, isStandalone: true, selector: "s-dialog", inputs: { header: { classPropertyName: "header", publicName: "header", isSignal: true, isRequired: false, transformFunction: null }, visible: { classPropertyName: "visible", publicName: "visible", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, contentClassName: { classPropertyName: "contentClassName", publicName: "contentClassName", isSignal: true, isRequired: false, transformFunction: null }, escapeOnEsc: { classPropertyName: "escapeOnEsc", publicName: "escapeOnEsc", isSignal: true, isRequired: false, transformFunction: null }, destroyClickOutside: { classPropertyName: "destroyClickOutside", publicName: "destroyClickOutside", isSignal: true, isRequired: false, transformFunction: null }, closeAriaLabel: { classPropertyName: "closeAriaLabel", publicName: "closeAriaLabel", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visible: "visibleChange" }, providers: [{ provide: ActiveDialog, useValue: null }], queries: [{ propertyName: "templateDiretives", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: "template", first: true, predicate: ["dialogTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n @if (activeDialog) {\n @let isSm = activeDialog.dialogSize === 'sm';\n @let isMd = activeDialog.dialogSize === 'md';\n @let isLg = activeDialog.dialogSize === 'lg';\n @let isXl = activeDialog.dialogSize === 'xl';\n @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n\n <div\n [class]=\"contentClassName()\"\n class=\"max-sm:h-screen max-sm:w-screen flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md\"\n [ngClass]=\"{\n 'max-w-[300px]': isSm,\n 'max-w-[500px]': isMd,\n 'max-w-[800px]': isLg,\n 'max-w-[1140px]': isXl,\n 'h-screen': isFullscreen,\n }\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog-main-title\"\n >\n <header class=\"flex flex-wrap justify-between gap-3 p-4 pb-0\">\n @let _header = headerTemplate();\n @if (_header) {\n <ng-container *ngTemplateOutlet=\"_header; context: activeDialogContext\"></ng-container>\n } @else {\n <h3 id=\"dialog-main-title\">{{ header() }}</h3>\n }\n\n <button\n type=\"button\"\n class=\"rounded flex cursor-pointer items-center justify-center border-none bg-transparent outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n [attr.aria-label]=\"closeAriaLabel()\"\n (click)=\"onDismiss()\"\n >\n <i\n class=\"fas fa-times\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </header>\n <hr class=\"mt-4 h-[1px] w-full bg-grayscale-20\" />\n\n <main class=\"flex-1 p-4\">\n @let _bodyTemplate = bodyTemplate();\n @if (_bodyTemplate) {\n <ng-container *ngTemplateOutlet=\"_bodyTemplate; context: activeDialogContext\"></ng-container>\n } @else {\n <ng-content></ng-content>\n }\n </main>\n\n @let footer = footerTemplate();\n @if (footer) {\n <footer class=\"flex flex-wrap gap-3 p-4 pt-0\">\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n <div class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"footer; context: activeDialogContext\"></ng-container>\n </div>\n </footer>\n }\n </div>\n }\n</ng-template>\n\n@if (visible() === undefined) {\n <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n}\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
268
274
|
}
|
|
269
275
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DialogComponent, decorators: [{
|
|
270
276
|
type: Component,
|
|
271
|
-
args: [{ selector: 's-dialog', standalone: true, imports: [NgTemplateOutlet, InteractiveContentDirective, NgClass], providers: [{ provide: ActiveDialog, useValue: null }], template: "@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n @if (activeDialog) {\n @let isSm = activeDialog.dialogSize === 'sm';\n @let isMd = activeDialog.dialogSize === 'md';\n @let isLg = activeDialog.dialogSize === 'lg';\n @let isXl = activeDialog.dialogSize === 'xl';\n @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n <div\n [class]=\"contentClassName()\"\n class=\"flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md
|
|
277
|
+
args: [{ selector: 's-dialog', standalone: true, imports: [NgTemplateOutlet, InteractiveContentDirective, NgClass], providers: [{ provide: ActiveDialog, useValue: null }], template: "@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n @if (activeDialog) {\n @let isSm = activeDialog.dialogSize === 'sm';\n @let isMd = activeDialog.dialogSize === 'md';\n @let isLg = activeDialog.dialogSize === 'lg';\n @let isXl = activeDialog.dialogSize === 'xl';\n @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n\n <div\n [class]=\"contentClassName()\"\n class=\"max-sm:h-screen max-sm:w-screen flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md\"\n [ngClass]=\"{\n 'max-w-[300px]': isSm,\n 'max-w-[500px]': isMd,\n 'max-w-[800px]': isLg,\n 'max-w-[1140px]': isXl,\n 'h-screen': isFullscreen,\n }\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog-main-title\"\n >\n <header class=\"flex flex-wrap justify-between gap-3 p-4 pb-0\">\n @let _header = headerTemplate();\n @if (_header) {\n <ng-container *ngTemplateOutlet=\"_header; context: activeDialogContext\"></ng-container>\n } @else {\n <h3 id=\"dialog-main-title\">{{ header() }}</h3>\n }\n\n <button\n type=\"button\"\n class=\"rounded flex cursor-pointer items-center justify-center border-none bg-transparent outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n [attr.aria-label]=\"closeAriaLabel()\"\n (click)=\"onDismiss()\"\n >\n <i\n class=\"fas fa-times\"\n aria-hidden=\"true\"\n ></i>\n </button>\n </header>\n <hr class=\"mt-4 h-[1px] w-full bg-grayscale-20\" />\n\n <main class=\"flex-1 p-4\">\n @let _bodyTemplate = bodyTemplate();\n @if (_bodyTemplate) {\n <ng-container *ngTemplateOutlet=\"_bodyTemplate; context: activeDialogContext\"></ng-container>\n } @else {\n <ng-content></ng-content>\n }\n </main>\n\n @let footer = footerTemplate();\n @if (footer) {\n <footer class=\"flex flex-wrap gap-3 p-4 pt-0\">\n <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n <div class=\"w-full\">\n <ng-container *ngTemplateOutlet=\"footer; context: activeDialogContext\"></ng-container>\n </div>\n </footer>\n }\n </div>\n }\n</ng-template>\n\n@if (visible() === undefined) {\n <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n}\n" }]
|
|
272
278
|
}], ctorParameters: () => [] });
|
|
273
279
|
|
|
274
280
|
/**
|