@praxisui/visual-builder 9.0.5-rc.4 → 9.0.5-rc.40
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
CHANGED
|
@@ -135,6 +135,7 @@ Boundary rules:
|
|
|
135
135
|
- effects must be constrained by target property schemas and `RULE_PROPERTY_SCHEMA`
|
|
136
136
|
- `dsl.roundTrip.validate` validates the JSON export/import path currently implemented by `RuleBuilderService`; form-config import remains supported but is not advertised as a round-trip export target by this operation
|
|
137
137
|
- field-to-field comparisons are part of the supported visual subset; context-variable and function-result operands in field conditions remain planned until a canonical JSON Logic shape exists
|
|
138
|
+
- field operands wrapped by the canonical Praxis `coalesce` operator round-trip without semantic loss; the editor preserves that nullish-value transform while fields or operators are changed
|
|
138
139
|
- component-specific configuration belongs to child component manifests
|
|
139
140
|
|
|
140
141
|
## Legacy Note
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": "1.0.0",
|
|
3
|
-
"generatedAt": "2026-08-
|
|
3
|
+
"generatedAt": "2026-08-19T22:31:49.659Z",
|
|
4
4
|
"packageName": "@praxisui/visual-builder",
|
|
5
|
-
"packageVersion": "9.0.5-rc.
|
|
5
|
+
"packageVersion": "9.0.5-rc.40",
|
|
6
6
|
"sourceRegistry": "praxis-component-registry-ingestion",
|
|
7
7
|
"sourceRegistryVersion": "1.0.0",
|
|
8
8
|
"componentCount": 1,
|
|
@@ -1545,7 +1545,10 @@ class RuleBuilderService {
|
|
|
1545
1545
|
return null;
|
|
1546
1546
|
}
|
|
1547
1547
|
return {
|
|
1548
|
-
[operator]: [
|
|
1548
|
+
[operator]: [
|
|
1549
|
+
this.buildFieldOperand(cfg.fieldName, cfg.fieldValueTransform),
|
|
1550
|
+
this.buildConditionRightOperand(cfg),
|
|
1551
|
+
],
|
|
1549
1552
|
};
|
|
1550
1553
|
}
|
|
1551
1554
|
if (node.type === RuleNodeType.AND_GROUP || node.type === RuleNodeType.OR_GROUP) {
|
|
@@ -1957,18 +1960,26 @@ class RuleBuilderService {
|
|
|
1957
1960
|
return undefined;
|
|
1958
1961
|
}
|
|
1959
1962
|
const [left, right] = normalizedArgs;
|
|
1960
|
-
|
|
1963
|
+
const leftOperand = this.parseFieldOperand(left);
|
|
1964
|
+
if (!leftOperand) {
|
|
1961
1965
|
return undefined;
|
|
1962
1966
|
}
|
|
1963
1967
|
const config = {
|
|
1964
1968
|
type: 'fieldCondition',
|
|
1965
|
-
fieldName:
|
|
1969
|
+
fieldName: leftOperand.path,
|
|
1966
1970
|
operator: builderOperator,
|
|
1967
1971
|
value: right,
|
|
1968
1972
|
};
|
|
1969
|
-
if (
|
|
1973
|
+
if (leftOperand.transform) {
|
|
1974
|
+
config['fieldValueTransform'] = leftOperand.transform;
|
|
1975
|
+
}
|
|
1976
|
+
const rightOperand = this.parseFieldOperand(right);
|
|
1977
|
+
if (rightOperand) {
|
|
1970
1978
|
config['valueType'] = 'field';
|
|
1971
|
-
config['compareToField'] =
|
|
1979
|
+
config['compareToField'] = rightOperand.path;
|
|
1980
|
+
if (rightOperand.transform) {
|
|
1981
|
+
config['compareToFieldValueTransform'] = rightOperand.transform;
|
|
1982
|
+
}
|
|
1972
1983
|
}
|
|
1973
1984
|
return {
|
|
1974
1985
|
id: v4(),
|
|
@@ -2091,10 +2102,34 @@ class RuleBuilderService {
|
|
|
2091
2102
|
if (cfg['valueType'] === 'field' &&
|
|
2092
2103
|
typeof cfg['compareToField'] === 'string' &&
|
|
2093
2104
|
cfg['compareToField'].trim()) {
|
|
2094
|
-
return
|
|
2105
|
+
return this.buildFieldOperand(cfg['compareToField'].trim(), cfg['compareToFieldValueTransform']);
|
|
2095
2106
|
}
|
|
2096
2107
|
return this.normalizeConditionValue(cfg['value']);
|
|
2097
2108
|
}
|
|
2109
|
+
buildFieldOperand(path, transform) {
|
|
2110
|
+
const variable = { var: path };
|
|
2111
|
+
return transform === 'coalesce' ? { coalesce: [variable] } : variable;
|
|
2112
|
+
}
|
|
2113
|
+
parseFieldOperand(value) {
|
|
2114
|
+
if (this.isVarExpression(value)) {
|
|
2115
|
+
return { path: this.extractVarPath(value.var) };
|
|
2116
|
+
}
|
|
2117
|
+
if (!value ||
|
|
2118
|
+
typeof value !== 'object' ||
|
|
2119
|
+
Array.isArray(value) ||
|
|
2120
|
+
!('coalesce' in value)) {
|
|
2121
|
+
return null;
|
|
2122
|
+
}
|
|
2123
|
+
const args = value.coalesce;
|
|
2124
|
+
const normalizedArgs = Array.isArray(args) ? args : [args];
|
|
2125
|
+
if (normalizedArgs.length !== 1 || !this.isVarExpression(normalizedArgs[0])) {
|
|
2126
|
+
return null;
|
|
2127
|
+
}
|
|
2128
|
+
return {
|
|
2129
|
+
path: this.extractVarPath(normalizedArgs[0].var),
|
|
2130
|
+
transform: 'coalesce',
|
|
2131
|
+
};
|
|
2132
|
+
}
|
|
2098
2133
|
isJsonLogicExpressionCandidate(value) {
|
|
2099
2134
|
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
2100
2135
|
}
|
|
@@ -4755,6 +4790,7 @@ class PropertyEffectEditorComponent {
|
|
|
4755
4790
|
size="dense"
|
|
4756
4791
|
matSuffix
|
|
4757
4792
|
type="button"
|
|
4793
|
+
[attr.aria-label]="getDefinition(entry.property)?.description"
|
|
4758
4794
|
[matTooltip]="getDefinition(entry.property)?.description"
|
|
4759
4795
|
matTooltipPosition="above"
|
|
4760
4796
|
>
|
|
@@ -5073,6 +5109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
5073
5109
|
size="dense"
|
|
5074
5110
|
matSuffix
|
|
5075
5111
|
type="button"
|
|
5112
|
+
[attr.aria-label]="getDefinition(entry.property)?.description"
|
|
5076
5113
|
[matTooltip]="getDefinition(entry.property)?.description"
|
|
5077
5114
|
matTooltipPosition="above"
|
|
5078
5115
|
>
|
|
@@ -5463,6 +5500,8 @@ class FieldConditionEditorComponent {
|
|
|
5463
5500
|
valueType,
|
|
5464
5501
|
compareToField: valueType === 'field' ? formValue.compareToField : '',
|
|
5465
5502
|
contextVariable: '',
|
|
5503
|
+
fieldValueTransform: this.config?.fieldValueTransform,
|
|
5504
|
+
compareToFieldValueTransform: valueType === 'field' ? this.config?.compareToFieldValueTransform : undefined,
|
|
5466
5505
|
};
|
|
5467
5506
|
this.configChanged.emit(config);
|
|
5468
5507
|
}
|
|
@@ -5847,6 +5886,7 @@ class FieldConditionEditorComponent {
|
|
|
5847
5886
|
size="dense"
|
|
5848
5887
|
matSuffix
|
|
5849
5888
|
type="button"
|
|
5889
|
+
[attr.aria-label]="selectedField?.description"
|
|
5850
5890
|
[matTooltip]="selectedField?.description"
|
|
5851
5891
|
matTooltipPosition="above"
|
|
5852
5892
|
>
|
|
@@ -5901,15 +5941,18 @@ class FieldConditionEditorComponent {
|
|
|
5901
5941
|
formControlName="value"
|
|
5902
5942
|
[placeholder]="getValuePlaceholder()"
|
|
5903
5943
|
/>
|
|
5904
|
-
|
|
5905
|
-
|
|
5906
|
-
|
|
5907
|
-
|
|
5908
|
-
|
|
5909
|
-
|
|
5910
|
-
|
|
5911
|
-
|
|
5912
|
-
|
|
5944
|
+
@if (getValueHint()) {
|
|
5945
|
+
<button
|
|
5946
|
+
praxisIconButton="help_outline"
|
|
5947
|
+
size="dense"
|
|
5948
|
+
matSuffix
|
|
5949
|
+
type="button"
|
|
5950
|
+
[attr.aria-label]="getValueHint()"
|
|
5951
|
+
[matTooltip]="getValueHint()"
|
|
5952
|
+
matTooltipPosition="above"
|
|
5953
|
+
>
|
|
5954
|
+
</button>
|
|
5955
|
+
}
|
|
5913
5956
|
</mat-form-field>
|
|
5914
5957
|
}
|
|
5915
5958
|
@if (isBooleanField()) {
|
|
@@ -6059,7 +6102,7 @@ class FieldConditionEditorComponent {
|
|
|
6059
6102
|
</div>
|
|
6060
6103
|
}
|
|
6061
6104
|
</form>
|
|
6062
|
-
`, isInline: true, styles: [".field-condition-form{display:flex;flex-direction:column;gap:8px;min-width:
|
|
6105
|
+
`, isInline: true, styles: [".field-condition-form{display:flex;flex-direction:column;gap:8px;width:100%;min-width:0;max-width:100%;box-sizing:border-box;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;padding:8px 10px;overflow:visible}.condition-row-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:4px}.condition-title{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:var(--md-sys-color-on-surface)}.compact-grid{gap:12px}.condition-row{display:grid;grid-template-columns:minmax(180px,2fr) minmax(140px,1.5fr) minmax(220px,3fr) auto;gap:12px 4px;align-items:center;min-width:0}.condition-row>*,.value-inline,.compact-field,.value-field{min-width:0;max-width:100%}.compact-field{width:100%}.value-inline{display:grid;grid-template-columns:1.2fr 2fr;gap:8px;align-items:center}.value-field{width:100%}.field-option,.context-option,.function-option{display:flex;align-items:center;gap:8px;width:100%}.field-icon{font-size:16px;width:16px;height:16px;color:var(--md-sys-color-primary)}.field-label{flex:1;font-weight:500}.field-type{font-size:11px;color:var(--md-sys-color-on-surface-variant);background:var(--md-sys-color-surface-container);padding:2px 6px;border-radius:4px}.select-search-container{position:sticky;top:0;z-index:1;background:var(--md-sys-color-surface-container-lowest, #fff);padding:8px 16px;border-bottom:1px solid var(--md-sys-color-outline-variant, rgba(0,0,0,.12))}.search-input-field{width:100%}.search-input-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.no-results{font-style:italic;font-size:13px;text-align:center}.field-info{flex:1;display:flex;flex-direction:column;line-height:1.2;overflow:hidden}.field-name{font-size:10px;opacity:.6}.variable-name{font-family:monospace;font-weight:500;color:var(--md-sys-color-secondary)}.variable-type{font-size:11px;color:var(--md-sys-color-on-surface-variant);background:var(--md-sys-color-surface-container);padding:2px 6px;border-radius:4px}.function-name{font-weight:500;color:var(--md-sys-color-tertiary)}.function-desc{font-size:12px;color:var(--md-sys-color-on-surface-variant);font-style:italic}.boolean-inline{display:flex;align-items:center;padding:4px 0}.condition-preview{background:var(--md-sys-color-surface-container);border-radius:8px;padding:8px 12px;border-left:4px solid var(--md-sys-color-primary);margin-top:2px}.preview-label{font-size:12px;font-weight:500;color:var(--md-sys-color-on-surface-variant);margin-bottom:2px}.preview-text{font-family:monospace;font-size:14px;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface);padding:6px 8px;border-radius:4px;border:1px solid var(--md-sys-color-outline-variant)}.error-row{display:inline-flex;align-items:center;gap:6px;background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border:1px solid var(--md-sys-color-error);border-radius:8px;padding:4px 10px;font-size:12px;min-height:32px}@media(max-width:1024px){.condition-row{grid-template-columns:repeat(2,minmax(180px,1fr))}.value-inline{grid-template-columns:1fr}}@media(max-width:768px){.condition-row{grid-template-columns:1fr}}.no-fields-hint{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--md-sys-color-on-surface-variant);padding:8px 0}:host ::ng-deep .mat-mdc-select-panel{scrollbar-width:thin;scrollbar-color:var(--md-sys-color-on-surface-variant) transparent}:host ::ng-deep .mat-mdc-select-panel::-webkit-scrollbar{width:8px}:host ::ng-deep .mat-mdc-select-panel::-webkit-scrollbar-thumb{background-color:var(--md-sys-color-on-surface-variant);border-radius:8px}:host ::ng-deep .mat-mdc-select-panel::-webkit-scrollbar-track{background-color:transparent}.mat-mdc-form-field-icon-suffix{align-self:center}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i3.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i3.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i4$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i7$2.MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: i7$2.MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: i7$2.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "ngmodule", type: MatNativeDateModule }, { kind: "ngmodule", type: MatChipsModule }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6063
6106
|
}
|
|
6064
6107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: FieldConditionEditorComponent, decorators: [{
|
|
6065
6108
|
type: Component,
|
|
@@ -6144,6 +6187,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
6144
6187
|
size="dense"
|
|
6145
6188
|
matSuffix
|
|
6146
6189
|
type="button"
|
|
6190
|
+
[attr.aria-label]="selectedField?.description"
|
|
6147
6191
|
[matTooltip]="selectedField?.description"
|
|
6148
6192
|
matTooltipPosition="above"
|
|
6149
6193
|
>
|
|
@@ -6198,15 +6242,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
6198
6242
|
formControlName="value"
|
|
6199
6243
|
[placeholder]="getValuePlaceholder()"
|
|
6200
6244
|
/>
|
|
6201
|
-
|
|
6202
|
-
|
|
6203
|
-
|
|
6204
|
-
|
|
6205
|
-
|
|
6206
|
-
|
|
6207
|
-
|
|
6208
|
-
|
|
6209
|
-
|
|
6245
|
+
@if (getValueHint()) {
|
|
6246
|
+
<button
|
|
6247
|
+
praxisIconButton="help_outline"
|
|
6248
|
+
size="dense"
|
|
6249
|
+
matSuffix
|
|
6250
|
+
type="button"
|
|
6251
|
+
[attr.aria-label]="getValueHint()"
|
|
6252
|
+
[matTooltip]="getValueHint()"
|
|
6253
|
+
matTooltipPosition="above"
|
|
6254
|
+
>
|
|
6255
|
+
</button>
|
|
6256
|
+
}
|
|
6210
6257
|
</mat-form-field>
|
|
6211
6258
|
}
|
|
6212
6259
|
@if (isBooleanField()) {
|
|
@@ -6356,7 +6403,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
6356
6403
|
</div>
|
|
6357
6404
|
}
|
|
6358
6405
|
</form>
|
|
6359
|
-
`, styles: [".field-condition-form{display:flex;flex-direction:column;gap:8px;min-width:
|
|
6406
|
+
`, styles: [".field-condition-form{display:flex;flex-direction:column;gap:8px;width:100%;min-width:0;max-width:100%;box-sizing:border-box;background:var(--md-sys-color-surface-container-low);border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;padding:8px 10px;overflow:visible}.condition-row-header{display:flex;align-items:center;justify-content:space-between;padding-bottom:4px}.condition-title{display:inline-flex;align-items:center;gap:8px;font-weight:600;color:var(--md-sys-color-on-surface)}.compact-grid{gap:12px}.condition-row{display:grid;grid-template-columns:minmax(180px,2fr) minmax(140px,1.5fr) minmax(220px,3fr) auto;gap:12px 4px;align-items:center;min-width:0}.condition-row>*,.value-inline,.compact-field,.value-field{min-width:0;max-width:100%}.compact-field{width:100%}.value-inline{display:grid;grid-template-columns:1.2fr 2fr;gap:8px;align-items:center}.value-field{width:100%}.field-option,.context-option,.function-option{display:flex;align-items:center;gap:8px;width:100%}.field-icon{font-size:16px;width:16px;height:16px;color:var(--md-sys-color-primary)}.field-label{flex:1;font-weight:500}.field-type{font-size:11px;color:var(--md-sys-color-on-surface-variant);background:var(--md-sys-color-surface-container);padding:2px 6px;border-radius:4px}.select-search-container{position:sticky;top:0;z-index:1;background:var(--md-sys-color-surface-container-lowest, #fff);padding:8px 16px;border-bottom:1px solid var(--md-sys-color-outline-variant, rgba(0,0,0,.12))}.search-input-field{width:100%}.search-input-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.no-results{font-style:italic;font-size:13px;text-align:center}.field-info{flex:1;display:flex;flex-direction:column;line-height:1.2;overflow:hidden}.field-name{font-size:10px;opacity:.6}.variable-name{font-family:monospace;font-weight:500;color:var(--md-sys-color-secondary)}.variable-type{font-size:11px;color:var(--md-sys-color-on-surface-variant);background:var(--md-sys-color-surface-container);padding:2px 6px;border-radius:4px}.function-name{font-weight:500;color:var(--md-sys-color-tertiary)}.function-desc{font-size:12px;color:var(--md-sys-color-on-surface-variant);font-style:italic}.boolean-inline{display:flex;align-items:center;padding:4px 0}.condition-preview{background:var(--md-sys-color-surface-container);border-radius:8px;padding:8px 12px;border-left:4px solid var(--md-sys-color-primary);margin-top:2px}.preview-label{font-size:12px;font-weight:500;color:var(--md-sys-color-on-surface-variant);margin-bottom:2px}.preview-text{font-family:monospace;font-size:14px;color:var(--md-sys-color-on-surface);background:var(--md-sys-color-surface);padding:6px 8px;border-radius:4px;border:1px solid var(--md-sys-color-outline-variant)}.error-row{display:inline-flex;align-items:center;gap:6px;background:var(--md-sys-color-error-container);color:var(--md-sys-color-on-error-container);border:1px solid var(--md-sys-color-error);border-radius:8px;padding:4px 10px;font-size:12px;min-height:32px}@media(max-width:1024px){.condition-row{grid-template-columns:repeat(2,minmax(180px,1fr))}.value-inline{grid-template-columns:1fr}}@media(max-width:768px){.condition-row{grid-template-columns:1fr}}.no-fields-hint{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--md-sys-color-on-surface-variant);padding:8px 0}:host ::ng-deep .mat-mdc-select-panel{scrollbar-width:thin;scrollbar-color:var(--md-sys-color-on-surface-variant) transparent}:host ::ng-deep .mat-mdc-select-panel::-webkit-scrollbar{width:8px}:host ::ng-deep .mat-mdc-select-panel::-webkit-scrollbar-thumb{background-color:var(--md-sys-color-on-surface-variant);border-radius:8px}:host ::ng-deep .mat-mdc-select-panel::-webkit-scrollbar-track{background-color:transparent}.mat-mdc-form-field-icon-suffix{align-self:center}\n"] }]
|
|
6360
6407
|
}], ctorParameters: () => [{ type: i1$1.FormBuilder }], propDecorators: { config: [{
|
|
6361
6408
|
type: Input
|
|
6362
6409
|
}], fieldSchemas: [{
|
|
@@ -10029,7 +10076,7 @@ class RuleNodeComponent {
|
|
|
10029
10076
|
</div>
|
|
10030
10077
|
}
|
|
10031
10078
|
</div>
|
|
10032
|
-
`, isInline: true, styles: [":host{--vb-shadow-low-color: var(--sicoob-shadow-low, rgba(0,0,0,.08));--vb-shadow-medium-color: var(--sicoob-shadow-medium, rgba(0,0,0,.18));--vb-shadow-high-color: var(--sicoob-shadow-high, rgba(0,0,0,.32))}.rule-node-container{position:relative;margin-bottom:8px}.rule-node{min-width:
|
|
10079
|
+
`, isInline: true, styles: [":host{--vb-shadow-low-color: var(--sicoob-shadow-low, rgba(0,0,0,.08));--vb-shadow-medium-color: var(--sicoob-shadow-medium, rgba(0,0,0,.18));--vb-shadow-high-color: var(--sicoob-shadow-high, rgba(0,0,0,.32))}.rule-node-container{position:relative;margin-bottom:8px;min-width:0;max-width:100%}.rule-node{width:100%;min-width:0;max-width:100%;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);cursor:pointer;transition:all .2s ease;position:relative;border-radius:8px}.rule-node:hover{border-color:var(--md-sys-color-primary);box-shadow:0 4px 8px var(--vb-shadow-low-color)}.rule-node.selected{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);box-shadow:0 4px 12px var(--vb-shadow-medium-color)}.rule-node-container.has-errors .rule-node{border-color:var(--md-sys-color-error)}.node-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface-variant)}.node-type{display:flex;align-items:center;gap:8px}.type-icon{font-size:20px;width:20px;height:20px}.type-icon.field-condition{color:var(--md-sys-color-primary)}.type-icon.boolean-group{color:var(--md-sys-color-secondary)}.type-icon.conditional-validator{color:var(--md-sys-color-tertiary)}.type-icon.collection-validation{color:var(--md-sys-color-error)}.type-label{font-weight:500;font-size:14px}.node-actions{display:flex;align-items:center;gap:4px}.error-badge{color:var(--md-sys-color-error);font-size:18px}.node-content{padding:12px}.field-condition-content,.boolean-group-content,.conditional-validator-content,.collection-validation-content{min-height:60px}.group-operator{display:flex;justify-content:center}.operator-select{width:120px}.metadata-preview{margin-top:12px;padding-top:12px;border-top:1px solid var(--md-sys-color-outline)}.metadata-chips{margin-bottom:8px}.metadata-chip{font-size:11px;height:20px}.code-chip{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.tag-chip{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.metadata-message{font-size:12px;color:var(--md-sys-color-on-surface-variant);font-style:italic;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.validation-errors{border-top:1px solid var(--md-sys-color-error);background:var(--md-sys-color-error-container);padding:8px 12px}.validation-error{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}.validation-error:last-child{margin-bottom:0}.validation-error.error{color:var(--md-sys-color-on-error-container)}.validation-error.warning{color:var(--md-sys-color-secondary)}.error-icon{font-size:14px;width:14px;height:14px}.children-container{margin-left:24px;position:relative}.children-connector{position:absolute;left:-12px;top:0;width:12px;height:24px}.connector-line{width:2px;height:100%;background:var(--md-sys-color-outline);margin-left:10px}.children-list{padding-left:12px;border-left:2px solid var(--md-sys-color-outline)}.child-wrapper{position:relative}.child-connector{display:flex;flex-direction:column;align-items:center;margin:8px 0}.child-connector .connector-line{width:2px;height:12px;background:var(--md-sys-color-outline)}.connector-operator{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary);padding:2px 6px;border-radius:8px;font-size:10px;font-weight:600;margin-top:-1px}.add-child-area{display:flex;justify-content:center;margin-top:16px;padding:8px;border:1px dashed var(--md-sys-color-outline);border-radius:8px;background:var(--md-sys-color-surface-variant)}.add-child-button{color:var(--md-sys-color-primary)}.level-1{margin-left:20px}.level-2{margin-left:40px}.level-3{margin-left:60px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.children-list.cdk-drop-list-dragging .child-wrapper:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.delete-action{color:var(--md-sys-color-error)}\n"], dependencies: [{ kind: "component", type: RuleNodeComponent, selector: "praxis-rule-node", inputs: ["node", "nodes", "fieldSchemas", "level", "isSelected", "validationErrors"], outputs: ["nodeClicked", "nodeUpdated", "nodeDeleted", "childAdded", "childMoved"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5$1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6$2.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: i6$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$2.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: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i10.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i10.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9$2.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i8.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i11$1.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer", "cdkDropListHasAnchor"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i11$1.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: FieldConditionEditorComponent, selector: "praxis-field-condition-editor", inputs: ["config", "fieldSchemas"], outputs: ["configChanged"] }, { kind: "component", type: ConditionalValidatorEditorComponent, selector: "praxis-conditional-validator-editor", inputs: ["config", "fieldSchemas"], outputs: ["configChanged"] }, { kind: "component", type: CollectionValidatorEditorComponent, selector: "praxis-collection-validator-editor", inputs: ["config", "fieldSchemas"], outputs: ["configChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10033
10080
|
}
|
|
10034
10081
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RuleNodeComponent, decorators: [{
|
|
10035
10082
|
type: Component,
|
|
@@ -10316,7 +10363,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
10316
10363
|
</div>
|
|
10317
10364
|
}
|
|
10318
10365
|
</div>
|
|
10319
|
-
`, styles: [":host{--vb-shadow-low-color: var(--sicoob-shadow-low, rgba(0,0,0,.08));--vb-shadow-medium-color: var(--sicoob-shadow-medium, rgba(0,0,0,.18));--vb-shadow-high-color: var(--sicoob-shadow-high, rgba(0,0,0,.32))}.rule-node-container{position:relative;margin-bottom:8px}.rule-node{min-width:
|
|
10366
|
+
`, styles: [":host{--vb-shadow-low-color: var(--sicoob-shadow-low, rgba(0,0,0,.08));--vb-shadow-medium-color: var(--sicoob-shadow-medium, rgba(0,0,0,.18));--vb-shadow-high-color: var(--sicoob-shadow-high, rgba(0,0,0,.32))}.rule-node-container{position:relative;margin-bottom:8px;min-width:0;max-width:100%}.rule-node{width:100%;min-width:0;max-width:100%;box-sizing:border-box;border:1px solid var(--md-sys-color-outline-variant);cursor:pointer;transition:all .2s ease;position:relative;border-radius:8px}.rule-node:hover{border-color:var(--md-sys-color-primary);box-shadow:0 4px 8px var(--vb-shadow-low-color)}.rule-node.selected{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container);box-shadow:0 4px 12px var(--vb-shadow-medium-color)}.rule-node-container.has-errors .rule-node{border-color:var(--md-sys-color-error)}.node-header{display:flex;justify-content:space-between;align-items:center;padding:8px 12px;border-bottom:1px solid var(--md-sys-color-outline);background:var(--md-sys-color-surface-variant)}.node-type{display:flex;align-items:center;gap:8px}.type-icon{font-size:20px;width:20px;height:20px}.type-icon.field-condition{color:var(--md-sys-color-primary)}.type-icon.boolean-group{color:var(--md-sys-color-secondary)}.type-icon.conditional-validator{color:var(--md-sys-color-tertiary)}.type-icon.collection-validation{color:var(--md-sys-color-error)}.type-label{font-weight:500;font-size:14px}.node-actions{display:flex;align-items:center;gap:4px}.error-badge{color:var(--md-sys-color-error);font-size:18px}.node-content{padding:12px}.field-condition-content,.boolean-group-content,.conditional-validator-content,.collection-validation-content{min-height:60px}.group-operator{display:flex;justify-content:center}.operator-select{width:120px}.metadata-preview{margin-top:12px;padding-top:12px;border-top:1px solid var(--md-sys-color-outline)}.metadata-chips{margin-bottom:8px}.metadata-chip{font-size:11px;height:20px}.code-chip{background:var(--md-sys-color-primary-container);color:var(--md-sys-color-on-primary-container)}.tag-chip{background:var(--md-sys-color-secondary-container);color:var(--md-sys-color-on-secondary-container)}.metadata-message{font-size:12px;color:var(--md-sys-color-on-surface-variant);font-style:italic;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.validation-errors{border-top:1px solid var(--md-sys-color-error);background:var(--md-sys-color-error-container);padding:8px 12px}.validation-error{display:flex;align-items:center;gap:6px;margin-bottom:4px;font-size:12px}.validation-error:last-child{margin-bottom:0}.validation-error.error{color:var(--md-sys-color-on-error-container)}.validation-error.warning{color:var(--md-sys-color-secondary)}.error-icon{font-size:14px;width:14px;height:14px}.children-container{margin-left:24px;position:relative}.children-connector{position:absolute;left:-12px;top:0;width:12px;height:24px}.connector-line{width:2px;height:100%;background:var(--md-sys-color-outline);margin-left:10px}.children-list{padding-left:12px;border-left:2px solid var(--md-sys-color-outline)}.child-wrapper{position:relative}.child-connector{display:flex;flex-direction:column;align-items:center;margin:8px 0}.child-connector .connector-line{width:2px;height:12px;background:var(--md-sys-color-outline)}.connector-operator{background:var(--md-sys-color-secondary);color:var(--md-sys-color-on-secondary);padding:2px 6px;border-radius:8px;font-size:10px;font-weight:600;margin-top:-1px}.add-child-area{display:flex;justify-content:center;margin-top:16px;padding:8px;border:1px dashed var(--md-sys-color-outline);border-radius:8px;background:var(--md-sys-color-surface-variant)}.add-child-button{color:var(--md-sys-color-primary)}.level-1{margin-left:20px}.level-2{margin-left:40px}.level-3{margin-left:60px}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.children-list.cdk-drop-list-dragging .child-wrapper:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}.delete-action{color:var(--md-sys-color-error)}\n"] }]
|
|
10320
10367
|
}], ctorParameters: () => [{ type: i1$1.FormBuilder }], propDecorators: { node: [{
|
|
10321
10368
|
type: Input
|
|
10322
10369
|
}], nodes: [{
|
|
@@ -10702,7 +10749,7 @@ class RuleCanvasComponent {
|
|
|
10702
10749
|
}
|
|
10703
10750
|
</div>
|
|
10704
10751
|
</div>
|
|
10705
|
-
`, isInline: true, styles: [":host{display:block;height:100%}.rule-canvas{position:relative;height:100%;width:100%;background:var(--md-sys-color-surface);border:none;border-radius:0;padding:8px 10px;transition:all .3s ease;box-sizing:border-box;display:flex;flex-direction:column;overflow-y:auto;gap:6px}.rule-canvas.drag-over{border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}.condition-validation-panel{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);flex-shrink:0}.condition-validation-panel.blocking{border-color:color-mix(in srgb,var(--md-sys-color-error) 54%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 72%,transparent);color:var(--md-sys-color-on-error-container)}.condition-validation-panel mat-icon{font-size:20px;width:20px;height:20px;color:var(--md-sys-color-error);flex:0 0 auto}.condition-validation-panel strong{display:block;font-size:13px;line-height:1.25;font-weight:600}.condition-validation-panel p{margin:2px 0 0;font-size:12px;line-height:1.35;color:inherit}.empty-state{display:flex;align-items:center;justify-content:center;flex:1;text-align:center}.empty-state-content{max-width:400px}.empty-icon{font-size:64px;width:64px;height:64px;color:var(--md-sys-color-on-surface-variant);margin-bottom:16px}.empty-state h3{margin:0 0 8px;color:var(--md-sys-color-on-surface);font-weight:500}.empty-state p{margin:0 0 24px;color:var(--md-sys-color-on-surface-variant);line-height:1.4}.empty-state-content.condition-only>p:not(.condition-only-copy){display:none}.rule-tree{display:flex;flex-direction:column;gap:10px;flex:1}.root-rule-container{position:relative;padding-bottom:8px}.root-connector{position:absolute;left:12px;top:100%;height:16px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;pointer-events:none}.connector-line{width:2px;height:16px;background:var(--md-sys-color-outline)}.connector-operator{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);padding:2px 6px;border-radius:10px;font-size:10px;font-weight:600;margin-top:-8px;pointer-events:all}.drop-zone-overlay{position:absolute;inset:0;background:var(--md-sys-color-primary-container);border:3px dashed var(--md-sys-color-primary);border-radius:12px;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-authoring-hover, 300);animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:.6}50%{opacity:1}}.drop-zone-content{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--md-sys-color-primary);font-weight:500}.drop-zone-content mat-icon{font-size:48px;width:48px;height:48px}.floating-add-menu{position:absolute;bottom:24px;right:24px;z-index:var(--praxis-layer-authoring-toolbar, 340)}.main-add-button{transition:transform .3s ease}.floating-add-menu.expanded .main-add-button{transform:rotate(45deg)}.add-menu-options{position:absolute;bottom:64px;right:0;display:flex;flex-direction:column;gap:8px;animation:slideUp .3s ease}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.add-option-button{animation:fadeIn .3s ease;animation-fill-mode:both}.add-option-button:nth-child(1){animation-delay:.1s}.add-option-button:nth-child(2){animation-delay:.15s}.add-option-button:nth-child(3){animation-delay:.2s}.add-option-button:nth-child(4){animation-delay:.25s}.add-option-button:nth-child(5){animation-delay:.3s}@keyframes fadeIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@media(max-width:768px){.rule-canvas{padding:16px}.floating-add-menu{bottom:16px;right:16px}}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.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: i5.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "component", type: RuleNodeComponent, selector: "praxis-rule-node", inputs: ["node", "nodes", "fieldSchemas", "level", "isSelected", "validationErrors"], outputs: ["nodeClicked", "nodeUpdated", "nodeDeleted", "childAdded", "childMoved"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10752
|
+
`, isInline: true, styles: [":host{display:block;min-width:0;max-width:100%;height:100%}.rule-canvas{position:relative;height:100%;width:100%;min-width:0;max-width:100%;background:var(--md-sys-color-surface);border:none;border-radius:0;padding:8px 10px;transition:all .3s ease;box-sizing:border-box;display:flex;flex-direction:column;overflow-y:auto;gap:6px}.rule-canvas.drag-over{border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}.condition-validation-panel{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);flex-shrink:0}.condition-validation-panel.blocking{border-color:color-mix(in srgb,var(--md-sys-color-error) 54%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 72%,transparent);color:var(--md-sys-color-on-error-container)}.condition-validation-panel mat-icon{font-size:20px;width:20px;height:20px;color:var(--md-sys-color-error);flex:0 0 auto}.condition-validation-panel strong{display:block;font-size:13px;line-height:1.25;font-weight:600}.condition-validation-panel p{margin:2px 0 0;font-size:12px;line-height:1.35;color:inherit}.empty-state{display:flex;align-items:center;justify-content:center;flex:1;text-align:center}.empty-state-content{max-width:400px}.empty-icon{font-size:64px;width:64px;height:64px;color:var(--md-sys-color-on-surface-variant);margin-bottom:16px}.empty-state h3{margin:0 0 8px;color:var(--md-sys-color-on-surface);font-weight:500}.empty-state p{margin:0 0 24px;color:var(--md-sys-color-on-surface-variant);line-height:1.4}.empty-state-content.condition-only>p:not(.condition-only-copy){display:none}.rule-tree{display:flex;flex-direction:column;width:100%;min-width:0;max-width:100%;box-sizing:border-box;gap:10px;flex:1}.root-rule-container{position:relative;width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding-bottom:8px}.root-connector{position:absolute;left:12px;top:100%;height:16px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;pointer-events:none}.connector-line{width:2px;height:16px;background:var(--md-sys-color-outline)}.connector-operator{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);padding:2px 6px;border-radius:10px;font-size:10px;font-weight:600;margin-top:-8px;pointer-events:all}.drop-zone-overlay{position:absolute;inset:0;background:var(--md-sys-color-primary-container);border:3px dashed var(--md-sys-color-primary);border-radius:12px;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-authoring-hover, 300);animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:.6}50%{opacity:1}}.drop-zone-content{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--md-sys-color-primary);font-weight:500}.drop-zone-content mat-icon{font-size:48px;width:48px;height:48px}.floating-add-menu{position:absolute;bottom:24px;right:24px;z-index:var(--praxis-layer-authoring-toolbar, 340)}.main-add-button{transition:transform .3s ease}.floating-add-menu.expanded .main-add-button{transform:rotate(45deg)}.add-menu-options{position:absolute;bottom:64px;right:0;display:flex;flex-direction:column;gap:8px;animation:slideUp .3s ease}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.add-option-button{animation:fadeIn .3s ease;animation-fill-mode:both}.add-option-button:nth-child(1){animation-delay:.1s}.add-option-button:nth-child(2){animation-delay:.15s}.add-option-button:nth-child(3){animation-delay:.2s}.add-option-button:nth-child(4){animation-delay:.25s}.add-option-button:nth-child(5){animation-delay:.3s}@keyframes fadeIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@media(max-width:768px){.rule-canvas{padding:16px}.floating-add-menu{bottom:16px;right:16px}}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.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: i5.MatMiniFabButton, selector: "button[mat-mini-fab], a[mat-mini-fab], button[matMiniFab], a[matMiniFab]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i5.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: DragDropModule }, { kind: "component", type: RuleNodeComponent, selector: "praxis-rule-node", inputs: ["node", "nodes", "fieldSchemas", "level", "isSelected", "validationErrors"], outputs: ["nodeClicked", "nodeUpdated", "nodeDeleted", "childAdded", "childMoved"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
10706
10753
|
}
|
|
10707
10754
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RuleCanvasComponent, decorators: [{
|
|
10708
10755
|
type: Component,
|
|
@@ -10827,7 +10874,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
10827
10874
|
}
|
|
10828
10875
|
</div>
|
|
10829
10876
|
</div>
|
|
10830
|
-
`, styles: [":host{display:block;height:100%}.rule-canvas{position:relative;height:100%;width:100%;background:var(--md-sys-color-surface);border:none;border-radius:0;padding:8px 10px;transition:all .3s ease;box-sizing:border-box;display:flex;flex-direction:column;overflow-y:auto;gap:6px}.rule-canvas.drag-over{border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}.condition-validation-panel{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);flex-shrink:0}.condition-validation-panel.blocking{border-color:color-mix(in srgb,var(--md-sys-color-error) 54%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 72%,transparent);color:var(--md-sys-color-on-error-container)}.condition-validation-panel mat-icon{font-size:20px;width:20px;height:20px;color:var(--md-sys-color-error);flex:0 0 auto}.condition-validation-panel strong{display:block;font-size:13px;line-height:1.25;font-weight:600}.condition-validation-panel p{margin:2px 0 0;font-size:12px;line-height:1.35;color:inherit}.empty-state{display:flex;align-items:center;justify-content:center;flex:1;text-align:center}.empty-state-content{max-width:400px}.empty-icon{font-size:64px;width:64px;height:64px;color:var(--md-sys-color-on-surface-variant);margin-bottom:16px}.empty-state h3{margin:0 0 8px;color:var(--md-sys-color-on-surface);font-weight:500}.empty-state p{margin:0 0 24px;color:var(--md-sys-color-on-surface-variant);line-height:1.4}.empty-state-content.condition-only>p:not(.condition-only-copy){display:none}.rule-tree{display:flex;flex-direction:column;gap:10px;flex:1}.root-rule-container{position:relative;padding-bottom:8px}.root-connector{position:absolute;left:12px;top:100%;height:16px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;pointer-events:none}.connector-line{width:2px;height:16px;background:var(--md-sys-color-outline)}.connector-operator{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);padding:2px 6px;border-radius:10px;font-size:10px;font-weight:600;margin-top:-8px;pointer-events:all}.drop-zone-overlay{position:absolute;inset:0;background:var(--md-sys-color-primary-container);border:3px dashed var(--md-sys-color-primary);border-radius:12px;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-authoring-hover, 300);animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:.6}50%{opacity:1}}.drop-zone-content{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--md-sys-color-primary);font-weight:500}.drop-zone-content mat-icon{font-size:48px;width:48px;height:48px}.floating-add-menu{position:absolute;bottom:24px;right:24px;z-index:var(--praxis-layer-authoring-toolbar, 340)}.main-add-button{transition:transform .3s ease}.floating-add-menu.expanded .main-add-button{transform:rotate(45deg)}.add-menu-options{position:absolute;bottom:64px;right:0;display:flex;flex-direction:column;gap:8px;animation:slideUp .3s ease}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.add-option-button{animation:fadeIn .3s ease;animation-fill-mode:both}.add-option-button:nth-child(1){animation-delay:.1s}.add-option-button:nth-child(2){animation-delay:.15s}.add-option-button:nth-child(3){animation-delay:.2s}.add-option-button:nth-child(4){animation-delay:.25s}.add-option-button:nth-child(5){animation-delay:.3s}@keyframes fadeIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@media(max-width:768px){.rule-canvas{padding:16px}.floating-add-menu{bottom:16px;right:16px}}\n"] }]
|
|
10877
|
+
`, styles: [":host{display:block;min-width:0;max-width:100%;height:100%}.rule-canvas{position:relative;height:100%;width:100%;min-width:0;max-width:100%;background:var(--md-sys-color-surface);border:none;border-radius:0;padding:8px 10px;transition:all .3s ease;box-sizing:border-box;display:flex;flex-direction:column;overflow-y:auto;gap:6px}.rule-canvas.drag-over{border:1px solid var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}.condition-validation-panel{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--md-sys-color-outline-variant);border-radius:8px;background:var(--md-sys-color-surface-container-low);color:var(--md-sys-color-on-surface);flex-shrink:0}.condition-validation-panel.blocking{border-color:color-mix(in srgb,var(--md-sys-color-error) 54%,transparent);background:color-mix(in srgb,var(--md-sys-color-error-container) 72%,transparent);color:var(--md-sys-color-on-error-container)}.condition-validation-panel mat-icon{font-size:20px;width:20px;height:20px;color:var(--md-sys-color-error);flex:0 0 auto}.condition-validation-panel strong{display:block;font-size:13px;line-height:1.25;font-weight:600}.condition-validation-panel p{margin:2px 0 0;font-size:12px;line-height:1.35;color:inherit}.empty-state{display:flex;align-items:center;justify-content:center;flex:1;text-align:center}.empty-state-content{max-width:400px}.empty-icon{font-size:64px;width:64px;height:64px;color:var(--md-sys-color-on-surface-variant);margin-bottom:16px}.empty-state h3{margin:0 0 8px;color:var(--md-sys-color-on-surface);font-weight:500}.empty-state p{margin:0 0 24px;color:var(--md-sys-color-on-surface-variant);line-height:1.4}.empty-state-content.condition-only>p:not(.condition-only-copy){display:none}.rule-tree{display:flex;flex-direction:column;width:100%;min-width:0;max-width:100%;box-sizing:border-box;gap:10px;flex:1}.root-rule-container{position:relative;width:100%;min-width:0;max-width:100%;box-sizing:border-box;padding-bottom:8px}.root-connector{position:absolute;left:12px;top:100%;height:16px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;pointer-events:none}.connector-line{width:2px;height:16px;background:var(--md-sys-color-outline)}.connector-operator{background:var(--md-sys-color-primary);color:var(--md-sys-color-on-primary);padding:2px 6px;border-radius:10px;font-size:10px;font-weight:600;margin-top:-8px;pointer-events:all}.drop-zone-overlay{position:absolute;inset:0;background:var(--md-sys-color-primary-container);border:3px dashed var(--md-sys-color-primary);border-radius:12px;display:flex;align-items:center;justify-content:center;z-index:var(--praxis-layer-authoring-hover, 300);animation:pulse 1s infinite}@keyframes pulse{0%,to{opacity:.6}50%{opacity:1}}.drop-zone-content{display:flex;flex-direction:column;align-items:center;gap:8px;color:var(--md-sys-color-primary);font-weight:500}.drop-zone-content mat-icon{font-size:48px;width:48px;height:48px}.floating-add-menu{position:absolute;bottom:24px;right:24px;z-index:var(--praxis-layer-authoring-toolbar, 340)}.main-add-button{transition:transform .3s ease}.floating-add-menu.expanded .main-add-button{transform:rotate(45deg)}.add-menu-options{position:absolute;bottom:64px;right:0;display:flex;flex-direction:column;gap:8px;animation:slideUp .3s ease}@keyframes slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.add-option-button{animation:fadeIn .3s ease;animation-fill-mode:both}.add-option-button:nth-child(1){animation-delay:.1s}.add-option-button:nth-child(2){animation-delay:.15s}.add-option-button:nth-child(3){animation-delay:.2s}.add-option-button:nth-child(4){animation-delay:.25s}.add-option-button:nth-child(5){animation-delay:.3s}@keyframes fadeIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}@media(max-width:768px){.rule-canvas{padding:16px}.floating-add-menu{bottom:16px;right:16px}}\n"] }]
|
|
10831
10878
|
}], ctorParameters: () => [{ type: i1$2.PraxisI18nService, decorators: [{
|
|
10832
10879
|
type: Optional
|
|
10833
10880
|
}] }], propDecorators: { conditionOnly: [{
|
|
@@ -13767,7 +13814,7 @@ class RuleEditorComponent {
|
|
|
13767
13814
|
(change)="onFileSelected($event)"
|
|
13768
13815
|
/>
|
|
13769
13816
|
</div>
|
|
13770
|
-
`, isInline: true, styles: [".rule-editor-container{--_pvb-editor-accent: var(--md-sys-color-primary, var(--sicoob-primary-default));--_pvb-editor-accent-soft: color-mix(in srgb, var(--_pvb-editor-accent) 16%, transparent);--_pvb-editor-surface: var(--md-sys-color-surface, var(--sicoob-background-primary));--_pvb-editor-surface-low: var(--md-sys-color-surface-container-low, var(--sicoob-background-secondary));--_pvb-editor-surface-strong: var(--md-sys-color-surface-container, var(--sicoob-background-tertiary));--_pvb-editor-border: var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));--_pvb-editor-text: var(--md-sys-color-on-surface, var(--sicoob-text-default));--_pvb-editor-text-soft: var(--md-sys-color-on-surface-variant, var(--sicoob-text-subtle));display:flex;flex-direction:column;height:100%;background:radial-gradient(circle at top center,color-mix(in srgb,var(--_pvb-editor-accent) 12%,transparent) 0%,transparent 32%),linear-gradient(180deg,color-mix(in srgb,var(--_pvb-editor-surface-low) 96%,black 4%),color-mix(in srgb,var(--_pvb-editor-surface) 98%,black 2%));overflow:hidden;position:relative;color:var(--_pvb-editor-text)}.rule-editor-container.embedded{height:100%}.condition-only-editor{display:flex;flex-direction:column;height:100%;min-height:360px;overflow:hidden}.condition-only-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%)}.condition-only-header h3{margin:0;font-size:16px;font-weight:600}.condition-only-header p{margin:4px 0 0;font-size:12px;color:var(--_pvb-editor-text-soft)}.condition-only-canvas{flex:1;min-height:0}.builder-shell-header{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:54px;padding:0 18px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%);flex-shrink:0}.shell-brand{display:flex;align-items:center;gap:10px;min-width:0}.shell-menu{margin-right:2px}.brand-mark{width:32px;height:32px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);border:1px solid color-mix(in srgb,var(--_pvb-editor-accent) 24%,transparent)}.brand-mark mat-icon{display:flex;align-items:center;justify-content:center;font-size:18px;width:18px;height:18px;color:var(--_pvb-editor-accent)}.brand-copy{display:flex;flex-direction:column;gap:2px;min-width:0}.brand-title{font-size:14px;font-weight:700}.brand-breadcrumb{font-size:12px;color:var(--_pvb-editor-text-soft)}.shell-nav{display:inline-flex;align-items:center;gap:10px;padding:4px;border-radius:14px;background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);border:1px solid color-mix(in srgb,var(--_pvb-editor-border) 56%,transparent)}.nav-pill{min-width:96px;height:34px;border:0;border-radius:10px;background:transparent;color:var(--_pvb-editor-text-soft);font:inherit;font-size:13px;cursor:default}.nav-pill.active{color:var(--_pvb-editor-text);background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_pvb-editor-accent) 34%,transparent)}.shell-status{display:flex;align-items:center;gap:6px}.unsaved-indicator{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--_pvb-editor-text);margin-right:6px}.unsaved-dot{width:8px;height:8px;border-radius:999px;background:#f0b429;box-shadow:0 0 12px #f0b42973}.danger-action{color:var(--md-sys-color-error)}.editor-content-grid{display:grid;grid-template-columns:360px 1fr;flex:1;overflow:hidden;min-height:0;min-width:0;transition:grid-template-columns .2s ease}.editor-content-grid.list-closed{grid-template-columns:0 1fr}.rule-list-panel{border-right:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);display:flex;flex-direction:column;overflow:hidden;min-width:0}.rule-definition-panel{background:radial-gradient(circle at 50% 0%,color-mix(in srgb,var(--_pvb-editor-accent) 8%,transparent) 0%,transparent 26%),transparent;overflow:hidden;display:flex;flex-direction:column;position:relative;min-height:0;min-width:0;flex:1}.empty-state,.unsupported-node{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--_pvb-editor-text-soft);gap:16px;text-align:center;padding:32px}.empty-state mat-icon,.unsupported-node mat-icon{font-size:64px;width:64px;height:64px;opacity:.9;color:var(--_pvb-editor-accent)}.status-bar{height:32px;background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 92%,black 8%);border-top:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);display:flex;align-items:center;justify-content:space-between;padding:0 16px;font-size:12px;color:var(--_pvb-editor-text-soft);flex-shrink:0}.status-left,.status-center{display:flex;align-items:center;gap:8px}.validation-status{display:flex;align-items:center;gap:4px}.validation-status.error{color:var(--md-sys-color-error)}.validation-status.success{color:var(--md-sys-color-tertiary)}.validation-status mat-icon{font-size:16px;width:16px;height:16px}.debug-panel{position:absolute;top:0;right:0;bottom:0;width:400px;background:var(--_pvb-editor-surface);border-left:1px solid var(--_pvb-editor-border);box-shadow:-2px 0 8px #0000001a;z-index:var(--praxis-layer-authoring-toolbar, 340);display:flex;flex-direction:column}.debug-header{padding:8px 16px;border-bottom:1px solid var(--_pvb-editor-border);display:flex;align-items:center;justify-content:space-between;background:var(--_pvb-editor-surface-strong)}.debug-content{flex:1;overflow:auto;padding:16px;font-family:monospace;font-size:12px}@media(max-width:1180px){.builder-shell-header{flex-wrap:wrap;justify-content:flex-start;padding:10px 14px}.shell-nav{order:3;width:100%;justify-content:center}.shell-status{margin-left:auto}}@media(max-width:720px){.editor-content-grid,.editor-content-grid.list-closed{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(360px,1fr);overflow-y:auto}.rule-list-panel{max-height:min(360px,48vh);border-right:0;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent)}.rule-definition-panel{min-height:360px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.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: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9$2.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6$2.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: i6$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "component", type: RuleListComponent, selector: "praxis-rule-list", inputs: ["rules", "selectedRuleId", "nodeMap", "validationErrors"], outputs: ["ruleSelected", "ruleDeleted", "ruleDuplicated", "ruleAdded", "aiRequested"] }, { kind: "component", type: RuleDefinitionComponent, selector: "praxis-rule-definition", inputs: ["ruleNode", "fieldSchemas", "targetSchemas", "propertySchema"], outputs: ["ruleChanged"] }, { kind: "component", type: RuleCanvasComponent, selector: "praxis-rule-canvas", inputs: ["conditionOnly", "state", "fieldSchemas", "validationErrors"], outputs: ["nodeSelected", "nodeAdded", "nodeUpdated", "nodeRemoved"] }, { kind: "pipe", type: i12$1.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
13817
|
+
`, isInline: true, styles: [":host{display:block;min-width:0;max-width:100%}.rule-editor-container{--_pvb-editor-accent: var(--md-sys-color-primary, var(--sicoob-primary-default));--_pvb-editor-accent-soft: color-mix(in srgb, var(--_pvb-editor-accent) 16%, transparent);--_pvb-editor-surface: var(--md-sys-color-surface, var(--sicoob-background-primary));--_pvb-editor-surface-low: var(--md-sys-color-surface-container-low, var(--sicoob-background-secondary));--_pvb-editor-surface-strong: var(--md-sys-color-surface-container, var(--sicoob-background-tertiary));--_pvb-editor-border: var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));--_pvb-editor-text: var(--md-sys-color-on-surface, var(--sicoob-text-default));--_pvb-editor-text-soft: var(--md-sys-color-on-surface-variant, var(--sicoob-text-subtle));display:flex;flex-direction:column;width:100%;min-width:0;max-width:100%;box-sizing:border-box;height:100%;background:radial-gradient(circle at top center,color-mix(in srgb,var(--_pvb-editor-accent) 12%,transparent) 0%,transparent 32%),linear-gradient(180deg,color-mix(in srgb,var(--_pvb-editor-surface-low) 96%,black 4%),color-mix(in srgb,var(--_pvb-editor-surface) 98%,black 2%));overflow:hidden;position:relative;color:var(--_pvb-editor-text)}.rule-editor-container.embedded{height:100%}.condition-only-editor{display:flex;flex-direction:column;width:100%;min-width:0;max-width:100%;height:100%;min-height:360px;overflow:hidden}.condition-only-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%)}.condition-only-header h3{margin:0;font-size:16px;font-weight:600}.condition-only-header p{margin:4px 0 0;font-size:12px;color:var(--_pvb-editor-text-soft)}.condition-only-canvas{flex:1;width:100%;min-width:0;max-width:100%;min-height:0}.builder-shell-header{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:54px;padding:0 18px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%);flex-shrink:0}.shell-brand{display:flex;align-items:center;gap:10px;min-width:0}.shell-menu{margin-right:2px}.brand-mark{width:32px;height:32px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);border:1px solid color-mix(in srgb,var(--_pvb-editor-accent) 24%,transparent)}.brand-mark mat-icon{display:flex;align-items:center;justify-content:center;font-size:18px;width:18px;height:18px;color:var(--_pvb-editor-accent)}.brand-copy{display:flex;flex-direction:column;gap:2px;min-width:0}.brand-title{font-size:14px;font-weight:700}.brand-breadcrumb{font-size:12px;color:var(--_pvb-editor-text-soft)}.shell-nav{display:inline-flex;align-items:center;gap:10px;padding:4px;border-radius:14px;background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);border:1px solid color-mix(in srgb,var(--_pvb-editor-border) 56%,transparent)}.nav-pill{min-width:96px;height:34px;border:0;border-radius:10px;background:transparent;color:var(--_pvb-editor-text-soft);font:inherit;font-size:13px;cursor:default}.nav-pill.active{color:var(--_pvb-editor-text);background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_pvb-editor-accent) 34%,transparent)}.shell-status{display:flex;align-items:center;gap:6px}.unsaved-indicator{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--_pvb-editor-text);margin-right:6px}.unsaved-dot{width:8px;height:8px;border-radius:999px;background:#f0b429;box-shadow:0 0 12px #f0b42973}.danger-action{color:var(--md-sys-color-error)}.editor-content-grid{display:grid;grid-template-columns:360px 1fr;flex:1;overflow:hidden;min-height:0;min-width:0;transition:grid-template-columns .2s ease}.editor-content-grid.list-closed{grid-template-columns:0 1fr}.rule-list-panel{border-right:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);display:flex;flex-direction:column;overflow:hidden;min-width:0}.rule-definition-panel{background:radial-gradient(circle at 50% 0%,color-mix(in srgb,var(--_pvb-editor-accent) 8%,transparent) 0%,transparent 26%),transparent;overflow:hidden;display:flex;flex-direction:column;position:relative;min-height:0;min-width:0;flex:1}.empty-state,.unsupported-node{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--_pvb-editor-text-soft);gap:16px;text-align:center;padding:32px}.empty-state mat-icon,.unsupported-node mat-icon{font-size:64px;width:64px;height:64px;opacity:.9;color:var(--_pvb-editor-accent)}.status-bar{height:32px;background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 92%,black 8%);border-top:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);display:flex;align-items:center;justify-content:space-between;padding:0 16px;font-size:12px;color:var(--_pvb-editor-text-soft);flex-shrink:0}.status-left,.status-center{display:flex;align-items:center;gap:8px}.validation-status{display:flex;align-items:center;gap:4px}.validation-status.error{color:var(--md-sys-color-error)}.validation-status.success{color:var(--md-sys-color-tertiary)}.validation-status mat-icon{font-size:16px;width:16px;height:16px}.debug-panel{position:absolute;top:0;right:0;bottom:0;width:400px;background:var(--_pvb-editor-surface);border-left:1px solid var(--_pvb-editor-border);box-shadow:-2px 0 8px #0000001a;z-index:var(--praxis-layer-authoring-toolbar, 340);display:flex;flex-direction:column}.debug-header{padding:8px 16px;border-bottom:1px solid var(--_pvb-editor-border);display:flex;align-items:center;justify-content:space-between;background:var(--_pvb-editor-surface-strong)}.debug-content{flex:1;overflow:auto;padding:16px;font-family:monospace;font-size:12px}@media(max-width:1180px){.builder-shell-header{flex-wrap:wrap;justify-content:flex-start;padding:10px 14px}.shell-nav{order:3;width:100%;justify-content:center}.shell-status{margin-left:auto}}@media(max-width:720px){.editor-content-grid,.editor-content-grid.list-closed{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(360px,1fr);overflow-y:auto}.rule-list-panel{max-height:min(360px,48vh);border-right:0;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent)}.rule-definition-panel{min-height:360px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.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: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i9.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9$2.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6$2.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: i6$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: PraxisIconButtonComponent, selector: "button[praxisIconButton]", inputs: ["praxisIconButton", "size", "appearance", "presentation", "pressed", "busy"] }, { kind: "component", type: RuleListComponent, selector: "praxis-rule-list", inputs: ["rules", "selectedRuleId", "nodeMap", "validationErrors"], outputs: ["ruleSelected", "ruleDeleted", "ruleDuplicated", "ruleAdded", "aiRequested"] }, { kind: "component", type: RuleDefinitionComponent, selector: "praxis-rule-definition", inputs: ["ruleNode", "fieldSchemas", "targetSchemas", "propertySchema"], outputs: ["ruleChanged"] }, { kind: "component", type: RuleCanvasComponent, selector: "praxis-rule-canvas", inputs: ["conditionOnly", "state", "fieldSchemas", "validationErrors"], outputs: ["nodeSelected", "nodeAdded", "nodeUpdated", "nodeRemoved"] }, { kind: "pipe", type: i12$1.JsonPipe, name: "json" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
13771
13818
|
}
|
|
13772
13819
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: RuleEditorComponent, decorators: [{
|
|
13773
13820
|
type: Component,
|
|
@@ -13992,7 +14039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
13992
14039
|
(change)="onFileSelected($event)"
|
|
13993
14040
|
/>
|
|
13994
14041
|
</div>
|
|
13995
|
-
`, styles: [".rule-editor-container{--_pvb-editor-accent: var(--md-sys-color-primary, var(--sicoob-primary-default));--_pvb-editor-accent-soft: color-mix(in srgb, var(--_pvb-editor-accent) 16%, transparent);--_pvb-editor-surface: var(--md-sys-color-surface, var(--sicoob-background-primary));--_pvb-editor-surface-low: var(--md-sys-color-surface-container-low, var(--sicoob-background-secondary));--_pvb-editor-surface-strong: var(--md-sys-color-surface-container, var(--sicoob-background-tertiary));--_pvb-editor-border: var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));--_pvb-editor-text: var(--md-sys-color-on-surface, var(--sicoob-text-default));--_pvb-editor-text-soft: var(--md-sys-color-on-surface-variant, var(--sicoob-text-subtle));display:flex;flex-direction:column;height:100%;background:radial-gradient(circle at top center,color-mix(in srgb,var(--_pvb-editor-accent) 12%,transparent) 0%,transparent 32%),linear-gradient(180deg,color-mix(in srgb,var(--_pvb-editor-surface-low) 96%,black 4%),color-mix(in srgb,var(--_pvb-editor-surface) 98%,black 2%));overflow:hidden;position:relative;color:var(--_pvb-editor-text)}.rule-editor-container.embedded{height:100%}.condition-only-editor{display:flex;flex-direction:column;height:100%;min-height:360px;overflow:hidden}.condition-only-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%)}.condition-only-header h3{margin:0;font-size:16px;font-weight:600}.condition-only-header p{margin:4px 0 0;font-size:12px;color:var(--_pvb-editor-text-soft)}.condition-only-canvas{flex:1;min-height:0}.builder-shell-header{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:54px;padding:0 18px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%);flex-shrink:0}.shell-brand{display:flex;align-items:center;gap:10px;min-width:0}.shell-menu{margin-right:2px}.brand-mark{width:32px;height:32px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);border:1px solid color-mix(in srgb,var(--_pvb-editor-accent) 24%,transparent)}.brand-mark mat-icon{display:flex;align-items:center;justify-content:center;font-size:18px;width:18px;height:18px;color:var(--_pvb-editor-accent)}.brand-copy{display:flex;flex-direction:column;gap:2px;min-width:0}.brand-title{font-size:14px;font-weight:700}.brand-breadcrumb{font-size:12px;color:var(--_pvb-editor-text-soft)}.shell-nav{display:inline-flex;align-items:center;gap:10px;padding:4px;border-radius:14px;background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);border:1px solid color-mix(in srgb,var(--_pvb-editor-border) 56%,transparent)}.nav-pill{min-width:96px;height:34px;border:0;border-radius:10px;background:transparent;color:var(--_pvb-editor-text-soft);font:inherit;font-size:13px;cursor:default}.nav-pill.active{color:var(--_pvb-editor-text);background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_pvb-editor-accent) 34%,transparent)}.shell-status{display:flex;align-items:center;gap:6px}.unsaved-indicator{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--_pvb-editor-text);margin-right:6px}.unsaved-dot{width:8px;height:8px;border-radius:999px;background:#f0b429;box-shadow:0 0 12px #f0b42973}.danger-action{color:var(--md-sys-color-error)}.editor-content-grid{display:grid;grid-template-columns:360px 1fr;flex:1;overflow:hidden;min-height:0;min-width:0;transition:grid-template-columns .2s ease}.editor-content-grid.list-closed{grid-template-columns:0 1fr}.rule-list-panel{border-right:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);display:flex;flex-direction:column;overflow:hidden;min-width:0}.rule-definition-panel{background:radial-gradient(circle at 50% 0%,color-mix(in srgb,var(--_pvb-editor-accent) 8%,transparent) 0%,transparent 26%),transparent;overflow:hidden;display:flex;flex-direction:column;position:relative;min-height:0;min-width:0;flex:1}.empty-state,.unsupported-node{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--_pvb-editor-text-soft);gap:16px;text-align:center;padding:32px}.empty-state mat-icon,.unsupported-node mat-icon{font-size:64px;width:64px;height:64px;opacity:.9;color:var(--_pvb-editor-accent)}.status-bar{height:32px;background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 92%,black 8%);border-top:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);display:flex;align-items:center;justify-content:space-between;padding:0 16px;font-size:12px;color:var(--_pvb-editor-text-soft);flex-shrink:0}.status-left,.status-center{display:flex;align-items:center;gap:8px}.validation-status{display:flex;align-items:center;gap:4px}.validation-status.error{color:var(--md-sys-color-error)}.validation-status.success{color:var(--md-sys-color-tertiary)}.validation-status mat-icon{font-size:16px;width:16px;height:16px}.debug-panel{position:absolute;top:0;right:0;bottom:0;width:400px;background:var(--_pvb-editor-surface);border-left:1px solid var(--_pvb-editor-border);box-shadow:-2px 0 8px #0000001a;z-index:var(--praxis-layer-authoring-toolbar, 340);display:flex;flex-direction:column}.debug-header{padding:8px 16px;border-bottom:1px solid var(--_pvb-editor-border);display:flex;align-items:center;justify-content:space-between;background:var(--_pvb-editor-surface-strong)}.debug-content{flex:1;overflow:auto;padding:16px;font-family:monospace;font-size:12px}@media(max-width:1180px){.builder-shell-header{flex-wrap:wrap;justify-content:flex-start;padding:10px 14px}.shell-nav{order:3;width:100%;justify-content:center}.shell-status{margin-left:auto}}@media(max-width:720px){.editor-content-grid,.editor-content-grid.list-closed{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(360px,1fr);overflow-y:auto}.rule-list-panel{max-height:min(360px,48vh);border-right:0;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent)}.rule-definition-panel{min-height:360px}}\n"] }]
|
|
14042
|
+
`, styles: [":host{display:block;min-width:0;max-width:100%}.rule-editor-container{--_pvb-editor-accent: var(--md-sys-color-primary, var(--sicoob-primary-default));--_pvb-editor-accent-soft: color-mix(in srgb, var(--_pvb-editor-accent) 16%, transparent);--_pvb-editor-surface: var(--md-sys-color-surface, var(--sicoob-background-primary));--_pvb-editor-surface-low: var(--md-sys-color-surface-container-low, var(--sicoob-background-secondary));--_pvb-editor-surface-strong: var(--md-sys-color-surface-container, var(--sicoob-background-tertiary));--_pvb-editor-border: var(--md-sys-color-outline-variant, var(--sicoob-stroke-medium));--_pvb-editor-text: var(--md-sys-color-on-surface, var(--sicoob-text-default));--_pvb-editor-text-soft: var(--md-sys-color-on-surface-variant, var(--sicoob-text-subtle));display:flex;flex-direction:column;width:100%;min-width:0;max-width:100%;box-sizing:border-box;height:100%;background:radial-gradient(circle at top center,color-mix(in srgb,var(--_pvb-editor-accent) 12%,transparent) 0%,transparent 32%),linear-gradient(180deg,color-mix(in srgb,var(--_pvb-editor-surface-low) 96%,black 4%),color-mix(in srgb,var(--_pvb-editor-surface) 98%,black 2%));overflow:hidden;position:relative;color:var(--_pvb-editor-text)}.rule-editor-container.embedded{height:100%}.condition-only-editor{display:flex;flex-direction:column;width:100%;min-width:0;max-width:100%;height:100%;min-height:360px;overflow:hidden}.condition-only-header{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 16px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%)}.condition-only-header h3{margin:0;font-size:16px;font-weight:600}.condition-only-header p{margin:4px 0 0;font-size:12px;color:var(--_pvb-editor-text-soft)}.condition-only-canvas{flex:1;width:100%;min-width:0;max-width:100%;min-height:0}.builder-shell-header{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:54px;padding:0 18px;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 68%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 94%,black 6%);flex-shrink:0}.shell-brand{display:flex;align-items:center;gap:10px;min-width:0}.shell-menu{margin-right:2px}.brand-mark{width:32px;height:32px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);border:1px solid color-mix(in srgb,var(--_pvb-editor-accent) 24%,transparent)}.brand-mark mat-icon{display:flex;align-items:center;justify-content:center;font-size:18px;width:18px;height:18px;color:var(--_pvb-editor-accent)}.brand-copy{display:flex;flex-direction:column;gap:2px;min-width:0}.brand-title{font-size:14px;font-weight:700}.brand-breadcrumb{font-size:12px;color:var(--_pvb-editor-text-soft)}.shell-nav{display:inline-flex;align-items:center;gap:10px;padding:4px;border-radius:14px;background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);border:1px solid color-mix(in srgb,var(--_pvb-editor-border) 56%,transparent)}.nav-pill{min-width:96px;height:34px;border:0;border-radius:10px;background:transparent;color:var(--_pvb-editor-text-soft);font:inherit;font-size:13px;cursor:default}.nav-pill.active{color:var(--_pvb-editor-text);background:color-mix(in srgb,var(--_pvb-editor-accent) 16%,transparent);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--_pvb-editor-accent) 34%,transparent)}.shell-status{display:flex;align-items:center;gap:6px}.unsaved-indicator{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--_pvb-editor-text);margin-right:6px}.unsaved-dot{width:8px;height:8px;border-radius:999px;background:#f0b429;box-shadow:0 0 12px #f0b42973}.danger-action{color:var(--md-sys-color-error)}.editor-content-grid{display:grid;grid-template-columns:360px 1fr;flex:1;overflow:hidden;min-height:0;min-width:0;transition:grid-template-columns .2s ease}.editor-content-grid.list-closed{grid-template-columns:0 1fr}.rule-list-panel{border-right:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);background:color-mix(in srgb,var(--_pvb-editor-surface-low) 94%,black 6%);display:flex;flex-direction:column;overflow:hidden;min-width:0}.rule-definition-panel{background:radial-gradient(circle at 50% 0%,color-mix(in srgb,var(--_pvb-editor-accent) 8%,transparent) 0%,transparent 26%),transparent;overflow:hidden;display:flex;flex-direction:column;position:relative;min-height:0;min-width:0;flex:1}.empty-state,.unsupported-node{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--_pvb-editor-text-soft);gap:16px;text-align:center;padding:32px}.empty-state mat-icon,.unsupported-node mat-icon{font-size:64px;width:64px;height:64px;opacity:.9;color:var(--_pvb-editor-accent)}.status-bar{height:32px;background:color-mix(in srgb,var(--_pvb-editor-surface-strong) 92%,black 8%);border-top:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent);display:flex;align-items:center;justify-content:space-between;padding:0 16px;font-size:12px;color:var(--_pvb-editor-text-soft);flex-shrink:0}.status-left,.status-center{display:flex;align-items:center;gap:8px}.validation-status{display:flex;align-items:center;gap:4px}.validation-status.error{color:var(--md-sys-color-error)}.validation-status.success{color:var(--md-sys-color-tertiary)}.validation-status mat-icon{font-size:16px;width:16px;height:16px}.debug-panel{position:absolute;top:0;right:0;bottom:0;width:400px;background:var(--_pvb-editor-surface);border-left:1px solid var(--_pvb-editor-border);box-shadow:-2px 0 8px #0000001a;z-index:var(--praxis-layer-authoring-toolbar, 340);display:flex;flex-direction:column}.debug-header{padding:8px 16px;border-bottom:1px solid var(--_pvb-editor-border);display:flex;align-items:center;justify-content:space-between;background:var(--_pvb-editor-surface-strong)}.debug-content{flex:1;overflow:auto;padding:16px;font-family:monospace;font-size:12px}@media(max-width:1180px){.builder-shell-header{flex-wrap:wrap;justify-content:flex-start;padding:10px 14px}.shell-nav{order:3;width:100%;justify-content:center}.shell-status{margin-left:auto}}@media(max-width:720px){.editor-content-grid,.editor-content-grid.list-closed{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(360px,1fr);overflow-y:auto}.rule-list-panel{max-height:min(360px,48vh);border-right:0;border-bottom:1px solid color-mix(in srgb,var(--_pvb-editor-border) 74%,transparent)}.rule-definition-panel{min-height:360px}}\n"] }]
|
|
13996
14043
|
}], ctorParameters: () => [{ type: RuleBuilderService }, { type: FieldSchemaService }, { type: i3$1.AiResponseValidatorService }, { type: i4.MatSnackBar }, { type: i1.MatDialog }, { type: i0.ChangeDetectorRef }, { type: i1$2.PraxisI18nService, decorators: [{
|
|
13997
14044
|
type: Optional
|
|
13998
14045
|
}] }], propDecorators: { embedded: [{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/visual-builder",
|
|
3
|
-
"version": "9.0.5-rc.
|
|
3
|
+
"version": "9.0.5-rc.40",
|
|
4
4
|
"description": "Visual rule and expression builder for Praxis UI with JSON Logic authoring, validation and context variables.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
@@ -8,10 +8,10 @@
|
|
|
8
8
|
"@angular/cdk": "^21.0.0",
|
|
9
9
|
"@angular/material": "^21.0.0",
|
|
10
10
|
"@angular/forms": "^21.0.0",
|
|
11
|
-
"@praxisui/settings-panel": "^9.0.5-rc.
|
|
12
|
-
"@praxisui/ai": "^9.0.5-rc.
|
|
13
|
-
"@praxisui/core": "^9.0.5-rc.
|
|
14
|
-
"@praxisui/metadata-editor": "^9.0.5-rc.
|
|
11
|
+
"@praxisui/settings-panel": "^9.0.5-rc.40",
|
|
12
|
+
"@praxisui/ai": "^9.0.5-rc.40",
|
|
13
|
+
"@praxisui/core": "^9.0.5-rc.40",
|
|
14
|
+
"@praxisui/metadata-editor": "^9.0.5-rc.40",
|
|
15
15
|
"rxjs": "~7.8.0"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
@@ -42,6 +42,7 @@ interface SpecificationMetadata {
|
|
|
42
42
|
* Value types for rule configuration
|
|
43
43
|
*/
|
|
44
44
|
type ValueType = 'literal' | 'field' | 'context' | 'function';
|
|
45
|
+
type FieldOperandTransform = 'coalesce';
|
|
45
46
|
/**
|
|
46
47
|
* Valid comparison operators supported by the visual builder
|
|
47
48
|
*/
|
|
@@ -112,6 +113,10 @@ interface FieldConditionConfig {
|
|
|
112
113
|
valueType?: ValueType;
|
|
113
114
|
/** Field to compare against (for field-to-field comparisons) */
|
|
114
115
|
compareToField?: string;
|
|
116
|
+
/** Canonical JSON Logic transform applied to the left field operand. */
|
|
117
|
+
fieldValueTransform?: FieldOperandTransform;
|
|
118
|
+
/** Canonical JSON Logic transform applied to a field-valued right operand. */
|
|
119
|
+
compareToFieldValueTransform?: FieldOperandTransform;
|
|
115
120
|
/** Context variable to use as value */
|
|
116
121
|
contextVariable?: string;
|
|
117
122
|
/** Optional metadata for error messages and UI hints */
|
|
@@ -1304,6 +1309,8 @@ declare class RuleBuilderService {
|
|
|
1304
1309
|
private jsonLogicOperatorToBuilderOperator;
|
|
1305
1310
|
private normalizeConditionValue;
|
|
1306
1311
|
private buildConditionRightOperand;
|
|
1312
|
+
private buildFieldOperand;
|
|
1313
|
+
private parseFieldOperand;
|
|
1307
1314
|
private isJsonLogicExpressionCandidate;
|
|
1308
1315
|
private isVarExpression;
|
|
1309
1316
|
private extractVarPath;
|
|
@@ -2958,4 +2965,4 @@ declare class RuleListComponent {
|
|
|
2958
2965
|
}
|
|
2959
2966
|
|
|
2960
2967
|
export { ArrayFieldAnalyzer, CollectionValidatorEditorComponent, ConditionalValidatorEditorComponent, ConditionalValidatorType, ConfigurationError, ContextError, ContextManagementService, ConversionError, ErrorCategory, ErrorHandler, ErrorSeverity, ExportDialogComponent, ExportIntegrationService, ExpressionError, FIELD_TYPE_OPERATORS, FieldConditionEditorComponent, FieldSchemaService, FieldType, InternalError, JsonViewerComponent, MetadataEditorComponent, OPERATOR_LABELS, PRAXIS_VISUAL_BUILDER_AUTHORING_MANIFEST, PRAXIS_VISUAL_BUILDER_COMPONENT_METADATA, PraxisVisualBuilder, RegistryError, RuleBuilderService, RuleCanvasComponent, RuleEditorComponent, RuleListComponent, RuleNodeComponent, RuleNodeRegistryService, RuleNodeType, RuleTemplateService, RuleValidationService, TemplateEditorDialogComponent, TemplateGalleryComponent, TemplatePreviewDialogComponent, ValidationError as VBValidationError, ValidationCategory, ValidationSeverity, VisualBuilderError, VisualRuleBuilderComponent, WebhookIntegrationService, createError, getArrayItemFieldPaths, globalErrorHandler, isArrayFieldSchema, providePraxisVisualBuilderMetadata };
|
|
2961
|
-
export type { ArrayCollectionValidationRule, ArrayFieldSchema, ArrayValidationContext, ArrayValidationError, BooleanGroupConfig, CardinalityConfig, CircularReference, CleanupResult, CollectionValidationConfig, CollectionValidatorConfig, ConditionalValidatorConfig, ConditionalValidatorPreview, ContextEntry, ContextScope, ContextValue, ContextVariable, ContextualConfig, ContextualTemplateConfig, CustomConfig, CustomFunction, DocumentationLink, EnhancedFieldSchema, ErrorInfo, ErrorStatistics, ExportDialogData, ExportFormat, ExportOptions, ExportResult, ExpressionConfig, ExternalSystemConfig, FieldConditionConfig, FieldFormat, FieldOption, FieldSchema, FieldSchemaContext, FieldToFieldConfig, FieldUIConfig, FunctionCallConfig, FunctionParameter, ImportOptions, IntegrationEndpoint, IntegrationResult, MemoryStats, OptionalFieldConfig, PropertyRuleConfig, RegistryIntegrityResult, RegistryValidationResult, RuleBuilderConfig, RuleBuilderSnapshot, RuleBuilderState, RuleContextProvider, RuleFunctionRegistry, RuleNode, RuleNodeConfig, RuleNodeTree, RuleNodeTypeString, RuleTemplate, RuleValidationResult, SpecificationMetadata, TemplateApplicationResult, TemplateCategory, TemplateDisplayMode, TemplateEditorDialogData, TemplateEditorResult, TemplateMetadata, TemplatePreviewDialogData, TemplateSearchCriteria, TemplateSortOption, TemplateStats, TemplateValidationResult, ValidComparisonOperator, ValidationConfig, ValidationContext, ValidationError$1 as ValidationError, ValidationIssue, ValidationResult, ValidationRule, ValueType, VisualBuilderMode, WebhookConfig, WebhookDelivery, WebhookEvent, WebhookStats };
|
|
2968
|
+
export type { ArrayCollectionValidationRule, ArrayFieldSchema, ArrayValidationContext, ArrayValidationError, BooleanGroupConfig, CardinalityConfig, CircularReference, CleanupResult, CollectionValidationConfig, CollectionValidatorConfig, ConditionalValidatorConfig, ConditionalValidatorPreview, ContextEntry, ContextScope, ContextValue, ContextVariable, ContextualConfig, ContextualTemplateConfig, CustomConfig, CustomFunction, DocumentationLink, EnhancedFieldSchema, ErrorInfo, ErrorStatistics, ExportDialogData, ExportFormat, ExportOptions, ExportResult, ExpressionConfig, ExternalSystemConfig, FieldConditionConfig, FieldFormat, FieldOperandTransform, FieldOption, FieldSchema, FieldSchemaContext, FieldToFieldConfig, FieldUIConfig, FunctionCallConfig, FunctionParameter, ImportOptions, IntegrationEndpoint, IntegrationResult, MemoryStats, OptionalFieldConfig, PropertyRuleConfig, RegistryIntegrityResult, RegistryValidationResult, RuleBuilderConfig, RuleBuilderSnapshot, RuleBuilderState, RuleContextProvider, RuleFunctionRegistry, RuleNode, RuleNodeConfig, RuleNodeTree, RuleNodeTypeString, RuleTemplate, RuleValidationResult, SpecificationMetadata, TemplateApplicationResult, TemplateCategory, TemplateDisplayMode, TemplateEditorDialogData, TemplateEditorResult, TemplateMetadata, TemplatePreviewDialogData, TemplateSearchCriteria, TemplateSortOption, TemplateStats, TemplateValidationResult, ValidComparisonOperator, ValidationConfig, ValidationContext, ValidationError$1 as ValidationError, ValidationIssue, ValidationResult, ValidationRule, ValueType, VisualBuilderMode, WebhookConfig, WebhookDelivery, WebhookEvent, WebhookStats };
|