@praxisui/core 1.0.0-beta.59 → 1.0.0-beta.60
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/fesm2022/praxisui-core.mjs +858 -6
- package/fesm2022/praxisui-core.mjs.map +1 -1
- package/index.d.ts +202 -23
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, InjectionToken, Injectable, inject, Inject, makeEnvironmentProviders, Optional, ENVIRONMENT_INITIALIZER, ErrorHandler, APP_INITIALIZER, Input, Directive,
|
|
2
|
+
import { Component, InjectionToken, Injectable, inject, Inject, makeEnvironmentProviders, Optional, ENVIRONMENT_INITIALIZER, ErrorHandler, APP_INITIALIZER, Input, ChangeDetectionStrategy, Directive, SecurityContext, EventEmitter, Output, ViewContainerRef, ContentChild, signal, HostListener, computed, ViewChild } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common/http';
|
|
4
4
|
import { HttpHeaders, HttpClient, HttpParams, HttpContextToken, HTTP_INTERCEPTORS, withInterceptors } from '@angular/common/http';
|
|
5
5
|
import { of, defer, throwError, from, EMPTY, BehaviorSubject, firstValueFrom, Subject } from 'rxjs';
|
|
@@ -10,10 +10,11 @@ import { Router, ActivatedRoute } from '@angular/router';
|
|
|
10
10
|
import * as i2$1 from '@angular/forms';
|
|
11
11
|
import { Validators, FormGroup, FormControl, FormsModule } from '@angular/forms';
|
|
12
12
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
13
|
-
import * as i2 from '@angular/material/button';
|
|
14
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
15
13
|
import * as i3 from '@angular/material/icon';
|
|
16
14
|
import { MatIconModule } from '@angular/material/icon';
|
|
15
|
+
import { DomSanitizer } from '@angular/platform-browser';
|
|
16
|
+
import * as i2 from '@angular/material/button';
|
|
17
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
17
18
|
import * as i4 from '@angular/material/menu';
|
|
18
19
|
import { MatMenuModule } from '@angular/material/menu';
|
|
19
20
|
import * as i5 from '@angular/material/tooltip';
|
|
@@ -3748,6 +3749,18 @@ function inferType(def) {
|
|
|
3748
3749
|
return 'string';
|
|
3749
3750
|
}
|
|
3750
3751
|
|
|
3752
|
+
const EDITORIAL_WIDGET_CONVENTION_INPUTS = [
|
|
3753
|
+
'instanceId',
|
|
3754
|
+
'analyticsId',
|
|
3755
|
+
'ariaLabel',
|
|
3756
|
+
'contentFormat',
|
|
3757
|
+
'links',
|
|
3758
|
+
];
|
|
3759
|
+
const EDITORIAL_WIDGET_TAG = 'editorial-widget';
|
|
3760
|
+
function isEditorialComponentMeta(meta) {
|
|
3761
|
+
return !!meta?.tags?.includes(EDITORIAL_WIDGET_TAG);
|
|
3762
|
+
}
|
|
3763
|
+
|
|
3751
3764
|
/**
|
|
3752
3765
|
* Simple in-memory registry of component documentation metadata.
|
|
3753
3766
|
*
|
|
@@ -3794,6 +3807,16 @@ class ComponentMetadataRegistry {
|
|
|
3794
3807
|
filterCriteria: { label: 'Filtro', description: 'Critérios de filtro (JSON/expressão) aplicados a dados/listas.' },
|
|
3795
3808
|
bindingOrder: { label: 'Ordem de Binding', description: 'Ordem de avaliação/atribuição das entradas do componente.' },
|
|
3796
3809
|
};
|
|
3810
|
+
const editorialInputDefaults = {
|
|
3811
|
+
instanceId: { label: 'Instance ID', description: 'Identificador estável da instância do widget para telemetria, testes e correlação.' },
|
|
3812
|
+
analyticsId: { label: 'Analytics ID', description: 'Identificador lógico usado para telemetria e análise agregada do widget.' },
|
|
3813
|
+
ariaLabel: { label: 'Aria Label', description: 'Rótulo acessível aplicado ao bloco editorial quando necessário.' },
|
|
3814
|
+
contentFormat: { label: 'Formato do conteúdo', description: 'Formato editorial permitido para renderização do conteúdo (ex.: plain, markdown).' },
|
|
3815
|
+
links: { label: 'Links', description: 'Lista de links editoriais com política explícita de navegação e segurança.' },
|
|
3816
|
+
};
|
|
3817
|
+
const effectiveInputDefaults = isEditorialComponentMeta(meta)
|
|
3818
|
+
? { ...inputDefaults, ...editorialInputDefaults }
|
|
3819
|
+
: inputDefaults;
|
|
3797
3820
|
const outputDefaults = {
|
|
3798
3821
|
rowClick: { label: 'Clique na linha', description: 'Emitido ao clicar/selecionar uma linha na tabela.' },
|
|
3799
3822
|
widgetEvent: { label: 'Evento do widget', description: 'Eventos internos reemitidos com contexto do container.' },
|
|
@@ -3805,7 +3828,7 @@ class ComponentMetadataRegistry {
|
|
|
3805
3828
|
change: { label: 'Alteração', description: 'Eventos genéricos de alteração.' },
|
|
3806
3829
|
};
|
|
3807
3830
|
const normInputs = (meta.inputs || []).map((inp) => {
|
|
3808
|
-
const d =
|
|
3831
|
+
const d = effectiveInputDefaults[inp.name];
|
|
3809
3832
|
if (!d)
|
|
3810
3833
|
return inp;
|
|
3811
3834
|
return {
|
|
@@ -8054,7 +8077,7 @@ function isValidFormConfig(config) {
|
|
|
8054
8077
|
* Cria configuração vazia para inicialização
|
|
8055
8078
|
*/
|
|
8056
8079
|
function createEmptyFormConfig() {
|
|
8057
|
-
return { sections: [] };
|
|
8080
|
+
return { sections: [], formBlocksBefore: [], formBlocksAfter: [] };
|
|
8058
8081
|
}
|
|
8059
8082
|
/**
|
|
8060
8083
|
* Default hint texts for data and UI modes.
|
|
@@ -11236,6 +11259,330 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
11236
11259
|
],
|
|
11237
11260
|
};
|
|
11238
11261
|
|
|
11262
|
+
const EDITORIAL_ALLOWED_CONTENT_FORMATS = ['plain', 'markdown'];
|
|
11263
|
+
const EDITORIAL_HTML_ENABLED = false;
|
|
11264
|
+
const EDITORIAL_MARKDOWN_IMAGES_ENABLED = false;
|
|
11265
|
+
const EDITORIAL_EXTERNAL_LINK_REL = 'noopener noreferrer';
|
|
11266
|
+
const DISALLOWED_HREF_PROTOCOL = /^(javascript|data|vbscript|file):/i;
|
|
11267
|
+
const ABSOLUTE_HTTP_PROTOCOL = /^https?:\/\//i;
|
|
11268
|
+
const RELATIVE_OR_SPECIAL_HREF = /^(\/|\.\/|\.\.\/|#|mailto:|tel:)/i;
|
|
11269
|
+
function isAllowedEditorialContentFormat(value) {
|
|
11270
|
+
return value === 'plain' || value === 'markdown';
|
|
11271
|
+
}
|
|
11272
|
+
function isAllowedEditorialHref(href) {
|
|
11273
|
+
if (typeof href !== 'string')
|
|
11274
|
+
return false;
|
|
11275
|
+
const trimmed = href.trim();
|
|
11276
|
+
if (!trimmed)
|
|
11277
|
+
return false;
|
|
11278
|
+
if (DISALLOWED_HREF_PROTOCOL.test(trimmed))
|
|
11279
|
+
return false;
|
|
11280
|
+
return ABSOLUTE_HTTP_PROTOCOL.test(trimmed) || RELATIVE_OR_SPECIAL_HREF.test(trimmed);
|
|
11281
|
+
}
|
|
11282
|
+
function normalizeEditorialLink(link) {
|
|
11283
|
+
const label = typeof link?.label === 'string' ? link.label.trim() : '';
|
|
11284
|
+
const href = typeof link?.href === 'string' ? link.href.trim() : '';
|
|
11285
|
+
if (!label || !isAllowedEditorialHref(href)) {
|
|
11286
|
+
return null;
|
|
11287
|
+
}
|
|
11288
|
+
const isExternalHttp = ABSOLUTE_HTTP_PROTOCOL.test(href);
|
|
11289
|
+
const external = isExternalHttp ? true : (link.external ?? false);
|
|
11290
|
+
const target = external ? '_blank' : (link.target ?? '_self');
|
|
11291
|
+
const rel = external ? mergeRel(link.rel, EDITORIAL_EXTERNAL_LINK_REL) : link.rel;
|
|
11292
|
+
return {
|
|
11293
|
+
...link,
|
|
11294
|
+
label,
|
|
11295
|
+
href,
|
|
11296
|
+
external,
|
|
11297
|
+
target,
|
|
11298
|
+
rel,
|
|
11299
|
+
};
|
|
11300
|
+
}
|
|
11301
|
+
function mergeRel(current, required) {
|
|
11302
|
+
const parts = new Set((current || '').split(/\s+/).filter(Boolean));
|
|
11303
|
+
for (const token of required.split(/\s+/)) {
|
|
11304
|
+
parts.add(token);
|
|
11305
|
+
}
|
|
11306
|
+
return Array.from(parts).join(' ');
|
|
11307
|
+
}
|
|
11308
|
+
|
|
11309
|
+
class PraxisFooterLinksComponent {
|
|
11310
|
+
instanceId;
|
|
11311
|
+
analyticsId;
|
|
11312
|
+
ariaLabel;
|
|
11313
|
+
brandText;
|
|
11314
|
+
secondaryText;
|
|
11315
|
+
links = [];
|
|
11316
|
+
layout = 'inline';
|
|
11317
|
+
get normalizedLinks() {
|
|
11318
|
+
return (this.links || [])
|
|
11319
|
+
.map((link) => normalizeEditorialLink(link))
|
|
11320
|
+
.filter((link) => !!link);
|
|
11321
|
+
}
|
|
11322
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisFooterLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11323
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: PraxisFooterLinksComponent, isStandalone: true, selector: "praxis-footer-links", inputs: { instanceId: "instanceId", analyticsId: "analyticsId", ariaLabel: "ariaLabel", brandText: "brandText", secondaryText: "secondaryText", links: "links", layout: "layout" }, host: { attributes: { "role": "contentinfo" }, properties: { "attr.data-instance-id": "instanceId || null", "attr.data-analytics-id": "analyticsId || null", "attr.aria-label": "ariaLabel || null" }, classAttribute: "praxis-footer-links" }, ngImport: i0, template: `
|
|
11324
|
+
<footer class="pfl-shell" [class.pfl-stacked]="layout === 'stacked'">
|
|
11325
|
+
<div class="pfl-brand" *ngIf="brandText || secondaryText">
|
|
11326
|
+
<strong class="pfl-brand-text" *ngIf="brandText">{{ brandText }}</strong>
|
|
11327
|
+
<span class="pfl-secondary-text" *ngIf="secondaryText">{{ secondaryText }}</span>
|
|
11328
|
+
</div>
|
|
11329
|
+
|
|
11330
|
+
<nav class="pfl-nav" aria-label="Links institucionais">
|
|
11331
|
+
<a
|
|
11332
|
+
*ngFor="let link of normalizedLinks"
|
|
11333
|
+
class="pfl-link"
|
|
11334
|
+
[href]="link.href"
|
|
11335
|
+
[attr.target]="link.target || null"
|
|
11336
|
+
[attr.rel]="link.rel || null"
|
|
11337
|
+
>
|
|
11338
|
+
{{ link.label }}
|
|
11339
|
+
</a>
|
|
11340
|
+
</nav>
|
|
11341
|
+
</footer>
|
|
11342
|
+
`, isInline: true, styles: [":host{display:block}.pfl-shell{display:flex;align-items:center;justify-content:space-between;gap:16px 24px;padding:16px 4px 4px;border-top:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 78%,transparent)}.pfl-stacked{flex-direction:column;align-items:flex-start}.pfl-brand{display:grid;gap:4px}.pfl-brand-text{color:var(--md-sys-color-on-surface);font-size:.92rem;font-weight:700}.pfl-secondary-text{color:var(--md-sys-color-on-surface-variant);font-size:.8rem;line-height:1.5}.pfl-nav{display:flex;flex-wrap:wrap;gap:10px 16px}.pfl-link{color:var(--md-sys-color-primary);font-size:.84rem;line-height:1.5;text-decoration:underline;text-underline-offset:2px}@media(max-width:720px){.pfl-shell{flex-direction:column;align-items:flex-start}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
11343
|
+
}
|
|
11344
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisFooterLinksComponent, decorators: [{
|
|
11345
|
+
type: Component,
|
|
11346
|
+
args: [{ selector: 'praxis-footer-links', standalone: true, imports: [CommonModule], host: {
|
|
11347
|
+
'class': 'praxis-footer-links',
|
|
11348
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11349
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11350
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
11351
|
+
'role': 'contentinfo',
|
|
11352
|
+
}, template: `
|
|
11353
|
+
<footer class="pfl-shell" [class.pfl-stacked]="layout === 'stacked'">
|
|
11354
|
+
<div class="pfl-brand" *ngIf="brandText || secondaryText">
|
|
11355
|
+
<strong class="pfl-brand-text" *ngIf="brandText">{{ brandText }}</strong>
|
|
11356
|
+
<span class="pfl-secondary-text" *ngIf="secondaryText">{{ secondaryText }}</span>
|
|
11357
|
+
</div>
|
|
11358
|
+
|
|
11359
|
+
<nav class="pfl-nav" aria-label="Links institucionais">
|
|
11360
|
+
<a
|
|
11361
|
+
*ngFor="let link of normalizedLinks"
|
|
11362
|
+
class="pfl-link"
|
|
11363
|
+
[href]="link.href"
|
|
11364
|
+
[attr.target]="link.target || null"
|
|
11365
|
+
[attr.rel]="link.rel || null"
|
|
11366
|
+
>
|
|
11367
|
+
{{ link.label }}
|
|
11368
|
+
</a>
|
|
11369
|
+
</nav>
|
|
11370
|
+
</footer>
|
|
11371
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.pfl-shell{display:flex;align-items:center;justify-content:space-between;gap:16px 24px;padding:16px 4px 4px;border-top:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 78%,transparent)}.pfl-stacked{flex-direction:column;align-items:flex-start}.pfl-brand{display:grid;gap:4px}.pfl-brand-text{color:var(--md-sys-color-on-surface);font-size:.92rem;font-weight:700}.pfl-secondary-text{color:var(--md-sys-color-on-surface-variant);font-size:.8rem;line-height:1.5}.pfl-nav{display:flex;flex-wrap:wrap;gap:10px 16px}.pfl-link{color:var(--md-sys-color-primary);font-size:.84rem;line-height:1.5;text-decoration:underline;text-underline-offset:2px}@media(max-width:720px){.pfl-shell{flex-direction:column;align-items:flex-start}}\n"] }]
|
|
11372
|
+
}], propDecorators: { instanceId: [{
|
|
11373
|
+
type: Input
|
|
11374
|
+
}], analyticsId: [{
|
|
11375
|
+
type: Input
|
|
11376
|
+
}], ariaLabel: [{
|
|
11377
|
+
type: Input
|
|
11378
|
+
}], brandText: [{
|
|
11379
|
+
type: Input
|
|
11380
|
+
}], secondaryText: [{
|
|
11381
|
+
type: Input
|
|
11382
|
+
}], links: [{
|
|
11383
|
+
type: Input
|
|
11384
|
+
}], layout: [{
|
|
11385
|
+
type: Input
|
|
11386
|
+
}] } });
|
|
11387
|
+
|
|
11388
|
+
const PRAXIS_FOOTER_LINKS_METADATA = {
|
|
11389
|
+
id: 'widget:footer-links',
|
|
11390
|
+
selector: 'praxis-footer-links',
|
|
11391
|
+
component: PraxisFooterLinksComponent,
|
|
11392
|
+
friendlyName: 'Footer Links',
|
|
11393
|
+
description: 'Rodapé institucional com marca opcional, texto secundário e links normalizados pela policy editorial.',
|
|
11394
|
+
icon: 'footer',
|
|
11395
|
+
inputs: [
|
|
11396
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11397
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11398
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do rodapé institucional.' },
|
|
11399
|
+
{ name: 'brandText', type: 'string', label: 'Marca', description: 'Texto principal opcional da marca ou instituição.' },
|
|
11400
|
+
{ name: 'secondaryText', type: 'string', label: 'Texto secundário', description: 'Texto secundário opcional do rodapé.' },
|
|
11401
|
+
{ name: 'links', type: 'EditorialLinkDefinition[]', label: 'Links', description: 'Lista ordenada de links institucionais.' },
|
|
11402
|
+
{ name: 'layout', type: "'inline' | 'stacked'", label: 'Layout', description: 'Layout inicial do rodapé institucional.', default: 'inline' },
|
|
11403
|
+
],
|
|
11404
|
+
outputs: [],
|
|
11405
|
+
tags: ['widget', 'editorial', 'footer', 'links', EDITORIAL_WIDGET_TAG],
|
|
11406
|
+
lib: '@praxisui/core',
|
|
11407
|
+
};
|
|
11408
|
+
function providePraxisFooterLinksMetadata() {
|
|
11409
|
+
return {
|
|
11410
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
11411
|
+
multi: true,
|
|
11412
|
+
useFactory: (registry) => () => {
|
|
11413
|
+
registry.register(PRAXIS_FOOTER_LINKS_METADATA);
|
|
11414
|
+
},
|
|
11415
|
+
deps: [ComponentMetadataRegistry],
|
|
11416
|
+
};
|
|
11417
|
+
}
|
|
11418
|
+
|
|
11419
|
+
class PraxisHeroBannerComponent {
|
|
11420
|
+
instanceId;
|
|
11421
|
+
analyticsId;
|
|
11422
|
+
ariaLabel;
|
|
11423
|
+
title;
|
|
11424
|
+
subtitle;
|
|
11425
|
+
description;
|
|
11426
|
+
imageUrl;
|
|
11427
|
+
imageAlt;
|
|
11428
|
+
badges = [];
|
|
11429
|
+
metaItems = [];
|
|
11430
|
+
variant = 'default';
|
|
11431
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisHeroBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11432
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: PraxisHeroBannerComponent, isStandalone: true, selector: "praxis-hero-banner", inputs: { instanceId: "instanceId", analyticsId: "analyticsId", ariaLabel: "ariaLabel", title: "title", subtitle: "subtitle", description: "description", imageUrl: "imageUrl", imageAlt: "imageAlt", badges: "badges", metaItems: "metaItems", variant: "variant" }, host: { properties: { "attr.data-instance-id": "instanceId || null", "attr.data-analytics-id": "analyticsId || null", "attr.aria-label": "ariaLabel || null", "attr.role": "ariaLabel ? \"region\" : null", "attr.data-variant": "variant" }, classAttribute: "praxis-hero-banner" }, ngImport: i0, template: `
|
|
11433
|
+
<section class="phb-shell" [class.phb-event]="variant === 'event'" [class.phb-institutional]="variant === 'institutional'">
|
|
11434
|
+
<div class="phb-copy">
|
|
11435
|
+
<div class="phb-badges" *ngIf="badges?.length">
|
|
11436
|
+
<span
|
|
11437
|
+
class="phb-badge"
|
|
11438
|
+
*ngFor="let badge of badges"
|
|
11439
|
+
[class.phb-badge-highlight]="badge.tone === 'highlight'"
|
|
11440
|
+
[class.phb-badge-muted]="badge.tone === 'muted'"
|
|
11441
|
+
[class.phb-badge-warning]="badge.tone === 'warning'"
|
|
11442
|
+
>
|
|
11443
|
+
{{ badge.label }}
|
|
11444
|
+
</span>
|
|
11445
|
+
</div>
|
|
11446
|
+
|
|
11447
|
+
<div class="phb-text">
|
|
11448
|
+
<p class="phb-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11449
|
+
<h2 class="phb-title" *ngIf="title">{{ title }}</h2>
|
|
11450
|
+
<p class="phb-description" *ngIf="description">{{ description }}</p>
|
|
11451
|
+
</div>
|
|
11452
|
+
|
|
11453
|
+
<dl class="phb-meta" *ngIf="metaItems?.length">
|
|
11454
|
+
<div class="phb-meta-item" *ngFor="let item of metaItems">
|
|
11455
|
+
<dt>{{ item.label }}</dt>
|
|
11456
|
+
<dd>{{ item.value }}</dd>
|
|
11457
|
+
</div>
|
|
11458
|
+
</dl>
|
|
11459
|
+
</div>
|
|
11460
|
+
|
|
11461
|
+
<div class="phb-visual" *ngIf="imageUrl; else noImage">
|
|
11462
|
+
<img class="phb-image" [src]="imageUrl" [alt]="imageAlt || title || subtitle || 'Imagem do destaque'" />
|
|
11463
|
+
</div>
|
|
11464
|
+
|
|
11465
|
+
<ng-template #noImage>
|
|
11466
|
+
<div class="phb-visual phb-visual-fallback" aria-hidden="true">
|
|
11467
|
+
<div class="phb-orb phb-orb-a"></div>
|
|
11468
|
+
<div class="phb-orb phb-orb-b"></div>
|
|
11469
|
+
<div class="phb-grid"></div>
|
|
11470
|
+
</div>
|
|
11471
|
+
</ng-template>
|
|
11472
|
+
</section>
|
|
11473
|
+
`, isInline: true, styles: [":host{display:block}.phb-shell{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(240px,.95fr);gap:22px;align-items:stretch;padding:22px;border-radius:28px;overflow:hidden;background:radial-gradient(circle at top right,rgba(65,142,255,.18),transparent 38%),linear-gradient(135deg,#fbfcff,#eef4ff 54%,#f8f9fc);border:1px solid rgba(58,84,135,.14);box-shadow:0 24px 60px #10182814}.phb-event{background:radial-gradient(circle at top right,rgba(255,184,77,.26),transparent 34%),linear-gradient(135deg,#fffaf0,#fff1d6 45%,#fff9f2)}.phb-institutional{background:radial-gradient(circle at top right,rgba(17,94,89,.18),transparent 34%),linear-gradient(135deg,#f7fbfa,#e9f6f3 48%,#f8fcfb)}.phb-copy{display:grid;gap:18px;min-width:0}.phb-badges{display:flex;flex-wrap:wrap;gap:8px}.phb-badge{display:inline-flex;align-items:center;min-height:28px;padding:0 12px;border-radius:999px;background:#0e1f3514;color:#17314f;font-size:.76rem;font-weight:700;letter-spacing:.02em}.phb-badge-highlight{background:#1f63ff1f;color:#1843ad}.phb-badge-muted{background:#6373811f;color:#43515f}.phb-badge-warning{background:#c628281f;color:#a62828}.phb-text{display:grid;gap:8px}.phb-subtitle{margin:0;color:#31506f;font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-title{margin:0;color:#10233a;font-size:clamp(1.6rem,2.2vw,2.5rem);line-height:1.08;letter-spacing:-.03em}.phb-description{margin:0;max-width:56ch;color:#39506a;font-size:.98rem;line-height:1.65}.phb-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:0}.phb-meta-item{display:grid;gap:4px;padding:12px 14px;border-radius:16px;background:#ffffff9e;border:1px solid rgba(58,84,135,.12);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.phb-meta-item dt{margin:0;color:#5e7185;font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-meta-item dd{margin:0;color:#17314f;font-size:.92rem;line-height:1.45}.phb-visual{position:relative;min-height:220px;border-radius:22px;overflow:hidden;background:linear-gradient(160deg,#0d1d3324,#3c76ff14)}.phb-image{display:block;width:100%;height:100%;object-fit:cover}.phb-visual-fallback{background:linear-gradient(180deg,#ffffff47,#ffffff14),linear-gradient(145deg,#21417c38,#71a1ff1f)}.phb-orb{position:absolute;border-radius:999px;filter:blur(2px)}.phb-orb-a{inset:24px auto auto 20px;width:86px;height:86px;background:#ffffff9e}.phb-orb-b{inset:auto 16px 18px auto;width:132px;height:132px;background:#346aff38}.phb-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.16) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.16) 1px,transparent 1px);background-size:24px 24px;opacity:.5}@media(max-width:900px){.phb-shell{grid-template-columns:1fr;padding:18px}.phb-visual{order:-1;min-height:180px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
11474
|
+
}
|
|
11475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisHeroBannerComponent, decorators: [{
|
|
11476
|
+
type: Component,
|
|
11477
|
+
args: [{ selector: 'praxis-hero-banner', standalone: true, imports: [CommonModule], host: {
|
|
11478
|
+
'class': 'praxis-hero-banner',
|
|
11479
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11480
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11481
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
11482
|
+
'[attr.role]': 'ariaLabel ? "region" : null',
|
|
11483
|
+
'[attr.data-variant]': 'variant',
|
|
11484
|
+
}, template: `
|
|
11485
|
+
<section class="phb-shell" [class.phb-event]="variant === 'event'" [class.phb-institutional]="variant === 'institutional'">
|
|
11486
|
+
<div class="phb-copy">
|
|
11487
|
+
<div class="phb-badges" *ngIf="badges?.length">
|
|
11488
|
+
<span
|
|
11489
|
+
class="phb-badge"
|
|
11490
|
+
*ngFor="let badge of badges"
|
|
11491
|
+
[class.phb-badge-highlight]="badge.tone === 'highlight'"
|
|
11492
|
+
[class.phb-badge-muted]="badge.tone === 'muted'"
|
|
11493
|
+
[class.phb-badge-warning]="badge.tone === 'warning'"
|
|
11494
|
+
>
|
|
11495
|
+
{{ badge.label }}
|
|
11496
|
+
</span>
|
|
11497
|
+
</div>
|
|
11498
|
+
|
|
11499
|
+
<div class="phb-text">
|
|
11500
|
+
<p class="phb-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11501
|
+
<h2 class="phb-title" *ngIf="title">{{ title }}</h2>
|
|
11502
|
+
<p class="phb-description" *ngIf="description">{{ description }}</p>
|
|
11503
|
+
</div>
|
|
11504
|
+
|
|
11505
|
+
<dl class="phb-meta" *ngIf="metaItems?.length">
|
|
11506
|
+
<div class="phb-meta-item" *ngFor="let item of metaItems">
|
|
11507
|
+
<dt>{{ item.label }}</dt>
|
|
11508
|
+
<dd>{{ item.value }}</dd>
|
|
11509
|
+
</div>
|
|
11510
|
+
</dl>
|
|
11511
|
+
</div>
|
|
11512
|
+
|
|
11513
|
+
<div class="phb-visual" *ngIf="imageUrl; else noImage">
|
|
11514
|
+
<img class="phb-image" [src]="imageUrl" [alt]="imageAlt || title || subtitle || 'Imagem do destaque'" />
|
|
11515
|
+
</div>
|
|
11516
|
+
|
|
11517
|
+
<ng-template #noImage>
|
|
11518
|
+
<div class="phb-visual phb-visual-fallback" aria-hidden="true">
|
|
11519
|
+
<div class="phb-orb phb-orb-a"></div>
|
|
11520
|
+
<div class="phb-orb phb-orb-b"></div>
|
|
11521
|
+
<div class="phb-grid"></div>
|
|
11522
|
+
</div>
|
|
11523
|
+
</ng-template>
|
|
11524
|
+
</section>
|
|
11525
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.phb-shell{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(240px,.95fr);gap:22px;align-items:stretch;padding:22px;border-radius:28px;overflow:hidden;background:radial-gradient(circle at top right,rgba(65,142,255,.18),transparent 38%),linear-gradient(135deg,#fbfcff,#eef4ff 54%,#f8f9fc);border:1px solid rgba(58,84,135,.14);box-shadow:0 24px 60px #10182814}.phb-event{background:radial-gradient(circle at top right,rgba(255,184,77,.26),transparent 34%),linear-gradient(135deg,#fffaf0,#fff1d6 45%,#fff9f2)}.phb-institutional{background:radial-gradient(circle at top right,rgba(17,94,89,.18),transparent 34%),linear-gradient(135deg,#f7fbfa,#e9f6f3 48%,#f8fcfb)}.phb-copy{display:grid;gap:18px;min-width:0}.phb-badges{display:flex;flex-wrap:wrap;gap:8px}.phb-badge{display:inline-flex;align-items:center;min-height:28px;padding:0 12px;border-radius:999px;background:#0e1f3514;color:#17314f;font-size:.76rem;font-weight:700;letter-spacing:.02em}.phb-badge-highlight{background:#1f63ff1f;color:#1843ad}.phb-badge-muted{background:#6373811f;color:#43515f}.phb-badge-warning{background:#c628281f;color:#a62828}.phb-text{display:grid;gap:8px}.phb-subtitle{margin:0;color:#31506f;font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-title{margin:0;color:#10233a;font-size:clamp(1.6rem,2.2vw,2.5rem);line-height:1.08;letter-spacing:-.03em}.phb-description{margin:0;max-width:56ch;color:#39506a;font-size:.98rem;line-height:1.65}.phb-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin:0}.phb-meta-item{display:grid;gap:4px;padding:12px 14px;border-radius:16px;background:#ffffff9e;border:1px solid rgba(58,84,135,.12);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.phb-meta-item dt{margin:0;color:#5e7185;font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-meta-item dd{margin:0;color:#17314f;font-size:.92rem;line-height:1.45}.phb-visual{position:relative;min-height:220px;border-radius:22px;overflow:hidden;background:linear-gradient(160deg,#0d1d3324,#3c76ff14)}.phb-image{display:block;width:100%;height:100%;object-fit:cover}.phb-visual-fallback{background:linear-gradient(180deg,#ffffff47,#ffffff14),linear-gradient(145deg,#21417c38,#71a1ff1f)}.phb-orb{position:absolute;border-radius:999px;filter:blur(2px)}.phb-orb-a{inset:24px auto auto 20px;width:86px;height:86px;background:#ffffff9e}.phb-orb-b{inset:auto 16px 18px auto;width:132px;height:132px;background:#346aff38}.phb-grid{position:absolute;inset:0;background-image:linear-gradient(rgba(255,255,255,.16) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.16) 1px,transparent 1px);background-size:24px 24px;opacity:.5}@media(max-width:900px){.phb-shell{grid-template-columns:1fr;padding:18px}.phb-visual{order:-1;min-height:180px}}\n"] }]
|
|
11526
|
+
}], propDecorators: { instanceId: [{
|
|
11527
|
+
type: Input
|
|
11528
|
+
}], analyticsId: [{
|
|
11529
|
+
type: Input
|
|
11530
|
+
}], ariaLabel: [{
|
|
11531
|
+
type: Input
|
|
11532
|
+
}], title: [{
|
|
11533
|
+
type: Input
|
|
11534
|
+
}], subtitle: [{
|
|
11535
|
+
type: Input
|
|
11536
|
+
}], description: [{
|
|
11537
|
+
type: Input
|
|
11538
|
+
}], imageUrl: [{
|
|
11539
|
+
type: Input
|
|
11540
|
+
}], imageAlt: [{
|
|
11541
|
+
type: Input
|
|
11542
|
+
}], badges: [{
|
|
11543
|
+
type: Input
|
|
11544
|
+
}], metaItems: [{
|
|
11545
|
+
type: Input
|
|
11546
|
+
}], variant: [{
|
|
11547
|
+
type: Input
|
|
11548
|
+
}] } });
|
|
11549
|
+
|
|
11550
|
+
const PRAXIS_HERO_BANNER_METADATA = {
|
|
11551
|
+
id: 'widget:hero-banner',
|
|
11552
|
+
selector: 'praxis-hero-banner',
|
|
11553
|
+
component: PraxisHeroBannerComponent,
|
|
11554
|
+
friendlyName: 'Hero Banner',
|
|
11555
|
+
description: 'Bloco editorial de abertura para experiências institucionais, com badges, metadados e visual responsivo.',
|
|
11556
|
+
icon: 'campaign',
|
|
11557
|
+
inputs: [
|
|
11558
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11559
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11560
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do hero.' },
|
|
11561
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do hero.' },
|
|
11562
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Kicker ou subtítulo acima do título.' },
|
|
11563
|
+
{ name: 'description', type: 'string', label: 'Descrição', description: 'Descrição principal do destaque.' },
|
|
11564
|
+
{ name: 'imageUrl', type: 'string', label: 'Imagem', description: 'URL opcional da imagem de apoio.' },
|
|
11565
|
+
{ name: 'imageAlt', type: 'string', label: 'Alt da imagem', description: 'Texto alternativo da imagem, quando presente.' },
|
|
11566
|
+
{ name: 'badges', type: 'Array<{ label: string; tone?: "default" | "highlight" | "muted" | "warning" }>', label: 'Badges', description: 'Badges curatoriais no topo do hero.' },
|
|
11567
|
+
{ name: 'metaItems', type: 'Array<{ label: string; value: string }>', label: 'Metadados', description: 'Metadados como data, local ou tenant.' },
|
|
11568
|
+
{ name: 'variant', type: "'default' | 'event' | 'institutional'", label: 'Variante', description: 'Variante visual inicial do hero banner.', default: 'default' },
|
|
11569
|
+
],
|
|
11570
|
+
outputs: [],
|
|
11571
|
+
tags: ['widget', 'editorial', 'hero', 'banner', EDITORIAL_WIDGET_TAG],
|
|
11572
|
+
lib: '@praxisui/core',
|
|
11573
|
+
layoutHints: { recommendedCols: 8, recommendedRows: 3, minCols: 4, minRows: 2 },
|
|
11574
|
+
};
|
|
11575
|
+
function providePraxisHeroBannerMetadata() {
|
|
11576
|
+
return {
|
|
11577
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
11578
|
+
multi: true,
|
|
11579
|
+
useFactory: (registry) => () => {
|
|
11580
|
+
registry.register(PRAXIS_HERO_BANNER_METADATA);
|
|
11581
|
+
},
|
|
11582
|
+
deps: [ComponentMetadataRegistry],
|
|
11583
|
+
};
|
|
11584
|
+
}
|
|
11585
|
+
|
|
11239
11586
|
/**
|
|
11240
11587
|
* Binds a stored icon string to a mat-icon element supporting:
|
|
11241
11588
|
* - Material Icons (classic ligatures): "mi:pending" or "pending"
|
|
@@ -11322,6 +11669,511 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
11322
11669
|
args: ['praxisIcon']
|
|
11323
11670
|
}] } });
|
|
11324
11671
|
|
|
11672
|
+
class PraxisRichTextBlockComponent {
|
|
11673
|
+
sanitizer = inject(DomSanitizer);
|
|
11674
|
+
instanceId;
|
|
11675
|
+
analyticsId;
|
|
11676
|
+
ariaLabel;
|
|
11677
|
+
title;
|
|
11678
|
+
subtitle;
|
|
11679
|
+
icon;
|
|
11680
|
+
variant = 'default';
|
|
11681
|
+
contentFormat = 'plain';
|
|
11682
|
+
content = '';
|
|
11683
|
+
get renderedContent() {
|
|
11684
|
+
const format = isAllowedEditorialContentFormat(this.contentFormat) ? this.contentFormat : 'plain';
|
|
11685
|
+
const html = format === 'markdown'
|
|
11686
|
+
? renderEditorialMarkdown(this.content)
|
|
11687
|
+
: renderEditorialPlain(this.content);
|
|
11688
|
+
return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';
|
|
11689
|
+
}
|
|
11690
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisRichTextBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11691
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: PraxisRichTextBlockComponent, isStandalone: true, selector: "praxis-rich-text-block", inputs: { instanceId: "instanceId", analyticsId: "analyticsId", ariaLabel: "ariaLabel", title: "title", subtitle: "subtitle", icon: "icon", variant: "variant", contentFormat: "contentFormat", content: "content" }, host: { properties: { "attr.data-instance-id": "instanceId || null", "attr.data-analytics-id": "analyticsId || null", "attr.data-variant": "variant", "attr.aria-label": "ariaLabel || null", "attr.role": "ariaLabel ? \"region\" : null" }, classAttribute: "praxis-rich-text-block" }, ngImport: i0, template: `
|
|
11692
|
+
<section class="prt-block" [class.prt-block-emphasis]="variant === 'emphasis'" [class.prt-block-subtle]="variant === 'subtle'">
|
|
11693
|
+
<header class="prt-head" *ngIf="icon || title || subtitle">
|
|
11694
|
+
<mat-icon class="prt-icon" *ngIf="icon" aria-hidden="true" [praxisIcon]="icon"></mat-icon>
|
|
11695
|
+
<div class="prt-title-wrap">
|
|
11696
|
+
<h3 class="prt-title" *ngIf="title">{{ title }}</h3>
|
|
11697
|
+
<p class="prt-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11698
|
+
</div>
|
|
11699
|
+
</header>
|
|
11700
|
+
|
|
11701
|
+
<div class="prt-content" [innerHTML]="renderedContent"></div>
|
|
11702
|
+
</section>
|
|
11703
|
+
`, isInline: true, styles: [":host{display:block}.prt-block{display:grid;gap:12px;padding:16px 18px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 72%,transparent);background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-surface) 96%,white),color-mix(in srgb,var(--md-sys-color-surface-container-low) 92%,white));color:var(--md-sys-color-on-surface)}.prt-block-emphasis{border-color:color-mix(in srgb,var(--md-sys-color-primary) 32%,var(--md-sys-color-outline-variant));background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary-container) 36%,white),color-mix(in srgb,var(--md-sys-color-surface) 96%,white))}.prt-block-subtle{background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 82%,white);border-style:dashed}.prt-head{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}.prt-icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-primary) 12%,white);color:var(--md-sys-color-primary);font-size:20px;line-height:1}.prt-title-wrap{display:grid;gap:4px}.prt-title{margin:0;font-size:1rem;font-weight:700;line-height:1.3}.prt-subtitle{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.86rem;line-height:1.4}.prt-content{color:var(--md-sys-color-on-surface);font-size:.94rem;line-height:1.6}.prt-content :where(p,ul){margin:0}.prt-content :where(p+p,p+ul,ul+p,ul+ul){margin-top:10px}.prt-content ul{padding-left:18px}.prt-content a{color:var(--md-sys-color-primary);text-decoration:underline;text-underline-offset:2px}.prt-content strong{font-weight:700}.prt-content em{font-style:italic}.prt-content code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em;padding:.1em .35em;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,white)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
11704
|
+
}
|
|
11705
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisRichTextBlockComponent, decorators: [{
|
|
11706
|
+
type: Component,
|
|
11707
|
+
args: [{ selector: 'praxis-rich-text-block', standalone: true, imports: [CommonModule, MatIconModule, PraxisIconDirective], host: {
|
|
11708
|
+
'class': 'praxis-rich-text-block',
|
|
11709
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11710
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11711
|
+
'[attr.data-variant]': 'variant',
|
|
11712
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
11713
|
+
'[attr.role]': 'ariaLabel ? "region" : null',
|
|
11714
|
+
}, template: `
|
|
11715
|
+
<section class="prt-block" [class.prt-block-emphasis]="variant === 'emphasis'" [class.prt-block-subtle]="variant === 'subtle'">
|
|
11716
|
+
<header class="prt-head" *ngIf="icon || title || subtitle">
|
|
11717
|
+
<mat-icon class="prt-icon" *ngIf="icon" aria-hidden="true" [praxisIcon]="icon"></mat-icon>
|
|
11718
|
+
<div class="prt-title-wrap">
|
|
11719
|
+
<h3 class="prt-title" *ngIf="title">{{ title }}</h3>
|
|
11720
|
+
<p class="prt-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11721
|
+
</div>
|
|
11722
|
+
</header>
|
|
11723
|
+
|
|
11724
|
+
<div class="prt-content" [innerHTML]="renderedContent"></div>
|
|
11725
|
+
</section>
|
|
11726
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.prt-block{display:grid;gap:12px;padding:16px 18px;border-radius:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 72%,transparent);background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-surface) 96%,white),color-mix(in srgb,var(--md-sys-color-surface-container-low) 92%,white));color:var(--md-sys-color-on-surface)}.prt-block-emphasis{border-color:color-mix(in srgb,var(--md-sys-color-primary) 32%,var(--md-sys-color-outline-variant));background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary-container) 36%,white),color-mix(in srgb,var(--md-sys-color-surface) 96%,white))}.prt-block-subtle{background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 82%,white);border-style:dashed}.prt-head{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}.prt-icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-primary) 12%,white);color:var(--md-sys-color-primary);font-size:20px;line-height:1}.prt-title-wrap{display:grid;gap:4px}.prt-title{margin:0;font-size:1rem;font-weight:700;line-height:1.3}.prt-subtitle{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.86rem;line-height:1.4}.prt-content{color:var(--md-sys-color-on-surface);font-size:.94rem;line-height:1.6}.prt-content :where(p,ul){margin:0}.prt-content :where(p+p,p+ul,ul+p,ul+ul){margin-top:10px}.prt-content ul{padding-left:18px}.prt-content a{color:var(--md-sys-color-primary);text-decoration:underline;text-underline-offset:2px}.prt-content strong{font-weight:700}.prt-content em{font-style:italic}.prt-content code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.88em;padding:.1em .35em;border-radius:6px;background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 82%,white)}\n"] }]
|
|
11727
|
+
}], propDecorators: { instanceId: [{
|
|
11728
|
+
type: Input
|
|
11729
|
+
}], analyticsId: [{
|
|
11730
|
+
type: Input
|
|
11731
|
+
}], ariaLabel: [{
|
|
11732
|
+
type: Input
|
|
11733
|
+
}], title: [{
|
|
11734
|
+
type: Input
|
|
11735
|
+
}], subtitle: [{
|
|
11736
|
+
type: Input
|
|
11737
|
+
}], icon: [{
|
|
11738
|
+
type: Input
|
|
11739
|
+
}], variant: [{
|
|
11740
|
+
type: Input
|
|
11741
|
+
}], contentFormat: [{
|
|
11742
|
+
type: Input
|
|
11743
|
+
}], content: [{
|
|
11744
|
+
type: Input
|
|
11745
|
+
}] } });
|
|
11746
|
+
function renderEditorialPlain(content) {
|
|
11747
|
+
const blocks = splitParagraphs(content).map((paragraph) => `<p>${escapeHtml(paragraph)}</p>`);
|
|
11748
|
+
return blocks.join('');
|
|
11749
|
+
}
|
|
11750
|
+
function renderEditorialMarkdown(content) {
|
|
11751
|
+
const withoutImages = EDITORIAL_MARKDOWN_IMAGES_ENABLED
|
|
11752
|
+
? content
|
|
11753
|
+
: content.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '');
|
|
11754
|
+
const lines = withoutImages.replace(/\r\n/g, '\n').split('\n');
|
|
11755
|
+
const html = [];
|
|
11756
|
+
let listItems = [];
|
|
11757
|
+
const flushList = () => {
|
|
11758
|
+
if (!listItems.length)
|
|
11759
|
+
return;
|
|
11760
|
+
html.push(`<ul>${listItems.join('')}</ul>`);
|
|
11761
|
+
listItems = [];
|
|
11762
|
+
};
|
|
11763
|
+
for (const line of lines) {
|
|
11764
|
+
const trimmed = line.trim();
|
|
11765
|
+
if (!trimmed) {
|
|
11766
|
+
flushList();
|
|
11767
|
+
continue;
|
|
11768
|
+
}
|
|
11769
|
+
const listMatch = /^[-*]\s+(.+)$/.exec(trimmed);
|
|
11770
|
+
if (listMatch) {
|
|
11771
|
+
listItems.push(`<li>${renderInlineMarkdown(listMatch[1])}</li>`);
|
|
11772
|
+
continue;
|
|
11773
|
+
}
|
|
11774
|
+
flushList();
|
|
11775
|
+
html.push(`<p>${renderInlineMarkdown(trimmed)}</p>`);
|
|
11776
|
+
}
|
|
11777
|
+
flushList();
|
|
11778
|
+
return html.join('');
|
|
11779
|
+
}
|
|
11780
|
+
function renderInlineMarkdown(text) {
|
|
11781
|
+
const placeholders = new Map();
|
|
11782
|
+
let index = 0;
|
|
11783
|
+
const reserve = (html) => {
|
|
11784
|
+
const token = `__PRT_TOKEN_${index++}__`;
|
|
11785
|
+
placeholders.set(token, html);
|
|
11786
|
+
return token;
|
|
11787
|
+
};
|
|
11788
|
+
let escaped = escapeHtml(text);
|
|
11789
|
+
escaped = escaped.replace(/`([^`]+)`/g, (_match, code) => reserve(`<code>${escapeHtml(decodeHtml(code))}</code>`));
|
|
11790
|
+
escaped = escaped.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_match, label, href) => {
|
|
11791
|
+
const normalized = normalizeEditorialLink({
|
|
11792
|
+
label: decodeHtml(label),
|
|
11793
|
+
href: decodeHtml(href),
|
|
11794
|
+
});
|
|
11795
|
+
if (!normalized) {
|
|
11796
|
+
return escapeHtml(decodeHtml(label));
|
|
11797
|
+
}
|
|
11798
|
+
const target = normalized.target ? ` target="${escapeHtml(normalized.target)}"` : '';
|
|
11799
|
+
const rel = normalized.rel || EDITORIAL_EXTERNAL_LINK_REL;
|
|
11800
|
+
return reserve(`<a href="${escapeHtml(normalized.href)}"${target} rel="${escapeHtml(rel)}">${escapeHtml(normalized.label)}</a>`);
|
|
11801
|
+
});
|
|
11802
|
+
escaped = escaped.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
11803
|
+
escaped = escaped.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
11804
|
+
placeholders.forEach((value, token) => {
|
|
11805
|
+
escaped = escaped.replaceAll(token, value);
|
|
11806
|
+
});
|
|
11807
|
+
return escaped;
|
|
11808
|
+
}
|
|
11809
|
+
function splitParagraphs(content) {
|
|
11810
|
+
return content
|
|
11811
|
+
.replace(/\r\n/g, '\n')
|
|
11812
|
+
.split(/\n{2,}/)
|
|
11813
|
+
.map((part) => part.trim())
|
|
11814
|
+
.filter(Boolean);
|
|
11815
|
+
}
|
|
11816
|
+
function escapeHtml(value) {
|
|
11817
|
+
return value
|
|
11818
|
+
.replace(/&/g, '&')
|
|
11819
|
+
.replace(/</g, '<')
|
|
11820
|
+
.replace(/>/g, '>')
|
|
11821
|
+
.replace(/"/g, '"')
|
|
11822
|
+
.replace(/'/g, ''');
|
|
11823
|
+
}
|
|
11824
|
+
function decodeHtml(value) {
|
|
11825
|
+
return value
|
|
11826
|
+
.replace(/</g, '<')
|
|
11827
|
+
.replace(/>/g, '>')
|
|
11828
|
+
.replace(/"/g, '"')
|
|
11829
|
+
.replace(/'/g, '\'')
|
|
11830
|
+
.replace(/&/g, '&');
|
|
11831
|
+
}
|
|
11832
|
+
|
|
11833
|
+
class PraxisLegalNoticeComponent {
|
|
11834
|
+
instanceId;
|
|
11835
|
+
analyticsId;
|
|
11836
|
+
ariaLabel;
|
|
11837
|
+
title;
|
|
11838
|
+
subtitle;
|
|
11839
|
+
contentFormat = 'plain';
|
|
11840
|
+
content = '';
|
|
11841
|
+
severity = 'info';
|
|
11842
|
+
links = [];
|
|
11843
|
+
get normalizedLinks() {
|
|
11844
|
+
return (this.links || [])
|
|
11845
|
+
.map((link) => normalizeEditorialLink(link))
|
|
11846
|
+
.filter((link) => !!link);
|
|
11847
|
+
}
|
|
11848
|
+
get resolvedIcon() {
|
|
11849
|
+
switch (this.severity) {
|
|
11850
|
+
case 'warning':
|
|
11851
|
+
return 'warning';
|
|
11852
|
+
case 'muted':
|
|
11853
|
+
return 'gavel';
|
|
11854
|
+
default:
|
|
11855
|
+
return 'policy';
|
|
11856
|
+
}
|
|
11857
|
+
}
|
|
11858
|
+
get resolvedVariant() {
|
|
11859
|
+
switch (this.severity) {
|
|
11860
|
+
case 'warning':
|
|
11861
|
+
return 'emphasis';
|
|
11862
|
+
case 'muted':
|
|
11863
|
+
return 'subtle';
|
|
11864
|
+
default:
|
|
11865
|
+
return 'default';
|
|
11866
|
+
}
|
|
11867
|
+
}
|
|
11868
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisLegalNoticeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11869
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: PraxisLegalNoticeComponent, isStandalone: true, selector: "praxis-legal-notice", inputs: { instanceId: "instanceId", analyticsId: "analyticsId", ariaLabel: "ariaLabel", title: "title", subtitle: "subtitle", contentFormat: "contentFormat", content: "content", severity: "severity", links: "links" }, host: { attributes: { "role": "note" }, properties: { "attr.data-instance-id": "instanceId || null", "attr.data-analytics-id": "analyticsId || null", "attr.aria-label": "ariaLabel || title || \"Aviso legal\"" }, classAttribute: "praxis-legal-notice" }, ngImport: i0, template: `
|
|
11870
|
+
<section class="pln-shell" [class.pln-warning]="severity === 'warning'" [class.pln-muted]="severity === 'muted'">
|
|
11871
|
+
<praxis-rich-text-block
|
|
11872
|
+
[instanceId]="instanceId"
|
|
11873
|
+
[analyticsId]="analyticsId"
|
|
11874
|
+
[ariaLabel]="ariaLabel"
|
|
11875
|
+
[title]="title"
|
|
11876
|
+
[subtitle]="subtitle"
|
|
11877
|
+
[icon]="resolvedIcon"
|
|
11878
|
+
[variant]="resolvedVariant"
|
|
11879
|
+
[contentFormat]="contentFormat"
|
|
11880
|
+
[content]="content"
|
|
11881
|
+
></praxis-rich-text-block>
|
|
11882
|
+
|
|
11883
|
+
<nav class="pln-links" *ngIf="normalizedLinks.length" aria-label="Links do aviso legal">
|
|
11884
|
+
<a
|
|
11885
|
+
*ngFor="let link of normalizedLinks"
|
|
11886
|
+
class="pln-link"
|
|
11887
|
+
[href]="link.href"
|
|
11888
|
+
[attr.target]="link.target || null"
|
|
11889
|
+
[attr.rel]="link.rel || null"
|
|
11890
|
+
>
|
|
11891
|
+
{{ link.label }}
|
|
11892
|
+
</a>
|
|
11893
|
+
</nav>
|
|
11894
|
+
</section>
|
|
11895
|
+
`, isInline: true, styles: [":host{display:block}.pln-shell{display:grid;gap:10px}.pln-shell .praxis-rich-text-block .prt-block,.pln-shell .prt-block{border-left:4px solid color-mix(in srgb,var(--md-sys-color-primary) 56%,transparent)}.pln-warning .praxis-rich-text-block .prt-block,.pln-warning .prt-block{border-left-color:var(--md-sys-color-error)}.pln-muted .praxis-rich-text-block .prt-block,.pln-muted .prt-block{opacity:.92}.pln-links{display:flex;flex-wrap:wrap;gap:8px 12px;padding-left:18px}.pln-link{color:var(--md-sys-color-primary);font-size:.84rem;line-height:1.4;text-decoration:underline;text-underline-offset:2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PraxisRichTextBlockComponent, selector: "praxis-rich-text-block", inputs: ["instanceId", "analyticsId", "ariaLabel", "title", "subtitle", "icon", "variant", "contentFormat", "content"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
11896
|
+
}
|
|
11897
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisLegalNoticeComponent, decorators: [{
|
|
11898
|
+
type: Component,
|
|
11899
|
+
args: [{ selector: 'praxis-legal-notice', standalone: true, imports: [CommonModule, PraxisRichTextBlockComponent], host: {
|
|
11900
|
+
'class': 'praxis-legal-notice',
|
|
11901
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11902
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11903
|
+
'[attr.aria-label]': 'ariaLabel || title || "Aviso legal"',
|
|
11904
|
+
'role': 'note',
|
|
11905
|
+
}, template: `
|
|
11906
|
+
<section class="pln-shell" [class.pln-warning]="severity === 'warning'" [class.pln-muted]="severity === 'muted'">
|
|
11907
|
+
<praxis-rich-text-block
|
|
11908
|
+
[instanceId]="instanceId"
|
|
11909
|
+
[analyticsId]="analyticsId"
|
|
11910
|
+
[ariaLabel]="ariaLabel"
|
|
11911
|
+
[title]="title"
|
|
11912
|
+
[subtitle]="subtitle"
|
|
11913
|
+
[icon]="resolvedIcon"
|
|
11914
|
+
[variant]="resolvedVariant"
|
|
11915
|
+
[contentFormat]="contentFormat"
|
|
11916
|
+
[content]="content"
|
|
11917
|
+
></praxis-rich-text-block>
|
|
11918
|
+
|
|
11919
|
+
<nav class="pln-links" *ngIf="normalizedLinks.length" aria-label="Links do aviso legal">
|
|
11920
|
+
<a
|
|
11921
|
+
*ngFor="let link of normalizedLinks"
|
|
11922
|
+
class="pln-link"
|
|
11923
|
+
[href]="link.href"
|
|
11924
|
+
[attr.target]="link.target || null"
|
|
11925
|
+
[attr.rel]="link.rel || null"
|
|
11926
|
+
>
|
|
11927
|
+
{{ link.label }}
|
|
11928
|
+
</a>
|
|
11929
|
+
</nav>
|
|
11930
|
+
</section>
|
|
11931
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.pln-shell{display:grid;gap:10px}.pln-shell .praxis-rich-text-block .prt-block,.pln-shell .prt-block{border-left:4px solid color-mix(in srgb,var(--md-sys-color-primary) 56%,transparent)}.pln-warning .praxis-rich-text-block .prt-block,.pln-warning .prt-block{border-left-color:var(--md-sys-color-error)}.pln-muted .praxis-rich-text-block .prt-block,.pln-muted .prt-block{opacity:.92}.pln-links{display:flex;flex-wrap:wrap;gap:8px 12px;padding-left:18px}.pln-link{color:var(--md-sys-color-primary);font-size:.84rem;line-height:1.4;text-decoration:underline;text-underline-offset:2px}\n"] }]
|
|
11932
|
+
}], propDecorators: { instanceId: [{
|
|
11933
|
+
type: Input
|
|
11934
|
+
}], analyticsId: [{
|
|
11935
|
+
type: Input
|
|
11936
|
+
}], ariaLabel: [{
|
|
11937
|
+
type: Input
|
|
11938
|
+
}], title: [{
|
|
11939
|
+
type: Input
|
|
11940
|
+
}], subtitle: [{
|
|
11941
|
+
type: Input
|
|
11942
|
+
}], contentFormat: [{
|
|
11943
|
+
type: Input
|
|
11944
|
+
}], content: [{
|
|
11945
|
+
type: Input
|
|
11946
|
+
}], severity: [{
|
|
11947
|
+
type: Input
|
|
11948
|
+
}], links: [{
|
|
11949
|
+
type: Input
|
|
11950
|
+
}] } });
|
|
11951
|
+
|
|
11952
|
+
const PRAXIS_LEGAL_NOTICE_METADATA = {
|
|
11953
|
+
id: 'widget:legal-notice',
|
|
11954
|
+
selector: 'praxis-legal-notice',
|
|
11955
|
+
component: PraxisLegalNoticeComponent,
|
|
11956
|
+
friendlyName: 'Legal Notice',
|
|
11957
|
+
description: 'Aviso editorial/jurídico informativo com conteúdo seguro e links normalizados pela policy editorial.',
|
|
11958
|
+
icon: 'policy',
|
|
11959
|
+
inputs: [
|
|
11960
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11961
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11962
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do aviso legal.' },
|
|
11963
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do aviso legal.' },
|
|
11964
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Subtítulo opcional do aviso.' },
|
|
11965
|
+
{ name: 'contentFormat', type: "'plain' | 'markdown'", label: 'Formato do conteúdo', description: 'Formato editorial permitido para o corpo do aviso.', default: 'plain' },
|
|
11966
|
+
{ name: 'content', type: 'string', label: 'Conteúdo', description: 'Corpo principal do aviso legal.' },
|
|
11967
|
+
{ name: 'severity', type: "'info' | 'warning' | 'muted'", label: 'Severidade', description: 'Tom visual/semântico do aviso legal.', default: 'info' },
|
|
11968
|
+
{ name: 'links', type: 'EditorialLinkDefinition[]', label: 'Links', description: 'Links complementares do aviso, sempre normalizados pela policy editorial.' },
|
|
11969
|
+
],
|
|
11970
|
+
outputs: [],
|
|
11971
|
+
tags: ['widget', 'editorial', 'notice', 'legal', EDITORIAL_WIDGET_TAG],
|
|
11972
|
+
lib: '@praxisui/core',
|
|
11973
|
+
};
|
|
11974
|
+
function providePraxisLegalNoticeMetadata() {
|
|
11975
|
+
return {
|
|
11976
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
11977
|
+
multi: true,
|
|
11978
|
+
useFactory: (registry) => () => {
|
|
11979
|
+
registry.register(PRAXIS_LEGAL_NOTICE_METADATA);
|
|
11980
|
+
},
|
|
11981
|
+
deps: [ComponentMetadataRegistry],
|
|
11982
|
+
};
|
|
11983
|
+
}
|
|
11984
|
+
|
|
11985
|
+
const PRAXIS_RICH_TEXT_BLOCK_METADATA = {
|
|
11986
|
+
id: 'widget:rich-text-block',
|
|
11987
|
+
selector: 'praxis-rich-text-block',
|
|
11988
|
+
component: PraxisRichTextBlockComponent,
|
|
11989
|
+
friendlyName: 'Rich Text Block',
|
|
11990
|
+
description: 'Bloco editorial compartilhado para instruções, contexto institucional e conteúdo de apoio em plain text ou markdown seguro.',
|
|
11991
|
+
icon: 'article',
|
|
11992
|
+
inputs: [
|
|
11993
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11994
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11995
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do bloco.' },
|
|
11996
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do bloco.' },
|
|
11997
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Texto curto complementar abaixo do título.' },
|
|
11998
|
+
{ name: 'icon', type: 'string', label: 'Ícone', description: 'Ícone Material Symbols exibido no cabeçalho do bloco.' },
|
|
11999
|
+
{ name: 'variant', type: "'default' | 'emphasis' | 'subtle'", label: 'Variante', description: 'Variante visual do bloco editorial.', default: 'default' },
|
|
12000
|
+
{ name: 'contentFormat', type: "'plain' | 'markdown'", label: 'Formato do conteúdo', description: 'Formato editorial permitido para renderização do conteúdo.', default: 'plain' },
|
|
12001
|
+
{ name: 'content', type: 'string', label: 'Conteúdo', description: 'Corpo principal do bloco em plain text ou markdown seguro.' },
|
|
12002
|
+
],
|
|
12003
|
+
outputs: [],
|
|
12004
|
+
tags: ['widget', 'editorial', 'content', EDITORIAL_WIDGET_TAG],
|
|
12005
|
+
lib: '@praxisui/core',
|
|
12006
|
+
};
|
|
12007
|
+
function providePraxisRichTextBlockMetadata() {
|
|
12008
|
+
return {
|
|
12009
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
12010
|
+
multi: true,
|
|
12011
|
+
useFactory: (registry) => () => {
|
|
12012
|
+
registry.register(PRAXIS_RICH_TEXT_BLOCK_METADATA);
|
|
12013
|
+
},
|
|
12014
|
+
deps: [ComponentMetadataRegistry],
|
|
12015
|
+
};
|
|
12016
|
+
}
|
|
12017
|
+
|
|
12018
|
+
class PraxisUserContextSummaryComponent {
|
|
12019
|
+
instanceId;
|
|
12020
|
+
analyticsId;
|
|
12021
|
+
ariaLabel;
|
|
12022
|
+
title;
|
|
12023
|
+
subtitle;
|
|
12024
|
+
source = 'context';
|
|
12025
|
+
context = null;
|
|
12026
|
+
fields = [];
|
|
12027
|
+
actionId = 'change-context';
|
|
12028
|
+
actionLabel;
|
|
12029
|
+
actionTriggered = new EventEmitter();
|
|
12030
|
+
get resolvedFields() {
|
|
12031
|
+
return (this.fields || []).map((field) => ({
|
|
12032
|
+
label: field.label,
|
|
12033
|
+
value: this.resolveFieldValue(field),
|
|
12034
|
+
}));
|
|
12035
|
+
}
|
|
12036
|
+
emitAction() {
|
|
12037
|
+
this.actionTriggered.emit({ actionId: this.actionId || 'change-context' });
|
|
12038
|
+
}
|
|
12039
|
+
resolveFieldValue(field) {
|
|
12040
|
+
if (typeof field.value === 'string' && field.value.trim()) {
|
|
12041
|
+
return field.value;
|
|
12042
|
+
}
|
|
12043
|
+
if (this.source === 'context' && field.valuePath) {
|
|
12044
|
+
const resolved = lookupPath(this.context, field.valuePath);
|
|
12045
|
+
if (resolved != null && String(resolved).trim() !== '') {
|
|
12046
|
+
return String(resolved);
|
|
12047
|
+
}
|
|
12048
|
+
}
|
|
12049
|
+
return field.fallback || '-';
|
|
12050
|
+
}
|
|
12051
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisUserContextSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12052
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: PraxisUserContextSummaryComponent, isStandalone: true, selector: "praxis-user-context-summary", inputs: { instanceId: "instanceId", analyticsId: "analyticsId", ariaLabel: "ariaLabel", title: "title", subtitle: "subtitle", source: "source", context: "context", fields: "fields", actionId: "actionId", actionLabel: "actionLabel" }, outputs: { actionTriggered: "actionTriggered" }, host: { properties: { "attr.data-instance-id": "instanceId || null", "attr.data-analytics-id": "analyticsId || null", "attr.aria-label": "ariaLabel || null", "attr.role": "ariaLabel ? \"region\" : null" }, classAttribute: "praxis-user-context-summary" }, ngImport: i0, template: `
|
|
12053
|
+
<section class="pux-card">
|
|
12054
|
+
<header class="pux-head" *ngIf="title || subtitle">
|
|
12055
|
+
<h3 class="pux-title" *ngIf="title">{{ title }}</h3>
|
|
12056
|
+
<p class="pux-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
12057
|
+
</header>
|
|
12058
|
+
|
|
12059
|
+
<dl class="pux-grid" *ngIf="resolvedFields.length; else emptyState">
|
|
12060
|
+
<div class="pux-item" *ngFor="let field of resolvedFields">
|
|
12061
|
+
<dt>{{ field.label }}</dt>
|
|
12062
|
+
<dd>{{ field.value }}</dd>
|
|
12063
|
+
</div>
|
|
12064
|
+
</dl>
|
|
12065
|
+
|
|
12066
|
+
<ng-template #emptyState>
|
|
12067
|
+
<p class="pux-empty">Nenhum contexto disponivel.</p>
|
|
12068
|
+
</ng-template>
|
|
12069
|
+
|
|
12070
|
+
<div class="pux-actions" *ngIf="actionLabel">
|
|
12071
|
+
<button type="button" class="pux-action" (click)="emitAction()">{{ actionLabel }}</button>
|
|
12072
|
+
</div>
|
|
12073
|
+
</section>
|
|
12074
|
+
`, isInline: true, styles: [":host{display:block}.pux-card{display:grid;gap:14px;padding:16px 18px;border-radius:18px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 78%,transparent);background:linear-gradient(180deg,#fffffffa,#f4f8fcfa)}.pux-head{display:grid;gap:4px}.pux-title{margin:0;color:var(--md-sys-color-on-surface);font-size:.98rem;font-weight:700}.pux-subtitle{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.84rem;line-height:1.5}.pux-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:0}.pux-item{display:grid;gap:4px;padding:12px 14px;border-radius:14px;background:#ffffffb8;border:1px solid rgba(66,93,135,.1)}.pux-item dt{margin:0;color:#5d7186;font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.pux-item dd{margin:0;color:#17314f;font-size:.92rem;line-height:1.45}.pux-actions{display:flex;justify-content:flex-start}.pux-action{min-height:36px;padding:0 14px;border:1px solid rgba(33,88,201,.18);border-radius:999px;background:#2060d214;color:#1e55b8;font:inherit;font-size:.84rem;font-weight:700;cursor:pointer}.pux-empty{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.84rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
12075
|
+
}
|
|
12076
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisUserContextSummaryComponent, decorators: [{
|
|
12077
|
+
type: Component,
|
|
12078
|
+
args: [{ selector: 'praxis-user-context-summary', standalone: true, imports: [CommonModule], host: {
|
|
12079
|
+
'class': 'praxis-user-context-summary',
|
|
12080
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
12081
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
12082
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
12083
|
+
'[attr.role]': 'ariaLabel ? "region" : null',
|
|
12084
|
+
}, template: `
|
|
12085
|
+
<section class="pux-card">
|
|
12086
|
+
<header class="pux-head" *ngIf="title || subtitle">
|
|
12087
|
+
<h3 class="pux-title" *ngIf="title">{{ title }}</h3>
|
|
12088
|
+
<p class="pux-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
12089
|
+
</header>
|
|
12090
|
+
|
|
12091
|
+
<dl class="pux-grid" *ngIf="resolvedFields.length; else emptyState">
|
|
12092
|
+
<div class="pux-item" *ngFor="let field of resolvedFields">
|
|
12093
|
+
<dt>{{ field.label }}</dt>
|
|
12094
|
+
<dd>{{ field.value }}</dd>
|
|
12095
|
+
</div>
|
|
12096
|
+
</dl>
|
|
12097
|
+
|
|
12098
|
+
<ng-template #emptyState>
|
|
12099
|
+
<p class="pux-empty">Nenhum contexto disponivel.</p>
|
|
12100
|
+
</ng-template>
|
|
12101
|
+
|
|
12102
|
+
<div class="pux-actions" *ngIf="actionLabel">
|
|
12103
|
+
<button type="button" class="pux-action" (click)="emitAction()">{{ actionLabel }}</button>
|
|
12104
|
+
</div>
|
|
12105
|
+
</section>
|
|
12106
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}.pux-card{display:grid;gap:14px;padding:16px 18px;border-radius:18px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 78%,transparent);background:linear-gradient(180deg,#fffffffa,#f4f8fcfa)}.pux-head{display:grid;gap:4px}.pux-title{margin:0;color:var(--md-sys-color-on-surface);font-size:.98rem;font-weight:700}.pux-subtitle{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.84rem;line-height:1.5}.pux-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:10px;margin:0}.pux-item{display:grid;gap:4px;padding:12px 14px;border-radius:14px;background:#ffffffb8;border:1px solid rgba(66,93,135,.1)}.pux-item dt{margin:0;color:#5d7186;font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em}.pux-item dd{margin:0;color:#17314f;font-size:.92rem;line-height:1.45}.pux-actions{display:flex;justify-content:flex-start}.pux-action{min-height:36px;padding:0 14px;border:1px solid rgba(33,88,201,.18);border-radius:999px;background:#2060d214;color:#1e55b8;font:inherit;font-size:.84rem;font-weight:700;cursor:pointer}.pux-empty{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.84rem}\n"] }]
|
|
12107
|
+
}], propDecorators: { instanceId: [{
|
|
12108
|
+
type: Input
|
|
12109
|
+
}], analyticsId: [{
|
|
12110
|
+
type: Input
|
|
12111
|
+
}], ariaLabel: [{
|
|
12112
|
+
type: Input
|
|
12113
|
+
}], title: [{
|
|
12114
|
+
type: Input
|
|
12115
|
+
}], subtitle: [{
|
|
12116
|
+
type: Input
|
|
12117
|
+
}], source: [{
|
|
12118
|
+
type: Input
|
|
12119
|
+
}], context: [{
|
|
12120
|
+
type: Input
|
|
12121
|
+
}], fields: [{
|
|
12122
|
+
type: Input
|
|
12123
|
+
}], actionId: [{
|
|
12124
|
+
type: Input
|
|
12125
|
+
}], actionLabel: [{
|
|
12126
|
+
type: Input
|
|
12127
|
+
}], actionTriggered: [{
|
|
12128
|
+
type: Output
|
|
12129
|
+
}] } });
|
|
12130
|
+
function lookupPath(context, path) {
|
|
12131
|
+
if (!context || !path.trim())
|
|
12132
|
+
return undefined;
|
|
12133
|
+
return path.split('.').reduce((acc, key) => {
|
|
12134
|
+
if (acc && typeof acc === 'object') {
|
|
12135
|
+
return acc[key];
|
|
12136
|
+
}
|
|
12137
|
+
return undefined;
|
|
12138
|
+
}, context);
|
|
12139
|
+
}
|
|
12140
|
+
|
|
12141
|
+
const PRAXIS_USER_CONTEXT_SUMMARY_METADATA = {
|
|
12142
|
+
id: 'form:user-context-summary',
|
|
12143
|
+
selector: 'praxis-user-context-summary',
|
|
12144
|
+
component: PraxisUserContextSummaryComponent,
|
|
12145
|
+
friendlyName: 'User Context Summary',
|
|
12146
|
+
description: 'Resumo contextual do usuário/tenant próximo ao formulário, sem participar de validação ou formData.',
|
|
12147
|
+
icon: 'account_circle',
|
|
12148
|
+
inputs: [
|
|
12149
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
12150
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
12151
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do resumo contextual.' },
|
|
12152
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do resumo.' },
|
|
12153
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Texto auxiliar explicando o contexto exibido.' },
|
|
12154
|
+
{ name: 'source', type: "'context' | 'static'", label: 'Fonte', description: 'Origem dos dados do resumo contextual.', default: 'context' },
|
|
12155
|
+
{ name: 'context', type: 'Record<string, unknown> | null', label: 'Contexto', description: 'Objeto tipado usado para resolver valuePath dos campos.' },
|
|
12156
|
+
{ name: 'fields', type: 'Array<{ label: string; valuePath?: string; value?: string; fallback?: string }>', label: 'Campos', description: 'Campos exibidos no resumo, com resolução por valuePath ou valor estático.' },
|
|
12157
|
+
{ name: 'actionId', type: 'string', label: 'Action ID', description: 'Identificador canônico da ação opcional emitida pelo componente.', default: 'change-context' },
|
|
12158
|
+
{ name: 'actionLabel', type: 'string', label: 'Action Label', description: 'Texto do CTA opcional para trocar conta/unidade/contexto.' },
|
|
12159
|
+
],
|
|
12160
|
+
outputs: [
|
|
12161
|
+
{ name: 'actionTriggered', type: '{ actionId: string }', label: 'Ação disparada', description: 'Output emitido quando o CTA opcional do resumo contextual é acionado.' },
|
|
12162
|
+
],
|
|
12163
|
+
tags: ['widget', 'editorial', 'context', 'user', 'form', EDITORIAL_WIDGET_TAG],
|
|
12164
|
+
lib: '@praxisui/core',
|
|
12165
|
+
};
|
|
12166
|
+
function providePraxisUserContextSummaryMetadata() {
|
|
12167
|
+
return {
|
|
12168
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
12169
|
+
multi: true,
|
|
12170
|
+
useFactory: (registry) => () => {
|
|
12171
|
+
registry.register(PRAXIS_USER_CONTEXT_SUMMARY_METADATA);
|
|
12172
|
+
},
|
|
12173
|
+
deps: [ComponentMetadataRegistry],
|
|
12174
|
+
};
|
|
12175
|
+
}
|
|
12176
|
+
|
|
11325
12177
|
/**
|
|
11326
12178
|
* Carrega dinamicamente um componente "widget" (de página) a partir de um id registrado
|
|
11327
12179
|
* no ComponentMetadataRegistry e aplica bindings declarados em JSON (WidgetDefinition).
|
|
@@ -14690,5 +15542,5 @@ function provideHookWhitelist(allowed) {
|
|
|
14690
15542
|
* Generated bundle index. Do not edit.
|
|
14691
15543
|
*/
|
|
14692
15544
|
|
|
14693
|
-
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, ApiConfigStorage, ApiEndpoint, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, ConnectionManagerService, ConsoleLoggerSink, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_TABLE_CONFIG, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DynamicFormService, DynamicGridPageComponent, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG$1 as GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_CATALOG as GLOBAL_ACTION_SPEC_CATALOG, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_ALIAS_TOKEN_TO_CONTROL_TYPE, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_TELEMETRY_TRANSPORT, PraxisCore, PraxisGlobalErrorHandler, PraxisIconDirective, PraxisIconPickerComponent, PraxisLoadingInterceptor, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceQuickConnectComponent, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildHeaders, buildPageKey, buildSchemaId, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEssentialConfig, getFieldMetadataCapabilities, getGlobalActionCatalog, getGlobalActionUiSchema, getReferencedFieldMetadata, getTextTransformer, isCssTextTransform, isInlineFilterControlType, isRangeValidForFilter, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergeTableConfigs, migrateFormLayoutRule, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormMetadata, normalizePath, normalizeStart, normalizeUnknownError, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisDynamicPageMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHttpLoading, providePraxisLoadingDefaults, providePraxisLogging, providePraxisToastGlobalActions, provideRemoteGlobalConfig, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveHidden, resolveInlineFilterAliasToBaseControlType, resolveInlineFilterControlTypeAlias, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolveSpan, slugify, stripMasksHook, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, trim, uniqueAsyncValidator, urlValidator, withMessage, withPraxisHttpLoading };
|
|
15545
|
+
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, ApiConfigStorage, ApiEndpoint, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, ConnectionManagerService, ConsoleLoggerSink, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_TABLE_CONFIG, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DynamicFormService, DynamicGridPageComponent, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EmptyStateCardComponent, ErrorMessageService, FIELD_METADATA_CAPABILITIES, FIELD_SELECTOR_REGISTRY_BASE, FIELD_SELECTOR_REGISTRY_DISABLE_DEFAULTS, FIELD_SELECTOR_REGISTRY_OVERRIDES, FORM_HOOKS, FORM_HOOKS_PRESETS, FORM_HOOKS_WHITELIST, FORM_HOOK_RESOLVERS, FieldControlType, FieldDataType, FieldSelectorRegistry, FormHooksRegistry, GLOBAL_ACTION_CATALOG$1 as GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_CATALOG as GLOBAL_ACTION_SPEC_CATALOG, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_ALIAS_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_ALIAS_TOKEN_TO_CONTROL_TYPE, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisIconDirective, PraxisIconPickerComponent, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisUserContextSummaryComponent, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceQuickConnectComponent, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildHeaders, buildPageKey, buildSchemaId, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEssentialConfig, getFieldMetadataCapabilities, getGlobalActionCatalog, getGlobalActionUiSchema, getReferencedFieldMetadata, getTextTransformer, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isInlineFilterControlType, isRangeValidForFilter, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergeTableConfigs, migrateFormLayoutRule, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormMetadata, normalizePath, normalizeStart, normalizeUnknownError, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpLoading, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveHidden, resolveInlineFilterAliasToBaseControlType, resolveInlineFilterControlTypeAlias, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolveSpan, slugify, stripMasksHook, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, trim, uniqueAsyncValidator, urlValidator, withMessage, withPraxisHttpLoading };
|
|
14694
15546
|
//# sourceMappingURL=praxisui-core.mjs.map
|