@praxisui/core 1.0.0-beta.59 → 1.0.0-beta.61
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 +861 -6
- package/fesm2022/praxisui-core.mjs.map +1 -1
- package/index.d.ts +204 -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 {
|
|
@@ -8042,6 +8065,9 @@ function createDefaultFormConfig() {
|
|
|
8042
8065
|
],
|
|
8043
8066
|
},
|
|
8044
8067
|
],
|
|
8068
|
+
formBlocksBefore: [],
|
|
8069
|
+
formBlocksBeforeActions: [],
|
|
8070
|
+
formBlocksAfter: [],
|
|
8045
8071
|
// Default mode hints (didactic tooltips)
|
|
8046
8072
|
hints: getDefaultFormHints(),
|
|
8047
8073
|
};
|
|
@@ -8054,7 +8080,7 @@ function isValidFormConfig(config) {
|
|
|
8054
8080
|
* Cria configuração vazia para inicialização
|
|
8055
8081
|
*/
|
|
8056
8082
|
function createEmptyFormConfig() {
|
|
8057
|
-
return { sections: [] };
|
|
8083
|
+
return { sections: [], formBlocksBefore: [], formBlocksBeforeActions: [], formBlocksAfter: [] };
|
|
8058
8084
|
}
|
|
8059
8085
|
/**
|
|
8060
8086
|
* Default hint texts for data and UI modes.
|
|
@@ -11236,6 +11262,330 @@ const DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK = {
|
|
|
11236
11262
|
],
|
|
11237
11263
|
};
|
|
11238
11264
|
|
|
11265
|
+
const EDITORIAL_ALLOWED_CONTENT_FORMATS = ['plain', 'markdown'];
|
|
11266
|
+
const EDITORIAL_HTML_ENABLED = false;
|
|
11267
|
+
const EDITORIAL_MARKDOWN_IMAGES_ENABLED = false;
|
|
11268
|
+
const EDITORIAL_EXTERNAL_LINK_REL = 'noopener noreferrer';
|
|
11269
|
+
const DISALLOWED_HREF_PROTOCOL = /^(javascript|data|vbscript|file):/i;
|
|
11270
|
+
const ABSOLUTE_HTTP_PROTOCOL = /^https?:\/\//i;
|
|
11271
|
+
const RELATIVE_OR_SPECIAL_HREF = /^(\/|\.\/|\.\.\/|#|mailto:|tel:)/i;
|
|
11272
|
+
function isAllowedEditorialContentFormat(value) {
|
|
11273
|
+
return value === 'plain' || value === 'markdown';
|
|
11274
|
+
}
|
|
11275
|
+
function isAllowedEditorialHref(href) {
|
|
11276
|
+
if (typeof href !== 'string')
|
|
11277
|
+
return false;
|
|
11278
|
+
const trimmed = href.trim();
|
|
11279
|
+
if (!trimmed)
|
|
11280
|
+
return false;
|
|
11281
|
+
if (DISALLOWED_HREF_PROTOCOL.test(trimmed))
|
|
11282
|
+
return false;
|
|
11283
|
+
return ABSOLUTE_HTTP_PROTOCOL.test(trimmed) || RELATIVE_OR_SPECIAL_HREF.test(trimmed);
|
|
11284
|
+
}
|
|
11285
|
+
function normalizeEditorialLink(link) {
|
|
11286
|
+
const label = typeof link?.label === 'string' ? link.label.trim() : '';
|
|
11287
|
+
const href = typeof link?.href === 'string' ? link.href.trim() : '';
|
|
11288
|
+
if (!label || !isAllowedEditorialHref(href)) {
|
|
11289
|
+
return null;
|
|
11290
|
+
}
|
|
11291
|
+
const isExternalHttp = ABSOLUTE_HTTP_PROTOCOL.test(href);
|
|
11292
|
+
const external = isExternalHttp ? true : (link.external ?? false);
|
|
11293
|
+
const target = external ? '_blank' : (link.target ?? '_self');
|
|
11294
|
+
const rel = external ? mergeRel(link.rel, EDITORIAL_EXTERNAL_LINK_REL) : link.rel;
|
|
11295
|
+
return {
|
|
11296
|
+
...link,
|
|
11297
|
+
label,
|
|
11298
|
+
href,
|
|
11299
|
+
external,
|
|
11300
|
+
target,
|
|
11301
|
+
rel,
|
|
11302
|
+
};
|
|
11303
|
+
}
|
|
11304
|
+
function mergeRel(current, required) {
|
|
11305
|
+
const parts = new Set((current || '').split(/\s+/).filter(Boolean));
|
|
11306
|
+
for (const token of required.split(/\s+/)) {
|
|
11307
|
+
parts.add(token);
|
|
11308
|
+
}
|
|
11309
|
+
return Array.from(parts).join(' ');
|
|
11310
|
+
}
|
|
11311
|
+
|
|
11312
|
+
class PraxisFooterLinksComponent {
|
|
11313
|
+
instanceId;
|
|
11314
|
+
analyticsId;
|
|
11315
|
+
ariaLabel;
|
|
11316
|
+
brandText;
|
|
11317
|
+
secondaryText;
|
|
11318
|
+
links = [];
|
|
11319
|
+
layout = 'inline';
|
|
11320
|
+
get normalizedLinks() {
|
|
11321
|
+
return (this.links || [])
|
|
11322
|
+
.map((link) => normalizeEditorialLink(link))
|
|
11323
|
+
.filter((link) => !!link);
|
|
11324
|
+
}
|
|
11325
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisFooterLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11326
|
+
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: `
|
|
11327
|
+
<footer class="pfl-shell" [class.pfl-stacked]="layout === 'stacked'">
|
|
11328
|
+
<div class="pfl-brand" *ngIf="brandText || secondaryText">
|
|
11329
|
+
<strong class="pfl-brand-text" *ngIf="brandText">{{ brandText }}</strong>
|
|
11330
|
+
<span class="pfl-secondary-text" *ngIf="secondaryText">{{ secondaryText }}</span>
|
|
11331
|
+
</div>
|
|
11332
|
+
|
|
11333
|
+
<nav class="pfl-nav" aria-label="Links institucionais">
|
|
11334
|
+
<a
|
|
11335
|
+
*ngFor="let link of normalizedLinks"
|
|
11336
|
+
class="pfl-link"
|
|
11337
|
+
[href]="link.href"
|
|
11338
|
+
[attr.target]="link.target || null"
|
|
11339
|
+
[attr.rel]="link.rel || null"
|
|
11340
|
+
>
|
|
11341
|
+
{{ link.label }}
|
|
11342
|
+
</a>
|
|
11343
|
+
</nav>
|
|
11344
|
+
</footer>
|
|
11345
|
+
`, 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 });
|
|
11346
|
+
}
|
|
11347
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisFooterLinksComponent, decorators: [{
|
|
11348
|
+
type: Component,
|
|
11349
|
+
args: [{ selector: 'praxis-footer-links', standalone: true, imports: [CommonModule], host: {
|
|
11350
|
+
'class': 'praxis-footer-links',
|
|
11351
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11352
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11353
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
11354
|
+
'role': 'contentinfo',
|
|
11355
|
+
}, template: `
|
|
11356
|
+
<footer class="pfl-shell" [class.pfl-stacked]="layout === 'stacked'">
|
|
11357
|
+
<div class="pfl-brand" *ngIf="brandText || secondaryText">
|
|
11358
|
+
<strong class="pfl-brand-text" *ngIf="brandText">{{ brandText }}</strong>
|
|
11359
|
+
<span class="pfl-secondary-text" *ngIf="secondaryText">{{ secondaryText }}</span>
|
|
11360
|
+
</div>
|
|
11361
|
+
|
|
11362
|
+
<nav class="pfl-nav" aria-label="Links institucionais">
|
|
11363
|
+
<a
|
|
11364
|
+
*ngFor="let link of normalizedLinks"
|
|
11365
|
+
class="pfl-link"
|
|
11366
|
+
[href]="link.href"
|
|
11367
|
+
[attr.target]="link.target || null"
|
|
11368
|
+
[attr.rel]="link.rel || null"
|
|
11369
|
+
>
|
|
11370
|
+
{{ link.label }}
|
|
11371
|
+
</a>
|
|
11372
|
+
</nav>
|
|
11373
|
+
</footer>
|
|
11374
|
+
`, 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"] }]
|
|
11375
|
+
}], propDecorators: { instanceId: [{
|
|
11376
|
+
type: Input
|
|
11377
|
+
}], analyticsId: [{
|
|
11378
|
+
type: Input
|
|
11379
|
+
}], ariaLabel: [{
|
|
11380
|
+
type: Input
|
|
11381
|
+
}], brandText: [{
|
|
11382
|
+
type: Input
|
|
11383
|
+
}], secondaryText: [{
|
|
11384
|
+
type: Input
|
|
11385
|
+
}], links: [{
|
|
11386
|
+
type: Input
|
|
11387
|
+
}], layout: [{
|
|
11388
|
+
type: Input
|
|
11389
|
+
}] } });
|
|
11390
|
+
|
|
11391
|
+
const PRAXIS_FOOTER_LINKS_METADATA = {
|
|
11392
|
+
id: 'widget:footer-links',
|
|
11393
|
+
selector: 'praxis-footer-links',
|
|
11394
|
+
component: PraxisFooterLinksComponent,
|
|
11395
|
+
friendlyName: 'Footer Links',
|
|
11396
|
+
description: 'Rodapé institucional com marca opcional, texto secundário e links normalizados pela policy editorial.',
|
|
11397
|
+
icon: 'footer',
|
|
11398
|
+
inputs: [
|
|
11399
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11400
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11401
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do rodapé institucional.' },
|
|
11402
|
+
{ name: 'brandText', type: 'string', label: 'Marca', description: 'Texto principal opcional da marca ou instituição.' },
|
|
11403
|
+
{ name: 'secondaryText', type: 'string', label: 'Texto secundário', description: 'Texto secundário opcional do rodapé.' },
|
|
11404
|
+
{ name: 'links', type: 'EditorialLinkDefinition[]', label: 'Links', description: 'Lista ordenada de links institucionais.' },
|
|
11405
|
+
{ name: 'layout', type: "'inline' | 'stacked'", label: 'Layout', description: 'Layout inicial do rodapé institucional.', default: 'inline' },
|
|
11406
|
+
],
|
|
11407
|
+
outputs: [],
|
|
11408
|
+
tags: ['widget', 'editorial', 'footer', 'links', EDITORIAL_WIDGET_TAG],
|
|
11409
|
+
lib: '@praxisui/core',
|
|
11410
|
+
};
|
|
11411
|
+
function providePraxisFooterLinksMetadata() {
|
|
11412
|
+
return {
|
|
11413
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
11414
|
+
multi: true,
|
|
11415
|
+
useFactory: (registry) => () => {
|
|
11416
|
+
registry.register(PRAXIS_FOOTER_LINKS_METADATA);
|
|
11417
|
+
},
|
|
11418
|
+
deps: [ComponentMetadataRegistry],
|
|
11419
|
+
};
|
|
11420
|
+
}
|
|
11421
|
+
|
|
11422
|
+
class PraxisHeroBannerComponent {
|
|
11423
|
+
instanceId;
|
|
11424
|
+
analyticsId;
|
|
11425
|
+
ariaLabel;
|
|
11426
|
+
title;
|
|
11427
|
+
subtitle;
|
|
11428
|
+
description;
|
|
11429
|
+
imageUrl;
|
|
11430
|
+
imageAlt;
|
|
11431
|
+
badges = [];
|
|
11432
|
+
metaItems = [];
|
|
11433
|
+
variant = 'default';
|
|
11434
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisHeroBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11435
|
+
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: `
|
|
11436
|
+
<section class="phb-shell" [class.phb-event]="variant === 'event'" [class.phb-institutional]="variant === 'institutional'">
|
|
11437
|
+
<div class="phb-copy">
|
|
11438
|
+
<div class="phb-badges" *ngIf="badges?.length">
|
|
11439
|
+
<span
|
|
11440
|
+
class="phb-badge"
|
|
11441
|
+
*ngFor="let badge of badges"
|
|
11442
|
+
[class.phb-badge-highlight]="badge.tone === 'highlight'"
|
|
11443
|
+
[class.phb-badge-muted]="badge.tone === 'muted'"
|
|
11444
|
+
[class.phb-badge-warning]="badge.tone === 'warning'"
|
|
11445
|
+
>
|
|
11446
|
+
{{ badge.label }}
|
|
11447
|
+
</span>
|
|
11448
|
+
</div>
|
|
11449
|
+
|
|
11450
|
+
<div class="phb-text">
|
|
11451
|
+
<p class="phb-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11452
|
+
<h2 class="phb-title" *ngIf="title">{{ title }}</h2>
|
|
11453
|
+
<p class="phb-description" *ngIf="description">{{ description }}</p>
|
|
11454
|
+
</div>
|
|
11455
|
+
|
|
11456
|
+
<dl class="phb-meta" *ngIf="metaItems?.length">
|
|
11457
|
+
<div class="phb-meta-item" *ngFor="let item of metaItems">
|
|
11458
|
+
<dt>{{ item.label }}</dt>
|
|
11459
|
+
<dd>{{ item.value }}</dd>
|
|
11460
|
+
</div>
|
|
11461
|
+
</dl>
|
|
11462
|
+
</div>
|
|
11463
|
+
|
|
11464
|
+
<div class="phb-visual" *ngIf="imageUrl; else noImage">
|
|
11465
|
+
<img class="phb-image" [src]="imageUrl" [alt]="imageAlt || title || subtitle || 'Imagem do destaque'" />
|
|
11466
|
+
</div>
|
|
11467
|
+
|
|
11468
|
+
<ng-template #noImage>
|
|
11469
|
+
<div class="phb-visual phb-visual-fallback" aria-hidden="true">
|
|
11470
|
+
<div class="phb-orb phb-orb-a"></div>
|
|
11471
|
+
<div class="phb-orb phb-orb-b"></div>
|
|
11472
|
+
<div class="phb-grid"></div>
|
|
11473
|
+
</div>
|
|
11474
|
+
</ng-template>
|
|
11475
|
+
</section>
|
|
11476
|
+
`, 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 });
|
|
11477
|
+
}
|
|
11478
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisHeroBannerComponent, decorators: [{
|
|
11479
|
+
type: Component,
|
|
11480
|
+
args: [{ selector: 'praxis-hero-banner', standalone: true, imports: [CommonModule], host: {
|
|
11481
|
+
'class': 'praxis-hero-banner',
|
|
11482
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11483
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11484
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
11485
|
+
'[attr.role]': 'ariaLabel ? "region" : null',
|
|
11486
|
+
'[attr.data-variant]': 'variant',
|
|
11487
|
+
}, template: `
|
|
11488
|
+
<section class="phb-shell" [class.phb-event]="variant === 'event'" [class.phb-institutional]="variant === 'institutional'">
|
|
11489
|
+
<div class="phb-copy">
|
|
11490
|
+
<div class="phb-badges" *ngIf="badges?.length">
|
|
11491
|
+
<span
|
|
11492
|
+
class="phb-badge"
|
|
11493
|
+
*ngFor="let badge of badges"
|
|
11494
|
+
[class.phb-badge-highlight]="badge.tone === 'highlight'"
|
|
11495
|
+
[class.phb-badge-muted]="badge.tone === 'muted'"
|
|
11496
|
+
[class.phb-badge-warning]="badge.tone === 'warning'"
|
|
11497
|
+
>
|
|
11498
|
+
{{ badge.label }}
|
|
11499
|
+
</span>
|
|
11500
|
+
</div>
|
|
11501
|
+
|
|
11502
|
+
<div class="phb-text">
|
|
11503
|
+
<p class="phb-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11504
|
+
<h2 class="phb-title" *ngIf="title">{{ title }}</h2>
|
|
11505
|
+
<p class="phb-description" *ngIf="description">{{ description }}</p>
|
|
11506
|
+
</div>
|
|
11507
|
+
|
|
11508
|
+
<dl class="phb-meta" *ngIf="metaItems?.length">
|
|
11509
|
+
<div class="phb-meta-item" *ngFor="let item of metaItems">
|
|
11510
|
+
<dt>{{ item.label }}</dt>
|
|
11511
|
+
<dd>{{ item.value }}</dd>
|
|
11512
|
+
</div>
|
|
11513
|
+
</dl>
|
|
11514
|
+
</div>
|
|
11515
|
+
|
|
11516
|
+
<div class="phb-visual" *ngIf="imageUrl; else noImage">
|
|
11517
|
+
<img class="phb-image" [src]="imageUrl" [alt]="imageAlt || title || subtitle || 'Imagem do destaque'" />
|
|
11518
|
+
</div>
|
|
11519
|
+
|
|
11520
|
+
<ng-template #noImage>
|
|
11521
|
+
<div class="phb-visual phb-visual-fallback" aria-hidden="true">
|
|
11522
|
+
<div class="phb-orb phb-orb-a"></div>
|
|
11523
|
+
<div class="phb-orb phb-orb-b"></div>
|
|
11524
|
+
<div class="phb-grid"></div>
|
|
11525
|
+
</div>
|
|
11526
|
+
</ng-template>
|
|
11527
|
+
</section>
|
|
11528
|
+
`, 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"] }]
|
|
11529
|
+
}], propDecorators: { instanceId: [{
|
|
11530
|
+
type: Input
|
|
11531
|
+
}], analyticsId: [{
|
|
11532
|
+
type: Input
|
|
11533
|
+
}], ariaLabel: [{
|
|
11534
|
+
type: Input
|
|
11535
|
+
}], title: [{
|
|
11536
|
+
type: Input
|
|
11537
|
+
}], subtitle: [{
|
|
11538
|
+
type: Input
|
|
11539
|
+
}], description: [{
|
|
11540
|
+
type: Input
|
|
11541
|
+
}], imageUrl: [{
|
|
11542
|
+
type: Input
|
|
11543
|
+
}], imageAlt: [{
|
|
11544
|
+
type: Input
|
|
11545
|
+
}], badges: [{
|
|
11546
|
+
type: Input
|
|
11547
|
+
}], metaItems: [{
|
|
11548
|
+
type: Input
|
|
11549
|
+
}], variant: [{
|
|
11550
|
+
type: Input
|
|
11551
|
+
}] } });
|
|
11552
|
+
|
|
11553
|
+
const PRAXIS_HERO_BANNER_METADATA = {
|
|
11554
|
+
id: 'widget:hero-banner',
|
|
11555
|
+
selector: 'praxis-hero-banner',
|
|
11556
|
+
component: PraxisHeroBannerComponent,
|
|
11557
|
+
friendlyName: 'Hero Banner',
|
|
11558
|
+
description: 'Bloco editorial de abertura para experiências institucionais, com badges, metadados e visual responsivo.',
|
|
11559
|
+
icon: 'campaign',
|
|
11560
|
+
inputs: [
|
|
11561
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11562
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11563
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do hero.' },
|
|
11564
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do hero.' },
|
|
11565
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Kicker ou subtítulo acima do título.' },
|
|
11566
|
+
{ name: 'description', type: 'string', label: 'Descrição', description: 'Descrição principal do destaque.' },
|
|
11567
|
+
{ name: 'imageUrl', type: 'string', label: 'Imagem', description: 'URL opcional da imagem de apoio.' },
|
|
11568
|
+
{ name: 'imageAlt', type: 'string', label: 'Alt da imagem', description: 'Texto alternativo da imagem, quando presente.' },
|
|
11569
|
+
{ name: 'badges', type: 'Array<{ label: string; tone?: "default" | "highlight" | "muted" | "warning" }>', label: 'Badges', description: 'Badges curatoriais no topo do hero.' },
|
|
11570
|
+
{ name: 'metaItems', type: 'Array<{ label: string; value: string }>', label: 'Metadados', description: 'Metadados como data, local ou tenant.' },
|
|
11571
|
+
{ name: 'variant', type: "'default' | 'event' | 'institutional'", label: 'Variante', description: 'Variante visual inicial do hero banner.', default: 'default' },
|
|
11572
|
+
],
|
|
11573
|
+
outputs: [],
|
|
11574
|
+
tags: ['widget', 'editorial', 'hero', 'banner', EDITORIAL_WIDGET_TAG],
|
|
11575
|
+
lib: '@praxisui/core',
|
|
11576
|
+
layoutHints: { recommendedCols: 8, recommendedRows: 3, minCols: 4, minRows: 2 },
|
|
11577
|
+
};
|
|
11578
|
+
function providePraxisHeroBannerMetadata() {
|
|
11579
|
+
return {
|
|
11580
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
11581
|
+
multi: true,
|
|
11582
|
+
useFactory: (registry) => () => {
|
|
11583
|
+
registry.register(PRAXIS_HERO_BANNER_METADATA);
|
|
11584
|
+
},
|
|
11585
|
+
deps: [ComponentMetadataRegistry],
|
|
11586
|
+
};
|
|
11587
|
+
}
|
|
11588
|
+
|
|
11239
11589
|
/**
|
|
11240
11590
|
* Binds a stored icon string to a mat-icon element supporting:
|
|
11241
11591
|
* - Material Icons (classic ligatures): "mi:pending" or "pending"
|
|
@@ -11322,6 +11672,511 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
11322
11672
|
args: ['praxisIcon']
|
|
11323
11673
|
}] } });
|
|
11324
11674
|
|
|
11675
|
+
class PraxisRichTextBlockComponent {
|
|
11676
|
+
sanitizer = inject(DomSanitizer);
|
|
11677
|
+
instanceId;
|
|
11678
|
+
analyticsId;
|
|
11679
|
+
ariaLabel;
|
|
11680
|
+
title;
|
|
11681
|
+
subtitle;
|
|
11682
|
+
icon;
|
|
11683
|
+
variant = 'default';
|
|
11684
|
+
contentFormat = 'plain';
|
|
11685
|
+
content = '';
|
|
11686
|
+
get renderedContent() {
|
|
11687
|
+
const format = isAllowedEditorialContentFormat(this.contentFormat) ? this.contentFormat : 'plain';
|
|
11688
|
+
const html = format === 'markdown'
|
|
11689
|
+
? renderEditorialMarkdown(this.content)
|
|
11690
|
+
: renderEditorialPlain(this.content);
|
|
11691
|
+
return this.sanitizer.sanitize(SecurityContext.HTML, html) ?? '';
|
|
11692
|
+
}
|
|
11693
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisRichTextBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11694
|
+
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: `
|
|
11695
|
+
<section class="prt-block" [class.prt-block-emphasis]="variant === 'emphasis'" [class.prt-block-subtle]="variant === 'subtle'">
|
|
11696
|
+
<header class="prt-head" *ngIf="icon || title || subtitle">
|
|
11697
|
+
<mat-icon class="prt-icon" *ngIf="icon" aria-hidden="true" [praxisIcon]="icon"></mat-icon>
|
|
11698
|
+
<div class="prt-title-wrap">
|
|
11699
|
+
<h3 class="prt-title" *ngIf="title">{{ title }}</h3>
|
|
11700
|
+
<p class="prt-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11701
|
+
</div>
|
|
11702
|
+
</header>
|
|
11703
|
+
|
|
11704
|
+
<div class="prt-content" [innerHTML]="renderedContent"></div>
|
|
11705
|
+
</section>
|
|
11706
|
+
`, 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 });
|
|
11707
|
+
}
|
|
11708
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisRichTextBlockComponent, decorators: [{
|
|
11709
|
+
type: Component,
|
|
11710
|
+
args: [{ selector: 'praxis-rich-text-block', standalone: true, imports: [CommonModule, MatIconModule, PraxisIconDirective], host: {
|
|
11711
|
+
'class': 'praxis-rich-text-block',
|
|
11712
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11713
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11714
|
+
'[attr.data-variant]': 'variant',
|
|
11715
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
11716
|
+
'[attr.role]': 'ariaLabel ? "region" : null',
|
|
11717
|
+
}, template: `
|
|
11718
|
+
<section class="prt-block" [class.prt-block-emphasis]="variant === 'emphasis'" [class.prt-block-subtle]="variant === 'subtle'">
|
|
11719
|
+
<header class="prt-head" *ngIf="icon || title || subtitle">
|
|
11720
|
+
<mat-icon class="prt-icon" *ngIf="icon" aria-hidden="true" [praxisIcon]="icon"></mat-icon>
|
|
11721
|
+
<div class="prt-title-wrap">
|
|
11722
|
+
<h3 class="prt-title" *ngIf="title">{{ title }}</h3>
|
|
11723
|
+
<p class="prt-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
11724
|
+
</div>
|
|
11725
|
+
</header>
|
|
11726
|
+
|
|
11727
|
+
<div class="prt-content" [innerHTML]="renderedContent"></div>
|
|
11728
|
+
</section>
|
|
11729
|
+
`, 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"] }]
|
|
11730
|
+
}], propDecorators: { instanceId: [{
|
|
11731
|
+
type: Input
|
|
11732
|
+
}], analyticsId: [{
|
|
11733
|
+
type: Input
|
|
11734
|
+
}], ariaLabel: [{
|
|
11735
|
+
type: Input
|
|
11736
|
+
}], title: [{
|
|
11737
|
+
type: Input
|
|
11738
|
+
}], subtitle: [{
|
|
11739
|
+
type: Input
|
|
11740
|
+
}], icon: [{
|
|
11741
|
+
type: Input
|
|
11742
|
+
}], variant: [{
|
|
11743
|
+
type: Input
|
|
11744
|
+
}], contentFormat: [{
|
|
11745
|
+
type: Input
|
|
11746
|
+
}], content: [{
|
|
11747
|
+
type: Input
|
|
11748
|
+
}] } });
|
|
11749
|
+
function renderEditorialPlain(content) {
|
|
11750
|
+
const blocks = splitParagraphs(content).map((paragraph) => `<p>${escapeHtml(paragraph)}</p>`);
|
|
11751
|
+
return blocks.join('');
|
|
11752
|
+
}
|
|
11753
|
+
function renderEditorialMarkdown(content) {
|
|
11754
|
+
const withoutImages = EDITORIAL_MARKDOWN_IMAGES_ENABLED
|
|
11755
|
+
? content
|
|
11756
|
+
: content.replace(/!\[([^\]]*)\]\(([^)]+)\)/g, '');
|
|
11757
|
+
const lines = withoutImages.replace(/\r\n/g, '\n').split('\n');
|
|
11758
|
+
const html = [];
|
|
11759
|
+
let listItems = [];
|
|
11760
|
+
const flushList = () => {
|
|
11761
|
+
if (!listItems.length)
|
|
11762
|
+
return;
|
|
11763
|
+
html.push(`<ul>${listItems.join('')}</ul>`);
|
|
11764
|
+
listItems = [];
|
|
11765
|
+
};
|
|
11766
|
+
for (const line of lines) {
|
|
11767
|
+
const trimmed = line.trim();
|
|
11768
|
+
if (!trimmed) {
|
|
11769
|
+
flushList();
|
|
11770
|
+
continue;
|
|
11771
|
+
}
|
|
11772
|
+
const listMatch = /^[-*]\s+(.+)$/.exec(trimmed);
|
|
11773
|
+
if (listMatch) {
|
|
11774
|
+
listItems.push(`<li>${renderInlineMarkdown(listMatch[1])}</li>`);
|
|
11775
|
+
continue;
|
|
11776
|
+
}
|
|
11777
|
+
flushList();
|
|
11778
|
+
html.push(`<p>${renderInlineMarkdown(trimmed)}</p>`);
|
|
11779
|
+
}
|
|
11780
|
+
flushList();
|
|
11781
|
+
return html.join('');
|
|
11782
|
+
}
|
|
11783
|
+
function renderInlineMarkdown(text) {
|
|
11784
|
+
const placeholders = new Map();
|
|
11785
|
+
let index = 0;
|
|
11786
|
+
const reserve = (html) => {
|
|
11787
|
+
const token = `__PRT_TOKEN_${index++}__`;
|
|
11788
|
+
placeholders.set(token, html);
|
|
11789
|
+
return token;
|
|
11790
|
+
};
|
|
11791
|
+
let escaped = escapeHtml(text);
|
|
11792
|
+
escaped = escaped.replace(/`([^`]+)`/g, (_match, code) => reserve(`<code>${escapeHtml(decodeHtml(code))}</code>`));
|
|
11793
|
+
escaped = escaped.replace(/\[([^\]]+)\]\(([^)]+)\)/g, (_match, label, href) => {
|
|
11794
|
+
const normalized = normalizeEditorialLink({
|
|
11795
|
+
label: decodeHtml(label),
|
|
11796
|
+
href: decodeHtml(href),
|
|
11797
|
+
});
|
|
11798
|
+
if (!normalized) {
|
|
11799
|
+
return escapeHtml(decodeHtml(label));
|
|
11800
|
+
}
|
|
11801
|
+
const target = normalized.target ? ` target="${escapeHtml(normalized.target)}"` : '';
|
|
11802
|
+
const rel = normalized.rel || EDITORIAL_EXTERNAL_LINK_REL;
|
|
11803
|
+
return reserve(`<a href="${escapeHtml(normalized.href)}"${target} rel="${escapeHtml(rel)}">${escapeHtml(normalized.label)}</a>`);
|
|
11804
|
+
});
|
|
11805
|
+
escaped = escaped.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
|
|
11806
|
+
escaped = escaped.replace(/\*([^*]+)\*/g, '<em>$1</em>');
|
|
11807
|
+
placeholders.forEach((value, token) => {
|
|
11808
|
+
escaped = escaped.replaceAll(token, value);
|
|
11809
|
+
});
|
|
11810
|
+
return escaped;
|
|
11811
|
+
}
|
|
11812
|
+
function splitParagraphs(content) {
|
|
11813
|
+
return content
|
|
11814
|
+
.replace(/\r\n/g, '\n')
|
|
11815
|
+
.split(/\n{2,}/)
|
|
11816
|
+
.map((part) => part.trim())
|
|
11817
|
+
.filter(Boolean);
|
|
11818
|
+
}
|
|
11819
|
+
function escapeHtml(value) {
|
|
11820
|
+
return value
|
|
11821
|
+
.replace(/&/g, '&')
|
|
11822
|
+
.replace(/</g, '<')
|
|
11823
|
+
.replace(/>/g, '>')
|
|
11824
|
+
.replace(/"/g, '"')
|
|
11825
|
+
.replace(/'/g, ''');
|
|
11826
|
+
}
|
|
11827
|
+
function decodeHtml(value) {
|
|
11828
|
+
return value
|
|
11829
|
+
.replace(/</g, '<')
|
|
11830
|
+
.replace(/>/g, '>')
|
|
11831
|
+
.replace(/"/g, '"')
|
|
11832
|
+
.replace(/'/g, '\'')
|
|
11833
|
+
.replace(/&/g, '&');
|
|
11834
|
+
}
|
|
11835
|
+
|
|
11836
|
+
class PraxisLegalNoticeComponent {
|
|
11837
|
+
instanceId;
|
|
11838
|
+
analyticsId;
|
|
11839
|
+
ariaLabel;
|
|
11840
|
+
title;
|
|
11841
|
+
subtitle;
|
|
11842
|
+
contentFormat = 'plain';
|
|
11843
|
+
content = '';
|
|
11844
|
+
severity = 'info';
|
|
11845
|
+
links = [];
|
|
11846
|
+
get normalizedLinks() {
|
|
11847
|
+
return (this.links || [])
|
|
11848
|
+
.map((link) => normalizeEditorialLink(link))
|
|
11849
|
+
.filter((link) => !!link);
|
|
11850
|
+
}
|
|
11851
|
+
get resolvedIcon() {
|
|
11852
|
+
switch (this.severity) {
|
|
11853
|
+
case 'warning':
|
|
11854
|
+
return 'warning';
|
|
11855
|
+
case 'muted':
|
|
11856
|
+
return 'gavel';
|
|
11857
|
+
default:
|
|
11858
|
+
return 'policy';
|
|
11859
|
+
}
|
|
11860
|
+
}
|
|
11861
|
+
get resolvedVariant() {
|
|
11862
|
+
switch (this.severity) {
|
|
11863
|
+
case 'warning':
|
|
11864
|
+
return 'emphasis';
|
|
11865
|
+
case 'muted':
|
|
11866
|
+
return 'subtle';
|
|
11867
|
+
default:
|
|
11868
|
+
return 'default';
|
|
11869
|
+
}
|
|
11870
|
+
}
|
|
11871
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisLegalNoticeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11872
|
+
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: `
|
|
11873
|
+
<section class="pln-shell" [class.pln-warning]="severity === 'warning'" [class.pln-muted]="severity === 'muted'">
|
|
11874
|
+
<praxis-rich-text-block
|
|
11875
|
+
[instanceId]="instanceId"
|
|
11876
|
+
[analyticsId]="analyticsId"
|
|
11877
|
+
[ariaLabel]="ariaLabel"
|
|
11878
|
+
[title]="title"
|
|
11879
|
+
[subtitle]="subtitle"
|
|
11880
|
+
[icon]="resolvedIcon"
|
|
11881
|
+
[variant]="resolvedVariant"
|
|
11882
|
+
[contentFormat]="contentFormat"
|
|
11883
|
+
[content]="content"
|
|
11884
|
+
></praxis-rich-text-block>
|
|
11885
|
+
|
|
11886
|
+
<nav class="pln-links" *ngIf="normalizedLinks.length" aria-label="Links do aviso legal">
|
|
11887
|
+
<a
|
|
11888
|
+
*ngFor="let link of normalizedLinks"
|
|
11889
|
+
class="pln-link"
|
|
11890
|
+
[href]="link.href"
|
|
11891
|
+
[attr.target]="link.target || null"
|
|
11892
|
+
[attr.rel]="link.rel || null"
|
|
11893
|
+
>
|
|
11894
|
+
{{ link.label }}
|
|
11895
|
+
</a>
|
|
11896
|
+
</nav>
|
|
11897
|
+
</section>
|
|
11898
|
+
`, 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 });
|
|
11899
|
+
}
|
|
11900
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisLegalNoticeComponent, decorators: [{
|
|
11901
|
+
type: Component,
|
|
11902
|
+
args: [{ selector: 'praxis-legal-notice', standalone: true, imports: [CommonModule, PraxisRichTextBlockComponent], host: {
|
|
11903
|
+
'class': 'praxis-legal-notice',
|
|
11904
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
11905
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
11906
|
+
'[attr.aria-label]': 'ariaLabel || title || "Aviso legal"',
|
|
11907
|
+
'role': 'note',
|
|
11908
|
+
}, template: `
|
|
11909
|
+
<section class="pln-shell" [class.pln-warning]="severity === 'warning'" [class.pln-muted]="severity === 'muted'">
|
|
11910
|
+
<praxis-rich-text-block
|
|
11911
|
+
[instanceId]="instanceId"
|
|
11912
|
+
[analyticsId]="analyticsId"
|
|
11913
|
+
[ariaLabel]="ariaLabel"
|
|
11914
|
+
[title]="title"
|
|
11915
|
+
[subtitle]="subtitle"
|
|
11916
|
+
[icon]="resolvedIcon"
|
|
11917
|
+
[variant]="resolvedVariant"
|
|
11918
|
+
[contentFormat]="contentFormat"
|
|
11919
|
+
[content]="content"
|
|
11920
|
+
></praxis-rich-text-block>
|
|
11921
|
+
|
|
11922
|
+
<nav class="pln-links" *ngIf="normalizedLinks.length" aria-label="Links do aviso legal">
|
|
11923
|
+
<a
|
|
11924
|
+
*ngFor="let link of normalizedLinks"
|
|
11925
|
+
class="pln-link"
|
|
11926
|
+
[href]="link.href"
|
|
11927
|
+
[attr.target]="link.target || null"
|
|
11928
|
+
[attr.rel]="link.rel || null"
|
|
11929
|
+
>
|
|
11930
|
+
{{ link.label }}
|
|
11931
|
+
</a>
|
|
11932
|
+
</nav>
|
|
11933
|
+
</section>
|
|
11934
|
+
`, 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"] }]
|
|
11935
|
+
}], propDecorators: { instanceId: [{
|
|
11936
|
+
type: Input
|
|
11937
|
+
}], analyticsId: [{
|
|
11938
|
+
type: Input
|
|
11939
|
+
}], ariaLabel: [{
|
|
11940
|
+
type: Input
|
|
11941
|
+
}], title: [{
|
|
11942
|
+
type: Input
|
|
11943
|
+
}], subtitle: [{
|
|
11944
|
+
type: Input
|
|
11945
|
+
}], contentFormat: [{
|
|
11946
|
+
type: Input
|
|
11947
|
+
}], content: [{
|
|
11948
|
+
type: Input
|
|
11949
|
+
}], severity: [{
|
|
11950
|
+
type: Input
|
|
11951
|
+
}], links: [{
|
|
11952
|
+
type: Input
|
|
11953
|
+
}] } });
|
|
11954
|
+
|
|
11955
|
+
const PRAXIS_LEGAL_NOTICE_METADATA = {
|
|
11956
|
+
id: 'widget:legal-notice',
|
|
11957
|
+
selector: 'praxis-legal-notice',
|
|
11958
|
+
component: PraxisLegalNoticeComponent,
|
|
11959
|
+
friendlyName: 'Legal Notice',
|
|
11960
|
+
description: 'Aviso editorial/jurídico informativo com conteúdo seguro e links normalizados pela policy editorial.',
|
|
11961
|
+
icon: 'policy',
|
|
11962
|
+
inputs: [
|
|
11963
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11964
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11965
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do aviso legal.' },
|
|
11966
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do aviso legal.' },
|
|
11967
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Subtítulo opcional do aviso.' },
|
|
11968
|
+
{ name: 'contentFormat', type: "'plain' | 'markdown'", label: 'Formato do conteúdo', description: 'Formato editorial permitido para o corpo do aviso.', default: 'plain' },
|
|
11969
|
+
{ name: 'content', type: 'string', label: 'Conteúdo', description: 'Corpo principal do aviso legal.' },
|
|
11970
|
+
{ name: 'severity', type: "'info' | 'warning' | 'muted'", label: 'Severidade', description: 'Tom visual/semântico do aviso legal.', default: 'info' },
|
|
11971
|
+
{ name: 'links', type: 'EditorialLinkDefinition[]', label: 'Links', description: 'Links complementares do aviso, sempre normalizados pela policy editorial.' },
|
|
11972
|
+
],
|
|
11973
|
+
outputs: [],
|
|
11974
|
+
tags: ['widget', 'editorial', 'notice', 'legal', EDITORIAL_WIDGET_TAG],
|
|
11975
|
+
lib: '@praxisui/core',
|
|
11976
|
+
};
|
|
11977
|
+
function providePraxisLegalNoticeMetadata() {
|
|
11978
|
+
return {
|
|
11979
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
11980
|
+
multi: true,
|
|
11981
|
+
useFactory: (registry) => () => {
|
|
11982
|
+
registry.register(PRAXIS_LEGAL_NOTICE_METADATA);
|
|
11983
|
+
},
|
|
11984
|
+
deps: [ComponentMetadataRegistry],
|
|
11985
|
+
};
|
|
11986
|
+
}
|
|
11987
|
+
|
|
11988
|
+
const PRAXIS_RICH_TEXT_BLOCK_METADATA = {
|
|
11989
|
+
id: 'widget:rich-text-block',
|
|
11990
|
+
selector: 'praxis-rich-text-block',
|
|
11991
|
+
component: PraxisRichTextBlockComponent,
|
|
11992
|
+
friendlyName: 'Rich Text Block',
|
|
11993
|
+
description: 'Bloco editorial compartilhado para instruções, contexto institucional e conteúdo de apoio em plain text ou markdown seguro.',
|
|
11994
|
+
icon: 'article',
|
|
11995
|
+
inputs: [
|
|
11996
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
11997
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
11998
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do bloco.' },
|
|
11999
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do bloco.' },
|
|
12000
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Texto curto complementar abaixo do título.' },
|
|
12001
|
+
{ name: 'icon', type: 'string', label: 'Ícone', description: 'Ícone Material Symbols exibido no cabeçalho do bloco.' },
|
|
12002
|
+
{ name: 'variant', type: "'default' | 'emphasis' | 'subtle'", label: 'Variante', description: 'Variante visual do bloco editorial.', default: 'default' },
|
|
12003
|
+
{ name: 'contentFormat', type: "'plain' | 'markdown'", label: 'Formato do conteúdo', description: 'Formato editorial permitido para renderização do conteúdo.', default: 'plain' },
|
|
12004
|
+
{ name: 'content', type: 'string', label: 'Conteúdo', description: 'Corpo principal do bloco em plain text ou markdown seguro.' },
|
|
12005
|
+
],
|
|
12006
|
+
outputs: [],
|
|
12007
|
+
tags: ['widget', 'editorial', 'content', EDITORIAL_WIDGET_TAG],
|
|
12008
|
+
lib: '@praxisui/core',
|
|
12009
|
+
};
|
|
12010
|
+
function providePraxisRichTextBlockMetadata() {
|
|
12011
|
+
return {
|
|
12012
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
12013
|
+
multi: true,
|
|
12014
|
+
useFactory: (registry) => () => {
|
|
12015
|
+
registry.register(PRAXIS_RICH_TEXT_BLOCK_METADATA);
|
|
12016
|
+
},
|
|
12017
|
+
deps: [ComponentMetadataRegistry],
|
|
12018
|
+
};
|
|
12019
|
+
}
|
|
12020
|
+
|
|
12021
|
+
class PraxisUserContextSummaryComponent {
|
|
12022
|
+
instanceId;
|
|
12023
|
+
analyticsId;
|
|
12024
|
+
ariaLabel;
|
|
12025
|
+
title;
|
|
12026
|
+
subtitle;
|
|
12027
|
+
source = 'context';
|
|
12028
|
+
context = null;
|
|
12029
|
+
fields = [];
|
|
12030
|
+
actionId = 'change-context';
|
|
12031
|
+
actionLabel;
|
|
12032
|
+
actionTriggered = new EventEmitter();
|
|
12033
|
+
get resolvedFields() {
|
|
12034
|
+
return (this.fields || []).map((field) => ({
|
|
12035
|
+
label: field.label,
|
|
12036
|
+
value: this.resolveFieldValue(field),
|
|
12037
|
+
}));
|
|
12038
|
+
}
|
|
12039
|
+
emitAction() {
|
|
12040
|
+
this.actionTriggered.emit({ actionId: this.actionId || 'change-context' });
|
|
12041
|
+
}
|
|
12042
|
+
resolveFieldValue(field) {
|
|
12043
|
+
if (typeof field.value === 'string' && field.value.trim()) {
|
|
12044
|
+
return field.value;
|
|
12045
|
+
}
|
|
12046
|
+
if (this.source === 'context' && field.valuePath) {
|
|
12047
|
+
const resolved = lookupPath(this.context, field.valuePath);
|
|
12048
|
+
if (resolved != null && String(resolved).trim() !== '') {
|
|
12049
|
+
return String(resolved);
|
|
12050
|
+
}
|
|
12051
|
+
}
|
|
12052
|
+
return field.fallback || '-';
|
|
12053
|
+
}
|
|
12054
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisUserContextSummaryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12055
|
+
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: `
|
|
12056
|
+
<section class="pux-card">
|
|
12057
|
+
<header class="pux-head" *ngIf="title || subtitle">
|
|
12058
|
+
<h3 class="pux-title" *ngIf="title">{{ title }}</h3>
|
|
12059
|
+
<p class="pux-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
12060
|
+
</header>
|
|
12061
|
+
|
|
12062
|
+
<dl class="pux-grid" *ngIf="resolvedFields.length; else emptyState">
|
|
12063
|
+
<div class="pux-item" *ngFor="let field of resolvedFields">
|
|
12064
|
+
<dt>{{ field.label }}</dt>
|
|
12065
|
+
<dd>{{ field.value }}</dd>
|
|
12066
|
+
</div>
|
|
12067
|
+
</dl>
|
|
12068
|
+
|
|
12069
|
+
<ng-template #emptyState>
|
|
12070
|
+
<p class="pux-empty">Nenhum contexto disponivel.</p>
|
|
12071
|
+
</ng-template>
|
|
12072
|
+
|
|
12073
|
+
<div class="pux-actions" *ngIf="actionLabel">
|
|
12074
|
+
<button type="button" class="pux-action" (click)="emitAction()">{{ actionLabel }}</button>
|
|
12075
|
+
</div>
|
|
12076
|
+
</section>
|
|
12077
|
+
`, 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 });
|
|
12078
|
+
}
|
|
12079
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: PraxisUserContextSummaryComponent, decorators: [{
|
|
12080
|
+
type: Component,
|
|
12081
|
+
args: [{ selector: 'praxis-user-context-summary', standalone: true, imports: [CommonModule], host: {
|
|
12082
|
+
'class': 'praxis-user-context-summary',
|
|
12083
|
+
'[attr.data-instance-id]': 'instanceId || null',
|
|
12084
|
+
'[attr.data-analytics-id]': 'analyticsId || null',
|
|
12085
|
+
'[attr.aria-label]': 'ariaLabel || null',
|
|
12086
|
+
'[attr.role]': 'ariaLabel ? "region" : null',
|
|
12087
|
+
}, template: `
|
|
12088
|
+
<section class="pux-card">
|
|
12089
|
+
<header class="pux-head" *ngIf="title || subtitle">
|
|
12090
|
+
<h3 class="pux-title" *ngIf="title">{{ title }}</h3>
|
|
12091
|
+
<p class="pux-subtitle" *ngIf="subtitle">{{ subtitle }}</p>
|
|
12092
|
+
</header>
|
|
12093
|
+
|
|
12094
|
+
<dl class="pux-grid" *ngIf="resolvedFields.length; else emptyState">
|
|
12095
|
+
<div class="pux-item" *ngFor="let field of resolvedFields">
|
|
12096
|
+
<dt>{{ field.label }}</dt>
|
|
12097
|
+
<dd>{{ field.value }}</dd>
|
|
12098
|
+
</div>
|
|
12099
|
+
</dl>
|
|
12100
|
+
|
|
12101
|
+
<ng-template #emptyState>
|
|
12102
|
+
<p class="pux-empty">Nenhum contexto disponivel.</p>
|
|
12103
|
+
</ng-template>
|
|
12104
|
+
|
|
12105
|
+
<div class="pux-actions" *ngIf="actionLabel">
|
|
12106
|
+
<button type="button" class="pux-action" (click)="emitAction()">{{ actionLabel }}</button>
|
|
12107
|
+
</div>
|
|
12108
|
+
</section>
|
|
12109
|
+
`, 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"] }]
|
|
12110
|
+
}], propDecorators: { instanceId: [{
|
|
12111
|
+
type: Input
|
|
12112
|
+
}], analyticsId: [{
|
|
12113
|
+
type: Input
|
|
12114
|
+
}], ariaLabel: [{
|
|
12115
|
+
type: Input
|
|
12116
|
+
}], title: [{
|
|
12117
|
+
type: Input
|
|
12118
|
+
}], subtitle: [{
|
|
12119
|
+
type: Input
|
|
12120
|
+
}], source: [{
|
|
12121
|
+
type: Input
|
|
12122
|
+
}], context: [{
|
|
12123
|
+
type: Input
|
|
12124
|
+
}], fields: [{
|
|
12125
|
+
type: Input
|
|
12126
|
+
}], actionId: [{
|
|
12127
|
+
type: Input
|
|
12128
|
+
}], actionLabel: [{
|
|
12129
|
+
type: Input
|
|
12130
|
+
}], actionTriggered: [{
|
|
12131
|
+
type: Output
|
|
12132
|
+
}] } });
|
|
12133
|
+
function lookupPath(context, path) {
|
|
12134
|
+
if (!context || !path.trim())
|
|
12135
|
+
return undefined;
|
|
12136
|
+
return path.split('.').reduce((acc, key) => {
|
|
12137
|
+
if (acc && typeof acc === 'object') {
|
|
12138
|
+
return acc[key];
|
|
12139
|
+
}
|
|
12140
|
+
return undefined;
|
|
12141
|
+
}, context);
|
|
12142
|
+
}
|
|
12143
|
+
|
|
12144
|
+
const PRAXIS_USER_CONTEXT_SUMMARY_METADATA = {
|
|
12145
|
+
id: 'form:user-context-summary',
|
|
12146
|
+
selector: 'praxis-user-context-summary',
|
|
12147
|
+
component: PraxisUserContextSummaryComponent,
|
|
12148
|
+
friendlyName: 'User Context Summary',
|
|
12149
|
+
description: 'Resumo contextual do usuário/tenant próximo ao formulário, sem participar de validação ou formData.',
|
|
12150
|
+
icon: 'account_circle',
|
|
12151
|
+
inputs: [
|
|
12152
|
+
{ name: 'instanceId', type: 'string', label: 'Instance ID', description: 'Identificador estável da instância editorial.' },
|
|
12153
|
+
{ name: 'analyticsId', type: 'string', label: 'Analytics ID', description: 'Identificador opcional de telemetria agregada.' },
|
|
12154
|
+
{ name: 'ariaLabel', type: 'string', label: 'Aria Label', description: 'Rótulo acessível opcional do resumo contextual.' },
|
|
12155
|
+
{ name: 'title', type: 'string', label: 'Título', description: 'Título principal do resumo.' },
|
|
12156
|
+
{ name: 'subtitle', type: 'string', label: 'Subtítulo', description: 'Texto auxiliar explicando o contexto exibido.' },
|
|
12157
|
+
{ name: 'source', type: "'context' | 'static'", label: 'Fonte', description: 'Origem dos dados do resumo contextual.', default: 'context' },
|
|
12158
|
+
{ name: 'context', type: 'Record<string, unknown> | null', label: 'Contexto', description: 'Objeto tipado usado para resolver valuePath dos campos.' },
|
|
12159
|
+
{ 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.' },
|
|
12160
|
+
{ name: 'actionId', type: 'string', label: 'Action ID', description: 'Identificador canônico da ação opcional emitida pelo componente.', default: 'change-context' },
|
|
12161
|
+
{ name: 'actionLabel', type: 'string', label: 'Action Label', description: 'Texto do CTA opcional para trocar conta/unidade/contexto.' },
|
|
12162
|
+
],
|
|
12163
|
+
outputs: [
|
|
12164
|
+
{ name: 'actionTriggered', type: '{ actionId: string }', label: 'Ação disparada', description: 'Output emitido quando o CTA opcional do resumo contextual é acionado.' },
|
|
12165
|
+
],
|
|
12166
|
+
tags: ['widget', 'editorial', 'context', 'user', 'form', EDITORIAL_WIDGET_TAG],
|
|
12167
|
+
lib: '@praxisui/core',
|
|
12168
|
+
};
|
|
12169
|
+
function providePraxisUserContextSummaryMetadata() {
|
|
12170
|
+
return {
|
|
12171
|
+
provide: ENVIRONMENT_INITIALIZER,
|
|
12172
|
+
multi: true,
|
|
12173
|
+
useFactory: (registry) => () => {
|
|
12174
|
+
registry.register(PRAXIS_USER_CONTEXT_SUMMARY_METADATA);
|
|
12175
|
+
},
|
|
12176
|
+
deps: [ComponentMetadataRegistry],
|
|
12177
|
+
};
|
|
12178
|
+
}
|
|
12179
|
+
|
|
11325
12180
|
/**
|
|
11326
12181
|
* Carrega dinamicamente um componente "widget" (de página) a partir de um id registrado
|
|
11327
12182
|
* no ComponentMetadataRegistry e aplica bindings declarados em JSON (WidgetDefinition).
|
|
@@ -14690,5 +15545,5 @@ function provideHookWhitelist(allowed) {
|
|
|
14690
15545
|
* Generated bundle index. Do not edit.
|
|
14691
15546
|
*/
|
|
14692
15547
|
|
|
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 };
|
|
15548
|
+
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
15549
|
//# sourceMappingURL=praxisui-core.mjs.map
|