@praxisui/core 7.0.0-beta.0 → 8.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/fesm2022/praxisui-core.mjs +734 -153
- package/index.d.ts +83 -15
- package/package.json +1 -1
|
@@ -3886,6 +3886,14 @@ function createDefaultTableConfig() {
|
|
|
3886
3886
|
'stack',
|
|
3887
3887
|
'tabs',
|
|
3888
3888
|
'tab',
|
|
3889
|
+
'text',
|
|
3890
|
+
'icon',
|
|
3891
|
+
'image',
|
|
3892
|
+
'badge',
|
|
3893
|
+
'avatar',
|
|
3894
|
+
'metric',
|
|
3895
|
+
'progress',
|
|
3896
|
+
'compose',
|
|
3889
3897
|
'card',
|
|
3890
3898
|
'value',
|
|
3891
3899
|
'action',
|
|
@@ -5655,6 +5663,16 @@ function providePraxisJsonLogicOperator(definition) {
|
|
|
5655
5663
|
useValue: definition,
|
|
5656
5664
|
};
|
|
5657
5665
|
}
|
|
5666
|
+
function providePraxisJsonLogicOperatorOverride(definition) {
|
|
5667
|
+
return {
|
|
5668
|
+
provide: PRAXIS_JSON_LOGIC_OPERATORS,
|
|
5669
|
+
multi: true,
|
|
5670
|
+
useValue: {
|
|
5671
|
+
...definition,
|
|
5672
|
+
override: true,
|
|
5673
|
+
},
|
|
5674
|
+
};
|
|
5675
|
+
}
|
|
5658
5676
|
|
|
5659
5677
|
class PraxisJsonLogicError extends Error {
|
|
5660
5678
|
code;
|
|
@@ -5667,8 +5685,11 @@ class PraxisJsonLogicError extends Error {
|
|
|
5667
5685
|
class PraxisJsonLogicService {
|
|
5668
5686
|
customOperators = new Map();
|
|
5669
5687
|
constructor(operatorDefinitions) {
|
|
5670
|
-
for (const definition of
|
|
5671
|
-
this.
|
|
5688
|
+
for (const definition of DEFAULT_JSON_LOGIC_OPERATORS) {
|
|
5689
|
+
this.registerCustomOperator(definition, 'praxis');
|
|
5690
|
+
}
|
|
5691
|
+
for (const definition of operatorDefinitions ?? []) {
|
|
5692
|
+
this.registerCustomOperator(definition, 'host', definition.override === true);
|
|
5672
5693
|
}
|
|
5673
5694
|
}
|
|
5674
5695
|
evaluate(expression, data, options) {
|
|
@@ -5715,6 +5736,38 @@ class PraxisJsonLogicService {
|
|
|
5715
5736
|
truthy(value) {
|
|
5716
5737
|
return this.isTruthy(value);
|
|
5717
5738
|
}
|
|
5739
|
+
listOperatorDescriptors() {
|
|
5740
|
+
return [
|
|
5741
|
+
...BUILTIN_JSON_LOGIC_OPERATOR_DESCRIPTORS,
|
|
5742
|
+
...Array.from(this.customOperators.values()).map((definition) => this.toOperatorDescriptor(definition)),
|
|
5743
|
+
];
|
|
5744
|
+
}
|
|
5745
|
+
getOperatorDescriptor(operator) {
|
|
5746
|
+
const native = BUILTIN_JSON_LOGIC_OPERATOR_DESCRIPTORS.find((item) => item.operator === operator);
|
|
5747
|
+
if (native) {
|
|
5748
|
+
return native;
|
|
5749
|
+
}
|
|
5750
|
+
const custom = this.customOperators.get(operator);
|
|
5751
|
+
return custom ? this.toOperatorDescriptor(custom) : undefined;
|
|
5752
|
+
}
|
|
5753
|
+
registerCustomOperator(definition, source, allowOverride = false) {
|
|
5754
|
+
const operator = definition.operator;
|
|
5755
|
+
if (BUILTIN_JSON_LOGIC_OPERATORS.includes(operator)) {
|
|
5756
|
+
throw new PraxisJsonLogicError('RULE_OPERATOR_CONFLICT', `JSON Logic operator "${operator}" is native and cannot be registered as a custom operator.`);
|
|
5757
|
+
}
|
|
5758
|
+
const existing = this.customOperators.get(operator);
|
|
5759
|
+
if (existing && !allowOverride) {
|
|
5760
|
+
throw new PraxisJsonLogicError('RULE_OPERATOR_CONFLICT', `JSON Logic operator "${operator}" is already registered by ${existing.source}. Use providePraxisJsonLogicOperatorOverride for an explicit override.`);
|
|
5761
|
+
}
|
|
5762
|
+
this.customOperators.set(operator, {
|
|
5763
|
+
...definition,
|
|
5764
|
+
source,
|
|
5765
|
+
});
|
|
5766
|
+
}
|
|
5767
|
+
toOperatorDescriptor(definition) {
|
|
5768
|
+
const { evaluate: _evaluate, override: _override, ...descriptor } = definition;
|
|
5769
|
+
return descriptor;
|
|
5770
|
+
}
|
|
5718
5771
|
createContext(data, options) {
|
|
5719
5772
|
return {
|
|
5720
5773
|
data,
|
|
@@ -5773,6 +5826,27 @@ class PraxisJsonLogicService {
|
|
|
5773
5826
|
if (operator === 'substr') {
|
|
5774
5827
|
return this.evaluateSubstr(rawArgs, context);
|
|
5775
5828
|
}
|
|
5829
|
+
if (operator === 'merge') {
|
|
5830
|
+
return this.evaluateMerge(rawArgs, context);
|
|
5831
|
+
}
|
|
5832
|
+
if (operator === 'map') {
|
|
5833
|
+
return this.evaluateMap(rawArgs, context);
|
|
5834
|
+
}
|
|
5835
|
+
if (operator === 'filter') {
|
|
5836
|
+
return this.evaluateFilter(rawArgs, context);
|
|
5837
|
+
}
|
|
5838
|
+
if (operator === 'reduce') {
|
|
5839
|
+
return this.evaluateReduce(rawArgs, context);
|
|
5840
|
+
}
|
|
5841
|
+
if (operator === 'all') {
|
|
5842
|
+
return this.evaluateAll(rawArgs, context);
|
|
5843
|
+
}
|
|
5844
|
+
if (operator === 'some') {
|
|
5845
|
+
return this.evaluateSome(rawArgs, context);
|
|
5846
|
+
}
|
|
5847
|
+
if (operator === 'none') {
|
|
5848
|
+
return this.evaluateNone(rawArgs, context);
|
|
5849
|
+
}
|
|
5776
5850
|
const custom = this.customOperators.get(operator);
|
|
5777
5851
|
if (!custom) {
|
|
5778
5852
|
throw new PraxisJsonLogicError('RULE_OPERATOR_UNKNOWN', `Unsupported JSON Logic operator: ${operator}`);
|
|
@@ -5931,6 +6005,82 @@ class PraxisJsonLogicService {
|
|
|
5931
6005
|
}
|
|
5932
6006
|
return value.slice(normalizedStart, normalizedStart + length);
|
|
5933
6007
|
}
|
|
6008
|
+
evaluateMerge(rawArgs, context) {
|
|
6009
|
+
const args = this.toArgumentArray(rawArgs).map((arg) => this.evaluateValue(arg, context));
|
|
6010
|
+
const result = [];
|
|
6011
|
+
for (const value of args) {
|
|
6012
|
+
if (Array.isArray(value)) {
|
|
6013
|
+
result.push(...value);
|
|
6014
|
+
}
|
|
6015
|
+
else {
|
|
6016
|
+
result.push(value);
|
|
6017
|
+
}
|
|
6018
|
+
}
|
|
6019
|
+
return result;
|
|
6020
|
+
}
|
|
6021
|
+
evaluateMap(rawArgs, context) {
|
|
6022
|
+
const [sourceExpression, mapExpression] = this.requireHigherOrderArgs('map', rawArgs, 2, 2);
|
|
6023
|
+
const source = this.evaluateValue(sourceExpression, context);
|
|
6024
|
+
this.assertArrayOperand('map', source);
|
|
6025
|
+
return source.map((item) => this.evaluateValue(mapExpression, this.createChildContext(context, item)));
|
|
6026
|
+
}
|
|
6027
|
+
evaluateFilter(rawArgs, context) {
|
|
6028
|
+
const [sourceExpression, predicateExpression] = this.requireHigherOrderArgs('filter', rawArgs, 2, 2);
|
|
6029
|
+
const source = this.evaluateValue(sourceExpression, context);
|
|
6030
|
+
this.assertArrayOperand('filter', source);
|
|
6031
|
+
return source.filter((item) => this.isTruthy(this.evaluateValue(predicateExpression, this.createChildContext(context, item))));
|
|
6032
|
+
}
|
|
6033
|
+
evaluateReduce(rawArgs, context) {
|
|
6034
|
+
const [sourceExpression, reducerExpression, initialExpression] = this.requireHigherOrderArgs('reduce', rawArgs, 2, 3);
|
|
6035
|
+
const source = this.evaluateValue(sourceExpression, context);
|
|
6036
|
+
this.assertArrayOperand('reduce', source);
|
|
6037
|
+
let accumulator = initialExpression === undefined
|
|
6038
|
+
? null
|
|
6039
|
+
: this.evaluateValue(initialExpression, context);
|
|
6040
|
+
for (const current of source) {
|
|
6041
|
+
accumulator = this.evaluateValue(reducerExpression, this.createChildContext(context, {
|
|
6042
|
+
current,
|
|
6043
|
+
accumulator,
|
|
6044
|
+
}));
|
|
6045
|
+
}
|
|
6046
|
+
return accumulator;
|
|
6047
|
+
}
|
|
6048
|
+
evaluateAll(rawArgs, context) {
|
|
6049
|
+
const [sourceExpression, predicateExpression] = this.requireHigherOrderArgs('all', rawArgs, 2, 2);
|
|
6050
|
+
const source = this.evaluateValue(sourceExpression, context);
|
|
6051
|
+
this.assertArrayOperand('all', source);
|
|
6052
|
+
if (!source.length) {
|
|
6053
|
+
return false;
|
|
6054
|
+
}
|
|
6055
|
+
return source.every((item) => this.isTruthy(this.evaluateValue(predicateExpression, this.createChildContext(context, item))));
|
|
6056
|
+
}
|
|
6057
|
+
evaluateSome(rawArgs, context) {
|
|
6058
|
+
const [sourceExpression, predicateExpression] = this.requireHigherOrderArgs('some', rawArgs, 2, 2);
|
|
6059
|
+
const source = this.evaluateValue(sourceExpression, context);
|
|
6060
|
+
this.assertArrayOperand('some', source);
|
|
6061
|
+
return source.some((item) => this.isTruthy(this.evaluateValue(predicateExpression, this.createChildContext(context, item))));
|
|
6062
|
+
}
|
|
6063
|
+
evaluateNone(rawArgs, context) {
|
|
6064
|
+
const [sourceExpression, predicateExpression] = this.requireHigherOrderArgs('none', rawArgs, 2, 2);
|
|
6065
|
+
const source = this.evaluateValue(sourceExpression, context);
|
|
6066
|
+
this.assertArrayOperand('none', source);
|
|
6067
|
+
return !source.some((item) => this.isTruthy(this.evaluateValue(predicateExpression, this.createChildContext(context, item))));
|
|
6068
|
+
}
|
|
6069
|
+
requireHigherOrderArgs(operator, rawArgs, min, max) {
|
|
6070
|
+
const args = this.toArgumentArray(rawArgs);
|
|
6071
|
+
return this.requireArgs(operator, args, min, max);
|
|
6072
|
+
}
|
|
6073
|
+
assertArrayOperand(operator, value) {
|
|
6074
|
+
if (!Array.isArray(value)) {
|
|
6075
|
+
throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', `Operator ${operator} requires an array as the first argument.`);
|
|
6076
|
+
}
|
|
6077
|
+
}
|
|
6078
|
+
createChildContext(context, data) {
|
|
6079
|
+
return {
|
|
6080
|
+
...context,
|
|
6081
|
+
data: data,
|
|
6082
|
+
};
|
|
6083
|
+
}
|
|
5934
6084
|
evaluateArgs(operator, rawArgs, context, min, max) {
|
|
5935
6085
|
const args = this.toArgumentArray(rawArgs).map((arg) => this.evaluateValue(arg, context));
|
|
5936
6086
|
return this.requireArgs(operator, args, min, max);
|
|
@@ -6151,6 +6301,16 @@ class PraxisJsonLogicService {
|
|
|
6151
6301
|
return { min: 1 };
|
|
6152
6302
|
case 'substr':
|
|
6153
6303
|
return { min: 2, max: 3 };
|
|
6304
|
+
case 'merge':
|
|
6305
|
+
return { min: 1 };
|
|
6306
|
+
case 'map':
|
|
6307
|
+
case 'filter':
|
|
6308
|
+
case 'all':
|
|
6309
|
+
case 'some':
|
|
6310
|
+
case 'none':
|
|
6311
|
+
return { min: 2, max: 2 };
|
|
6312
|
+
case 'reduce':
|
|
6313
|
+
return { min: 2, max: 3 };
|
|
6154
6314
|
case '+':
|
|
6155
6315
|
case '*':
|
|
6156
6316
|
case 'min':
|
|
@@ -6196,10 +6356,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
6196
6356
|
const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
6197
6357
|
{
|
|
6198
6358
|
operator: 'contains',
|
|
6359
|
+
namespace: 'praxis',
|
|
6199
6360
|
minArgs: 2,
|
|
6200
6361
|
maxArgs: 2,
|
|
6362
|
+
returnType: 'boolean',
|
|
6363
|
+
purity: 'pure',
|
|
6201
6364
|
evaluate: (args, _context, helpers) => {
|
|
6202
6365
|
const [container, candidate] = helpers.requireArgs('contains', args, 2, 2);
|
|
6366
|
+
if (container === undefined || container === null) {
|
|
6367
|
+
return false;
|
|
6368
|
+
}
|
|
6203
6369
|
if (typeof container === 'string' && typeof candidate === 'string') {
|
|
6204
6370
|
return container.includes(candidate);
|
|
6205
6371
|
}
|
|
@@ -6211,10 +6377,16 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6211
6377
|
},
|
|
6212
6378
|
{
|
|
6213
6379
|
operator: 'startsWith',
|
|
6380
|
+
namespace: 'praxis',
|
|
6214
6381
|
minArgs: 2,
|
|
6215
6382
|
maxArgs: 2,
|
|
6383
|
+
returnType: 'boolean',
|
|
6384
|
+
purity: 'pure',
|
|
6216
6385
|
evaluate: (args, _context, helpers) => {
|
|
6217
6386
|
const [value, prefix] = helpers.requireArgs('startsWith', args, 2, 2);
|
|
6387
|
+
if (value === undefined || value === null) {
|
|
6388
|
+
return false;
|
|
6389
|
+
}
|
|
6218
6390
|
if (typeof value !== 'string' || typeof prefix !== 'string') {
|
|
6219
6391
|
throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`startsWith` requires string arguments.');
|
|
6220
6392
|
}
|
|
@@ -6223,10 +6395,16 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6223
6395
|
},
|
|
6224
6396
|
{
|
|
6225
6397
|
operator: 'endsWith',
|
|
6398
|
+
namespace: 'praxis',
|
|
6226
6399
|
minArgs: 2,
|
|
6227
6400
|
maxArgs: 2,
|
|
6401
|
+
returnType: 'boolean',
|
|
6402
|
+
purity: 'pure',
|
|
6228
6403
|
evaluate: (args, _context, helpers) => {
|
|
6229
6404
|
const [value, suffix] = helpers.requireArgs('endsWith', args, 2, 2);
|
|
6405
|
+
if (value === undefined || value === null) {
|
|
6406
|
+
return false;
|
|
6407
|
+
}
|
|
6230
6408
|
if (typeof value !== 'string' || typeof suffix !== 'string') {
|
|
6231
6409
|
throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`endsWith` requires string arguments.');
|
|
6232
6410
|
}
|
|
@@ -6235,10 +6413,16 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6235
6413
|
},
|
|
6236
6414
|
{
|
|
6237
6415
|
operator: 'matches',
|
|
6416
|
+
namespace: 'praxis',
|
|
6238
6417
|
minArgs: 2,
|
|
6239
6418
|
maxArgs: 2,
|
|
6419
|
+
returnType: 'boolean',
|
|
6420
|
+
purity: 'pure',
|
|
6240
6421
|
evaluate: (args, _context, helpers) => {
|
|
6241
6422
|
const [value, pattern] = helpers.requireArgs('matches', args, 2, 2);
|
|
6423
|
+
if (value === undefined || value === null) {
|
|
6424
|
+
return false;
|
|
6425
|
+
}
|
|
6242
6426
|
if (typeof value !== 'string' || typeof pattern !== 'string') {
|
|
6243
6427
|
throw new PraxisJsonLogicError('RULE_ARGUMENT_TYPE_INVALID', '`matches` requires string arguments.');
|
|
6244
6428
|
}
|
|
@@ -6252,8 +6436,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6252
6436
|
},
|
|
6253
6437
|
{
|
|
6254
6438
|
operator: 'isBlank',
|
|
6439
|
+
namespace: 'praxis',
|
|
6255
6440
|
minArgs: 1,
|
|
6256
6441
|
maxArgs: 1,
|
|
6442
|
+
returnType: 'boolean',
|
|
6443
|
+
purity: 'pure',
|
|
6257
6444
|
evaluate: (args, _context, helpers) => {
|
|
6258
6445
|
const [value] = helpers.requireArgs('isBlank', args, 1, 1);
|
|
6259
6446
|
if (value === undefined || value === null) {
|
|
@@ -6270,8 +6457,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6270
6457
|
},
|
|
6271
6458
|
{
|
|
6272
6459
|
operator: 'len',
|
|
6460
|
+
namespace: 'praxis',
|
|
6273
6461
|
minArgs: 1,
|
|
6274
6462
|
maxArgs: 1,
|
|
6463
|
+
returnType: 'number',
|
|
6464
|
+
purity: 'pure',
|
|
6275
6465
|
evaluate: (args, _context, helpers) => {
|
|
6276
6466
|
const [value] = helpers.requireArgs('len', args, 1, 1);
|
|
6277
6467
|
if (value === undefined || value === null) {
|
|
@@ -6291,8 +6481,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6291
6481
|
},
|
|
6292
6482
|
{
|
|
6293
6483
|
operator: 'round',
|
|
6484
|
+
namespace: 'praxis',
|
|
6294
6485
|
minArgs: 1,
|
|
6295
6486
|
maxArgs: 1,
|
|
6487
|
+
returnType: 'number',
|
|
6488
|
+
purity: 'pure',
|
|
6296
6489
|
evaluate: (args, _context, helpers) => {
|
|
6297
6490
|
const [value] = helpers.requireArgs('round', args, 1, 1);
|
|
6298
6491
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
@@ -6303,8 +6496,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6303
6496
|
},
|
|
6304
6497
|
{
|
|
6305
6498
|
operator: 'ceil',
|
|
6499
|
+
namespace: 'praxis',
|
|
6306
6500
|
minArgs: 1,
|
|
6307
6501
|
maxArgs: 1,
|
|
6502
|
+
returnType: 'number',
|
|
6503
|
+
purity: 'pure',
|
|
6308
6504
|
evaluate: (args, _context, helpers) => {
|
|
6309
6505
|
const [value] = helpers.requireArgs('ceil', args, 1, 1);
|
|
6310
6506
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
@@ -6315,8 +6511,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6315
6511
|
},
|
|
6316
6512
|
{
|
|
6317
6513
|
operator: 'floor',
|
|
6514
|
+
namespace: 'praxis',
|
|
6318
6515
|
minArgs: 1,
|
|
6319
6516
|
maxArgs: 1,
|
|
6517
|
+
returnType: 'number',
|
|
6518
|
+
purity: 'pure',
|
|
6320
6519
|
evaluate: (args, _context, helpers) => {
|
|
6321
6520
|
const [value] = helpers.requireArgs('floor', args, 1, 1);
|
|
6322
6521
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
@@ -6327,8 +6526,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6327
6526
|
},
|
|
6328
6527
|
{
|
|
6329
6528
|
operator: 'abs',
|
|
6529
|
+
namespace: 'praxis',
|
|
6330
6530
|
minArgs: 1,
|
|
6331
6531
|
maxArgs: 1,
|
|
6532
|
+
returnType: 'number',
|
|
6533
|
+
purity: 'pure',
|
|
6332
6534
|
evaluate: (args, _context, helpers) => {
|
|
6333
6535
|
const [value] = helpers.requireArgs('abs', args, 1, 1);
|
|
6334
6536
|
if (typeof value !== 'number' || !Number.isFinite(value)) {
|
|
@@ -6339,7 +6541,10 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6339
6541
|
},
|
|
6340
6542
|
{
|
|
6341
6543
|
operator: 'coalesce',
|
|
6544
|
+
namespace: 'praxis',
|
|
6342
6545
|
minArgs: 1,
|
|
6546
|
+
returnType: 'unknown',
|
|
6547
|
+
purity: 'pure',
|
|
6343
6548
|
evaluate: (args, _context, helpers) => {
|
|
6344
6549
|
const values = helpers.requireArgs('coalesce', args, 1);
|
|
6345
6550
|
for (const value of values) {
|
|
@@ -6352,14 +6557,20 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6352
6557
|
},
|
|
6353
6558
|
{
|
|
6354
6559
|
operator: 'now',
|
|
6560
|
+
namespace: 'praxis',
|
|
6355
6561
|
minArgs: 0,
|
|
6356
6562
|
maxArgs: 0,
|
|
6563
|
+
returnType: 'number',
|
|
6564
|
+
purity: 'contextual',
|
|
6357
6565
|
evaluate: () => Date.now(),
|
|
6358
6566
|
},
|
|
6359
6567
|
{
|
|
6360
6568
|
operator: 'date',
|
|
6569
|
+
namespace: 'praxis',
|
|
6361
6570
|
minArgs: 1,
|
|
6362
6571
|
maxArgs: 1,
|
|
6572
|
+
returnType: 'number',
|
|
6573
|
+
purity: 'pure',
|
|
6363
6574
|
evaluate: (args, _context, helpers) => {
|
|
6364
6575
|
const [value] = helpers.requireArgs('date', args, 1, 1);
|
|
6365
6576
|
const parsed = parseTemporalValue(value);
|
|
@@ -6374,8 +6585,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6374
6585
|
},
|
|
6375
6586
|
{
|
|
6376
6587
|
operator: 'yearsSince',
|
|
6588
|
+
namespace: 'praxis',
|
|
6377
6589
|
minArgs: 1,
|
|
6378
6590
|
maxArgs: 1,
|
|
6591
|
+
returnType: 'number',
|
|
6592
|
+
purity: 'contextual',
|
|
6379
6593
|
evaluate: (args, context, helpers) => {
|
|
6380
6594
|
const [value] = helpers.requireArgs('yearsSince', args, 1, 1);
|
|
6381
6595
|
const parsed = parseTemporalValue(value);
|
|
@@ -6388,8 +6602,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6388
6602
|
},
|
|
6389
6603
|
{
|
|
6390
6604
|
operator: 'monthsSince',
|
|
6605
|
+
namespace: 'praxis',
|
|
6391
6606
|
minArgs: 1,
|
|
6392
6607
|
maxArgs: 1,
|
|
6608
|
+
returnType: 'number',
|
|
6609
|
+
purity: 'contextual',
|
|
6393
6610
|
evaluate: (args, context, helpers) => {
|
|
6394
6611
|
const [value] = helpers.requireArgs('monthsSince', args, 1, 1);
|
|
6395
6612
|
const parsed = parseTemporalValue(value);
|
|
@@ -6402,8 +6619,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6402
6619
|
},
|
|
6403
6620
|
{
|
|
6404
6621
|
operator: 'daysSince',
|
|
6622
|
+
namespace: 'praxis',
|
|
6405
6623
|
minArgs: 1,
|
|
6406
6624
|
maxArgs: 1,
|
|
6625
|
+
returnType: 'number',
|
|
6626
|
+
purity: 'contextual',
|
|
6407
6627
|
evaluate: (args, context, helpers) => {
|
|
6408
6628
|
const [value] = helpers.requireArgs('daysSince', args, 1, 1);
|
|
6409
6629
|
const parsed = parseTemporalValue(value);
|
|
@@ -6416,8 +6636,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6416
6636
|
},
|
|
6417
6637
|
{
|
|
6418
6638
|
operator: 'toNumber',
|
|
6639
|
+
namespace: 'praxis',
|
|
6419
6640
|
minArgs: 1,
|
|
6420
6641
|
maxArgs: 1,
|
|
6642
|
+
returnType: 'number',
|
|
6643
|
+
purity: 'pure',
|
|
6421
6644
|
evaluate: (args, _context, helpers) => {
|
|
6422
6645
|
const [value] = helpers.requireArgs('toNumber', args, 1, 1);
|
|
6423
6646
|
const parsed = Number(value);
|
|
@@ -6426,8 +6649,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6426
6649
|
},
|
|
6427
6650
|
{
|
|
6428
6651
|
operator: 'stringify',
|
|
6652
|
+
namespace: 'praxis',
|
|
6429
6653
|
minArgs: 1,
|
|
6430
6654
|
maxArgs: 1,
|
|
6655
|
+
returnType: 'string',
|
|
6656
|
+
purity: 'pure',
|
|
6431
6657
|
evaluate: (args, _context, helpers) => {
|
|
6432
6658
|
const [value] = helpers.requireArgs('stringify', args, 1, 1);
|
|
6433
6659
|
return value == null ? '' : String(value);
|
|
@@ -6435,8 +6661,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6435
6661
|
},
|
|
6436
6662
|
{
|
|
6437
6663
|
operator: 'jsonGet',
|
|
6664
|
+
namespace: 'praxis',
|
|
6438
6665
|
minArgs: 2,
|
|
6439
6666
|
maxArgs: 2,
|
|
6667
|
+
returnType: 'unknown',
|
|
6668
|
+
purity: 'pure',
|
|
6440
6669
|
evaluate: (args, _context, helpers) => {
|
|
6441
6670
|
const [target, path] = helpers.requireArgs('jsonGet', args, 2, 2);
|
|
6442
6671
|
if (typeof path !== 'string') {
|
|
@@ -6450,8 +6679,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6450
6679
|
},
|
|
6451
6680
|
{
|
|
6452
6681
|
operator: 'hasKey',
|
|
6682
|
+
namespace: 'praxis',
|
|
6453
6683
|
minArgs: 2,
|
|
6454
6684
|
maxArgs: 2,
|
|
6685
|
+
returnType: 'boolean',
|
|
6686
|
+
purity: 'pure',
|
|
6455
6687
|
evaluate: (args, _context, helpers) => {
|
|
6456
6688
|
const [target, path] = helpers.requireArgs('hasKey', args, 2, 2);
|
|
6457
6689
|
if (typeof path !== 'string') {
|
|
@@ -6465,8 +6697,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6465
6697
|
},
|
|
6466
6698
|
{
|
|
6467
6699
|
operator: 'isToday',
|
|
6700
|
+
namespace: 'praxis',
|
|
6468
6701
|
minArgs: 1,
|
|
6469
6702
|
maxArgs: 1,
|
|
6703
|
+
returnType: 'boolean',
|
|
6704
|
+
purity: 'contextual',
|
|
6470
6705
|
evaluate: (args, context, helpers) => {
|
|
6471
6706
|
const [candidate] = helpers.requireArgs('isToday', args, 1, 1);
|
|
6472
6707
|
const parsed = parseTemporalValue(candidate);
|
|
@@ -6478,8 +6713,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6478
6713
|
},
|
|
6479
6714
|
{
|
|
6480
6715
|
operator: 'inLast',
|
|
6716
|
+
namespace: 'praxis',
|
|
6481
6717
|
minArgs: 3,
|
|
6482
6718
|
maxArgs: 3,
|
|
6719
|
+
returnType: 'boolean',
|
|
6720
|
+
purity: 'contextual',
|
|
6483
6721
|
evaluate: (args, context, helpers) => {
|
|
6484
6722
|
const [candidate, rawAmount, rawUnit] = helpers.requireArgs('inLast', args, 3, 3);
|
|
6485
6723
|
const parsed = parseTemporalValue(candidate);
|
|
@@ -6496,8 +6734,11 @@ const DEFAULT_JSON_LOGIC_OPERATORS = [
|
|
|
6496
6734
|
},
|
|
6497
6735
|
{
|
|
6498
6736
|
operator: 'weekdayIn',
|
|
6737
|
+
namespace: 'praxis',
|
|
6499
6738
|
minArgs: 2,
|
|
6500
6739
|
maxArgs: 2,
|
|
6740
|
+
returnType: 'boolean',
|
|
6741
|
+
purity: 'contextual',
|
|
6501
6742
|
evaluate: (args, context, helpers) => {
|
|
6502
6743
|
const [candidate, rawDays] = helpers.requireArgs('weekdayIn', args, 2, 2);
|
|
6503
6744
|
const parsed = parseTemporalValue(candidate);
|
|
@@ -6541,6 +6782,13 @@ const BUILTIN_JSON_LOGIC_OPERATORS = [
|
|
|
6541
6782
|
'in',
|
|
6542
6783
|
'cat',
|
|
6543
6784
|
'substr',
|
|
6785
|
+
'merge',
|
|
6786
|
+
'map',
|
|
6787
|
+
'filter',
|
|
6788
|
+
'reduce',
|
|
6789
|
+
'all',
|
|
6790
|
+
'some',
|
|
6791
|
+
'none',
|
|
6544
6792
|
'+',
|
|
6545
6793
|
'-',
|
|
6546
6794
|
'*',
|
|
@@ -6549,6 +6797,39 @@ const BUILTIN_JSON_LOGIC_OPERATORS = [
|
|
|
6549
6797
|
'min',
|
|
6550
6798
|
'max',
|
|
6551
6799
|
];
|
|
6800
|
+
const BUILTIN_JSON_LOGIC_OPERATOR_DESCRIPTORS = [
|
|
6801
|
+
{ operator: 'var', source: 'native', minArgs: 1, maxArgs: 2, returnType: 'unknown', purity: 'pure' },
|
|
6802
|
+
{ operator: '==', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6803
|
+
{ operator: '===', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6804
|
+
{ operator: '!=', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6805
|
+
{ operator: '!==', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6806
|
+
{ operator: '>', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6807
|
+
{ operator: '>=', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6808
|
+
{ operator: '<', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6809
|
+
{ operator: '<=', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6810
|
+
{ operator: '!', source: 'native', minArgs: 1, maxArgs: 1, returnType: 'boolean', purity: 'pure' },
|
|
6811
|
+
{ operator: '!!', source: 'native', minArgs: 1, maxArgs: 1, returnType: 'boolean', purity: 'pure' },
|
|
6812
|
+
{ operator: 'and', source: 'native', minArgs: 1, returnType: 'unknown', purity: 'pure' },
|
|
6813
|
+
{ operator: 'or', source: 'native', minArgs: 1, returnType: 'unknown', purity: 'pure' },
|
|
6814
|
+
{ operator: 'if', source: 'native', minArgs: 2, returnType: 'unknown', purity: 'pure' },
|
|
6815
|
+
{ operator: 'in', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6816
|
+
{ operator: 'cat', source: 'native', minArgs: 1, returnType: 'string', purity: 'pure' },
|
|
6817
|
+
{ operator: 'substr', source: 'native', minArgs: 2, maxArgs: 3, returnType: 'string', purity: 'pure' },
|
|
6818
|
+
{ operator: 'merge', source: 'native', minArgs: 1, returnType: 'array', purity: 'pure' },
|
|
6819
|
+
{ operator: 'map', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'array', purity: 'pure' },
|
|
6820
|
+
{ operator: 'filter', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'array', purity: 'pure' },
|
|
6821
|
+
{ operator: 'reduce', source: 'native', minArgs: 2, maxArgs: 3, returnType: 'unknown', purity: 'pure' },
|
|
6822
|
+
{ operator: 'all', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6823
|
+
{ operator: 'some', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6824
|
+
{ operator: 'none', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'boolean', purity: 'pure' },
|
|
6825
|
+
{ operator: '+', source: 'native', minArgs: 1, returnType: 'number', purity: 'pure' },
|
|
6826
|
+
{ operator: '-', source: 'native', minArgs: 1, returnType: 'number', purity: 'pure' },
|
|
6827
|
+
{ operator: '*', source: 'native', minArgs: 1, returnType: 'number', purity: 'pure' },
|
|
6828
|
+
{ operator: '/', source: 'native', minArgs: 2, returnType: 'number', purity: 'pure' },
|
|
6829
|
+
{ operator: '%', source: 'native', minArgs: 2, maxArgs: 2, returnType: 'number', purity: 'pure' },
|
|
6830
|
+
{ operator: 'min', source: 'native', minArgs: 1, returnType: 'number', purity: 'pure' },
|
|
6831
|
+
{ operator: 'max', source: 'native', minArgs: 1, returnType: 'number', purity: 'pure' },
|
|
6832
|
+
];
|
|
6552
6833
|
function isComparisonOperator(operator) {
|
|
6553
6834
|
return ['==', '===', '!=', '!==', '>', '>=', '<', '<='].includes(operator);
|
|
6554
6835
|
}
|
|
@@ -13280,6 +13561,7 @@ const RULE_PROPERTY_SCHEMA = {
|
|
|
13280
13561
|
{ name: 'validators', type: 'object', label: 'Validadores' },
|
|
13281
13562
|
],
|
|
13282
13563
|
section: [
|
|
13564
|
+
{ name: 'hidden', type: 'boolean', label: 'Oculto' },
|
|
13283
13565
|
{ name: 'visible', type: 'boolean', label: 'Visível' },
|
|
13284
13566
|
{ name: 'title', type: 'string', label: 'Título' },
|
|
13285
13567
|
{ name: 'description', type: 'string', label: 'Descrição' },
|
|
@@ -20134,6 +20416,8 @@ class WidgetShellComponent {
|
|
|
20134
20416
|
[class.collapsed]="collapsed"
|
|
20135
20417
|
[class.expanded]="expanded"
|
|
20136
20418
|
[class.fullscreen]="fullscreen"
|
|
20419
|
+
[class.body-fill]="shell?.bodyLayout === 'fill'"
|
|
20420
|
+
[class.body-scroll]="shell?.bodyLayout === 'scroll'"
|
|
20137
20421
|
[style.--pdx-shell-card-bg]="appearance?.card?.background || null"
|
|
20138
20422
|
[style.--pdx-shell-card-border]="appearance?.card?.borderColor || null"
|
|
20139
20423
|
[style.--pdx-shell-card-radius]="appearance?.card?.borderRadius || null"
|
|
@@ -20258,7 +20542,7 @@ class WidgetShellComponent {
|
|
|
20258
20542
|
@if (expanded || fullscreen) {
|
|
20259
20543
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
20260
20544
|
}
|
|
20261
|
-
`, isInline: true, styles: [":host{display:block;height:100%}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { 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: MatMenuModule }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20545
|
+
`, isInline: true, styles: [":host{display:block;height:100%}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { 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: MatMenuModule }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20262
20546
|
}
|
|
20263
20547
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: WidgetShellComponent, decorators: [{
|
|
20264
20548
|
type: Component,
|
|
@@ -20270,6 +20554,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
20270
20554
|
[class.collapsed]="collapsed"
|
|
20271
20555
|
[class.expanded]="expanded"
|
|
20272
20556
|
[class.fullscreen]="fullscreen"
|
|
20557
|
+
[class.body-fill]="shell?.bodyLayout === 'fill'"
|
|
20558
|
+
[class.body-scroll]="shell?.bodyLayout === 'scroll'"
|
|
20273
20559
|
[style.--pdx-shell-card-bg]="appearance?.card?.background || null"
|
|
20274
20560
|
[style.--pdx-shell-card-border]="appearance?.card?.borderColor || null"
|
|
20275
20561
|
[style.--pdx-shell-card-radius]="appearance?.card?.borderRadius || null"
|
|
@@ -20394,7 +20680,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
20394
20680
|
@if (expanded || fullscreen) {
|
|
20395
20681
|
<div class="pdx-shell-backdrop" (click)="closeOverlay()"></div>
|
|
20396
20682
|
}
|
|
20397
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"] }]
|
|
20683
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%}.pdx-shell{position:relative;height:100%;display:flex;flex-direction:column}.pdx-shell.no-shell{background:transparent;border:none;border-radius:0;box-shadow:none}.pdx-shell.dashboard{background:var(--pdx-shell-card-bg, var(--pdx-dashboard-card-bg, var(--md-sys-color-surface-container-low)));border:1px solid var(--pdx-shell-card-border, var(--pdx-dashboard-card-border, var(--md-sys-color-outline-variant)));border-radius:var(--pdx-shell-card-radius, 12px);box-shadow:var(--pdx-shell-card-shadow, 0 4px 12px rgba(15, 23, 42, .06));overflow:hidden}.pdx-shell-header{display:flex;align-items:center;gap:10px;padding:8px 10px 7px;border-bottom:1px solid var(--pdx-shell-header-border, var(--md-sys-color-outline-variant));background:var(--pdx-shell-header-bg, var(--md-sys-color-surface-container))}.pdx-shell-header--drag-enabled{cursor:grab;-webkit-user-select:none;user-select:none;touch-action:none}.pdx-shell-header--drag-enabled:active{cursor:grabbing}.pdx-shell-header--drag-enabled:focus-visible{outline:2px solid color-mix(in srgb,var(--md-sys-color-primary) 72%,white 28%);outline-offset:-2px}.pdx-shell-title{display:flex;align-items:center;gap:8px;min-width:0;flex:1;color:var(--pdx-shell-title-color, inherit)}.pdx-shell-title mat-icon{color:var(--pdx-shell-icon-color, currentColor)}.pdx-shell-text{min-width:0}.pdx-shell-title-text{font-weight:var(--pdx-shell-title-weight, 600);font-size:var(--pdx-shell-title-size, 13px);line-height:1.15;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-subtitle{font-size:var(--pdx-shell-subtitle-size, 11px);opacity:.75;color:var(--pdx-shell-subtitle-color, currentColor);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.pdx-shell-actions,.pdx-shell-window-actions{display:flex;align-items:center;gap:4px}.pdx-shell-window-actions{margin-left:auto}.pdx-action-outlined{border:1px solid var(--md-sys-color-outline-variant);border-radius:999px;padding:0 10px}.pdx-action-text{padding:0 8px}.pdx-action-label{font-size:12px;font-weight:500}.pdx-shell-body{flex:1;min-height:0;padding:var(--pdx-shell-body-padding, 8px 10px 10px 10px);background:var(--pdx-shell-body-bg, transparent);color:var(--pdx-shell-body-color, inherit)}.pdx-shell.no-shell .pdx-shell-body{padding:0}.pdx-shell-body.hidden{display:none}.pdx-shell.collapsed .pdx-shell-header{border-bottom-color:transparent}.pdx-shell.body-fill .pdx-shell-body,.pdx-shell.body-scroll .pdx-shell-body,.pdx-shell.expanded .pdx-shell-body,.pdx-shell.fullscreen .pdx-shell-body{overflow:auto;display:flex;flex-direction:column;min-height:0}.pdx-shell.body-fill .pdx-shell-body{overflow:hidden}.pdx-shell.body-scroll .pdx-shell-body{overflow:auto}.pdx-shell.body-fill .pdx-shell-body>*,.pdx-shell.body-scroll .pdx-shell-body>*,.pdx-shell.expanded .pdx-shell-body>*,.pdx-shell.fullscreen .pdx-shell-body>*{flex:1 1 auto;min-height:0;width:100%}.pdx-shell.expanded{position:fixed;top:10vh;left:50%;width:min(920px,92vw);height:min(640px,82vh);transform:translate(-50%);z-index:var(--praxis-layer-widget-shell-expanded, 1290);box-shadow:var(--mat-elevation-level8)}.pdx-shell.fullscreen{position:fixed;top:50%;left:50%;width:95vw;height:95vh;transform:translate(-50%,-50%);z-index:var(--praxis-layer-widget-shell-fullscreen, 1291);box-shadow:var(--mat-elevation-level8)}.pdx-shell-backdrop{position:fixed;inset:0;z-index:var(--praxis-layer-widget-shell-backdrop, 1280);background:#0000008c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}\n"] }]
|
|
20398
20684
|
}], propDecorators: { shell: [{
|
|
20399
20685
|
type: Input
|
|
20400
20686
|
}], context: [{
|
|
@@ -21400,14 +21686,13 @@ function applyLinkPatches(current, patches) {
|
|
|
21400
21686
|
if (!patch) {
|
|
21401
21687
|
return cloneLink(link);
|
|
21402
21688
|
}
|
|
21403
|
-
|
|
21404
|
-
|
|
21405
|
-
|
|
21406
|
-
|
|
21407
|
-
|
|
21408
|
-
|
|
21409
|
-
|
|
21410
|
-
};
|
|
21689
|
+
const next = cloneLink(link);
|
|
21690
|
+
next.status = patch.status ?? link.status;
|
|
21691
|
+
setOptionalLinkValue(next, 'lastEventAt', pickPatchedValue(patch, 'lastEventAt', link.lastEventAt));
|
|
21692
|
+
setOptionalLinkValue(next, 'lastDispatchTraceId', pickPatchedValue(patch, 'lastDispatchTraceId', link.lastDispatchTraceId));
|
|
21693
|
+
setOptionalLinkValue(next, 'lastDeliveredValuePreview', pickPatchedValue(patch, 'lastDeliveredValuePreview', link.lastDeliveredValuePreview));
|
|
21694
|
+
next.diagnostics = cloneDiagnostics$1(patch.diagnostics ?? link.diagnostics);
|
|
21695
|
+
return next;
|
|
21411
21696
|
});
|
|
21412
21697
|
}
|
|
21413
21698
|
function pickPatchedValue(patch, key, fallback) {
|
|
@@ -21419,12 +21704,24 @@ function cloneLinks(links) {
|
|
|
21419
21704
|
return links.map((link) => cloneLink(link));
|
|
21420
21705
|
}
|
|
21421
21706
|
function cloneLink(link) {
|
|
21422
|
-
|
|
21423
|
-
|
|
21707
|
+
const next = {
|
|
21708
|
+
linkId: link.linkId,
|
|
21709
|
+
status: link.status,
|
|
21424
21710
|
source: { ...link.source },
|
|
21425
21711
|
target: { ...link.target },
|
|
21426
21712
|
diagnostics: cloneDiagnostics$1(link.diagnostics),
|
|
21427
21713
|
};
|
|
21714
|
+
setOptionalLinkValue(next, 'lastEventAt', link.lastEventAt);
|
|
21715
|
+
setOptionalLinkValue(next, 'lastDispatchTraceId', link.lastDispatchTraceId);
|
|
21716
|
+
setOptionalLinkValue(next, 'lastDeliveredValuePreview', link.lastDeliveredValuePreview);
|
|
21717
|
+
return next;
|
|
21718
|
+
}
|
|
21719
|
+
function setOptionalLinkValue(link, key, value) {
|
|
21720
|
+
if (value === undefined) {
|
|
21721
|
+
delete link[key];
|
|
21722
|
+
return;
|
|
21723
|
+
}
|
|
21724
|
+
link[key] = value;
|
|
21428
21725
|
}
|
|
21429
21726
|
function cloneDiagnostics$1(diagnostics) {
|
|
21430
21727
|
return diagnostics.map((diagnostic) => ({
|
|
@@ -23572,50 +23869,79 @@ class DynamicWidgetPageComponent {
|
|
|
23572
23869
|
globalActions = inject(GlobalActionService);
|
|
23573
23870
|
storage = inject(ASYNC_CONFIG_STORAGE);
|
|
23574
23871
|
componentKeys = inject(ComponentKeyService);
|
|
23872
|
+
componentMetadata = inject(ComponentMetadataRegistry, {
|
|
23873
|
+
optional: true,
|
|
23874
|
+
});
|
|
23575
23875
|
i18n = inject(PraxisI18nService);
|
|
23576
|
-
route = (() => {
|
|
23577
|
-
|
|
23578
|
-
|
|
23579
|
-
|
|
23580
|
-
|
|
23581
|
-
|
|
23876
|
+
route = (() => {
|
|
23877
|
+
try {
|
|
23878
|
+
return inject(ActivatedRoute);
|
|
23879
|
+
}
|
|
23880
|
+
catch {
|
|
23881
|
+
return undefined;
|
|
23882
|
+
}
|
|
23883
|
+
})();
|
|
23582
23884
|
conn = inject(ConnectionManagerService);
|
|
23583
23885
|
stateRuntime = inject(WidgetPageStateRuntimeService);
|
|
23584
|
-
settingsPanel = inject(SETTINGS_PANEL_BRIDGE, {
|
|
23585
|
-
|
|
23586
|
-
|
|
23886
|
+
settingsPanel = inject(SETTINGS_PANEL_BRIDGE, {
|
|
23887
|
+
optional: true,
|
|
23888
|
+
});
|
|
23889
|
+
defaultShellEditor = inject(DYNAMIC_PAGE_SHELL_EDITOR, {
|
|
23890
|
+
optional: true,
|
|
23891
|
+
});
|
|
23892
|
+
defaultPageEditor = inject(DYNAMIC_PAGE_CONFIG_EDITOR, {
|
|
23893
|
+
optional: true,
|
|
23894
|
+
});
|
|
23587
23895
|
constructor() { }
|
|
23588
23896
|
ngOnDestroy() {
|
|
23589
23897
|
this.compositionRuntime.destroy();
|
|
23590
23898
|
}
|
|
23591
23899
|
ngOnChanges(changes) {
|
|
23592
|
-
if (changes['page'] ||
|
|
23900
|
+
if (changes['page'] ||
|
|
23901
|
+
changes['context'] ||
|
|
23902
|
+
changes['enableCustomization']) {
|
|
23593
23903
|
const parsed = this.parsePage(this.page);
|
|
23594
23904
|
const resolvedPage = parsed ? this.resolvePagePresets(parsed) : parsed;
|
|
23595
23905
|
this.assertNoLegacyConnections(resolvedPage);
|
|
23596
23906
|
this.widgetDiagnostics = {};
|
|
23597
23907
|
this.widgetDiagnosticsChange.emit({});
|
|
23598
|
-
this.pageDefinition = resolvedPage
|
|
23908
|
+
this.pageDefinition = resolvedPage
|
|
23909
|
+
? {
|
|
23910
|
+
...resolvedPage,
|
|
23911
|
+
state: this.stateRuntime.normalizeState(resolvedPage.state),
|
|
23912
|
+
}
|
|
23913
|
+
: resolvedPage;
|
|
23599
23914
|
this.pageRuntime = this.buildStateRuntime(this.pageDefinition?.state, this.pageDefinition?.context);
|
|
23600
23915
|
this.pageState = this.pageRuntime.state;
|
|
23601
23916
|
const bootstrapSnapshot = this.bootstrapCompositionAdapter(this.pageDefinition);
|
|
23602
23917
|
const rawWidgets = this.pageDefinition?.widgets || [];
|
|
23603
23918
|
let widgets = this.applyEditShellActions(rawWidgets);
|
|
23604
23919
|
widgets = this.applyBootstrapCompositionHydration(widgets, bootstrapSnapshot);
|
|
23605
|
-
this.pageDefinition = this.pageDefinition
|
|
23920
|
+
this.pageDefinition = this.pageDefinition
|
|
23921
|
+
? { ...this.pageDefinition, widgets }
|
|
23922
|
+
: this.pageDefinition;
|
|
23606
23923
|
this.page = this.pageDefinition;
|
|
23607
23924
|
this.applyResponsivePresentation(this.pageDefinition, widgets, this.pageRuntime);
|
|
23608
23925
|
this.reportStateDiagnostics(this.pageRuntime.diagnostics);
|
|
23609
23926
|
}
|
|
23610
|
-
if (this.autoPersist &&
|
|
23927
|
+
if (this.autoPersist &&
|
|
23928
|
+
(changes['pageIdentity'] || changes['componentInstanceId'])) {
|
|
23611
23929
|
this.appliedPersisted = false;
|
|
23612
23930
|
this.persistenceReady = false;
|
|
23613
23931
|
}
|
|
23614
|
-
if (this.autoPersist &&
|
|
23932
|
+
if (this.autoPersist &&
|
|
23933
|
+
!this.appliedPersisted &&
|
|
23934
|
+
(changes['page'] ||
|
|
23935
|
+
changes['context'] ||
|
|
23936
|
+
changes['pageIdentity'] ||
|
|
23937
|
+
changes['componentInstanceId'])) {
|
|
23615
23938
|
this.appliedPersisted = true;
|
|
23616
23939
|
this.loadPersistedPage();
|
|
23617
23940
|
}
|
|
23618
|
-
if (this.autoPersist &&
|
|
23941
|
+
if (this.autoPersist &&
|
|
23942
|
+
this.persistenceReady &&
|
|
23943
|
+
changes['page'] &&
|
|
23944
|
+
!this.isHydrating) {
|
|
23619
23945
|
const parsed = this.parsePage(this.page);
|
|
23620
23946
|
if (parsed)
|
|
23621
23947
|
this.savePage(parsed);
|
|
@@ -23637,7 +23963,7 @@ class DynamicWidgetPageComponent {
|
|
|
23637
23963
|
}
|
|
23638
23964
|
const state = this.stateFromCompositionSnapshot(pageWithPatchedInputs.state, cycle.snapshot.state.primaryValues);
|
|
23639
23965
|
const runtimeStatePaths = Array.from(new Set((cycle.snapshot.state.changedPaths || []).filter((path) => typeof path === 'string')));
|
|
23640
|
-
const updatedPrimaryStatePaths = runtimeStatePaths.filter((path) =>
|
|
23966
|
+
const updatedPrimaryStatePaths = runtimeStatePaths.filter((path) => !this.areStateValuesEqual(this.conn.extractByPath(this.stateRuntime.normalizeState(page.state).values || {}, path), this.conn.extractByPath(state.values || {}, path)));
|
|
23641
23967
|
let widgets = this.cloneWidgets(pageWithPatchedInputs.widgets || []);
|
|
23642
23968
|
const directDelivery = this.applyCompositionWidgetDeliveries(widgets, cycle);
|
|
23643
23969
|
widgets = directDelivery.widgets;
|
|
@@ -23649,7 +23975,10 @@ class DynamicWidgetPageComponent {
|
|
|
23649
23975
|
const stateProjectionChanged = !this.areStateValuesEqual(widgets, projectedWidgets);
|
|
23650
23976
|
widgets = projectedWidgets;
|
|
23651
23977
|
const nextRuntime = this.buildStateRuntime(state, pageWithPatchedInputs.context);
|
|
23652
|
-
if (!updatedPrimaryStatePaths.length &&
|
|
23978
|
+
if (!updatedPrimaryStatePaths.length &&
|
|
23979
|
+
!directDelivery.changed &&
|
|
23980
|
+
!stateProjectionChanged &&
|
|
23981
|
+
!widgetInputPatchResult.changed) {
|
|
23653
23982
|
return;
|
|
23654
23983
|
}
|
|
23655
23984
|
this.applyPageUpdate({ ...pageWithPatchedInputs, widgets, state }, true, nextRuntime, false);
|
|
@@ -23701,7 +24030,9 @@ class DynamicWidgetPageComponent {
|
|
|
23701
24030
|
return null;
|
|
23702
24031
|
}
|
|
23703
24032
|
const candidate = payload.inputPatch;
|
|
23704
|
-
if (!candidate ||
|
|
24033
|
+
if (!candidate ||
|
|
24034
|
+
typeof candidate !== 'object' ||
|
|
24035
|
+
Array.isArray(candidate)) {
|
|
23705
24036
|
return null;
|
|
23706
24037
|
}
|
|
23707
24038
|
return candidate;
|
|
@@ -23719,12 +24050,26 @@ class DynamicWidgetPageComponent {
|
|
|
23719
24050
|
}
|
|
23720
24051
|
applyEditShellActions(widgets) {
|
|
23721
24052
|
return this.cloneWidgets(widgets).map((widget) => {
|
|
23722
|
-
if (!this.
|
|
24053
|
+
if (!this.shouldInjectEditShellActions(widget)) {
|
|
23723
24054
|
return widget;
|
|
23724
24055
|
}
|
|
23725
24056
|
const existingActions = widget.shell?.actions || [];
|
|
23726
|
-
|
|
23727
|
-
|
|
24057
|
+
const metadata = this.componentMetadata?.get(widget.definition?.id || '');
|
|
24058
|
+
const nextActions = [...existingActions];
|
|
24059
|
+
if (metadata?.configEditor &&
|
|
24060
|
+
!nextActions.some((action) => action.id === 'component-settings')) {
|
|
24061
|
+
nextActions.push({
|
|
24062
|
+
id: 'component-settings',
|
|
24063
|
+
icon: 'tune',
|
|
24064
|
+
variant: 'icon',
|
|
24065
|
+
placement: 'header',
|
|
24066
|
+
label: this.t('controls.componentSettings', 'Configurar conteudo'),
|
|
24067
|
+
tooltip: this.t('controls.componentSettingsTooltip', 'Abrir configuracoes do componente'),
|
|
24068
|
+
});
|
|
24069
|
+
}
|
|
24070
|
+
if (nextActions.some((action) => action.id === 'widget-settings') ||
|
|
24071
|
+
!this.canOpenWidgetShellSettings()) {
|
|
24072
|
+
return this.withShellActions(widget, nextActions);
|
|
23728
24073
|
}
|
|
23729
24074
|
const widgetSettingsAction = {
|
|
23730
24075
|
id: 'widget-settings',
|
|
@@ -23734,15 +24079,23 @@ class DynamicWidgetPageComponent {
|
|
|
23734
24079
|
label: this.t('controls.widgetSettings', 'Configurar widget'),
|
|
23735
24080
|
tooltip: this.t('controls.widgetSettingsTooltip', 'Abrir configurações do widget'),
|
|
23736
24081
|
};
|
|
23737
|
-
return
|
|
23738
|
-
...widget,
|
|
23739
|
-
shell: {
|
|
23740
|
-
...(widget.shell || {}),
|
|
23741
|
-
actions: [...existingActions, widgetSettingsAction],
|
|
23742
|
-
},
|
|
23743
|
-
};
|
|
24082
|
+
return this.withShellActions(widget, [...nextActions, widgetSettingsAction]);
|
|
23744
24083
|
});
|
|
23745
24084
|
}
|
|
24085
|
+
withShellActions(widget, actions) {
|
|
24086
|
+
const existingActions = widget.shell?.actions || [];
|
|
24087
|
+
if (existingActions.length === actions.length &&
|
|
24088
|
+
existingActions.every((action, index) => action === actions[index])) {
|
|
24089
|
+
return widget;
|
|
24090
|
+
}
|
|
24091
|
+
return {
|
|
24092
|
+
...widget,
|
|
24093
|
+
shell: {
|
|
24094
|
+
...(widget.shell || {}),
|
|
24095
|
+
actions,
|
|
24096
|
+
},
|
|
24097
|
+
};
|
|
24098
|
+
}
|
|
23746
24099
|
applyBootstrapCompositionHydration(widgets, bootstrapSnapshot) {
|
|
23747
24100
|
if (!this.compositionDefinition || !bootstrapSnapshot) {
|
|
23748
24101
|
return this.cloneWidgets(widgets);
|
|
@@ -23764,10 +24117,10 @@ class DynamicWidgetPageComponent {
|
|
|
23764
24117
|
return undefined;
|
|
23765
24118
|
const definition = this.compositionDefinition ?? this.compositionFactory.create(page);
|
|
23766
24119
|
this.compositionDefinition = definition;
|
|
23767
|
-
if (!definition.links.some((link) =>
|
|
23768
|
-
|
|
23769
|
-
|
|
23770
|
-
|
|
24120
|
+
if (!definition.links.some((link) => link.from.kind === 'component-port' &&
|
|
24121
|
+
link.from.ref.widget === fromKey &&
|
|
24122
|
+
link.from.ref.port === output &&
|
|
24123
|
+
link.from.ref.direction === 'output')) {
|
|
23771
24124
|
return undefined;
|
|
23772
24125
|
}
|
|
23773
24126
|
let payload;
|
|
@@ -23810,12 +24163,15 @@ class DynamicWidgetPageComponent {
|
|
|
23810
24163
|
};
|
|
23811
24164
|
}
|
|
23812
24165
|
const linksById = new Map(this.compositionDefinition.links.map((link) => [link.id, link]));
|
|
23813
|
-
const runtimeLinks = cycle.snapshot.links.filter((link) =>
|
|
24166
|
+
const runtimeLinks = cycle.snapshot.links.filter((link) => link.lastDispatchTraceId === cycle.cycleId &&
|
|
24167
|
+
link.status === 'delivered');
|
|
23814
24168
|
let nextWidgets = this.cloneWidgets(widgets);
|
|
23815
24169
|
let changed = false;
|
|
23816
24170
|
for (const runtimeLink of runtimeLinks) {
|
|
23817
24171
|
const link = linksById.get(runtimeLink.linkId);
|
|
23818
|
-
if (!link ||
|
|
24172
|
+
if (!link ||
|
|
24173
|
+
link.from.kind === 'state' ||
|
|
24174
|
+
link.to.kind !== 'component-port') {
|
|
23819
24175
|
continue;
|
|
23820
24176
|
}
|
|
23821
24177
|
const targetRef = link.to.ref;
|
|
@@ -23892,13 +24248,13 @@ class DynamicWidgetPageComponent {
|
|
|
23892
24248
|
if (!normalizedPortId) {
|
|
23893
24249
|
return normalizedBindingPath;
|
|
23894
24250
|
}
|
|
23895
|
-
if (normalizedBindingPath === normalizedPortId
|
|
23896
|
-
|
|
23897
|
-
|
|
24251
|
+
if (normalizedBindingPath === normalizedPortId ||
|
|
24252
|
+
normalizedBindingPath.startsWith(`${normalizedPortId}.`) ||
|
|
24253
|
+
normalizedBindingPath.startsWith(`${normalizedPortId}[`)) {
|
|
23898
24254
|
return normalizedBindingPath;
|
|
23899
24255
|
}
|
|
23900
|
-
if (normalizedBindingPath.startsWith('.')
|
|
23901
|
-
|
|
24256
|
+
if (normalizedBindingPath.startsWith('.') ||
|
|
24257
|
+
normalizedBindingPath.startsWith('[')) {
|
|
23902
24258
|
return `${normalizedPortId}${normalizedBindingPath}`;
|
|
23903
24259
|
}
|
|
23904
24260
|
return `${normalizedPortId}.${normalizedBindingPath}`;
|
|
@@ -23911,15 +24267,15 @@ class DynamicWidgetPageComponent {
|
|
|
23911
24267
|
}
|
|
23912
24268
|
return `widget:${fromKey}:${output}:${timestamp}:${sequence}`;
|
|
23913
24269
|
}
|
|
23914
|
-
|
|
24270
|
+
shouldInjectEditShellActions(widget) {
|
|
23915
24271
|
if (!this.enableCustomization || !this.settingsPanel) {
|
|
23916
24272
|
return false;
|
|
23917
24273
|
}
|
|
23918
|
-
if (!(this.shellEditorComponent || this.defaultShellEditor)) {
|
|
23919
|
-
return false;
|
|
23920
|
-
}
|
|
23921
24274
|
return !!widget.shell && widget.shell.kind !== 'none';
|
|
23922
24275
|
}
|
|
24276
|
+
canOpenWidgetShellSettings() {
|
|
24277
|
+
return !!(this.shellEditorComponent || this.defaultShellEditor);
|
|
24278
|
+
}
|
|
23923
24279
|
areStateValuesEqual(left, right) {
|
|
23924
24280
|
if (left === right)
|
|
23925
24281
|
return true;
|
|
@@ -23937,8 +24293,8 @@ class DynamicWidgetPageComponent {
|
|
|
23937
24293
|
const rightKeys = Object.keys(right);
|
|
23938
24294
|
if (leftKeys.length !== rightKeys.length)
|
|
23939
24295
|
return false;
|
|
23940
|
-
return leftKeys.every((key) =>
|
|
23941
|
-
|
|
24296
|
+
return leftKeys.every((key) => Object.prototype.hasOwnProperty.call(right, key) &&
|
|
24297
|
+
this.areStateValuesEqual(left[key], right[key]));
|
|
23942
24298
|
}
|
|
23943
24299
|
return false;
|
|
23944
24300
|
}
|
|
@@ -23956,6 +24312,10 @@ class DynamicWidgetPageComponent {
|
|
|
23956
24312
|
this.widgetDiagnosticsChange.emit({ ...this.widgetDiagnostics });
|
|
23957
24313
|
}
|
|
23958
24314
|
onShellAction(fromKey, evt) {
|
|
24315
|
+
if (evt.id === 'component-settings') {
|
|
24316
|
+
this.openWidgetComponentSettings(fromKey);
|
|
24317
|
+
return;
|
|
24318
|
+
}
|
|
23959
24319
|
if (evt.id === 'widget-settings') {
|
|
23960
24320
|
this.openWidgetShellSettings(fromKey);
|
|
23961
24321
|
return;
|
|
@@ -24106,6 +24466,55 @@ class DynamicWidgetPageComponent {
|
|
|
24106
24466
|
ref.applied$.subscribe((result) => this.applyWidgetShell(key, result, false));
|
|
24107
24467
|
ref.saved$.subscribe((result) => this.applyWidgetShell(key, result, true));
|
|
24108
24468
|
}
|
|
24469
|
+
openWidgetComponentSettings(key) {
|
|
24470
|
+
if (!this.settingsPanel)
|
|
24471
|
+
return;
|
|
24472
|
+
const page = this.ensurePageDefinition();
|
|
24473
|
+
const widget = page.widgets.find((w) => w.key === key);
|
|
24474
|
+
if (!widget)
|
|
24475
|
+
return;
|
|
24476
|
+
const metadata = this.componentMetadata?.get(widget.definition?.id || '');
|
|
24477
|
+
const editor = metadata?.configEditor?.component;
|
|
24478
|
+
if (!editor)
|
|
24479
|
+
return;
|
|
24480
|
+
const ref = this.settingsPanel.open({
|
|
24481
|
+
id: `dynamic-page-component:${key}`,
|
|
24482
|
+
title: metadata.configEditor?.title ||
|
|
24483
|
+
metadata.friendlyName ||
|
|
24484
|
+
this.t('controls.componentSettings', 'Configurar conteudo'),
|
|
24485
|
+
content: {
|
|
24486
|
+
component: editor,
|
|
24487
|
+
inputs: {
|
|
24488
|
+
inputs: this.cloneStateValues(widget.definition.inputs || {}),
|
|
24489
|
+
widgetKey: key,
|
|
24490
|
+
widgetType: widget.definition?.id,
|
|
24491
|
+
},
|
|
24492
|
+
},
|
|
24493
|
+
});
|
|
24494
|
+
ref.applied$.subscribe((result) => this.applyWidgetComponentInputs(key, result, false));
|
|
24495
|
+
ref.saved$.subscribe((result) => this.applyWidgetComponentInputs(key, result, true));
|
|
24496
|
+
}
|
|
24497
|
+
applyWidgetComponentInputs(key, result, persist) {
|
|
24498
|
+
if (!result || typeof result !== 'object' || Array.isArray(result))
|
|
24499
|
+
return;
|
|
24500
|
+
const nextInputs = 'inputs' in result &&
|
|
24501
|
+
result.inputs &&
|
|
24502
|
+
typeof result.inputs === 'object' &&
|
|
24503
|
+
!Array.isArray(result.inputs)
|
|
24504
|
+
? result.inputs
|
|
24505
|
+
: result;
|
|
24506
|
+
const page = this.ensurePageDefinition();
|
|
24507
|
+
const widgets = page.widgets.map((w) => w.key === key
|
|
24508
|
+
? {
|
|
24509
|
+
...w,
|
|
24510
|
+
definition: {
|
|
24511
|
+
...w.definition,
|
|
24512
|
+
inputs: this.cloneStateValues(nextInputs),
|
|
24513
|
+
},
|
|
24514
|
+
}
|
|
24515
|
+
: w);
|
|
24516
|
+
this.applyPageUpdate({ ...page, widgets }, persist);
|
|
24517
|
+
}
|
|
24109
24518
|
openPageSettings() {
|
|
24110
24519
|
if (!this.settingsPanel)
|
|
24111
24520
|
return;
|
|
@@ -24134,7 +24543,7 @@ class DynamicWidgetPageComponent {
|
|
|
24134
24543
|
if (!result)
|
|
24135
24544
|
return;
|
|
24136
24545
|
const page = this.ensurePageDefinition();
|
|
24137
|
-
const widgets = page.widgets.map((w) =>
|
|
24546
|
+
const widgets = page.widgets.map((w) => w.key === key ? { ...w, shell: result.shell ?? null } : w);
|
|
24138
24547
|
let context = page.context || {};
|
|
24139
24548
|
if (result.applyToAll && result.pagePreset) {
|
|
24140
24549
|
const ui = { ...context.ui };
|
|
@@ -24201,7 +24610,10 @@ class DynamicWidgetPageComponent {
|
|
|
24201
24610
|
},
|
|
24202
24611
|
}).widgets
|
|
24203
24612
|
: normalizedWidgets;
|
|
24204
|
-
const hydrated = this.resolvePagePresets({
|
|
24613
|
+
const hydrated = this.resolvePagePresets({
|
|
24614
|
+
...normalized,
|
|
24615
|
+
widgets: stateBoundWidgets,
|
|
24616
|
+
});
|
|
24205
24617
|
this.pageDefinition = hydrated;
|
|
24206
24618
|
this.page = hydrated;
|
|
24207
24619
|
this.pageState = runtime.state;
|
|
@@ -24231,21 +24643,28 @@ class DynamicWidgetPageComponent {
|
|
|
24231
24643
|
this.pageColumnCount = Math.max(1, Number(canvas.columns) || 1);
|
|
24232
24644
|
this.gridTemplateColumns = `repeat(${this.pageColumnCount}, minmax(0, 1fr))`;
|
|
24233
24645
|
this.pageGap = canvas.gap || fallbackLayout?.gap || '16px';
|
|
24234
|
-
this.gridAutoRows =
|
|
24646
|
+
this.gridAutoRows =
|
|
24647
|
+
canvas.autoRows === 'content' ? 'auto' : canvas.rowUnit || '88px';
|
|
24235
24648
|
}
|
|
24236
24649
|
mergeContext(pageContext, inputContext, runtime, pageDefinition) {
|
|
24237
24650
|
const baseContext = this.buildStateContext(pageContext);
|
|
24238
24651
|
const themePresetId = pageDefinition?.themePreset || '';
|
|
24239
|
-
const themePreset = themePresetId
|
|
24652
|
+
const themePreset = themePresetId
|
|
24653
|
+
? BUILTIN_PAGE_THEME_PRESETS[themePresetId]
|
|
24654
|
+
: undefined;
|
|
24240
24655
|
const layoutPresetId = pageDefinition?.layoutPreset || '';
|
|
24241
|
-
const layoutPreset = layoutPresetId
|
|
24656
|
+
const layoutPreset = layoutPresetId
|
|
24657
|
+
? BUILTIN_PAGE_LAYOUT_PRESETS[layoutPresetId]
|
|
24658
|
+
: undefined;
|
|
24242
24659
|
return {
|
|
24243
24660
|
...baseContext,
|
|
24244
24661
|
...(inputContext || {}),
|
|
24245
24662
|
pageDeviceKind: this.resolveDeviceKind(),
|
|
24246
24663
|
pageLayoutPreset: layoutPreset || null,
|
|
24247
24664
|
pageThemePreset: themePreset || null,
|
|
24248
|
-
pageCanvas: pageDefinition?.canvas
|
|
24665
|
+
pageCanvas: pageDefinition?.canvas
|
|
24666
|
+
? this.cloneStateValues(pageDefinition.canvas)
|
|
24667
|
+
: null,
|
|
24249
24668
|
pageGrouping: this.cloneGrouping(pageDefinition?.grouping),
|
|
24250
24669
|
pageState: this.cloneStateValues(runtime.primaryValues),
|
|
24251
24670
|
pageStateDerived: this.cloneStateValues(runtime.derivedValues),
|
|
@@ -24352,7 +24771,10 @@ class DynamicWidgetPageComponent {
|
|
|
24352
24771
|
const parsed = this.parsePage(this.page);
|
|
24353
24772
|
if (parsed)
|
|
24354
24773
|
return this.resolvePagePresets(parsed);
|
|
24355
|
-
return {
|
|
24774
|
+
return {
|
|
24775
|
+
widgets: this.widgets(),
|
|
24776
|
+
state: this.stateRuntime.normalizeState(this.pageState),
|
|
24777
|
+
};
|
|
24356
24778
|
}
|
|
24357
24779
|
parsePage(input) {
|
|
24358
24780
|
if (!input)
|
|
@@ -24371,10 +24793,14 @@ class DynamicWidgetPageComponent {
|
|
|
24371
24793
|
return input;
|
|
24372
24794
|
}
|
|
24373
24795
|
resolvePagePresets(page) {
|
|
24374
|
-
const preset = page.layoutPreset
|
|
24796
|
+
const preset = page.layoutPreset
|
|
24797
|
+
? BUILTIN_PAGE_LAYOUT_PRESETS[page.layoutPreset]
|
|
24798
|
+
: undefined;
|
|
24375
24799
|
const themePresetId = page.themePreset || preset?.defaultThemePreset;
|
|
24376
24800
|
const mergedLayout = this.mergeLayout(preset?.defaultLayout, page.layout);
|
|
24377
|
-
const grouping = (page.grouping && page.grouping.length
|
|
24801
|
+
const grouping = (page.grouping && page.grouping.length
|
|
24802
|
+
? page.grouping
|
|
24803
|
+
: preset?.defaultGrouping) || undefined;
|
|
24378
24804
|
return {
|
|
24379
24805
|
...page,
|
|
24380
24806
|
layout: mergedLayout,
|
|
@@ -24421,7 +24847,9 @@ class DynamicWidgetPageComponent {
|
|
|
24421
24847
|
const widgetsWithOverrides = canvas
|
|
24422
24848
|
? this.applyCanvasLayoutToWidgets(baseWidgets, canvas)
|
|
24423
24849
|
: baseWidgets;
|
|
24424
|
-
const groups = canvas
|
|
24850
|
+
const groups = canvas
|
|
24851
|
+
? []
|
|
24852
|
+
: this.buildRenderedGroups(grouping, widgetsWithOverrides);
|
|
24425
24853
|
return {
|
|
24426
24854
|
layout,
|
|
24427
24855
|
canvas,
|
|
@@ -24492,10 +24920,13 @@ class DynamicWidgetPageComponent {
|
|
|
24492
24920
|
return widget?.definition?.inputs?.['enableCustomization'] === true;
|
|
24493
24921
|
}
|
|
24494
24922
|
selectCanvasWidget(widgetKey) {
|
|
24923
|
+
if (!this.enableCustomization)
|
|
24924
|
+
return;
|
|
24495
24925
|
if (this.selectedCanvasWidgetKey !== widgetKey) {
|
|
24496
24926
|
this.selectedCanvasWidgetKey = widgetKey;
|
|
24497
24927
|
}
|
|
24498
|
-
if (this.blockedCanvasWidgetKey &&
|
|
24928
|
+
if (this.blockedCanvasWidgetKey &&
|
|
24929
|
+
this.blockedCanvasWidgetKey !== widgetKey) {
|
|
24499
24930
|
this.blockedCanvasWidgetKey = null;
|
|
24500
24931
|
}
|
|
24501
24932
|
}
|
|
@@ -24564,7 +24995,12 @@ class DynamicWidgetPageComponent {
|
|
|
24564
24995
|
startPage: this.clonePageDefinition(this.ensurePageDefinition()),
|
|
24565
24996
|
startX: 0,
|
|
24566
24997
|
startY: 0,
|
|
24567
|
-
startItem: {
|
|
24998
|
+
startItem: {
|
|
24999
|
+
...item,
|
|
25000
|
+
constraints: item.constraints
|
|
25001
|
+
? { ...item.constraints }
|
|
25002
|
+
: undefined,
|
|
25003
|
+
},
|
|
24568
25004
|
columns,
|
|
24569
25005
|
columnWidth: 1,
|
|
24570
25006
|
rowHeight: 1,
|
|
@@ -24583,7 +25019,9 @@ class DynamicWidgetPageComponent {
|
|
|
24583
25019
|
...widget,
|
|
24584
25020
|
renderClassName,
|
|
24585
25021
|
renderSpan: override?.span,
|
|
24586
|
-
__order: typeof override?.order === 'number'
|
|
25022
|
+
__order: typeof override?.order === 'number'
|
|
25023
|
+
? override.order
|
|
25024
|
+
: Number.MAX_SAFE_INTEGER,
|
|
24587
25025
|
};
|
|
24588
25026
|
})
|
|
24589
25027
|
.filter((widget) => !!widget)
|
|
@@ -24623,7 +25061,9 @@ class DynamicWidgetPageComponent {
|
|
|
24623
25061
|
if (!item || !metrics)
|
|
24624
25062
|
return;
|
|
24625
25063
|
const pageSnapshot = this.clonePageDefinition(this.ensurePageDefinition());
|
|
24626
|
-
const pointerTarget = event.currentTarget instanceof HTMLElement
|
|
25064
|
+
const pointerTarget = event.currentTarget instanceof HTMLElement
|
|
25065
|
+
? event.currentTarget
|
|
25066
|
+
: undefined;
|
|
24627
25067
|
if (pointerTarget?.setPointerCapture) {
|
|
24628
25068
|
try {
|
|
24629
25069
|
pointerTarget.setPointerCapture(event.pointerId);
|
|
@@ -24638,7 +25078,10 @@ class DynamicWidgetPageComponent {
|
|
|
24638
25078
|
startPage: pageSnapshot,
|
|
24639
25079
|
startX: event.clientX,
|
|
24640
25080
|
startY: event.clientY,
|
|
24641
|
-
startItem: {
|
|
25081
|
+
startItem: {
|
|
25082
|
+
...item,
|
|
25083
|
+
constraints: item.constraints ? { ...item.constraints } : undefined,
|
|
25084
|
+
},
|
|
24642
25085
|
columns: metrics.columns,
|
|
24643
25086
|
columnWidth: metrics.columnWidth,
|
|
24644
25087
|
rowHeight: metrics.rowHeight,
|
|
@@ -24657,7 +25100,7 @@ class DynamicWidgetPageComponent {
|
|
|
24657
25100
|
const rect = host.getBoundingClientRect();
|
|
24658
25101
|
const gap = this.parseCssPixelValue(this.pageGap, 16);
|
|
24659
25102
|
const columns = Math.max(1, Number(canvas.columns) || 1);
|
|
24660
|
-
const availableWidth = Math.max(1, rect.width -
|
|
25103
|
+
const availableWidth = Math.max(1, rect.width - gap * Math.max(0, columns - 1));
|
|
24661
25104
|
const columnWidth = availableWidth / columns;
|
|
24662
25105
|
const rowHeight = canvas.autoRows === 'content'
|
|
24663
25106
|
? this.parseCssPixelValue(canvas.rowUnit || '88px', 88)
|
|
@@ -24690,7 +25133,9 @@ class DynamicWidgetPageComponent {
|
|
|
24690
25133
|
return { changed: false, blocked: false };
|
|
24691
25134
|
const candidate = this.normalizeCanvasItem(updater({
|
|
24692
25135
|
...current,
|
|
24693
|
-
constraints: current.constraints
|
|
25136
|
+
constraints: current.constraints
|
|
25137
|
+
? { ...current.constraints }
|
|
25138
|
+
: undefined,
|
|
24694
25139
|
}), effectiveCanvas?.columns || page.canvas.columns || 1);
|
|
24695
25140
|
const collisionPolicy = effectiveCanvas
|
|
24696
25141
|
? this.resolveCanvasCollisionPolicy(effectiveCanvas, interactionKind)
|
|
@@ -24702,7 +25147,12 @@ class DynamicWidgetPageComponent {
|
|
|
24702
25147
|
if (blocked) {
|
|
24703
25148
|
this.blockedCanvasWidgetKey = widgetKey;
|
|
24704
25149
|
this.transientCanvasItemsState.set({});
|
|
24705
|
-
this.canvasPreviewState.set({
|
|
25150
|
+
this.canvasPreviewState.set({
|
|
25151
|
+
...candidate,
|
|
25152
|
+
constraints: candidate.constraints
|
|
25153
|
+
? { ...candidate.constraints }
|
|
25154
|
+
: undefined,
|
|
25155
|
+
});
|
|
24706
25156
|
this.canvasPreviewInvalidState.set(true);
|
|
24707
25157
|
if (blockedAnnouncement) {
|
|
24708
25158
|
this.layoutAnnouncement = blockedAnnouncement;
|
|
@@ -24741,10 +25191,22 @@ class DynamicWidgetPageComponent {
|
|
|
24741
25191
|
this.transientCanvasItemsState.set(changed
|
|
24742
25192
|
? Object.fromEntries(Object.entries(placement.items).map(([key, item]) => [
|
|
24743
25193
|
key,
|
|
24744
|
-
{
|
|
25194
|
+
{
|
|
25195
|
+
...item,
|
|
25196
|
+
constraints: item.constraints
|
|
25197
|
+
? { ...item.constraints }
|
|
25198
|
+
: undefined,
|
|
25199
|
+
},
|
|
24745
25200
|
]))
|
|
24746
25201
|
: {});
|
|
24747
|
-
this.canvasPreviewState.set(changed
|
|
25202
|
+
this.canvasPreviewState.set(changed
|
|
25203
|
+
? {
|
|
25204
|
+
...placement.primaryItem,
|
|
25205
|
+
constraints: placement.primaryItem.constraints
|
|
25206
|
+
? { ...placement.primaryItem.constraints }
|
|
25207
|
+
: undefined,
|
|
25208
|
+
}
|
|
25209
|
+
: null);
|
|
24748
25210
|
this.canvasPreviewInvalidState.set(false);
|
|
24749
25211
|
}
|
|
24750
25212
|
return { changed, blocked: false, swappedWith: placement.swappedWith };
|
|
@@ -24762,7 +25224,10 @@ class DynamicWidgetPageComponent {
|
|
|
24762
25224
|
},
|
|
24763
25225
|
});
|
|
24764
25226
|
const stateBoundWidgets = previewProjection.widgets;
|
|
24765
|
-
const hydrated = this.resolvePagePresets({
|
|
25227
|
+
const hydrated = this.resolvePagePresets({
|
|
25228
|
+
...normalized,
|
|
25229
|
+
widgets: stateBoundWidgets,
|
|
25230
|
+
});
|
|
24766
25231
|
this.pageDefinition = hydrated;
|
|
24767
25232
|
this.page = hydrated;
|
|
24768
25233
|
this.pageState = runtime.state;
|
|
@@ -24781,7 +25246,8 @@ class DynamicWidgetPageComponent {
|
|
|
24781
25246
|
return page.canvas;
|
|
24782
25247
|
}
|
|
24783
25248
|
applyCanvasDrag(item, interaction, colDelta, rowDelta) {
|
|
24784
|
-
const locked = item.constraints?.lockPosition ||
|
|
25249
|
+
const locked = item.constraints?.lockPosition ||
|
|
25250
|
+
interaction.startItem.constraints?.lockPosition;
|
|
24785
25251
|
if (locked)
|
|
24786
25252
|
return item;
|
|
24787
25253
|
const nextCol = this.clampCanvasCol(interaction.startItem.col + colDelta, interaction.startItem.colSpan, interaction.columns);
|
|
@@ -24875,8 +25341,12 @@ class DynamicWidgetPageComponent {
|
|
|
24875
25341
|
}
|
|
24876
25342
|
canvasAnnouncement(kind, widgetKey) {
|
|
24877
25343
|
return kind === 'drag'
|
|
24878
|
-
? this.t('announcements.moved', 'Widget movido: {{widget}}', {
|
|
24879
|
-
|
|
25344
|
+
? this.t('announcements.moved', 'Widget movido: {{widget}}', {
|
|
25345
|
+
widget: widgetKey,
|
|
25346
|
+
})
|
|
25347
|
+
: this.t('announcements.resized', 'Widget redimensionado: {{widget}}', {
|
|
25348
|
+
widget: widgetKey,
|
|
25349
|
+
});
|
|
24880
25350
|
}
|
|
24881
25351
|
blockedCanvasAnnouncement(kind) {
|
|
24882
25352
|
return kind === 'drag'
|
|
@@ -24962,7 +25432,8 @@ class DynamicWidgetPageComponent {
|
|
|
24962
25432
|
}
|
|
24963
25433
|
return {
|
|
24964
25434
|
blocked: false,
|
|
24965
|
-
changed: !this.isSameCanvasItem(current, candidate) ||
|
|
25435
|
+
changed: !this.isSameCanvasItem(current, candidate) ||
|
|
25436
|
+
!this.isSameCanvasItem(collision.item, swappedItem),
|
|
24966
25437
|
primaryItem: candidate,
|
|
24967
25438
|
items: {
|
|
24968
25439
|
[widgetKey]: candidate,
|
|
@@ -24973,7 +25444,8 @@ class DynamicWidgetPageComponent {
|
|
|
24973
25444
|
}
|
|
24974
25445
|
findCanvasCollisions(widgetKey, candidate, canvas) {
|
|
24975
25446
|
return Object.entries(canvas.items || {})
|
|
24976
|
-
.filter(([otherKey, otherItem]) => otherKey !== widgetKey &&
|
|
25447
|
+
.filter(([otherKey, otherItem]) => otherKey !== widgetKey &&
|
|
25448
|
+
this.canvasItemsOverlap(candidate, otherItem))
|
|
24977
25449
|
.map(([key, item]) => ({ key, item }));
|
|
24978
25450
|
}
|
|
24979
25451
|
buildCanvasSwapItem(movingWidgetKey, sourceItem, targetWidgetKey, targetItem, movedItem, canvas) {
|
|
@@ -25003,24 +25475,24 @@ class DynamicWidgetPageComponent {
|
|
|
25003
25475
|
return normalizedSwapItem;
|
|
25004
25476
|
}
|
|
25005
25477
|
canPlaceCanvasItem(widgetKey, candidate, canvas) {
|
|
25006
|
-
return !Object.entries(canvas.items || {}).some(([otherKey, otherItem]) =>
|
|
25478
|
+
return !Object.entries(canvas.items || {}).some(([otherKey, otherItem]) => otherKey !== widgetKey && this.canvasItemsOverlap(candidate, otherItem));
|
|
25007
25479
|
}
|
|
25008
25480
|
canvasItemsOverlap(left, right) {
|
|
25009
25481
|
const leftRight = left.col + left.colSpan - 1;
|
|
25010
25482
|
const rightRight = right.col + right.colSpan - 1;
|
|
25011
25483
|
const leftBottom = left.row + left.rowSpan - 1;
|
|
25012
25484
|
const rightBottom = right.row + right.rowSpan - 1;
|
|
25013
|
-
return left.col <= rightRight
|
|
25014
|
-
|
|
25015
|
-
|
|
25016
|
-
|
|
25485
|
+
return (left.col <= rightRight &&
|
|
25486
|
+
leftRight >= right.col &&
|
|
25487
|
+
left.row <= rightBottom &&
|
|
25488
|
+
leftBottom >= right.row);
|
|
25017
25489
|
}
|
|
25018
25490
|
isSameCanvasItem(left, right) {
|
|
25019
|
-
return left.col === right.col
|
|
25020
|
-
|
|
25021
|
-
|
|
25022
|
-
|
|
25023
|
-
|
|
25491
|
+
return (left.col === right.col &&
|
|
25492
|
+
left.row === right.row &&
|
|
25493
|
+
left.colSpan === right.colSpan &&
|
|
25494
|
+
left.rowSpan === right.rowSpan &&
|
|
25495
|
+
left.zIndex === right.zIndex);
|
|
25024
25496
|
}
|
|
25025
25497
|
clampCanvasCol(col, span, columns) {
|
|
25026
25498
|
return this.clampNumber(col, 1, Math.max(1, columns - span + 1));
|
|
@@ -25031,7 +25503,9 @@ class DynamicWidgetPageComponent {
|
|
|
25031
25503
|
parseCssPixelValue(value, fallback) {
|
|
25032
25504
|
if (!value)
|
|
25033
25505
|
return fallback;
|
|
25034
|
-
const match = String(value)
|
|
25506
|
+
const match = String(value)
|
|
25507
|
+
.trim()
|
|
25508
|
+
.match(/^(-?\d+(?:\.\d+)?)px$/i);
|
|
25035
25509
|
if (!match)
|
|
25036
25510
|
return fallback;
|
|
25037
25511
|
const parsed = Number(match[1]);
|
|
@@ -25073,7 +25547,9 @@ class DynamicWidgetPageComponent {
|
|
|
25073
25547
|
}
|
|
25074
25548
|
return {
|
|
25075
25549
|
...group,
|
|
25076
|
-
widgetKeys: override.widgetKeys?.length
|
|
25550
|
+
widgetKeys: override.widgetKeys?.length
|
|
25551
|
+
? override.widgetKeys
|
|
25552
|
+
: group.widgetKeys,
|
|
25077
25553
|
};
|
|
25078
25554
|
})
|
|
25079
25555
|
.filter((group) => !!group);
|
|
@@ -25186,7 +25662,9 @@ class DynamicWidgetPageComponent {
|
|
|
25186
25662
|
return this.resolveRenderedCanvasItem(widget)?.zIndex ?? null;
|
|
25187
25663
|
}
|
|
25188
25664
|
widgetClassName(widget) {
|
|
25189
|
-
return widget.renderClassName ||
|
|
25665
|
+
return (widget.renderClassName ||
|
|
25666
|
+
widget.className ||
|
|
25667
|
+
'');
|
|
25190
25668
|
}
|
|
25191
25669
|
mergeClassNames(...classNames) {
|
|
25192
25670
|
const merged = classNames
|
|
@@ -25196,7 +25674,7 @@ class DynamicWidgetPageComponent {
|
|
|
25196
25674
|
return merged.length ? Array.from(new Set(merged)).join(' ') : undefined;
|
|
25197
25675
|
}
|
|
25198
25676
|
resolveRenderedCanvasItem(widget) {
|
|
25199
|
-
return this.transientCanvasItemsState()[widget.key] || widget.renderCanvasItem;
|
|
25677
|
+
return (this.transientCanvasItemsState()[widget.key] || widget.renderCanvasItem);
|
|
25200
25678
|
}
|
|
25201
25679
|
toPersistedCanonicalPage(page) {
|
|
25202
25680
|
this.assertNoLegacyConnections(page);
|
|
@@ -25207,7 +25685,10 @@ class DynamicWidgetPageComponent {
|
|
|
25207
25685
|
if (!key)
|
|
25208
25686
|
return;
|
|
25209
25687
|
try {
|
|
25210
|
-
this.storage
|
|
25688
|
+
this.storage
|
|
25689
|
+
.saveConfig(key, this.toPersistedCanonicalPage(page))
|
|
25690
|
+
.pipe(take(1))
|
|
25691
|
+
.subscribe({ error: () => { } });
|
|
25211
25692
|
}
|
|
25212
25693
|
catch { }
|
|
25213
25694
|
}
|
|
@@ -25218,7 +25699,10 @@ class DynamicWidgetPageComponent {
|
|
|
25218
25699
|
return;
|
|
25219
25700
|
}
|
|
25220
25701
|
try {
|
|
25221
|
-
this.storage
|
|
25702
|
+
this.storage
|
|
25703
|
+
.loadConfig(key)
|
|
25704
|
+
.pipe(take(1))
|
|
25705
|
+
.subscribe({
|
|
25222
25706
|
next: (stored) => {
|
|
25223
25707
|
if (!stored)
|
|
25224
25708
|
return;
|
|
@@ -25242,7 +25726,9 @@ class DynamicWidgetPageComponent {
|
|
|
25242
25726
|
if (this.pageIdentity?.routePath) {
|
|
25243
25727
|
const base = buildPageKey(this.pageIdentity);
|
|
25244
25728
|
const instance = this.sanitizeSegment(this.componentInstanceId);
|
|
25245
|
-
return instance
|
|
25729
|
+
return instance
|
|
25730
|
+
? `dynamic-page:${base}:ik=${instance}`
|
|
25731
|
+
: `dynamic-page:${base}`;
|
|
25246
25732
|
}
|
|
25247
25733
|
const id = this.componentKeyId();
|
|
25248
25734
|
if (!id)
|
|
@@ -25280,7 +25766,9 @@ class DynamicWidgetPageComponent {
|
|
|
25280
25766
|
sanitizeSegment(value) {
|
|
25281
25767
|
if (!value)
|
|
25282
25768
|
return '';
|
|
25283
|
-
return String(value)
|
|
25769
|
+
return String(value)
|
|
25770
|
+
.trim()
|
|
25771
|
+
.replace(/[\r\n\t|:]/g, '-');
|
|
25284
25772
|
}
|
|
25285
25773
|
assertNoLegacyConnections(page) {
|
|
25286
25774
|
if (!page)
|
|
@@ -25294,17 +25782,17 @@ class DynamicWidgetPageComponent {
|
|
|
25294
25782
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.17", 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" }, outputs: { pageChange: "pageChange", 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: `
|
|
25295
25783
|
<div class="pdx-page-wrapper" [class.editing]="enableCustomization">
|
|
25296
25784
|
@if (enableCustomization && showPageSettingsButton) {
|
|
25297
|
-
|
|
25298
|
-
|
|
25299
|
-
|
|
25300
|
-
|
|
25301
|
-
|
|
25302
|
-
|
|
25303
|
-
|
|
25304
|
-
|
|
25305
|
-
|
|
25306
|
-
|
|
25307
|
-
|
|
25785
|
+
<button
|
|
25786
|
+
class="pdx-page-settings"
|
|
25787
|
+
mat-icon-button
|
|
25788
|
+
type="button"
|
|
25789
|
+
[matTooltip]="pageSettingsLabel()"
|
|
25790
|
+
matTooltipPosition="below"
|
|
25791
|
+
[attr.aria-label]="pageSettingsLabel()"
|
|
25792
|
+
(click)="openPageSettings()"
|
|
25793
|
+
>
|
|
25794
|
+
<mat-icon fontSet="material-symbols-outlined">settings</mat-icon>
|
|
25795
|
+
</button>
|
|
25308
25796
|
}
|
|
25309
25797
|
<div
|
|
25310
25798
|
#pageCanvasHost
|
|
@@ -25319,8 +25807,12 @@ class DynamicWidgetPageComponent {
|
|
|
25319
25807
|
<div
|
|
25320
25808
|
class="pdx-widget pdx-widget--canvas"
|
|
25321
25809
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
25322
|
-
[class.pdx-widget--canvas-selected]="
|
|
25323
|
-
|
|
25810
|
+
[class.pdx-widget--canvas-selected]="
|
|
25811
|
+
enableCustomization && isCanvasWidgetSelected(w.key)
|
|
25812
|
+
"
|
|
25813
|
+
[class.pdx-widget--canvas-blocked]="
|
|
25814
|
+
enableCustomization && isCanvasWidgetBlocked(w.key)
|
|
25815
|
+
"
|
|
25324
25816
|
[class]="widgetClassName(w)"
|
|
25325
25817
|
[style.gridColumn]="widgetGridColumn(w)"
|
|
25326
25818
|
[style.gridRow]="widgetGridRow(w)"
|
|
@@ -25338,7 +25830,9 @@ class DynamicWidgetPageComponent {
|
|
|
25338
25830
|
[attr.aria-label]="resizeHandleLabel(handle.id)"
|
|
25339
25831
|
[title]="resizeHandleLabel(handle.id)"
|
|
25340
25832
|
(pointerdown)="startCanvasResize(w.key, handle.id, $event)"
|
|
25341
|
-
(keydown)="
|
|
25833
|
+
(keydown)="
|
|
25834
|
+
onCanvasResizeHandleKeydown(w.key, handle.id, $event)
|
|
25835
|
+
"
|
|
25342
25836
|
>
|
|
25343
25837
|
<span class="pdx-canvas-resize-grip"></span>
|
|
25344
25838
|
</button>
|
|
@@ -25351,9 +25845,11 @@ class DynamicWidgetPageComponent {
|
|
|
25351
25845
|
[dragSurfaceLabel]="dragWidgetLabel()"
|
|
25352
25846
|
(action)="onShellAction(w.key, $event)"
|
|
25353
25847
|
(dragSurfacePointerDown)="startCanvasDrag(w.key, $event)"
|
|
25354
|
-
(dragSurfaceKeydown)="
|
|
25848
|
+
(dragSurfaceKeydown)="
|
|
25849
|
+
onCanvasHandleKeydown(w.key, 'drag', $event)
|
|
25850
|
+
"
|
|
25355
25851
|
>
|
|
25356
|
-
|
|
25852
|
+
<ng-container
|
|
25357
25853
|
[dynamicWidgetLoader]="w.definition"
|
|
25358
25854
|
[ownerWidgetKey]="w.key"
|
|
25359
25855
|
[context]="mergedContext"
|
|
@@ -25377,7 +25873,15 @@ class DynamicWidgetPageComponent {
|
|
|
25377
25873
|
@for (group of renderedGroups(); track group.id) {
|
|
25378
25874
|
<section
|
|
25379
25875
|
class="pdx-group"
|
|
25380
|
-
[class]="
|
|
25876
|
+
[class]="
|
|
25877
|
+
'pdx-group--' +
|
|
25878
|
+
group.kind +
|
|
25879
|
+
(group.layout ? ' pdx-group--layout-' + group.layout : '') +
|
|
25880
|
+
(group.emphasis
|
|
25881
|
+
? ' pdx-group--emphasis-' + group.emphasis
|
|
25882
|
+
: '') +
|
|
25883
|
+
(group.side ? ' pdx-group--side-' + group.side : '')
|
|
25884
|
+
"
|
|
25381
25885
|
[style.gridColumn]="groupGridColumn(group)"
|
|
25382
25886
|
[attr.data-group-id]="group.id"
|
|
25383
25887
|
[attr.data-group-kind]="group.kind"
|
|
@@ -25403,9 +25907,19 @@ class DynamicWidgetPageComponent {
|
|
|
25403
25907
|
</div>
|
|
25404
25908
|
@for (tab of group.tabs || []; track tab.id) {
|
|
25405
25909
|
@if (activeTabId(group.id) === tab.id) {
|
|
25406
|
-
<div
|
|
25910
|
+
<div
|
|
25911
|
+
class="pdx-group-content"
|
|
25912
|
+
[class]="
|
|
25913
|
+
'pdx-group-content--' +
|
|
25914
|
+
resolveGroupContentLayout(group)
|
|
25915
|
+
"
|
|
25916
|
+
>
|
|
25407
25917
|
@for (w of tab.widgets; track w.key) {
|
|
25408
|
-
<div
|
|
25918
|
+
<div
|
|
25919
|
+
class="pdx-widget"
|
|
25920
|
+
[class]="w.renderClassName || w.className || ''"
|
|
25921
|
+
[style.gridColumn]="widgetGridColumn(w)"
|
|
25922
|
+
>
|
|
25409
25923
|
<praxis-widget-shell
|
|
25410
25924
|
[shell]="w.shell"
|
|
25411
25925
|
[context]="mergedContext"
|
|
@@ -25418,7 +25932,9 @@ class DynamicWidgetPageComponent {
|
|
|
25418
25932
|
[strictValidation]="strictValidation"
|
|
25419
25933
|
[autoWireOutputs]="shouldAutoWireOutputs(w)"
|
|
25420
25934
|
(widgetEvent)="onWidgetEvent(w.key, $event)"
|
|
25421
|
-
(widgetDiagnostic)="
|
|
25935
|
+
(widgetDiagnostic)="
|
|
25936
|
+
onWidgetDiagnostic(w.key, $event)
|
|
25937
|
+
"
|
|
25422
25938
|
></ng-container>
|
|
25423
25939
|
</praxis-widget-shell>
|
|
25424
25940
|
</div>
|
|
@@ -25428,9 +25944,18 @@ class DynamicWidgetPageComponent {
|
|
|
25428
25944
|
}
|
|
25429
25945
|
</div>
|
|
25430
25946
|
} @else {
|
|
25431
|
-
<div
|
|
25947
|
+
<div
|
|
25948
|
+
class="pdx-group-content"
|
|
25949
|
+
[class]="
|
|
25950
|
+
'pdx-group-content--' + resolveGroupContentLayout(group)
|
|
25951
|
+
"
|
|
25952
|
+
>
|
|
25432
25953
|
@for (w of group.widgets; track w.key) {
|
|
25433
|
-
<div
|
|
25954
|
+
<div
|
|
25955
|
+
class="pdx-widget"
|
|
25956
|
+
[class]="widgetClassName(w)"
|
|
25957
|
+
[style.gridColumn]="widgetGridColumn(w)"
|
|
25958
|
+
>
|
|
25434
25959
|
<praxis-widget-shell
|
|
25435
25960
|
[shell]="w.shell"
|
|
25436
25961
|
[context]="mergedContext"
|
|
@@ -25454,7 +25979,11 @@ class DynamicWidgetPageComponent {
|
|
|
25454
25979
|
}
|
|
25455
25980
|
} @else {
|
|
25456
25981
|
@for (w of widgets(); track w.key) {
|
|
25457
|
-
<div
|
|
25982
|
+
<div
|
|
25983
|
+
class="pdx-widget"
|
|
25984
|
+
[class]="widgetClassName(w)"
|
|
25985
|
+
[style.gridColumn]="widgetGridColumn(w)"
|
|
25986
|
+
>
|
|
25458
25987
|
<praxis-widget-shell
|
|
25459
25988
|
[shell]="w.shell"
|
|
25460
25989
|
[context]="mergedContext"
|
|
@@ -25475,27 +26004,36 @@ class DynamicWidgetPageComponent {
|
|
|
25475
26004
|
}
|
|
25476
26005
|
</div>
|
|
25477
26006
|
@if (layoutAnnouncement) {
|
|
25478
|
-
<div class="pdx-sr-only" aria-live="polite">
|
|
26007
|
+
<div class="pdx-sr-only" aria-live="polite">
|
|
26008
|
+
{{ layoutAnnouncement }}
|
|
26009
|
+
</div>
|
|
25479
26010
|
}
|
|
25480
26011
|
</div>
|
|
25481
26012
|
`, 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--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-selected:before{border:1px dashed color-mix(in srgb,var(--md-sys-color-primary) 34%,transparent);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-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-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: i8.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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"] }] });
|
|
25482
26013
|
}
|
|
25483
26014
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DynamicWidgetPageComponent, decorators: [{
|
|
25484
26015
|
type: Component,
|
|
25485
|
-
args: [{ selector: 'praxis-dynamic-page', standalone: true, imports: [
|
|
26016
|
+
args: [{ selector: 'praxis-dynamic-page', standalone: true, imports: [
|
|
26017
|
+
CommonModule,
|
|
26018
|
+
MatButtonModule,
|
|
26019
|
+
MatIconModule,
|
|
26020
|
+
MatTooltipModule,
|
|
26021
|
+
DynamicWidgetLoaderDirective,
|
|
26022
|
+
WidgetShellComponent,
|
|
26023
|
+
], providers: [providePraxisI18nConfig(DYNAMIC_WIDGET_PAGE_I18N_CONFIG)], template: `
|
|
25486
26024
|
<div class="pdx-page-wrapper" [class.editing]="enableCustomization">
|
|
25487
26025
|
@if (enableCustomization && showPageSettingsButton) {
|
|
25488
|
-
|
|
25489
|
-
|
|
25490
|
-
|
|
25491
|
-
|
|
25492
|
-
|
|
25493
|
-
|
|
25494
|
-
|
|
25495
|
-
|
|
25496
|
-
|
|
25497
|
-
|
|
25498
|
-
|
|
26026
|
+
<button
|
|
26027
|
+
class="pdx-page-settings"
|
|
26028
|
+
mat-icon-button
|
|
26029
|
+
type="button"
|
|
26030
|
+
[matTooltip]="pageSettingsLabel()"
|
|
26031
|
+
matTooltipPosition="below"
|
|
26032
|
+
[attr.aria-label]="pageSettingsLabel()"
|
|
26033
|
+
(click)="openPageSettings()"
|
|
26034
|
+
>
|
|
26035
|
+
<mat-icon fontSet="material-symbols-outlined">settings</mat-icon>
|
|
26036
|
+
</button>
|
|
25499
26037
|
}
|
|
25500
26038
|
<div
|
|
25501
26039
|
#pageCanvasHost
|
|
@@ -25510,8 +26048,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25510
26048
|
<div
|
|
25511
26049
|
class="pdx-widget pdx-widget--canvas"
|
|
25512
26050
|
[class.pdx-widget--interactive]="enableCustomization"
|
|
25513
|
-
[class.pdx-widget--canvas-selected]="
|
|
25514
|
-
|
|
26051
|
+
[class.pdx-widget--canvas-selected]="
|
|
26052
|
+
enableCustomization && isCanvasWidgetSelected(w.key)
|
|
26053
|
+
"
|
|
26054
|
+
[class.pdx-widget--canvas-blocked]="
|
|
26055
|
+
enableCustomization && isCanvasWidgetBlocked(w.key)
|
|
26056
|
+
"
|
|
25515
26057
|
[class]="widgetClassName(w)"
|
|
25516
26058
|
[style.gridColumn]="widgetGridColumn(w)"
|
|
25517
26059
|
[style.gridRow]="widgetGridRow(w)"
|
|
@@ -25529,7 +26071,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25529
26071
|
[attr.aria-label]="resizeHandleLabel(handle.id)"
|
|
25530
26072
|
[title]="resizeHandleLabel(handle.id)"
|
|
25531
26073
|
(pointerdown)="startCanvasResize(w.key, handle.id, $event)"
|
|
25532
|
-
(keydown)="
|
|
26074
|
+
(keydown)="
|
|
26075
|
+
onCanvasResizeHandleKeydown(w.key, handle.id, $event)
|
|
26076
|
+
"
|
|
25533
26077
|
>
|
|
25534
26078
|
<span class="pdx-canvas-resize-grip"></span>
|
|
25535
26079
|
</button>
|
|
@@ -25542,9 +26086,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25542
26086
|
[dragSurfaceLabel]="dragWidgetLabel()"
|
|
25543
26087
|
(action)="onShellAction(w.key, $event)"
|
|
25544
26088
|
(dragSurfacePointerDown)="startCanvasDrag(w.key, $event)"
|
|
25545
|
-
(dragSurfaceKeydown)="
|
|
26089
|
+
(dragSurfaceKeydown)="
|
|
26090
|
+
onCanvasHandleKeydown(w.key, 'drag', $event)
|
|
26091
|
+
"
|
|
25546
26092
|
>
|
|
25547
|
-
|
|
26093
|
+
<ng-container
|
|
25548
26094
|
[dynamicWidgetLoader]="w.definition"
|
|
25549
26095
|
[ownerWidgetKey]="w.key"
|
|
25550
26096
|
[context]="mergedContext"
|
|
@@ -25568,7 +26114,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25568
26114
|
@for (group of renderedGroups(); track group.id) {
|
|
25569
26115
|
<section
|
|
25570
26116
|
class="pdx-group"
|
|
25571
|
-
[class]="
|
|
26117
|
+
[class]="
|
|
26118
|
+
'pdx-group--' +
|
|
26119
|
+
group.kind +
|
|
26120
|
+
(group.layout ? ' pdx-group--layout-' + group.layout : '') +
|
|
26121
|
+
(group.emphasis
|
|
26122
|
+
? ' pdx-group--emphasis-' + group.emphasis
|
|
26123
|
+
: '') +
|
|
26124
|
+
(group.side ? ' pdx-group--side-' + group.side : '')
|
|
26125
|
+
"
|
|
25572
26126
|
[style.gridColumn]="groupGridColumn(group)"
|
|
25573
26127
|
[attr.data-group-id]="group.id"
|
|
25574
26128
|
[attr.data-group-kind]="group.kind"
|
|
@@ -25594,9 +26148,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25594
26148
|
</div>
|
|
25595
26149
|
@for (tab of group.tabs || []; track tab.id) {
|
|
25596
26150
|
@if (activeTabId(group.id) === tab.id) {
|
|
25597
|
-
<div
|
|
26151
|
+
<div
|
|
26152
|
+
class="pdx-group-content"
|
|
26153
|
+
[class]="
|
|
26154
|
+
'pdx-group-content--' +
|
|
26155
|
+
resolveGroupContentLayout(group)
|
|
26156
|
+
"
|
|
26157
|
+
>
|
|
25598
26158
|
@for (w of tab.widgets; track w.key) {
|
|
25599
|
-
<div
|
|
26159
|
+
<div
|
|
26160
|
+
class="pdx-widget"
|
|
26161
|
+
[class]="w.renderClassName || w.className || ''"
|
|
26162
|
+
[style.gridColumn]="widgetGridColumn(w)"
|
|
26163
|
+
>
|
|
25600
26164
|
<praxis-widget-shell
|
|
25601
26165
|
[shell]="w.shell"
|
|
25602
26166
|
[context]="mergedContext"
|
|
@@ -25609,7 +26173,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25609
26173
|
[strictValidation]="strictValidation"
|
|
25610
26174
|
[autoWireOutputs]="shouldAutoWireOutputs(w)"
|
|
25611
26175
|
(widgetEvent)="onWidgetEvent(w.key, $event)"
|
|
25612
|
-
(widgetDiagnostic)="
|
|
26176
|
+
(widgetDiagnostic)="
|
|
26177
|
+
onWidgetDiagnostic(w.key, $event)
|
|
26178
|
+
"
|
|
25613
26179
|
></ng-container>
|
|
25614
26180
|
</praxis-widget-shell>
|
|
25615
26181
|
</div>
|
|
@@ -25619,9 +26185,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25619
26185
|
}
|
|
25620
26186
|
</div>
|
|
25621
26187
|
} @else {
|
|
25622
|
-
<div
|
|
26188
|
+
<div
|
|
26189
|
+
class="pdx-group-content"
|
|
26190
|
+
[class]="
|
|
26191
|
+
'pdx-group-content--' + resolveGroupContentLayout(group)
|
|
26192
|
+
"
|
|
26193
|
+
>
|
|
25623
26194
|
@for (w of group.widgets; track w.key) {
|
|
25624
|
-
<div
|
|
26195
|
+
<div
|
|
26196
|
+
class="pdx-widget"
|
|
26197
|
+
[class]="widgetClassName(w)"
|
|
26198
|
+
[style.gridColumn]="widgetGridColumn(w)"
|
|
26199
|
+
>
|
|
25625
26200
|
<praxis-widget-shell
|
|
25626
26201
|
[shell]="w.shell"
|
|
25627
26202
|
[context]="mergedContext"
|
|
@@ -25645,7 +26220,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25645
26220
|
}
|
|
25646
26221
|
} @else {
|
|
25647
26222
|
@for (w of widgets(); track w.key) {
|
|
25648
|
-
<div
|
|
26223
|
+
<div
|
|
26224
|
+
class="pdx-widget"
|
|
26225
|
+
[class]="widgetClassName(w)"
|
|
26226
|
+
[style.gridColumn]="widgetGridColumn(w)"
|
|
26227
|
+
>
|
|
25649
26228
|
<praxis-widget-shell
|
|
25650
26229
|
[shell]="w.shell"
|
|
25651
26230
|
[context]="mergedContext"
|
|
@@ -25666,7 +26245,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImpo
|
|
|
25666
26245
|
}
|
|
25667
26246
|
</div>
|
|
25668
26247
|
@if (layoutAnnouncement) {
|
|
25669
|
-
<div class="pdx-sr-only" aria-live="polite">
|
|
26248
|
+
<div class="pdx-sr-only" aria-live="polite">
|
|
26249
|
+
{{ layoutAnnouncement }}
|
|
26250
|
+
</div>
|
|
25670
26251
|
}
|
|
25671
26252
|
</div>
|
|
25672
26253
|
`, 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--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-selected:before{border:1px dashed color-mix(in srgb,var(--md-sys-color-primary) 34%,transparent);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-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-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"] }]
|
|
@@ -27159,4 +27740,4 @@ function provideHookWhitelist(allowed) {
|
|
|
27159
27740
|
* Generated bundle index. Do not edit.
|
|
27160
27741
|
*/
|
|
27161
27742
|
|
|
27162
|
-
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, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, 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$1 as GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_CATALOG as GLOBAL_ACTION_SPEC_CATALOG, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_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, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_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_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, 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, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisLayerScaleCss, buildSchemaId, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getGlobalActionCatalog, getGlobalActionUiSchema, getReferencedFieldMetadata, getTextTransformer, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isInlineFilterControlType, isRangeValidForFilter, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormMetadata, normalizePath, normalizePraxisDataQueryContext, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, withMessage, withPraxisHttpLoading };
|
|
27743
|
+
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, DYNAMIC_PAGE_AI_CAPABILITIES, DYNAMIC_PAGE_COMPONENT_CONTEXT_PACK, DYNAMIC_PAGE_CONFIG_EDITOR, DYNAMIC_PAGE_SHELL_EDITOR, DefaultLoadingRenderer, DeferredAsyncConfigStorage, 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$1 as GLOBAL_ACTION_CATALOG, GLOBAL_ACTION_HANDLERS, GLOBAL_ACTION_CATALOG as GLOBAL_ACTION_SPEC_CATALOG, GLOBAL_ACTION_UI_SCHEMAS, GLOBAL_ANALYTICS_SERVICE, GLOBAL_API_CLIENT, GLOBAL_CONFIG, GLOBAL_DIALOG_SERVICE, GLOBAL_ROUTE_GUARD_RESOLVER, GLOBAL_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, NumericFormat, OVERLAY_DECIDER_DEBUG, OVERLAY_DECISION_MATRIX, ObservabilityDashboardService, OverlayDeciderService, PRAXIS_CORPORATE_SENSITIVE_KEYS, PRAXIS_DEFAULT_OBSERVABILITY_ALERT_RULES, PRAXIS_DYNAMIC_PAGE_COMPONENT_METADATA, PRAXIS_FOOTER_LINKS_METADATA, PRAXIS_GLOBAL_ACTION_CATALOG, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_OPTIONS, PRAXIS_GLOBAL_CONFIG_BOOTSTRAP_READY, PRAXIS_GLOBAL_CONFIG_TENANT_RESOLVER, PRAXIS_HERO_BANNER_METADATA, PRAXIS_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_RICH_TEXT_BLOCK_METADATA, PRAXIS_TELEMETRY_TRANSPORT, PRAXIS_USER_CONTEXT_SUMMARY_METADATA, PRIVACY_CONSENT_EDITORIAL_SOLUTION, PRIVACY_CONSENT_EDITORIAL_TEMPLATE, PraxisCore, PraxisFooterLinksComponent, PraxisGlobalErrorHandler, PraxisHeroBannerComponent, PraxisI18nService, PraxisIconDirective, PraxisIconPickerComponent, PraxisJsonLogicError, PraxisJsonLogicService, PraxisLayerScaleStyleService, PraxisLegalNoticeComponent, PraxisLoadingInterceptor, PraxisRichTextBlockComponent, 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, TABLE_CONFIG_EDITOR, TableConfigService, TelemetryLoggerSink, TelemetryService, ValidationPattern, WidgetPageStateRuntimeService, WidgetShellComponent, applyLocalCustomizations$2 as applyLocalCustomizations, applyLocalCustomizations$1 as applyLocalFormCustomizations, buildAngularValidators, buildApiUrl, buildBaseColumnFromDef, buildBaseFormField, buildFormConfigFromEditorialTemplate, buildHeaders, buildPageKey, buildPraxisLayerScaleCss, buildSchemaId, buildValidatorsFromValidatorOptions, cancelIfCpfInvalidHook, clampRange, cloneTableConfig, cnpjAlphaValidator, collapseWhitespace, composeHeadersWithVersion, conditionalAsyncValidator, convertFormLayoutToConfig, createCorporateLoggerConfig, createCorporateObservabilityOptions, createCpfCnpjValidator, createDefaultFormConfig, createDefaultTableConfig, createEmptyFormConfig, createEmptyRichContentDocument, createPersistedPage, customAsyncValidatorFn, customValidatorFn, debounceAsyncValidator, deepMerge, ensureIds, ensureNoConflictsHookFactory, ensurePageIds, extractNormalizedError, fetchWithETag, fileTypeValidator, fillUndefined, generateId, getDefaultFormHints, getEditorialCompliancePresetById, getEditorialFormTemplateById, getEditorialFormTemplateCatalog, getEditorialSolutionById, getEditorialSolutionCatalog, getEditorialSolutionPresetById, getEditorialThemePresetById, getEssentialConfig, getFieldMetadataCapabilities, getGlobalActionCatalog, getGlobalActionUiSchema, getReferencedFieldMetadata, getTextTransformer, interpolatePraxisTranslation, isAllowedEditorialContentFormat, isAllowedEditorialHref, isCssTextTransform, isEditorialComponentMeta, isInlineFilterControlType, isRangeValidForFilter, isTableConfigV2, isValidFormConfig, isValidTableConfig, legacyCnpjValidator, legacyCpfValidator, logOnErrorHook, mapFieldDefinitionToMetadata, mapFieldDefinitionsToMetadata, matchFieldValidator, maxFileSizeValidator, mergeFieldMetadata, mergePraxisI18nConfigs, mergeTableConfigs, migrateFormLayoutRule, migrateLegacyCompositionLink, migrateLegacyCompositionLinks, minWordsValidator, normalizeControlTypeKey, normalizeControlTypeToken, normalizeEditorialLink, normalizeEnd, normalizeFieldConstraints, normalizeFormConfig, normalizeFormMetadata, normalizePath, normalizePraxisDataQueryContext, normalizeResourceAvailabilityReasonCode, normalizeStart, normalizeUnknownError, notifySuccessHook, parseJsonResponseOrEmpty, praxisLoadingInterceptorFn, prefillFromContextHook, provideDefaultFormHooks, provideFieldSelectorRegistryBase, provideFieldSelectorRegistryOverride, provideFieldSelectorRegistryRuntime, provideFormHookPresets, provideFormHooks, provideGlobalActionCatalog, provideGlobalActionHandler, provideGlobalConfig, provideGlobalConfigReady, provideGlobalConfigSeed, provideGlobalConfigTenant, provideHookResolvers, provideHookWhitelist, provideOverlayDecisionMatrix, providePraxisAnalyticsGlobalActions, providePraxisDynamicPageMetadata, providePraxisFooterLinksMetadata, providePraxisGlobalActionCatalog, providePraxisGlobalActions, providePraxisGlobalConfigBootstrap, providePraxisHeroBannerMetadata, providePraxisHttpLoading, providePraxisI18n, providePraxisI18nConfig, providePraxisI18nTranslator, providePraxisIconDefaults, providePraxisJsonLogicOperator, providePraxisJsonLogicOperatorOverride, providePraxisLegalNoticeMetadata, providePraxisLoadingDefaults, providePraxisLogging, providePraxisRichTextBlockMetadata, providePraxisToastGlobalActions, providePraxisUserContextSummaryMetadata, provideRemoteGlobalConfig, reconcileFilterConfig, reconcileFormConfig, reconcileTableConfig, removeDiacritics, reportTelemetryHookFactory, requiredCheckedValidator, resolveBuiltinPresets, resolveControlTypeAlias, resolveDefaultValuePresentationFormat, resolveHidden, resolveInlineFilterControlType, resolveInlineFilterControlTypeToBaseControlType, resolveLoggerConfig, resolveObservabilityOptions, resolveOffset, resolveOrder, resolvePraxisFilterCriteria, resolveResourceAvailabilityReasonKey, resolveSpan, resolveValuePresentation, resolveValuePresentationLocale, slugify, stripMasksHook, supportsImplicitValuePresentation, syncWithServerMetadata, toCamel, toCapitalize, toKebab, toPascal, toSentenceCase, toSnake, toTitleCase, translateResourceAvailabilityReason, translateResourceDiscoveryText, translateUnavailableWorkflowMessage, trim, uniqueAsyncValidator, urlValidator, withMessage, withPraxisHttpLoading };
|