bways-report 0.1.0 → 0.1.2
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 +3 -0
- package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +121 -9
- package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +52 -6
- package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +26 -2
- package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +76 -3
- package/esm2022/lib/primitives/components/button/rpt-button.component.mjs +8 -2
- package/fesm2022/bways-report.mjs +278 -17
- package/fesm2022/bways-report.mjs.map +1 -1
- package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
- package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +3 -1
- package/lib/features/designer/components/property-editor/property-editor.component.d.ts +2 -0
- package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +2 -0
- package/lib/primitives/components/button/rpt-button.component.d.ts +1 -1
- package/package.json +1 -9
|
@@ -2123,7 +2123,13 @@ class RptButtonComponent {
|
|
|
2123
2123
|
buttonLabel = computed(() => this.config().label || this.config().properties?.['text'] || 'Submit');
|
|
2124
2124
|
buttonHtmlType = computed(() => {
|
|
2125
2125
|
const action = this.config().properties?.['action'];
|
|
2126
|
-
|
|
2126
|
+
if (action === 'submit' || action === 'execute-report' || !action) {
|
|
2127
|
+
return 'submit';
|
|
2128
|
+
}
|
|
2129
|
+
if (action === 'reset') {
|
|
2130
|
+
return 'reset';
|
|
2131
|
+
}
|
|
2132
|
+
return 'button';
|
|
2127
2133
|
});
|
|
2128
2134
|
isDisabled = computed(() => this.config().enabled === false);
|
|
2129
2135
|
icon = computed(() => this.config().properties?.['icon'] || '');
|
|
@@ -4280,6 +4286,29 @@ class DesignerToolbarComponent {
|
|
|
4280
4286
|
saveReport() {
|
|
4281
4287
|
this.saveRequested.emit();
|
|
4282
4288
|
}
|
|
4289
|
+
addResultGrid() {
|
|
4290
|
+
const existingDs = this.definition().dataSources[0];
|
|
4291
|
+
const defaultGrid = {
|
|
4292
|
+
dataSourceId: existingDs?.id ?? 'default',
|
|
4293
|
+
columns: [
|
|
4294
|
+
{ field: 'id', label: 'ID', dataType: 'number', visible: true, sortable: true },
|
|
4295
|
+
{ field: 'name', label: 'Name', dataType: 'string', visible: true, sortable: true },
|
|
4296
|
+
],
|
|
4297
|
+
options: {
|
|
4298
|
+
pagination: true,
|
|
4299
|
+
pageSize: 25,
|
|
4300
|
+
showRowNumbers: true,
|
|
4301
|
+
showFooter: true,
|
|
4302
|
+
},
|
|
4303
|
+
};
|
|
4304
|
+
this.designerState.updateGridSettings(defaultGrid);
|
|
4305
|
+
this.designerState.selectComponent(null);
|
|
4306
|
+
this.designerState.setActiveTab('grid');
|
|
4307
|
+
}
|
|
4308
|
+
selectGridSettings() {
|
|
4309
|
+
this.designerState.selectComponent(null);
|
|
4310
|
+
this.designerState.setActiveTab('grid');
|
|
4311
|
+
}
|
|
4283
4312
|
exportJson() {
|
|
4284
4313
|
const dataStr = 'data:text/json;charset=utf-8,' +
|
|
4285
4314
|
encodeURIComponent(JSON.stringify(this.definition(), null, 2));
|
|
@@ -4361,6 +4390,31 @@ class DesignerToolbarComponent {
|
|
|
4361
4390
|
|
|
4362
4391
|
<div class="actions-divider"></div>
|
|
4363
4392
|
|
|
4393
|
+
<!-- Add / Configure Grid Quick Button -->
|
|
4394
|
+
@if (!definition().grid) {
|
|
4395
|
+
<button
|
|
4396
|
+
type="button"
|
|
4397
|
+
class="tool-btn btn-grid-action"
|
|
4398
|
+
(click)="addResultGrid()"
|
|
4399
|
+
title="Attach a Result Data Grid (UltraGrid / Table) to this report"
|
|
4400
|
+
>
|
|
4401
|
+
<rpt-icon name="table" [size]="14" />
|
|
4402
|
+
<span>+ Add Grid</span>
|
|
4403
|
+
</button>
|
|
4404
|
+
} @else {
|
|
4405
|
+
<button
|
|
4406
|
+
type="button"
|
|
4407
|
+
class="tool-btn btn-grid-configured"
|
|
4408
|
+
(click)="selectGridSettings()"
|
|
4409
|
+
title="Configure Result Data Grid columns and pagination"
|
|
4410
|
+
>
|
|
4411
|
+
<rpt-icon name="table" [size]="14" />
|
|
4412
|
+
<span>Grid ({{ definition().grid?.columns?.length ?? 0 }})</span>
|
|
4413
|
+
</button>
|
|
4414
|
+
}
|
|
4415
|
+
|
|
4416
|
+
<div class="actions-divider"></div>
|
|
4417
|
+
|
|
4364
4418
|
<button
|
|
4365
4419
|
type="button"
|
|
4366
4420
|
class="tool-btn btn-export"
|
|
@@ -4382,7 +4436,7 @@ class DesignerToolbarComponent {
|
|
|
4382
4436
|
</button>
|
|
4383
4437
|
</div>
|
|
4384
4438
|
</div>
|
|
4385
|
-
`, isInline: true, styles: [":host{display:block;background:#0f172a;color:#fff;height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid #1e293b;box-sizing:border-box}.toolbar-root{display:flex;align-items:center;justify-content:space-between;height:100%;padding:0 20px}.toolbar-left,.toolbar-right{display:flex;align-items:center;gap:12px;min-width:240px}.toolbar-right{justify-content:flex-end}.toolbar-center{display:flex;justify-content:center;flex:1}.report-identity{display:flex;align-items:center;gap:8px}.report-name{font-size:.95rem;font-weight:700;color:#fff;letter-spacing:-.01em}.dirty-badge{font-size:.65rem;font-weight:600;color:#f59e0b;background:#f59e0b26;padding:2px 6px;border-radius:4px}.mode-pill-group{display:flex;background:#1e293b;padding:3px;border-radius:8px;gap:2px}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border:none;background:transparent;color:#94a3b8;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;transition:all .15s ease}.mode-btn:hover{color:#fff}.mode-btn.active{background:#2563eb;color:#fff;box-shadow:0 1px 3px #0003}.history-group{display:flex;gap:4px}.tool-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;border:1px solid rgba(255,255,255,.15);background:#ffffff0d;color:#e2e8f0;transition:all .15s ease}.tool-btn:hover:not(:disabled){background:#ffffff26;color:#fff}.tool-btn:disabled{opacity:.3;cursor:not-allowed}.actions-divider{width:1px;height:20px;background:#ffffff26}.btn-save{background:#2563eb;border-color:#2563eb;color:#fff}.btn-save:hover:not(:disabled){background:#1d4ed8;border-color:#1d4ed8}.btn-export{background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4439
|
+
`, isInline: true, styles: [":host{display:block;background:#0f172a;color:#fff;height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid #1e293b;box-sizing:border-box}.toolbar-root{display:flex;align-items:center;justify-content:space-between;height:100%;padding:0 20px}.toolbar-left,.toolbar-right{display:flex;align-items:center;gap:12px;min-width:240px}.toolbar-right{justify-content:flex-end}.toolbar-center{display:flex;justify-content:center;flex:1}.report-identity{display:flex;align-items:center;gap:8px}.report-name{font-size:.95rem;font-weight:700;color:#fff;letter-spacing:-.01em}.dirty-badge{font-size:.65rem;font-weight:600;color:#f59e0b;background:#f59e0b26;padding:2px 6px;border-radius:4px}.mode-pill-group{display:flex;background:#1e293b;padding:3px;border-radius:8px;gap:2px}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border:none;background:transparent;color:#94a3b8;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;transition:all .15s ease}.mode-btn:hover{color:#fff}.mode-btn.active{background:#2563eb;color:#fff;box-shadow:0 1px 3px #0003}.history-group{display:flex;gap:4px}.tool-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;border:1px solid rgba(255,255,255,.15);background:#ffffff0d;color:#e2e8f0;transition:all .15s ease}.tool-btn:hover:not(:disabled){background:#ffffff26;color:#fff}.tool-btn:disabled{opacity:.3;cursor:not-allowed}.actions-divider{width:1px;height:20px;background:#ffffff26}.btn-save{background:#2563eb;border-color:#2563eb;color:#fff}.btn-save:hover:not(:disabled){background:#1d4ed8;border-color:#1d4ed8}.btn-export{background:transparent}.btn-grid-action{background:#10b98126;border-color:#10b98166;color:#34d399}.btn-grid-action:hover:not(:disabled){background:#10b98140;color:#6ee7b7;border-color:#10b981}.btn-grid-configured{background:#6366f126;border-color:#6366f159;color:#a5b4fc}.btn-grid-configured:hover:not(:disabled){background:#6366f140;color:#c7d2fe}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
4386
4440
|
}
|
|
4387
4441
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignerToolbarComponent, decorators: [{
|
|
4388
4442
|
type: Component,
|
|
@@ -4456,6 +4510,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4456
4510
|
|
|
4457
4511
|
<div class="actions-divider"></div>
|
|
4458
4512
|
|
|
4513
|
+
<!-- Add / Configure Grid Quick Button -->
|
|
4514
|
+
@if (!definition().grid) {
|
|
4515
|
+
<button
|
|
4516
|
+
type="button"
|
|
4517
|
+
class="tool-btn btn-grid-action"
|
|
4518
|
+
(click)="addResultGrid()"
|
|
4519
|
+
title="Attach a Result Data Grid (UltraGrid / Table) to this report"
|
|
4520
|
+
>
|
|
4521
|
+
<rpt-icon name="table" [size]="14" />
|
|
4522
|
+
<span>+ Add Grid</span>
|
|
4523
|
+
</button>
|
|
4524
|
+
} @else {
|
|
4525
|
+
<button
|
|
4526
|
+
type="button"
|
|
4527
|
+
class="tool-btn btn-grid-configured"
|
|
4528
|
+
(click)="selectGridSettings()"
|
|
4529
|
+
title="Configure Result Data Grid columns and pagination"
|
|
4530
|
+
>
|
|
4531
|
+
<rpt-icon name="table" [size]="14" />
|
|
4532
|
+
<span>Grid ({{ definition().grid?.columns?.length ?? 0 }})</span>
|
|
4533
|
+
</button>
|
|
4534
|
+
}
|
|
4535
|
+
|
|
4536
|
+
<div class="actions-divider"></div>
|
|
4537
|
+
|
|
4459
4538
|
<button
|
|
4460
4539
|
type="button"
|
|
4461
4540
|
class="tool-btn btn-export"
|
|
@@ -4477,7 +4556,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4477
4556
|
</button>
|
|
4478
4557
|
</div>
|
|
4479
4558
|
</div>
|
|
4480
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;background:#0f172a;color:#fff;height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid #1e293b;box-sizing:border-box}.toolbar-root{display:flex;align-items:center;justify-content:space-between;height:100%;padding:0 20px}.toolbar-left,.toolbar-right{display:flex;align-items:center;gap:12px;min-width:240px}.toolbar-right{justify-content:flex-end}.toolbar-center{display:flex;justify-content:center;flex:1}.report-identity{display:flex;align-items:center;gap:8px}.report-name{font-size:.95rem;font-weight:700;color:#fff;letter-spacing:-.01em}.dirty-badge{font-size:.65rem;font-weight:600;color:#f59e0b;background:#f59e0b26;padding:2px 6px;border-radius:4px}.mode-pill-group{display:flex;background:#1e293b;padding:3px;border-radius:8px;gap:2px}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border:none;background:transparent;color:#94a3b8;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;transition:all .15s ease}.mode-btn:hover{color:#fff}.mode-btn.active{background:#2563eb;color:#fff;box-shadow:0 1px 3px #0003}.history-group{display:flex;gap:4px}.tool-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;border:1px solid rgba(255,255,255,.15);background:#ffffff0d;color:#e2e8f0;transition:all .15s ease}.tool-btn:hover:not(:disabled){background:#ffffff26;color:#fff}.tool-btn:disabled{opacity:.3;cursor:not-allowed}.actions-divider{width:1px;height:20px;background:#ffffff26}.btn-save{background:#2563eb;border-color:#2563eb;color:#fff}.btn-save:hover:not(:disabled){background:#1d4ed8;border-color:#1d4ed8}.btn-export{background:transparent}\n"] }]
|
|
4559
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;background:#0f172a;color:#fff;height:56px;font-family:var(--rpt-font-family, inherit);border-bottom:1px solid #1e293b;box-sizing:border-box}.toolbar-root{display:flex;align-items:center;justify-content:space-between;height:100%;padding:0 20px}.toolbar-left,.toolbar-right{display:flex;align-items:center;gap:12px;min-width:240px}.toolbar-right{justify-content:flex-end}.toolbar-center{display:flex;justify-content:center;flex:1}.report-identity{display:flex;align-items:center;gap:8px}.report-name{font-size:.95rem;font-weight:700;color:#fff;letter-spacing:-.01em}.dirty-badge{font-size:.65rem;font-weight:600;color:#f59e0b;background:#f59e0b26;padding:2px 6px;border-radius:4px}.mode-pill-group{display:flex;background:#1e293b;padding:3px;border-radius:8px;gap:2px}.mode-btn{display:inline-flex;align-items:center;gap:6px;padding:6px 14px;border:none;background:transparent;color:#94a3b8;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;transition:all .15s ease}.mode-btn:hover{color:#fff}.mode-btn.active{background:#2563eb;color:#fff;box-shadow:0 1px 3px #0003}.history-group{display:flex;gap:4px}.tool-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;font-size:.75rem;font-weight:600;border-radius:6px;cursor:pointer;border:1px solid rgba(255,255,255,.15);background:#ffffff0d;color:#e2e8f0;transition:all .15s ease}.tool-btn:hover:not(:disabled){background:#ffffff26;color:#fff}.tool-btn:disabled{opacity:.3;cursor:not-allowed}.actions-divider{width:1px;height:20px;background:#ffffff26}.btn-save{background:#2563eb;border-color:#2563eb;color:#fff}.btn-save:hover:not(:disabled){background:#1d4ed8;border-color:#1d4ed8}.btn-export{background:transparent}.btn-grid-action{background:#10b98126;border-color:#10b98166;color:#34d399}.btn-grid-action:hover:not(:disabled){background:#10b98140;color:#6ee7b7;border-color:#10b981}.btn-grid-configured{background:#6366f126;border-color:#6366f159;color:#a5b4fc}.btn-grid-configured:hover:not(:disabled){background:#6366f140;color:#c7d2fe}\n"] }]
|
|
4481
4560
|
}] });
|
|
4482
4561
|
|
|
4483
4562
|
class ComponentPaletteComponent {
|
|
@@ -5204,6 +5283,30 @@ class DesignCanvasComponent {
|
|
|
5204
5283
|
}
|
|
5205
5284
|
}
|
|
5206
5285
|
}
|
|
5286
|
+
addResultGrid(event) {
|
|
5287
|
+
event?.stopPropagation();
|
|
5288
|
+
const existingDs = this.definition().dataSources[0];
|
|
5289
|
+
const defaultGrid = {
|
|
5290
|
+
dataSourceId: existingDs?.id ?? 'default',
|
|
5291
|
+
columns: [
|
|
5292
|
+
{ field: 'id', label: 'ID', dataType: 'number', visible: true, sortable: true },
|
|
5293
|
+
{ field: 'name', label: 'Name', dataType: 'string', visible: true, sortable: true },
|
|
5294
|
+
],
|
|
5295
|
+
options: {
|
|
5296
|
+
pagination: true,
|
|
5297
|
+
pageSize: 25,
|
|
5298
|
+
showRowNumbers: true,
|
|
5299
|
+
showFooter: true,
|
|
5300
|
+
},
|
|
5301
|
+
};
|
|
5302
|
+
this.designerState.updateGridSettings(defaultGrid);
|
|
5303
|
+
this.designerState.selectComponent(null);
|
|
5304
|
+
this.designerState.setActiveTab('grid');
|
|
5305
|
+
}
|
|
5306
|
+
removeGrid(event) {
|
|
5307
|
+
event?.stopPropagation();
|
|
5308
|
+
this.designerState.updateGridSettings(undefined);
|
|
5309
|
+
}
|
|
5207
5310
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignCanvasComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5208
5311
|
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: DesignCanvasComponent, isStandalone: true, selector: "rpt-design-canvas", host: { listeners: { "document:keydown.escape": "onEscape()" } }, ngImport: i0, template: `
|
|
5209
5312
|
<div class="canvas-wrapper" (click)="onCanvasBackgroundClick($event)">
|
|
@@ -5217,6 +5320,29 @@ class DesignCanvasComponent {
|
|
|
5217
5320
|
<span class="info-value">{{ components().length }}</span>
|
|
5218
5321
|
</div>
|
|
5219
5322
|
|
|
5323
|
+
<div class="canvas-actions">
|
|
5324
|
+
@if (!definition().grid) {
|
|
5325
|
+
<button
|
|
5326
|
+
type="button"
|
|
5327
|
+
class="canvas-action-btn btn-grid-add"
|
|
5328
|
+
(click)="addResultGrid($event)"
|
|
5329
|
+
title="Add a Result Grid to this report"
|
|
5330
|
+
>
|
|
5331
|
+
<rpt-icon name="table" [size]="14" />
|
|
5332
|
+
<span>+ Add Grid</span>
|
|
5333
|
+
</button>
|
|
5334
|
+
} @else {
|
|
5335
|
+
<button
|
|
5336
|
+
type="button"
|
|
5337
|
+
class="canvas-action-btn"
|
|
5338
|
+
(click)="selectGridSettings($event)"
|
|
5339
|
+
title="Configure Result Data Grid"
|
|
5340
|
+
>
|
|
5341
|
+
<rpt-icon name="table" [size]="14" />
|
|
5342
|
+
<span>Grid ({{ definition().grid?.columns?.length ?? 0 }})</span>
|
|
5343
|
+
</button>
|
|
5344
|
+
}
|
|
5345
|
+
|
|
5220
5346
|
<button
|
|
5221
5347
|
type="button"
|
|
5222
5348
|
class="canvas-action-btn"
|
|
@@ -5226,6 +5352,7 @@ class DesignCanvasComponent {
|
|
|
5226
5352
|
<rpt-icon name="settings" [size]="15" />
|
|
5227
5353
|
<span>Report Settings</span>
|
|
5228
5354
|
</button>
|
|
5355
|
+
</div>
|
|
5229
5356
|
</div>
|
|
5230
5357
|
|
|
5231
5358
|
<!-- Canvas Drop Area -->
|
|
@@ -5497,7 +5624,7 @@ class DesignCanvasComponent {
|
|
|
5497
5624
|
}
|
|
5498
5625
|
</div>
|
|
5499
5626
|
|
|
5500
|
-
<!-- Result Grid Preview Placeholder -->
|
|
5627
|
+
<!-- Result Grid Preview Placeholder or Empty Add Grid Banner -->
|
|
5501
5628
|
@if (definition().grid) {
|
|
5502
5629
|
<div class="canvas-grid-preview-box" (click)="selectGridSettings($event)">
|
|
5503
5630
|
<div class="grid-preview-header">
|
|
@@ -5505,10 +5632,19 @@ class DesignCanvasComponent {
|
|
|
5505
5632
|
<rpt-icon name="table" [size]="15" />
|
|
5506
5633
|
<span>Result Grid Preview ({{ definition().grid?.columns?.length ?? 0 }} columns)</span>
|
|
5507
5634
|
</div>
|
|
5508
|
-
<
|
|
5635
|
+
<div style="display: flex; align-items: center; gap: 10px;">
|
|
5636
|
+
<span class="grid-click-hint">Click to edit columns</span>
|
|
5637
|
+
<button
|
|
5638
|
+
type="button"
|
|
5639
|
+
class="btn-remove-grid"
|
|
5640
|
+
(click)="removeGrid($event)"
|
|
5641
|
+
title="Remove Result Grid from this report"
|
|
5642
|
+
>
|
|
5643
|
+
<rpt-icon name="trash" [size]="13" />
|
|
5644
|
+
</button>
|
|
5645
|
+
</div>
|
|
5509
5646
|
</div>
|
|
5510
5647
|
<div class="grid-preview-columns">
|
|
5511
|
-
|
|
5512
5648
|
@for (col of definition().grid?.columns; track col.field) {
|
|
5513
5649
|
<div class="grid-col-pill">
|
|
5514
5650
|
<span class="col-pill-name">{{ col.label }}</span>
|
|
@@ -5517,11 +5653,22 @@ class DesignCanvasComponent {
|
|
|
5517
5653
|
}
|
|
5518
5654
|
</div>
|
|
5519
5655
|
</div>
|
|
5656
|
+
} @else {
|
|
5657
|
+
<div class="canvas-add-grid-banner" (click)="addResultGrid($event)">
|
|
5658
|
+
<div class="add-grid-icon">
|
|
5659
|
+
<rpt-icon name="table" [size]="20" />
|
|
5660
|
+
</div>
|
|
5661
|
+
<div class="add-grid-text">
|
|
5662
|
+
<span class="add-grid-title">+ Add Result Data Grid</span>
|
|
5663
|
+
<span class="add-grid-sub">Attach an interactive data table or UltraGrid to display report execution output</span>
|
|
5664
|
+
</div>
|
|
5665
|
+
<button type="button" class="btn-banner-add">Add Grid</button>
|
|
5666
|
+
</div>
|
|
5520
5667
|
}
|
|
5521
5668
|
</div>
|
|
5522
5669
|
</div>
|
|
5523
5670
|
</div>
|
|
5524
|
-
`, isInline: true, styles: [":host{display:block;height:100%;background-color:#f1f5f9;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.canvas-wrapper{display:flex;flex-direction:column;height:100%}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:46px;padding:6px 20px;background:#fff;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box}.canvas-info{display:flex;align-items:center;gap:8px;color:var(--rpt-color-text-muted, #64748b);font-size:.8125rem}.info-label{color:#64748b}.info-value{font-weight:600;color:var(--rpt-color-text, #0f172a)}.info-divider{color:var(--rpt-color-border, #cbd5e1);margin:0 2px}.canvas-action-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 14px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;font-size:.8125rem;font-weight:500;color:#1e293b;cursor:pointer;line-height:1;white-space:nowrap;box-shadow:0 1px 2px #0000000a;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-action-btn rpt-icon{color:#64748b;transition:color .15s ease}.canvas-action-btn:hover{background:var(--rpt-color-surface, #f8fafc);border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);box-shadow:0 2px 4px #2563eb14}.canvas-action-btn:hover rpt-icon{color:var(--rpt-color-primary, #2563eb)}.canvas-action-btn:active{transform:translateY(1px)}.canvas-scroll-area{flex:1;overflow-y:auto;padding:16px}.canvas-artboard{width:100%;max-width:1400px;margin:0 auto;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 4px 6px -1px #0000000d;min-height:480px;box-sizing:border-box}.canvas-report-header{margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0)}.canvas-report-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-report-desc{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.canvas-grid{display:grid;width:100%;min-height:180px;align-items:start;border-radius:6px;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-component-card{background:#fff;border:1.5px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:var(--rpt-box-shadow, 0 1px 2px rgba(0, 0, 0, .05));box-sizing:border-box;transition:all var(--rpt-transition-speed, .15s) ease;cursor:pointer;position:relative;overflow:hidden;display:flex;flex-direction:column;min-height:96px}.canvas-component-card:hover{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 4px 6px -1px #2563eb1a}.canvas-component-card.is-selected{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb40}.canvas-component-card.is-resizing{-webkit-user-select:none;user-select:none;border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb59;z-index:30;transition:none!important}.resize-handle{position:absolute;z-index:40;touch-action:none;opacity:0;transition:opacity .15s ease}.canvas-component-card.is-selected .resize-handle,.canvas-component-card:hover .resize-handle{opacity:1}.resize-handle.handle-e{top:0;right:0;width:6px;height:100%;cursor:ew-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-e:after{content:\"\";width:3px;height:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-e:hover:after,.canvas-component-card.is-selected .resize-handle.handle-e:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-s{bottom:0;left:0;height:6px;width:100%;cursor:ns-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-s:after{content:\"\";height:3px;width:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-s:hover:after,.canvas-component-card.is-selected .resize-handle.handle-s:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-se{bottom:0;right:0;width:12px;height:12px;cursor:nwse-resize;display:flex;align-items:flex-end;justify-content:flex-end;padding:2px}.resize-handle.handle-se:after{content:\"\";width:5px;height:5px;border-right:2px solid #cbd5e1;border-bottom:2px solid #cbd5e1;transition:border-color .15s ease}.resize-handle.handle-se:hover:after,.canvas-component-card.is-selected .resize-handle.handle-se:after{border-color:var(--rpt-color-primary, #2563eb)}.resize-dimension-tooltip{position:absolute;top:38px;right:8px;background:#0f172ae6;color:#fff;font-size:.7rem;font-weight:600;padding:3px 8px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:50;box-shadow:0 2px 4px #0003}.card-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 8px;background:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #e2e8f0);min-height:32px;box-sizing:border-box;overflow:hidden}.card-title-group{display:flex;align-items:center;gap:5px;cursor:grab;min-width:0;flex:1;overflow:hidden}.drag-handle-dots{color:var(--rpt-color-text-muted, #94a3b8);font-size:.85rem;letter-spacing:-2px;flex-shrink:0;-webkit-user-select:none;user-select:none}.comp-title{font-size:.75rem;font-weight:600;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}.card-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}.new-row-pill-static{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:1px 5px;border-radius:9999px;white-space:nowrap;line-height:1;flex-shrink:0}.span-pill-static{display:inline-flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:600;color:var(--rpt-color-text-muted, #64748b);background:var(--rpt-color-surface, #f1f5f9);border:1px solid var(--rpt-color-border, #e2e8f0);padding:1px 6px;border-radius:9999px;line-height:1.2;white-space:nowrap;-webkit-user-select:none;user-select:none}.card-quick-controls{display:none;align-items:center;gap:3px}.canvas-component-card:hover .span-pill-static,.canvas-component-card.is-selected .span-pill-static,.canvas-component-card:hover .new-row-pill-static,.canvas-component-card.is-selected .new-row-pill-static{display:none}.canvas-component-card:hover .card-quick-controls,.canvas-component-card.is-selected .card-quick-controls{display:inline-flex}.canvas-component-card.is-narrow .card-header{padding:4px 6px;gap:3px}.canvas-component-card.is-narrow:hover .comp-title,.canvas-component-card.is-narrow.is-selected .comp-title,.canvas-component-card.is-narrow:hover .drag-handle-dots,.canvas-component-card.is-narrow.is-selected .drag-handle-dots{display:none}.canvas-component-card.is-narrow .card-quick-controls{gap:2px}.canvas-component-card.is-narrow .span-control-group{height:18px}.canvas-component-card.is-narrow .span-btn{width:14px;height:16px}.canvas-component-card.is-narrow .span-badge{font-size:.6rem;padding:0 2px}.canvas-component-card.is-narrow .card-action-btn{width:18px;height:18px}.canvas-component-card.is-compact:hover .card-action-btn:not(.btn-delete),.canvas-component-card.is-compact.is-selected .card-action-btn:not(.btn-delete){display:none}.span-control-group{display:inline-flex;align-items:center;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;height:20px;padding:0 1px;white-space:nowrap;flex-shrink:0}.span-btn{width:16px;height:18px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;padding:0;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;border-radius:2px;transition:all .12s ease}.span-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-primary, #2563eb)}.span-btn:disabled{opacity:.3;cursor:not-allowed}.span-badge{font-size:.65rem;font-weight:600;color:var(--rpt-color-text, #0f172a);padding:0 3px;white-space:nowrap;-webkit-user-select:none;user-select:none;line-height:1}.card-action-btn{width:20px;height:20px;border:none;background:transparent;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer;color:var(--rpt-color-text-muted, #64748b);transition:all .12s ease;flex-shrink:0}.card-action-btn:hover{background:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.card-action-btn.btn-active-toggle{background:#7c3aed;color:#fff;border-color:#7c3aed}.card-action-btn.btn-active-toggle:hover{background:#6d28d9;color:#fff}.btn-delete:hover{background:#fee2e2;color:#ef4444}.card-body{padding:8px 12px 8px 10px;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box;overflow:hidden}.mock-input-field{display:flex;flex-direction:column;gap:4px;flex:1;height:100%;min-height:0}.mock-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text-muted, #475569);flex-shrink:0}.mock-input-box,.mock-select-box{border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #94a3b8);background:#fff;flex:1;min-height:38px;height:100%;display:flex;align-items:center;justify-content:space-between;box-sizing:border-box}.mock-checkbox-field{display:flex;align-items:center;gap:6px;flex:1;height:100%;min-height:0;padding-top:14px}.mock-check-box{width:18px;height:18px;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:.65rem;color:var(--rpt-color-primary, #2563eb);flex-shrink:0}.mock-btn-wrapper{display:flex;flex:1;height:100%;min-height:38px;align-items:center;justify-content:flex-start;width:100%;min-width:0;box-sizing:border-box}.mock-btn{border-radius:var(--rpt-border-radius, 6px);padding:0 16px;height:36px;font-size:var(--rpt-font-size-base, .875rem);font-weight:500;border:1px solid transparent;cursor:pointer;width:auto;max-width:100%;display:inline-flex;align-items:center;justify-content:center;gap:6px;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:all .15s ease}.mock-btn.mock-btn-full{width:100%}.canvas-component-card.is-narrow .mock-btn{padding:0 6px;font-size:.775rem;width:100%;height:34px}.mock-kpi-field{display:flex;flex-direction:column;justify-content:space-between;flex:1;height:100%;min-height:0}.mock-kpi-header{display:flex;align-items:center;justify-content:space-between}.mock-kpi-value{font-size:1.25rem;font-weight:700;color:var(--rpt-color-text, #0f172a);margin:2px 0}.mock-kpi-footer{display:flex;align-items:center;gap:6px;font-size:.65rem}.mock-kpi-trend{color:#16a34a;font-weight:600}.mock-kpi-sub{color:#64748b}.mock-chart-field{display:flex;flex-direction:column;flex:1;height:100%;min-height:0}.mock-chart-bars{display:flex;align-items:flex-end;justify-content:space-around;gap:8px;flex:1;min-height:36px;padding-top:6px}.mock-chart-bar{width:16%;background:var(--rpt-color-primary, #2563eb);border-radius:3px 3px 0 0;opacity:.85;min-height:10px}.btn-primary{background:var(--rpt-color-primary, #2563eb);color:#fff}.btn-secondary{background:#f1f5f9;color:#0f172a;border:1px solid #cbd5e1}.btn-outline{background:transparent;color:#2563eb;border:1px solid #2563eb}.btn-danger{background:#ef4444;color:#fff}.mock-generic-box{border:1px dashed #cbd5e1;border-radius:4px;padding:8px;font-size:.75rem;text-align:center;color:#64748b}.canvas-drag-placeholder{background:#2563eb0f;border:2px dashed var(--rpt-color-primary, #2563eb);border-radius:6px;min-height:80px;box-sizing:border-box;transition:transform .15s ease}.canvas-drag-preview,::ng-deep .canvas-drag-preview{background:#fff;border:2px solid var(--rpt-color-primary, #2563eb);border-radius:6px;padding:8px 14px;display:inline-flex;align-items:center;gap:8px;font-family:var(--rpt-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif)!important;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);box-shadow:0 12px 24px -4px #00000040;z-index:10000}.preview-title,::ng-deep .preview-title{font-family:inherit!important;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-span,::ng-deep .preview-span{font-family:inherit!important;font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.canvas-empty-state{grid-column:1 / -1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;border:2px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);text-align:center}.empty-icon{font-size:2.5rem;margin-bottom:12px}.canvas-empty-state h3{font-size:1rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-empty-state p{font-size:.8rem;color:var(--rpt-color-text-muted, #64748b);max-width:380px;margin:0}.canvas-grid-preview-box{margin-top:32px;border:1px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);padding:16px;cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-grid-preview-box:hover{border-color:var(--rpt-color-primary, #2563eb);background:#fff}.grid-preview-header{display:flex;align-items:center;justify-content:space-between;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin-bottom:10px}.grid-click-hint{font-size:.7rem;color:var(--rpt-color-primary, #2563eb);font-weight:500}.grid-preview-columns{display:flex;flex-wrap:wrap;gap:6px}.grid-col-pill{display:flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--rpt-color-border, #e2e8f0);border-radius:4px;padding:4px 8px;font-size:.75rem}.col-pill-name{font-weight:600;color:var(--rpt-color-text, #0f172a)}.col-pill-type{font-size:.65rem;color:var(--rpt-color-text-muted, #94a3b8);background:var(--rpt-color-surface, #f1f5f9);padding:1px 4px;border-radius:3px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1$2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$2.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: "directive", type: i1$2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i1$2.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i1$2.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5671
|
+
`, isInline: true, styles: [":host{display:block;height:100%;background-color:#f1f5f9;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.canvas-wrapper{display:flex;flex-direction:column;height:100%}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:46px;padding:6px 20px;background:#fff;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box}.canvas-info{display:flex;align-items:center;gap:8px;color:var(--rpt-color-text-muted, #64748b);font-size:.8125rem}.info-label{color:#64748b}.info-value{font-weight:600;color:var(--rpt-color-text, #0f172a)}.info-divider{color:var(--rpt-color-border, #cbd5e1);margin:0 2px}.canvas-action-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 14px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;font-size:.8125rem;font-weight:500;color:#1e293b;cursor:pointer;line-height:1;white-space:nowrap;box-shadow:0 1px 2px #0000000a;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-action-btn rpt-icon{color:#64748b;transition:color .15s ease}.canvas-action-btn:hover{background:var(--rpt-color-surface, #f8fafc);border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);box-shadow:0 2px 4px #2563eb14}.canvas-action-btn:hover rpt-icon{color:var(--rpt-color-primary, #2563eb)}.canvas-action-btn:active{transform:translateY(1px)}.canvas-scroll-area{flex:1;overflow-y:auto;padding:16px}.canvas-artboard{width:100%;max-width:1400px;margin:0 auto;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 4px 6px -1px #0000000d;min-height:480px;box-sizing:border-box}.canvas-report-header{margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0)}.canvas-report-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-report-desc{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.canvas-grid{display:grid;width:100%;min-height:180px;align-items:start;border-radius:6px;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-component-card{background:#fff;border:1.5px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:var(--rpt-box-shadow, 0 1px 2px rgba(0, 0, 0, .05));box-sizing:border-box;transition:all var(--rpt-transition-speed, .15s) ease;cursor:pointer;position:relative;overflow:hidden;display:flex;flex-direction:column;min-height:96px}.canvas-component-card:hover{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 4px 6px -1px #2563eb1a}.canvas-component-card.is-selected{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb40}.canvas-component-card.is-resizing{-webkit-user-select:none;user-select:none;border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb59;z-index:30;transition:none!important}.resize-handle{position:absolute;z-index:40;touch-action:none;opacity:0;transition:opacity .15s ease}.canvas-component-card.is-selected .resize-handle,.canvas-component-card:hover .resize-handle{opacity:1}.resize-handle.handle-e{top:0;right:0;width:6px;height:100%;cursor:ew-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-e:after{content:\"\";width:3px;height:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-e:hover:after,.canvas-component-card.is-selected .resize-handle.handle-e:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-s{bottom:0;left:0;height:6px;width:100%;cursor:ns-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-s:after{content:\"\";height:3px;width:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-s:hover:after,.canvas-component-card.is-selected .resize-handle.handle-s:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-se{bottom:0;right:0;width:12px;height:12px;cursor:nwse-resize;display:flex;align-items:flex-end;justify-content:flex-end;padding:2px}.resize-handle.handle-se:after{content:\"\";width:5px;height:5px;border-right:2px solid #cbd5e1;border-bottom:2px solid #cbd5e1;transition:border-color .15s ease}.resize-handle.handle-se:hover:after,.canvas-component-card.is-selected .resize-handle.handle-se:after{border-color:var(--rpt-color-primary, #2563eb)}.resize-dimension-tooltip{position:absolute;top:38px;right:8px;background:#0f172ae6;color:#fff;font-size:.7rem;font-weight:600;padding:3px 8px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:50;box-shadow:0 2px 4px #0003}.card-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 8px;background:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #e2e8f0);min-height:32px;box-sizing:border-box;overflow:hidden}.card-title-group{display:flex;align-items:center;gap:5px;cursor:grab;min-width:0;flex:1;overflow:hidden}.drag-handle-dots{color:var(--rpt-color-text-muted, #94a3b8);font-size:.85rem;letter-spacing:-2px;flex-shrink:0;-webkit-user-select:none;user-select:none}.comp-title{font-size:.75rem;font-weight:600;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}.card-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}.new-row-pill-static{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:1px 5px;border-radius:9999px;white-space:nowrap;line-height:1;flex-shrink:0}.span-pill-static{display:inline-flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:600;color:var(--rpt-color-text-muted, #64748b);background:var(--rpt-color-surface, #f1f5f9);border:1px solid var(--rpt-color-border, #e2e8f0);padding:1px 6px;border-radius:9999px;line-height:1.2;white-space:nowrap;-webkit-user-select:none;user-select:none}.card-quick-controls{display:none;align-items:center;gap:3px}.canvas-component-card:hover .span-pill-static,.canvas-component-card.is-selected .span-pill-static,.canvas-component-card:hover .new-row-pill-static,.canvas-component-card.is-selected .new-row-pill-static{display:none}.canvas-component-card:hover .card-quick-controls,.canvas-component-card.is-selected .card-quick-controls{display:inline-flex}.canvas-component-card.is-narrow .card-header{padding:4px 6px;gap:3px}.canvas-component-card.is-narrow:hover .comp-title,.canvas-component-card.is-narrow.is-selected .comp-title,.canvas-component-card.is-narrow:hover .drag-handle-dots,.canvas-component-card.is-narrow.is-selected .drag-handle-dots{display:none}.canvas-component-card.is-narrow .card-quick-controls{gap:2px}.canvas-component-card.is-narrow .span-control-group{height:18px}.canvas-component-card.is-narrow .span-btn{width:14px;height:16px}.canvas-component-card.is-narrow .span-badge{font-size:.6rem;padding:0 2px}.canvas-component-card.is-narrow .card-action-btn{width:18px;height:18px}.canvas-component-card.is-compact:hover .card-action-btn:not(.btn-delete),.canvas-component-card.is-compact.is-selected .card-action-btn:not(.btn-delete){display:none}.span-control-group{display:inline-flex;align-items:center;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;height:20px;padding:0 1px;white-space:nowrap;flex-shrink:0}.span-btn{width:16px;height:18px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;padding:0;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;border-radius:2px;transition:all .12s ease}.span-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-primary, #2563eb)}.span-btn:disabled{opacity:.3;cursor:not-allowed}.span-badge{font-size:.65rem;font-weight:600;color:var(--rpt-color-text, #0f172a);padding:0 3px;white-space:nowrap;-webkit-user-select:none;user-select:none;line-height:1}.card-action-btn{width:20px;height:20px;border:none;background:transparent;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer;color:var(--rpt-color-text-muted, #64748b);transition:all .12s ease;flex-shrink:0}.card-action-btn:hover{background:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.card-action-btn.btn-active-toggle{background:#7c3aed;color:#fff;border-color:#7c3aed}.card-action-btn.btn-active-toggle:hover{background:#6d28d9;color:#fff}.btn-delete:hover{background:#fee2e2;color:#ef4444}.card-body{padding:8px 12px 8px 10px;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box;overflow:hidden}.mock-input-field{display:flex;flex-direction:column;gap:4px;flex:1;height:100%;min-height:0}.mock-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text-muted, #475569);flex-shrink:0}.mock-input-box,.mock-select-box{border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #94a3b8);background:#fff;flex:1;min-height:38px;height:100%;display:flex;align-items:center;justify-content:space-between;box-sizing:border-box}.mock-checkbox-field{display:flex;align-items:center;gap:6px;flex:1;height:100%;min-height:0;padding-top:14px}.mock-check-box{width:18px;height:18px;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:.65rem;color:var(--rpt-color-primary, #2563eb);flex-shrink:0}.mock-btn-wrapper{display:flex;flex:1;height:100%;min-height:38px;align-items:center;justify-content:flex-start;width:100%;min-width:0;box-sizing:border-box}.mock-btn{border-radius:var(--rpt-border-radius, 6px);padding:0 16px;height:36px;font-size:var(--rpt-font-size-base, .875rem);font-weight:500;border:1px solid transparent;cursor:pointer;width:auto;max-width:100%;display:inline-flex;align-items:center;justify-content:center;gap:6px;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:all .15s ease}.mock-btn.mock-btn-full{width:100%}.canvas-component-card.is-narrow .mock-btn{padding:0 6px;font-size:.775rem;width:100%;height:34px}.mock-kpi-field{display:flex;flex-direction:column;justify-content:space-between;flex:1;height:100%;min-height:0}.mock-kpi-header{display:flex;align-items:center;justify-content:space-between}.mock-kpi-value{font-size:1.25rem;font-weight:700;color:var(--rpt-color-text, #0f172a);margin:2px 0}.mock-kpi-footer{display:flex;align-items:center;gap:6px;font-size:.65rem}.mock-kpi-trend{color:#16a34a;font-weight:600}.mock-kpi-sub{color:#64748b}.mock-chart-field{display:flex;flex-direction:column;flex:1;height:100%;min-height:0}.mock-chart-bars{display:flex;align-items:flex-end;justify-content:space-around;gap:8px;flex:1;min-height:36px;padding-top:6px}.mock-chart-bar{width:16%;background:var(--rpt-color-primary, #2563eb);border-radius:3px 3px 0 0;opacity:.85;min-height:10px}.btn-primary{background:var(--rpt-color-primary, #2563eb);color:#fff}.btn-secondary{background:#f1f5f9;color:#0f172a;border:1px solid #cbd5e1}.btn-outline{background:transparent;color:#2563eb;border:1px solid #2563eb}.btn-danger{background:#ef4444;color:#fff}.mock-generic-box{border:1px dashed #cbd5e1;border-radius:4px;padding:8px;font-size:.75rem;text-align:center;color:#64748b}.canvas-drag-placeholder{background:#2563eb0f;border:2px dashed var(--rpt-color-primary, #2563eb);border-radius:6px;min-height:80px;box-sizing:border-box;transition:transform .15s ease}.canvas-drag-preview,::ng-deep .canvas-drag-preview{background:#fff;border:2px solid var(--rpt-color-primary, #2563eb);border-radius:6px;padding:8px 14px;display:inline-flex;align-items:center;gap:8px;font-family:var(--rpt-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif)!important;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);box-shadow:0 12px 24px -4px #00000040;z-index:10000}.preview-title,::ng-deep .preview-title{font-family:inherit!important;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-span,::ng-deep .preview-span{font-family:inherit!important;font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.canvas-empty-state{grid-column:1 / -1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;border:2px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);text-align:center}.empty-icon{font-size:2.5rem;margin-bottom:12px}.canvas-empty-state h3{font-size:1rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-empty-state p{font-size:.8rem;color:var(--rpt-color-text-muted, #64748b);max-width:380px;margin:0}.canvas-grid-preview-box{margin-top:32px;border:1px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);padding:16px;cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-grid-preview-box:hover{border-color:var(--rpt-color-primary, #2563eb);background:#fff}.grid-preview-header{display:flex;align-items:center;justify-content:space-between;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin-bottom:10px}.grid-click-hint{font-size:.7rem;color:var(--rpt-color-primary, #2563eb);font-weight:500}.grid-preview-columns{display:flex;flex-wrap:wrap;gap:6px}.grid-col-pill{display:flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--rpt-color-border, #e2e8f0);border-radius:4px;padding:4px 8px;font-size:.75rem}.col-pill-name{font-weight:600;color:var(--rpt-color-text, #0f172a)}.col-pill-type{font-size:.65rem;color:var(--rpt-color-text-muted, #94a3b8);background:var(--rpt-color-surface, #f1f5f9);padding:1px 4px;border-radius:3px}.canvas-actions{display:flex;align-items:center;gap:8px}.btn-grid-add{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.btn-grid-add:hover{background:#dcfce7;border-color:#86efac;color:#15803d}.btn-remove-grid{display:inline-flex;align-items:center;justify-content:center;padding:4px;border:none;background:transparent;color:#94a3b8;border-radius:4px;cursor:pointer;transition:all .15s ease}.btn-remove-grid:hover{background:#fee2e2;color:#ef4444}.canvas-add-grid-banner{margin-top:24px;border:2px dashed #cbd5e1;border-radius:8px;background:#fff;padding:16px 20px;display:flex;align-items:center;gap:16px;cursor:pointer;transition:all .15s ease}.canvas-add-grid-banner:hover{border-color:#2563eb;background:#f8fafc;box-shadow:0 2px 8px #2563eb14}.add-grid-icon{width:40px;height:40px;border-radius:8px;background:#eff6ff;color:#2563eb;display:flex;align-items:center;justify-content:center;flex-shrink:0}.add-grid-text{display:flex;flex-direction:column;gap:2px;flex:1}.add-grid-title{font-size:.875rem;font-weight:600;color:#0f172a}.add-grid-sub{font-size:.75rem;color:#64748b}.btn-banner-add{padding:6px 14px;font-size:.75rem;font-weight:600;color:#2563eb;background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.canvas-add-grid-banner:hover .btn-banner-add{background:#2563eb;color:#fff;border-color:#2563eb}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i1$2.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i1$2.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: "directive", type: i1$2.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "directive", type: i1$2.CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: i1$2.CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
5525
5672
|
}
|
|
5526
5673
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DesignCanvasComponent, decorators: [{
|
|
5527
5674
|
type: Component,
|
|
@@ -5537,6 +5684,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5537
5684
|
<span class="info-value">{{ components().length }}</span>
|
|
5538
5685
|
</div>
|
|
5539
5686
|
|
|
5687
|
+
<div class="canvas-actions">
|
|
5688
|
+
@if (!definition().grid) {
|
|
5689
|
+
<button
|
|
5690
|
+
type="button"
|
|
5691
|
+
class="canvas-action-btn btn-grid-add"
|
|
5692
|
+
(click)="addResultGrid($event)"
|
|
5693
|
+
title="Add a Result Grid to this report"
|
|
5694
|
+
>
|
|
5695
|
+
<rpt-icon name="table" [size]="14" />
|
|
5696
|
+
<span>+ Add Grid</span>
|
|
5697
|
+
</button>
|
|
5698
|
+
} @else {
|
|
5699
|
+
<button
|
|
5700
|
+
type="button"
|
|
5701
|
+
class="canvas-action-btn"
|
|
5702
|
+
(click)="selectGridSettings($event)"
|
|
5703
|
+
title="Configure Result Data Grid"
|
|
5704
|
+
>
|
|
5705
|
+
<rpt-icon name="table" [size]="14" />
|
|
5706
|
+
<span>Grid ({{ definition().grid?.columns?.length ?? 0 }})</span>
|
|
5707
|
+
</button>
|
|
5708
|
+
}
|
|
5709
|
+
|
|
5540
5710
|
<button
|
|
5541
5711
|
type="button"
|
|
5542
5712
|
class="canvas-action-btn"
|
|
@@ -5546,6 +5716,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5546
5716
|
<rpt-icon name="settings" [size]="15" />
|
|
5547
5717
|
<span>Report Settings</span>
|
|
5548
5718
|
</button>
|
|
5719
|
+
</div>
|
|
5549
5720
|
</div>
|
|
5550
5721
|
|
|
5551
5722
|
<!-- Canvas Drop Area -->
|
|
@@ -5817,7 +5988,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5817
5988
|
}
|
|
5818
5989
|
</div>
|
|
5819
5990
|
|
|
5820
|
-
<!-- Result Grid Preview Placeholder -->
|
|
5991
|
+
<!-- Result Grid Preview Placeholder or Empty Add Grid Banner -->
|
|
5821
5992
|
@if (definition().grid) {
|
|
5822
5993
|
<div class="canvas-grid-preview-box" (click)="selectGridSettings($event)">
|
|
5823
5994
|
<div class="grid-preview-header">
|
|
@@ -5825,10 +5996,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5825
5996
|
<rpt-icon name="table" [size]="15" />
|
|
5826
5997
|
<span>Result Grid Preview ({{ definition().grid?.columns?.length ?? 0 }} columns)</span>
|
|
5827
5998
|
</div>
|
|
5828
|
-
<
|
|
5999
|
+
<div style="display: flex; align-items: center; gap: 10px;">
|
|
6000
|
+
<span class="grid-click-hint">Click to edit columns</span>
|
|
6001
|
+
<button
|
|
6002
|
+
type="button"
|
|
6003
|
+
class="btn-remove-grid"
|
|
6004
|
+
(click)="removeGrid($event)"
|
|
6005
|
+
title="Remove Result Grid from this report"
|
|
6006
|
+
>
|
|
6007
|
+
<rpt-icon name="trash" [size]="13" />
|
|
6008
|
+
</button>
|
|
6009
|
+
</div>
|
|
5829
6010
|
</div>
|
|
5830
6011
|
<div class="grid-preview-columns">
|
|
5831
|
-
|
|
5832
6012
|
@for (col of definition().grid?.columns; track col.field) {
|
|
5833
6013
|
<div class="grid-col-pill">
|
|
5834
6014
|
<span class="col-pill-name">{{ col.label }}</span>
|
|
@@ -5837,11 +6017,22 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
5837
6017
|
}
|
|
5838
6018
|
</div>
|
|
5839
6019
|
</div>
|
|
6020
|
+
} @else {
|
|
6021
|
+
<div class="canvas-add-grid-banner" (click)="addResultGrid($event)">
|
|
6022
|
+
<div class="add-grid-icon">
|
|
6023
|
+
<rpt-icon name="table" [size]="20" />
|
|
6024
|
+
</div>
|
|
6025
|
+
<div class="add-grid-text">
|
|
6026
|
+
<span class="add-grid-title">+ Add Result Data Grid</span>
|
|
6027
|
+
<span class="add-grid-sub">Attach an interactive data table or UltraGrid to display report execution output</span>
|
|
6028
|
+
</div>
|
|
6029
|
+
<button type="button" class="btn-banner-add">Add Grid</button>
|
|
6030
|
+
</div>
|
|
5840
6031
|
}
|
|
5841
6032
|
</div>
|
|
5842
6033
|
</div>
|
|
5843
6034
|
</div>
|
|
5844
|
-
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%;background-color:#f1f5f9;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.canvas-wrapper{display:flex;flex-direction:column;height:100%}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:46px;padding:6px 20px;background:#fff;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box}.canvas-info{display:flex;align-items:center;gap:8px;color:var(--rpt-color-text-muted, #64748b);font-size:.8125rem}.info-label{color:#64748b}.info-value{font-weight:600;color:var(--rpt-color-text, #0f172a)}.info-divider{color:var(--rpt-color-border, #cbd5e1);margin:0 2px}.canvas-action-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 14px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;font-size:.8125rem;font-weight:500;color:#1e293b;cursor:pointer;line-height:1;white-space:nowrap;box-shadow:0 1px 2px #0000000a;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-action-btn rpt-icon{color:#64748b;transition:color .15s ease}.canvas-action-btn:hover{background:var(--rpt-color-surface, #f8fafc);border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);box-shadow:0 2px 4px #2563eb14}.canvas-action-btn:hover rpt-icon{color:var(--rpt-color-primary, #2563eb)}.canvas-action-btn:active{transform:translateY(1px)}.canvas-scroll-area{flex:1;overflow-y:auto;padding:16px}.canvas-artboard{width:100%;max-width:1400px;margin:0 auto;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 4px 6px -1px #0000000d;min-height:480px;box-sizing:border-box}.canvas-report-header{margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0)}.canvas-report-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-report-desc{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.canvas-grid{display:grid;width:100%;min-height:180px;align-items:start;border-radius:6px;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-component-card{background:#fff;border:1.5px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:var(--rpt-box-shadow, 0 1px 2px rgba(0, 0, 0, .05));box-sizing:border-box;transition:all var(--rpt-transition-speed, .15s) ease;cursor:pointer;position:relative;overflow:hidden;display:flex;flex-direction:column;min-height:96px}.canvas-component-card:hover{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 4px 6px -1px #2563eb1a}.canvas-component-card.is-selected{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb40}.canvas-component-card.is-resizing{-webkit-user-select:none;user-select:none;border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb59;z-index:30;transition:none!important}.resize-handle{position:absolute;z-index:40;touch-action:none;opacity:0;transition:opacity .15s ease}.canvas-component-card.is-selected .resize-handle,.canvas-component-card:hover .resize-handle{opacity:1}.resize-handle.handle-e{top:0;right:0;width:6px;height:100%;cursor:ew-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-e:after{content:\"\";width:3px;height:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-e:hover:after,.canvas-component-card.is-selected .resize-handle.handle-e:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-s{bottom:0;left:0;height:6px;width:100%;cursor:ns-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-s:after{content:\"\";height:3px;width:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-s:hover:after,.canvas-component-card.is-selected .resize-handle.handle-s:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-se{bottom:0;right:0;width:12px;height:12px;cursor:nwse-resize;display:flex;align-items:flex-end;justify-content:flex-end;padding:2px}.resize-handle.handle-se:after{content:\"\";width:5px;height:5px;border-right:2px solid #cbd5e1;border-bottom:2px solid #cbd5e1;transition:border-color .15s ease}.resize-handle.handle-se:hover:after,.canvas-component-card.is-selected .resize-handle.handle-se:after{border-color:var(--rpt-color-primary, #2563eb)}.resize-dimension-tooltip{position:absolute;top:38px;right:8px;background:#0f172ae6;color:#fff;font-size:.7rem;font-weight:600;padding:3px 8px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:50;box-shadow:0 2px 4px #0003}.card-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 8px;background:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #e2e8f0);min-height:32px;box-sizing:border-box;overflow:hidden}.card-title-group{display:flex;align-items:center;gap:5px;cursor:grab;min-width:0;flex:1;overflow:hidden}.drag-handle-dots{color:var(--rpt-color-text-muted, #94a3b8);font-size:.85rem;letter-spacing:-2px;flex-shrink:0;-webkit-user-select:none;user-select:none}.comp-title{font-size:.75rem;font-weight:600;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}.card-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}.new-row-pill-static{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:1px 5px;border-radius:9999px;white-space:nowrap;line-height:1;flex-shrink:0}.span-pill-static{display:inline-flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:600;color:var(--rpt-color-text-muted, #64748b);background:var(--rpt-color-surface, #f1f5f9);border:1px solid var(--rpt-color-border, #e2e8f0);padding:1px 6px;border-radius:9999px;line-height:1.2;white-space:nowrap;-webkit-user-select:none;user-select:none}.card-quick-controls{display:none;align-items:center;gap:3px}.canvas-component-card:hover .span-pill-static,.canvas-component-card.is-selected .span-pill-static,.canvas-component-card:hover .new-row-pill-static,.canvas-component-card.is-selected .new-row-pill-static{display:none}.canvas-component-card:hover .card-quick-controls,.canvas-component-card.is-selected .card-quick-controls{display:inline-flex}.canvas-component-card.is-narrow .card-header{padding:4px 6px;gap:3px}.canvas-component-card.is-narrow:hover .comp-title,.canvas-component-card.is-narrow.is-selected .comp-title,.canvas-component-card.is-narrow:hover .drag-handle-dots,.canvas-component-card.is-narrow.is-selected .drag-handle-dots{display:none}.canvas-component-card.is-narrow .card-quick-controls{gap:2px}.canvas-component-card.is-narrow .span-control-group{height:18px}.canvas-component-card.is-narrow .span-btn{width:14px;height:16px}.canvas-component-card.is-narrow .span-badge{font-size:.6rem;padding:0 2px}.canvas-component-card.is-narrow .card-action-btn{width:18px;height:18px}.canvas-component-card.is-compact:hover .card-action-btn:not(.btn-delete),.canvas-component-card.is-compact.is-selected .card-action-btn:not(.btn-delete){display:none}.span-control-group{display:inline-flex;align-items:center;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;height:20px;padding:0 1px;white-space:nowrap;flex-shrink:0}.span-btn{width:16px;height:18px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;padding:0;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;border-radius:2px;transition:all .12s ease}.span-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-primary, #2563eb)}.span-btn:disabled{opacity:.3;cursor:not-allowed}.span-badge{font-size:.65rem;font-weight:600;color:var(--rpt-color-text, #0f172a);padding:0 3px;white-space:nowrap;-webkit-user-select:none;user-select:none;line-height:1}.card-action-btn{width:20px;height:20px;border:none;background:transparent;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer;color:var(--rpt-color-text-muted, #64748b);transition:all .12s ease;flex-shrink:0}.card-action-btn:hover{background:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.card-action-btn.btn-active-toggle{background:#7c3aed;color:#fff;border-color:#7c3aed}.card-action-btn.btn-active-toggle:hover{background:#6d28d9;color:#fff}.btn-delete:hover{background:#fee2e2;color:#ef4444}.card-body{padding:8px 12px 8px 10px;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box;overflow:hidden}.mock-input-field{display:flex;flex-direction:column;gap:4px;flex:1;height:100%;min-height:0}.mock-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text-muted, #475569);flex-shrink:0}.mock-input-box,.mock-select-box{border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #94a3b8);background:#fff;flex:1;min-height:38px;height:100%;display:flex;align-items:center;justify-content:space-between;box-sizing:border-box}.mock-checkbox-field{display:flex;align-items:center;gap:6px;flex:1;height:100%;min-height:0;padding-top:14px}.mock-check-box{width:18px;height:18px;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:.65rem;color:var(--rpt-color-primary, #2563eb);flex-shrink:0}.mock-btn-wrapper{display:flex;flex:1;height:100%;min-height:38px;align-items:center;justify-content:flex-start;width:100%;min-width:0;box-sizing:border-box}.mock-btn{border-radius:var(--rpt-border-radius, 6px);padding:0 16px;height:36px;font-size:var(--rpt-font-size-base, .875rem);font-weight:500;border:1px solid transparent;cursor:pointer;width:auto;max-width:100%;display:inline-flex;align-items:center;justify-content:center;gap:6px;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:all .15s ease}.mock-btn.mock-btn-full{width:100%}.canvas-component-card.is-narrow .mock-btn{padding:0 6px;font-size:.775rem;width:100%;height:34px}.mock-kpi-field{display:flex;flex-direction:column;justify-content:space-between;flex:1;height:100%;min-height:0}.mock-kpi-header{display:flex;align-items:center;justify-content:space-between}.mock-kpi-value{font-size:1.25rem;font-weight:700;color:var(--rpt-color-text, #0f172a);margin:2px 0}.mock-kpi-footer{display:flex;align-items:center;gap:6px;font-size:.65rem}.mock-kpi-trend{color:#16a34a;font-weight:600}.mock-kpi-sub{color:#64748b}.mock-chart-field{display:flex;flex-direction:column;flex:1;height:100%;min-height:0}.mock-chart-bars{display:flex;align-items:flex-end;justify-content:space-around;gap:8px;flex:1;min-height:36px;padding-top:6px}.mock-chart-bar{width:16%;background:var(--rpt-color-primary, #2563eb);border-radius:3px 3px 0 0;opacity:.85;min-height:10px}.btn-primary{background:var(--rpt-color-primary, #2563eb);color:#fff}.btn-secondary{background:#f1f5f9;color:#0f172a;border:1px solid #cbd5e1}.btn-outline{background:transparent;color:#2563eb;border:1px solid #2563eb}.btn-danger{background:#ef4444;color:#fff}.mock-generic-box{border:1px dashed #cbd5e1;border-radius:4px;padding:8px;font-size:.75rem;text-align:center;color:#64748b}.canvas-drag-placeholder{background:#2563eb0f;border:2px dashed var(--rpt-color-primary, #2563eb);border-radius:6px;min-height:80px;box-sizing:border-box;transition:transform .15s ease}.canvas-drag-preview,::ng-deep .canvas-drag-preview{background:#fff;border:2px solid var(--rpt-color-primary, #2563eb);border-radius:6px;padding:8px 14px;display:inline-flex;align-items:center;gap:8px;font-family:var(--rpt-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif)!important;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);box-shadow:0 12px 24px -4px #00000040;z-index:10000}.preview-title,::ng-deep .preview-title{font-family:inherit!important;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-span,::ng-deep .preview-span{font-family:inherit!important;font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.canvas-empty-state{grid-column:1 / -1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;border:2px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);text-align:center}.empty-icon{font-size:2.5rem;margin-bottom:12px}.canvas-empty-state h3{font-size:1rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-empty-state p{font-size:.8rem;color:var(--rpt-color-text-muted, #64748b);max-width:380px;margin:0}.canvas-grid-preview-box{margin-top:32px;border:1px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);padding:16px;cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-grid-preview-box:hover{border-color:var(--rpt-color-primary, #2563eb);background:#fff}.grid-preview-header{display:flex;align-items:center;justify-content:space-between;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin-bottom:10px}.grid-click-hint{font-size:.7rem;color:var(--rpt-color-primary, #2563eb);font-weight:500}.grid-preview-columns{display:flex;flex-wrap:wrap;gap:6px}.grid-col-pill{display:flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--rpt-color-border, #e2e8f0);border-radius:4px;padding:4px 8px;font-size:.75rem}.col-pill-name{font-weight:600;color:var(--rpt-color-text, #0f172a)}.col-pill-type{font-size:.65rem;color:var(--rpt-color-text-muted, #94a3b8);background:var(--rpt-color-surface, #f1f5f9);padding:1px 4px;border-radius:3px}\n"] }]
|
|
6035
|
+
`, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;height:100%;background-color:#f1f5f9;font-family:var(--rpt-font-family, inherit);box-sizing:border-box}.canvas-wrapper{display:flex;flex-direction:column;height:100%}.canvas-toolbar{display:flex;align-items:center;justify-content:space-between;min-height:46px;padding:6px 20px;background:#fff;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box}.canvas-info{display:flex;align-items:center;gap:8px;color:var(--rpt-color-text-muted, #64748b);font-size:.8125rem}.info-label{color:#64748b}.info-value{font-weight:600;color:var(--rpt-color-text, #0f172a)}.info-divider{color:var(--rpt-color-border, #cbd5e1);margin:0 2px}.canvas-action-btn{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 14px;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;font-size:.8125rem;font-weight:500;color:#1e293b;cursor:pointer;line-height:1;white-space:nowrap;box-shadow:0 1px 2px #0000000a;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-action-btn rpt-icon{color:#64748b;transition:color .15s ease}.canvas-action-btn:hover{background:var(--rpt-color-surface, #f8fafc);border-color:var(--rpt-color-primary, #2563eb);color:var(--rpt-color-primary, #2563eb);box-shadow:0 2px 4px #2563eb14}.canvas-action-btn:hover rpt-icon{color:var(--rpt-color-primary, #2563eb)}.canvas-action-btn:active{transform:translateY(1px)}.canvas-scroll-area{flex:1;overflow-y:auto;padding:16px}.canvas-artboard{width:100%;max-width:1400px;margin:0 auto;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:0 4px 6px -1px #0000000d;min-height:480px;box-sizing:border-box}.canvas-report-header{margin-bottom:24px;padding-bottom:16px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0)}.canvas-report-title{font-size:var(--rpt-font-size-xl, 1.5rem);font-weight:700;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-report-desc{font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #64748b);margin:0}.canvas-grid{display:grid;width:100%;min-height:180px;align-items:start;border-radius:6px;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-component-card{background:#fff;border:1.5px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:var(--rpt-box-shadow, 0 1px 2px rgba(0, 0, 0, .05));box-sizing:border-box;transition:all var(--rpt-transition-speed, .15s) ease;cursor:pointer;position:relative;overflow:hidden;display:flex;flex-direction:column;min-height:96px}.canvas-component-card:hover{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 4px 6px -1px #2563eb1a}.canvas-component-card.is-selected{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb40}.canvas-component-card.is-resizing{-webkit-user-select:none;user-select:none;border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb59;z-index:30;transition:none!important}.resize-handle{position:absolute;z-index:40;touch-action:none;opacity:0;transition:opacity .15s ease}.canvas-component-card.is-selected .resize-handle,.canvas-component-card:hover .resize-handle{opacity:1}.resize-handle.handle-e{top:0;right:0;width:6px;height:100%;cursor:ew-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-e:after{content:\"\";width:3px;height:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-e:hover:after,.canvas-component-card.is-selected .resize-handle.handle-e:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-s{bottom:0;left:0;height:6px;width:100%;cursor:ns-resize;display:flex;align-items:center;justify-content:center}.resize-handle.handle-s:after{content:\"\";height:3px;width:24px;background:#cbd5e1;border-radius:2px;transition:background .15s ease}.resize-handle.handle-s:hover:after,.canvas-component-card.is-selected .resize-handle.handle-s:after{background:var(--rpt-color-primary, #2563eb)}.resize-handle.handle-se{bottom:0;right:0;width:12px;height:12px;cursor:nwse-resize;display:flex;align-items:flex-end;justify-content:flex-end;padding:2px}.resize-handle.handle-se:after{content:\"\";width:5px;height:5px;border-right:2px solid #cbd5e1;border-bottom:2px solid #cbd5e1;transition:border-color .15s ease}.resize-handle.handle-se:hover:after,.canvas-component-card.is-selected .resize-handle.handle-se:after{border-color:var(--rpt-color-primary, #2563eb)}.resize-dimension-tooltip{position:absolute;top:38px;right:8px;background:#0f172ae6;color:#fff;font-size:.7rem;font-weight:600;padding:3px 8px;border-radius:4px;white-space:nowrap;pointer-events:none;z-index:50;box-shadow:0 2px 4px #0003}.card-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 8px;background:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #e2e8f0);min-height:32px;box-sizing:border-box;overflow:hidden}.card-title-group{display:flex;align-items:center;gap:5px;cursor:grab;min-width:0;flex:1;overflow:hidden}.drag-handle-dots{color:var(--rpt-color-text-muted, #94a3b8);font-size:.85rem;letter-spacing:-2px;flex-shrink:0;-webkit-user-select:none;user-select:none}.comp-title{font-size:.75rem;font-weight:600;color:var(--rpt-color-text, #0f172a);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;user-select:none}.card-actions{display:flex;align-items:center;gap:4px;flex-shrink:0;margin-left:auto}.new-row-pill-static{font-size:.65rem;font-weight:600;color:#7c3aed;background:#f5f3ff;border:1px solid #ddd6fe;padding:1px 5px;border-radius:9999px;white-space:nowrap;line-height:1;flex-shrink:0}.span-pill-static{display:inline-flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:600;color:var(--rpt-color-text-muted, #64748b);background:var(--rpt-color-surface, #f1f5f9);border:1px solid var(--rpt-color-border, #e2e8f0);padding:1px 6px;border-radius:9999px;line-height:1.2;white-space:nowrap;-webkit-user-select:none;user-select:none}.card-quick-controls{display:none;align-items:center;gap:3px}.canvas-component-card:hover .span-pill-static,.canvas-component-card.is-selected .span-pill-static,.canvas-component-card:hover .new-row-pill-static,.canvas-component-card.is-selected .new-row-pill-static{display:none}.canvas-component-card:hover .card-quick-controls,.canvas-component-card.is-selected .card-quick-controls{display:inline-flex}.canvas-component-card.is-narrow .card-header{padding:4px 6px;gap:3px}.canvas-component-card.is-narrow:hover .comp-title,.canvas-component-card.is-narrow.is-selected .comp-title,.canvas-component-card.is-narrow:hover .drag-handle-dots,.canvas-component-card.is-narrow.is-selected .drag-handle-dots{display:none}.canvas-component-card.is-narrow .card-quick-controls{gap:2px}.canvas-component-card.is-narrow .span-control-group{height:18px}.canvas-component-card.is-narrow .span-btn{width:14px;height:16px}.canvas-component-card.is-narrow .span-badge{font-size:.6rem;padding:0 2px}.canvas-component-card.is-narrow .card-action-btn{width:18px;height:18px}.canvas-component-card.is-compact:hover .card-action-btn:not(.btn-delete),.canvas-component-card.is-compact.is-selected .card-action-btn:not(.btn-delete){display:none}.span-control-group{display:inline-flex;align-items:center;background:#fff;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;height:20px;padding:0 1px;white-space:nowrap;flex-shrink:0}.span-btn{width:16px;height:18px;display:inline-flex;align-items:center;justify-content:center;border:none;background:transparent;padding:0;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;border-radius:2px;transition:all .12s ease}.span-btn:hover:not(:disabled){background:var(--rpt-color-surface-hover, #f1f5f9);color:var(--rpt-color-primary, #2563eb)}.span-btn:disabled{opacity:.3;cursor:not-allowed}.span-badge{font-size:.65rem;font-weight:600;color:var(--rpt-color-text, #0f172a);padding:0 3px;white-space:nowrap;-webkit-user-select:none;user-select:none;line-height:1}.card-action-btn{width:20px;height:20px;border:none;background:transparent;border-radius:4px;display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer;color:var(--rpt-color-text-muted, #64748b);transition:all .12s ease;flex-shrink:0}.card-action-btn:hover{background:#e2e8f0;color:var(--rpt-color-text, #0f172a)}.card-action-btn.btn-active-toggle{background:#7c3aed;color:#fff;border-color:#7c3aed}.card-action-btn.btn-active-toggle:hover{background:#6d28d9;color:#fff}.btn-delete:hover{background:#fee2e2;color:#ef4444}.card-body{padding:8px 12px 8px 10px;flex:1;display:flex;flex-direction:column;min-height:0;box-sizing:border-box;overflow:hidden}.mock-input-field{display:flex;flex-direction:column;gap:4px;flex:1;height:100%;min-height:0}.mock-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text-muted, #475569);flex-shrink:0}.mock-input-box,.mock-select-box{border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:6px;padding:6px 12px;font-size:var(--rpt-font-size-base, .875rem);color:var(--rpt-color-text-muted, #94a3b8);background:#fff;flex:1;min-height:38px;height:100%;display:flex;align-items:center;justify-content:space-between;box-sizing:border-box}.mock-checkbox-field{display:flex;align-items:center;gap:6px;flex:1;height:100%;min-height:0;padding-top:14px}.mock-check-box{width:18px;height:18px;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:.65rem;color:var(--rpt-color-primary, #2563eb);flex-shrink:0}.mock-btn-wrapper{display:flex;flex:1;height:100%;min-height:38px;align-items:center;justify-content:flex-start;width:100%;min-width:0;box-sizing:border-box}.mock-btn{border-radius:var(--rpt-border-radius, 6px);padding:0 16px;height:36px;font-size:var(--rpt-font-size-base, .875rem);font-weight:500;border:1px solid transparent;cursor:pointer;width:auto;max-width:100%;display:inline-flex;align-items:center;justify-content:center;gap:6px;box-sizing:border-box;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:all .15s ease}.mock-btn.mock-btn-full{width:100%}.canvas-component-card.is-narrow .mock-btn{padding:0 6px;font-size:.775rem;width:100%;height:34px}.mock-kpi-field{display:flex;flex-direction:column;justify-content:space-between;flex:1;height:100%;min-height:0}.mock-kpi-header{display:flex;align-items:center;justify-content:space-between}.mock-kpi-value{font-size:1.25rem;font-weight:700;color:var(--rpt-color-text, #0f172a);margin:2px 0}.mock-kpi-footer{display:flex;align-items:center;gap:6px;font-size:.65rem}.mock-kpi-trend{color:#16a34a;font-weight:600}.mock-kpi-sub{color:#64748b}.mock-chart-field{display:flex;flex-direction:column;flex:1;height:100%;min-height:0}.mock-chart-bars{display:flex;align-items:flex-end;justify-content:space-around;gap:8px;flex:1;min-height:36px;padding-top:6px}.mock-chart-bar{width:16%;background:var(--rpt-color-primary, #2563eb);border-radius:3px 3px 0 0;opacity:.85;min-height:10px}.btn-primary{background:var(--rpt-color-primary, #2563eb);color:#fff}.btn-secondary{background:#f1f5f9;color:#0f172a;border:1px solid #cbd5e1}.btn-outline{background:transparent;color:#2563eb;border:1px solid #2563eb}.btn-danger{background:#ef4444;color:#fff}.mock-generic-box{border:1px dashed #cbd5e1;border-radius:4px;padding:8px;font-size:.75rem;text-align:center;color:#64748b}.canvas-drag-placeholder{background:#2563eb0f;border:2px dashed var(--rpt-color-primary, #2563eb);border-radius:6px;min-height:80px;box-sizing:border-box;transition:transform .15s ease}.canvas-drag-preview,::ng-deep .canvas-drag-preview{background:#fff;border:2px solid var(--rpt-color-primary, #2563eb);border-radius:6px;padding:8px 14px;display:inline-flex;align-items:center;gap:8px;font-family:var(--rpt-font-family, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif)!important;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);box-shadow:0 12px 24px -4px #00000040;z-index:10000}.preview-title,::ng-deep .preview-title{font-family:inherit!important;max-width:160px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.preview-span,::ng-deep .preview-span{font-family:inherit!important;font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.canvas-empty-state{grid-column:1 / -1;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;border:2px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);text-align:center}.empty-icon{font-size:2.5rem;margin-bottom:12px}.canvas-empty-state h3{font-size:1rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin:0 0 6px}.canvas-empty-state p{font-size:.8rem;color:var(--rpt-color-text-muted, #64748b);max-width:380px;margin:0}.canvas-grid-preview-box{margin-top:32px;border:1px dashed var(--rpt-color-border, #cbd5e1);border-radius:8px;background:var(--rpt-color-surface, #f8fafc);padding:16px;cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.canvas-grid-preview-box:hover{border-color:var(--rpt-color-primary, #2563eb);background:#fff}.grid-preview-header{display:flex;align-items:center;justify-content:space-between;font-size:.8rem;font-weight:600;color:var(--rpt-color-text, #0f172a);margin-bottom:10px}.grid-click-hint{font-size:.7rem;color:var(--rpt-color-primary, #2563eb);font-weight:500}.grid-preview-columns{display:flex;flex-wrap:wrap;gap:6px}.grid-col-pill{display:flex;align-items:center;gap:4px;background:#fff;border:1px solid var(--rpt-color-border, #e2e8f0);border-radius:4px;padding:4px 8px;font-size:.75rem}.col-pill-name{font-weight:600;color:var(--rpt-color-text, #0f172a)}.col-pill-type{font-size:.65rem;color:var(--rpt-color-text-muted, #94a3b8);background:var(--rpt-color-surface, #f1f5f9);padding:1px 4px;border-radius:3px}.canvas-actions{display:flex;align-items:center;gap:8px}.btn-grid-add{background:#f0fdf4;border-color:#bbf7d0;color:#16a34a}.btn-grid-add:hover{background:#dcfce7;border-color:#86efac;color:#15803d}.btn-remove-grid{display:inline-flex;align-items:center;justify-content:center;padding:4px;border:none;background:transparent;color:#94a3b8;border-radius:4px;cursor:pointer;transition:all .15s ease}.btn-remove-grid:hover{background:#fee2e2;color:#ef4444}.canvas-add-grid-banner{margin-top:24px;border:2px dashed #cbd5e1;border-radius:8px;background:#fff;padding:16px 20px;display:flex;align-items:center;gap:16px;cursor:pointer;transition:all .15s ease}.canvas-add-grid-banner:hover{border-color:#2563eb;background:#f8fafc;box-shadow:0 2px 8px #2563eb14}.add-grid-icon{width:40px;height:40px;border-radius:8px;background:#eff6ff;color:#2563eb;display:flex;align-items:center;justify-content:center;flex-shrink:0}.add-grid-text{display:flex;flex-direction:column;gap:2px;flex:1}.add-grid-title{font-size:.875rem;font-weight:600;color:#0f172a}.add-grid-sub{font-size:.75rem;color:#64748b}.btn-banner-add{padding:6px 14px;font-size:.75rem;font-weight:600;color:#2563eb;background:#eff6ff;border:1px solid #bfdbfe;border-radius:6px;cursor:pointer;white-space:nowrap;transition:all .15s ease}.canvas-add-grid-banner:hover .btn-banner-add{background:#2563eb;color:#fff;border-color:#2563eb}\n"] }]
|
|
5845
6036
|
}], propDecorators: { onEscape: [{
|
|
5846
6037
|
type: HostListener,
|
|
5847
6038
|
args: ['document:keydown.escape']
|
|
@@ -6506,6 +6697,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
6506
6697
|
|
|
6507
6698
|
class PropertyEditorGridComponent {
|
|
6508
6699
|
grid = input();
|
|
6700
|
+
addGrid = output();
|
|
6701
|
+
removeGrid = output();
|
|
6509
6702
|
addColumn = output();
|
|
6510
6703
|
removeColumn = output();
|
|
6511
6704
|
updateColumn = output();
|
|
@@ -6517,8 +6710,21 @@ class PropertyEditorGridComponent {
|
|
|
6517
6710
|
this.updateColumn.emit({ index, field, value });
|
|
6518
6711
|
}
|
|
6519
6712
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PropertyEditorGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6520
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PropertyEditorGridComponent, isStandalone: true, selector: "rpt-property-editor-grid", inputs: { grid: { classPropertyName: "grid", publicName: "grid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addColumn: "addColumn", removeColumn: "removeColumn", updateColumn: "updateColumn", updateOption: "updateOption" }, ngImport: i0, template: `
|
|
6521
|
-
|
|
6713
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: PropertyEditorGridComponent, isStandalone: true, selector: "rpt-property-editor-grid", inputs: { grid: { classPropertyName: "grid", publicName: "grid", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { addGrid: "addGrid", removeGrid: "removeGrid", addColumn: "addColumn", removeColumn: "removeColumn", updateColumn: "updateColumn", updateOption: "updateOption" }, ngImport: i0, template: `
|
|
6714
|
+
@if (!grid()) {
|
|
6715
|
+
<div class="empty-grid-card">
|
|
6716
|
+
<div class="empty-grid-icon">
|
|
6717
|
+
<rpt-icon name="table" [size]="28" />
|
|
6718
|
+
</div>
|
|
6719
|
+
<h4 class="empty-grid-title">No Result Grid Attached</h4>
|
|
6720
|
+
<p class="empty-grid-desc">Attach an interactive Result Data Grid (or UltraGrid) to this report definition to render queries and stored procedure results.</p>
|
|
6721
|
+
<button type="button" class="btn-create-grid-action" (click)="addGrid.emit()">
|
|
6722
|
+
<rpt-icon name="plus" [size]="14" />
|
|
6723
|
+
<span>+ Add Result Grid</span>
|
|
6724
|
+
</button>
|
|
6725
|
+
</div>
|
|
6726
|
+
} @else {
|
|
6727
|
+
<div class="props-form">
|
|
6522
6728
|
<div class="property-group">
|
|
6523
6729
|
<div class="group-header-with-btn">
|
|
6524
6730
|
<span class="group-title">Columns ({{ columns().length }})</span>
|
|
@@ -6729,13 +6935,35 @@ class PropertyEditorGridComponent {
|
|
|
6729
6935
|
</label>
|
|
6730
6936
|
</div>
|
|
6731
6937
|
</div>
|
|
6938
|
+
|
|
6939
|
+
<!-- Remove Grid Action -->
|
|
6940
|
+
<div class="grid-danger-zone">
|
|
6941
|
+
<button type="button" class="btn-remove-grid-action" (click)="removeGrid.emit()">
|
|
6942
|
+
<rpt-icon name="trash" [size]="13" />
|
|
6943
|
+
<span>Remove Grid from Report</span>
|
|
6944
|
+
</button>
|
|
6945
|
+
</div>
|
|
6732
6946
|
</div>
|
|
6733
|
-
|
|
6947
|
+
}
|
|
6948
|
+
`, isInline: true, styles: [".property-group{display:flex;flex-direction:column;gap:12px}.group-title{font-size:.7rem;font-weight:700;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);padding-bottom:4px}.field-row{display:flex;flex-direction:column;gap:4px}.field-label-row{display:flex;align-items:center;justify-content:space-between}.field-badge-val{font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.field-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text, #0f172a)}.field-input,.field-select,.field-textarea{width:100%;box-sizing:border-box;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);padding:6px 10px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text, #0f172a);background:#fff;outline:none;transition:all var(--rpt-transition-speed, .15s) ease}.field-select{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 10px center;background-size:13px 13px;padding-right:28px;cursor:pointer}.field-input:focus,.field-select:focus,.field-textarea:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.checkbox-toggle{display:inline-flex;align-items:center;gap:8px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text, #0f172a);cursor:pointer}.preset-pill-group{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.preset-pill{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-size:.65rem;font-weight:600;color:#475569;cursor:pointer;transition:all .12s ease}.preset-pill:hover{background:#e2e8f0;color:#0f172a;border-color:#cbd5e1}.preset-pill-active{background:var(--rpt-color-primary, #2563eb)!important;color:#fff!important;border-color:var(--rpt-color-primary, #2563eb)!important}.preset-pill-reset{color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border-color:#bfdbfe}.preset-pill-reset:hover{background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}\n", ".empty-grid-card{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 16px;text-align:center;border:2px dashed #cbd5e1;border-radius:8px;background:#fff;margin:10px 0}.empty-grid-icon{width:48px;height:48px;border-radius:10px;background:#eff6ff;color:#2563eb;display:flex;align-items:center;justify-content:center;margin-bottom:12px}.empty-grid-title{font-size:.95rem;font-weight:700;color:#0f172a;margin:0 0 6px}.empty-grid-desc{font-size:.775rem;color:#64748b;margin:0 0 18px;line-height:1.4;max-width:280px}.btn-create-grid-action{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:#2563eb;color:#fff;font-size:.775rem;font-weight:600;border:none;border-radius:6px;cursor:pointer;box-shadow:0 2px 4px #2563eb33;transition:all .15s ease}.btn-create-grid-action:hover{background:#1d4ed8;box-shadow:0 4px 8px #2563eb40}.grid-danger-zone{margin-top:10px;padding-top:16px;border-top:1px dashed #e2e8f0;display:flex;justify-content:center}.btn-remove-grid-action{display:inline-flex;align-items:center;gap:6px;background:#fee2e2;border:1px solid #fecaca;color:#dc2626;font-size:.75rem;font-weight:600;padding:6px 12px;border-radius:6px;cursor:pointer;transition:all .15s ease}.btn-remove-grid-action:hover{background:#fecaca;border-color:#f87171;color:#b91c1c}.props-form{display:flex;flex-direction:column;gap:20px}.group-header-with-btn{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);padding-bottom:8px;margin-bottom:4px}.btn-add-col{display:inline-flex;align-items:center;gap:5px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:4px;padding:4px 10px;font-size:.725rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);cursor:pointer;transition:all .15s ease}.btn-add-col:hover{background:var(--rpt-color-primary, #2563eb);color:#fff;border-color:var(--rpt-color-primary, #2563eb)}.columns-editor-list{display:flex;flex-direction:column;gap:10px}.col-edit-card{background:#fff;border:1.5px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:var(--rpt-box-shadow, 0 1px 2px rgba(0, 0, 0, .05));box-sizing:border-box;transition:all var(--rpt-transition-speed, .15s) ease;position:relative;overflow:hidden;display:flex;flex-direction:column}.col-edit-card:hover{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 4px 6px -1px #2563eb1a}.col-card-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 8px;background:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #e2e8f0);min-height:32px;box-sizing:border-box}.col-header-title-group{display:flex;align-items:center;gap:5px;min-width:0;flex:1}.col-drag-dots{color:#94a3b8;font-size:.8rem;cursor:grab;-webkit-user-select:none;user-select:none;line-height:1;padding-left:2px}.col-idx-badge{font-size:.65rem;font-weight:700;color:#64748b;background:#e2e8f0;padding:1px 5px;border-radius:3px;letter-spacing:.02em}.col-title-input{flex:1;border:1px solid transparent;background:transparent;font-size:.75rem;font-weight:600;color:var(--rpt-color-text, #0f172a);padding:2px 6px;border-radius:4px;outline:none;transition:all .15s ease}.col-title-input:hover{border-color:#cbd5e1;background:#fff}.col-title-input:focus{border-color:var(--rpt-color-primary, #2563eb);background:#fff;box-shadow:0 0 0 2px #2563eb26}.col-card-actions{display:flex;align-items:center;gap:4px}.col-type-pill{font-size:.625rem;font-weight:700;color:#1e40af;background:#dbeafe;border:1px solid #bfdbfe;padding:1px 5px;border-radius:3px;text-transform:uppercase;letter-spacing:.04em}.col-action-btn{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;padding:3px;border-radius:4px;transition:all .15s ease}.col-action-btn.btn-delete:hover{color:var(--rpt-color-danger, #ef4444);background:#fee2e2}.col-card-body{padding:8px 10px;display:flex;flex-direction:column;gap:6px;background:#fff}.col-edit-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 8px}.col-field-item{display:flex;flex-direction:column;gap:2px;min-width:0}.mini-label{font-size:.625rem;font-weight:600;color:#64748b;letter-spacing:.02em}.col-mini-input,.col-mini-select{width:100%;box-sizing:border-box;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:3px;padding:3px 5px;font-size:.7rem;color:var(--rpt-color-text, #0f172a);background:#fff;outline:none;transition:all .12s ease}.col-mini-select{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 4px center;background-size:10px 10px;padding-right:16px;cursor:pointer}.col-mini-input:focus,.col-mini-select:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb26}.col-card-footer{display:flex;align-items:center;justify-content:flex-end;padding-top:4px;border-top:1px dashed #e2e8f0;margin-top:2px}.col-checkbox-toggle{display:inline-flex;align-items:center;gap:5px;font-size:.675rem;font-weight:500;color:#475569;cursor:pointer;-webkit-user-select:none;user-select:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6734
6949
|
}
|
|
6735
6950
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PropertyEditorGridComponent, decorators: [{
|
|
6736
6951
|
type: Component,
|
|
6737
6952
|
args: [{ selector: 'rpt-property-editor-grid', standalone: true, imports: [CommonModule, FormsModule, RptIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
6738
|
-
|
|
6953
|
+
@if (!grid()) {
|
|
6954
|
+
<div class="empty-grid-card">
|
|
6955
|
+
<div class="empty-grid-icon">
|
|
6956
|
+
<rpt-icon name="table" [size]="28" />
|
|
6957
|
+
</div>
|
|
6958
|
+
<h4 class="empty-grid-title">No Result Grid Attached</h4>
|
|
6959
|
+
<p class="empty-grid-desc">Attach an interactive Result Data Grid (or UltraGrid) to this report definition to render queries and stored procedure results.</p>
|
|
6960
|
+
<button type="button" class="btn-create-grid-action" (click)="addGrid.emit()">
|
|
6961
|
+
<rpt-icon name="plus" [size]="14" />
|
|
6962
|
+
<span>+ Add Result Grid</span>
|
|
6963
|
+
</button>
|
|
6964
|
+
</div>
|
|
6965
|
+
} @else {
|
|
6966
|
+
<div class="props-form">
|
|
6739
6967
|
<div class="property-group">
|
|
6740
6968
|
<div class="group-header-with-btn">
|
|
6741
6969
|
<span class="group-title">Columns ({{ columns().length }})</span>
|
|
@@ -6946,8 +7174,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
6946
7174
|
</label>
|
|
6947
7175
|
</div>
|
|
6948
7176
|
</div>
|
|
7177
|
+
|
|
7178
|
+
<!-- Remove Grid Action -->
|
|
7179
|
+
<div class="grid-danger-zone">
|
|
7180
|
+
<button type="button" class="btn-remove-grid-action" (click)="removeGrid.emit()">
|
|
7181
|
+
<rpt-icon name="trash" [size]="13" />
|
|
7182
|
+
<span>Remove Grid from Report</span>
|
|
7183
|
+
</button>
|
|
7184
|
+
</div>
|
|
6949
7185
|
</div>
|
|
6950
|
-
|
|
7186
|
+
}
|
|
7187
|
+
`, styles: [".property-group{display:flex;flex-direction:column;gap:12px}.group-title{font-size:.7rem;font-weight:700;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);padding-bottom:4px}.field-row{display:flex;flex-direction:column;gap:4px}.field-label-row{display:flex;align-items:center;justify-content:space-between}.field-badge-val{font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px}.field-label{font-size:.7rem;font-weight:600;color:var(--rpt-color-text, #0f172a)}.field-input,.field-select,.field-textarea{width:100%;box-sizing:border-box;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);padding:6px 10px;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text, #0f172a);background:#fff;outline:none;transition:all var(--rpt-transition-speed, .15s) ease}.field-select{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 10px center;background-size:13px 13px;padding-right:28px;cursor:pointer}.field-input:focus,.field-select:focus,.field-textarea:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:var(--rpt-box-shadow-focus, 0 0 0 3px rgba(37, 99, 235, .25))}.checkbox-toggle{display:inline-flex;align-items:center;gap:8px;font-size:.75rem;font-weight:500;color:var(--rpt-color-text, #0f172a);cursor:pointer}.preset-pill-group{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}.preset-pill{background:#f1f5f9;border:1px solid #e2e8f0;border-radius:4px;padding:2px 8px;font-size:.65rem;font-weight:600;color:#475569;cursor:pointer;transition:all .12s ease}.preset-pill:hover{background:#e2e8f0;color:#0f172a;border-color:#cbd5e1}.preset-pill-active{background:var(--rpt-color-primary, #2563eb)!important;color:#fff!important;border-color:var(--rpt-color-primary, #2563eb)!important}.preset-pill-reset{color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border-color:#bfdbfe}.preset-pill-reset:hover{background:#dbeafe;color:#1d4ed8;border-color:#93c5fd}\n", ".empty-grid-card{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 16px;text-align:center;border:2px dashed #cbd5e1;border-radius:8px;background:#fff;margin:10px 0}.empty-grid-icon{width:48px;height:48px;border-radius:10px;background:#eff6ff;color:#2563eb;display:flex;align-items:center;justify-content:center;margin-bottom:12px}.empty-grid-title{font-size:.95rem;font-weight:700;color:#0f172a;margin:0 0 6px}.empty-grid-desc{font-size:.775rem;color:#64748b;margin:0 0 18px;line-height:1.4;max-width:280px}.btn-create-grid-action{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:#2563eb;color:#fff;font-size:.775rem;font-weight:600;border:none;border-radius:6px;cursor:pointer;box-shadow:0 2px 4px #2563eb33;transition:all .15s ease}.btn-create-grid-action:hover{background:#1d4ed8;box-shadow:0 4px 8px #2563eb40}.grid-danger-zone{margin-top:10px;padding-top:16px;border-top:1px dashed #e2e8f0;display:flex;justify-content:center}.btn-remove-grid-action{display:inline-flex;align-items:center;gap:6px;background:#fee2e2;border:1px solid #fecaca;color:#dc2626;font-size:.75rem;font-weight:600;padding:6px 12px;border-radius:6px;cursor:pointer;transition:all .15s ease}.btn-remove-grid-action:hover{background:#fecaca;border-color:#f87171;color:#b91c1c}.props-form{display:flex;flex-direction:column;gap:20px}.group-header-with-btn{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);padding-bottom:8px;margin-bottom:4px}.btn-add-col{display:inline-flex;align-items:center;gap:5px;background:#eff6ff;border:1px solid #bfdbfe;border-radius:4px;padding:4px 10px;font-size:.725rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);cursor:pointer;transition:all .15s ease}.btn-add-col:hover{background:var(--rpt-color-primary, #2563eb);color:#fff;border-color:var(--rpt-color-primary, #2563eb)}.columns-editor-list{display:flex;flex-direction:column;gap:10px}.col-edit-card{background:#fff;border:1.5px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius, 6px);box-shadow:var(--rpt-box-shadow, 0 1px 2px rgba(0, 0, 0, .05));box-sizing:border-box;transition:all var(--rpt-transition-speed, .15s) ease;position:relative;overflow:hidden;display:flex;flex-direction:column}.col-edit-card:hover{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 4px 6px -1px #2563eb1a}.col-card-header{display:flex;align-items:center;justify-content:space-between;gap:6px;padding:5px 8px;background:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #e2e8f0);min-height:32px;box-sizing:border-box}.col-header-title-group{display:flex;align-items:center;gap:5px;min-width:0;flex:1}.col-drag-dots{color:#94a3b8;font-size:.8rem;cursor:grab;-webkit-user-select:none;user-select:none;line-height:1;padding-left:2px}.col-idx-badge{font-size:.65rem;font-weight:700;color:#64748b;background:#e2e8f0;padding:1px 5px;border-radius:3px;letter-spacing:.02em}.col-title-input{flex:1;border:1px solid transparent;background:transparent;font-size:.75rem;font-weight:600;color:var(--rpt-color-text, #0f172a);padding:2px 6px;border-radius:4px;outline:none;transition:all .15s ease}.col-title-input:hover{border-color:#cbd5e1;background:#fff}.col-title-input:focus{border-color:var(--rpt-color-primary, #2563eb);background:#fff;box-shadow:0 0 0 2px #2563eb26}.col-card-actions{display:flex;align-items:center;gap:4px}.col-type-pill{font-size:.625rem;font-weight:700;color:#1e40af;background:#dbeafe;border:1px solid #bfdbfe;padding:1px 5px;border-radius:3px;text-transform:uppercase;letter-spacing:.04em}.col-action-btn{display:inline-flex;align-items:center;justify-content:center;background:none;border:none;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;padding:3px;border-radius:4px;transition:all .15s ease}.col-action-btn.btn-delete:hover{color:var(--rpt-color-danger, #ef4444);background:#fee2e2}.col-card-body{padding:8px 10px;display:flex;flex-direction:column;gap:6px;background:#fff}.col-edit-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 8px}.col-field-item{display:flex;flex-direction:column;gap:2px;min-width:0}.mini-label{font-size:.625rem;font-weight:600;color:#64748b;letter-spacing:.02em}.col-mini-input,.col-mini-select{width:100%;box-sizing:border-box;border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:3px;padding:3px 5px;font-size:.7rem;color:var(--rpt-color-text, #0f172a);background:#fff;outline:none;transition:all .12s ease}.col-mini-select{appearance:none;-webkit-appearance:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2364748b' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E\");background-repeat:no-repeat;background-position:right 4px center;background-size:10px 10px;padding-right:16px;cursor:pointer}.col-mini-input:focus,.col-mini-select:focus{border-color:var(--rpt-color-primary, #2563eb);box-shadow:0 0 0 2px #2563eb26}.col-card-footer{display:flex;align-items:center;justify-content:flex-end;padding-top:4px;border-top:1px dashed #e2e8f0;margin-top:2px}.col-checkbox-toggle{display:inline-flex;align-items:center;gap:5px;font-size:.675rem;font-weight:500;color:#475569;cursor:pointer;-webkit-user-select:none;user-select:none}\n"] }]
|
|
6951
7188
|
}] });
|
|
6952
7189
|
|
|
6953
7190
|
class PropertyEditorReportComponent {
|
|
@@ -8584,6 +8821,26 @@ class PropertyEditorComponent {
|
|
|
8584
8821
|
layout: { ...currentLayout, [key]: value },
|
|
8585
8822
|
});
|
|
8586
8823
|
}
|
|
8824
|
+
addResultGrid() {
|
|
8825
|
+
const existingDs = this.definition().dataSources[0];
|
|
8826
|
+
const defaultGrid = {
|
|
8827
|
+
dataSourceId: existingDs?.id ?? 'default',
|
|
8828
|
+
columns: [
|
|
8829
|
+
{ field: 'id', label: 'ID', dataType: 'number', visible: true, sortable: true },
|
|
8830
|
+
{ field: 'name', label: 'Name', dataType: 'string', visible: true, sortable: true },
|
|
8831
|
+
],
|
|
8832
|
+
options: {
|
|
8833
|
+
pagination: true,
|
|
8834
|
+
pageSize: 25,
|
|
8835
|
+
showRowNumbers: true,
|
|
8836
|
+
showFooter: true,
|
|
8837
|
+
},
|
|
8838
|
+
};
|
|
8839
|
+
this.designerState.updateGridSettings(defaultGrid);
|
|
8840
|
+
}
|
|
8841
|
+
removeResultGrid() {
|
|
8842
|
+
this.designerState.updateGridSettings(undefined);
|
|
8843
|
+
}
|
|
8587
8844
|
addColumn() {
|
|
8588
8845
|
const current = this.definition().grid ?? {
|
|
8589
8846
|
dataSourceId: 'default',
|
|
@@ -8871,6 +9128,8 @@ class PropertyEditorComponent {
|
|
|
8871
9128
|
@if (activeTab() === 'grid') {
|
|
8872
9129
|
<rpt-property-editor-grid
|
|
8873
9130
|
[grid]="definition().grid"
|
|
9131
|
+
(addGrid)="addResultGrid()"
|
|
9132
|
+
(removeGrid)="removeResultGrid()"
|
|
8874
9133
|
(addColumn)="addColumn()"
|
|
8875
9134
|
(removeColumn)="removeColumn($event)"
|
|
8876
9135
|
(updateColumn)="updateColumn($event.index, $event.field, $event.value)"
|
|
@@ -8879,7 +9138,7 @@ class PropertyEditorComponent {
|
|
|
8879
9138
|
}
|
|
8880
9139
|
</div>
|
|
8881
9140
|
</div>
|
|
8882
|
-
`, isInline: true, styles: [":host{display:block;height:100%;background:#fff;border-left:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.editor-container{display:flex;flex-direction:column;height:100%}.editor-tabs{display:flex;flex-shrink:0;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc)}.tab-btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:12px 8px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text-muted, #64748b);background:transparent;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.tab-btn:hover:not(:disabled){color:var(--rpt-color-text, #0f172a)}.tab-btn.active{color:var(--rpt-color-primary, #2563eb);border-bottom-color:var(--rpt-color-primary, #2563eb);background:#fff}.tab-btn:disabled{opacity:.4;cursor:not-allowed}.editor-body{flex:1;overflow-y:auto;padding:12px 14px}.component-sections-wrapper{display:flex;flex-direction:column;gap:12px}.comp-badge-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--rpt-color-surface, #f8fafc);border-radius:6px;border:1px solid var(--rpt-color-border, #e2e8f0)}.badge-title{display:flex;align-items:center}.badge-type{font-size:.75rem;font-weight:700;color:var(--rpt-color-primary, #2563eb);text-transform:uppercase;margin-right:8px}.badge-id{font-size:.7rem;color:var(--rpt-color-text-muted, #94a3b8);font-family:monospace}.btn-deselect{background:none;border:none;display:flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;padding:3px;border-radius:4px;transition:all .15s ease}.btn-deselect:hover{color:var(--rpt-color-danger, #ef4444);background:#fee2e2}.property-accordion{display:flex;flex-direction:column;gap:10px}.accordion-item{border:1px solid var(--rpt-color-border, #e2e8f0);border-radius:6px;background:#fff;overflow:hidden;transition:all .15s ease}.accordion-item.is-expanded{border-color:#cbd5e1;box-shadow:0 1px 3px #0000000a}.accordion-header{width:100%;display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:var(--rpt-color-surface, #f8fafc);border:none;cursor:pointer;text-align:left;-webkit-user-select:none;user-select:none;transition:background .15s ease}.accordion-header:hover{background:#f1f5f9}.accordion-item.is-expanded .accordion-header{background:#f8fafc;border-bottom:1px solid var(--rpt-color-border, #e2e8f0)}.header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.header-title{font-size:.72rem;font-weight:700;color:var(--rpt-color-text, #0f172a);text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.header-badge{font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}.header-right{display:flex;align-items:center;color:var(--rpt-color-text-muted, #64748b);margin-left:8px}.accordion-chevron{transition:transform .2s ease}.accordion-item.is-expanded .accordion-chevron{transform:rotate(180deg)}.accordion-content{padding:12px;display:flex;flex-direction:column;gap:12px}::ng-deep .accordion-content .group-title{display:none}::ng-deep .accordion-content .comp-badge-header{display:none}.empty-selection{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;box-sizing:border-box}.empty-icon-wrap{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;background:#f1f5f9;margin-bottom:16px;box-shadow:0 1px 3px #0000000a}.empty-text{font-size:.8125rem;line-height:1.5;max-width:220px;margin:0;color:var(--rpt-color-text-muted, #64748b)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }, { kind: "component", type: PropertyEditorGeneralComponent, selector: "rpt-property-editor-general", inputs: ["comp", "propertySchema"], outputs: ["update", "updateProperty", "deselect"] }, { kind: "component", type: PropertyEditorLayoutComponent, selector: "rpt-property-editor-layout", inputs: ["comp", "maxColumns"], outputs: ["updateLayout", "updateHeight", "resetDimensions"] }, { kind: "component", type: PropertyEditorValidationComponent, selector: "rpt-property-editor-validation", inputs: ["comp"], outputs: ["updateValidation"] }, { kind: "component", type: PropertyEditorGridComponent, selector: "rpt-property-editor-grid", inputs: ["grid"], outputs: ["addColumn", "removeColumn", "updateColumn", "updateOption"] }, { kind: "component", type: PropertyEditorReportComponent, selector: "rpt-property-editor-report", inputs: ["definition"], outputs: ["updateReport", "updateLayout"] }, { kind: "component", type: PropertyEditorDatasourceComponent, selector: "rpt-property-editor-datasource", inputs: ["comp", "allComponents"], outputs: ["updateDataSource", "updateProperty"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
9141
|
+
`, isInline: true, styles: [":host{display:block;height:100%;background:#fff;border-left:1px solid var(--rpt-color-border, #cbd5e1);box-sizing:border-box;font-family:var(--rpt-font-family, inherit)}.editor-container{display:flex;flex-direction:column;height:100%}.editor-tabs{display:flex;flex-shrink:0;border-bottom:1px solid var(--rpt-color-border, #cbd5e1);background:var(--rpt-color-surface, #f8fafc)}.tab-btn{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:12px 8px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text-muted, #64748b);background:transparent;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.tab-btn:hover:not(:disabled){color:var(--rpt-color-text, #0f172a)}.tab-btn.active{color:var(--rpt-color-primary, #2563eb);border-bottom-color:var(--rpt-color-primary, #2563eb);background:#fff}.tab-btn:disabled{opacity:.4;cursor:not-allowed}.editor-body{flex:1;overflow-y:auto;padding:12px 14px}.component-sections-wrapper{display:flex;flex-direction:column;gap:12px}.comp-badge-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:var(--rpt-color-surface, #f8fafc);border-radius:6px;border:1px solid var(--rpt-color-border, #e2e8f0)}.badge-title{display:flex;align-items:center}.badge-type{font-size:.75rem;font-weight:700;color:var(--rpt-color-primary, #2563eb);text-transform:uppercase;margin-right:8px}.badge-id{font-size:.7rem;color:var(--rpt-color-text-muted, #94a3b8);font-family:monospace}.btn-deselect{background:none;border:none;display:flex;align-items:center;justify-content:center;color:var(--rpt-color-text-muted, #64748b);cursor:pointer;padding:3px;border-radius:4px;transition:all .15s ease}.btn-deselect:hover{color:var(--rpt-color-danger, #ef4444);background:#fee2e2}.property-accordion{display:flex;flex-direction:column;gap:10px}.accordion-item{border:1px solid var(--rpt-color-border, #e2e8f0);border-radius:6px;background:#fff;overflow:hidden;transition:all .15s ease}.accordion-item.is-expanded{border-color:#cbd5e1;box-shadow:0 1px 3px #0000000a}.accordion-header{width:100%;display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:var(--rpt-color-surface, #f8fafc);border:none;cursor:pointer;text-align:left;-webkit-user-select:none;user-select:none;transition:background .15s ease}.accordion-header:hover{background:#f1f5f9}.accordion-item.is-expanded .accordion-header{background:#f8fafc;border-bottom:1px solid var(--rpt-color-border, #e2e8f0)}.header-left{display:flex;align-items:center;gap:8px;min-width:0;flex:1}.header-title{font-size:.72rem;font-weight:700;color:var(--rpt-color-text, #0f172a);text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.header-badge{font-size:.65rem;font-weight:600;color:var(--rpt-color-primary, #2563eb);background:#eff6ff;border:1px solid #bfdbfe;padding:1px 6px;border-radius:9999px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}.header-right{display:flex;align-items:center;color:var(--rpt-color-text-muted, #64748b);margin-left:8px}.accordion-chevron{transition:transform .2s ease}.accordion-item.is-expanded .accordion-chevron{transform:rotate(180deg)}.accordion-content{padding:12px;display:flex;flex-direction:column;gap:12px}::ng-deep .accordion-content .group-title{display:none}::ng-deep .accordion-content .comp-badge-header{display:none}.empty-selection{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;text-align:center;box-sizing:border-box}.empty-icon-wrap{display:inline-flex;align-items:center;justify-content:center;width:52px;height:52px;border-radius:50%;background:#f1f5f9;margin-bottom:16px;box-shadow:0 1px 3px #0000000a}.empty-text{font-size:.8125rem;line-height:1.5;max-width:220px;margin:0;color:var(--rpt-color-text-muted, #64748b)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: RptIconComponent, selector: "rpt-icon", inputs: ["name", "size", "color", "strokeWidth"] }, { kind: "component", type: PropertyEditorGeneralComponent, selector: "rpt-property-editor-general", inputs: ["comp", "propertySchema"], outputs: ["update", "updateProperty", "deselect"] }, { kind: "component", type: PropertyEditorLayoutComponent, selector: "rpt-property-editor-layout", inputs: ["comp", "maxColumns"], outputs: ["updateLayout", "updateHeight", "resetDimensions"] }, { kind: "component", type: PropertyEditorValidationComponent, selector: "rpt-property-editor-validation", inputs: ["comp"], outputs: ["updateValidation"] }, { kind: "component", type: PropertyEditorGridComponent, selector: "rpt-property-editor-grid", inputs: ["grid"], outputs: ["addGrid", "removeGrid", "addColumn", "removeColumn", "updateColumn", "updateOption"] }, { kind: "component", type: PropertyEditorReportComponent, selector: "rpt-property-editor-report", inputs: ["definition"], outputs: ["updateReport", "updateLayout"] }, { kind: "component", type: PropertyEditorDatasourceComponent, selector: "rpt-property-editor-datasource", inputs: ["comp", "allComponents"], outputs: ["updateDataSource", "updateProperty"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
8883
9142
|
}
|
|
8884
9143
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PropertyEditorComponent, decorators: [{
|
|
8885
9144
|
type: Component,
|
|
@@ -9089,6 +9348,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
9089
9348
|
@if (activeTab() === 'grid') {
|
|
9090
9349
|
<rpt-property-editor-grid
|
|
9091
9350
|
[grid]="definition().grid"
|
|
9351
|
+
(addGrid)="addResultGrid()"
|
|
9352
|
+
(removeGrid)="removeResultGrid()"
|
|
9092
9353
|
(addColumn)="addColumn()"
|
|
9093
9354
|
(removeColumn)="removeColumn($event)"
|
|
9094
9355
|
(updateColumn)="updateColumn($event.index, $event.field, $event.value)"
|