@praxisui/crud 8.0.0-beta.99 → 9.0.0-beta.1
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 +27 -1
- package/fesm2022/praxisui-crud.mjs +197 -31
- package/package.json +7 -7
- package/types/praxisui-crud.d.ts +2 -0
package/README.md
CHANGED
|
@@ -57,7 +57,33 @@ last_updated: "2026-04-10"
|
|
|
57
57
|
## Install
|
|
58
58
|
|
|
59
59
|
```bash
|
|
60
|
-
npm i @praxisui/crud
|
|
60
|
+
npm i @praxisui/crud@latest
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## Minimal standalone host
|
|
64
|
+
|
|
65
|
+
```ts
|
|
66
|
+
import { Component } from '@angular/core';
|
|
67
|
+
import { PraxisCrudComponent } from '@praxisui/crud';
|
|
68
|
+
|
|
69
|
+
@Component({
|
|
70
|
+
selector: 'app-admin-crud',
|
|
71
|
+
standalone: true,
|
|
72
|
+
imports: [PraxisCrudComponent],
|
|
73
|
+
template: `
|
|
74
|
+
<praxis-crud
|
|
75
|
+
crudId="employees-crud"
|
|
76
|
+
[metadata]="metadata"
|
|
77
|
+
[enableCustomization]="true" />
|
|
78
|
+
`,
|
|
79
|
+
})
|
|
80
|
+
export class AdminCrudComponent {
|
|
81
|
+
metadata = {
|
|
82
|
+
resourceKey: 'employees',
|
|
83
|
+
table: { columns: [] },
|
|
84
|
+
form: { fields: [] },
|
|
85
|
+
};
|
|
86
|
+
}
|
|
61
87
|
```
|
|
62
88
|
|
|
63
89
|
Peer dependencies principais:
|
|
@@ -6,7 +6,7 @@ import { Router, ActivatedRoute, RouterLink } from '@angular/router';
|
|
|
6
6
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
7
7
|
import { firstValueFrom, BehaviorSubject, Subscription } from 'rxjs';
|
|
8
8
|
import * as i2$1 from '@praxisui/core';
|
|
9
|
-
import { ASYNC_CONFIG_STORAGE, GlobalConfigService, CrudOperationResolutionService, fillUndefined, SETTINGS_PANEL_DATA, PraxisI18nService, providePraxisI18nConfig, createDefaultTableConfig, GLOBAL_SURFACE_SERVICE, ComponentKeyService, ResourceDiscoveryService, ResourceActionOpenAdapterService, ResourceSurfaceOpenAdapterService, translateUnavailableWorkflowMessage, EmptyStateCardComponent, RESOURCE_DISCOVERY_I18N_CONFIG,
|
|
9
|
+
import { ASYNC_CONFIG_STORAGE, GlobalConfigService, CrudOperationResolutionService, fillUndefined, SETTINGS_PANEL_DATA, PraxisI18nService, PraxisIconDirective, providePraxisI18nConfig, createDefaultTableConfig, GLOBAL_SURFACE_SERVICE, ComponentKeyService, ResourceDiscoveryService, ResourceActionOpenAdapterService, ResourceSurfaceOpenAdapterService, translateUnavailableWorkflowMessage, EmptyStateCardComponent, RESOURCE_DISCOVERY_I18N_CONFIG, GenericCrudService, ComponentMetadataRegistry } from '@praxisui/core';
|
|
10
10
|
import { SettingsPanelService } from '@praxisui/settings-panel';
|
|
11
11
|
import { PraxisTableInlineAuthoringEditorComponent, PraxisTable } from '@praxisui/table';
|
|
12
12
|
import { ConfirmDialogComponent } from '@praxisui/dynamic-fields';
|
|
@@ -23,14 +23,16 @@ import * as i4 from '@angular/material/expansion';
|
|
|
23
23
|
import { MatExpansionModule } from '@angular/material/expansion';
|
|
24
24
|
import * as i5 from '@angular/material/form-field';
|
|
25
25
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
26
|
-
import * as i6 from '@angular/material/
|
|
26
|
+
import * as i6 from '@angular/material/icon';
|
|
27
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
28
|
+
import * as i7 from '@angular/material/input';
|
|
27
29
|
import { MatInputModule } from '@angular/material/input';
|
|
28
|
-
import * as
|
|
30
|
+
import * as i8 from '@angular/material/select';
|
|
29
31
|
import { MatSelectModule } from '@angular/material/select';
|
|
30
|
-
import * as
|
|
32
|
+
import * as i9 from '@angular/material/slide-toggle';
|
|
31
33
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
|
32
|
-
import * as
|
|
33
|
-
import {
|
|
34
|
+
import * as i10 from '@angular/material/tabs';
|
|
35
|
+
import { MatTabsModule } from '@angular/material/tabs';
|
|
34
36
|
import { PraxisDynamicForm } from '@praxisui/dynamic-form';
|
|
35
37
|
import { filter, take } from 'rxjs/operators';
|
|
36
38
|
|
|
@@ -973,18 +975,18 @@ const PRAXIS_CRUD_AUTHORING_I18N_CONFIG = {
|
|
|
973
975
|
'crud.authoring.table.summary': 'A configuração detalhada da tabela continua sendo tratada pela superfície canônica de TableConfig. Nesta fase, o editor de CRUD preserva o snapshot atual da tabela sem duplicar o editor completo.',
|
|
974
976
|
'crud.authoring.json.hint': 'O JSON abaixo representa o documento canônico de authoring do CRUD.',
|
|
975
977
|
'crud.authoring.table.structureSummary': '{count} colunas | {density}',
|
|
976
|
-
'crud.authoring.table.paginationSummary': '
|
|
977
|
-
'crud.authoring.table.paginationOff': '
|
|
978
|
-
'crud.authoring.table.sortingClient': '
|
|
979
|
-
'crud.authoring.table.sortingServer': '
|
|
980
|
-
'crud.authoring.table.sortingOff': '
|
|
981
|
-
'crud.authoring.table.statesDefault': 'Textos
|
|
978
|
+
'crud.authoring.table.paginationSummary': 'Página com {value}',
|
|
979
|
+
'crud.authoring.table.paginationOff': 'Paginação desativada',
|
|
980
|
+
'crud.authoring.table.sortingClient': 'Ordenação client-side',
|
|
981
|
+
'crud.authoring.table.sortingServer': 'Ordenação server-side',
|
|
982
|
+
'crud.authoring.table.sortingOff': 'Ordenação desativada',
|
|
983
|
+
'crud.authoring.table.statesDefault': 'Textos padrão',
|
|
982
984
|
'crud.authoring.table.statesCustom': '{count} estados customizados',
|
|
983
985
|
'crud.authoring.table.sectionSummary': '{structure}. {behavior}. {states}.',
|
|
984
986
|
'crud.authoring.table.flowSummary': 'A apresentação principal continua visível abaixo. Paginação, ordenação, textos de estado e colunas ficam nos painéis avançados da tabela.',
|
|
985
987
|
'crud.authoring.table.density.compact': 'Compacta',
|
|
986
|
-
'crud.authoring.table.density.comfortable': '
|
|
987
|
-
'crud.authoring.table.density.spacious': '
|
|
988
|
+
'crud.authoring.table.density.comfortable': 'Confortável',
|
|
989
|
+
'crud.authoring.table.density.spacious': 'Espaçada',
|
|
988
990
|
'crud.authoring.json.summaryErrors': 'O documento canônico ainda possui erros de validação.',
|
|
989
991
|
'crud.authoring.json.summaryWarnings': 'O documento canônico possui diagnósticos que valem revisão.',
|
|
990
992
|
'crud.authoring.json.summaryClean': 'O documento canônico está estruturalmente consistente.',
|
|
@@ -1741,7 +1743,7 @@ class CrudMetadataEditorComponent {
|
|
|
1741
1743
|
parts.push(this.tx('crud.authoring.defaults.modal.noteBreakpoint', 'Fullscreen at {value}px')
|
|
1742
1744
|
.replace('{value}', this.modalFullscreenBreakpoint().trim()));
|
|
1743
1745
|
}
|
|
1744
|
-
return parts.join('
|
|
1746
|
+
return parts.join(' · ');
|
|
1745
1747
|
}
|
|
1746
1748
|
backDefaultsNote() {
|
|
1747
1749
|
const parts = [
|
|
@@ -1755,7 +1757,7 @@ class CrudMetadataEditorComponent {
|
|
|
1755
1757
|
if (this.backConfirmOnDirty()) {
|
|
1756
1758
|
parts.push(this.tx('crud.authoring.defaults.back.noteConfirmOnDirty', 'Dirty confirmation'));
|
|
1757
1759
|
}
|
|
1758
|
-
return parts.join('
|
|
1760
|
+
return parts.join(' · ');
|
|
1759
1761
|
}
|
|
1760
1762
|
actionsOverview() {
|
|
1761
1763
|
const readyCount = this.actionKeys.filter((actionName) => this.actionStatus(actionName) === 'ready').length;
|
|
@@ -1902,6 +1904,22 @@ class CrudMetadataEditorComponent {
|
|
|
1902
1904
|
invalid: this.tx('crud.authoring.section.status.invalid', 'Invalid'),
|
|
1903
1905
|
}[this.sectionStatus(section)];
|
|
1904
1906
|
}
|
|
1907
|
+
jsonTabStatus() {
|
|
1908
|
+
if (this.errorCount() > 0) {
|
|
1909
|
+
return 'invalid';
|
|
1910
|
+
}
|
|
1911
|
+
if (this.warningCount() > 0) {
|
|
1912
|
+
return 'pending';
|
|
1913
|
+
}
|
|
1914
|
+
return 'ready';
|
|
1915
|
+
}
|
|
1916
|
+
jsonTabStatusLabel() {
|
|
1917
|
+
return {
|
|
1918
|
+
ready: this.tx('crud.authoring.section.status.ready', 'Ready'),
|
|
1919
|
+
pending: this.tx('crud.authoring.section.status.pending', 'Needs attention'),
|
|
1920
|
+
invalid: this.tx('crud.authoring.section.status.invalid', 'Invalid'),
|
|
1921
|
+
}[this.jsonTabStatus()];
|
|
1922
|
+
}
|
|
1905
1923
|
sectionSummary(section) {
|
|
1906
1924
|
if (section === 'connection') {
|
|
1907
1925
|
return this.connectionOverview();
|
|
@@ -2377,6 +2395,19 @@ class CrudMetadataEditorComponent {
|
|
|
2377
2395
|
</div>
|
|
2378
2396
|
</section>
|
|
2379
2397
|
|
|
2398
|
+
<mat-tab-group class="editor-tabs" data-testid="crud-editor-tabs" dynamicHeight>
|
|
2399
|
+
<mat-tab>
|
|
2400
|
+
<ng-template mat-tab-label>
|
|
2401
|
+
<mat-icon [praxisIcon]="'link'"></mat-icon>
|
|
2402
|
+
<span data-testid="crud-editor-tab-connection">{{ tx('crud.authoring.section.connection', 'Connection') }}</span>
|
|
2403
|
+
<span
|
|
2404
|
+
class="tab-status-dot"
|
|
2405
|
+
[class.tab-status-dot--warn]="sectionStatus('connection') === 'pending'"
|
|
2406
|
+
[class.tab-status-dot--error]="sectionStatus('connection') === 'invalid'"
|
|
2407
|
+
[attr.title]="sectionStatusLabel('connection')"
|
|
2408
|
+
></span>
|
|
2409
|
+
</ng-template>
|
|
2410
|
+
<div class="tab-content">
|
|
2380
2411
|
<mat-card class="editor-card">
|
|
2381
2412
|
<div class="editor-section-header">
|
|
2382
2413
|
<div>
|
|
@@ -2402,7 +2433,21 @@ class CrudMetadataEditorComponent {
|
|
|
2402
2433
|
</mat-form-field>
|
|
2403
2434
|
</div>
|
|
2404
2435
|
</mat-card>
|
|
2436
|
+
</div>
|
|
2437
|
+
</mat-tab>
|
|
2405
2438
|
|
|
2439
|
+
<mat-tab>
|
|
2440
|
+
<ng-template mat-tab-label>
|
|
2441
|
+
<mat-icon [praxisIcon]="'tune'"></mat-icon>
|
|
2442
|
+
<span data-testid="crud-editor-tab-defaults">{{ tx('crud.authoring.section.defaults', 'Open mode and header') }}</span>
|
|
2443
|
+
<span
|
|
2444
|
+
class="tab-status-dot"
|
|
2445
|
+
[class.tab-status-dot--warn]="sectionStatus('defaults') === 'pending'"
|
|
2446
|
+
[class.tab-status-dot--error]="sectionStatus('defaults') === 'invalid'"
|
|
2447
|
+
[attr.title]="sectionStatusLabel('defaults')"
|
|
2448
|
+
></span>
|
|
2449
|
+
</ng-template>
|
|
2450
|
+
<div class="tab-content">
|
|
2406
2451
|
<mat-card class="editor-card">
|
|
2407
2452
|
<div class="editor-section-header">
|
|
2408
2453
|
<div>
|
|
@@ -2516,7 +2561,21 @@ class CrudMetadataEditorComponent {
|
|
|
2516
2561
|
</div>
|
|
2517
2562
|
</section>
|
|
2518
2563
|
</mat-card>
|
|
2564
|
+
</div>
|
|
2565
|
+
</mat-tab>
|
|
2519
2566
|
|
|
2567
|
+
<mat-tab>
|
|
2568
|
+
<ng-template mat-tab-label>
|
|
2569
|
+
<mat-icon [praxisIcon]="'bolt'"></mat-icon>
|
|
2570
|
+
<span data-testid="crud-editor-tab-actions">{{ tx('crud.authoring.section.actions', 'Actions') }}</span>
|
|
2571
|
+
<span
|
|
2572
|
+
class="tab-status-dot"
|
|
2573
|
+
[class.tab-status-dot--warn]="sectionStatus('actions') === 'pending'"
|
|
2574
|
+
[class.tab-status-dot--error]="sectionStatus('actions') === 'invalid'"
|
|
2575
|
+
[attr.title]="sectionStatusLabel('actions')"
|
|
2576
|
+
></span>
|
|
2577
|
+
</ng-template>
|
|
2578
|
+
<div class="tab-content">
|
|
2520
2579
|
<section class="editor-actions">
|
|
2521
2580
|
<div class="editor-section-header">
|
|
2522
2581
|
<div>
|
|
@@ -2731,7 +2790,21 @@ class CrudMetadataEditorComponent {
|
|
|
2731
2790
|
}
|
|
2732
2791
|
</div>
|
|
2733
2792
|
</section>
|
|
2793
|
+
</div>
|
|
2794
|
+
</mat-tab>
|
|
2734
2795
|
|
|
2796
|
+
<mat-tab>
|
|
2797
|
+
<ng-template mat-tab-label>
|
|
2798
|
+
<mat-icon [praxisIcon]="'table_view'"></mat-icon>
|
|
2799
|
+
<span data-testid="crud-editor-tab-table">{{ tx('crud.authoring.section.table', 'Table') }}</span>
|
|
2800
|
+
<span
|
|
2801
|
+
class="tab-status-dot"
|
|
2802
|
+
[class.tab-status-dot--warn]="sectionStatus('table') === 'pending'"
|
|
2803
|
+
[class.tab-status-dot--error]="sectionStatus('table') === 'invalid'"
|
|
2804
|
+
[attr.title]="sectionStatusLabel('table')"
|
|
2805
|
+
></span>
|
|
2806
|
+
</ng-template>
|
|
2807
|
+
<div class="tab-content">
|
|
2735
2808
|
<mat-card class="editor-card">
|
|
2736
2809
|
<div class="editor-section-header">
|
|
2737
2810
|
<div>
|
|
@@ -2755,7 +2828,21 @@ class CrudMetadataEditorComponent {
|
|
|
2755
2828
|
(configChange)="setTableConfig($event)"
|
|
2756
2829
|
/>
|
|
2757
2830
|
</mat-card>
|
|
2831
|
+
</div>
|
|
2832
|
+
</mat-tab>
|
|
2758
2833
|
|
|
2834
|
+
<mat-tab>
|
|
2835
|
+
<ng-template mat-tab-label>
|
|
2836
|
+
<mat-icon [praxisIcon]="'data_object'"></mat-icon>
|
|
2837
|
+
<span data-testid="crud-editor-tab-json">{{ tx('crud.authoring.section.json', 'JSON') }}</span>
|
|
2838
|
+
<span
|
|
2839
|
+
class="tab-status-dot"
|
|
2840
|
+
[class.tab-status-dot--warn]="jsonTabStatus() === 'pending'"
|
|
2841
|
+
[class.tab-status-dot--error]="jsonTabStatus() === 'invalid'"
|
|
2842
|
+
[attr.title]="jsonTabStatusLabel()"
|
|
2843
|
+
></span>
|
|
2844
|
+
</ng-template>
|
|
2845
|
+
<div class="tab-content">
|
|
2759
2846
|
<mat-card class="editor-card">
|
|
2760
2847
|
<h3>{{ tx('crud.authoring.section.json', 'JSON') }}</h3>
|
|
2761
2848
|
<p class="editor-section-note" data-testid="crud-editor-json-summary">{{ jsonSectionSummary() }}</p>
|
|
@@ -2783,8 +2870,11 @@ class CrudMetadataEditorComponent {
|
|
|
2783
2870
|
}
|
|
2784
2871
|
<pre data-testid="crud-editor-json">{{ serializedDocument() }}</pre>
|
|
2785
2872
|
</mat-card>
|
|
2873
|
+
</div>
|
|
2874
|
+
</mat-tab>
|
|
2875
|
+
</mat-tab-group>
|
|
2786
2876
|
</section>
|
|
2787
|
-
`, isInline: true, styles: [":host{display:block;min-width:0;color:var(--md-sys-color-on-surface,#1a1b20)}.editor-shell{display:grid;gap:16px}.editor-header{display:flex;justify-content:space-between;gap:16px;align-items:start}.editor-overview,.editor-health-map{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.editor-health-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-health-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-health-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus{display:flex;gap:12px;align-items:start;padding:14px 16px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-focus--success{background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.editor-focus-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);white-space:nowrap}.editor-focus-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-focus-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus-copy{display:grid;gap:4px}.editor-focus-copy p{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-overview-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-overview-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-overview-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-overview-label{font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-overview-value{line-height:1.3;overflow-wrap:anywhere}.editor-overview-note{margin:0;font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-header h2,.editor-card h3{margin:0}.editor-header p{margin:6px 0 0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-chip{padding:6px 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,transparent);font-size:12px}.editor-card{display:grid;gap:14px;padding:16px;border-radius:20px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 70%,transparent)}.editor-section-header{display:flex;justify-content:space-between;gap:12px;align-items:start}.editor-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-grid--compact{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.editor-toggles{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-actions,.action-grid{display:grid;gap:14px}.action-summary-strip{display:flex;flex-wrap:wrap;gap:8px}.action-summary-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.action-summary-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.action-summary-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.action-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 88%,transparent)}.action-group--advanced{background:color-mix(in srgb,var(--md-sys-color-surface-container,#f5f7fb) 90%,transparent)}.action-group__header{display:grid;gap:4px}.action-subgroup{display:grid;gap:10px;padding:10px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent)}.action-subgroup__header{display:grid;gap:4px}.action-param-list{display:grid;gap:12px}.action-param-row{display:grid;gap:8px}.action-advanced-panel{border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 65%,transparent);border-radius:16px}.editor-section-note{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.diagnostics-groups{display:grid;gap:12px}.diagnostics-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.diagnostics{display:grid;gap:8px;margin:0;padding-left:18px}.diagnostics .error{color:var(--md-sys-color-error,#b3261e)}pre{margin:0;overflow:auto;max-height:320px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i4.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.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: MatSelectModule }, { kind: "component", type: i7.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: i7.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i8.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "component", type: PraxisTableInlineAuthoringEditorComponent, selector: "praxis-table-inline-authoring-editor", inputs: ["config", "readonly"], outputs: ["configChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2877
|
+
`, isInline: true, styles: [":host{display:block;min-width:0;color:var(--md-sys-color-on-surface,#1a1b20)}.editor-shell{display:grid;gap:16px}.editor-header{display:flex;justify-content:space-between;gap:16px;align-items:start}.editor-overview,.editor-health-map{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.editor-health-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-health-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-health-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus{display:flex;gap:12px;align-items:start;padding:14px 16px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-focus--success{background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.editor-focus-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);white-space:nowrap}.editor-focus-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-focus-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus-copy{display:grid;gap:4px}.editor-focus-copy p{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-tabs{display:flex;flex-direction:column;min-width:0}.editor-tabs .mat-mdc-tab{min-width:118px}.editor-tabs ::ng-deep .mdc-tab__content{gap:8px}.editor-tabs ::ng-deep .mat-mdc-tab-body-wrapper,.editor-tabs ::ng-deep .mat-mdc-tab-group-container{flex:1 1 auto;min-height:0}.editor-tabs ::ng-deep .mat-mdc-tab-body-content{overflow:visible}.tab-status-dot{width:8px;height:8px;border-radius:999px;background:var(--md-sys-color-primary,#1263b4);flex:0 0 auto}.tab-status-dot--warn{background:var(--md-sys-color-tertiary,#7d5700)}.tab-status-dot--error{background:var(--md-sys-color-error,#b3261e)}.tab-content{display:grid;gap:14px;min-width:0;padding:12px 2px 4px;box-sizing:border-box}.editor-overview-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-overview-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-overview-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-overview-label{font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-overview-value{line-height:1.3;overflow-wrap:anywhere}.editor-overview-note{margin:0;font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-header h2,.editor-card h3{margin:0}.editor-header p{margin:6px 0 0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-chip{padding:6px 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,transparent);font-size:12px}.editor-card{display:grid;gap:14px;padding:16px;border-radius:20px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 70%,transparent)}.editor-section-header{display:flex;justify-content:space-between;gap:12px;align-items:start}.editor-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-grid--compact{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.editor-toggles{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-actions,.action-grid{display:grid;gap:14px}.action-summary-strip{display:flex;flex-wrap:wrap;gap:8px}.action-summary-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.action-summary-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.action-summary-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.action-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 88%,transparent)}.action-group--advanced{background:color-mix(in srgb,var(--md-sys-color-surface-container,#f5f7fb) 90%,transparent)}.action-group__header{display:grid;gap:4px}.action-subgroup{display:grid;gap:10px;padding:10px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent)}.action-subgroup__header{display:grid;gap:4px}.action-param-list{display:grid;gap:12px}.action-param-row{display:grid;gap:8px}.action-advanced-panel{border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 65%,transparent);border-radius:16px}.editor-section-note{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.diagnostics-groups{display:grid;gap:12px}.diagnostics-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.diagnostics{display:grid;gap:8px;margin:0;padding-left:18px}.diagnostics .error{color:var(--md-sys-color-error,#b3261e)}pre{margin:0;overflow:auto;max-height:320px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i3.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i4.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.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: MatSelectModule }, { kind: "component", type: i8.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: i8.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "directive", type: i10.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i10.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i10.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisTableInlineAuthoringEditorComponent, selector: "praxis-table-inline-authoring-editor", inputs: ["config", "readonly"], outputs: ["configChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
2788
2878
|
}
|
|
2789
2879
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: CrudMetadataEditorComponent, decorators: [{
|
|
2790
2880
|
type: Component,
|
|
@@ -2794,9 +2884,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
2794
2884
|
MatCardModule,
|
|
2795
2885
|
MatExpansionModule,
|
|
2796
2886
|
MatFormFieldModule,
|
|
2887
|
+
MatIconModule,
|
|
2797
2888
|
MatInputModule,
|
|
2798
2889
|
MatSelectModule,
|
|
2799
2890
|
MatSlideToggleModule,
|
|
2891
|
+
MatTabsModule,
|
|
2892
|
+
PraxisIconDirective,
|
|
2800
2893
|
PraxisTableInlineAuthoringEditorComponent
|
|
2801
2894
|
], providers: [providePraxisI18nConfig(PRAXIS_CRUD_AUTHORING_I18N_CONFIG)], template: `
|
|
2802
2895
|
<section class="editor-shell" data-testid="crud-metadata-editor">
|
|
@@ -2866,6 +2959,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
2866
2959
|
</div>
|
|
2867
2960
|
</section>
|
|
2868
2961
|
|
|
2962
|
+
<mat-tab-group class="editor-tabs" data-testid="crud-editor-tabs" dynamicHeight>
|
|
2963
|
+
<mat-tab>
|
|
2964
|
+
<ng-template mat-tab-label>
|
|
2965
|
+
<mat-icon [praxisIcon]="'link'"></mat-icon>
|
|
2966
|
+
<span data-testid="crud-editor-tab-connection">{{ tx('crud.authoring.section.connection', 'Connection') }}</span>
|
|
2967
|
+
<span
|
|
2968
|
+
class="tab-status-dot"
|
|
2969
|
+
[class.tab-status-dot--warn]="sectionStatus('connection') === 'pending'"
|
|
2970
|
+
[class.tab-status-dot--error]="sectionStatus('connection') === 'invalid'"
|
|
2971
|
+
[attr.title]="sectionStatusLabel('connection')"
|
|
2972
|
+
></span>
|
|
2973
|
+
</ng-template>
|
|
2974
|
+
<div class="tab-content">
|
|
2869
2975
|
<mat-card class="editor-card">
|
|
2870
2976
|
<div class="editor-section-header">
|
|
2871
2977
|
<div>
|
|
@@ -2891,7 +2997,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
2891
2997
|
</mat-form-field>
|
|
2892
2998
|
</div>
|
|
2893
2999
|
</mat-card>
|
|
3000
|
+
</div>
|
|
3001
|
+
</mat-tab>
|
|
2894
3002
|
|
|
3003
|
+
<mat-tab>
|
|
3004
|
+
<ng-template mat-tab-label>
|
|
3005
|
+
<mat-icon [praxisIcon]="'tune'"></mat-icon>
|
|
3006
|
+
<span data-testid="crud-editor-tab-defaults">{{ tx('crud.authoring.section.defaults', 'Open mode and header') }}</span>
|
|
3007
|
+
<span
|
|
3008
|
+
class="tab-status-dot"
|
|
3009
|
+
[class.tab-status-dot--warn]="sectionStatus('defaults') === 'pending'"
|
|
3010
|
+
[class.tab-status-dot--error]="sectionStatus('defaults') === 'invalid'"
|
|
3011
|
+
[attr.title]="sectionStatusLabel('defaults')"
|
|
3012
|
+
></span>
|
|
3013
|
+
</ng-template>
|
|
3014
|
+
<div class="tab-content">
|
|
2895
3015
|
<mat-card class="editor-card">
|
|
2896
3016
|
<div class="editor-section-header">
|
|
2897
3017
|
<div>
|
|
@@ -3005,7 +3125,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3005
3125
|
</div>
|
|
3006
3126
|
</section>
|
|
3007
3127
|
</mat-card>
|
|
3128
|
+
</div>
|
|
3129
|
+
</mat-tab>
|
|
3008
3130
|
|
|
3131
|
+
<mat-tab>
|
|
3132
|
+
<ng-template mat-tab-label>
|
|
3133
|
+
<mat-icon [praxisIcon]="'bolt'"></mat-icon>
|
|
3134
|
+
<span data-testid="crud-editor-tab-actions">{{ tx('crud.authoring.section.actions', 'Actions') }}</span>
|
|
3135
|
+
<span
|
|
3136
|
+
class="tab-status-dot"
|
|
3137
|
+
[class.tab-status-dot--warn]="sectionStatus('actions') === 'pending'"
|
|
3138
|
+
[class.tab-status-dot--error]="sectionStatus('actions') === 'invalid'"
|
|
3139
|
+
[attr.title]="sectionStatusLabel('actions')"
|
|
3140
|
+
></span>
|
|
3141
|
+
</ng-template>
|
|
3142
|
+
<div class="tab-content">
|
|
3009
3143
|
<section class="editor-actions">
|
|
3010
3144
|
<div class="editor-section-header">
|
|
3011
3145
|
<div>
|
|
@@ -3220,7 +3354,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3220
3354
|
}
|
|
3221
3355
|
</div>
|
|
3222
3356
|
</section>
|
|
3357
|
+
</div>
|
|
3358
|
+
</mat-tab>
|
|
3223
3359
|
|
|
3360
|
+
<mat-tab>
|
|
3361
|
+
<ng-template mat-tab-label>
|
|
3362
|
+
<mat-icon [praxisIcon]="'table_view'"></mat-icon>
|
|
3363
|
+
<span data-testid="crud-editor-tab-table">{{ tx('crud.authoring.section.table', 'Table') }}</span>
|
|
3364
|
+
<span
|
|
3365
|
+
class="tab-status-dot"
|
|
3366
|
+
[class.tab-status-dot--warn]="sectionStatus('table') === 'pending'"
|
|
3367
|
+
[class.tab-status-dot--error]="sectionStatus('table') === 'invalid'"
|
|
3368
|
+
[attr.title]="sectionStatusLabel('table')"
|
|
3369
|
+
></span>
|
|
3370
|
+
</ng-template>
|
|
3371
|
+
<div class="tab-content">
|
|
3224
3372
|
<mat-card class="editor-card">
|
|
3225
3373
|
<div class="editor-section-header">
|
|
3226
3374
|
<div>
|
|
@@ -3244,7 +3392,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3244
3392
|
(configChange)="setTableConfig($event)"
|
|
3245
3393
|
/>
|
|
3246
3394
|
</mat-card>
|
|
3395
|
+
</div>
|
|
3396
|
+
</mat-tab>
|
|
3247
3397
|
|
|
3398
|
+
<mat-tab>
|
|
3399
|
+
<ng-template mat-tab-label>
|
|
3400
|
+
<mat-icon [praxisIcon]="'data_object'"></mat-icon>
|
|
3401
|
+
<span data-testid="crud-editor-tab-json">{{ tx('crud.authoring.section.json', 'JSON') }}</span>
|
|
3402
|
+
<span
|
|
3403
|
+
class="tab-status-dot"
|
|
3404
|
+
[class.tab-status-dot--warn]="jsonTabStatus() === 'pending'"
|
|
3405
|
+
[class.tab-status-dot--error]="jsonTabStatus() === 'invalid'"
|
|
3406
|
+
[attr.title]="jsonTabStatusLabel()"
|
|
3407
|
+
></span>
|
|
3408
|
+
</ng-template>
|
|
3409
|
+
<div class="tab-content">
|
|
3248
3410
|
<mat-card class="editor-card">
|
|
3249
3411
|
<h3>{{ tx('crud.authoring.section.json', 'JSON') }}</h3>
|
|
3250
3412
|
<p class="editor-section-note" data-testid="crud-editor-json-summary">{{ jsonSectionSummary() }}</p>
|
|
@@ -3272,8 +3434,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
3272
3434
|
}
|
|
3273
3435
|
<pre data-testid="crud-editor-json">{{ serializedDocument() }}</pre>
|
|
3274
3436
|
</mat-card>
|
|
3437
|
+
</div>
|
|
3438
|
+
</mat-tab>
|
|
3439
|
+
</mat-tab-group>
|
|
3275
3440
|
</section>
|
|
3276
|
-
`, styles: [":host{display:block;min-width:0;color:var(--md-sys-color-on-surface,#1a1b20)}.editor-shell{display:grid;gap:16px}.editor-header{display:flex;justify-content:space-between;gap:16px;align-items:start}.editor-overview,.editor-health-map{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.editor-health-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-health-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-health-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus{display:flex;gap:12px;align-items:start;padding:14px 16px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-focus--success{background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.editor-focus-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);white-space:nowrap}.editor-focus-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-focus-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus-copy{display:grid;gap:4px}.editor-focus-copy p{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-overview-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-overview-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-overview-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-overview-label{font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-overview-value{line-height:1.3;overflow-wrap:anywhere}.editor-overview-note{margin:0;font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-header h2,.editor-card h3{margin:0}.editor-header p{margin:6px 0 0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-chip{padding:6px 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,transparent);font-size:12px}.editor-card{display:grid;gap:14px;padding:16px;border-radius:20px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 70%,transparent)}.editor-section-header{display:flex;justify-content:space-between;gap:12px;align-items:start}.editor-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-grid--compact{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.editor-toggles{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-actions,.action-grid{display:grid;gap:14px}.action-summary-strip{display:flex;flex-wrap:wrap;gap:8px}.action-summary-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.action-summary-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.action-summary-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.action-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 88%,transparent)}.action-group--advanced{background:color-mix(in srgb,var(--md-sys-color-surface-container,#f5f7fb) 90%,transparent)}.action-group__header{display:grid;gap:4px}.action-subgroup{display:grid;gap:10px;padding:10px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent)}.action-subgroup__header{display:grid;gap:4px}.action-param-list{display:grid;gap:12px}.action-param-row{display:grid;gap:8px}.action-advanced-panel{border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 65%,transparent);border-radius:16px}.editor-section-note{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.diagnostics-groups{display:grid;gap:12px}.diagnostics-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.diagnostics{display:grid;gap:8px;margin:0;padding-left:18px}.diagnostics .error{color:var(--md-sys-color-error,#b3261e)}pre{margin:0;overflow:auto;max-height:320px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}\n"] }]
|
|
3441
|
+
`, styles: [":host{display:block;min-width:0;color:var(--md-sys-color-on-surface,#1a1b20)}.editor-shell{display:grid;gap:16px}.editor-header{display:flex;justify-content:space-between;gap:16px;align-items:start}.editor-overview,.editor-health-map{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.editor-health-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-health-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-health-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus{display:flex;gap:12px;align-items:start;padding:14px 16px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-focus--success{background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.editor-focus-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent);white-space:nowrap}.editor-focus-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-focus-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-focus-copy{display:grid;gap:4px}.editor-focus-copy p{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-tabs{display:flex;flex-direction:column;min-width:0}.editor-tabs .mat-mdc-tab{min-width:118px}.editor-tabs ::ng-deep .mdc-tab__content{gap:8px}.editor-tabs ::ng-deep .mat-mdc-tab-body-wrapper,.editor-tabs ::ng-deep .mat-mdc-tab-group-container{flex:1 1 auto;min-height:0}.editor-tabs ::ng-deep .mat-mdc-tab-body-content{overflow:visible}.tab-status-dot{width:8px;height:8px;border-radius:999px;background:var(--md-sys-color-primary,#1263b4);flex:0 0 auto}.tab-status-dot--warn{background:var(--md-sys-color-tertiary,#7d5700)}.tab-status-dot--error{background:var(--md-sys-color-error,#b3261e)}.tab-content{display:grid;gap:14px;min-width:0;padding:12px 2px 4px;box-sizing:border-box}.editor-overview-card{display:grid;gap:4px;padding:14px;border-radius:18px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.editor-overview-card--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.editor-overview-card--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.editor-overview-label{font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-overview-value{line-height:1.3;overflow-wrap:anywhere}.editor-overview-note{margin:0;font-size:12px;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-header h2,.editor-card h3{margin:0}.editor-header p{margin:6px 0 0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.editor-chip{padding:6px 10px;border-radius:999px;background:color-mix(in srgb,var(--md-sys-color-primary,#1263b4) 12%,transparent);font-size:12px}.editor-card{display:grid;gap:14px;padding:16px;border-radius:20px;border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 70%,transparent)}.editor-section-header{display:flex;justify-content:space-between;gap:12px;align-items:start}.editor-grid{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-grid--compact{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.editor-toggles{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.editor-actions,.action-grid{display:grid;gap:14px}.action-summary-strip{display:flex;flex-wrap:wrap;gap:8px}.action-summary-chip{padding:6px 10px;border-radius:999px;font-size:12px;background:color-mix(in srgb,var(--md-sys-color-secondary-container,#d7e3ff) 70%,transparent)}.action-summary-chip--warn{background:color-mix(in srgb,var(--md-sys-color-tertiary-container,#f8e08e) 78%,transparent)}.action-summary-chip--error{background:color-mix(in srgb,var(--md-sys-color-error-container,#f9dedc) 82%,transparent);color:var(--md-sys-color-on-error-container,#410e0b)}.action-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 88%,transparent)}.action-group--advanced{background:color-mix(in srgb,var(--md-sys-color-surface-container,#f5f7fb) 90%,transparent)}.action-group__header{display:grid;gap:4px}.action-subgroup{display:grid;gap:10px;padding:10px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-low,#fafbfd) 92%,transparent)}.action-subgroup__header{display:grid;gap:4px}.action-param-list{display:grid;gap:12px}.action-param-row{display:grid;gap:8px}.action-advanced-panel{border:1px solid color-mix(in srgb,var(--md-sys-color-outline,#c5c7ce) 65%,transparent);border-radius:16px}.editor-section-note{margin:0;color:var(--md-sys-color-on-surface-variant,#5a5d67)}.diagnostics-groups{display:grid;gap:12px}.diagnostics-group{display:grid;gap:10px;padding:12px;border-radius:16px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}.diagnostics{display:grid;gap:8px;margin:0;padding-left:18px}.diagnostics .error{color:var(--md-sys-color-error,#b3261e)}pre{margin:0;overflow:auto;max-height:320px;padding:12px;border-radius:14px;background:color-mix(in srgb,var(--md-sys-color-surface-container-high,#eef1f6) 92%,transparent)}\n"] }]
|
|
3277
3442
|
}], ctorParameters: () => [], propDecorators: { documentInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "document", required: false }] }], metadataInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "metadata", required: false }] }], crudIdInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "crudId", required: false }] }], readonlyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }] } });
|
|
3278
3443
|
function cloneTableConfig(config) {
|
|
3279
3444
|
return JSON.parse(JSON.stringify(config || { columns: [] }));
|
|
@@ -3754,7 +3919,7 @@ class PraxisCrudComponent {
|
|
|
3754
3919
|
? null
|
|
3755
3920
|
: await this.resolveDiscoveredSurfaceCatalog(normalizedAction, row);
|
|
3756
3921
|
const surface = providedSurface || this.selectSurfaceForCrudAction(normalizedAction, catalog?.surfaces || []);
|
|
3757
|
-
const resourcePath = String(
|
|
3922
|
+
const resourcePath = String(this.resolveResourcePath(this.resolvedMetadata) || catalog?.resourcePath || '').trim();
|
|
3758
3923
|
if (!surface || !resourcePath) {
|
|
3759
3924
|
return false;
|
|
3760
3925
|
}
|
|
@@ -3834,7 +3999,7 @@ class PraxisCrudComponent {
|
|
|
3834
3999
|
const providedAction = this.resolveProvidedWorkflowAction(normalizedAction, runtimeEvent?.actionConfig);
|
|
3835
4000
|
const catalog = providedAction ? null : await this.resolveDiscoveredActionCatalog(row);
|
|
3836
4001
|
const discoveredAction = providedAction || this.selectDiscoveredWorkflowAction(normalizedAction, catalog?.actions || []);
|
|
3837
|
-
const resourcePath = String(
|
|
4002
|
+
const resourcePath = String(this.resolveResourcePath(this.resolvedMetadata) || catalog?.resourcePath || '').trim();
|
|
3838
4003
|
if (!discoveredAction || !resourcePath) {
|
|
3839
4004
|
return false;
|
|
3840
4005
|
}
|
|
@@ -4492,7 +4657,7 @@ class PraxisCrudComponent {
|
|
|
4492
4657
|
/>
|
|
4493
4658
|
}
|
|
4494
4659
|
}
|
|
4495
|
-
`, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}\n"], dependencies: [{ kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "queryContext", "aiContext", "aiAssistantVoiceInputMode", "aiAssistantVoiceLanguage", "horizontalScroll", "enableCustomization", "dense"], outputs: ["rowClick", "widgetEvent", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "exportAction", "columnReorder", "columnReorderAttempt", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "configChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone"] }] });
|
|
4660
|
+
`, isInline: true, styles: [":host{display:block;width:100%;min-width:0;max-width:100%}\n"], dependencies: [{ kind: "component", type: PraxisTable, selector: "praxis-table", inputs: ["config", "resourcePath", "data", "tableId", "componentInstanceId", "configPersistenceStrategy", "title", "subtitle", "icon", "autoDelete", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "crudContext", "filterCriteria", "queryContext", "aiContext", "aiAssistantVoiceInputMode", "aiAssistantVoiceLanguage", "horizontalScroll", "enableCustomization", "dense"], outputs: ["rowClick", "widgetEvent", "rowDoubleClick", "rowExpansionChange", "rowAction", "toolbarAction", "bulkAction", "exportAction", "columnReorder", "columnReorderAttempt", "beforeDelete", "afterDelete", "deleteError", "beforeBulkDelete", "afterBulkDelete", "bulkDeleteError", "schemaStatusChange", "configChange", "metadataChange", "loadingStateChange", "collectionLinksChange", "selectionChange"] }, { kind: "component", type: EmptyStateCardComponent, selector: "praxis-empty-state-card", inputs: ["icon", "title", "description", "primaryAction", "secondaryActions", "inline", "tone"] }] });
|
|
4496
4661
|
}
|
|
4497
4662
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: PraxisCrudComponent, decorators: [{
|
|
4498
4663
|
type: Component,
|
|
@@ -4916,7 +5081,7 @@ class DynamicFormDialogHostComponent {
|
|
|
4916
5081
|
(formCancel)="onCancel()"
|
|
4917
5082
|
></praxis-dynamic-form>
|
|
4918
5083
|
</mat-dialog-content>
|
|
4919
|
-
`, isInline: true, styles: [":host{--dlg-header-h: 56px;--dlg-footer-h: 56px;--dlg-pad: 16px;display:flex;flex-direction:column;height:100%;overflow:hidden}:host([data-density=\"compact\"]){--dlg-header-h: 44px;--dlg-footer-h: 44px;--dlg-pad: 12px}.dialog-header{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:var(--dlg-pad);padding:0 var(--dlg-pad);height:var(--dlg-header-h);margin:0;background:var(--md-sys-color-surface-container-high);border-bottom:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.dialog-title{margin:0;font:inherit;font-weight:600;color:var(--md-sys-color-on-surface)}.spacer{flex:1}.dialog-content{overflow:auto;padding:var(--dlg-pad);max-height:calc(100svh - var(--dlg-header-h) - 32px)}.dialog-header button.mat-icon-button{color:var(--md-sys-color-on-surface-variant)}.dialog-header button.mat-icon-button:hover{color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}.dialog-footer{position:sticky;bottom:0;z-index:1;padding:var(--dlg-pad)}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type:
|
|
5084
|
+
`, isInline: true, styles: [":host{--dlg-header-h: 56px;--dlg-footer-h: 56px;--dlg-pad: 16px;display:flex;flex-direction:column;height:100%;overflow:hidden}:host([data-density=\"compact\"]){--dlg-header-h: 44px;--dlg-footer-h: 44px;--dlg-pad: 12px}.dialog-header{position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:var(--dlg-pad);padding:0 var(--dlg-pad);height:var(--dlg-header-h);margin:0;background:var(--md-sys-color-surface-container-high);border-bottom:1px solid var(--md-sys-color-outline-variant);color:var(--md-sys-color-on-surface)}.dialog-title{margin:0;font:inherit;font-weight:600;color:var(--md-sys-color-on-surface)}.spacer{flex:1}.dialog-content{overflow:auto;padding:var(--dlg-pad);max-height:calc(100svh - var(--dlg-header-h) - 32px)}.dialog-header button.mat-icon-button{color:var(--md-sys-color-on-surface-variant)}.dialog-header button.mat-icon-button:hover{color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}.dialog-footer{position:sticky;bottom:0;z-index:1;padding:var(--dlg-pad)}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }, { kind: "component", type: PraxisDynamicForm, selector: "praxis-dynamic-form", inputs: ["resourcePath", "resourceId", "initialValue", "editorialContext", "mode", "config", "actions", "schemaSource", "schemaUrl", "readUrl", "submitUrl", "submitMethod", "responseSchemaUrl", "apiEndpointKey", "apiUrlEntry", "enableCustomization", "showAiAssistant", "formId", "componentInstanceId", "configPersistenceStrategy", "layout", "backConfig", "hooks", "removeEmptyContainersOnSave", "reactiveValidation", "reactiveValidationDebounceMs", "notifyIfOutdated", "snoozeMs", "autoOpenSettingsOnOutdated", "readonlyModeGlobal", "disabledModeGlobal", "presentationModeGlobal", "visibleGlobal", "domainRules", "customEndpoints"], outputs: ["formSubmit", "formCancel", "formReset", "configChange", "configPatchChange", "formReady", "valueChange", "syncCompleted", "initializationError", "loadingStateChange", "enableCustomizationChange", "customAction", "actionConfirmation", "schemaStatusChange", "fieldRenderError", "ruleDiagnosticsChange"] }] });
|
|
4920
5085
|
}
|
|
4921
5086
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DynamicFormDialogHostComponent, decorators: [{
|
|
4922
5087
|
type: Component,
|
|
@@ -5057,15 +5222,16 @@ class PraxisCrudWidgetConfigEditor {
|
|
|
5057
5222
|
}
|
|
5058
5223
|
buildValue(rawPayload) {
|
|
5059
5224
|
const document = this.extractDocument(rawPayload);
|
|
5225
|
+
const inputs = {
|
|
5226
|
+
...(this.inputs ?? {}),
|
|
5227
|
+
metadata: document.metadata,
|
|
5228
|
+
crudId: this.inputs?.crudId ?? this.widgetKey,
|
|
5229
|
+
componentInstanceId: this.inputs?.componentInstanceId ?? this.widgetKey,
|
|
5230
|
+
context: this.inputs?.context,
|
|
5231
|
+
enableCustomization: this.inputs?.enableCustomization ?? false,
|
|
5232
|
+
};
|
|
5060
5233
|
return {
|
|
5061
|
-
inputs
|
|
5062
|
-
...(this.inputs ?? {}),
|
|
5063
|
-
metadata: document.metadata,
|
|
5064
|
-
crudId: this.inputs?.crudId ?? this.widgetKey,
|
|
5065
|
-
componentInstanceId: this.inputs?.componentInstanceId ?? this.widgetKey,
|
|
5066
|
-
context: this.inputs?.context,
|
|
5067
|
-
enableCustomization: this.inputs?.enableCustomization ?? false,
|
|
5068
|
-
},
|
|
5234
|
+
inputs,
|
|
5069
5235
|
};
|
|
5070
5236
|
}
|
|
5071
5237
|
createDocumentFromInputs() {
|
|
@@ -5398,7 +5564,7 @@ class CrudPageHeaderComponent {
|
|
|
5398
5564
|
<ng-content></ng-content>
|
|
5399
5565
|
</div>
|
|
5400
5566
|
</header>
|
|
5401
|
-
`, isInline: true, styles: [".crud-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;background:var(--md-sys-color-surface)}.crud-header.sticky{position:sticky;top:0;z-index:10;-webkit-backdrop-filter:saturate(110%);backdrop-filter:saturate(110%)}.crud-header.with-divider{border-bottom:1px solid var(--md-sys-color-outline-variant)}.left{display:flex;align-items:center;gap:8px;min-width:0}.right{display:flex;align-items:center;gap:8px}.title{margin:0;font-weight:600;color:var(--md-sys-color-on-surface, currentColor);font:var(--mdc-typography-title-large, 600 20px/28px system-ui);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.back-btn{display:inline-flex;align-items:center;gap:6px;text-decoration:none}.back-btn .mat-mdc-button{padding-left:0}.back-btn mat-icon{color:var(--md-sys-color-on-surface-variant, currentColor)}.back-btn .label{color:var(--md-sys-color-on-surface-variant, currentColor)}.back-btn.ghost{border-radius:20px;padding:4px 8px}.back-btn.ghost:hover{background:var(--md-sys-color-primary-container)}.back-btn.tonal{border-radius:20px;padding:4px 10px;background:var(--md-sys-color-surface-container);box-shadow:inset 0 0 0 1px var(--md-sys-color-outline-variant)}.back-btn.tonal:hover{background:var(--md-sys-color-primary-container)}.back-btn.outlined{border-radius:20px;padding:4px 10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.back-btn.outlined:hover{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}@media(max-width:599px){.label.hide-on-narrow{display:none}}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type:
|
|
5567
|
+
`, isInline: true, styles: [".crud-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;background:var(--md-sys-color-surface)}.crud-header.sticky{position:sticky;top:0;z-index:10;-webkit-backdrop-filter:saturate(110%);backdrop-filter:saturate(110%)}.crud-header.with-divider{border-bottom:1px solid var(--md-sys-color-outline-variant)}.left{display:flex;align-items:center;gap:8px;min-width:0}.right{display:flex;align-items:center;gap:8px}.title{margin:0;font-weight:600;color:var(--md-sys-color-on-surface, currentColor);font:var(--mdc-typography-title-large, 600 20px/28px system-ui);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.back-btn{display:inline-flex;align-items:center;gap:6px;text-decoration:none}.back-btn .mat-mdc-button{padding-left:0}.back-btn mat-icon{color:var(--md-sys-color-on-surface-variant, currentColor)}.back-btn .label{color:var(--md-sys-color-on-surface-variant, currentColor)}.back-btn.ghost{border-radius:20px;padding:4px 8px}.back-btn.ghost:hover{background:var(--md-sys-color-primary-container)}.back-btn.tonal{border-radius:20px;padding:4px 10px;background:var(--md-sys-color-surface-container);box-shadow:inset 0 0 0 1px var(--md-sys-color-outline-variant)}.back-btn.tonal:hover{background:var(--md-sys-color-primary-container)}.back-btn.outlined{border-radius:20px;padding:4px 10px;border:1px solid var(--md-sys-color-outline-variant);background:var(--md-sys-color-surface)}.back-btn.outlined:hover{border-color:var(--md-sys-color-primary);background:var(--md-sys-color-primary-container)}@media(max-width:599px){.label.hide-on-narrow{display:none}}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: PraxisIconDirective, selector: "mat-icon[praxisIcon]", inputs: ["praxisIcon"] }] });
|
|
5402
5568
|
}
|
|
5403
5569
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: CrudPageHeaderComponent, decorators: [{
|
|
5404
5570
|
type: Component,
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisui/crud",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "9.0.0-beta.1",
|
|
4
4
|
"description": "CRUD building blocks for Praxis UI: integrates dynamic forms and tables with unified configuration and services.",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^21.0.0",
|
|
7
7
|
"@angular/core": "^21.0.0",
|
|
8
|
-
"@praxisui/dynamic-form": "^
|
|
9
|
-
"@praxisui/table": "^
|
|
10
|
-
"@praxisui/core": "^
|
|
11
|
-
"@praxisui/dynamic-fields": "^
|
|
12
|
-
"@praxisui/settings-panel": "^
|
|
8
|
+
"@praxisui/dynamic-form": "^9.0.0-beta.1",
|
|
9
|
+
"@praxisui/table": "^9.0.0-beta.1",
|
|
10
|
+
"@praxisui/core": "^9.0.0-beta.1",
|
|
11
|
+
"@praxisui/dynamic-fields": "^9.0.0-beta.1",
|
|
12
|
+
"@praxisui/settings-panel": "^9.0.0-beta.1",
|
|
13
13
|
"@angular/cdk": "^21.0.0",
|
|
14
14
|
"@angular/forms": "^21.0.0",
|
|
15
15
|
"@angular/material": "^21.0.0",
|
|
16
16
|
"@angular/router": "^21.0.0",
|
|
17
|
-
"@praxisui/ai": "^
|
|
17
|
+
"@praxisui/ai": "^9.0.0-beta.1",
|
|
18
18
|
"rxjs": "~7.8.0"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
package/types/praxisui-crud.d.ts
CHANGED
|
@@ -549,6 +549,8 @@ declare class CrudMetadataEditorComponent implements SettingsValueProvider {
|
|
|
549
549
|
jsonSectionSummary(): string;
|
|
550
550
|
sectionStatus(section: CrudEditorSectionKey): CrudEditorSectionStatus;
|
|
551
551
|
sectionStatusLabel(section: CrudEditorSectionKey): string;
|
|
552
|
+
jsonTabStatus(): CrudEditorSectionStatus;
|
|
553
|
+
jsonTabStatusLabel(): string;
|
|
552
554
|
sectionSummary(section: CrudEditorSectionKey): string;
|
|
553
555
|
nextFocusTitle(): string;
|
|
554
556
|
nextFocusSummary(): string;
|