@praxisui/table-rule-builder 1.0.0-beta.10

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"praxisui-table-rule-builder.mjs","sources":["../../../projects/praxis-table-rule-builder/src/lib/effects/presets/default-presets.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/editors/estilo-editor.component.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/editors/layout-editor.component.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/editors/icone-badge-editor.component.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/editors/fundo-editor.component.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/editors/animacao-editor.component.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/editors/tooltip-editor.component.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/services/effect-registry.service.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/rule-effects-panel.component.ts","../../../projects/praxis-table-rule-builder/src/lib/effects/rule-effects-panel.component.html","../../../projects/praxis-table-rule-builder/src/lib/effects/apply-effects.util.ts","../../../projects/praxis-table-rule-builder/src/praxisui-table-rule-builder.ts"],"sourcesContent":["import { RuleEffectDefinition } from '../models/rule-effects.model';\n\nexport const DEFAULT_EFFECT_PRESETS: Record<string, RuleEffectDefinition> = {\n aprovado: {\n scope: 'row',\n estilo: { color: '#eafff5', bold: true },\n iconBadge: {\n icon: 'check_circle',\n iconColor: '#35D07F',\n iconPos: 'before',\n badgeText: 'Aprovado',\n badgeStyle: 'soft',\n badgeColor: '#2a8455',\n },\n background: { color: 'rgba(53,208,127,0.08)' },\n layout: { border: 'left', borderColor: '#35D07F', borderWidth: 3 },\n },\n alerta: {\n scope: 'row',\n estilo: { color: '#fff8e1', bold: true },\n iconBadge: {\n icon: 'warning',\n iconColor: '#FFC107',\n iconPos: 'before',\n badgeText: 'Atenção',\n badgeStyle: 'outline',\n badgeColor: '#FFC107',\n },\n background: { color: 'rgba(255,193,7,0.12)' },\n },\n erro: {\n scope: 'row',\n estilo: { color: '#ffeaea', bold: true },\n iconBadge: {\n icon: 'error',\n iconColor: '#EF5350',\n iconPos: 'before',\n badgeText: 'Erro',\n badgeStyle: 'solid',\n badgeColor: '#EF5350',\n },\n background: { color: 'rgba(239,83,80,0.10)' },\n },\n info: {\n scope: 'row',\n iconBadge: { icon: 'info', iconColor: '#64B5F6', iconPos: 'before' },\n background: { color: 'rgba(100,181,246,0.10)' },\n },\n};\n\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSliderModule } from '@angular/material/slider';\n\n@Component({\n selector: 'praxis-effects-estilo-editor',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonToggleModule,\n MatIconModule,\n MatSliderModule,\n ],\n template: `\n <div class=\"estilo-grid\" role=\"group\" aria-label=\"Editor de estilo\" [formGroup]=\"group\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do texto</mat-label>\n <input matInput type=\"text\" formControlName=\"color\" placeholder=\"#E7ECF6\" />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor de fundo do texto</mat-label>\n <input matInput type=\"text\" formControlName=\"bgColor\" placeholder=\"#122033\" />\n </mat-form-field>\n\n <div class=\"toggles\">\n <mat-button-toggle-group multiple>\n <mat-button-toggle [checked]=\"group.get('bold')?.value\" (change)=\"group.get('bold')?.setValue($event.source.checked)\" aria-label=\"Negrito\">\n <mat-icon>format_bold</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle [checked]=\"group.get('italic')?.value\" (change)=\"group.get('italic')?.setValue($event.source.checked)\" aria-label=\"Itálico\">\n <mat-icon>format_italic</mat-icon>\n </mat-button-toggle>\n <mat-button-toggle [checked]=\"group.get('underline')?.value\" (change)=\"group.get('underline')?.setValue($event.source.checked)\" aria-label=\"Sublinhado\">\n <mat-icon>format_underlined</mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Transformação</mat-label>\n <select matNativeControl formControlName=\"transform\" aria-label=\"Transformação do texto\">\n <option [ngValue]=\"null\">Nenhuma</option>\n <option value=\"uppercase\">MAIÚSCULAS</option>\n <option value=\"lowercase\">minúsculas</option>\n <option value=\"capitalize\">Capitalizar</option>\n </select>\n </mat-form-field>\n\n <div class=\"sliders\">\n <label class=\"slider\">\n <span>Opacidade</span>\n <mat-slider min=\"0\" max=\"1\" step=\"0.05\" [displayWith]=\"formatOpacity\">\n <input matSliderThumb formControlName=\"opacity\" />\n </mat-slider>\n </label>\n <label class=\"slider\">\n <span>Tamanho</span>\n <mat-slider min=\"-2\" max=\"2\" step=\"1\">\n <input matSliderThumb formControlName=\"fontScale\" />\n </mat-slider>\n </label>\n </div>\n </div>\n `,\n styles: [\n `\n .estilo-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 12px; align-items: start; }\n .toggles { display:flex; align-items:center; gap: 8px; }\n .sliders { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:12px; }\n .slider { display:flex; flex-direction: column; gap: 6px; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class EstiloEditorComponent {\n @Input() group!: FormGroup;\n // Public for template (strictTemplates): used by mat-slider\n formatOpacity(v: number | null): string { return (v ?? 0).toFixed(2); }\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'praxis-effects-layout-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonToggleModule, MatIconModule],\n template: `\n <div class=\"layout-grid\" role=\"group\" aria-label=\"Editor de layout\" [formGroup]=\"group\">\n <div class=\"borders\">\n <span class=\"lbl\">Borda</span>\n <mat-button-toggle-group [value]=\"group.get('border')?.value\" (change)=\"group.get('border')?.setValue($event.value)\" aria-label=\"Borda\">\n <mat-button-toggle value=\"none\"><mat-icon>crop_free</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"left\"><mat-icon>border_left</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"right\"><mat-icon>border_right</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"top\"><mat-icon>border_top</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"bottom\"><mat-icon>border_bottom</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"all\"><mat-icon>border_all</mat-icon></mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor da borda</mat-label>\n <input matInput type=\"text\" formControlName=\"borderColor\" placeholder=\"#487BFF\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Espessura</mat-label>\n <input matInput type=\"number\" formControlName=\"borderWidth\" placeholder=\"2\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Padding</mat-label>\n <input matInput type=\"number\" formControlName=\"padding\" placeholder=\"6\" />\n </mat-form-field>\n\n <div class=\"align\">\n <span class=\"lbl\">Alinhamento</span>\n <mat-button-toggle-group [value]=\"group.get('align')?.value\" (change)=\"group.get('align')?.setValue($event.value)\" aria-label=\"Alinhamento\">\n <mat-button-toggle value=\"start\"><mat-icon>format_align_left</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"center\"><mat-icon>format_align_center</mat-icon></mat-button-toggle>\n <mat-button-toggle value=\"end\"><mat-icon>format_align_right</mat-icon></mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Elevação (sombra)</mat-label>\n <input matInput type=\"number\" formControlName=\"elevation\" placeholder=\"6\" />\n </mat-form-field>\n </div>\n `,\n styles: [\n `\n .layout-grid { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:12px; align-items:center; }\n .borders, .align { display:flex; align-items:center; gap:8px; }\n .lbl { font-size:.85rem; opacity:.8; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LayoutEditorComponent {\n @Input() group!: FormGroup;\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatIconModule } from '@angular/material/icon';\n\n@Component({\n selector: 'praxis-effects-icone-badge-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatButtonToggleModule, MatIconModule],\n template: `\n <div class=\"icone-grid\" role=\"group\" aria-label=\"Editor de ícone e badge\" [formGroup]=\"group\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Ícone (mat-icon)</mat-label>\n <input matInput type=\"text\" formControlName=\"icon\" placeholder=\"check_circle\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do ícone</mat-label>\n <input matInput type=\"text\" formControlName=\"iconColor\" placeholder=\"#35D07F\" />\n </mat-form-field>\n\n <div class=\"pos\">\n <span class=\"lbl\">Posição do ícone</span>\n <mat-button-toggle-group [value]=\"group.get('iconPos')?.value\" (change)=\"group.get('iconPos')?.setValue($event.value)\" aria-label=\"Posição do ícone\">\n <mat-button-toggle value=\"before\">Antes</mat-button-toggle>\n <mat-button-toggle value=\"after\">Depois</mat-button-toggle>\n <mat-button-toggle value=\"overlay\">Sobreposto</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <mat-form-field appearance=\"outline\">\n <mat-label>Texto do badge</mat-label>\n <input matInput type=\"text\" formControlName=\"badgeText\" placeholder=\"Aprovado\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do badge</mat-label>\n <input matInput type=\"text\" formControlName=\"badgeColor\" placeholder=\"#2a8455\" />\n </mat-form-field>\n\n <div class=\"variant\">\n <span class=\"lbl\">Estilo</span>\n <mat-button-toggle-group [value]=\"group.get('badgeStyle')?.value\" (change)=\"group.get('badgeStyle')?.setValue($event.value)\" aria-label=\"Estilo do badge\">\n <mat-button-toggle value=\"solid\">Sólido</mat-button-toggle>\n <mat-button-toggle value=\"soft\">Suave</mat-button-toggle>\n <mat-button-toggle value=\"outline\">Contorno</mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n </div>\n `,\n styles: [\n `\n .icone-grid { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:12px; align-items:center; }\n .pos, .variant { display:flex; align-items:center; gap:8px; }\n .lbl { font-size:.85rem; opacity:.8; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconeBadgeEditorComponent {\n @Input() group!: FormGroup;\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSliderModule } from '@angular/material/slider';\n\n@Component({\n selector: 'praxis-effects-fundo-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, MatSliderModule],\n template: `\n <div class=\"fundo-grid\" role=\"group\" aria-label=\"Editor de fundo\" [formGroup]=\"group\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor</mat-label>\n <input matInput type=\"text\" formControlName=\"color\" placeholder=\"#122033\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Gradient CSS</mat-label>\n <input matInput type=\"text\" formControlName=\"gradient\" placeholder=\"linear-gradient(180deg, #202637, #1c2230)\" />\n </mat-form-field>\n\n <label class=\"slider\">\n <span>Transparência</span>\n <mat-slider min=\"0\" max=\"100\" step=\"5\">\n <input matSliderThumb formControlName=\"alpha\" />\n </mat-slider>\n </label>\n <label class=\"slider\">\n <span>Desfoque (px)</span>\n <mat-slider min=\"0\" max=\"20\" step=\"1\">\n <input matSliderThumb formControlName=\"blur\" />\n </mat-slider>\n </label>\n </div>\n `,\n styles: [\n `\n .fundo-grid { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:12px; align-items:center; }\n .full { grid-column: 1 / -1; }\n .slider { display:flex; flex-direction: column; gap: 6px; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FundoEditorComponent {\n @Input() group!: FormGroup;\n}\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'praxis-effects-animacao-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule],\n template: `\n <div class=\"anim-grid\" role=\"group\" aria-label=\"Editor de animação\" [formGroup]=\"group\">\n <mat-form-field appearance=\"outline\">\n <mat-label>Tipo</mat-label>\n <select matNativeControl formControlName=\"type\" aria-label=\"Tipo de animação\">\n <option value=\"pulse\">Pulse</option>\n <option value=\"blink\">Blink</option>\n <option value=\"grow\">Grow</option>\n <option value=\"fade\">Fade</option>\n <option value=\"slide-in\">Slide In</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Duração (ms)</mat-label>\n <input matInput type=\"number\" formControlName=\"durationMs\" placeholder=\"800\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay (ms)</mat-label>\n <input matInput type=\"number\" formControlName=\"delayMs\" placeholder=\"0\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Disparo</mat-label>\n <select matNativeControl formControlName=\"trigger\" aria-label=\"Disparo da animação\">\n <option value=\"onChange\">Ao mudar</option>\n <option value=\"onAppear\">Ao aparecer</option>\n <option value=\"onHover\">Ao passar o mouse</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Repetição</mat-label>\n <select matNativeControl formControlName=\"repeat\" aria-label=\"Repetição da animação\">\n <option value=\"once\">Uma vez</option>\n <option value=\"loop\">Loop</option>\n </select>\n </mat-form-field>\n </div>\n `,\n styles: [\n `\n .anim-grid { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:12px; align-items:center; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AnimacaoEditorComponent { @Input() group!: FormGroup; }\n","import { Component, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\n@Component({\n selector: 'praxis-effects-tooltip-editor',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule],\n template: `\n <div class=\"tooltip-grid\" role=\"group\" aria-label=\"Editor de tooltip\" [formGroup]=\"group\">\n <mat-form-field appearance=\"outline\" class=\"full\">\n <mat-label>Texto</mat-label>\n <input matInput type=\"text\" formControlName=\"text\" placeholder=\"Detalhes da célula\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Posição</mat-label>\n <select matNativeControl formControlName=\"position\" aria-label=\"Posição do tooltip\">\n <option value=\"top\">Topo</option>\n <option value=\"right\">Direita</option>\n <option value=\"bottom\">Baixo</option>\n <option value=\"left\">Esquerda</option>\n </select>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Cor do fundo</mat-label>\n <input matInput type=\"text\" formControlName=\"bgColor\" placeholder=\"#2E3142\" />\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>Delay (ms)</mat-label>\n <input matInput type=\"number\" formControlName=\"delayMs\" placeholder=\"300\" />\n </mat-form-field>\n </div>\n `,\n styles: [\n `\n .tooltip-grid { display:grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap:12px; align-items:center; }\n .full { grid-column: 1 / -1; }\n `,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TooltipEditorComponent { @Input() group!: FormGroup; }\n","import { Injectable } from '@angular/core';\n\nexport interface EffectEditorPlugin {\n id: 'estilo' | 'layout' | 'icone' | 'fundo' | 'animacao' | 'tooltip';\n label: string;\n icon: string;\n order: number;\n loadComponent?: () => Promise<any>;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class EffectRegistryService {\n private plugins: EffectEditorPlugin[] = [];\n\n register(plugin: EffectEditorPlugin) {\n if (this.plugins.find((p) => p.id === plugin.id)) return; // avoid duplicates\n this.plugins.push(plugin);\n this.plugins.sort((a, b) => a.order - b.order);\n }\n\n list(): EffectEditorPlugin[] {\n return this.plugins.slice();\n }\n}\n\n","import {\n ChangeDetectionStrategy,\n Component,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormBuilder, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { auditTime, takeUntil } from 'rxjs/operators';\n\nimport { RuleEffectDefinition, RuleScope } from './models/rule-effects.model';\nimport { DEFAULT_EFFECT_PRESETS } from './presets/default-presets';\nimport { EffectRegistryService } from './services/effect-registry.service';\n\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\n\nimport { EstiloEditorComponent } from './editors/estilo-editor.component';\nimport { LayoutEditorComponent } from './editors/layout-editor.component';\nimport { IconeBadgeEditorComponent } from './editors/icone-badge-editor.component';\nimport { FundoEditorComponent } from './editors/fundo-editor.component';\nimport { AnimacaoEditorComponent } from './editors/animacao-editor.component';\nimport { TooltipEditorComponent } from './editors/tooltip-editor.component';\n\n@Component({\n selector: 'praxis-rule-effects-panel',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatMenuModule,\n MatButtonToggleModule,\n EstiloEditorComponent,\n LayoutEditorComponent,\n IconeBadgeEditorComponent,\n FundoEditorComponent,\n AnimacaoEditorComponent,\n TooltipEditorComponent,\n ],\n templateUrl: './rule-effects-panel.component.html',\n styleUrls: ['./rule-effects-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RuleEffectsPanelComponent implements OnInit, OnDestroy {\n // i18n-friendly labels map\n labels: Record<string, string> = {\n 'panel.title': 'C. Efeitos',\n 'panel.subtitle': 'Configure estilos e elementos visuais quando a regra for verdadeira',\n 'tabs.estilo': 'Estilo',\n 'tabs.layout': 'Layout',\n 'tabs.icone': 'Ícone / Badge',\n 'tabs.fundo': 'Fundo',\n 'tabs.animacao': 'Animação',\n 'tabs.tooltip': 'Tooltip',\n 'preview.title': 'Pré-visualização',\n 'preview.hint': 'As mudanças acima refletem o estilo aplicado quando a condição é verdadeira.',\n 'advanced.title': 'Avançado',\n 'advanced.description': 'Descrição',\n 'actions.apply': 'Aplicar',\n 'actions.reset': 'Redefinir',\n 'presets.label': 'Presets',\n };\n t(key: string): string { return this.labels[key] ?? key; }\n\n @Input() scope: RuleScope = 'row';\n private _value?: RuleEffectDefinition;\n @Input() set value(v: RuleEffectDefinition | undefined) {\n this._value = v;\n if (v && this.effectsForm) this.patchForm(v);\n }\n get value() { return this._value; }\n\n @Output() valueChange = new EventEmitter<RuleEffectDefinition>();\n @Output() apply = new EventEmitter<void>();\n @Output() reset = new EventEmitter<void>();\n\n activeTab: 'estilo' | 'layout' | 'icone' | 'fundo' | 'animacao' | 'tooltip' = 'estilo';\n effectsForm!: FormGroup;\n destroy$ = new Subject<void>();\n\n isHovering = false;\n\n readonly tabOrder: Array<typeof this.activeTab> = ['estilo', 'layout', 'icone', 'fundo', 'animacao', 'tooltip'];\n\n constructor(private fb: FormBuilder, private registry: EffectRegistryService) {}\n\n ngOnInit() {\n // Register built-in editors for the registry (extensible)\n this.registry.register({ id: 'estilo', icon: 'text_format', label: this.t('tabs.estilo'), order: 1 });\n this.registry.register({ id: 'layout', icon: 'view_quilt', label: this.t('tabs.layout'), order: 2 });\n this.registry.register({ id: 'icone', icon: 'verified', label: this.t('tabs.icone'), order: 3 });\n this.registry.register({ id: 'fundo', icon: 'gradient', label: this.t('tabs.fundo'), order: 4 });\n this.registry.register({ id: 'animacao', icon: 'animation', label: this.t('tabs.animacao'), order: 5 });\n this.registry.register({ id: 'tooltip', icon: 'info', label: this.t('tabs.tooltip'), order: 6 });\n\n this.effectsForm = this.fb.group({\n description: [''],\n estilo: this.fb.group({\n color: ['#ffffff'],\n bgColor: [''],\n bold: [false],\n italic: [false],\n underline: [false],\n transform: [null],\n opacity: [1],\n fontScale: [0],\n }),\n layout: this.fb.group({\n border: ['none'],\n borderColor: ['#487BFF'],\n borderWidth: [2],\n padding: [6],\n align: ['start'],\n elevation: [6],\n }),\n iconBadge: this.fb.group({\n icon: ['check_circle'],\n iconColor: ['#35D07F'],\n iconPos: ['before'],\n badgeText: [''],\n badgeStyle: ['soft'],\n badgeColor: ['#2a8455'],\n }),\n background: this.fb.group({\n color: ['#122033'],\n gradient: [''],\n alpha: [0],\n blur: [0],\n }),\n animation: this.fb.group({\n type: ['pulse'],\n durationMs: [800],\n trigger: ['onChange'],\n repeat: ['once'],\n delayMs: [0],\n }),\n tooltip: this.fb.group({\n text: [''],\n position: ['bottom'],\n bgColor: ['#2E3142'],\n delayMs: [300],\n }),\n cssClass: [''],\n inlineStyle: [''],\n });\n\n this.effectsForm.valueChanges.pipe(auditTime(200), takeUntil(this.destroy$)).subscribe((formValue) => {\n const value: RuleEffectDefinition = { scope: this.scope, ...(formValue as any) };\n this.valueChange.emit(value);\n });\n\n if (this._value) this.patchForm(this._value);\n }\n\n patchForm(v: RuleEffectDefinition) {\n this.effectsForm.patchValue(v as any, { emitEvent: false });\n }\n\n setTab(tab: typeof this.activeTab) {\n this.activeTab = tab;\n }\n\n applyPreset(key: string) {\n const preset = DEFAULT_EFFECT_PRESETS[key];\n if (!preset) return;\n const merged: RuleEffectDefinition = { ...preset, scope: this.scope } as RuleEffectDefinition;\n this.patchForm(merged);\n this.valueChange.emit(merged);\n }\n\n onApply() {\n this.apply.emit();\n }\n\n onReset() {\n this.effectsForm.reset();\n this.reset.emit();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n // Typed subgroup getters for strict template type checking\n get estiloGroup(): FormGroup { return this.effectsForm.get('estilo') as FormGroup; }\n get layoutGroup(): FormGroup { return this.effectsForm.get('layout') as FormGroup; }\n get iconBadgeGroup(): FormGroup { return this.effectsForm.get('iconBadge') as FormGroup; }\n get backgroundGroup(): FormGroup { return this.effectsForm.get('background') as FormGroup; }\n get animationGroup(): FormGroup { return this.effectsForm.get('animation') as FormGroup; }\n get tooltipGroup(): FormGroup { return this.effectsForm.get('tooltip') as FormGroup; }\n\n // Safe access for template — avoids TS casts in templates\n get formValue(): RuleEffectDefinition {\n const v = (this.effectsForm?.value || {}) as any;\n return { scope: this.scope, ...v } as RuleEffectDefinition;\n }\n\n // A11y: keyboard navigation for tabs\n onTabsKeydown(event: KeyboardEvent) {\n if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n event.preventDefault();\n const idx = this.tabOrder.indexOf(this.activeTab);\n const next = event.key === 'ArrowRight' ? (idx + 1) % this.tabOrder.length : (idx - 1 + this.tabOrder.length) % this.tabOrder.length;\n this.activeTab = this.tabOrder[next];\n }\n\n onHoverPreview(over: boolean) {\n this.isHovering = over;\n }\n\n // Preview helpers\n public computeTextStyle(v: RuleEffectDefinition): any {\n const s = v?.estilo || {};\n const size = s.fontScale ? `calc(1rem + ${s.fontScale * 0.1}rem)` : '1rem';\n const transform = s.transform ?? 'none';\n return {\n color: s.color || null,\n fontWeight: s.bold ? 600 : 400,\n fontStyle: s.italic ? 'italic' : 'normal',\n textDecoration: s.underline ? 'underline' : 'none',\n opacity: s.opacity ?? 1,\n fontSize: size,\n textTransform:\n transform === 'uppercase'\n ? 'uppercase'\n : transform === 'lowercase'\n ? 'lowercase'\n : transform === 'capitalize'\n ? 'capitalize'\n : 'none',\n } as any;\n }\n\n public computeCellStyle(v: RuleEffectDefinition): any {\n const b = v?.background || {};\n const ly = v?.layout || {};\n const bg = b.gradient ? b.gradient : (b.color || 'transparent');\n const alpha = (b.alpha ?? 0) / 100;\n const bgWithAlpha = b.color ? `color-mix(in srgb, ${b.color} ${100 - alpha * 100}%, transparent)` : bg;\n\n const borderColor = ly.borderColor || 'transparent';\n const borderWidth = (ly.borderWidth ?? 0) + 'px';\n const borderStyle = ly.border === 'none' ? 'none' : `${borderWidth} solid ${borderColor}`;\n\n const base: any = {\n background: bgWithAlpha,\n filter: b.blur ? `blur(${b.blur}px)` : 'none',\n padding: (ly.padding ?? 6) + 'px',\n boxShadow: ly.elevation ? `0 ${Math.min(ly.elevation, 24)}px ${Math.min(ly.elevation, 24)}px rgba(0,0,0,.25)` : 'none',\n justifyContent: ly.align === 'center' ? 'center' : ly.align === 'end' ? 'flex-end' : 'flex-start',\n };\n\n if (ly.border === 'all') base.border = borderStyle;\n if (ly.border === 'left') base.borderLeft = borderStyle;\n if (ly.border === 'right') base.borderRight = borderStyle;\n if (ly.border === 'top') base.borderTop = borderStyle;\n if (ly.border === 'bottom') base.borderBottom = borderStyle;\n\n return base;\n }\n\n public computeCellClass(v: RuleEffectDefinition): any {\n const anim = v?.animation;\n const triggerHover = anim?.trigger === 'onHover';\n const triggerAppear = anim?.trigger === 'onAppear';\n const triggerChange = anim?.trigger === 'onChange';\n const repeatClass = anim?.repeat === 'loop' ? 'anim--loop' : 'anim--once';\n const active =\n (triggerHover && this.isHovering) ||\n triggerAppear ||\n triggerChange; // we don’t track changes here, preview is always ‘changed’\n return {\n [`anim--${anim?.type}`]: !!anim?.type && active,\n [repeatClass]: !!anim?.type && active,\n 'icon--overlay': v?.iconBadge?.icon && v?.iconBadge?.iconPos === 'overlay',\n };\n }\n\n public badgeBackground(v: RuleEffectDefinition): string | null {\n const s = v?.iconBadge;\n if (!s?.badgeText) return null;\n if (s.badgeStyle === 'solid') return s.badgeColor || '#444';\n if (s.badgeStyle === 'soft') return `linear-gradient(180deg, ${s.badgeColor || '#444'}, #00000055)`;\n if (s.badgeStyle === 'outline') return 'transparent';\n return null;\n }\n\n public badgeBorder(v: RuleEffectDefinition): string | null {\n const s = v?.iconBadge;\n return s?.badgeStyle === 'outline' ? s.badgeColor || '#777' : '#0000';\n }\n}\n","<div class=\"rulefx\">\n <header class=\"rulefx__header\">\n <h3 class=\"rulefx__title\">{{ t('panel.title') }}</h3>\n <p class=\"rulefx__subtitle\">{{ t('panel.subtitle') }}</p>\n <div class=\"rulefx__actions\">\n <button mat-stroked-button [matMenuTriggerFor]=\"presetsMenu\" [attr.aria-label]=\"t('presets.label')\">\n <mat-icon>bookmarks</mat-icon>\n {{ t('presets.label') }}\n </button>\n <mat-menu #presetsMenu=\"matMenu\">\n <button mat-menu-item (click)=\"applyPreset('aprovado')\"><mat-icon>check_circle</mat-icon> Aprovado</button>\n <button mat-menu-item (click)=\"applyPreset('alerta')\"><mat-icon>warning</mat-icon> Alerta</button>\n <button mat-menu-item (click)=\"applyPreset('erro')\"><mat-icon>error</mat-icon> Erro</button>\n <button mat-menu-item (click)=\"applyPreset('info')\"><mat-icon>info</mat-icon> Info</button>\n </mat-menu>\n <button mat-flat-button color=\"primary\" (click)=\"onApply()\" [attr.aria-label]=\"t('actions.apply')\" [matTooltip]=\"t('actions.apply')\" matTooltipPosition=\"below\">\n <mat-icon>done</mat-icon>\n {{ t('actions.apply') }}\n </button>\n <button mat-stroked-button (click)=\"onReset()\" [attr.aria-label]=\"t('actions.reset')\" [matTooltip]=\"t('actions.reset')\" matTooltipPosition=\"below\">\n <mat-icon>restart_alt</mat-icon>\n {{ t('actions.reset') }}\n </button>\n </div>\n </header>\n\n <!-- Ribbon com seis categorias -->\n <nav\n class=\"rulefx__ribbon\"\n aria-label=\"Categorias de efeitos\"\n role=\"tablist\"\n (keydown)=\"onTabsKeydown($event)\"\n >\n <button\n class=\"ribbon__tab\"\n [class.is-active]=\"activeTab === 'estilo'\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'estilo'\"\n [attr.tabindex]=\"activeTab === 'estilo' ? 0 : -1\"\n (click)=\"setTab('estilo')\"\n [matTooltip]=\"t('tabs.estilo')\"\n matTooltipPosition=\"below\"\n >\n <span class=\"material-icons\">text_format</span>\n <span>{{ t('tabs.estilo') }}</span>\n </button>\n <button\n class=\"ribbon__tab\"\n [class.is-active]=\"activeTab === 'layout'\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'layout'\"\n [attr.tabindex]=\"activeTab === 'layout' ? 0 : -1\"\n (click)=\"setTab('layout')\"\n [matTooltip]=\"t('tabs.layout')\"\n matTooltipPosition=\"below\"\n >\n <span class=\"material-icons\">view_quilt</span>\n <span>{{ t('tabs.layout') }}</span>\n </button>\n <button\n class=\"ribbon__tab\"\n [class.is-active]=\"activeTab === 'icone'\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'icone'\"\n [attr.tabindex]=\"activeTab === 'icone' ? 0 : -1\"\n (click)=\"setTab('icone')\"\n [matTooltip]=\"t('tabs.icone')\"\n matTooltipPosition=\"below\"\n >\n <span class=\"material-icons\">verified</span>\n <span>{{ t('tabs.icone') }}</span>\n </button>\n <button\n class=\"ribbon__tab\"\n [class.is-active]=\"activeTab === 'fundo'\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'fundo'\"\n [attr.tabindex]=\"activeTab === 'fundo' ? 0 : -1\"\n (click)=\"setTab('fundo')\"\n [matTooltip]=\"t('tabs.fundo')\"\n matTooltipPosition=\"below\"\n >\n <span class=\"material-icons\">gradient</span>\n <span>{{ t('tabs.fundo') }}</span>\n </button>\n <button\n class=\"ribbon__tab\"\n [class.is-active]=\"activeTab === 'animacao'\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'animacao'\"\n [attr.tabindex]=\"activeTab === 'animacao' ? 0 : -1\"\n (click)=\"setTab('animacao')\"\n [matTooltip]=\"t('tabs.animacao')\"\n matTooltipPosition=\"below\"\n >\n <span class=\"material-icons\">animation</span>\n <span>{{ t('tabs.animacao') }}</span>\n </button>\n <button\n class=\"ribbon__tab\"\n [class.is-active]=\"activeTab === 'tooltip'\"\n type=\"button\"\n role=\"tab\"\n [attr.aria-selected]=\"activeTab === 'tooltip'\"\n [attr.tabindex]=\"activeTab === 'tooltip' ? 0 : -1\"\n (click)=\"setTab('tooltip')\"\n [matTooltip]=\"t('tabs.tooltip')\"\n matTooltipPosition=\"below\"\n >\n <span class=\"material-icons\">info</span>\n <span>{{ t('tabs.tooltip') }}</span>\n </button>\n </nav>\n\n <!-- Quickbar contextual -->\n <section class=\"rulefx__quickbar\" aria-live=\"polite\" *ngIf=\"effectsForm\">\n <ng-container [ngSwitch]=\"activeTab\">\n <ng-container *ngSwitchCase=\"'estilo'\">\n <praxis-effects-estilo-editor [group]=\"estiloGroup\"></praxis-effects-estilo-editor>\n </ng-container>\n <ng-container *ngSwitchCase=\"'layout'\">\n <praxis-effects-layout-editor [group]=\"layoutGroup\"></praxis-effects-layout-editor>\n </ng-container>\n <ng-container *ngSwitchCase=\"'icone'\">\n <praxis-effects-icone-badge-editor [group]=\"iconBadgeGroup\"></praxis-effects-icone-badge-editor>\n </ng-container>\n <ng-container *ngSwitchCase=\"'fundo'\">\n <praxis-effects-fundo-editor [group]=\"backgroundGroup\"></praxis-effects-fundo-editor>\n </ng-container>\n <ng-container *ngSwitchCase=\"'animacao'\">\n <praxis-effects-animacao-editor [group]=\"animationGroup\"></praxis-effects-animacao-editor>\n </ng-container>\n <ng-container *ngSwitchCase=\"'tooltip'\">\n <praxis-effects-tooltip-editor [group]=\"tooltipGroup\"></praxis-effects-tooltip-editor>\n </ng-container>\n </ng-container>\n </section>\n\n <!-- Pré-visualização e seção avançada -->\n <section class=\"rulefx__body\">\n <div class=\"rulefx__preview\">\n <div class=\"preview__title\">{{ t('preview.title') }}</div>\n\n <div\n class=\"preview__cell\"\n [ngStyle]=\"computeCellStyle(formValue)\"\n [ngClass]=\"computeCellClass(formValue)\"\n (mouseenter)=\"onHoverPreview(true)\"\n (mouseleave)=\"onHoverPreview(false)\"\n >\n <span\n *ngIf=\"formValue.iconBadge?.icon && formValue.iconBadge?.iconPos === 'before'\"\n class=\"material-icons preview__icon\"\n [style.color]=\"formValue.iconBadge?.iconColor\"\n >\n {{ formValue.iconBadge?.icon }}\n </span>\n\n <span class=\"preview__text\" [ngStyle]=\"computeTextStyle(formValue)\">\n Joana Silva — Ativo desde 2019\n </span>\n\n <span\n *ngIf=\"formValue.iconBadge?.badgeText\"\n class=\"preview__badge\"\n [ngStyle]=\"{ 'background': badgeBackground(formValue), 'border-color': badgeBorder(formValue) }\"\n >\n {{ formValue.iconBadge?.badgeText }}\n </span>\n\n <span\n *ngIf=\"formValue.iconBadge?.icon && formValue.iconBadge?.iconPos === 'after'\"\n class=\"material-icons preview__icon\"\n [style.color]=\"formValue.iconBadge?.iconColor\"\n >\n {{ formValue.iconBadge?.icon }}\n </span>\n </div>\n\n <p class=\"preview__hint\">{{ t('preview.hint') }}</p>\n </div>\n\n <div class=\"rulefx__advanced\">\n <details class=\"advanced__section\">\n <summary>{{ t('advanced.title') }}</summary>\n <div class=\"advanced__grid\" [formGroup]=\"effectsForm\">\n <label class=\"textctl\">\n <span>{{ t('advanced.description') }}</span>\n <input type=\"text\" formControlName=\"description\" placeholder=\"ex.: Destacar preços altos\" />\n </label>\n <label class=\"textctl\">\n <span>Classe CSS</span>\n <input type=\"text\" formControlName=\"cssClass\" placeholder=\"ex.: praxis-cell--alert\" />\n </label>\n <label class=\"textctl\">\n <span>Estilo inline</span>\n <input type=\"text\" formControlName=\"inlineStyle\" placeholder=\"ex.: text-shadow: 0 0 8px rgba(0,255,163,.5)\" />\n </label>\n </div>\n </details>\n </div>\n </section>\n</div>\n","import { RuleEffectDefinition } from './models/rule-effects.model';\n\nexport function toCellClassAndStyle(effect: RuleEffectDefinition): {\n classList: string[];\n style: Record<string, string>;\n} {\n const classList: string[] = [];\n const style: Record<string, string> = {};\n\n // Advanced class and inline style\n if (effect.cssClass) classList.push(effect.cssClass);\n if (effect.inlineStyle) style['cssText'] = effect.inlineStyle;\n\n // Background\n const b = effect.background || {};\n const ly = effect.layout || {};\n const bg = b.gradient ? b.gradient : (b.color || 'transparent');\n const alpha = (b.alpha ?? 0) / 100;\n const bgWithAlpha = b.color ? `color-mix(in srgb, ${b.color} ${100 - alpha * 100}%, transparent)` : bg;\n style['background'] = bgWithAlpha;\n if (b.blur) style['filter'] = `blur(${b.blur}px)`;\n\n // Layout\n if (ly.padding != null) style['padding'] = `${ly.padding}px`;\n if (ly.elevation) style['box-shadow'] = `0 ${Math.min(ly.elevation, 24)}px ${Math.min(ly.elevation, 24)}px rgba(0,0,0,.25)`;\n if (ly.align) style['justify-content'] = ly.align === 'center' ? 'center' : ly.align === 'end' ? 'flex-end' : 'flex-start';\n const borderColor = ly.borderColor || 'transparent';\n const borderWidth = (ly.borderWidth ?? 0) + 'px';\n const borderStyle = ly.border === 'none' ? 'none' : `${borderWidth} solid ${borderColor}`;\n switch (ly.border) {\n case 'all': style['border'] = borderStyle; break;\n case 'left': style['border-left'] = borderStyle; break;\n case 'right': style['border-right'] = borderStyle; break;\n case 'top': style['border-top'] = borderStyle; break;\n case 'bottom': style['border-bottom'] = borderStyle; break;\n }\n\n // Text (estilo)\n const s = effect.estilo || {};\n if (s.color) style['color'] = s.color;\n if (s.bgColor) style['background-color'] = s.bgColor;\n if (s.bold) style['font-weight'] = '600';\n if (s.italic) style['font-style'] = 'italic';\n if (s.underline) style['text-decoration'] = 'underline';\n if (s.opacity != null) style['opacity'] = String(s.opacity);\n if (s.transform) style['text-transform'] = s.transform;\n if (s.fontScale && s.fontScale !== 0) style['font-size'] = `calc(1rem + ${s.fontScale * 0.1}rem)`;\n\n // Icon overlay class\n if (effect.iconBadge?.iconPos === 'overlay') classList.push('icon--overlay');\n\n // Animation\n const anim = effect.animation;\n if (anim?.type) {\n classList.push(`anim--${anim.type}`);\n classList.push(anim.repeat === 'loop' ? 'anim--loop' : 'anim--once');\n if (anim.durationMs) style['animation-duration'] = `${anim.durationMs}ms`;\n if (anim.delayMs) style['animation-delay'] = `${anim.delayMs}ms`;\n }\n\n return { classList, style };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i4","i2.EffectRegistryService","i3","i6"],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,163 @@
1
+ import * as i0 from '@angular/core';
2
+ import { OnInit, OnDestroy, EventEmitter } from '@angular/core';
3
+ import { FormGroup, FormBuilder } from '@angular/forms';
4
+ import { Subject } from 'rxjs';
5
+
6
+ type RuleScope = 'cell' | 'row' | 'column' | 'table';
7
+ interface RuleEffectDefinition {
8
+ id?: string;
9
+ scope: RuleScope;
10
+ description?: string;
11
+ estilo?: {
12
+ color?: string;
13
+ bgColor?: string;
14
+ bold?: boolean;
15
+ italic?: boolean;
16
+ underline?: boolean;
17
+ transform?: 'uppercase' | 'lowercase' | 'capitalize' | null;
18
+ opacity?: number;
19
+ fontScale?: number;
20
+ };
21
+ layout?: {
22
+ border?: 'none' | 'left' | 'right' | 'top' | 'bottom' | 'all';
23
+ borderColor?: string;
24
+ borderWidth?: number;
25
+ padding?: number;
26
+ align?: 'start' | 'center' | 'end';
27
+ elevation?: number;
28
+ };
29
+ iconBadge?: {
30
+ icon?: string;
31
+ iconColor?: string;
32
+ iconPos?: 'before' | 'after' | 'overlay';
33
+ badgeText?: string;
34
+ badgeStyle?: 'solid' | 'soft' | 'outline';
35
+ badgeColor?: string;
36
+ };
37
+ background?: {
38
+ color?: string;
39
+ gradient?: string;
40
+ alpha?: number;
41
+ blur?: number;
42
+ };
43
+ animation?: {
44
+ type?: 'pulse' | 'blink' | 'grow' | 'fade' | 'slide-in';
45
+ durationMs?: number;
46
+ trigger?: 'onChange' | 'onAppear' | 'onHover';
47
+ repeat?: 'once' | 'loop';
48
+ delayMs?: number;
49
+ };
50
+ tooltip?: {
51
+ text?: string;
52
+ position?: 'top' | 'right' | 'bottom' | 'left';
53
+ bgColor?: string;
54
+ delayMs?: number;
55
+ };
56
+ cssClass?: string;
57
+ inlineStyle?: string;
58
+ }
59
+
60
+ interface EffectEditorPlugin {
61
+ id: 'estilo' | 'layout' | 'icone' | 'fundo' | 'animacao' | 'tooltip';
62
+ label: string;
63
+ icon: string;
64
+ order: number;
65
+ loadComponent?: () => Promise<any>;
66
+ }
67
+ declare class EffectRegistryService {
68
+ private plugins;
69
+ register(plugin: EffectEditorPlugin): void;
70
+ list(): EffectEditorPlugin[];
71
+ static ɵfac: i0.ɵɵFactoryDeclaration<EffectRegistryService, never>;
72
+ static ɵprov: i0.ɵɵInjectableDeclaration<EffectRegistryService>;
73
+ }
74
+
75
+ declare class RuleEffectsPanelComponent implements OnInit, OnDestroy {
76
+ private fb;
77
+ private registry;
78
+ labels: Record<string, string>;
79
+ t(key: string): string;
80
+ scope: RuleScope;
81
+ private _value?;
82
+ set value(v: RuleEffectDefinition | undefined);
83
+ get value(): RuleEffectDefinition | undefined;
84
+ valueChange: EventEmitter<RuleEffectDefinition>;
85
+ apply: EventEmitter<void>;
86
+ reset: EventEmitter<void>;
87
+ activeTab: 'estilo' | 'layout' | 'icone' | 'fundo' | 'animacao' | 'tooltip';
88
+ effectsForm: FormGroup;
89
+ destroy$: Subject<void>;
90
+ isHovering: boolean;
91
+ readonly tabOrder: Array<typeof this.activeTab>;
92
+ constructor(fb: FormBuilder, registry: EffectRegistryService);
93
+ ngOnInit(): void;
94
+ patchForm(v: RuleEffectDefinition): void;
95
+ setTab(tab: typeof this.activeTab): void;
96
+ applyPreset(key: string): void;
97
+ onApply(): void;
98
+ onReset(): void;
99
+ ngOnDestroy(): void;
100
+ get estiloGroup(): FormGroup;
101
+ get layoutGroup(): FormGroup;
102
+ get iconBadgeGroup(): FormGroup;
103
+ get backgroundGroup(): FormGroup;
104
+ get animationGroup(): FormGroup;
105
+ get tooltipGroup(): FormGroup;
106
+ get formValue(): RuleEffectDefinition;
107
+ onTabsKeydown(event: KeyboardEvent): void;
108
+ onHoverPreview(over: boolean): void;
109
+ computeTextStyle(v: RuleEffectDefinition): any;
110
+ computeCellStyle(v: RuleEffectDefinition): any;
111
+ computeCellClass(v: RuleEffectDefinition): any;
112
+ badgeBackground(v: RuleEffectDefinition): string | null;
113
+ badgeBorder(v: RuleEffectDefinition): string | null;
114
+ static ɵfac: i0.ɵɵFactoryDeclaration<RuleEffectsPanelComponent, never>;
115
+ static ɵcmp: i0.ɵɵComponentDeclaration<RuleEffectsPanelComponent, "praxis-rule-effects-panel", never, { "scope": { "alias": "scope"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "valueChange": "valueChange"; "apply": "apply"; "reset": "reset"; }, never, never, true, never>;
116
+ }
117
+
118
+ declare const DEFAULT_EFFECT_PRESETS: Record<string, RuleEffectDefinition>;
119
+
120
+ declare function toCellClassAndStyle(effect: RuleEffectDefinition): {
121
+ classList: string[];
122
+ style: Record<string, string>;
123
+ };
124
+
125
+ declare class EstiloEditorComponent {
126
+ group: FormGroup;
127
+ formatOpacity(v: number | null): string;
128
+ static ɵfac: i0.ɵɵFactoryDeclaration<EstiloEditorComponent, never>;
129
+ static ɵcmp: i0.ɵɵComponentDeclaration<EstiloEditorComponent, "praxis-effects-estilo-editor", never, { "group": { "alias": "group"; "required": false; }; }, {}, never, never, true, never>;
130
+ }
131
+
132
+ declare class LayoutEditorComponent {
133
+ group: FormGroup;
134
+ static ɵfac: i0.ɵɵFactoryDeclaration<LayoutEditorComponent, never>;
135
+ static ɵcmp: i0.ɵɵComponentDeclaration<LayoutEditorComponent, "praxis-effects-layout-editor", never, { "group": { "alias": "group"; "required": false; }; }, {}, never, never, true, never>;
136
+ }
137
+
138
+ declare class IconeBadgeEditorComponent {
139
+ group: FormGroup;
140
+ static ɵfac: i0.ɵɵFactoryDeclaration<IconeBadgeEditorComponent, never>;
141
+ static ɵcmp: i0.ɵɵComponentDeclaration<IconeBadgeEditorComponent, "praxis-effects-icone-badge-editor", never, { "group": { "alias": "group"; "required": false; }; }, {}, never, never, true, never>;
142
+ }
143
+
144
+ declare class FundoEditorComponent {
145
+ group: FormGroup;
146
+ static ɵfac: i0.ɵɵFactoryDeclaration<FundoEditorComponent, never>;
147
+ static ɵcmp: i0.ɵɵComponentDeclaration<FundoEditorComponent, "praxis-effects-fundo-editor", never, { "group": { "alias": "group"; "required": false; }; }, {}, never, never, true, never>;
148
+ }
149
+
150
+ declare class AnimacaoEditorComponent {
151
+ group: FormGroup;
152
+ static ɵfac: i0.ɵɵFactoryDeclaration<AnimacaoEditorComponent, never>;
153
+ static ɵcmp: i0.ɵɵComponentDeclaration<AnimacaoEditorComponent, "praxis-effects-animacao-editor", never, { "group": { "alias": "group"; "required": false; }; }, {}, never, never, true, never>;
154
+ }
155
+
156
+ declare class TooltipEditorComponent {
157
+ group: FormGroup;
158
+ static ɵfac: i0.ɵɵFactoryDeclaration<TooltipEditorComponent, never>;
159
+ static ɵcmp: i0.ɵɵComponentDeclaration<TooltipEditorComponent, "praxis-effects-tooltip-editor", never, { "group": { "alias": "group"; "required": false; }; }, {}, never, never, true, never>;
160
+ }
161
+
162
+ export { AnimacaoEditorComponent, DEFAULT_EFFECT_PRESETS, EffectRegistryService, EstiloEditorComponent, FundoEditorComponent, IconeBadgeEditorComponent, LayoutEditorComponent, RuleEffectsPanelComponent, TooltipEditorComponent, toCellClassAndStyle };
163
+ export type { EffectEditorPlugin, RuleEffectDefinition, RuleScope };
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "@praxisui/table-rule-builder",
3
+ "version": "1.0.0-beta.10",
4
+ "description": "Praxis Table Rule Builder: UI components and engine utils for table rules",
5
+ "peerDependencies": {
6
+ "@angular/common": "^20.0.0",
7
+ "@angular/core": "^20.0.0",
8
+ "@angular/forms": "^20.0.0",
9
+ "@angular/material": "^20.0.0"
10
+ },
11
+ "dependencies": {
12
+ "tslib": "^2.3.0"
13
+ },
14
+ "license": "Apache-2.0",
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/codexrodrigues/praxis"
21
+ },
22
+ "homepage": "https://github.com/codexrodrigues/praxis#readme",
23
+ "bugs": {
24
+ "url": "https://github.com/codexrodrigues/praxis/issues"
25
+ },
26
+ "keywords": [
27
+ "angular",
28
+ "praxisui",
29
+ "table",
30
+ "rules",
31
+ "ui",
32
+ "material"
33
+ ],
34
+ "sideEffects": false,
35
+ "module": "fesm2022/praxisui-table-rule-builder.mjs",
36
+ "typings": "index.d.ts",
37
+ "exports": {
38
+ "./package.json": {
39
+ "default": "./package.json"
40
+ },
41
+ ".": {
42
+ "types": "./index.d.ts",
43
+ "default": "./fesm2022/praxisui-table-rule-builder.mjs"
44
+ }
45
+ }
46
+ }