@praxisui/core 8.0.0-beta.104 → 8.0.0-beta.105
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 +1050 -84
- package/package.json +1 -1
- package/types/praxisui-core.d.ts +142 -7
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, InjectionToken, Injectable, inject, Inject, Optional, makeEnvironmentProviders, signal, computed, DestroyRef, ENVIRONMENT_INITIALIZER, APP_INITIALIZER, ErrorHandler, EventEmitter, Output, Input, ChangeDetectionStrategy, Directive, SecurityContext, ViewContainerRef,
|
|
2
|
+
import { Component, InjectionToken, Injectable, inject, Inject, Optional, makeEnvironmentProviders, signal, computed, DestroyRef, ENVIRONMENT_INITIALIZER, APP_INITIALIZER, ErrorHandler, EventEmitter, Output, Input, ChangeDetectionStrategy, Directive, SecurityContext, ViewContainerRef, SimpleChange, ContentChild, HostBinding, HostListener, ViewChildren, ViewChild } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common/http';
|
|
4
4
|
import { HttpHeaders, HttpClient, HttpParams, HttpResponse, HttpContextToken, HTTP_INTERCEPTORS, withInterceptors } from '@angular/common/http';
|
|
5
5
|
import { of, defer, throwError, from, EMPTY, BehaviorSubject, firstValueFrom, Subject, map as map$1, switchMap as switchMap$1 } from 'rxjs';
|
|
@@ -3085,6 +3085,7 @@ class GenericCrudService {
|
|
|
3085
3085
|
endpoints = {}; // Stores user-defined custom endpoints
|
|
3086
3086
|
apiUrlConfig;
|
|
3087
3087
|
currentEndpointKey = ApiEndpoint.Default;
|
|
3088
|
+
currentApiUrlEntry = null;
|
|
3088
3089
|
resourcePath;
|
|
3089
3090
|
// Nova propriedade para armazenar a URL do schema
|
|
3090
3091
|
_schemaUrl = null;
|
|
@@ -3185,19 +3186,22 @@ class GenericCrudService {
|
|
|
3185
3186
|
if (this.configured &&
|
|
3186
3187
|
this.apiUrl === nextApiUrl &&
|
|
3187
3188
|
this.baseApiUrl === nextBaseApiUrl &&
|
|
3188
|
-
this.currentEndpointKey === nextEndpointKey
|
|
3189
|
+
this.currentEndpointKey === nextEndpointKey &&
|
|
3190
|
+
this.currentApiUrlEntry === (configureOptions.apiUrlEntry ?? null)) {
|
|
3189
3191
|
// No-op; already configured with same values
|
|
3190
3192
|
// console.debug('[CRUD:Service] configure (no-op)', { resourcePath, baseApiUrl: nextBaseApiUrl });
|
|
3191
3193
|
return;
|
|
3192
3194
|
}
|
|
3193
3195
|
// Apply new configuration
|
|
3194
3196
|
this.currentEndpointKey = nextEndpointKey;
|
|
3197
|
+
this.currentApiUrlEntry = configureOptions.apiUrlEntry ?? null;
|
|
3195
3198
|
this.baseApiUrl = nextBaseApiUrl;
|
|
3196
3199
|
this.resourcePath = resource;
|
|
3197
3200
|
this.apiUrl = nextApiUrl;
|
|
3198
3201
|
this.configured = true;
|
|
3199
3202
|
this._filterSchemaLoaded = false;
|
|
3200
3203
|
this._rangeFilterFieldHints.clear();
|
|
3204
|
+
this._lastSchemaInfo = {};
|
|
3201
3205
|
this._lastResourceMeta = {};
|
|
3202
3206
|
this._lastResourceCapabilityDigest = null;
|
|
3203
3207
|
console.debug('[CRUD:Service] configure', {
|
|
@@ -4280,6 +4284,10 @@ class GenericCrudService {
|
|
|
4280
4284
|
}
|
|
4281
4285
|
resolveEndpointEntry(key) {
|
|
4282
4286
|
const cfgKey = key ?? this.currentEndpointKey;
|
|
4287
|
+
if (this.currentApiUrlEntry &&
|
|
4288
|
+
(!key || cfgKey === this.currentEndpointKey)) {
|
|
4289
|
+
return this.currentApiUrlEntry;
|
|
4290
|
+
}
|
|
4283
4291
|
return this.apiUrlConfig[cfgKey] || this.apiUrlConfig['default'];
|
|
4284
4292
|
}
|
|
4285
4293
|
/**
|
|
@@ -6118,6 +6126,8 @@ class SurfaceBindingRuntimeService {
|
|
|
6118
6126
|
if (!targetPath)
|
|
6119
6127
|
continue;
|
|
6120
6128
|
const value = this.resolveBindingValue(binding, context);
|
|
6129
|
+
if (value === undefined && binding.omitIfUndefined)
|
|
6130
|
+
continue;
|
|
6121
6131
|
resolvedWidget = this.setValueAtPath(resolvedWidget, targetPath, value);
|
|
6122
6132
|
}
|
|
6123
6133
|
return resolvedWidget;
|
|
@@ -6130,6 +6140,8 @@ class SurfaceBindingRuntimeService {
|
|
|
6130
6140
|
if (!rawTargetPath)
|
|
6131
6141
|
continue;
|
|
6132
6142
|
const value = this.resolveBindingValue(binding, context);
|
|
6143
|
+
if (value === undefined && binding.omitIfUndefined)
|
|
6144
|
+
continue;
|
|
6133
6145
|
if (rawTargetPath.startsWith('widget.')) {
|
|
6134
6146
|
resolvedPayload = {
|
|
6135
6147
|
...resolvedPayload,
|
|
@@ -6863,8 +6875,26 @@ class GlobalActionService {
|
|
|
6863
6875
|
}
|
|
6864
6876
|
const resolvedPayload = this.surfaceBindingRuntime.resolveSurfacePayload(surfacePayload, context, surfacePayload.context);
|
|
6865
6877
|
const data = await this.surface.open(resolvedPayload, context);
|
|
6878
|
+
this.bindSurfaceResultAction(data, resolvedPayload, context);
|
|
6866
6879
|
return { success: true, data };
|
|
6867
6880
|
});
|
|
6881
|
+
this.register('surface.close', async (payload, context) => {
|
|
6882
|
+
const runtime = this.resolveSurfaceRuntime(context);
|
|
6883
|
+
if (typeof runtime?.close !== 'function') {
|
|
6884
|
+
return { success: false, error: 'Surface runtime not available' };
|
|
6885
|
+
}
|
|
6886
|
+
runtime.close(this.toSurfaceResult(payload, 'close'));
|
|
6887
|
+
return { success: true };
|
|
6888
|
+
});
|
|
6889
|
+
this.register('surface.result', async (payload, context) => {
|
|
6890
|
+
const runtime = this.resolveSurfaceRuntime(context);
|
|
6891
|
+
if (typeof runtime?.emitResult !== 'function') {
|
|
6892
|
+
return { success: false, error: 'Surface result runtime not available' };
|
|
6893
|
+
}
|
|
6894
|
+
runtime.emitResult(this.toSurfaceResult(payload, 'result'));
|
|
6895
|
+
return { success: true };
|
|
6896
|
+
});
|
|
6897
|
+
this.register('dynamicPage.composition.dispatch', async (payload, context) => this.handleCompositionDispatch(payload, context));
|
|
6868
6898
|
this.register('toast.success', async (payload) => {
|
|
6869
6899
|
const message = payload?.message || payload;
|
|
6870
6900
|
if (!message)
|
|
@@ -6939,6 +6969,46 @@ class GlobalActionService {
|
|
|
6939
6969
|
return { success: false, error: err?.message || String(err) };
|
|
6940
6970
|
}
|
|
6941
6971
|
}
|
|
6972
|
+
async handleCompositionDispatch(payload, context) {
|
|
6973
|
+
const dispatch = context?.runtime?.composition?.dispatch;
|
|
6974
|
+
if (typeof dispatch !== 'function') {
|
|
6975
|
+
return { success: false, error: 'Composition runtime not available' };
|
|
6976
|
+
}
|
|
6977
|
+
const source = payload?.source;
|
|
6978
|
+
if (!this.isCompositionEndpointRef(source)) {
|
|
6979
|
+
return { success: false, error: 'dynamicPage.composition.dispatch requires source endpoint' };
|
|
6980
|
+
}
|
|
6981
|
+
const eventPayload = payload && Object.prototype.hasOwnProperty.call(payload, 'payload')
|
|
6982
|
+
? payload.payload
|
|
6983
|
+
: context?.payload;
|
|
6984
|
+
await dispatch({
|
|
6985
|
+
source,
|
|
6986
|
+
payload: eventPayload,
|
|
6987
|
+
...(typeof payload?.occurredAt === 'string' ? { occurredAt: payload.occurredAt } : {}),
|
|
6988
|
+
});
|
|
6989
|
+
return {
|
|
6990
|
+
success: true,
|
|
6991
|
+
data: {
|
|
6992
|
+
source,
|
|
6993
|
+
payload: eventPayload,
|
|
6994
|
+
},
|
|
6995
|
+
};
|
|
6996
|
+
}
|
|
6997
|
+
isCompositionEndpointRef(value) {
|
|
6998
|
+
if (!value || typeof value !== 'object') {
|
|
6999
|
+
return false;
|
|
7000
|
+
}
|
|
7001
|
+
if (value.kind === 'component-port') {
|
|
7002
|
+
return !!value.ref?.widget && !!value.ref?.port && !!value.ref?.direction;
|
|
7003
|
+
}
|
|
7004
|
+
if (value.kind === 'state') {
|
|
7005
|
+
return !!value.ref?.path;
|
|
7006
|
+
}
|
|
7007
|
+
if (value.kind === 'global-action') {
|
|
7008
|
+
return !!value.ref?.actionId;
|
|
7009
|
+
}
|
|
7010
|
+
return false;
|
|
7011
|
+
}
|
|
6942
7012
|
async handleNavigationOpenRoute(payload) {
|
|
6943
7013
|
const url = this.buildNavigationUrl(payload);
|
|
6944
7014
|
if (!url)
|
|
@@ -7077,6 +7147,51 @@ class GlobalActionService {
|
|
|
7077
7147
|
return '';
|
|
7078
7148
|
return `#${encodeURIComponent(raw.replace(/^#/, ''))}`;
|
|
7079
7149
|
}
|
|
7150
|
+
resolveSurfaceRuntime(context) {
|
|
7151
|
+
return (context?.runtime?.state?.surfaceRuntime
|
|
7152
|
+
|| context?.payload?.surfaceContext?.surfaceRuntime
|
|
7153
|
+
|| context?.pageContext?.surfaceRuntime
|
|
7154
|
+
|| null);
|
|
7155
|
+
}
|
|
7156
|
+
bindSurfaceResultAction(ref, payload, context) {
|
|
7157
|
+
const onResult = payload.onResult;
|
|
7158
|
+
if (!onResult || typeof ref?.result$?.subscribe !== 'function') {
|
|
7159
|
+
return;
|
|
7160
|
+
}
|
|
7161
|
+
ref.result$.subscribe((result) => {
|
|
7162
|
+
void this.executeRef(onResult, {
|
|
7163
|
+
...context,
|
|
7164
|
+
payload: result,
|
|
7165
|
+
runtime: {
|
|
7166
|
+
...(context?.runtime || {}),
|
|
7167
|
+
value: result,
|
|
7168
|
+
state: {
|
|
7169
|
+
...(context?.runtime?.state || {}),
|
|
7170
|
+
surfaceResult: result,
|
|
7171
|
+
},
|
|
7172
|
+
},
|
|
7173
|
+
meta: {
|
|
7174
|
+
...(context?.meta || {}),
|
|
7175
|
+
origin: 'surface.result',
|
|
7176
|
+
surfaceTitle: payload.title,
|
|
7177
|
+
surfacePresentation: payload.presentation,
|
|
7178
|
+
},
|
|
7179
|
+
});
|
|
7180
|
+
});
|
|
7181
|
+
}
|
|
7182
|
+
toSurfaceResult(payload, fallbackType) {
|
|
7183
|
+
if (payload && typeof payload === 'object' && ('type' in payload || 'data' in payload)) {
|
|
7184
|
+
return {
|
|
7185
|
+
type: String(payload.type || fallbackType),
|
|
7186
|
+
...(Object.prototype.hasOwnProperty.call(payload, 'data')
|
|
7187
|
+
? { data: payload.data }
|
|
7188
|
+
: {}),
|
|
7189
|
+
};
|
|
7190
|
+
}
|
|
7191
|
+
return payload === undefined
|
|
7192
|
+
? { type: fallbackType }
|
|
7193
|
+
: { type: fallbackType, data: payload };
|
|
7194
|
+
}
|
|
7080
7195
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: GlobalActionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
7081
7196
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: GlobalActionService, providedIn: 'root' });
|
|
7082
7197
|
}
|
|
@@ -8596,6 +8711,15 @@ function minWordsValidator(minWords, message) {
|
|
|
8596
8711
|
function requiredCheckedValidator(message) {
|
|
8597
8712
|
return withMessage(Validators.requiredTrue, 'requiredTrue', message);
|
|
8598
8713
|
}
|
|
8714
|
+
function requiredPresenceValidator(message) {
|
|
8715
|
+
return (control) => {
|
|
8716
|
+
const value = control.value;
|
|
8717
|
+
if (value === null || value === undefined || value === '') {
|
|
8718
|
+
return toMessageError('required', { required: true }, message);
|
|
8719
|
+
}
|
|
8720
|
+
return null;
|
|
8721
|
+
};
|
|
8722
|
+
}
|
|
8599
8723
|
function fileTypeValidator(allowed, message) {
|
|
8600
8724
|
const normalized = (allowed || []).map((s) => String(s).toLowerCase());
|
|
8601
8725
|
const hasExt = (s) => s.startsWith('.');
|
|
@@ -8919,8 +9043,11 @@ function buildAngularValidators(field) {
|
|
|
8919
9043
|
const v = [];
|
|
8920
9044
|
let av = [];
|
|
8921
9045
|
// Required / requiredChecked
|
|
8922
|
-
if (field.required)
|
|
8923
|
-
v.push(
|
|
9046
|
+
if (field.required) {
|
|
9047
|
+
v.push(isBooleanRequiredField(field)
|
|
9048
|
+
? requiredPresenceValidator(field.requiredMessage)
|
|
9049
|
+
: withMessage(Validators.required, 'required', field.requiredMessage));
|
|
9050
|
+
}
|
|
8924
9051
|
if (field.requiredChecked)
|
|
8925
9052
|
v.push(requiredCheckedValidator());
|
|
8926
9053
|
// Length
|
|
@@ -8973,6 +9100,11 @@ function buildAngularValidators(field) {
|
|
|
8973
9100
|
}
|
|
8974
9101
|
return { validators: v, asyncValidators: av };
|
|
8975
9102
|
}
|
|
9103
|
+
function isBooleanRequiredField(field) {
|
|
9104
|
+
const controlType = String(field.controlType ?? '').toLowerCase();
|
|
9105
|
+
const type = String(field.type ?? field.dataType ?? '').toLowerCase();
|
|
9106
|
+
return type === 'boolean' || controlType === 'checkbox' || controlType === 'toggle';
|
|
9107
|
+
}
|
|
8976
9108
|
function buildValidatorsFromValidatorOptions(opts = {}, jsonLogic = DEFAULT_JSON_LOGIC$3) {
|
|
8977
9109
|
const v = [];
|
|
8978
9110
|
let av = [];
|
|
@@ -9661,15 +9793,98 @@ class DynamicFormService {
|
|
|
9661
9793
|
return null;
|
|
9662
9794
|
});
|
|
9663
9795
|
}
|
|
9796
|
+
else if (this.isPhoneField(meta)) {
|
|
9797
|
+
const pattern = meta.validators?.pattern ?? meta.pattern;
|
|
9798
|
+
const patternMessage = meta.validators?.patternMessage ?? meta.patternMessage;
|
|
9799
|
+
if (pattern) {
|
|
9800
|
+
v.push(this.buildNormalizedPhonePatternValidator(pattern, patternMessage));
|
|
9801
|
+
}
|
|
9802
|
+
}
|
|
9664
9803
|
return v;
|
|
9665
9804
|
}
|
|
9666
9805
|
/**
|
|
9667
9806
|
* Indica se o campo deve ser tratado como seleção múltipla (valor padrão []).
|
|
9668
9807
|
*/
|
|
9669
9808
|
isMultipleField(meta) {
|
|
9670
|
-
return (meta.controlType === FieldControlType.
|
|
9671
|
-
meta.
|
|
9672
|
-
meta.
|
|
9809
|
+
return (meta.controlType === FieldControlType.MULTI_SELECT ||
|
|
9810
|
+
meta.multiple === true ||
|
|
9811
|
+
(meta.controlType === FieldControlType.CHECKBOX &&
|
|
9812
|
+
this.hasCheckboxOptions(meta)));
|
|
9813
|
+
}
|
|
9814
|
+
isBooleanField(meta) {
|
|
9815
|
+
const controlType = String(meta?.controlType ?? '').toLowerCase();
|
|
9816
|
+
const type = String(meta?.type ?? meta?.dataType ?? '').toLowerCase();
|
|
9817
|
+
if (controlType === 'checkbox' && (this.isMultipleField(meta) || this.hasCheckboxOptions(meta))) {
|
|
9818
|
+
return false;
|
|
9819
|
+
}
|
|
9820
|
+
return type === 'boolean' || controlType === 'checkbox' || controlType === 'toggle';
|
|
9821
|
+
}
|
|
9822
|
+
hasCheckboxOptions(meta) {
|
|
9823
|
+
return (Array.isArray(meta.checkboxOptions) ||
|
|
9824
|
+
Array.isArray(meta.options));
|
|
9825
|
+
}
|
|
9826
|
+
isPhoneField(meta) {
|
|
9827
|
+
const controlType = String(meta?.controlType ?? '').toLowerCase();
|
|
9828
|
+
return controlType === 'phone' || controlType === 'phoneinput' || controlType === 'inlinephone';
|
|
9829
|
+
}
|
|
9830
|
+
buildNormalizedPhonePatternValidator(pattern, message) {
|
|
9831
|
+
const { regex, requiredPattern } = this.buildAngularCompatiblePattern(pattern);
|
|
9832
|
+
return withMessage((control) => {
|
|
9833
|
+
const value = control.value;
|
|
9834
|
+
if (value === null || value === undefined || value === '') {
|
|
9835
|
+
return null;
|
|
9836
|
+
}
|
|
9837
|
+
const normalized = String(value).replace(/[()\s-]/g, '');
|
|
9838
|
+
regex.lastIndex = 0;
|
|
9839
|
+
return regex.test(normalized)
|
|
9840
|
+
? null
|
|
9841
|
+
: {
|
|
9842
|
+
pattern: {
|
|
9843
|
+
requiredPattern,
|
|
9844
|
+
actualValue: value,
|
|
9845
|
+
normalizedValue: normalized,
|
|
9846
|
+
},
|
|
9847
|
+
};
|
|
9848
|
+
}, 'pattern', message);
|
|
9849
|
+
}
|
|
9850
|
+
buildAngularCompatiblePattern(pattern) {
|
|
9851
|
+
if (typeof pattern !== 'string') {
|
|
9852
|
+
return { regex: pattern, requiredPattern: pattern.toString() };
|
|
9853
|
+
}
|
|
9854
|
+
let regexStr = '';
|
|
9855
|
+
if (pattern.charAt(0) !== '^') {
|
|
9856
|
+
regexStr += '^';
|
|
9857
|
+
}
|
|
9858
|
+
regexStr += pattern;
|
|
9859
|
+
if (pattern.charAt(pattern.length - 1) !== '$') {
|
|
9860
|
+
regexStr += '$';
|
|
9861
|
+
}
|
|
9862
|
+
return { regex: new RegExp(regexStr), requiredPattern: regexStr };
|
|
9863
|
+
}
|
|
9864
|
+
buildFromMetadata(meta) {
|
|
9865
|
+
const options = { ...(meta.validators ?? {}) };
|
|
9866
|
+
const required = meta.validators?.required === true ||
|
|
9867
|
+
meta.required === true;
|
|
9868
|
+
if (meta.required === true && options.required === undefined) {
|
|
9869
|
+
options.required = true;
|
|
9870
|
+
}
|
|
9871
|
+
if (meta.pattern && options.pattern === undefined) {
|
|
9872
|
+
options.pattern = meta.pattern;
|
|
9873
|
+
}
|
|
9874
|
+
if (meta.patternMessage && options.patternMessage === undefined) {
|
|
9875
|
+
options.patternMessage = meta.patternMessage;
|
|
9876
|
+
}
|
|
9877
|
+
if (this.isBooleanField(meta) && required) {
|
|
9878
|
+
options.required = false;
|
|
9879
|
+
}
|
|
9880
|
+
if (this.isPhoneField(meta) && options.pattern) {
|
|
9881
|
+
options.pattern = undefined;
|
|
9882
|
+
}
|
|
9883
|
+
const built = this.buildFromValidatorOptions(options);
|
|
9884
|
+
if (this.isBooleanField(meta) && required) {
|
|
9885
|
+
built.validators.unshift(requiredPresenceValidator(meta.validators?.requiredMessage ?? meta.requiredMessage));
|
|
9886
|
+
}
|
|
9887
|
+
return built;
|
|
9673
9888
|
}
|
|
9674
9889
|
isArrayMetadata(meta) {
|
|
9675
9890
|
return (meta.controlType === FieldControlType.ARRAY_INPUT ||
|
|
@@ -9890,7 +10105,7 @@ class DynamicFormService {
|
|
|
9890
10105
|
* - Valor inicial: [] para campos múltiplos quando ausente.
|
|
9891
10106
|
*/
|
|
9892
10107
|
createControlFromMetadata(meta) {
|
|
9893
|
-
const { validators, asyncValidators } = this.
|
|
10108
|
+
const { validators, asyncValidators } = this.buildFromMetadata(meta);
|
|
9894
10109
|
const updateOn = this.getUpdateOnFromMetadata(meta);
|
|
9895
10110
|
const initialValue = meta.defaultValue ?? null;
|
|
9896
10111
|
const value = this.isMultipleField(meta) && initialValue == null ? [] : initialValue;
|
|
@@ -9971,7 +10186,7 @@ class DynamicFormService {
|
|
|
9971
10186
|
control.updateValueAndValidity({ emitEvent: opts.emitEvent ?? false });
|
|
9972
10187
|
return;
|
|
9973
10188
|
}
|
|
9974
|
-
const { validators, asyncValidators } = this.
|
|
10189
|
+
const { validators, asyncValidators } = this.buildFromMetadata(meta);
|
|
9975
10190
|
control.setValidators(validators);
|
|
9976
10191
|
control.setAsyncValidators(asyncValidators);
|
|
9977
10192
|
control.addValidators(this.getUiSpecificValidators(meta));
|
|
@@ -12025,9 +12240,7 @@ class ResourceSurfaceOpenAdapterService {
|
|
|
12025
12240
|
const resolvedSubmitUrl = this.isWritableFormSurface(surface.kind)
|
|
12026
12241
|
? this.discovery.resolveHref(surface.path, discoveryOptions)
|
|
12027
12242
|
: null;
|
|
12028
|
-
const resolvedReadUrl = this.
|
|
12029
|
-
? this.discovery.resolveHref(surface.path, discoveryOptions)
|
|
12030
|
-
: null;
|
|
12243
|
+
const resolvedReadUrl = this.resolveItemHydrationReadUrl(surface, resourcePath, discoveryOptions);
|
|
12031
12244
|
const basePayload = this.buildBasePayload(surface);
|
|
12032
12245
|
const payload = {
|
|
12033
12246
|
...basePayload,
|
|
@@ -12078,10 +12291,10 @@ class ResourceSurfaceOpenAdapterService {
|
|
|
12078
12291
|
apiEndpointKey: options.endpointKey ?? null,
|
|
12079
12292
|
apiUrlEntry: options.apiUrlEntry ?? resolvedApiEntry,
|
|
12080
12293
|
};
|
|
12081
|
-
if (surface.scope === 'ITEM' &&
|
|
12294
|
+
if (surface.scope === 'ITEM' && resolvedReadUrl) {
|
|
12082
12295
|
payload.widget.inputs['customEndpoints'] = {
|
|
12083
12296
|
...(payload.widget.inputs['customEndpoints'] || {}),
|
|
12084
|
-
getById:
|
|
12297
|
+
getById: resolvedReadUrl,
|
|
12085
12298
|
};
|
|
12086
12299
|
payload.widget.bindingOrder = this.withInputBefore(payload.widget.bindingOrder, 'customEndpoints', 'resourceId');
|
|
12087
12300
|
}
|
|
@@ -12156,6 +12369,24 @@ class ResourceSurfaceOpenAdapterService {
|
|
|
12156
12369
|
surface.method.toUpperCase() === 'GET' &&
|
|
12157
12370
|
(surface.kind === 'VIEW' || surface.kind === 'READ_PROJECTION'));
|
|
12158
12371
|
}
|
|
12372
|
+
isItemFormHydrationSurface(surface) {
|
|
12373
|
+
return surface.scope === 'ITEM'
|
|
12374
|
+
&& (this.isReadableFormSurface(surface.kind) || this.isWritableFormSurface(surface.kind));
|
|
12375
|
+
}
|
|
12376
|
+
resolveItemHydrationReadUrl(surface, resourcePath, discoveryOptions) {
|
|
12377
|
+
if (!this.isItemFormHydrationSurface(surface)) {
|
|
12378
|
+
return null;
|
|
12379
|
+
}
|
|
12380
|
+
if (this.isReadableItemSurface(surface)) {
|
|
12381
|
+
return this.discovery.resolveHref(surface.path, discoveryOptions);
|
|
12382
|
+
}
|
|
12383
|
+
return this.discovery.resolveHref(this.buildCanonicalItemHref(resourcePath), discoveryOptions);
|
|
12384
|
+
}
|
|
12385
|
+
buildCanonicalItemHref(resourcePath) {
|
|
12386
|
+
const normalizedResourcePath = this.normalizeResourcePath(resourcePath);
|
|
12387
|
+
const itemHref = `${normalizedResourcePath}/{id}`;
|
|
12388
|
+
return normalizedResourcePath.startsWith('api/') ? `/${itemHref}` : itemHref;
|
|
12389
|
+
}
|
|
12159
12390
|
buildIdBinding(idBindingPath) {
|
|
12160
12391
|
return {
|
|
12161
12392
|
from: idBindingPath,
|
|
@@ -12284,6 +12515,15 @@ class SurfaceOpenMaterializerService {
|
|
|
12284
12515
|
const supported = new Set([
|
|
12285
12516
|
'formId',
|
|
12286
12517
|
'componentInstanceId',
|
|
12518
|
+
'resourcePath',
|
|
12519
|
+
'resourceId',
|
|
12520
|
+
'apiEndpointKey',
|
|
12521
|
+
'apiUrlEntry',
|
|
12522
|
+
'submitUrl',
|
|
12523
|
+
'submitMethod',
|
|
12524
|
+
'responseSchemaUrl',
|
|
12525
|
+
'customEndpoints',
|
|
12526
|
+
'configPersistenceStrategy',
|
|
12287
12527
|
'mode',
|
|
12288
12528
|
'actions',
|
|
12289
12529
|
'enableCustomization',
|
|
@@ -15112,6 +15352,10 @@ const PRAXIS_GLOBAL_ACTION_CATALOG = [
|
|
|
15112
15352
|
description: 'Bindings declarativos aplicados sobre widget.inputs.*. Prefira payload.* para o envelope canônico do evento e runtime.* para estado direto do host.',
|
|
15113
15353
|
},
|
|
15114
15354
|
context: { type: 'object', description: 'Contexto explícito adicional exposto ao runtime de bindings.' },
|
|
15355
|
+
onResult: {
|
|
15356
|
+
type: 'object',
|
|
15357
|
+
description: 'Ação estruturada executada quando a surface emite um resultado semântico via surface.result.',
|
|
15358
|
+
},
|
|
15115
15359
|
},
|
|
15116
15360
|
required: ['presentation', 'widget'],
|
|
15117
15361
|
example: {
|
|
@@ -15132,6 +15376,60 @@ const PRAXIS_GLOBAL_ACTION_CATALOG = [
|
|
|
15132
15376
|
},
|
|
15133
15377
|
},
|
|
15134
15378
|
},
|
|
15379
|
+
{
|
|
15380
|
+
id: 'surface.close',
|
|
15381
|
+
label: 'Fechar Surface',
|
|
15382
|
+
icon: 'close',
|
|
15383
|
+
description: 'Fecha a surface de runtime atual quando a ação é executada dentro de um host aberto por surface.open.',
|
|
15384
|
+
payloadSchema: {
|
|
15385
|
+
type: 'object',
|
|
15386
|
+
properties: {
|
|
15387
|
+
type: { type: 'string', description: 'Tipo semântico do fechamento.' },
|
|
15388
|
+
data: { type: 'object', description: 'Dados opcionais devolvidos ao host.' },
|
|
15389
|
+
},
|
|
15390
|
+
example: { type: 'done' },
|
|
15391
|
+
},
|
|
15392
|
+
},
|
|
15393
|
+
{
|
|
15394
|
+
id: 'surface.result',
|
|
15395
|
+
label: 'Emitir Resultado de Surface',
|
|
15396
|
+
icon: 'outbox',
|
|
15397
|
+
description: 'Emite um resultado semântico para a surface de runtime atual sem fechar o drawer.',
|
|
15398
|
+
payloadSchema: {
|
|
15399
|
+
type: 'object',
|
|
15400
|
+
properties: {
|
|
15401
|
+
type: { type: 'string', description: 'Tipo semântico do resultado.' },
|
|
15402
|
+
data: { type: 'object', description: 'Dados opcionais do resultado.' },
|
|
15403
|
+
},
|
|
15404
|
+
example: { type: 'selection', data: { id: 42 } },
|
|
15405
|
+
},
|
|
15406
|
+
},
|
|
15407
|
+
{
|
|
15408
|
+
id: 'dynamicPage.composition.dispatch',
|
|
15409
|
+
label: 'Despachar Evento de Composição',
|
|
15410
|
+
icon: 'hub',
|
|
15411
|
+
description: 'Publica um evento no runtime de composição da página atual para que links governados atualizem estado, widgets e projeções derivadas.',
|
|
15412
|
+
payloadSchema: {
|
|
15413
|
+
type: 'object',
|
|
15414
|
+
properties: {
|
|
15415
|
+
source: {
|
|
15416
|
+
type: 'object',
|
|
15417
|
+
description: 'Endpoint canônico que deve ser usado como origem do dispatch.',
|
|
15418
|
+
},
|
|
15419
|
+
payload: {
|
|
15420
|
+
type: 'object',
|
|
15421
|
+
description: 'Payload opcional do evento. Quando omitido, a ação usa o payload do contexto de execução.',
|
|
15422
|
+
},
|
|
15423
|
+
},
|
|
15424
|
+
required: ['source'],
|
|
15425
|
+
example: {
|
|
15426
|
+
source: {
|
|
15427
|
+
kind: 'global-action',
|
|
15428
|
+
ref: { actionId: 'peopleOps.decision.accepted' },
|
|
15429
|
+
},
|
|
15430
|
+
},
|
|
15431
|
+
},
|
|
15432
|
+
},
|
|
15135
15433
|
{
|
|
15136
15434
|
id: 'toast.success',
|
|
15137
15435
|
label: 'Toast Sucesso',
|
|
@@ -23293,8 +23591,9 @@ class PraxisHeroBannerComponent {
|
|
|
23293
23591
|
appearance = 'card';
|
|
23294
23592
|
brandText;
|
|
23295
23593
|
titleAccent;
|
|
23594
|
+
visualSummary;
|
|
23296
23595
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisHeroBannerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
23297
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", 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", appearance: "appearance", brandText: "brandText", titleAccent: "titleAccent" }, 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: `
|
|
23596
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", 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", appearance: "appearance", brandText: "brandText", titleAccent: "titleAccent", visualSummary: "visualSummary" }, 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: `
|
|
23298
23597
|
<section
|
|
23299
23598
|
class="phb-shell"
|
|
23300
23599
|
[class.phb-event]="variant === 'event'"
|
|
@@ -23306,7 +23605,7 @@ class PraxisHeroBannerComponent {
|
|
|
23306
23605
|
<p class="phb-brand">{{ brandText }}</p>
|
|
23307
23606
|
}
|
|
23308
23607
|
|
|
23309
|
-
@if (badges
|
|
23608
|
+
@if (badges.length) {
|
|
23310
23609
|
<div class="phb-badges">
|
|
23311
23610
|
@for (badge of badges; track badge) {
|
|
23312
23611
|
<span
|
|
@@ -23331,7 +23630,7 @@ class PraxisHeroBannerComponent {
|
|
|
23331
23630
|
<span>{{ title }}</span>
|
|
23332
23631
|
}
|
|
23333
23632
|
@if (titleAccent) {
|
|
23334
|
-
<span class="phb-title-accent">{{ titleAccent }}</span>
|
|
23633
|
+
<span class="phb-title-accent"> {{ titleAccent }}</span>
|
|
23335
23634
|
}
|
|
23336
23635
|
</h2>
|
|
23337
23636
|
}
|
|
@@ -23340,7 +23639,7 @@ class PraxisHeroBannerComponent {
|
|
|
23340
23639
|
}
|
|
23341
23640
|
</div>
|
|
23342
23641
|
|
|
23343
|
-
@if (metaItems
|
|
23642
|
+
@if (metaItems.length) {
|
|
23344
23643
|
<dl class="phb-meta">
|
|
23345
23644
|
@for (item of metaItems; track item) {
|
|
23346
23645
|
<div class="phb-meta-item">
|
|
@@ -23356,16 +23655,93 @@ class PraxisHeroBannerComponent {
|
|
|
23356
23655
|
<div class="phb-visual">
|
|
23357
23656
|
<img class="phb-image" [src]="imageUrl" [alt]="imageAlt || title || subtitle || 'Imagem do destaque'" />
|
|
23358
23657
|
</div>
|
|
23658
|
+
} @else if (visualSummary) {
|
|
23659
|
+
<aside class="phb-visual phb-visual-summary" aria-label="Resumo visual">
|
|
23660
|
+
<div class="phb-summary-header">
|
|
23661
|
+
<div>
|
|
23662
|
+
@if (visualSummary.eyebrow) {
|
|
23663
|
+
<p class="phb-summary-eyebrow">{{ visualSummary.eyebrow }}</p>
|
|
23664
|
+
}
|
|
23665
|
+
@if (visualSummary.title) {
|
|
23666
|
+
<h3>{{ visualSummary.title }}</h3>
|
|
23667
|
+
}
|
|
23668
|
+
</div>
|
|
23669
|
+
@if (visualSummary.status) {
|
|
23670
|
+
<span
|
|
23671
|
+
class="phb-status"
|
|
23672
|
+
[class.phb-tone-success]="visualSummary.statusTone === 'success'"
|
|
23673
|
+
[class.phb-tone-warning]="visualSummary.statusTone === 'warning'"
|
|
23674
|
+
[class.phb-tone-danger]="visualSummary.statusTone === 'danger'"
|
|
23675
|
+
[class.phb-tone-info]="visualSummary.statusTone === 'info'"
|
|
23676
|
+
>
|
|
23677
|
+
{{ visualSummary.status }}
|
|
23678
|
+
</span>
|
|
23679
|
+
}
|
|
23680
|
+
</div>
|
|
23681
|
+
|
|
23682
|
+
@if (visualSummary.items?.length) {
|
|
23683
|
+
<dl class="phb-summary-grid">
|
|
23684
|
+
@for (item of visualSummary.items; track item) {
|
|
23685
|
+
<div
|
|
23686
|
+
class="phb-summary-item"
|
|
23687
|
+
[class.phb-tone-success]="item.tone === 'success'"
|
|
23688
|
+
[class.phb-tone-warning]="item.tone === 'warning'"
|
|
23689
|
+
[class.phb-tone-danger]="item.tone === 'danger'"
|
|
23690
|
+
[class.phb-tone-info]="item.tone === 'info'"
|
|
23691
|
+
>
|
|
23692
|
+
<dt>{{ item.label }}</dt>
|
|
23693
|
+
<dd>{{ item.value }}</dd>
|
|
23694
|
+
</div>
|
|
23695
|
+
}
|
|
23696
|
+
</dl>
|
|
23697
|
+
}
|
|
23698
|
+
|
|
23699
|
+
@if (visualSummary.events?.length) {
|
|
23700
|
+
<div class="phb-summary-events">
|
|
23701
|
+
@for (event of visualSummary.events; track event) {
|
|
23702
|
+
<div
|
|
23703
|
+
class="phb-summary-event"
|
|
23704
|
+
[class.phb-tone-success]="event.tone === 'success'"
|
|
23705
|
+
[class.phb-tone-warning]="event.tone === 'warning'"
|
|
23706
|
+
[class.phb-tone-danger]="event.tone === 'danger'"
|
|
23707
|
+
[class.phb-tone-info]="event.tone === 'info'"
|
|
23708
|
+
>
|
|
23709
|
+
<span>{{ event.label }}</span>
|
|
23710
|
+
@if (event.value) {
|
|
23711
|
+
<strong>{{ event.value }}</strong>
|
|
23712
|
+
}
|
|
23713
|
+
</div>
|
|
23714
|
+
}
|
|
23715
|
+
</div>
|
|
23716
|
+
}
|
|
23717
|
+
</aside>
|
|
23359
23718
|
} @else {
|
|
23360
23719
|
<div class="phb-visual phb-visual-fallback" aria-hidden="true">
|
|
23361
|
-
<div class="phb-
|
|
23362
|
-
|
|
23363
|
-
|
|
23720
|
+
<div class="phb-preview">
|
|
23721
|
+
<div class="phb-preview-header"></div>
|
|
23722
|
+
<div class="phb-preview-kpis">
|
|
23723
|
+
<span></span>
|
|
23724
|
+
<span></span>
|
|
23725
|
+
<span></span>
|
|
23726
|
+
</div>
|
|
23727
|
+
<div class="phb-preview-chart">
|
|
23728
|
+
<span style="--bar-height: 42%"></span>
|
|
23729
|
+
<span style="--bar-height: 68%"></span>
|
|
23730
|
+
<span style="--bar-height: 54%"></span>
|
|
23731
|
+
<span style="--bar-height: 82%"></span>
|
|
23732
|
+
<span style="--bar-height: 62%"></span>
|
|
23733
|
+
</div>
|
|
23734
|
+
<div class="phb-preview-list">
|
|
23735
|
+
<span></span>
|
|
23736
|
+
<span></span>
|
|
23737
|
+
<span></span>
|
|
23738
|
+
</div>
|
|
23739
|
+
</div>
|
|
23364
23740
|
</div>
|
|
23365
23741
|
}
|
|
23366
23742
|
|
|
23367
23743
|
</section>
|
|
23368
|
-
`, isInline: true, styles: [":host{display:block;--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-shell-shadow: 0 24px 60px color-mix(in srgb, var(--md-sys-color-shadow, #000) 10%, transparent);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent), transparent 38%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 92%, var(--md-sys-color-primary-container) 8%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 96%, var(--md-sys-color-surface-container) 4%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .24), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 45%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .2), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 18%, var(--md-sys-color-surface-container-lowest) 82%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 48%, color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-secondary-container) 6%) 100% );--phb-brand-color: color-mix(in srgb, var(--md-sys-color-primary) 68%, var(--md-sys-color-on-surface) 32%);--phb-subtitle-color: color-mix(in srgb, var(--md-sys-color-primary) 52%, var(--md-sys-color-on-surface) 48%);--phb-title-color: var(--md-sys-color-on-surface);--phb-description-color: var(--md-sys-color-on-surface-variant);--phb-badge-bg: color-mix(in srgb, var(--md-sys-color-surface-container-high) 78%, transparent);--phb-badge-color: var(--md-sys-color-on-surface);--phb-badge-highlight-bg: color-mix(in srgb, var(--md-sys-color-primary-container) 78%, transparent);--phb-badge-highlight-color: var(--md-sys-color-on-primary-container);--phb-badge-muted-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 82%, transparent);--phb-badge-muted-color: var(--md-sys-color-on-surface-variant);--phb-badge-warning-bg: color-mix(in srgb, var(--md-sys-color-error-container) 74%, transparent);--phb-badge-warning-color: var(--md-sys-color-on-error-container);--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 72%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 48%, transparent);--phb-meta-label-color: var(--md-sys-color-on-surface-variant);--phb-meta-value-color: var(--md-sys-color-on-surface);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 90%, var(--md-sys-color-primary) 10%), color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 24%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 18%, var(--md-sys-color-surface-container-high) 82%), color-mix(in srgb, var(--md-sys-color-primary-container) 18%, var(--md-sys-color-surface-container-low) 82%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 68%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 22%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent)}:host-context(.mdc-theme-dark),:host-context(.theme-dark){--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 84%, transparent);--phb-shell-shadow: 0 22px 54px rgba(0, 0, 0, .28);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent), transparent 40%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 90%, var(--md-sys-color-primary-container) 10%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 84%, var(--md-sys-color-primary-container) 16%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .18), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 22%, var(--md-sys-color-surface-container-low) 78%) 45%, color-mix(in srgb, var(--md-sys-color-surface-container) 90%, var(--md-sys-color-primary-container) 10%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .16), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 20%, var(--md-sys-color-surface-container-low) 80%) 48%, color-mix(in srgb, var(--md-sys-color-surface-container) 92%, var(--md-sys-color-secondary-container) 8%) 100% );--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 70%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 88%, var(--md-sys-color-primary) 12%), color-mix(in srgb, var(--md-sys-color-surface-container) 82%, var(--md-sys-color-primary-container) 18%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 22%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 22%, var(--md-sys-color-surface-container-high) 78%), color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 34%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 26%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent)}.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:var(--phb-shell-bg);border:1px solid var(--phb-shell-border);box-shadow:var(--phb-shell-shadow)}.phb-event{background:var(--phb-event-bg)}.phb-institutional{background:var(--phb-institutional-bg)}.phb-copy{display:grid;gap:18px;min-width:0}.phb-brand{margin:0;color:var(--phb-brand-color);font-size:.88rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.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:var(--phb-badge-bg);color:var(--phb-badge-color);font-size:.76rem;font-weight:700;letter-spacing:.02em}.phb-badge-highlight{background:var(--phb-badge-highlight-bg);color:var(--phb-badge-highlight-color)}.phb-badge-muted{background:var(--phb-badge-muted-bg);color:var(--phb-badge-muted-color)}.phb-badge-warning{background:var(--phb-badge-warning-bg);color:var(--phb-badge-warning-color)}.phb-text{display:grid;gap:8px}.phb-subtitle{margin:0;color:var(--phb-subtitle-color);font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-title{margin:0;color:var(--phb-title-color);font-size:clamp(1.6rem,2.2vw,2.5rem);line-height:1.08;letter-spacing:-.03em}.phb-title-accent{display:inline;margin-left:.18em;background:linear-gradient(90deg,#4285f4,#6ea8ff 28%,#a142f4 62%,#ea4335);-webkit-background-clip:text;background-clip:text;color:transparent}.phb-description{margin:0;max-width:56ch;color:var(--phb-description-color);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:var(--phb-meta-bg);border:1px solid var(--phb-meta-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.phb-meta-item dt{margin:0;color:var(--phb-meta-label-color);font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-meta-item dd{margin:0;color:var(--phb-meta-value-color);font-size:.92rem;line-height:1.45}.phb-visual{position:relative;min-height:220px;border-radius:22px;overflow:hidden;background:var(--phb-visual-bg)}.phb-image{display:block;width:100%;height:100%;object-fit:cover}.phb-visual-fallback{background:var(--phb-visual-fallback)}.phb-flat{padding:0 0 18px;border:0;border-radius:0;box-shadow:none;background:transparent;grid-template-columns:minmax(0,1.15fr) minmax(220px,.85fr);gap:18px}.phb-flat .phb-brand{color:var(--md-sys-color-primary)}.phb-flat .phb-badges{order:3}.phb-flat .phb-meta{grid-template-columns:1fr;gap:6px}.phb-flat .phb-meta-item{padding:0;border:0;border-radius:0;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.phb-flat .phb-meta-item dt,.phb-flat .phb-meta-item dd{display:inline}.phb-flat .phb-meta-item dt{margin-right:6px}.phb-flat .phb-visual{min-height:190px;border-radius:26px}.phb-orb{position:absolute;border-radius:999px;filter:blur(2px)}.phb-orb-a{inset:24px auto auto 20px;width:86px;height:86px;background:var(--phb-orb-a-bg)}.phb-orb-b{inset:auto 16px 18px auto;width:132px;height:132px;background:var(--phb-orb-b-bg)}.phb-grid{position:absolute;inset:0;background-image:linear-gradient(var(--phb-grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--phb-grid-line) 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"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
23744
|
+
`, isInline: true, styles: [":host{display:block;--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-shell-shadow: 0 24px 60px color-mix(in srgb, var(--md-sys-color-shadow, #000) 10%, transparent);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent), transparent 38%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 92%, var(--md-sys-color-primary-container) 8%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 96%, var(--md-sys-color-surface-container) 4%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .24), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 45%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .2), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 18%, var(--md-sys-color-surface-container-lowest) 82%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 48%, color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-secondary-container) 6%) 100% );--phb-brand-color: color-mix(in srgb, var(--md-sys-color-primary) 68%, var(--md-sys-color-on-surface) 32%);--phb-subtitle-color: color-mix(in srgb, var(--md-sys-color-primary) 52%, var(--md-sys-color-on-surface) 48%);--phb-title-color: var(--md-sys-color-on-surface);--phb-description-color: var(--md-sys-color-on-surface-variant);--phb-badge-bg: color-mix(in srgb, var(--md-sys-color-surface-container-high) 78%, transparent);--phb-badge-color: var(--md-sys-color-on-surface);--phb-badge-highlight-bg: color-mix(in srgb, var(--md-sys-color-primary-container) 78%, transparent);--phb-badge-highlight-color: var(--md-sys-color-on-primary-container);--phb-badge-muted-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 82%, transparent);--phb-badge-muted-color: var(--md-sys-color-on-surface-variant);--phb-badge-warning-bg: color-mix(in srgb, var(--md-sys-color-error-container) 74%, transparent);--phb-badge-warning-color: var(--md-sys-color-on-error-container);--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 72%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 48%, transparent);--phb-meta-label-color: var(--md-sys-color-on-surface-variant);--phb-meta-value-color: var(--md-sys-color-on-surface);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 90%, var(--md-sys-color-primary) 10%), color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 24%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 18%, var(--md-sys-color-surface-container-high) 82%), color-mix(in srgb, var(--md-sys-color-primary-container) 18%, var(--md-sys-color-surface-container-low) 82%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 68%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 22%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent)}:host-context(.mdc-theme-dark),:host-context(.theme-dark){--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 84%, transparent);--phb-shell-shadow: 0 22px 54px rgba(0, 0, 0, .28);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent), transparent 40%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 90%, var(--md-sys-color-primary-container) 10%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 84%, var(--md-sys-color-primary-container) 16%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .18), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 22%, var(--md-sys-color-surface-container-low) 78%) 45%, color-mix(in srgb, var(--md-sys-color-surface-container) 90%, var(--md-sys-color-primary-container) 10%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .16), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 20%, var(--md-sys-color-surface-container-low) 80%) 48%, color-mix(in srgb, var(--md-sys-color-surface-container) 92%, var(--md-sys-color-secondary-container) 8%) 100% );--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 70%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 88%, var(--md-sys-color-primary) 12%), color-mix(in srgb, var(--md-sys-color-surface-container) 82%, var(--md-sys-color-primary-container) 18%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 22%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 22%, var(--md-sys-color-surface-container-high) 78%), color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 34%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 26%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent)}.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:var(--phb-shell-bg);border:1px solid var(--phb-shell-border);box-shadow:var(--phb-shell-shadow)}.phb-event{background:var(--phb-event-bg)}.phb-institutional{background:var(--phb-institutional-bg)}.phb-copy{display:grid;gap:14px;min-width:0}.phb-brand{margin:0;color:var(--phb-brand-color);font-size:.88rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.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:var(--phb-badge-bg);color:var(--phb-badge-color);font-size:.76rem;font-weight:700;letter-spacing:.02em}.phb-badge-highlight{background:var(--phb-badge-highlight-bg);color:var(--phb-badge-highlight-color)}.phb-badge-muted{background:var(--phb-badge-muted-bg);color:var(--phb-badge-muted-color)}.phb-badge-warning{background:var(--phb-badge-warning-bg);color:var(--phb-badge-warning-color)}.phb-text{display:grid;gap:8px}.phb-subtitle{margin:0;color:var(--phb-subtitle-color);font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-title{margin:0;color:var(--phb-title-color);font-size:clamp(1.6rem,2.2vw,2.5rem);line-height:1.08;letter-spacing:0}.phb-title-accent{display:inline;background:linear-gradient(90deg,#4285f4,#6ea8ff 28%,#a142f4 62%,#ea4335);-webkit-background-clip:text;background-clip:text;color:transparent}.phb-description{margin:0;max-width:56ch;color:var(--phb-description-color);font-size:.94rem;line-height:1.5}.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:var(--phb-meta-bg);border:1px solid var(--phb-meta-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.phb-meta-item dt{margin:0;color:var(--phb-meta-label-color);font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-meta-item dd{margin:0;color:var(--phb-meta-value-color);font-size:.92rem;line-height:1.45}.phb-visual{position:relative;min-height:220px;border-radius:22px;overflow:hidden;background:var(--phb-visual-bg)}.phb-image{display:block;width:100%;height:100%;object-fit:cover}.phb-visual-fallback{background:var(--phb-visual-fallback)}.phb-visual-summary{display:grid;align-content:start;gap:10px;padding:14px;background:linear-gradient(145deg,color-mix(in srgb,var(--md-sys-color-surface-container-high) 92%,var(--md-sys-color-primary) 8%),color-mix(in srgb,var(--md-sys-color-surface-container-low) 88%,var(--md-sys-color-tertiary) 12%))}.phb-summary-header{display:flex;align-items:start;justify-content:space-between;gap:12px}.phb-summary-eyebrow{margin:0 0 4px;color:var(--md-sys-color-primary);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.phb-summary-header h3{margin:0;color:var(--md-sys-color-on-surface);font-size:.95rem;line-height:1.25}.phb-status{display:inline-flex;align-items:center;min-height:26px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 74%,transparent);color:var(--md-sys-color-on-surface);font-size:.72rem;font-weight:800;white-space:nowrap}.phb-summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0}.phb-summary-item{display:grid;gap:4px;min-height:56px;padding:9px 10px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 48%,transparent);border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 58%,transparent)}.phb-summary-item dt{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.64rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em}.phb-summary-item dd{margin:0;color:var(--md-sys-color-on-surface);font-size:1.08rem;font-weight:850;line-height:1.15}.phb-summary-events{display:grid;gap:6px}.phb-summary-event{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:28px;padding:6px 9px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container) 68%,transparent);color:var(--md-sys-color-on-surface-variant);font-size:.72rem}.phb-summary-event strong{color:var(--md-sys-color-on-surface);font-weight:800;white-space:nowrap}.phb-tone-success{--phb-tone-color: var(--md-sys-color-tertiary);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 34%,var(--md-sys-color-outline-variant))}.phb-tone-warning{--phb-tone-color: #d79921;border-color:color-mix(in srgb,#d79921 36%,var(--md-sys-color-outline-variant))}.phb-tone-danger{--phb-tone-color: var(--md-sys-color-error);border-color:color-mix(in srgb,var(--md-sys-color-error) 34%,var(--md-sys-color-outline-variant))}.phb-tone-info{--phb-tone-color: var(--md-sys-color-primary);border-color:color-mix(in srgb,var(--md-sys-color-primary) 34%,var(--md-sys-color-outline-variant))}.phb-summary-item.phb-tone-success dd,.phb-summary-item.phb-tone-warning dd,.phb-summary-item.phb-tone-danger dd,.phb-summary-item.phb-tone-info dd,.phb-status.phb-tone-success,.phb-status.phb-tone-warning,.phb-status.phb-tone-danger,.phb-status.phb-tone-info,.phb-summary-event.phb-tone-success strong,.phb-summary-event.phb-tone-warning strong,.phb-summary-event.phb-tone-danger strong,.phb-summary-event.phb-tone-info strong{color:var(--phb-tone-color)}.phb-flat{padding:0 0 18px;border:0;border-radius:0;box-shadow:none;background:transparent;grid-template-columns:minmax(0,1.15fr) minmax(220px,.85fr);gap:18px}.phb-flat .phb-brand{color:var(--md-sys-color-primary)}.phb-flat .phb-badges{order:3}.phb-flat .phb-meta{grid-template-columns:1fr;gap:6px}.phb-flat .phb-meta-item{padding:0;border:0;border-radius:0;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.phb-flat .phb-meta-item dt,.phb-flat .phb-meta-item dd{display:inline}.phb-flat .phb-meta-item dt{margin-right:6px}.phb-flat .phb-visual{min-height:190px;border-radius:26px}.phb-preview{position:absolute;inset:18px;display:grid;grid-template-rows:18px 44px minmax(72px,1fr) 1fr;gap:12px;padding:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 50%,transparent);border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 62%,transparent);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-surface-bright, #fff) 28%,transparent)}.phb-preview-header,.phb-preview-kpis span,.phb-preview-list span{border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent)}.phb-preview-header{width:46%}.phb-preview-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.phb-preview-kpis span{height:44px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-primary-container) 48%,var(--md-sys-color-surface-container-high) 52%)}.phb-preview-chart{display:grid;grid-template-columns:repeat(5,1fr);align-items:end;gap:8px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container) 74%,transparent)}.phb-preview-chart span{min-height:18px;height:var(--bar-height);border-radius:8px 8px 4px 4px;background:color-mix(in srgb,var(--md-sys-color-primary) 68%,var(--md-sys-color-tertiary) 32%)}.phb-preview-list{display:grid;gap:8px;align-content:start}.phb-preview-list span{height:10px}.phb-preview-list span:nth-child(2){width:74%}.phb-preview-list span:nth-child(3){width:58%}@media(max-width:900px){.phb-shell{grid-template-columns:1fr;padding:18px}.phb-visual{order:-1;min-height:180px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
23369
23745
|
}
|
|
23370
23746
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisHeroBannerComponent, decorators: [{
|
|
23371
23747
|
type: Component,
|
|
@@ -23388,7 +23764,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
23388
23764
|
<p class="phb-brand">{{ brandText }}</p>
|
|
23389
23765
|
}
|
|
23390
23766
|
|
|
23391
|
-
@if (badges
|
|
23767
|
+
@if (badges.length) {
|
|
23392
23768
|
<div class="phb-badges">
|
|
23393
23769
|
@for (badge of badges; track badge) {
|
|
23394
23770
|
<span
|
|
@@ -23413,7 +23789,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
23413
23789
|
<span>{{ title }}</span>
|
|
23414
23790
|
}
|
|
23415
23791
|
@if (titleAccent) {
|
|
23416
|
-
<span class="phb-title-accent">{{ titleAccent }}</span>
|
|
23792
|
+
<span class="phb-title-accent"> {{ titleAccent }}</span>
|
|
23417
23793
|
}
|
|
23418
23794
|
</h2>
|
|
23419
23795
|
}
|
|
@@ -23422,7 +23798,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
23422
23798
|
}
|
|
23423
23799
|
</div>
|
|
23424
23800
|
|
|
23425
|
-
@if (metaItems
|
|
23801
|
+
@if (metaItems.length) {
|
|
23426
23802
|
<dl class="phb-meta">
|
|
23427
23803
|
@for (item of metaItems; track item) {
|
|
23428
23804
|
<div class="phb-meta-item">
|
|
@@ -23438,16 +23814,93 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
23438
23814
|
<div class="phb-visual">
|
|
23439
23815
|
<img class="phb-image" [src]="imageUrl" [alt]="imageAlt || title || subtitle || 'Imagem do destaque'" />
|
|
23440
23816
|
</div>
|
|
23817
|
+
} @else if (visualSummary) {
|
|
23818
|
+
<aside class="phb-visual phb-visual-summary" aria-label="Resumo visual">
|
|
23819
|
+
<div class="phb-summary-header">
|
|
23820
|
+
<div>
|
|
23821
|
+
@if (visualSummary.eyebrow) {
|
|
23822
|
+
<p class="phb-summary-eyebrow">{{ visualSummary.eyebrow }}</p>
|
|
23823
|
+
}
|
|
23824
|
+
@if (visualSummary.title) {
|
|
23825
|
+
<h3>{{ visualSummary.title }}</h3>
|
|
23826
|
+
}
|
|
23827
|
+
</div>
|
|
23828
|
+
@if (visualSummary.status) {
|
|
23829
|
+
<span
|
|
23830
|
+
class="phb-status"
|
|
23831
|
+
[class.phb-tone-success]="visualSummary.statusTone === 'success'"
|
|
23832
|
+
[class.phb-tone-warning]="visualSummary.statusTone === 'warning'"
|
|
23833
|
+
[class.phb-tone-danger]="visualSummary.statusTone === 'danger'"
|
|
23834
|
+
[class.phb-tone-info]="visualSummary.statusTone === 'info'"
|
|
23835
|
+
>
|
|
23836
|
+
{{ visualSummary.status }}
|
|
23837
|
+
</span>
|
|
23838
|
+
}
|
|
23839
|
+
</div>
|
|
23840
|
+
|
|
23841
|
+
@if (visualSummary.items?.length) {
|
|
23842
|
+
<dl class="phb-summary-grid">
|
|
23843
|
+
@for (item of visualSummary.items; track item) {
|
|
23844
|
+
<div
|
|
23845
|
+
class="phb-summary-item"
|
|
23846
|
+
[class.phb-tone-success]="item.tone === 'success'"
|
|
23847
|
+
[class.phb-tone-warning]="item.tone === 'warning'"
|
|
23848
|
+
[class.phb-tone-danger]="item.tone === 'danger'"
|
|
23849
|
+
[class.phb-tone-info]="item.tone === 'info'"
|
|
23850
|
+
>
|
|
23851
|
+
<dt>{{ item.label }}</dt>
|
|
23852
|
+
<dd>{{ item.value }}</dd>
|
|
23853
|
+
</div>
|
|
23854
|
+
}
|
|
23855
|
+
</dl>
|
|
23856
|
+
}
|
|
23857
|
+
|
|
23858
|
+
@if (visualSummary.events?.length) {
|
|
23859
|
+
<div class="phb-summary-events">
|
|
23860
|
+
@for (event of visualSummary.events; track event) {
|
|
23861
|
+
<div
|
|
23862
|
+
class="phb-summary-event"
|
|
23863
|
+
[class.phb-tone-success]="event.tone === 'success'"
|
|
23864
|
+
[class.phb-tone-warning]="event.tone === 'warning'"
|
|
23865
|
+
[class.phb-tone-danger]="event.tone === 'danger'"
|
|
23866
|
+
[class.phb-tone-info]="event.tone === 'info'"
|
|
23867
|
+
>
|
|
23868
|
+
<span>{{ event.label }}</span>
|
|
23869
|
+
@if (event.value) {
|
|
23870
|
+
<strong>{{ event.value }}</strong>
|
|
23871
|
+
}
|
|
23872
|
+
</div>
|
|
23873
|
+
}
|
|
23874
|
+
</div>
|
|
23875
|
+
}
|
|
23876
|
+
</aside>
|
|
23441
23877
|
} @else {
|
|
23442
23878
|
<div class="phb-visual phb-visual-fallback" aria-hidden="true">
|
|
23443
|
-
<div class="phb-
|
|
23444
|
-
|
|
23445
|
-
|
|
23879
|
+
<div class="phb-preview">
|
|
23880
|
+
<div class="phb-preview-header"></div>
|
|
23881
|
+
<div class="phb-preview-kpis">
|
|
23882
|
+
<span></span>
|
|
23883
|
+
<span></span>
|
|
23884
|
+
<span></span>
|
|
23885
|
+
</div>
|
|
23886
|
+
<div class="phb-preview-chart">
|
|
23887
|
+
<span style="--bar-height: 42%"></span>
|
|
23888
|
+
<span style="--bar-height: 68%"></span>
|
|
23889
|
+
<span style="--bar-height: 54%"></span>
|
|
23890
|
+
<span style="--bar-height: 82%"></span>
|
|
23891
|
+
<span style="--bar-height: 62%"></span>
|
|
23892
|
+
</div>
|
|
23893
|
+
<div class="phb-preview-list">
|
|
23894
|
+
<span></span>
|
|
23895
|
+
<span></span>
|
|
23896
|
+
<span></span>
|
|
23897
|
+
</div>
|
|
23898
|
+
</div>
|
|
23446
23899
|
</div>
|
|
23447
23900
|
}
|
|
23448
23901
|
|
|
23449
23902
|
</section>
|
|
23450
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-shell-shadow: 0 24px 60px color-mix(in srgb, var(--md-sys-color-shadow, #000) 10%, transparent);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent), transparent 38%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 92%, var(--md-sys-color-primary-container) 8%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 96%, var(--md-sys-color-surface-container) 4%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .24), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 45%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .2), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 18%, var(--md-sys-color-surface-container-lowest) 82%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 48%, color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-secondary-container) 6%) 100% );--phb-brand-color: color-mix(in srgb, var(--md-sys-color-primary) 68%, var(--md-sys-color-on-surface) 32%);--phb-subtitle-color: color-mix(in srgb, var(--md-sys-color-primary) 52%, var(--md-sys-color-on-surface) 48%);--phb-title-color: var(--md-sys-color-on-surface);--phb-description-color: var(--md-sys-color-on-surface-variant);--phb-badge-bg: color-mix(in srgb, var(--md-sys-color-surface-container-high) 78%, transparent);--phb-badge-color: var(--md-sys-color-on-surface);--phb-badge-highlight-bg: color-mix(in srgb, var(--md-sys-color-primary-container) 78%, transparent);--phb-badge-highlight-color: var(--md-sys-color-on-primary-container);--phb-badge-muted-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 82%, transparent);--phb-badge-muted-color: var(--md-sys-color-on-surface-variant);--phb-badge-warning-bg: color-mix(in srgb, var(--md-sys-color-error-container) 74%, transparent);--phb-badge-warning-color: var(--md-sys-color-on-error-container);--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 72%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 48%, transparent);--phb-meta-label-color: var(--md-sys-color-on-surface-variant);--phb-meta-value-color: var(--md-sys-color-on-surface);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 90%, var(--md-sys-color-primary) 10%), color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 24%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 18%, var(--md-sys-color-surface-container-high) 82%), color-mix(in srgb, var(--md-sys-color-primary-container) 18%, var(--md-sys-color-surface-container-low) 82%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 68%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 22%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent)}:host-context(.mdc-theme-dark),:host-context(.theme-dark){--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 84%, transparent);--phb-shell-shadow: 0 22px 54px rgba(0, 0, 0, .28);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent), transparent 40%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 90%, var(--md-sys-color-primary-container) 10%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 84%, var(--md-sys-color-primary-container) 16%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .18), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 22%, var(--md-sys-color-surface-container-low) 78%) 45%, color-mix(in srgb, var(--md-sys-color-surface-container) 90%, var(--md-sys-color-primary-container) 10%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .16), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 20%, var(--md-sys-color-surface-container-low) 80%) 48%, color-mix(in srgb, var(--md-sys-color-surface-container) 92%, var(--md-sys-color-secondary-container) 8%) 100% );--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 70%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 88%, var(--md-sys-color-primary) 12%), color-mix(in srgb, var(--md-sys-color-surface-container) 82%, var(--md-sys-color-primary-container) 18%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 22%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 22%, var(--md-sys-color-surface-container-high) 78%), color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 34%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 26%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent)}.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:var(--phb-shell-bg);border:1px solid var(--phb-shell-border);box-shadow:var(--phb-shell-shadow)}.phb-event{background:var(--phb-event-bg)}.phb-institutional{background:var(--phb-institutional-bg)}.phb-copy{display:grid;gap:18px;min-width:0}.phb-brand{margin:0;color:var(--phb-brand-color);font-size:.88rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.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:var(--phb-badge-bg);color:var(--phb-badge-color);font-size:.76rem;font-weight:700;letter-spacing:.02em}.phb-badge-highlight{background:var(--phb-badge-highlight-bg);color:var(--phb-badge-highlight-color)}.phb-badge-muted{background:var(--phb-badge-muted-bg);color:var(--phb-badge-muted-color)}.phb-badge-warning{background:var(--phb-badge-warning-bg);color:var(--phb-badge-warning-color)}.phb-text{display:grid;gap:8px}.phb-subtitle{margin:0;color:var(--phb-subtitle-color);font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-title{margin:0;color:var(--phb-title-color);font-size:clamp(1.6rem,2.2vw,2.5rem);line-height:1.08;letter-spacing:-.03em}.phb-title-accent{display:inline;margin-left:.18em;background:linear-gradient(90deg,#4285f4,#6ea8ff 28%,#a142f4 62%,#ea4335);-webkit-background-clip:text;background-clip:text;color:transparent}.phb-description{margin:0;max-width:56ch;color:var(--phb-description-color);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:var(--phb-meta-bg);border:1px solid var(--phb-meta-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.phb-meta-item dt{margin:0;color:var(--phb-meta-label-color);font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-meta-item dd{margin:0;color:var(--phb-meta-value-color);font-size:.92rem;line-height:1.45}.phb-visual{position:relative;min-height:220px;border-radius:22px;overflow:hidden;background:var(--phb-visual-bg)}.phb-image{display:block;width:100%;height:100%;object-fit:cover}.phb-visual-fallback{background:var(--phb-visual-fallback)}.phb-flat{padding:0 0 18px;border:0;border-radius:0;box-shadow:none;background:transparent;grid-template-columns:minmax(0,1.15fr) minmax(220px,.85fr);gap:18px}.phb-flat .phb-brand{color:var(--md-sys-color-primary)}.phb-flat .phb-badges{order:3}.phb-flat .phb-meta{grid-template-columns:1fr;gap:6px}.phb-flat .phb-meta-item{padding:0;border:0;border-radius:0;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.phb-flat .phb-meta-item dt,.phb-flat .phb-meta-item dd{display:inline}.phb-flat .phb-meta-item dt{margin-right:6px}.phb-flat .phb-visual{min-height:190px;border-radius:26px}.phb-orb{position:absolute;border-radius:999px;filter:blur(2px)}.phb-orb-a{inset:24px auto auto 20px;width:86px;height:86px;background:var(--phb-orb-a-bg)}.phb-orb-b{inset:auto 16px 18px auto;width:132px;height:132px;background:var(--phb-orb-b-bg)}.phb-grid{position:absolute;inset:0;background-image:linear-gradient(var(--phb-grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--phb-grid-line) 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"] }]
|
|
23903
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-shell-shadow: 0 24px 60px color-mix(in srgb, var(--md-sys-color-shadow, #000) 10%, transparent);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 14%, transparent), transparent 38%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 92%, var(--md-sys-color-primary-container) 8%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 96%, var(--md-sys-color-surface-container) 4%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .24), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 45%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .2), transparent 34%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 18%, var(--md-sys-color-surface-container-lowest) 82%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 24%, var(--md-sys-color-surface-container-low) 76%) 48%, color-mix(in srgb, var(--md-sys-color-surface) 94%, var(--md-sys-color-secondary-container) 6%) 100% );--phb-brand-color: color-mix(in srgb, var(--md-sys-color-primary) 68%, var(--md-sys-color-on-surface) 32%);--phb-subtitle-color: color-mix(in srgb, var(--md-sys-color-primary) 52%, var(--md-sys-color-on-surface) 48%);--phb-title-color: var(--md-sys-color-on-surface);--phb-description-color: var(--md-sys-color-on-surface-variant);--phb-badge-bg: color-mix(in srgb, var(--md-sys-color-surface-container-high) 78%, transparent);--phb-badge-color: var(--md-sys-color-on-surface);--phb-badge-highlight-bg: color-mix(in srgb, var(--md-sys-color-primary-container) 78%, transparent);--phb-badge-highlight-color: var(--md-sys-color-on-primary-container);--phb-badge-muted-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 82%, transparent);--phb-badge-muted-color: var(--md-sys-color-on-surface-variant);--phb-badge-warning-bg: color-mix(in srgb, var(--md-sys-color-error-container) 74%, transparent);--phb-badge-warning-color: var(--md-sys-color-on-error-container);--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 72%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 48%, transparent);--phb-meta-label-color: var(--md-sys-color-on-surface-variant);--phb-meta-value-color: var(--md-sys-color-on-surface);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 90%, var(--md-sys-color-primary) 10%), color-mix(in srgb, var(--md-sys-color-surface-container-low) 88%, var(--md-sys-color-primary-container) 12%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 24%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 18%, var(--md-sys-color-surface-container-high) 82%), color-mix(in srgb, var(--md-sys-color-primary-container) 18%, var(--md-sys-color-surface-container-low) 82%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-bright, var(--md-sys-color-surface-container-high)) 68%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 22%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 12%, transparent)}:host-context(.mdc-theme-dark),:host-context(.theme-dark){--phb-shell-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 84%, transparent);--phb-shell-shadow: 0 22px 54px rgba(0, 0, 0, .28);--phb-shell-bg: radial-gradient(circle at top right, color-mix(in srgb, var(--md-sys-color-primary) 16%, transparent), transparent 40%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 90%, var(--md-sys-color-primary-container) 10%) 0%, color-mix(in srgb, var(--md-sys-color-surface-container-low) 84%, var(--md-sys-color-primary-container) 16%) 54%, color-mix(in srgb, var(--md-sys-color-surface) 92%, var(--md-sys-color-primary-container) 8%) 100% );--phb-event-bg: radial-gradient(circle at top right, rgba(255, 184, 77, .18), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-primary-container) 22%, var(--md-sys-color-surface-container-low) 78%) 45%, color-mix(in srgb, var(--md-sys-color-surface-container) 90%, var(--md-sys-color-primary-container) 10%) 100% );--phb-institutional-bg: radial-gradient(circle at top right, rgba(17, 94, 89, .16), transparent 36%), linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-secondary-container) 16%, var(--md-sys-color-surface-container-lowest) 84%) 0%, color-mix(in srgb, var(--md-sys-color-secondary-container) 20%, var(--md-sys-color-surface-container-low) 80%) 48%, color-mix(in srgb, var(--md-sys-color-surface-container) 92%, var(--md-sys-color-secondary-container) 8%) 100% );--phb-meta-bg: color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 70%, transparent);--phb-meta-border: color-mix(in srgb, var(--md-sys-color-outline-variant) 60%, transparent);--phb-visual-bg: linear-gradient( 160deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 88%, var(--md-sys-color-primary) 12%), color-mix(in srgb, var(--md-sys-color-surface-container) 82%, var(--md-sys-color-primary-container) 18%) );--phb-visual-fallback: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-surface-container-high) 22%, transparent), color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 8%, transparent) ), linear-gradient( 145deg, color-mix(in srgb, var(--md-sys-color-primary) 22%, var(--md-sys-color-surface-container-high) 78%), color-mix(in srgb, var(--md-sys-color-primary-container) 24%, var(--md-sys-color-surface-container-low) 76%) );--phb-orb-a-bg: color-mix(in srgb, var(--md-sys-color-surface-container-highest) 34%, transparent);--phb-orb-b-bg: color-mix(in srgb, var(--md-sys-color-primary) 26%, transparent);--phb-grid-line: color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent)}.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:var(--phb-shell-bg);border:1px solid var(--phb-shell-border);box-shadow:var(--phb-shell-shadow)}.phb-event{background:var(--phb-event-bg)}.phb-institutional{background:var(--phb-institutional-bg)}.phb-copy{display:grid;gap:14px;min-width:0}.phb-brand{margin:0;color:var(--phb-brand-color);font-size:.88rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.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:var(--phb-badge-bg);color:var(--phb-badge-color);font-size:.76rem;font-weight:700;letter-spacing:.02em}.phb-badge-highlight{background:var(--phb-badge-highlight-bg);color:var(--phb-badge-highlight-color)}.phb-badge-muted{background:var(--phb-badge-muted-bg);color:var(--phb-badge-muted-color)}.phb-badge-warning{background:var(--phb-badge-warning-bg);color:var(--phb-badge-warning-color)}.phb-text{display:grid;gap:8px}.phb-subtitle{margin:0;color:var(--phb-subtitle-color);font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-title{margin:0;color:var(--phb-title-color);font-size:clamp(1.6rem,2.2vw,2.5rem);line-height:1.08;letter-spacing:0}.phb-title-accent{display:inline;background:linear-gradient(90deg,#4285f4,#6ea8ff 28%,#a142f4 62%,#ea4335);-webkit-background-clip:text;background-clip:text;color:transparent}.phb-description{margin:0;max-width:56ch;color:var(--phb-description-color);font-size:.94rem;line-height:1.5}.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:var(--phb-meta-bg);border:1px solid var(--phb-meta-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.phb-meta-item dt{margin:0;color:var(--phb-meta-label-color);font-size:.73rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em}.phb-meta-item dd{margin:0;color:var(--phb-meta-value-color);font-size:.92rem;line-height:1.45}.phb-visual{position:relative;min-height:220px;border-radius:22px;overflow:hidden;background:var(--phb-visual-bg)}.phb-image{display:block;width:100%;height:100%;object-fit:cover}.phb-visual-fallback{background:var(--phb-visual-fallback)}.phb-visual-summary{display:grid;align-content:start;gap:10px;padding:14px;background:linear-gradient(145deg,color-mix(in srgb,var(--md-sys-color-surface-container-high) 92%,var(--md-sys-color-primary) 8%),color-mix(in srgb,var(--md-sys-color-surface-container-low) 88%,var(--md-sys-color-tertiary) 12%))}.phb-summary-header{display:flex;align-items:start;justify-content:space-between;gap:12px}.phb-summary-eyebrow{margin:0 0 4px;color:var(--md-sys-color-primary);font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase}.phb-summary-header h3{margin:0;color:var(--md-sys-color-on-surface);font-size:.95rem;line-height:1.25}.phb-status{display:inline-flex;align-items:center;min-height:26px;padding:0 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-surface-container-highest) 74%,transparent);color:var(--md-sys-color-on-surface);font-size:.72rem;font-weight:800;white-space:nowrap}.phb-summary-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:0}.phb-summary-item{display:grid;gap:4px;min-height:56px;padding:9px 10px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 48%,transparent);border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 58%,transparent)}.phb-summary-item dt{margin:0;color:var(--md-sys-color-on-surface-variant);font-size:.64rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em}.phb-summary-item dd{margin:0;color:var(--md-sys-color-on-surface);font-size:1.08rem;font-weight:850;line-height:1.15}.phb-summary-events{display:grid;gap:6px}.phb-summary-event{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:28px;padding:6px 9px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-surface-container) 68%,transparent);color:var(--md-sys-color-on-surface-variant);font-size:.72rem}.phb-summary-event strong{color:var(--md-sys-color-on-surface);font-weight:800;white-space:nowrap}.phb-tone-success{--phb-tone-color: var(--md-sys-color-tertiary);border-color:color-mix(in srgb,var(--md-sys-color-tertiary) 34%,var(--md-sys-color-outline-variant))}.phb-tone-warning{--phb-tone-color: #d79921;border-color:color-mix(in srgb,#d79921 36%,var(--md-sys-color-outline-variant))}.phb-tone-danger{--phb-tone-color: var(--md-sys-color-error);border-color:color-mix(in srgb,var(--md-sys-color-error) 34%,var(--md-sys-color-outline-variant))}.phb-tone-info{--phb-tone-color: var(--md-sys-color-primary);border-color:color-mix(in srgb,var(--md-sys-color-primary) 34%,var(--md-sys-color-outline-variant))}.phb-summary-item.phb-tone-success dd,.phb-summary-item.phb-tone-warning dd,.phb-summary-item.phb-tone-danger dd,.phb-summary-item.phb-tone-info dd,.phb-status.phb-tone-success,.phb-status.phb-tone-warning,.phb-status.phb-tone-danger,.phb-status.phb-tone-info,.phb-summary-event.phb-tone-success strong,.phb-summary-event.phb-tone-warning strong,.phb-summary-event.phb-tone-danger strong,.phb-summary-event.phb-tone-info strong{color:var(--phb-tone-color)}.phb-flat{padding:0 0 18px;border:0;border-radius:0;box-shadow:none;background:transparent;grid-template-columns:minmax(0,1.15fr) minmax(220px,.85fr);gap:18px}.phb-flat .phb-brand{color:var(--md-sys-color-primary)}.phb-flat .phb-badges{order:3}.phb-flat .phb-meta{grid-template-columns:1fr;gap:6px}.phb-flat .phb-meta-item{padding:0;border:0;border-radius:0;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}.phb-flat .phb-meta-item dt,.phb-flat .phb-meta-item dd{display:inline}.phb-flat .phb-meta-item dt{margin-right:6px}.phb-flat .phb-visual{min-height:190px;border-radius:26px}.phb-preview{position:absolute;inset:18px;display:grid;grid-template-rows:18px 44px minmax(72px,1fr) 1fr;gap:12px;padding:16px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 50%,transparent);border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-lowest) 62%,transparent);box-shadow:inset 0 1px color-mix(in srgb,var(--md-sys-color-surface-bright, #fff) 28%,transparent)}.phb-preview-header,.phb-preview-kpis span,.phb-preview-list span{border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-on-surface) 12%,transparent)}.phb-preview-header{width:46%}.phb-preview-kpis{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.phb-preview-kpis span{height:44px;border-radius:12px;background:color-mix(in srgb,var(--md-sys-color-primary-container) 48%,var(--md-sys-color-surface-container-high) 52%)}.phb-preview-chart{display:grid;grid-template-columns:repeat(5,1fr);align-items:end;gap:8px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container) 74%,transparent)}.phb-preview-chart span{min-height:18px;height:var(--bar-height);border-radius:8px 8px 4px 4px;background:color-mix(in srgb,var(--md-sys-color-primary) 68%,var(--md-sys-color-tertiary) 32%)}.phb-preview-list{display:grid;gap:8px;align-content:start}.phb-preview-list span{height:10px}.phb-preview-list span:nth-child(2){width:74%}.phb-preview-list span:nth-child(3){width:58%}@media(max-width:900px){.phb-shell{grid-template-columns:1fr;padding:18px}.phb-visual{order:-1;min-height:180px}}\n"] }]
|
|
23451
23904
|
}], propDecorators: { instanceId: [{
|
|
23452
23905
|
type: Input
|
|
23453
23906
|
}], analyticsId: [{
|
|
@@ -23476,6 +23929,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
23476
23929
|
type: Input
|
|
23477
23930
|
}], titleAccent: [{
|
|
23478
23931
|
type: Input
|
|
23932
|
+
}], visualSummary: [{
|
|
23933
|
+
type: Input
|
|
23479
23934
|
}] } });
|
|
23480
23935
|
|
|
23481
23936
|
const PRAXIS_HERO_BANNER_METADATA = {
|
|
@@ -23498,6 +23953,7 @@ const PRAXIS_HERO_BANNER_METADATA = {
|
|
|
23498
23953
|
{ name: 'imageAlt', type: 'string', label: 'Alt da imagem', description: 'Texto alternativo da imagem, quando presente.' },
|
|
23499
23954
|
{ name: 'badges', type: 'Array<{ label: string; tone?: "default" | "highlight" | "muted" | "warning" }>', label: 'Badges', description: 'Badges curatoriais no topo do hero.' },
|
|
23500
23955
|
{ name: 'metaItems', type: 'Array<{ label: string; value: string }>', label: 'Metadados', description: 'Metadados como data, local ou tenant.' },
|
|
23956
|
+
{ name: 'visualSummary', type: 'HeroVisualSummary | null', label: 'Resumo visual', description: 'Painel opcional com evidências executivas, métricas e eventos para substituir a ilustração padrão.' },
|
|
23501
23957
|
{ name: 'variant', type: "'default' | 'event' | 'institutional'", label: 'Variante', description: 'Variante visual inicial do hero banner.', default: 'default' },
|
|
23502
23958
|
{ name: 'appearance', type: "'card' | 'flat'", label: 'Aparência', description: 'Controla se o hero usa cartão completo ou composição mais plana e leve.', default: 'card' },
|
|
23503
23959
|
],
|
|
@@ -24215,12 +24671,19 @@ class DynamicWidgetLoaderDirective {
|
|
|
24215
24671
|
currentId;
|
|
24216
24672
|
currentUsesInitialBindings = false;
|
|
24217
24673
|
currentInitialBindingSignature = null;
|
|
24674
|
+
boundInputValues = {};
|
|
24218
24675
|
outputSubs = [];
|
|
24676
|
+
destroyed = false;
|
|
24219
24677
|
/** Dispatch a shell action to the inner widget instance when supported. */
|
|
24220
24678
|
dispatchAction(action) {
|
|
24221
24679
|
const instance = this.compRef?.instance;
|
|
24222
24680
|
if (!instance)
|
|
24223
24681
|
return false;
|
|
24682
|
+
if (action?.id === 'component-settings' &&
|
|
24683
|
+
typeof instance.openTableSettings === 'function') {
|
|
24684
|
+
instance.openTableSettings();
|
|
24685
|
+
return true;
|
|
24686
|
+
}
|
|
24224
24687
|
if (typeof instance.handleShellAction === 'function') {
|
|
24225
24688
|
instance.handleShellAction(action);
|
|
24226
24689
|
return true;
|
|
@@ -24245,11 +24708,30 @@ class DynamicWidgetLoaderDirective {
|
|
|
24245
24708
|
}
|
|
24246
24709
|
}
|
|
24247
24710
|
ngOnDestroy() {
|
|
24711
|
+
this.destroyed = true;
|
|
24248
24712
|
this.destroyCurrent();
|
|
24249
24713
|
}
|
|
24250
24714
|
renderNow() {
|
|
24251
24715
|
this.tryRender();
|
|
24252
24716
|
}
|
|
24717
|
+
materializedInputSnapshot(inputNames) {
|
|
24718
|
+
const instance = this.compRef?.instance;
|
|
24719
|
+
if (!instance || !Array.isArray(inputNames) || !inputNames.length) {
|
|
24720
|
+
return {};
|
|
24721
|
+
}
|
|
24722
|
+
const snapshot = {};
|
|
24723
|
+
for (const name of inputNames) {
|
|
24724
|
+
const key = typeof name === 'string' ? name.trim() : '';
|
|
24725
|
+
if (!key) {
|
|
24726
|
+
continue;
|
|
24727
|
+
}
|
|
24728
|
+
const value = instance[key];
|
|
24729
|
+
if (value !== undefined && typeof value !== 'function') {
|
|
24730
|
+
snapshot[key] = this.cloneValue(value);
|
|
24731
|
+
}
|
|
24732
|
+
}
|
|
24733
|
+
return snapshot;
|
|
24734
|
+
}
|
|
24253
24735
|
parseWidget(input) {
|
|
24254
24736
|
if (!input)
|
|
24255
24737
|
return null;
|
|
@@ -24265,6 +24747,8 @@ class DynamicWidgetLoaderDirective {
|
|
|
24265
24747
|
return input;
|
|
24266
24748
|
}
|
|
24267
24749
|
tryRender() {
|
|
24750
|
+
if (this.destroyed)
|
|
24751
|
+
return;
|
|
24268
24752
|
const def = this.parseWidget(this.widget);
|
|
24269
24753
|
if (!def || !def.id)
|
|
24270
24754
|
return;
|
|
@@ -24281,7 +24765,7 @@ class DynamicWidgetLoaderDirective {
|
|
|
24281
24765
|
throw error;
|
|
24282
24766
|
}
|
|
24283
24767
|
// New component type? recreate; else just update inputs
|
|
24284
|
-
const useInitialBindings = this.shouldUseInitialInputBindings(def.id, meta || undefined);
|
|
24768
|
+
const useInitialBindings = this.shouldUseInitialInputBindings(def.id, inputs, meta || undefined);
|
|
24285
24769
|
const initialBindingSignature = useInitialBindings
|
|
24286
24770
|
? this.initialBindingSignature(def.id, inputs, def.bindingOrder, meta || undefined)
|
|
24287
24771
|
: null;
|
|
@@ -24289,17 +24773,22 @@ class DynamicWidgetLoaderDirective {
|
|
|
24289
24773
|
|| def.id !== this.currentId
|
|
24290
24774
|
|| (useInitialBindings
|
|
24291
24775
|
&& initialBindingSignature !== this.currentInitialBindingSignature);
|
|
24776
|
+
let recreated = false;
|
|
24292
24777
|
if (needsRecreate) {
|
|
24293
24778
|
this.createComponent(def.id, inputs, def.bindingOrder, meta || undefined, useInitialBindings, initialBindingSignature);
|
|
24779
|
+
recreated = !!this.compRef;
|
|
24294
24780
|
}
|
|
24295
24781
|
if (this.compRef) {
|
|
24296
24782
|
try {
|
|
24783
|
+
let inputsChanged = false;
|
|
24297
24784
|
// Faz o binding com coerção de tipos quando possível
|
|
24298
24785
|
if (!this.currentUsesInitialBindings) {
|
|
24299
|
-
this.bindInputs(this.compRef, def.id, inputs, def.bindingOrder, meta || undefined);
|
|
24786
|
+
inputsChanged = this.bindInputs(this.compRef, def.id, inputs, def.bindingOrder, meta || undefined);
|
|
24300
24787
|
}
|
|
24301
24788
|
this.bindOutputs(this.compRef.instance, def.id, outputs, meta || undefined);
|
|
24302
|
-
|
|
24789
|
+
if (recreated || inputsChanged) {
|
|
24790
|
+
this.compRef.changeDetectorRef.detectChanges();
|
|
24791
|
+
}
|
|
24303
24792
|
this.widgetDiagnostic.emit({
|
|
24304
24793
|
componentId: def.id,
|
|
24305
24794
|
childWidgetKey: def.childWidgetKey,
|
|
@@ -24345,11 +24834,10 @@ class DynamicWidgetLoaderDirective {
|
|
|
24345
24834
|
}
|
|
24346
24835
|
this.vcRef.clear();
|
|
24347
24836
|
try {
|
|
24348
|
-
|
|
24349
|
-
|
|
24350
|
-
|
|
24351
|
-
|
|
24352
|
-
this.compRef = this.vcRef.createComponent(cmp, initialBindings.length ? { bindings: initialBindings } : undefined);
|
|
24837
|
+
this.compRef = this.vcRef.createComponent(cmp);
|
|
24838
|
+
if (useInitialBindings) {
|
|
24839
|
+
this.bindInputs(this.compRef, id, inputs, bindingOrder, metaForInputs);
|
|
24840
|
+
}
|
|
24353
24841
|
this.currentId = id;
|
|
24354
24842
|
this.currentUsesInitialBindings = useInitialBindings;
|
|
24355
24843
|
this.currentInitialBindingSignature = useInitialBindings ? initialBindingSignature : null;
|
|
@@ -24372,25 +24860,57 @@ class DynamicWidgetLoaderDirective {
|
|
|
24372
24860
|
this.currentId = undefined;
|
|
24373
24861
|
this.currentUsesInitialBindings = false;
|
|
24374
24862
|
this.currentInitialBindingSignature = null;
|
|
24863
|
+
this.boundInputValues = {};
|
|
24375
24864
|
}
|
|
24376
24865
|
this.vcRef.clear();
|
|
24377
24866
|
}
|
|
24378
|
-
|
|
24867
|
+
cloneValue(value) {
|
|
24868
|
+
if (value == null || typeof value !== 'object') {
|
|
24869
|
+
return value;
|
|
24870
|
+
}
|
|
24871
|
+
try {
|
|
24872
|
+
return JSON.parse(JSON.stringify(value));
|
|
24873
|
+
}
|
|
24874
|
+
catch {
|
|
24875
|
+
return value;
|
|
24876
|
+
}
|
|
24877
|
+
}
|
|
24878
|
+
shouldUseInitialInputBindings(id, inputs, meta) {
|
|
24879
|
+
const hasDetachedDynamicFormRuntimeInputs = id === 'praxis-dynamic-form'
|
|
24880
|
+
&& Boolean(inputs['apiUrlEntry']
|
|
24881
|
+
|| inputs['apiEndpointKey']
|
|
24882
|
+
|| inputs['schemaUrl']
|
|
24883
|
+
|| inputs['readUrl']
|
|
24884
|
+
|| inputs['submitUrl']
|
|
24885
|
+
|| inputs['customEndpoints']);
|
|
24886
|
+
const hasDetachedFilterRuntimeInputs = id === 'praxis-filter'
|
|
24887
|
+
&& Boolean(inputs['apiUrlEntry']);
|
|
24379
24888
|
return meta?.requiresInitialInputs === true
|
|
24380
|
-
|| id === 'praxis-chart'
|
|
24889
|
+
|| id === 'praxis-chart'
|
|
24890
|
+
|| hasDetachedDynamicFormRuntimeInputs
|
|
24891
|
+
|| hasDetachedFilterRuntimeInputs;
|
|
24381
24892
|
}
|
|
24382
24893
|
bindInputs(compRef, id, inputs, bindingOrder, meta) {
|
|
24383
24894
|
const prioritized = this.orderedInputEntries(id, inputs, bindingOrder);
|
|
24895
|
+
const changes = {};
|
|
24896
|
+
let changed = false;
|
|
24384
24897
|
const apply = (key, raw) => {
|
|
24385
24898
|
const value = this.resolveAndCoerceValue(key, raw, meta);
|
|
24386
24899
|
try {
|
|
24387
|
-
|
|
24900
|
+
const hadPreviousValue = Object.prototype.hasOwnProperty.call(this.boundInputValues, key);
|
|
24901
|
+
const previousValue = this.boundInputValues[key];
|
|
24902
|
+
if (hadPreviousValue && Object.is(previousValue, value)) {
|
|
24903
|
+
return;
|
|
24904
|
+
}
|
|
24905
|
+
if (this.isSignalInput(compRef.instance, key)) {
|
|
24388
24906
|
compRef.setInput(key, value);
|
|
24389
24907
|
}
|
|
24390
24908
|
else {
|
|
24391
|
-
// Fallback assignment when setInput is unavailable
|
|
24392
24909
|
compRef.instance[key] = value;
|
|
24393
24910
|
}
|
|
24911
|
+
this.boundInputValues[key] = value;
|
|
24912
|
+
changes[key] = new SimpleChange(previousValue, value, !hadPreviousValue);
|
|
24913
|
+
changed = true;
|
|
24394
24914
|
}
|
|
24395
24915
|
catch (e) {
|
|
24396
24916
|
console.warn(`[DynamicWidgetLoader] Failed to set input ${key}`, e);
|
|
@@ -24401,6 +24921,20 @@ class DynamicWidgetLoaderDirective {
|
|
|
24401
24921
|
for (const [key, raw] of prioritized) {
|
|
24402
24922
|
apply(key, raw);
|
|
24403
24923
|
}
|
|
24924
|
+
if (changed && typeof compRef.instance?.ngOnChanges === 'function') {
|
|
24925
|
+
compRef.instance.ngOnChanges(changes);
|
|
24926
|
+
}
|
|
24927
|
+
return changed;
|
|
24928
|
+
}
|
|
24929
|
+
isSignalInput(instance, key) {
|
|
24930
|
+
try {
|
|
24931
|
+
const candidate = instance?.[key];
|
|
24932
|
+
return typeof candidate === 'function'
|
|
24933
|
+
&& candidate.length === 0;
|
|
24934
|
+
}
|
|
24935
|
+
catch {
|
|
24936
|
+
return false;
|
|
24937
|
+
}
|
|
24404
24938
|
}
|
|
24405
24939
|
initialBindingSignature(id, inputs, bindingOrder, meta) {
|
|
24406
24940
|
const resolvedEntries = this.orderedInputEntries(id, inputs, bindingOrder)
|
|
@@ -24409,7 +24943,7 @@ class DynamicWidgetLoaderDirective {
|
|
|
24409
24943
|
}
|
|
24410
24944
|
orderedInputEntries(id, inputs, bindingOrder) {
|
|
24411
24945
|
const defaultOrderMap = {
|
|
24412
|
-
'praxis-table': ['tableId', 'componentInstanceId', 'resourcePath', 'data', 'config'],
|
|
24946
|
+
'praxis-table': ['tableId', 'componentInstanceId', 'configPersistenceStrategy', 'resourcePath', 'data', 'config'],
|
|
24413
24947
|
'praxis-crud': ['crudId', 'componentInstanceId', 'metadata'],
|
|
24414
24948
|
'praxis-dynamic-form': ['formId', 'componentInstanceId', 'resourcePath'],
|
|
24415
24949
|
'praxis-tabs': ['tabsId', 'componentInstanceId', 'configPersistenceStrategy', 'config'],
|
|
@@ -24512,8 +25046,11 @@ class DynamicWidgetLoaderDirective {
|
|
|
24512
25046
|
this.outputSubs.forEach((u) => u());
|
|
24513
25047
|
this.outputSubs = [];
|
|
24514
25048
|
let keys = Object.keys(outputs || {});
|
|
24515
|
-
if (this.autoWireOutputs &&
|
|
24516
|
-
keys =
|
|
25049
|
+
if (this.autoWireOutputs && meta?.outputs?.length) {
|
|
25050
|
+
keys = Array.from(new Set([
|
|
25051
|
+
...keys,
|
|
25052
|
+
...meta.outputs.map((o) => o.name),
|
|
25053
|
+
]));
|
|
24517
25054
|
}
|
|
24518
25055
|
if (!keys.includes('widgetEvent') && isSubscribableOutput(instance?.widgetEvent)) {
|
|
24519
25056
|
keys = [...keys, 'widgetEvent'];
|
|
@@ -25473,22 +26010,69 @@ const BUILTIN_PAGE_THEME_PRESETS = {
|
|
|
25473
26010
|
id: 'analytics-calm',
|
|
25474
26011
|
label: 'Analytics Calm',
|
|
25475
26012
|
description: 'Superfícies leves, ênfase clara em dados e motion sutil.',
|
|
26013
|
+
shellPreset: 'light-neutral',
|
|
26014
|
+
chartThemePreset: 'executive',
|
|
25476
26015
|
density: 'comfortable',
|
|
25477
26016
|
motion: 'subtle',
|
|
26017
|
+
tokens: {
|
|
26018
|
+
'--pdx-page-bg': 'var(--md-sys-color-surface)',
|
|
26019
|
+
'--pdx-page-surface': 'var(--md-sys-color-surface-container-lowest)',
|
|
26020
|
+
'--pdx-page-gap': '20px',
|
|
26021
|
+
'--pdx-page-card-radius': '14px',
|
|
26022
|
+
'--pdx-page-card-shadow': '0 10px 26px color-mix(in srgb, var(--md-sys-color-shadow, #000) 8%, transparent)',
|
|
26023
|
+
'--pdx-page-accent': 'var(--md-sys-color-primary)',
|
|
26024
|
+
},
|
|
25478
26025
|
},
|
|
25479
26026
|
'workspace-balanced': {
|
|
25480
26027
|
id: 'workspace-balanced',
|
|
25481
26028
|
label: 'Workspace Balanced',
|
|
25482
26029
|
description: 'Equilíbrio entre densidade operacional e clareza visual.',
|
|
26030
|
+
shellPreset: 'light-neutral',
|
|
26031
|
+
chartThemePreset: 'default',
|
|
25483
26032
|
density: 'comfortable',
|
|
25484
26033
|
motion: 'subtle',
|
|
26034
|
+
tokens: {
|
|
26035
|
+
'--pdx-page-bg': 'color-mix(in srgb, var(--md-sys-color-surface) 88%, var(--md-sys-color-surface-container) 12%)',
|
|
26036
|
+
'--pdx-page-surface': 'var(--md-sys-color-surface)',
|
|
26037
|
+
'--pdx-page-gap': '18px',
|
|
26038
|
+
'--pdx-page-card-radius': '12px',
|
|
26039
|
+
'--pdx-page-card-shadow': '0 8px 22px color-mix(in srgb, var(--md-sys-color-shadow, #000) 7%, transparent)',
|
|
26040
|
+
'--pdx-page-accent': 'var(--md-sys-color-primary)',
|
|
26041
|
+
},
|
|
25485
26042
|
},
|
|
25486
26043
|
'ops-monitoring': {
|
|
25487
26044
|
id: 'ops-monitoring',
|
|
25488
26045
|
label: 'Ops Monitoring',
|
|
25489
26046
|
description: 'Contraste um pouco maior para leitura rápida de status, filas e alertas.',
|
|
26047
|
+
shellPreset: 'graphite',
|
|
26048
|
+
chartThemePreset: 'compact',
|
|
26049
|
+
density: 'compact',
|
|
26050
|
+
motion: 'subtle',
|
|
26051
|
+
tokens: {
|
|
26052
|
+
'--pdx-page-bg': 'color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 70%, var(--md-sys-color-primary-container) 30%)',
|
|
26053
|
+
'--pdx-page-surface': 'var(--md-sys-color-surface)',
|
|
26054
|
+
'--pdx-page-gap': '14px',
|
|
26055
|
+
'--pdx-page-card-radius': '12px',
|
|
26056
|
+
'--pdx-page-card-shadow': '0 12px 30px color-mix(in srgb, var(--md-sys-color-shadow, #000) 12%, transparent)',
|
|
26057
|
+
'--pdx-page-accent': 'var(--md-sys-color-tertiary)',
|
|
26058
|
+
},
|
|
26059
|
+
},
|
|
26060
|
+
'executive-command-center': {
|
|
26061
|
+
id: 'executive-command-center',
|
|
26062
|
+
label: 'Executive Command Center',
|
|
26063
|
+
description: 'Superfície premium para dashboards corporativos com hierarquia executiva, dados densos e ações de decisão.',
|
|
26064
|
+
shellPreset: 'graphite',
|
|
26065
|
+
chartThemePreset: 'executive',
|
|
25490
26066
|
density: 'compact',
|
|
25491
26067
|
motion: 'subtle',
|
|
26068
|
+
tokens: {
|
|
26069
|
+
'--pdx-page-bg': 'color-mix(in srgb, var(--md-sys-color-surface-container-lowest) 86%, var(--md-sys-color-primary-container) 14%)',
|
|
26070
|
+
'--pdx-page-surface': 'color-mix(in srgb, var(--md-sys-color-surface) 96%, var(--md-sys-color-surface-container-high) 4%)',
|
|
26071
|
+
'--pdx-page-gap': '12px',
|
|
26072
|
+
'--pdx-page-card-radius': '10px',
|
|
26073
|
+
'--pdx-page-card-shadow': '0 6px 18px color-mix(in srgb, var(--md-sys-color-shadow) 10%, transparent)',
|
|
26074
|
+
'--pdx-page-accent': 'var(--md-sys-color-primary)',
|
|
26075
|
+
},
|
|
25492
26076
|
},
|
|
25493
26077
|
};
|
|
25494
26078
|
|
|
@@ -29340,6 +29924,10 @@ class DynamicWidgetPageComponent {
|
|
|
29340
29924
|
widgets = signal([], ...(ngDevMode ? [{ debugName: "widgets" }] : /* istanbul ignore next */ []));
|
|
29341
29925
|
renderedGroups = signal([], ...(ngDevMode ? [{ debugName: "renderedGroups" }] : /* istanbul ignore next */ []));
|
|
29342
29926
|
mergedContext = {};
|
|
29927
|
+
pageThemePresetId = null;
|
|
29928
|
+
pageThemeDensity = null;
|
|
29929
|
+
pageThemeMotion = null;
|
|
29930
|
+
pageThemeTokenStyle = {};
|
|
29343
29931
|
pageGap = '16px';
|
|
29344
29932
|
gridTemplateColumns = 'minmax(0, 1fr)';
|
|
29345
29933
|
gridAutoRows = 'auto';
|
|
@@ -29360,13 +29948,14 @@ class DynamicWidgetPageComponent {
|
|
|
29360
29948
|
pageColumnCount = 1;
|
|
29361
29949
|
activeTabs = {};
|
|
29362
29950
|
widgetDiagnostics = {};
|
|
29363
|
-
|
|
29951
|
+
selectedWidgetKeyState = signal(null, ...(ngDevMode ? [{ debugName: "selectedWidgetKeyState" }] : /* istanbul ignore next */ []));
|
|
29364
29952
|
blockedCanvasWidgetKey = null;
|
|
29365
29953
|
canvasPreviewState = signal(null, ...(ngDevMode ? [{ debugName: "canvasPreviewState" }] : /* istanbul ignore next */ []));
|
|
29366
29954
|
canvasPreviewInvalidState = signal(false, ...(ngDevMode ? [{ debugName: "canvasPreviewInvalidState" }] : /* istanbul ignore next */ []));
|
|
29367
29955
|
transientCanvasItemsState = signal({}, ...(ngDevMode ? [{ debugName: "transientCanvasItemsState" }] : /* istanbul ignore next */ []));
|
|
29368
29956
|
activeCanvasInteraction = null;
|
|
29369
29957
|
appliedPersisted = false;
|
|
29958
|
+
destroyed = false;
|
|
29370
29959
|
isHydrating = false;
|
|
29371
29960
|
persistenceReady = false;
|
|
29372
29961
|
warnedMissingKey = false;
|
|
@@ -29404,10 +29993,12 @@ class DynamicWidgetPageComponent {
|
|
|
29404
29993
|
optional: true,
|
|
29405
29994
|
});
|
|
29406
29995
|
runtimeObservationRegistration = null;
|
|
29996
|
+
widgetLoaders;
|
|
29407
29997
|
constructor() {
|
|
29408
29998
|
this.registerRuntimeComponentObservationProvider();
|
|
29409
29999
|
}
|
|
29410
30000
|
ngOnDestroy() {
|
|
30001
|
+
this.destroyed = true;
|
|
29411
30002
|
this.runtimeObservationRegistration?.destroy();
|
|
29412
30003
|
this.runtimeObservationRegistration = null;
|
|
29413
30004
|
this.compositionRuntime.destroy();
|
|
@@ -29514,15 +30105,19 @@ class DynamicWidgetPageComponent {
|
|
|
29514
30105
|
}
|
|
29515
30106
|
applyWidgetInputPatchToPage(page, widgetKey, evt) {
|
|
29516
30107
|
const payload = evt?.payload;
|
|
29517
|
-
|
|
30108
|
+
let inputPatch = this.extractWidgetInputPatch(payload);
|
|
29518
30109
|
if (!inputPatch) {
|
|
29519
|
-
|
|
30110
|
+
inputPatch = null;
|
|
29520
30111
|
}
|
|
29521
30112
|
const widgets = this.cloneWidgets(page.widgets || []);
|
|
29522
30113
|
const widgetIndex = widgets.findIndex((widget) => widget.key === widgetKey);
|
|
29523
30114
|
if (widgetIndex < 0) {
|
|
29524
30115
|
return { page, changed: false };
|
|
29525
30116
|
}
|
|
30117
|
+
inputPatch ??= this.extractImplicitInputPatchFromChangeOutput(evt, widgets[widgetIndex]);
|
|
30118
|
+
if (!inputPatch) {
|
|
30119
|
+
return { page, changed: false };
|
|
30120
|
+
}
|
|
29526
30121
|
const nestedPath = this.resolveWidgetInputPatchNestedPath(widgets[widgetIndex], evt);
|
|
29527
30122
|
if (nestedPath?.length) {
|
|
29528
30123
|
let owner = widgets[widgetIndex];
|
|
@@ -29600,7 +30195,8 @@ class DynamicWidgetPageComponent {
|
|
|
29600
30195
|
if (!payload || typeof payload !== 'object' || Array.isArray(payload)) {
|
|
29601
30196
|
return null;
|
|
29602
30197
|
}
|
|
29603
|
-
const candidate = payload.inputPatch
|
|
30198
|
+
const candidate = payload.inputPatch
|
|
30199
|
+
?? payload.payload?.inputPatch;
|
|
29604
30200
|
if (!candidate ||
|
|
29605
30201
|
typeof candidate !== 'object' ||
|
|
29606
30202
|
Array.isArray(candidate)) {
|
|
@@ -29608,6 +30204,26 @@ class DynamicWidgetPageComponent {
|
|
|
29608
30204
|
}
|
|
29609
30205
|
return candidate;
|
|
29610
30206
|
}
|
|
30207
|
+
extractImplicitInputPatchFromChangeOutput(evt, widget) {
|
|
30208
|
+
const output = typeof evt?.output === 'string' ? evt.output.trim() : '';
|
|
30209
|
+
if (!output.endsWith('Change') || output.length <= 'Change'.length) {
|
|
30210
|
+
return null;
|
|
30211
|
+
}
|
|
30212
|
+
const inputName = output.slice(0, -'Change'.length);
|
|
30213
|
+
if (!inputName) {
|
|
30214
|
+
return null;
|
|
30215
|
+
}
|
|
30216
|
+
const declaredInputs = widget.definition?.inputs || {};
|
|
30217
|
+
const hasWidgetInput = Object.prototype.hasOwnProperty.call(declaredInputs, inputName);
|
|
30218
|
+
const hasMetadataInput = !!this.componentMetadata
|
|
30219
|
+
?.get(widget.definition?.id || '')
|
|
30220
|
+
?.inputs
|
|
30221
|
+
?.some((input) => input.name === inputName);
|
|
30222
|
+
if (!hasWidgetInput && !hasMetadataInput) {
|
|
30223
|
+
return null;
|
|
30224
|
+
}
|
|
30225
|
+
return { [inputName]: this.cloneStateValues(evt.payload) };
|
|
30226
|
+
}
|
|
29611
30227
|
buildStateRuntime(state, pageContext) {
|
|
29612
30228
|
return this.stateRuntime.buildRuntimeSnapshot(state, this.buildStateContext(pageContext));
|
|
29613
30229
|
}
|
|
@@ -29637,11 +30253,12 @@ class DynamicWidgetPageComponent {
|
|
|
29637
30253
|
const pageId = this.resolveRuntimePageId();
|
|
29638
30254
|
const widgets = this.widgets();
|
|
29639
30255
|
const widgetKeys = widgets.map((widget) => widget.key).filter(Boolean);
|
|
29640
|
-
const
|
|
29641
|
-
|
|
30256
|
+
const currentSelectedWidgetKey = this.selectedWidgetKeyState();
|
|
30257
|
+
const selectedWidgetKey = widgetKeys.includes(currentSelectedWidgetKey || '')
|
|
30258
|
+
? currentSelectedWidgetKey
|
|
29642
30259
|
: null;
|
|
29643
30260
|
const warnings = [];
|
|
29644
|
-
if (
|
|
30261
|
+
if (currentSelectedWidgetKey && !selectedWidgetKey) {
|
|
29645
30262
|
warnings.push('selectedWidgetKey omitted because it is not present in the active composition.');
|
|
29646
30263
|
}
|
|
29647
30264
|
const compositionLinks = this.compositionDefinition?.links || [];
|
|
@@ -30227,6 +30844,42 @@ class DynamicWidgetPageComponent {
|
|
|
30227
30844
|
payload,
|
|
30228
30845
|
});
|
|
30229
30846
|
}
|
|
30847
|
+
dispatchRuntimeCompositionEvent(event) {
|
|
30848
|
+
const page = this.ensurePageDefinition();
|
|
30849
|
+
if (!this.compositionDefinition || !event?.source) {
|
|
30850
|
+
return;
|
|
30851
|
+
}
|
|
30852
|
+
let payload;
|
|
30853
|
+
try {
|
|
30854
|
+
payload = this.cloneStateValues(event.payload);
|
|
30855
|
+
}
|
|
30856
|
+
catch (error) {
|
|
30857
|
+
const message = 'DynamicWidgetPageComponent could not serialize global action payload for composition dispatch. ' +
|
|
30858
|
+
'Composition links only support JSON-safe payloads.';
|
|
30859
|
+
const wrapped = new Error(message);
|
|
30860
|
+
wrapped.cause = error;
|
|
30861
|
+
throw wrapped;
|
|
30862
|
+
}
|
|
30863
|
+
const cycle = this.compositionRuntime.dispatch({
|
|
30864
|
+
eventId: this.buildRuntimeEventId('global-action', event.source.kind),
|
|
30865
|
+
source: event.source,
|
|
30866
|
+
payload,
|
|
30867
|
+
occurredAt: event.occurredAt,
|
|
30868
|
+
});
|
|
30869
|
+
if (!cycle.matchedLinkIds.length) {
|
|
30870
|
+
return;
|
|
30871
|
+
}
|
|
30872
|
+
const state = this.stateFromCompositionSnapshot(page.state, cycle.snapshot.state.primaryValues);
|
|
30873
|
+
let widgets = this.cloneWidgets(page.widgets || []);
|
|
30874
|
+
widgets = this.applyCompositionWidgetDeliveries(widgets, cycle).widgets;
|
|
30875
|
+
widgets = this.compositionRuntime.projectStateWidgetInputs(this.compositionDefinition, {
|
|
30876
|
+
widgets,
|
|
30877
|
+
state: cycle.snapshot.state,
|
|
30878
|
+
now: cycle.snapshot.generatedAt,
|
|
30879
|
+
}).widgets;
|
|
30880
|
+
const runtime = this.buildStateRuntime(state, page.context);
|
|
30881
|
+
this.applyPageUpdate({ ...page, widgets, state }, true, runtime, false, true);
|
|
30882
|
+
}
|
|
30230
30883
|
matchesRuntimeSourceRef(endpoint, sourceRef) {
|
|
30231
30884
|
return endpoint.kind === 'component-port'
|
|
30232
30885
|
&& endpoint.ref.widget === sourceRef.widget
|
|
@@ -30396,19 +31049,19 @@ class DynamicWidgetPageComponent {
|
|
|
30396
31049
|
...widget.definition,
|
|
30397
31050
|
inputs: {
|
|
30398
31051
|
...(widget.definition.inputs || {}),
|
|
30399
|
-
hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime),
|
|
31052
|
+
hostCapabilities: this.buildRichContentHostCapabilities(widget.key, runtime, widget.definition.inputs?.['context']),
|
|
30400
31053
|
},
|
|
30401
31054
|
},
|
|
30402
31055
|
};
|
|
30403
31056
|
}
|
|
30404
|
-
buildRichContentHostCapabilities(widgetKey, runtime) {
|
|
31057
|
+
buildRichContentHostCapabilities(widgetKey, runtime, widgetContext) {
|
|
30405
31058
|
return {
|
|
30406
|
-
dispatchAction: (actionId, payload) => this.dispatchRichContentAction(widgetKey, actionId, payload),
|
|
31059
|
+
dispatchAction: (actionId, payload) => this.dispatchRichContentAction(widgetKey, actionId, payload, widgetContext),
|
|
30407
31060
|
isActionAvailable: (actionId) => this.isRichContentActionAvailable(widgetKey, actionId),
|
|
30408
31061
|
hasCapability: (capabilityId) => this.hasRichContentCapability(widgetKey, capabilityId, runtime),
|
|
30409
31062
|
};
|
|
30410
31063
|
}
|
|
30411
|
-
dispatchRichContentAction(widgetKey, actionId, payload) {
|
|
31064
|
+
dispatchRichContentAction(widgetKey, actionId, payload, widgetContext) {
|
|
30412
31065
|
if (!actionId) {
|
|
30413
31066
|
return;
|
|
30414
31067
|
}
|
|
@@ -30422,6 +31075,14 @@ class DynamicWidgetPageComponent {
|
|
|
30422
31075
|
payload,
|
|
30423
31076
|
pageContext: this.mergedContext,
|
|
30424
31077
|
pageState: this.cloneStateValues(this.pageRuntime?.effectiveValues || {}),
|
|
31078
|
+
richContentContext: widgetContext,
|
|
31079
|
+
},
|
|
31080
|
+
runtime: {
|
|
31081
|
+
widgetContext,
|
|
31082
|
+
pageState: this.cloneStateValues(this.pageRuntime?.effectiveValues || {}),
|
|
31083
|
+
composition: {
|
|
31084
|
+
dispatch: (event) => this.dispatchRuntimeCompositionEvent(event),
|
|
31085
|
+
},
|
|
30425
31086
|
},
|
|
30426
31087
|
meta: {
|
|
30427
31088
|
origin: 'dynamic-page.rich-content',
|
|
@@ -30475,7 +31136,7 @@ class DynamicWidgetPageComponent {
|
|
|
30475
31136
|
case 'page.autoPersist.disabled':
|
|
30476
31137
|
return !this.autoPersist;
|
|
30477
31138
|
case 'page.widget.selected':
|
|
30478
|
-
return this.
|
|
31139
|
+
return this.selectedWidgetKeyState() === widgetKey;
|
|
30479
31140
|
case 'page.widget.configurable': {
|
|
30480
31141
|
const widget = this.widgets().find((candidate) => candidate.key === widgetKey);
|
|
30481
31142
|
const widgetType = widget?.definition?.id || '';
|
|
@@ -30872,9 +31533,12 @@ class DynamicWidgetPageComponent {
|
|
|
30872
31533
|
ref.saved$.subscribe((result) => this.applyWidgetShell(key, result, true));
|
|
30873
31534
|
}
|
|
30874
31535
|
openWidgetComponentSettings(key) {
|
|
31536
|
+
if (this.dispatchWidgetComponentSettingsToRuntime(key)) {
|
|
31537
|
+
return;
|
|
31538
|
+
}
|
|
30875
31539
|
if (!this.settingsPanel)
|
|
30876
31540
|
return;
|
|
30877
|
-
const page = this.ensurePageDefinition();
|
|
31541
|
+
const page = this.materializeRuntimeInputsForWidget(this.ensurePageDefinition(), key);
|
|
30878
31542
|
const widget = page.widgets.find((w) => w.key === key);
|
|
30879
31543
|
if (!widget)
|
|
30880
31544
|
return;
|
|
@@ -30899,6 +31563,54 @@ class DynamicWidgetPageComponent {
|
|
|
30899
31563
|
ref.applied$.subscribe((result) => this.applyWidgetComponentInputs(key, result, false));
|
|
30900
31564
|
ref.saved$.subscribe((result) => this.applyWidgetComponentInputs(key, result, true));
|
|
30901
31565
|
}
|
|
31566
|
+
materializeRuntimeInputsForWidget(page, key) {
|
|
31567
|
+
const normalizedKey = String(key || '').trim();
|
|
31568
|
+
if (!normalizedKey) {
|
|
31569
|
+
return page;
|
|
31570
|
+
}
|
|
31571
|
+
const widget = page.widgets?.find((candidate) => candidate.key === normalizedKey);
|
|
31572
|
+
if (!widget) {
|
|
31573
|
+
return page;
|
|
31574
|
+
}
|
|
31575
|
+
const inputNames = this.componentMetadata
|
|
31576
|
+
?.get(widget.definition?.id || '')
|
|
31577
|
+
?.inputs
|
|
31578
|
+
?.map((input) => input.name)
|
|
31579
|
+
?.filter((name) => typeof name === 'string' && !!name.trim()) || [];
|
|
31580
|
+
if (!inputNames.length) {
|
|
31581
|
+
return page;
|
|
31582
|
+
}
|
|
31583
|
+
const loader = this.findWidgetLoader(normalizedKey);
|
|
31584
|
+
const materializedInputs = loader?.materializedInputSnapshot(inputNames) || {};
|
|
31585
|
+
if (!Object.keys(materializedInputs).length) {
|
|
31586
|
+
return page;
|
|
31587
|
+
}
|
|
31588
|
+
const result = this.applyWidgetInputPatchToPage(page, normalizedKey, {
|
|
31589
|
+
sourceComponentId: widget.definition?.id,
|
|
31590
|
+
output: 'runtimeInputSnapshot',
|
|
31591
|
+
payload: {
|
|
31592
|
+
inputPatch: materializedInputs,
|
|
31593
|
+
},
|
|
31594
|
+
});
|
|
31595
|
+
if (!result.changed) {
|
|
31596
|
+
return page;
|
|
31597
|
+
}
|
|
31598
|
+
this.applyPageUpdate(result.page, true, undefined, true, true);
|
|
31599
|
+
return result.page;
|
|
31600
|
+
}
|
|
31601
|
+
findWidgetLoader(key) {
|
|
31602
|
+
return this.widgetLoaders?.find((loader) => loader.ownerWidgetKey === key);
|
|
31603
|
+
}
|
|
31604
|
+
dispatchWidgetComponentSettingsToRuntime(key) {
|
|
31605
|
+
const loader = this.findWidgetLoader(String(key || '').trim());
|
|
31606
|
+
if (typeof loader?.dispatchAction !== 'function') {
|
|
31607
|
+
return false;
|
|
31608
|
+
}
|
|
31609
|
+
return loader?.dispatchAction({
|
|
31610
|
+
id: 'component-settings',
|
|
31611
|
+
command: 'component-settings',
|
|
31612
|
+
}) === true;
|
|
31613
|
+
}
|
|
30902
31614
|
applyWidgetComponentInputs(key, result, persist) {
|
|
30903
31615
|
if (!result || typeof result !== 'object' || Array.isArray(result))
|
|
30904
31616
|
return;
|
|
@@ -30938,16 +31650,17 @@ class DynamicWidgetPageComponent {
|
|
|
30938
31650
|
return;
|
|
30939
31651
|
}
|
|
30940
31652
|
this.applyPageUpdate(this.removeWidgetReferences(page, widgetKey), true);
|
|
30941
|
-
if (this.
|
|
30942
|
-
this.
|
|
31653
|
+
if (this.selectedWidgetKeyState() === widgetKey) {
|
|
31654
|
+
this.selectedWidgetKeyState.set(null);
|
|
30943
31655
|
this.widgetSelectionChange.emit(null);
|
|
30944
31656
|
}
|
|
30945
31657
|
}
|
|
30946
31658
|
removeSelectedWidget() {
|
|
30947
|
-
|
|
31659
|
+
const selectedWidgetKey = this.selectedWidgetKeyState();
|
|
31660
|
+
if (!selectedWidgetKey) {
|
|
30948
31661
|
return;
|
|
30949
31662
|
}
|
|
30950
|
-
void this.confirmAndRemoveWidget(
|
|
31663
|
+
void this.confirmAndRemoveWidget(selectedWidgetKey);
|
|
30951
31664
|
}
|
|
30952
31665
|
removeSelectedCanvasWidget() {
|
|
30953
31666
|
this.removeSelectedWidget();
|
|
@@ -31178,7 +31891,7 @@ class DynamicWidgetPageComponent {
|
|
|
31178
31891
|
const layoutPreset = pageDefinition
|
|
31179
31892
|
? this.resolveLayoutPresetDefinition(pageDefinition)
|
|
31180
31893
|
: undefined;
|
|
31181
|
-
|
|
31894
|
+
const merged = {
|
|
31182
31895
|
...baseContext,
|
|
31183
31896
|
...(inputContext || {}),
|
|
31184
31897
|
pageDeviceKind: this.resolveDeviceKind(),
|
|
@@ -31192,6 +31905,53 @@ class DynamicWidgetPageComponent {
|
|
|
31192
31905
|
pageStateDerived: this.cloneStateValues(runtime.derivedValues),
|
|
31193
31906
|
pageStateEffective: this.cloneStateValues(runtime.effectiveValues),
|
|
31194
31907
|
};
|
|
31908
|
+
this.syncThemePresentation(themePreset);
|
|
31909
|
+
return this.projectThemeDefaultsIntoContext(merged, themePreset);
|
|
31910
|
+
}
|
|
31911
|
+
syncThemePresentation(themePreset) {
|
|
31912
|
+
this.pageThemePresetId = themePreset?.id || null;
|
|
31913
|
+
this.pageThemeDensity = themePreset?.density || null;
|
|
31914
|
+
this.pageThemeMotion = themePreset?.motion || null;
|
|
31915
|
+
this.pageThemeTokenStyle = this.normalizeThemeTokens(themePreset?.tokens);
|
|
31916
|
+
}
|
|
31917
|
+
normalizeThemeTokens(tokens) {
|
|
31918
|
+
if (!tokens)
|
|
31919
|
+
return {};
|
|
31920
|
+
const out = {};
|
|
31921
|
+
for (const [key, value] of Object.entries(tokens)) {
|
|
31922
|
+
if (!key.startsWith('--'))
|
|
31923
|
+
continue;
|
|
31924
|
+
if (typeof value !== 'string')
|
|
31925
|
+
continue;
|
|
31926
|
+
out[key] = value;
|
|
31927
|
+
}
|
|
31928
|
+
return out;
|
|
31929
|
+
}
|
|
31930
|
+
toPlainObject(value) {
|
|
31931
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
31932
|
+
? { ...value }
|
|
31933
|
+
: {};
|
|
31934
|
+
}
|
|
31935
|
+
projectThemeDefaultsIntoContext(context, themePreset) {
|
|
31936
|
+
const shellPreset = themePreset?.shellPreset?.trim();
|
|
31937
|
+
if (!shellPreset)
|
|
31938
|
+
return context;
|
|
31939
|
+
const ui = this.toPlainObject(context['ui']);
|
|
31940
|
+
const shell = this.toPlainObject(ui['shell']);
|
|
31941
|
+
if (typeof shell['preset'] === 'string' && shell['preset'].trim()) {
|
|
31942
|
+
return context;
|
|
31943
|
+
}
|
|
31944
|
+
return {
|
|
31945
|
+
...context,
|
|
31946
|
+
ui: {
|
|
31947
|
+
...ui,
|
|
31948
|
+
shell: {
|
|
31949
|
+
...shell,
|
|
31950
|
+
preset: shellPreset,
|
|
31951
|
+
presetSource: 'theme',
|
|
31952
|
+
},
|
|
31953
|
+
},
|
|
31954
|
+
};
|
|
31195
31955
|
}
|
|
31196
31956
|
onWindowResize() {
|
|
31197
31957
|
if (!this.pageDefinition)
|
|
@@ -31464,8 +32224,8 @@ class DynamicWidgetPageComponent {
|
|
|
31464
32224
|
selectWidget(widgetKey) {
|
|
31465
32225
|
if (!this.enableCustomization)
|
|
31466
32226
|
return;
|
|
31467
|
-
if (this.
|
|
31468
|
-
this.
|
|
32227
|
+
if (this.selectedWidgetKeyState() !== widgetKey) {
|
|
32228
|
+
this.selectedWidgetKeyState.set(widgetKey);
|
|
31469
32229
|
this.widgetSelectionChange.emit(widgetKey);
|
|
31470
32230
|
}
|
|
31471
32231
|
if (this.blockedCanvasWidgetKey &&
|
|
@@ -31477,13 +32237,21 @@ class DynamicWidgetPageComponent {
|
|
|
31477
32237
|
if (this.shouldPreserveInnerWidgetInteraction(event)) {
|
|
31478
32238
|
return;
|
|
31479
32239
|
}
|
|
32240
|
+
if (event.type === 'focusin') {
|
|
32241
|
+
setTimeout(() => {
|
|
32242
|
+
if (!this.destroyed) {
|
|
32243
|
+
this.selectWidget(widgetKey);
|
|
32244
|
+
}
|
|
32245
|
+
}, 0);
|
|
32246
|
+
return;
|
|
32247
|
+
}
|
|
31480
32248
|
this.selectWidget(widgetKey);
|
|
31481
32249
|
}
|
|
31482
32250
|
isCanvasWidgetSelected(widgetKey) {
|
|
31483
32251
|
return this.isWidgetSelected(widgetKey);
|
|
31484
32252
|
}
|
|
31485
32253
|
isWidgetSelected(widgetKey) {
|
|
31486
|
-
return this.
|
|
32254
|
+
return this.selectedWidgetKeyState() === widgetKey;
|
|
31487
32255
|
}
|
|
31488
32256
|
shouldPreserveInnerWidgetInteraction(event) {
|
|
31489
32257
|
if (!this.enableCustomization)
|
|
@@ -32427,8 +33195,15 @@ class DynamicWidgetPageComponent {
|
|
|
32427
33195
|
throw new Error('DynamicWidgetPageComponent no longer accepts `page.connections`. Use `composition.links` only.');
|
|
32428
33196
|
}
|
|
32429
33197
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DynamicWidgetPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
32430
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DynamicWidgetPageComponent, isStandalone: true, selector: "praxis-dynamic-page", inputs: { page: "page", context: "context", strictValidation: "strictValidation", enableCustomization: "enableCustomization", showPageSettingsButton: "showPageSettingsButton", shellEditorComponent: "shellEditorComponent", pageEditorComponent: "pageEditorComponent", autoPersist: "autoPersist", pageIdentity: "pageIdentity", componentInstanceId: "componentInstanceId", showWidgetAssistantButton: "showWidgetAssistantButton" }, outputs: { pageChange: "pageChange", widgetEvent: "widgetEvent", widgetSelectionChange: "widgetSelectionChange", widgetAssistantRequested: "widgetAssistantRequested", widgetDiagnosticsChange: "widgetDiagnosticsChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:pointermove": "onCanvasPointerMove($event)", "window:pointerup": "onCanvasPointerUp($event)", "window:pointercancel": "onCanvasPointerCancel($event)" } }, providers: [providePraxisI18nConfig(DYNAMIC_WIDGET_PAGE_I18N_CONFIG)], viewQueries: [{ propertyName: "pageCanvasHost", first: true, predicate: ["pageCanvasHost"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
32431
|
-
<div
|
|
33198
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DynamicWidgetPageComponent, isStandalone: true, selector: "praxis-dynamic-page", inputs: { page: "page", context: "context", strictValidation: "strictValidation", enableCustomization: "enableCustomization", showPageSettingsButton: "showPageSettingsButton", shellEditorComponent: "shellEditorComponent", pageEditorComponent: "pageEditorComponent", autoPersist: "autoPersist", pageIdentity: "pageIdentity", componentInstanceId: "componentInstanceId", showWidgetAssistantButton: "showWidgetAssistantButton" }, outputs: { pageChange: "pageChange", widgetEvent: "widgetEvent", widgetSelectionChange: "widgetSelectionChange", widgetAssistantRequested: "widgetAssistantRequested", widgetDiagnosticsChange: "widgetDiagnosticsChange" }, host: { listeners: { "window:resize": "onWindowResize()", "window:pointermove": "onCanvasPointerMove($event)", "window:pointerup": "onCanvasPointerUp($event)", "window:pointercancel": "onCanvasPointerCancel($event)" } }, providers: [providePraxisI18nConfig(DYNAMIC_WIDGET_PAGE_I18N_CONFIG)], viewQueries: [{ propertyName: "pageCanvasHost", first: true, predicate: ["pageCanvasHost"], descendants: true }, { propertyName: "widgetLoaders", predicate: ["widgetLoader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
33199
|
+
<div
|
|
33200
|
+
class="pdx-page-wrapper"
|
|
33201
|
+
[class.editing]="enableCustomization"
|
|
33202
|
+
[attr.data-theme-preset]="pageThemePresetId"
|
|
33203
|
+
[attr.data-density]="pageThemeDensity"
|
|
33204
|
+
[attr.data-motion]="pageThemeMotion"
|
|
33205
|
+
[ngStyle]="pageThemeTokenStyle"
|
|
33206
|
+
>
|
|
32432
33207
|
@if (enableCustomization && showPageSettingsButton) {
|
|
32433
33208
|
<button
|
|
32434
33209
|
class="pdx-page-settings"
|
|
@@ -32454,6 +33229,7 @@ class DynamicWidgetPageComponent {
|
|
|
32454
33229
|
@for (w of widgets(); track w.key) {
|
|
32455
33230
|
<div
|
|
32456
33231
|
class="pdx-widget pdx-widget--canvas"
|
|
33232
|
+
[attr.data-widget-key]="w.key"
|
|
32457
33233
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
32458
33234
|
[class.pdx-widget--selected]="
|
|
32459
33235
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -32502,6 +33278,7 @@ class DynamicWidgetPageComponent {
|
|
|
32502
33278
|
>
|
|
32503
33279
|
<ng-container
|
|
32504
33280
|
[dynamicWidgetLoader]="w.definition"
|
|
33281
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
32505
33282
|
[ownerWidgetKey]="w.key"
|
|
32506
33283
|
[context]="mergedContext"
|
|
32507
33284
|
[strictValidation]="strictValidation"
|
|
@@ -32590,6 +33367,7 @@ class DynamicWidgetPageComponent {
|
|
|
32590
33367
|
@for (w of tab.widgets; track w.key) {
|
|
32591
33368
|
<div
|
|
32592
33369
|
class="pdx-widget"
|
|
33370
|
+
[attr.data-widget-key]="w.key"
|
|
32593
33371
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
32594
33372
|
[class.pdx-widget--selected]="
|
|
32595
33373
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -32606,6 +33384,7 @@ class DynamicWidgetPageComponent {
|
|
|
32606
33384
|
>
|
|
32607
33385
|
<ng-container
|
|
32608
33386
|
[dynamicWidgetLoader]="w.definition"
|
|
33387
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
32609
33388
|
[ownerWidgetKey]="w.key"
|
|
32610
33389
|
[context]="mergedContext"
|
|
32611
33390
|
[strictValidation]="strictValidation"
|
|
@@ -32654,6 +33433,7 @@ class DynamicWidgetPageComponent {
|
|
|
32654
33433
|
@for (w of group.widgets; track w.key) {
|
|
32655
33434
|
<div
|
|
32656
33435
|
class="pdx-widget"
|
|
33436
|
+
[attr.data-widget-key]="w.key"
|
|
32657
33437
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
32658
33438
|
[class.pdx-widget--selected]="
|
|
32659
33439
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -32670,6 +33450,7 @@ class DynamicWidgetPageComponent {
|
|
|
32670
33450
|
>
|
|
32671
33451
|
<ng-container
|
|
32672
33452
|
[dynamicWidgetLoader]="w.definition"
|
|
33453
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
32673
33454
|
[ownerWidgetKey]="w.key"
|
|
32674
33455
|
[context]="mergedContext"
|
|
32675
33456
|
[strictValidation]="strictValidation"
|
|
@@ -32710,6 +33491,7 @@ class DynamicWidgetPageComponent {
|
|
|
32710
33491
|
@for (w of widgets(); track w.key) {
|
|
32711
33492
|
<div
|
|
32712
33493
|
class="pdx-widget"
|
|
33494
|
+
[attr.data-widget-key]="w.key"
|
|
32713
33495
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
32714
33496
|
[class.pdx-widget--selected]="
|
|
32715
33497
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -32726,6 +33508,7 @@ class DynamicWidgetPageComponent {
|
|
|
32726
33508
|
>
|
|
32727
33509
|
<ng-container
|
|
32728
33510
|
[dynamicWidgetLoader]="w.definition"
|
|
33511
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
32729
33512
|
[ownerWidgetKey]="w.key"
|
|
32730
33513
|
[context]="mergedContext"
|
|
32731
33514
|
[strictValidation]="strictValidation"
|
|
@@ -32766,7 +33549,7 @@ class DynamicWidgetPageComponent {
|
|
|
32766
33549
|
</div>
|
|
32767
33550
|
}
|
|
32768
33551
|
</div>
|
|
32769
|
-
`, isInline: true, styles: [".pdx-page-wrapper{position:relative;display:block}.pdx-page{display:grid;gap:12px;grid-template-columns:minmax(0,1fr)}.pdx-page--canvas{align-items:start;grid-auto-flow:dense}.pdx-page-settings{position:sticky;top:8px;z-index:2;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:inherit;border-radius:12px;width:36px;height:36px;margin-bottom:6px}.pdx-widget{position:relative;background:var(--pfx-surface, transparent);border-radius:6px;min-width:0;min-height:0}.pdx-widget--interactive{cursor:pointer}.pdx-widget--selected:before{content:\"\";position:absolute;inset:0;border:1px dashed color-mix(in srgb,var(--md-sys-color-primary) 34%,transparent);border-radius:14px;pointer-events:none;z-index:1;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent)}.pdx-widget--canvas{align-self:stretch;--pdx-resize-gradient-horizontal: linear-gradient( 90deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-vertical: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-se: linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-sw: linear-gradient( 225deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-widget--canvas:after{content:\"\";position:absolute;inset:0;padding:2px;border-radius:14px;background:var(--pdx-active-resize-gradient);opacity:0;pointer-events:none;transition:opacity .14s ease,filter .14s ease;filter:saturate(1.02) drop-shadow(0 0 5px color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude}.pdx-widget--canvas-selected:before,.pdx-widget--canvas-blocked:before{content:\"\";position:absolute;inset:0;border-radius:14px;pointer-events:none;z-index:1;transition:opacity .14s ease,box-shadow .14s ease,border-color .14s ease}.pdx-widget--canvas-blocked:before{border:1px solid color-mix(in srgb,var(--md-sys-color-error) 74%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 20%,transparent),0 10px 24px color-mix(in srgb,var(--md-sys-color-error) 12%,transparent)}.pdx-widget--canvas:has(.pdx-canvas-resize:hover):after,.pdx-widget--canvas:has(.pdx-canvas-resize:focus-visible):after{opacity:.82}.pdx-widget--canvas:has(.pdx-canvas-resize--north:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-horizontal)}.pdx-widget--canvas:has(.pdx-canvas-resize--east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-vertical)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-sw)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize{position:absolute;z-index:7;border:0;padding:0;margin:0;background:transparent;touch-action:none;cursor:pointer;opacity:0;pointer-events:none;transform:scale(.94);transition:opacity .14s ease,transform .14s ease,filter .14s ease;filter:saturate(.9)}.pdx-widget--canvas:hover .pdx-canvas-resize,.pdx-widget--canvas:focus-within .pdx-canvas-resize,.pdx-widget--canvas-selected .pdx-canvas-resize{opacity:.88;pointer-events:auto;transform:scale(1);filter:saturate(1)}.pdx-widget--canvas:has(.pdx-shell.expanded) .pdx-canvas-resize,.pdx-widget--canvas:has(.pdx-shell.fullscreen) .pdx-canvas-resize{opacity:0;pointer-events:none;transform:scale(.94)}.pdx-canvas-resize-grip{display:block;width:9px;height:9px;border-radius:999px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 42%,var(--md-sys-color-outline-variant) 58%);background:color-mix(in srgb,var(--md-sys-color-surface) 92%,var(--md-sys-color-primary) 8%);box-shadow:0 1px 4px color-mix(in srgb,var(--md-sys-color-shadow) 10%,transparent);transition:transform .14s ease,border-color .14s ease,background .14s ease,box-shadow .14s ease}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:color-mix(in srgb,var(--md-sys-color-primary) 58%,var(--md-sys-color-outline-variant) 42%);background:color-mix(in srgb,var(--md-sys-color-surface) 84%,var(--md-sys-color-primary) 16%);box-shadow:0 2px 7px color-mix(in srgb,var(--md-sys-color-primary) 14%,transparent);transform:scale(1.04)}.pdx-canvas-resize--north,.pdx-canvas-resize--south{left:50%;width:40px;height:18px;margin-left:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north{top:-8px;cursor:ns-resize}.pdx-canvas-resize--south{bottom:-8px;cursor:ns-resize}.pdx-canvas-resize--east,.pdx-canvas-resize--west{top:50%;width:18px;height:40px;margin-top:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--east{right:-8px;cursor:ew-resize}.pdx-canvas-resize--west{left:-8px;cursor:ew-resize}.pdx-canvas-resize--north-east,.pdx-canvas-resize--north-west,.pdx-canvas-resize--south-east,.pdx-canvas-resize--south-west{width:18px;height:18px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north-east{top:-8px;right:-8px;cursor:nesw-resize}.pdx-canvas-resize--north-west{top:-8px;left:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-east{bottom:-8px;right:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-west{bottom:-8px;left:-8px;cursor:nesw-resize}.pdx-canvas-snap-preview{position:relative;align-self:stretch;border-radius:12px;pointer-events:none;z-index:0;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent),color-mix(in srgb,var(--md-sys-color-tertiary) 12%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 42%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 55%,transparent);animation:pdx-snap-preview-pulse .48s ease-out infinite alternate}.pdx-canvas-snap-preview:before,.pdx-canvas-snap-preview:after{content:\"\";position:absolute;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary) 82%,var(--md-sys-color-tertiary) 18%);opacity:.72}.pdx-canvas-snap-preview:before{inset:0 auto 0 0;width:3px}.pdx-canvas-snap-preview:after{inset:0 0 auto;height:3px}.pdx-canvas-snap-preview--invalid{background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-error) 18%,transparent),color-mix(in srgb,var(--md-sys-color-error-container) 22%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 58%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 40%,transparent)}.pdx-canvas-snap-preview--invalid:before,.pdx-canvas-snap-preview--invalid:after{background:color-mix(in srgb,var(--md-sys-color-error) 86%,var(--md-sys-color-error-container) 14%)}.pdx-canvas-resize:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:transparent;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 20%,transparent),var(--mat-elevation-level3)}.pdx-canvas-resize--north:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-horizontal)}.pdx-canvas-resize--east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-vertical)}.pdx-canvas-resize--north-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-sw)}.pdx-canvas-resize--north-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-west:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{transform:scale(1.08)}@keyframes pdx-snap-preview-pulse{0%{opacity:.72;transform:scale(.996)}to{opacity:1;transform:scale(1)}}.pdx-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.pdx-group{display:grid;gap:12px;grid-column:1 / -1;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 76%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 72%,transparent)}.pdx-group--hero{padding:16px;background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary-container) 42%,transparent),color-mix(in srgb,var(--md-sys-color-surface-container-low) 86%,transparent))}.pdx-group--rail{align-self:start}.pdx-group-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.pdx-group-title{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.pdx-group-content{display:grid;gap:12px}.pdx-group-content--stack{grid-template-columns:minmax(0,1fr)}.pdx-group-content--row{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.pdx-group-content--grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.pdx-group-tabs{display:grid;gap:12px}.pdx-tabs-header{display:flex;flex-wrap:wrap;gap:8px}.pdx-tab-chip{appearance:none;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface);border-radius:999px;padding:8px 12px;font:inherit;cursor:pointer}.pdx-tab-chip.active{border-color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 78%,transparent);color:var(--md-sys-color-on-primary-container)}.pdx-page-wrapper.editing .pdx-widget-settings{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: DynamicWidgetContextToolbarComponent, selector: "praxis-dynamic-widget-context-toolbar", inputs: ["toolbarLabel", "contextLabel", "contextTooltip", "showAssistant", "assistantLabel", "assistantTooltip", "showComponentSettings", "componentSettingsLabel", "componentSettingsTooltip", "showShellSettings", "shellSettingsLabel", "shellSettingsTooltip", "moreActionsLabel", "removeLabel"], outputs: ["assistant", "componentSettings", "shellSettings", "remove"] }, { kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }, { kind: "component", type: WidgetShellComponent, selector: "praxis-widget-shell", inputs: ["shell", "context", "dragSurfaceEnabled", "dragSurfaceLabel"], outputs: ["action", "dragSurfacePointerDown", "dragSurfaceKeydown"] }] });
|
|
33552
|
+
`, isInline: true, styles: [".pdx-page-wrapper{position:relative;display:block;background:var(--pdx-page-bg, transparent);color:var(--pdx-page-color, inherit)}.pdx-page{display:grid;gap:var(--pdx-page-gap, 12px);grid-template-columns:minmax(0,1fr)}.pdx-page--canvas{align-items:start;grid-auto-flow:dense}.pdx-page-wrapper.editing .pdx-page--canvas{padding-block-start:var(--pdx-canvas-context-toolbar-safe-area, 22px)}.pdx-page-settings{position:sticky;top:8px;z-index:2;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:inherit;border-radius:12px;width:36px;height:36px;margin-bottom:6px}.pdx-widget{position:relative;background:var(--pfx-surface, transparent);border-radius:6px;min-width:0;min-height:0}.pdx-widget--interactive{cursor:pointer}.pdx-widget--selected:before{content:\"\";position:absolute;inset:0;border:1px dashed color-mix(in srgb,var(--md-sys-color-primary) 34%,transparent);border-radius:14px;pointer-events:none;z-index:1;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent)}.pdx-widget--canvas{align-self:stretch;--pdx-resize-gradient-horizontal: linear-gradient( 90deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-vertical: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-se: linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-sw: linear-gradient( 225deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-widget--canvas:after{content:\"\";position:absolute;inset:0;padding:2px;border-radius:14px;background:var(--pdx-active-resize-gradient);opacity:0;pointer-events:none;transition:opacity .14s ease,filter .14s ease;filter:saturate(1.02) drop-shadow(0 0 5px color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude}.pdx-widget--canvas-selected:before,.pdx-widget--canvas-blocked:before{content:\"\";position:absolute;inset:0;border-radius:14px;pointer-events:none;z-index:1;transition:opacity .14s ease,box-shadow .14s ease,border-color .14s ease}.pdx-widget--canvas-blocked:before{border:1px solid color-mix(in srgb,var(--md-sys-color-error) 74%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 20%,transparent),0 10px 24px color-mix(in srgb,var(--md-sys-color-error) 12%,transparent)}.pdx-widget--canvas:has(.pdx-canvas-resize:hover):after,.pdx-widget--canvas:has(.pdx-canvas-resize:focus-visible):after{opacity:.82}.pdx-widget--canvas:has(.pdx-canvas-resize--north:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-horizontal)}.pdx-widget--canvas:has(.pdx-canvas-resize--east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-vertical)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-sw)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize{position:absolute;z-index:7;border:0;padding:0;margin:0;background:transparent;touch-action:none;cursor:pointer;opacity:0;pointer-events:none;transform:scale(.94);transition:opacity .14s ease,transform .14s ease,filter .14s ease;filter:saturate(.9)}.pdx-widget--canvas:hover .pdx-canvas-resize,.pdx-widget--canvas:focus-within .pdx-canvas-resize,.pdx-widget--canvas-selected .pdx-canvas-resize{opacity:.88;pointer-events:auto;transform:scale(1);filter:saturate(1)}.pdx-widget--canvas:has(.pdx-shell.expanded) .pdx-canvas-resize,.pdx-widget--canvas:has(.pdx-shell.fullscreen) .pdx-canvas-resize{opacity:0;pointer-events:none;transform:scale(.94)}.pdx-canvas-resize-grip{display:block;width:9px;height:9px;border-radius:999px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 42%,var(--md-sys-color-outline-variant) 58%);background:color-mix(in srgb,var(--md-sys-color-surface) 92%,var(--md-sys-color-primary) 8%);box-shadow:0 1px 4px color-mix(in srgb,var(--md-sys-color-shadow) 10%,transparent);transition:transform .14s ease,border-color .14s ease,background .14s ease,box-shadow .14s ease}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:color-mix(in srgb,var(--md-sys-color-primary) 58%,var(--md-sys-color-outline-variant) 42%);background:color-mix(in srgb,var(--md-sys-color-surface) 84%,var(--md-sys-color-primary) 16%);box-shadow:0 2px 7px color-mix(in srgb,var(--md-sys-color-primary) 14%,transparent);transform:scale(1.04)}.pdx-canvas-resize--north,.pdx-canvas-resize--south{left:50%;width:40px;height:18px;margin-left:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north{top:-8px;cursor:ns-resize}.pdx-canvas-resize--south{bottom:-8px;cursor:ns-resize}.pdx-canvas-resize--east,.pdx-canvas-resize--west{top:50%;width:18px;height:40px;margin-top:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--east{right:-8px;cursor:ew-resize}.pdx-canvas-resize--west{left:-8px;cursor:ew-resize}.pdx-canvas-resize--north-east,.pdx-canvas-resize--north-west,.pdx-canvas-resize--south-east,.pdx-canvas-resize--south-west{width:18px;height:18px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north-east{top:-8px;right:-8px;cursor:nesw-resize}.pdx-canvas-resize--north-west{top:-8px;left:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-east{bottom:-8px;right:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-west{bottom:-8px;left:-8px;cursor:nesw-resize}.pdx-canvas-snap-preview{position:relative;align-self:stretch;border-radius:12px;pointer-events:none;z-index:0;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent),color-mix(in srgb,var(--md-sys-color-tertiary) 12%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 42%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 55%,transparent);animation:pdx-snap-preview-pulse .48s ease-out infinite alternate}.pdx-canvas-snap-preview:before,.pdx-canvas-snap-preview:after{content:\"\";position:absolute;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary) 82%,var(--md-sys-color-tertiary) 18%);opacity:.72}.pdx-canvas-snap-preview:before{inset:0 auto 0 0;width:3px}.pdx-canvas-snap-preview:after{inset:0 0 auto;height:3px}.pdx-canvas-snap-preview--invalid{background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-error) 18%,transparent),color-mix(in srgb,var(--md-sys-color-error-container) 22%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 58%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 40%,transparent)}.pdx-canvas-snap-preview--invalid:before,.pdx-canvas-snap-preview--invalid:after{background:color-mix(in srgb,var(--md-sys-color-error) 86%,var(--md-sys-color-error-container) 14%)}.pdx-canvas-resize:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:transparent;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 20%,transparent),var(--mat-elevation-level3)}.pdx-canvas-resize--north:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-horizontal)}.pdx-canvas-resize--east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-vertical)}.pdx-canvas-resize--north-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-sw)}.pdx-canvas-resize--north-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-west:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{transform:scale(1.08)}@keyframes pdx-snap-preview-pulse{0%{opacity:.72;transform:scale(.996)}to{opacity:1;transform:scale(1)}}.pdx-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.pdx-group{display:grid;gap:12px;grid-column:1 / -1;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 76%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 72%,transparent)}.pdx-group--hero{padding:16px;background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary-container) 42%,transparent),color-mix(in srgb,var(--md-sys-color-surface-container-low) 86%,transparent))}.pdx-group--rail{align-self:start}.pdx-group-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.pdx-group-title{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.pdx-group-content{display:grid;gap:12px}.pdx-group-content--stack{grid-template-columns:minmax(0,1fr)}.pdx-group-content--row{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.pdx-group-content--grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.pdx-group-tabs{display:grid;gap:12px}.pdx-tabs-header{display:flex;flex-wrap:wrap;gap:8px}.pdx-tab-chip{appearance:none;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface);border-radius:999px;padding:8px 12px;font:inherit;cursor:pointer}.pdx-tab-chip.active{border-color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 78%,transparent);color:var(--md-sys-color-on-primary-container)}.pdx-page-wrapper.editing .pdx-widget-settings{opacity:1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: DynamicWidgetContextToolbarComponent, selector: "praxis-dynamic-widget-context-toolbar", inputs: ["toolbarLabel", "contextLabel", "contextTooltip", "showAssistant", "assistantLabel", "assistantTooltip", "showComponentSettings", "componentSettingsLabel", "componentSettingsTooltip", "showShellSettings", "shellSettingsLabel", "shellSettingsTooltip", "moreActionsLabel", "removeLabel"], outputs: ["assistant", "componentSettings", "shellSettings", "remove"] }, { kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }, { kind: "component", type: WidgetShellComponent, selector: "praxis-widget-shell", inputs: ["shell", "context", "dragSurfaceEnabled", "dragSurfaceLabel"], outputs: ["action", "dragSurfacePointerDown", "dragSurfaceKeydown"] }] });
|
|
32770
33553
|
}
|
|
32771
33554
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DynamicWidgetPageComponent, decorators: [{
|
|
32772
33555
|
type: Component,
|
|
@@ -32779,7 +33562,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
32779
33562
|
DynamicWidgetLoaderDirective,
|
|
32780
33563
|
WidgetShellComponent,
|
|
32781
33564
|
], providers: [providePraxisI18nConfig(DYNAMIC_WIDGET_PAGE_I18N_CONFIG)], template: `
|
|
32782
|
-
<div
|
|
33565
|
+
<div
|
|
33566
|
+
class="pdx-page-wrapper"
|
|
33567
|
+
[class.editing]="enableCustomization"
|
|
33568
|
+
[attr.data-theme-preset]="pageThemePresetId"
|
|
33569
|
+
[attr.data-density]="pageThemeDensity"
|
|
33570
|
+
[attr.data-motion]="pageThemeMotion"
|
|
33571
|
+
[ngStyle]="pageThemeTokenStyle"
|
|
33572
|
+
>
|
|
32783
33573
|
@if (enableCustomization && showPageSettingsButton) {
|
|
32784
33574
|
<button
|
|
32785
33575
|
class="pdx-page-settings"
|
|
@@ -32805,6 +33595,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
32805
33595
|
@for (w of widgets(); track w.key) {
|
|
32806
33596
|
<div
|
|
32807
33597
|
class="pdx-widget pdx-widget--canvas"
|
|
33598
|
+
[attr.data-widget-key]="w.key"
|
|
32808
33599
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
32809
33600
|
[class.pdx-widget--selected]="
|
|
32810
33601
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -32853,6 +33644,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
32853
33644
|
>
|
|
32854
33645
|
<ng-container
|
|
32855
33646
|
[dynamicWidgetLoader]="w.definition"
|
|
33647
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
32856
33648
|
[ownerWidgetKey]="w.key"
|
|
32857
33649
|
[context]="mergedContext"
|
|
32858
33650
|
[strictValidation]="strictValidation"
|
|
@@ -32941,6 +33733,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
32941
33733
|
@for (w of tab.widgets; track w.key) {
|
|
32942
33734
|
<div
|
|
32943
33735
|
class="pdx-widget"
|
|
33736
|
+
[attr.data-widget-key]="w.key"
|
|
32944
33737
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
32945
33738
|
[class.pdx-widget--selected]="
|
|
32946
33739
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -32957,6 +33750,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
32957
33750
|
>
|
|
32958
33751
|
<ng-container
|
|
32959
33752
|
[dynamicWidgetLoader]="w.definition"
|
|
33753
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
32960
33754
|
[ownerWidgetKey]="w.key"
|
|
32961
33755
|
[context]="mergedContext"
|
|
32962
33756
|
[strictValidation]="strictValidation"
|
|
@@ -33005,6 +33799,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
33005
33799
|
@for (w of group.widgets; track w.key) {
|
|
33006
33800
|
<div
|
|
33007
33801
|
class="pdx-widget"
|
|
33802
|
+
[attr.data-widget-key]="w.key"
|
|
33008
33803
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
33009
33804
|
[class.pdx-widget--selected]="
|
|
33010
33805
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -33021,6 +33816,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
33021
33816
|
>
|
|
33022
33817
|
<ng-container
|
|
33023
33818
|
[dynamicWidgetLoader]="w.definition"
|
|
33819
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
33024
33820
|
[ownerWidgetKey]="w.key"
|
|
33025
33821
|
[context]="mergedContext"
|
|
33026
33822
|
[strictValidation]="strictValidation"
|
|
@@ -33061,6 +33857,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
33061
33857
|
@for (w of widgets(); track w.key) {
|
|
33062
33858
|
<div
|
|
33063
33859
|
class="pdx-widget"
|
|
33860
|
+
[attr.data-widget-key]="w.key"
|
|
33064
33861
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
33065
33862
|
[class.pdx-widget--selected]="
|
|
33066
33863
|
enableCustomization && isWidgetSelected(w.key)
|
|
@@ -33077,6 +33874,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
33077
33874
|
>
|
|
33078
33875
|
<ng-container
|
|
33079
33876
|
[dynamicWidgetLoader]="w.definition"
|
|
33877
|
+
#widgetLoader="dynamicWidgetLoader"
|
|
33080
33878
|
[ownerWidgetKey]="w.key"
|
|
33081
33879
|
[context]="mergedContext"
|
|
33082
33880
|
[strictValidation]="strictValidation"
|
|
@@ -33117,7 +33915,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
33117
33915
|
</div>
|
|
33118
33916
|
}
|
|
33119
33917
|
</div>
|
|
33120
|
-
`, styles: [".pdx-page-wrapper{position:relative;display:block}.pdx-page{display:grid;gap:12px;grid-template-columns:minmax(0,1fr)}.pdx-page--canvas{align-items:start;grid-auto-flow:dense}.pdx-page-settings{position:sticky;top:8px;z-index:2;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:inherit;border-radius:12px;width:36px;height:36px;margin-bottom:6px}.pdx-widget{position:relative;background:var(--pfx-surface, transparent);border-radius:6px;min-width:0;min-height:0}.pdx-widget--interactive{cursor:pointer}.pdx-widget--selected:before{content:\"\";position:absolute;inset:0;border:1px dashed color-mix(in srgb,var(--md-sys-color-primary) 34%,transparent);border-radius:14px;pointer-events:none;z-index:1;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent)}.pdx-widget--canvas{align-self:stretch;--pdx-resize-gradient-horizontal: linear-gradient( 90deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-vertical: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-se: linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-sw: linear-gradient( 225deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-widget--canvas:after{content:\"\";position:absolute;inset:0;padding:2px;border-radius:14px;background:var(--pdx-active-resize-gradient);opacity:0;pointer-events:none;transition:opacity .14s ease,filter .14s ease;filter:saturate(1.02) drop-shadow(0 0 5px color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude}.pdx-widget--canvas-selected:before,.pdx-widget--canvas-blocked:before{content:\"\";position:absolute;inset:0;border-radius:14px;pointer-events:none;z-index:1;transition:opacity .14s ease,box-shadow .14s ease,border-color .14s ease}.pdx-widget--canvas-blocked:before{border:1px solid color-mix(in srgb,var(--md-sys-color-error) 74%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 20%,transparent),0 10px 24px color-mix(in srgb,var(--md-sys-color-error) 12%,transparent)}.pdx-widget--canvas:has(.pdx-canvas-resize:hover):after,.pdx-widget--canvas:has(.pdx-canvas-resize:focus-visible):after{opacity:.82}.pdx-widget--canvas:has(.pdx-canvas-resize--north:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-horizontal)}.pdx-widget--canvas:has(.pdx-canvas-resize--east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-vertical)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-sw)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize{position:absolute;z-index:7;border:0;padding:0;margin:0;background:transparent;touch-action:none;cursor:pointer;opacity:0;pointer-events:none;transform:scale(.94);transition:opacity .14s ease,transform .14s ease,filter .14s ease;filter:saturate(.9)}.pdx-widget--canvas:hover .pdx-canvas-resize,.pdx-widget--canvas:focus-within .pdx-canvas-resize,.pdx-widget--canvas-selected .pdx-canvas-resize{opacity:.88;pointer-events:auto;transform:scale(1);filter:saturate(1)}.pdx-widget--canvas:has(.pdx-shell.expanded) .pdx-canvas-resize,.pdx-widget--canvas:has(.pdx-shell.fullscreen) .pdx-canvas-resize{opacity:0;pointer-events:none;transform:scale(.94)}.pdx-canvas-resize-grip{display:block;width:9px;height:9px;border-radius:999px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 42%,var(--md-sys-color-outline-variant) 58%);background:color-mix(in srgb,var(--md-sys-color-surface) 92%,var(--md-sys-color-primary) 8%);box-shadow:0 1px 4px color-mix(in srgb,var(--md-sys-color-shadow) 10%,transparent);transition:transform .14s ease,border-color .14s ease,background .14s ease,box-shadow .14s ease}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:color-mix(in srgb,var(--md-sys-color-primary) 58%,var(--md-sys-color-outline-variant) 42%);background:color-mix(in srgb,var(--md-sys-color-surface) 84%,var(--md-sys-color-primary) 16%);box-shadow:0 2px 7px color-mix(in srgb,var(--md-sys-color-primary) 14%,transparent);transform:scale(1.04)}.pdx-canvas-resize--north,.pdx-canvas-resize--south{left:50%;width:40px;height:18px;margin-left:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north{top:-8px;cursor:ns-resize}.pdx-canvas-resize--south{bottom:-8px;cursor:ns-resize}.pdx-canvas-resize--east,.pdx-canvas-resize--west{top:50%;width:18px;height:40px;margin-top:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--east{right:-8px;cursor:ew-resize}.pdx-canvas-resize--west{left:-8px;cursor:ew-resize}.pdx-canvas-resize--north-east,.pdx-canvas-resize--north-west,.pdx-canvas-resize--south-east,.pdx-canvas-resize--south-west{width:18px;height:18px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north-east{top:-8px;right:-8px;cursor:nesw-resize}.pdx-canvas-resize--north-west{top:-8px;left:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-east{bottom:-8px;right:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-west{bottom:-8px;left:-8px;cursor:nesw-resize}.pdx-canvas-snap-preview{position:relative;align-self:stretch;border-radius:12px;pointer-events:none;z-index:0;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent),color-mix(in srgb,var(--md-sys-color-tertiary) 12%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 42%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 55%,transparent);animation:pdx-snap-preview-pulse .48s ease-out infinite alternate}.pdx-canvas-snap-preview:before,.pdx-canvas-snap-preview:after{content:\"\";position:absolute;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary) 82%,var(--md-sys-color-tertiary) 18%);opacity:.72}.pdx-canvas-snap-preview:before{inset:0 auto 0 0;width:3px}.pdx-canvas-snap-preview:after{inset:0 0 auto;height:3px}.pdx-canvas-snap-preview--invalid{background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-error) 18%,transparent),color-mix(in srgb,var(--md-sys-color-error-container) 22%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 58%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 40%,transparent)}.pdx-canvas-snap-preview--invalid:before,.pdx-canvas-snap-preview--invalid:after{background:color-mix(in srgb,var(--md-sys-color-error) 86%,var(--md-sys-color-error-container) 14%)}.pdx-canvas-resize:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:transparent;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 20%,transparent),var(--mat-elevation-level3)}.pdx-canvas-resize--north:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-horizontal)}.pdx-canvas-resize--east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-vertical)}.pdx-canvas-resize--north-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-sw)}.pdx-canvas-resize--north-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-west:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{transform:scale(1.08)}@keyframes pdx-snap-preview-pulse{0%{opacity:.72;transform:scale(.996)}to{opacity:1;transform:scale(1)}}.pdx-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.pdx-group{display:grid;gap:12px;grid-column:1 / -1;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 76%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 72%,transparent)}.pdx-group--hero{padding:16px;background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary-container) 42%,transparent),color-mix(in srgb,var(--md-sys-color-surface-container-low) 86%,transparent))}.pdx-group--rail{align-self:start}.pdx-group-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.pdx-group-title{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.pdx-group-content{display:grid;gap:12px}.pdx-group-content--stack{grid-template-columns:minmax(0,1fr)}.pdx-group-content--row{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.pdx-group-content--grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.pdx-group-tabs{display:grid;gap:12px}.pdx-tabs-header{display:flex;flex-wrap:wrap;gap:8px}.pdx-tab-chip{appearance:none;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface);border-radius:999px;padding:8px 12px;font:inherit;cursor:pointer}.pdx-tab-chip.active{border-color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 78%,transparent);color:var(--md-sys-color-on-primary-container)}.pdx-page-wrapper.editing .pdx-widget-settings{opacity:1}\n"] }]
|
|
33918
|
+
`, styles: [".pdx-page-wrapper{position:relative;display:block;background:var(--pdx-page-bg, transparent);color:var(--pdx-page-color, inherit)}.pdx-page{display:grid;gap:var(--pdx-page-gap, 12px);grid-template-columns:minmax(0,1fr)}.pdx-page--canvas{align-items:start;grid-auto-flow:dense}.pdx-page-wrapper.editing .pdx-page--canvas{padding-block-start:var(--pdx-canvas-context-toolbar-safe-area, 22px)}.pdx-page-settings{position:sticky;top:8px;z-index:2;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-low);color:inherit;border-radius:12px;width:36px;height:36px;margin-bottom:6px}.pdx-widget{position:relative;background:var(--pfx-surface, transparent);border-radius:6px;min-width:0;min-height:0}.pdx-widget--interactive{cursor:pointer}.pdx-widget--selected:before{content:\"\";position:absolute;inset:0;border:1px dashed color-mix(in srgb,var(--md-sys-color-primary) 34%,transparent);border-radius:14px;pointer-events:none;z-index:1;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent),0 8px 20px color-mix(in srgb,var(--md-sys-color-primary) 6%,transparent)}.pdx-widget--canvas{align-self:stretch;--pdx-resize-gradient-horizontal: linear-gradient( 90deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-vertical: linear-gradient( 180deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-se: linear-gradient( 135deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-resize-gradient-diagonal-sw: linear-gradient( 225deg, color-mix(in srgb, var(--md-sys-color-primary) 94%, white 6%), color-mix(in srgb, var(--md-sys-color-tertiary) 90%, white 10%), color-mix(in srgb, var(--md-sys-color-secondary) 88%, white 12%) );--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-widget--canvas:after{content:\"\";position:absolute;inset:0;padding:2px;border-radius:14px;background:var(--pdx-active-resize-gradient);opacity:0;pointer-events:none;transition:opacity .14s ease,filter .14s ease;filter:saturate(1.02) drop-shadow(0 0 5px color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent));-webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);-webkit-mask-composite:xor;mask-composite:exclude}.pdx-widget--canvas-selected:before,.pdx-widget--canvas-blocked:before{content:\"\";position:absolute;inset:0;border-radius:14px;pointer-events:none;z-index:1;transition:opacity .14s ease,box-shadow .14s ease,border-color .14s ease}.pdx-widget--canvas-blocked:before{border:1px solid color-mix(in srgb,var(--md-sys-color-error) 74%,transparent);box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 20%,transparent),0 10px 24px color-mix(in srgb,var(--md-sys-color-error) 12%,transparent)}.pdx-widget--canvas:has(.pdx-canvas-resize:hover):after,.pdx-widget--canvas:has(.pdx-canvas-resize:focus-visible):after{opacity:.82}.pdx-widget--canvas:has(.pdx-canvas-resize--north:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-horizontal)}.pdx-widget--canvas:has(.pdx-canvas-resize--east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-vertical)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-east:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-west:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-sw)}.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--north-west:focus-visible),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:hover),.pdx-widget--canvas:has(.pdx-canvas-resize--south-east:focus-visible){--pdx-active-resize-gradient: var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize{position:absolute;z-index:7;border:0;padding:0;margin:0;background:transparent;touch-action:none;cursor:pointer;opacity:0;pointer-events:none;transform:scale(.94);transition:opacity .14s ease,transform .14s ease,filter .14s ease;filter:saturate(.9)}.pdx-widget--canvas:hover .pdx-canvas-resize,.pdx-widget--canvas:focus-within .pdx-canvas-resize,.pdx-widget--canvas-selected .pdx-canvas-resize{opacity:.88;pointer-events:auto;transform:scale(1);filter:saturate(1)}.pdx-widget--canvas:has(.pdx-shell.expanded) .pdx-canvas-resize,.pdx-widget--canvas:has(.pdx-shell.fullscreen) .pdx-canvas-resize{opacity:0;pointer-events:none;transform:scale(.94)}.pdx-canvas-resize-grip{display:block;width:9px;height:9px;border-radius:999px;border:1px solid color-mix(in srgb,var(--md-sys-color-primary) 42%,var(--md-sys-color-outline-variant) 58%);background:color-mix(in srgb,var(--md-sys-color-surface) 92%,var(--md-sys-color-primary) 8%);box-shadow:0 1px 4px color-mix(in srgb,var(--md-sys-color-shadow) 10%,transparent);transition:transform .14s ease,border-color .14s ease,background .14s ease,box-shadow .14s ease}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:color-mix(in srgb,var(--md-sys-color-primary) 58%,var(--md-sys-color-outline-variant) 42%);background:color-mix(in srgb,var(--md-sys-color-surface) 84%,var(--md-sys-color-primary) 16%);box-shadow:0 2px 7px color-mix(in srgb,var(--md-sys-color-primary) 14%,transparent);transform:scale(1.04)}.pdx-canvas-resize--north,.pdx-canvas-resize--south{left:50%;width:40px;height:18px;margin-left:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north{top:-8px;cursor:ns-resize}.pdx-canvas-resize--south{bottom:-8px;cursor:ns-resize}.pdx-canvas-resize--east,.pdx-canvas-resize--west{top:50%;width:18px;height:40px;margin-top:-20px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--east{right:-8px;cursor:ew-resize}.pdx-canvas-resize--west{left:-8px;cursor:ew-resize}.pdx-canvas-resize--north-east,.pdx-canvas-resize--north-west,.pdx-canvas-resize--south-east,.pdx-canvas-resize--south-west{width:18px;height:18px;display:flex;align-items:center;justify-content:center}.pdx-canvas-resize--north-east{top:-8px;right:-8px;cursor:nesw-resize}.pdx-canvas-resize--north-west{top:-8px;left:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-east{bottom:-8px;right:-8px;cursor:nwse-resize}.pdx-canvas-resize--south-west{bottom:-8px;left:-8px;cursor:nesw-resize}.pdx-canvas-snap-preview{position:relative;align-self:stretch;border-radius:12px;pointer-events:none;z-index:0;background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-primary) 10%,transparent),color-mix(in srgb,var(--md-sys-color-tertiary) 12%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 42%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 55%,transparent);animation:pdx-snap-preview-pulse .48s ease-out infinite alternate}.pdx-canvas-snap-preview:before,.pdx-canvas-snap-preview:after{content:\"\";position:absolute;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary) 82%,var(--md-sys-color-tertiary) 18%);opacity:.72}.pdx-canvas-snap-preview:before{inset:0 auto 0 0;width:3px}.pdx-canvas-snap-preview:after{inset:0 0 auto;height:3px}.pdx-canvas-snap-preview--invalid{background:linear-gradient(135deg,color-mix(in srgb,var(--md-sys-color-error) 18%,transparent),color-mix(in srgb,var(--md-sys-color-error-container) 22%,transparent));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--md-sys-color-error) 58%,transparent),inset 0 0 0 2px color-mix(in srgb,var(--md-sys-color-surface) 40%,transparent)}.pdx-canvas-snap-preview--invalid:before,.pdx-canvas-snap-preview--invalid:after{background:color-mix(in srgb,var(--md-sys-color-error) 86%,var(--md-sys-color-error-container) 14%)}.pdx-canvas-resize:focus-visible{outline:2px solid var(--md-sys-color-primary);outline-offset:2px}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{border-color:transparent;box-shadow:0 0 0 1px color-mix(in srgb,var(--md-sys-color-primary) 20%,transparent),var(--mat-elevation-level3)}.pdx-canvas-resize--north:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-horizontal)}.pdx-canvas-resize--east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-vertical)}.pdx-canvas-resize--north-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-east:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-west:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-sw)}.pdx-canvas-resize--north-west:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--north-west:focus-visible .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:hover .pdx-canvas-resize-grip,.pdx-canvas-resize--south-east:focus-visible .pdx-canvas-resize-grip{background:var(--pdx-resize-gradient-diagonal-se)}.pdx-canvas-resize:hover .pdx-canvas-resize-grip,.pdx-canvas-resize:focus-visible .pdx-canvas-resize-grip{transform:scale(1.08)}@keyframes pdx-snap-preview-pulse{0%{opacity:.72;transform:scale(.996)}to{opacity:1;transform:scale(1)}}.pdx-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.pdx-group{display:grid;gap:12px;grid-column:1 / -1;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low) 76%,transparent);border:1px solid color-mix(in srgb,var(--md-sys-color-outline-variant) 72%,transparent)}.pdx-group--hero{padding:16px;background:linear-gradient(180deg,color-mix(in srgb,var(--md-sys-color-primary-container) 42%,transparent),color-mix(in srgb,var(--md-sys-color-surface-container-low) 86%,transparent))}.pdx-group--rail{align-self:start}.pdx-group-header{display:flex;align-items:center;justify-content:space-between;gap:12px}.pdx-group-title{font-size:.95rem;font-weight:600;color:var(--md-sys-color-on-surface)}.pdx-group-content{display:grid;gap:12px}.pdx-group-content--stack{grid-template-columns:minmax(0,1fr)}.pdx-group-content--row{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.pdx-group-content--grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.pdx-group-tabs{display:grid;gap:12px}.pdx-tabs-header{display:flex;flex-wrap:wrap;gap:8px}.pdx-tab-chip{appearance:none;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface-container-lowest);color:var(--md-sys-color-on-surface);border-radius:999px;padding:8px 12px;font:inherit;cursor:pointer}.pdx-tab-chip.active{border-color:var(--md-sys-color-primary);background:color-mix(in srgb,var(--md-sys-color-primary-container) 78%,transparent);color:var(--md-sys-color-on-primary-container)}.pdx-page-wrapper.editing .pdx-widget-settings{opacity:1}\n"] }]
|
|
33121
33919
|
}], ctorParameters: () => [], propDecorators: { pageCanvasHost: [{
|
|
33122
33920
|
type: ViewChild,
|
|
33123
33921
|
args: ['pageCanvasHost']
|
|
@@ -33153,6 +33951,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
33153
33951
|
type: Output
|
|
33154
33952
|
}], widgetDiagnosticsChange: [{
|
|
33155
33953
|
type: Output
|
|
33954
|
+
}], widgetLoaders: [{
|
|
33955
|
+
type: ViewChildren,
|
|
33956
|
+
args: ['widgetLoader']
|
|
33156
33957
|
}], onWindowResize: [{
|
|
33157
33958
|
type: HostListener,
|
|
33158
33959
|
args: ['window:resize']
|
|
@@ -33210,10 +34011,13 @@ function providePraxisDynamicPageMetadata() {
|
|
|
33210
34011
|
}
|
|
33211
34012
|
|
|
33212
34013
|
class PraxisSurfaceHostComponent {
|
|
34014
|
+
globalActions = inject(GlobalActionService);
|
|
33213
34015
|
title;
|
|
33214
34016
|
subtitle;
|
|
33215
34017
|
icon;
|
|
34018
|
+
beforeWidget;
|
|
33216
34019
|
widget;
|
|
34020
|
+
afterWidget;
|
|
33217
34021
|
context = null;
|
|
33218
34022
|
strictValidation = true;
|
|
33219
34023
|
/**
|
|
@@ -33221,13 +34025,21 @@ class PraxisSurfaceHostComponent {
|
|
|
33221
34025
|
* modal/drawer hosts. Inline consumers may opt into rendering it again.
|
|
33222
34026
|
*/
|
|
33223
34027
|
renderTitleInsideBody = false;
|
|
33224
|
-
|
|
34028
|
+
widgetEvent = new EventEmitter();
|
|
34029
|
+
beforeWidgetLoader;
|
|
34030
|
+
mainWidgetLoader;
|
|
34031
|
+
afterWidgetLoader;
|
|
33225
34032
|
renderQueued = false;
|
|
34033
|
+
beforeWidgetKey = 'surface.before';
|
|
34034
|
+
mainWidgetKey = 'surface.main';
|
|
34035
|
+
afterWidgetKey = 'surface.after';
|
|
33226
34036
|
ngAfterViewInit() {
|
|
33227
34037
|
this.scheduleWidgetRender();
|
|
33228
34038
|
}
|
|
33229
34039
|
ngOnChanges(changes) {
|
|
33230
34040
|
if (changes['widget']
|
|
34041
|
+
|| changes['beforeWidget']
|
|
34042
|
+
|| changes['afterWidget']
|
|
33231
34043
|
|| changes['context']
|
|
33232
34044
|
|| changes['strictValidation']) {
|
|
33233
34045
|
this.scheduleWidgetRender();
|
|
@@ -33239,17 +34051,101 @@ class PraxisSurfaceHostComponent {
|
|
|
33239
34051
|
this.renderQueued = true;
|
|
33240
34052
|
queueMicrotask(() => {
|
|
33241
34053
|
this.renderQueued = false;
|
|
33242
|
-
|
|
33243
|
-
|
|
33244
|
-
|
|
33245
|
-
|
|
33246
|
-
|
|
33247
|
-
|
|
33248
|
-
|
|
34054
|
+
this.renderLoader(this.beforeWidgetLoader, this.beforeWidget, this.beforeWidgetKey);
|
|
34055
|
+
this.renderLoader(this.mainWidgetLoader, this.widget, this.mainWidgetKey);
|
|
34056
|
+
this.renderLoader(this.afterWidgetLoader, this.afterWidget, this.afterWidgetKey);
|
|
34057
|
+
});
|
|
34058
|
+
}
|
|
34059
|
+
renderLoader(loader, widget, widgetKey) {
|
|
34060
|
+
if (!loader)
|
|
34061
|
+
return;
|
|
34062
|
+
loader.widget = this.enrichWidget(widget, widgetKey);
|
|
34063
|
+
loader.ownerWidgetKey = widgetKey;
|
|
34064
|
+
loader.context = this.context;
|
|
34065
|
+
loader.strictValidation = this.strictValidation;
|
|
34066
|
+
loader.renderNow();
|
|
34067
|
+
}
|
|
34068
|
+
enrichWidget(widget, widgetKey) {
|
|
34069
|
+
if (!widget || widget.id !== 'praxis-rich-content') {
|
|
34070
|
+
return widget;
|
|
34071
|
+
}
|
|
34072
|
+
return {
|
|
34073
|
+
...widget,
|
|
34074
|
+
inputs: {
|
|
34075
|
+
...(widget.inputs || {}),
|
|
34076
|
+
hostCapabilities: this.buildRichContentHostCapabilities(widgetKey, widget.inputs?.['context']),
|
|
34077
|
+
},
|
|
34078
|
+
};
|
|
34079
|
+
}
|
|
34080
|
+
buildRichContentHostCapabilities(widgetKey, widgetContext) {
|
|
34081
|
+
return {
|
|
34082
|
+
dispatchAction: (actionId, payload) => this.dispatchRichContentAction(widgetKey, actionId, payload, widgetContext),
|
|
34083
|
+
isActionAvailable: (actionId) => this.isRichContentActionAvailable(actionId),
|
|
34084
|
+
hasCapability: (capabilityId) => this.hasRichContentCapability(capabilityId),
|
|
34085
|
+
};
|
|
34086
|
+
}
|
|
34087
|
+
dispatchRichContentAction(widgetKey, actionId, payload, widgetContext) {
|
|
34088
|
+
if (!actionId) {
|
|
34089
|
+
return;
|
|
34090
|
+
}
|
|
34091
|
+
if (this.globalActions.has(actionId)) {
|
|
34092
|
+
void this.globalActions.execute(actionId, payload, {
|
|
34093
|
+
sourceId: widgetKey,
|
|
34094
|
+
widgetKey,
|
|
34095
|
+
payload: {
|
|
34096
|
+
widgetKey,
|
|
34097
|
+
actionId,
|
|
34098
|
+
payload,
|
|
34099
|
+
surfaceContext: this.context,
|
|
34100
|
+
richContentContext: widgetContext,
|
|
34101
|
+
},
|
|
34102
|
+
runtime: {
|
|
34103
|
+
widgetContext,
|
|
34104
|
+
state: this.context,
|
|
34105
|
+
},
|
|
34106
|
+
meta: {
|
|
34107
|
+
origin: 'surface.rich-content',
|
|
34108
|
+
componentId: 'praxis-surface-host',
|
|
34109
|
+
},
|
|
34110
|
+
});
|
|
34111
|
+
return;
|
|
34112
|
+
}
|
|
34113
|
+
this.widgetEvent.emit({
|
|
34114
|
+
ownerWidgetKey: widgetKey,
|
|
34115
|
+
sourceComponentId: 'praxis-rich-content',
|
|
34116
|
+
output: 'customAction',
|
|
34117
|
+
payload: {
|
|
34118
|
+
actionId,
|
|
34119
|
+
payload,
|
|
34120
|
+
globalAction: {
|
|
34121
|
+
actionId,
|
|
34122
|
+
payload,
|
|
34123
|
+
},
|
|
34124
|
+
},
|
|
34125
|
+
});
|
|
34126
|
+
}
|
|
34127
|
+
isRichContentActionAvailable(actionId) {
|
|
34128
|
+
return !!actionId;
|
|
34129
|
+
}
|
|
34130
|
+
hasRichContentCapability(capabilityId) {
|
|
34131
|
+
switch (capabilityId) {
|
|
34132
|
+
case 'surface.host':
|
|
34133
|
+
case 'surface.rich-content.actions':
|
|
34134
|
+
return true;
|
|
34135
|
+
case 'surface.context':
|
|
34136
|
+
return !!this.context;
|
|
34137
|
+
default:
|
|
34138
|
+
return false;
|
|
34139
|
+
}
|
|
34140
|
+
}
|
|
34141
|
+
onSlotWidgetEvent(ownerWidgetKey, event) {
|
|
34142
|
+
this.widgetEvent.emit({
|
|
34143
|
+
...event,
|
|
34144
|
+
ownerWidgetKey: event.ownerWidgetKey || ownerWidgetKey,
|
|
33249
34145
|
});
|
|
33250
34146
|
}
|
|
33251
34147
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisSurfaceHostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
33252
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", widget: "widget", context: "context", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, viewQueries: [{ propertyName: "
|
|
34148
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: PraxisSurfaceHostComponent, isStandalone: true, selector: "praxis-surface-host", inputs: { title: "title", subtitle: "subtitle", icon: "icon", beforeWidget: "beforeWidget", widget: "widget", afterWidget: "afterWidget", context: "context", strictValidation: "strictValidation", renderTitleInsideBody: "renderTitleInsideBody" }, outputs: { widgetEvent: "widgetEvent" }, viewQueries: [{ propertyName: "beforeWidgetLoader", first: true, predicate: ["beforeWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "mainWidgetLoader", first: true, predicate: ["mainWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }, { propertyName: "afterWidgetLoader", first: true, predicate: ["afterWidgetLoader"], descendants: true, read: DynamicWidgetLoaderDirective }], usesOnChanges: true, ngImport: i0, template: `
|
|
33253
34149
|
<div class="pdx-surface-host">
|
|
33254
34150
|
@if (subtitle || (title && renderTitleInsideBody)) {
|
|
33255
34151
|
<header class="pdx-surface-host__header">
|
|
@@ -33268,16 +34164,45 @@ class PraxisSurfaceHostComponent {
|
|
|
33268
34164
|
}
|
|
33269
34165
|
|
|
33270
34166
|
<section class="pdx-surface-host__body">
|
|
34167
|
+
@if (beforeWidget) {
|
|
34168
|
+
<div class="pdx-surface-host__slot pdx-surface-host__slot--before">
|
|
34169
|
+
<ng-container
|
|
34170
|
+
#beforeWidgetLoader
|
|
34171
|
+
[dynamicWidgetLoader]="beforeWidget"
|
|
34172
|
+
[ownerWidgetKey]="beforeWidgetKey"
|
|
34173
|
+
[context]="context"
|
|
34174
|
+
[strictValidation]="strictValidation"
|
|
34175
|
+
(widgetEvent)="onSlotWidgetEvent(beforeWidgetKey, $event)"
|
|
34176
|
+
></ng-container>
|
|
34177
|
+
</div>
|
|
34178
|
+
}
|
|
34179
|
+
|
|
33271
34180
|
@if (widget) {
|
|
33272
34181
|
<ng-container
|
|
34182
|
+
#mainWidgetLoader
|
|
33273
34183
|
[dynamicWidgetLoader]="widget"
|
|
34184
|
+
[ownerWidgetKey]="mainWidgetKey"
|
|
33274
34185
|
[context]="context"
|
|
33275
34186
|
[strictValidation]="strictValidation"
|
|
34187
|
+
(widgetEvent)="onSlotWidgetEvent(mainWidgetKey, $event)"
|
|
33276
34188
|
></ng-container>
|
|
33277
34189
|
}
|
|
34190
|
+
|
|
34191
|
+
@if (afterWidget) {
|
|
34192
|
+
<div class="pdx-surface-host__slot pdx-surface-host__slot--after">
|
|
34193
|
+
<ng-container
|
|
34194
|
+
#afterWidgetLoader
|
|
34195
|
+
[dynamicWidgetLoader]="afterWidget"
|
|
34196
|
+
[ownerWidgetKey]="afterWidgetKey"
|
|
34197
|
+
[context]="context"
|
|
34198
|
+
[strictValidation]="strictValidation"
|
|
34199
|
+
(widgetEvent)="onSlotWidgetEvent(afterWidgetKey, $event)"
|
|
34200
|
+
></ng-container>
|
|
34201
|
+
</div>
|
|
34202
|
+
}
|
|
33278
34203
|
</section>
|
|
33279
34204
|
</div>
|
|
33280
|
-
`, isInline: true, styles: [":host{display:block;min-width:0}.pdx-surface-host{display:grid;gap:16px;min-width:0}.pdx-surface-host__header{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}.pdx-surface-host__icon{font-size:20px;line-height:20px;color:var(--md-sys-color-primary, currentColor)}.pdx-surface-host__copy{display:grid;gap:4px;min-width:0}.pdx-surface-host__title,.pdx-surface-host__subtitle{margin:0}.pdx-surface-host__title{font-size:1rem;font-weight:600}.pdx-surface-host__subtitle{color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .64));font-size:.9375rem}.pdx-surface-host__body{min-width:0}\n"], dependencies: [{ kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }] });
|
|
34205
|
+
`, isInline: true, styles: [":host{display:block;min-width:0}.pdx-surface-host{display:grid;gap:16px;min-width:0}.pdx-surface-host__header{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}.pdx-surface-host__icon{font-size:20px;line-height:20px;color:var(--md-sys-color-primary, currentColor)}.pdx-surface-host__copy{display:grid;gap:4px;min-width:0}.pdx-surface-host__title,.pdx-surface-host__subtitle{margin:0}.pdx-surface-host__title{font-size:1rem;font-weight:600}.pdx-surface-host__subtitle{color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .64));font-size:.9375rem}.pdx-surface-host__body{display:grid;gap:16px;min-width:0}.pdx-surface-host__slot{min-width:0}\n"], dependencies: [{ kind: "directive", type: DynamicWidgetLoaderDirective, selector: "[dynamicWidgetLoader]", inputs: ["dynamicWidgetLoader", "ownerWidgetKey", "context", "strictValidation", "autoWireOutputs"], outputs: ["widgetEvent", "widgetDiagnostic"], exportAs: ["dynamicWidgetLoader"] }] });
|
|
33281
34206
|
}
|
|
33282
34207
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisSurfaceHostComponent, decorators: [{
|
|
33283
34208
|
type: Component,
|
|
@@ -33300,33 +34225,74 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
33300
34225
|
}
|
|
33301
34226
|
|
|
33302
34227
|
<section class="pdx-surface-host__body">
|
|
34228
|
+
@if (beforeWidget) {
|
|
34229
|
+
<div class="pdx-surface-host__slot pdx-surface-host__slot--before">
|
|
34230
|
+
<ng-container
|
|
34231
|
+
#beforeWidgetLoader
|
|
34232
|
+
[dynamicWidgetLoader]="beforeWidget"
|
|
34233
|
+
[ownerWidgetKey]="beforeWidgetKey"
|
|
34234
|
+
[context]="context"
|
|
34235
|
+
[strictValidation]="strictValidation"
|
|
34236
|
+
(widgetEvent)="onSlotWidgetEvent(beforeWidgetKey, $event)"
|
|
34237
|
+
></ng-container>
|
|
34238
|
+
</div>
|
|
34239
|
+
}
|
|
34240
|
+
|
|
33303
34241
|
@if (widget) {
|
|
33304
34242
|
<ng-container
|
|
34243
|
+
#mainWidgetLoader
|
|
33305
34244
|
[dynamicWidgetLoader]="widget"
|
|
34245
|
+
[ownerWidgetKey]="mainWidgetKey"
|
|
33306
34246
|
[context]="context"
|
|
33307
34247
|
[strictValidation]="strictValidation"
|
|
34248
|
+
(widgetEvent)="onSlotWidgetEvent(mainWidgetKey, $event)"
|
|
33308
34249
|
></ng-container>
|
|
33309
34250
|
}
|
|
34251
|
+
|
|
34252
|
+
@if (afterWidget) {
|
|
34253
|
+
<div class="pdx-surface-host__slot pdx-surface-host__slot--after">
|
|
34254
|
+
<ng-container
|
|
34255
|
+
#afterWidgetLoader
|
|
34256
|
+
[dynamicWidgetLoader]="afterWidget"
|
|
34257
|
+
[ownerWidgetKey]="afterWidgetKey"
|
|
34258
|
+
[context]="context"
|
|
34259
|
+
[strictValidation]="strictValidation"
|
|
34260
|
+
(widgetEvent)="onSlotWidgetEvent(afterWidgetKey, $event)"
|
|
34261
|
+
></ng-container>
|
|
34262
|
+
</div>
|
|
34263
|
+
}
|
|
33310
34264
|
</section>
|
|
33311
34265
|
</div>
|
|
33312
|
-
`, styles: [":host{display:block;min-width:0}.pdx-surface-host{display:grid;gap:16px;min-width:0}.pdx-surface-host__header{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}.pdx-surface-host__icon{font-size:20px;line-height:20px;color:var(--md-sys-color-primary, currentColor)}.pdx-surface-host__copy{display:grid;gap:4px;min-width:0}.pdx-surface-host__title,.pdx-surface-host__subtitle{margin:0}.pdx-surface-host__title{font-size:1rem;font-weight:600}.pdx-surface-host__subtitle{color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .64));font-size:.9375rem}.pdx-surface-host__body{min-width:0}\n"] }]
|
|
34266
|
+
`, styles: [":host{display:block;min-width:0}.pdx-surface-host{display:grid;gap:16px;min-width:0}.pdx-surface-host__header{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}.pdx-surface-host__icon{font-size:20px;line-height:20px;color:var(--md-sys-color-primary, currentColor)}.pdx-surface-host__copy{display:grid;gap:4px;min-width:0}.pdx-surface-host__title,.pdx-surface-host__subtitle{margin:0}.pdx-surface-host__title{font-size:1rem;font-weight:600}.pdx-surface-host__subtitle{color:var(--md-sys-color-on-surface-variant, rgba(0, 0, 0, .64));font-size:.9375rem}.pdx-surface-host__body{display:grid;gap:16px;min-width:0}.pdx-surface-host__slot{min-width:0}\n"] }]
|
|
33313
34267
|
}], propDecorators: { title: [{
|
|
33314
34268
|
type: Input
|
|
33315
34269
|
}], subtitle: [{
|
|
33316
34270
|
type: Input
|
|
33317
34271
|
}], icon: [{
|
|
33318
34272
|
type: Input
|
|
34273
|
+
}], beforeWidget: [{
|
|
34274
|
+
type: Input
|
|
33319
34275
|
}], widget: [{
|
|
33320
34276
|
type: Input
|
|
34277
|
+
}], afterWidget: [{
|
|
34278
|
+
type: Input
|
|
33321
34279
|
}], context: [{
|
|
33322
34280
|
type: Input
|
|
33323
34281
|
}], strictValidation: [{
|
|
33324
34282
|
type: Input
|
|
33325
34283
|
}], renderTitleInsideBody: [{
|
|
33326
34284
|
type: Input
|
|
33327
|
-
}],
|
|
34285
|
+
}], widgetEvent: [{
|
|
34286
|
+
type: Output
|
|
34287
|
+
}], beforeWidgetLoader: [{
|
|
33328
34288
|
type: ViewChild,
|
|
33329
|
-
args: [DynamicWidgetLoaderDirective]
|
|
34289
|
+
args: ['beforeWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
34290
|
+
}], mainWidgetLoader: [{
|
|
34291
|
+
type: ViewChild,
|
|
34292
|
+
args: ['mainWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
34293
|
+
}], afterWidgetLoader: [{
|
|
34294
|
+
type: ViewChild,
|
|
34295
|
+
args: ['afterWidgetLoader', { read: DynamicWidgetLoaderDirective }]
|
|
33330
34296
|
}] } });
|
|
33331
34297
|
|
|
33332
34298
|
class EmptyStateCardComponent {
|
|
@@ -34792,4 +35758,4 @@ function provideHookWhitelist(allowed) {
|
|
|
34792
35758
|
* Generated bundle index. Do not edit.
|
|
34793
35759
|
*/
|
|
34794
35760
|
|
|
34795
|
-
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, 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, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, 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_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisRuntimeGlobalActionEffect, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|
|
35761
|
+
export { API_CONFIG_STORAGE_OPTIONS, API_URL, ASYNC_CONFIG_STORAGE, AllowedFileTypes, AnalyticsPresentationResolver, AnalyticsSchemaContractService, AnalyticsStatsRequestBuilderService, ApiConfigStorage, ApiEndpoint, BUILTIN_PAGE_LAYOUT_PRESETS, BUILTIN_PAGE_THEME_PRESETS, BUILTIN_SHELL_PRESETS, CONFIG_STORAGE, CONNECTION_STORAGE, ComponentKeyService, ComponentMetadataRegistry, CompositionRuntimeFacade, ConsoleLoggerSink, CrudOperationResolutionService, DEFAULT_FIELD_SELECTOR_CONTROL_TYPE_MAP, DEFAULT_JSON_LOGIC_OPERATORS, DEFAULT_TABLE_CONFIG, DOMAIN_CATALOG_COMPONENT_CONTEXT_PACK, DOMAIN_CATALOG_CONTEXT_HINT_SCHEMA_VERSION, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, DomainCatalogService, DomainKnowledgeService, DomainRuleService, DynamicFormService, DynamicWidgetLoaderDirective, DynamicWidgetPageComponent, EDITORIAL_ALLOWED_CONTENT_FORMATS, EDITORIAL_COMPLIANCE_PRESETS, EDITORIAL_EXTERNAL_LINK_REL, EDITORIAL_FORM_TEMPLATE_CATALOG, EDITORIAL_HTML_ENABLED, EDITORIAL_MARKDOWN_IMAGES_ENABLED, EDITORIAL_SOLUTION_CATALOG, EDITORIAL_SOLUTION_PRESETS, EDITORIAL_THEME_PRESETS, EDITORIAL_WIDGET_CONVENTION_INPUTS, EDITORIAL_WIDGET_TAG, EMPLOYEE_ONBOARDING_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_EDITORIAL_TEMPLATE, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_SOLUTION, EMPLOYEE_ONBOARDING_GUIDED_EDITORIAL_TEMPLATE, EVENT_REGISTRATION_EDITORIAL_SOLUTION, EVENT_REGISTRATION_EDITORIAL_TEMPLATE, 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, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_SURFACE_SERVICE, GLOBAL_TOAST_SERVICE, GenericCrudService, GlobalActionService, GlobalConfigService, INLINE_FILTER_ALIAS_TOKENS, INLINE_FILTER_CONTROL_TYPES, INLINE_FILTER_CONTROL_TYPE_SET, INLINE_FILTER_CONTROL_TYPE_VALUES, INLINE_FILTER_TOKEN_TO_BASE_CONTROL_TYPE, INLINE_FILTER_TOKEN_TO_CONTROL_TYPE, IconPickerService, IconPosition, IconSize, LOGGER_LEVEL_BY_ENV, LOGGER_LEVEL_PRIORITY, LoadingOrchestrator, LocalConnectionStorage, LocalStorageAsyncAdapter, LocalStorageCacheAdapter, LocalStorageConfigService, LoggerService, LoggerThrottleTracker, LoggerWarnOnceTracker, MemoryCacheAdapter, NestedPortCatalogService, NestedWidgetConfigAccessor, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_COLLECTION_EXPORT_HTTP_OPTIONS, PRAXIS_COLLECTION_EXPORT_PROVIDER, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_EXPORT_SECURITY_POLICY, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_EXPORT_FORMULA_PREFIXES, PRAXIS_EXPORT_SECURITY_POLICY, 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_I18N_CONFIG, PRAXIS_I18N_TRANSLATOR, PRAXIS_JSON_LOGIC_OPERATORS, PRAXIS_LAYER_SCALE_DEFAULTS, PRAXIS_LAYER_SCALE_VARS, PRAXIS_LEGAL_NOTICE_METADATA, PRAXIS_LOADING_CTX, PRAXIS_LOADING_RENDERER, PRAXIS_LOGGER_CONFIG, PRAXIS_LOGGER_SINKS, PRAXIS_OBSERVABILITY_DASHBOARD_OPTIONS, PRAXIS_QUERY_FILTER_EXPRESSION_SCHEMA_VERSION, PRAXIS_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCollectionExportService, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisHttpCollectionExportProvider, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, PraxisRuntimeComponentObservationRegistryService, PraxisSurfaceHostComponent, PraxisUserContextSummaryComponent, RESOURCE_DISCOVERY_I18N_CONFIG, RESOURCE_DISCOVERY_I18N_NAMESPACE, RULE_PROPERTY_SCHEMA, RemoteConfigStorage, ResourceActionOpenAdapterService, ResourceDiscoveryService, ResourceQuickConnectComponent, ResourceSurfaceOpenAdapterService, SCHEMA_VIEWER_CONTEXT, SETTINGS_PANEL_BRIDGE, SETTINGS_PANEL_DATA, STEPPER_CONFIG_EDITOR, SURFACE_DRAWER_BRIDGE, SURFACE_OPEN_I18N_CONFIG, SURFACE_OPEN_I18N_NAMESPACE, SURFACE_OPEN_PRESETS, SchemaMetadataClient, SchemaNormalizerService, SchemaViewerComponent, SurfaceBindingRuntimeService, SurfaceOpenActionEditorComponent, SurfaceOpenMaterializerService, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, assertPraxisCollectionExportArtifact, assertPraxisRuntimeComponentObservationSerializable, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisEffectDistinctKey, buildPraxisLayerScaleCss, buildSchemaId, buildSchemaIdStorageKeySegment, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, classifyEntityLookupResult, clonePraxisRuntimeComponentObservation, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createFieldLayoutItem, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, domainKnowledgeTimelineToRichContentDocument, domainRuleTimelineToRichContentDocument, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, escapePraxisExportCell, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getFormColumnFieldNames, getFormLayoutFieldNames, getGlobalActionCatalog, getGlobalActionPayloadActualType, getGlobalActionPayloadTypeIssue, getGlobalActionUiSchema, getMissingGlobalActionPayloadKeys, getReferencedFieldMetadata, getRequiredGlobalActionPayloadKeys, getTextTransformer, hasMeaningfulGlobalActionPayloadValue, hasPraxisCollectionExportArtifact, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isEntityLookupMultiplePayloadMode, isEntityLookupPayloadMode, isEntityLookupPayloadModeCompatible, isEntityLookupResultSelectable, isEntityLookupSinglePayloadMode, isFormLayoutItem, isGlobalActionRef, isInlineFilterControlType, isLookupDialogSize, isLookupFilterFieldType, isLookupFilterOperator, isPraxisRuntimeGlobalActionEffect, isRangeValidForFilter, isRequiredGlobalActionParamPayloadMissing, isRequiredGlobalActionPayloadMissing, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormLayoutItems, normalizeFormMetadata, normalizeGlobalActionRef$1 as normalizeGlobalActionRef, normalizeLookupFilterRequest, normalizePath, normalizePraxisDataQueryContext, normalizePraxisEffectPolicy, normalizePraxisQueryFilterExpression, normalizePraxisQueryFilterNode, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, normalizeWidgetEventPath, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisCollectionExportProvider, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpCollectionExportProvider, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, readPraxisExportValue, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, registerPraxisRuntimeComponentObservation, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, requiredPresenceValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveEntityLookupPayloadMode, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisCollectionExportItems, resolvePraxisExportFields, resolvePraxisExportScope, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, serializeEntityLookupValueForPayload, serializeOptionSourceFilterRequest, serializePraxisCollectionToCsv, serializePraxisCollectionToJson, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, validateGlobalActionRef, validateGlobalActionRefs, withMessage, withPraxisHttpLoading };
|