@alaarab/ogrid-angular 2.5.9 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/components/base-column-chooser.component.js +77 -0
- package/dist/esm/components/base-column-header-filter.component.js +267 -0
- package/dist/esm/components/base-column-header-menu.component.js +80 -0
- package/dist/esm/components/base-datagrid-table.component.js +768 -0
- package/dist/esm/components/base-inline-cell-editor.component.js +380 -0
- package/dist/esm/components/base-ogrid.component.js +36 -0
- package/dist/esm/components/base-pagination-controls.component.js +68 -0
- package/dist/esm/components/base-popover-cell-editor.component.js +122 -0
- package/dist/esm/components/empty-state.component.js +68 -0
- package/dist/esm/components/formula-bar.component.js +99 -0
- package/dist/esm/components/formula-ref-overlay.component.js +115 -0
- package/dist/esm/components/grid-context-menu.component.js +197 -0
- package/dist/esm/components/inline-cell-editor-template.js +134 -0
- package/dist/esm/components/marching-ants-overlay.component.js +177 -0
- package/dist/esm/components/ogrid-layout.component.js +302 -0
- package/dist/esm/components/sheet-tabs.component.js +83 -0
- package/dist/esm/components/sidebar.component.js +431 -0
- package/dist/esm/components/status-bar.component.js +92 -0
- package/dist/esm/index.js +39 -819
- package/dist/esm/services/column-reorder.service.js +176 -0
- package/dist/esm/services/datagrid-editing.service.js +59 -0
- package/dist/esm/services/datagrid-interaction.service.js +744 -0
- package/dist/esm/services/datagrid-layout.service.js +157 -0
- package/dist/esm/services/datagrid-state.service.js +636 -0
- package/dist/esm/services/formula-engine.service.js +223 -0
- package/dist/esm/services/ogrid.service.js +1094 -0
- package/dist/esm/services/virtual-scroll.service.js +114 -0
- package/dist/esm/styles/ogrid-theme-vars.js +112 -0
- package/dist/esm/types/columnTypes.js +1 -0
- package/dist/esm/types/dataGridTypes.js +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/utils/dataGridViewModel.js +6 -0
- package/dist/esm/utils/debounce.js +68 -0
- package/dist/esm/utils/index.js +8 -0
- package/dist/esm/utils/latestRef.js +41 -0
- package/dist/types/components/base-column-chooser.component.d.ts +3 -0
- package/dist/types/components/base-column-header-filter.component.d.ts +3 -0
- package/dist/types/components/base-column-header-menu.component.d.ts +3 -0
- package/dist/types/components/base-datagrid-table.component.d.ts +3 -0
- package/dist/types/components/base-inline-cell-editor.component.d.ts +7 -0
- package/dist/types/components/base-ogrid.component.d.ts +3 -0
- package/dist/types/components/base-pagination-controls.component.d.ts +3 -0
- package/dist/types/components/base-popover-cell-editor.component.d.ts +3 -0
- package/dist/types/components/empty-state.component.d.ts +3 -0
- package/dist/types/components/formula-bar.component.d.ts +3 -8
- package/dist/types/components/formula-ref-overlay.component.d.ts +3 -6
- package/dist/types/components/grid-context-menu.component.d.ts +3 -0
- package/dist/types/components/inline-cell-editor-template.d.ts +2 -2
- package/dist/types/components/marching-ants-overlay.component.d.ts +3 -0
- package/dist/types/components/ogrid-layout.component.d.ts +3 -0
- package/dist/types/components/sheet-tabs.component.d.ts +3 -8
- package/dist/types/components/sidebar.component.d.ts +3 -0
- package/dist/types/components/status-bar.component.d.ts +3 -0
- package/dist/types/services/column-reorder.service.d.ts +3 -0
- package/dist/types/services/datagrid-interaction.service.d.ts +1 -0
- package/dist/types/services/datagrid-state.service.d.ts +5 -0
- package/dist/types/services/formula-engine.service.d.ts +3 -9
- package/dist/types/services/ogrid.service.d.ts +8 -2
- package/dist/types/services/virtual-scroll.service.d.ts +3 -0
- package/package.json +4 -3
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { Component, Input, signal, DestroyRef, inject, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { measureRange, injectGlobalStyles } from '@alaarab/ogrid-core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
function MarchingAntsOverlayComponent_Conditional_0_Template(rf, ctx) { if (rf & 1) {
|
|
5
|
+
i0.ɵɵnamespaceSVG();
|
|
6
|
+
i0.ɵɵdomElementStart(0, "svg", 2);
|
|
7
|
+
i0.ɵɵdomElement(1, "rect", 3);
|
|
8
|
+
i0.ɵɵdomElementEnd();
|
|
9
|
+
} if (rf & 2) {
|
|
10
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
11
|
+
i0.ɵɵstyleProp("top", ctx_r0.selRect().top, "px")("left", ctx_r0.selRect().left, "px")("width", ctx_r0.selRect().width, "px")("height", ctx_r0.selRect().height, "px");
|
|
12
|
+
i0.ɵɵadvance();
|
|
13
|
+
i0.ɵɵattribute("width", ctx_r0.max0(ctx_r0.selRect().width - 2))("height", ctx_r0.max0(ctx_r0.selRect().height - 2));
|
|
14
|
+
} }
|
|
15
|
+
function MarchingAntsOverlayComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
16
|
+
i0.ɵɵnamespaceSVG();
|
|
17
|
+
i0.ɵɵdomElementStart(0, "svg", 4);
|
|
18
|
+
i0.ɵɵdomElement(1, "rect", 5);
|
|
19
|
+
i0.ɵɵdomElementEnd();
|
|
20
|
+
} if (rf & 2) {
|
|
21
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
22
|
+
i0.ɵɵstyleProp("top", ctx_r0.clipRect().top, "px")("left", ctx_r0.clipRect().left, "px")("width", ctx_r0.clipRect().width, "px")("height", ctx_r0.clipRect().height, "px");
|
|
23
|
+
i0.ɵɵadvance();
|
|
24
|
+
i0.ɵɵattribute("width", ctx_r0.max0(ctx_r0.clipRect().width - 2))("height", ctx_r0.max0(ctx_r0.clipRect().height - 2));
|
|
25
|
+
} }
|
|
26
|
+
export class MarchingAntsOverlayComponent {
|
|
27
|
+
constructor() {
|
|
28
|
+
this.destroyRef = inject(DestroyRef);
|
|
29
|
+
this.selectionRange = null;
|
|
30
|
+
this.copyRange = null;
|
|
31
|
+
this.cutRange = null;
|
|
32
|
+
this.colOffset = 0;
|
|
33
|
+
this.columnSizingVersion = 0;
|
|
34
|
+
this.items = [];
|
|
35
|
+
this.visibleColumns = undefined;
|
|
36
|
+
this.columnOrder = undefined;
|
|
37
|
+
this.selRect = signal(null, ...(ngDevMode ? [{ debugName: "selRect" }] : []));
|
|
38
|
+
this.clipRect = signal(null, ...(ngDevMode ? [{ debugName: "clipRect" }] : []));
|
|
39
|
+
this.rafId = 0;
|
|
40
|
+
this.resizeObserver = null;
|
|
41
|
+
injectGlobalStyles('ogrid-marching-ants-keyframes', '@keyframes ogrid-marching-ants{to{stroke-dashoffset:-8}}');
|
|
42
|
+
this.destroyRef.onDestroy(() => {
|
|
43
|
+
if (this.rafId)
|
|
44
|
+
cancelAnimationFrame(this.rafId);
|
|
45
|
+
if (this.resizeObserver)
|
|
46
|
+
this.resizeObserver.disconnect();
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
ngOnChanges(_changes) {
|
|
50
|
+
this.recalculate();
|
|
51
|
+
}
|
|
52
|
+
recalculate() {
|
|
53
|
+
const container = this.containerEl;
|
|
54
|
+
const selRange = this.selectionRange;
|
|
55
|
+
const clipRange = this.copyRange ?? this.cutRange;
|
|
56
|
+
const colOff = this.colOffset;
|
|
57
|
+
void this.columnSizingVersion; // Track column resize changes
|
|
58
|
+
void this.items; // Track data changes (sorting)
|
|
59
|
+
void this.visibleColumns; // Track column visibility changes
|
|
60
|
+
void this.columnOrder; // Track column reordering
|
|
61
|
+
if (this.resizeObserver) {
|
|
62
|
+
this.resizeObserver.disconnect();
|
|
63
|
+
this.resizeObserver = null;
|
|
64
|
+
}
|
|
65
|
+
if (!selRange && !clipRange) {
|
|
66
|
+
this.selRect.set(null);
|
|
67
|
+
this.clipRect.set(null);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const measureAll = () => {
|
|
71
|
+
if (!container) {
|
|
72
|
+
this.selRect.set(null);
|
|
73
|
+
this.clipRect.set(null);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
this.selRect.set(selRange ? measureRange(container, selRange, colOff) : null);
|
|
77
|
+
this.clipRect.set(clipRange ? measureRange(container, clipRange, colOff) : null);
|
|
78
|
+
};
|
|
79
|
+
if (this.rafId)
|
|
80
|
+
cancelAnimationFrame(this.rafId);
|
|
81
|
+
this.rafId = requestAnimationFrame(measureAll);
|
|
82
|
+
if (container) {
|
|
83
|
+
this.resizeObserver = new ResizeObserver(measureAll);
|
|
84
|
+
this.resizeObserver.observe(container);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
isSingleCellSelection() {
|
|
88
|
+
const r = this.selectionRange;
|
|
89
|
+
return r != null && r.startRow === r.endRow && r.startCol === r.endCol;
|
|
90
|
+
}
|
|
91
|
+
clipRangeMatchesSel() {
|
|
92
|
+
const selRange = this.selectionRange;
|
|
93
|
+
const clipRange = this.copyRange ?? this.cutRange;
|
|
94
|
+
return selRange != null && clipRange != null &&
|
|
95
|
+
selRange.startRow === clipRange.startRow &&
|
|
96
|
+
selRange.startCol === clipRange.startCol &&
|
|
97
|
+
selRange.endRow === clipRange.endRow &&
|
|
98
|
+
selRange.endCol === clipRange.endCol;
|
|
99
|
+
}
|
|
100
|
+
max0(n) {
|
|
101
|
+
return Math.max(0, n);
|
|
102
|
+
}
|
|
103
|
+
static { this.ɵfac = function MarchingAntsOverlayComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || MarchingAntsOverlayComponent)(); }; }
|
|
104
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: MarchingAntsOverlayComponent, selectors: [["ogrid-marching-ants-overlay"]], inputs: { containerEl: "containerEl", selectionRange: "selectionRange", copyRange: "copyRange", cutRange: "cutRange", colOffset: "colOffset", columnSizingVersion: "columnSizingVersion", items: "items", visibleColumns: "visibleColumns", columnOrder: "columnOrder" }, features: [i0.ɵɵNgOnChangesFeature], decls: 2, vars: 2, consts: [["aria-hidden", "true", 1, "ogrid-marching-ants-svg", "ogrid-marching-ants-svg--selection", 3, "top", "left", "width", "height"], ["aria-hidden", "true", 1, "ogrid-marching-ants-svg", "ogrid-marching-ants-svg--clip", 3, "top", "left", "width", "height"], ["aria-hidden", "true", 1, "ogrid-marching-ants-svg", "ogrid-marching-ants-svg--selection"], ["x", "1", "y", "1", "fill", "none", "stroke", "var(--ogrid-selection, #217346)", "stroke-width", "2"], ["aria-hidden", "true", 1, "ogrid-marching-ants-svg", "ogrid-marching-ants-svg--clip"], ["x", "1", "y", "1", "fill", "none", "stroke", "var(--ogrid-selection, #217346)", "stroke-width", "2", "stroke-dasharray", "4 4", 2, "animation", "ogrid-marching-ants 0.5s linear infinite"]], template: function MarchingAntsOverlayComponent_Template(rf, ctx) { if (rf & 1) {
|
|
105
|
+
i0.ɵɵconditionalCreate(0, MarchingAntsOverlayComponent_Conditional_0_Template, 2, 10, ":svg:svg", 0);
|
|
106
|
+
i0.ɵɵconditionalCreate(1, MarchingAntsOverlayComponent_Conditional_1_Template, 2, 10, ":svg:svg", 1);
|
|
107
|
+
} if (rf & 2) {
|
|
108
|
+
i0.ɵɵconditional(ctx.selRect() && !ctx.clipRangeMatchesSel() && !ctx.isSingleCellSelection() ? 0 : -1);
|
|
109
|
+
i0.ɵɵadvance();
|
|
110
|
+
i0.ɵɵconditional(ctx.clipRect() ? 1 : -1);
|
|
111
|
+
} }, styles: [".ogrid-marching-ants-svg[_ngcontent-%COMP%] { position: absolute; pointer-events: none; overflow: visible; }\n .ogrid-marching-ants-svg--selection[_ngcontent-%COMP%] { z-index: 4; }\n .ogrid-marching-ants-svg--clip[_ngcontent-%COMP%] { z-index: 5; }"], changeDetection: 0 }); }
|
|
112
|
+
}
|
|
113
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MarchingAntsOverlayComponent, [{
|
|
114
|
+
type: Component,
|
|
115
|
+
args: [{ selector: 'ogrid-marching-ants-overlay', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
116
|
+
@if (selRect() && !clipRangeMatchesSel() && !isSingleCellSelection()) {
|
|
117
|
+
<svg
|
|
118
|
+
class="ogrid-marching-ants-svg ogrid-marching-ants-svg--selection"
|
|
119
|
+
[style.top.px]="selRect()!.top"
|
|
120
|
+
[style.left.px]="selRect()!.left"
|
|
121
|
+
[style.width.px]="selRect()!.width"
|
|
122
|
+
[style.height.px]="selRect()!.height"
|
|
123
|
+
aria-hidden="true"
|
|
124
|
+
>
|
|
125
|
+
<rect
|
|
126
|
+
x="1" y="1"
|
|
127
|
+
[attr.width]="max0(selRect()!.width - 2)"
|
|
128
|
+
[attr.height]="max0(selRect()!.height - 2)"
|
|
129
|
+
fill="none"
|
|
130
|
+
stroke="var(--ogrid-selection, #217346)"
|
|
131
|
+
stroke-width="2"
|
|
132
|
+
/>
|
|
133
|
+
</svg>
|
|
134
|
+
}
|
|
135
|
+
@if (clipRect()) {
|
|
136
|
+
<svg
|
|
137
|
+
class="ogrid-marching-ants-svg ogrid-marching-ants-svg--clip"
|
|
138
|
+
[style.top.px]="clipRect()!.top"
|
|
139
|
+
[style.left.px]="clipRect()!.left"
|
|
140
|
+
[style.width.px]="clipRect()!.width"
|
|
141
|
+
[style.height.px]="clipRect()!.height"
|
|
142
|
+
aria-hidden="true"
|
|
143
|
+
>
|
|
144
|
+
<rect
|
|
145
|
+
x="1" y="1"
|
|
146
|
+
[attr.width]="max0(clipRect()!.width - 2)"
|
|
147
|
+
[attr.height]="max0(clipRect()!.height - 2)"
|
|
148
|
+
fill="none"
|
|
149
|
+
stroke="var(--ogrid-selection, #217346)"
|
|
150
|
+
stroke-width="2"
|
|
151
|
+
stroke-dasharray="4 4"
|
|
152
|
+
style="animation: ogrid-marching-ants 0.5s linear infinite"
|
|
153
|
+
/>
|
|
154
|
+
</svg>
|
|
155
|
+
}
|
|
156
|
+
`, styles: ["\n .ogrid-marching-ants-svg { position: absolute; pointer-events: none; overflow: visible; }\n .ogrid-marching-ants-svg--selection { z-index: 4; }\n .ogrid-marching-ants-svg--clip { z-index: 5; }\n "] }]
|
|
157
|
+
}], () => [], { containerEl: [{
|
|
158
|
+
type: Input,
|
|
159
|
+
args: [{ required: true }]
|
|
160
|
+
}], selectionRange: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}], copyRange: [{
|
|
163
|
+
type: Input
|
|
164
|
+
}], cutRange: [{
|
|
165
|
+
type: Input
|
|
166
|
+
}], colOffset: [{
|
|
167
|
+
type: Input
|
|
168
|
+
}], columnSizingVersion: [{
|
|
169
|
+
type: Input
|
|
170
|
+
}], items: [{
|
|
171
|
+
type: Input
|
|
172
|
+
}], visibleColumns: [{
|
|
173
|
+
type: Input
|
|
174
|
+
}], columnOrder: [{
|
|
175
|
+
type: Input
|
|
176
|
+
}] }); })();
|
|
177
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(MarchingAntsOverlayComponent, { className: "MarchingAntsOverlayComponent", filePath: "components/marching-ants-overlay.component.ts", lineNumber: 57 }); })();
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { Component, Input, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';
|
|
2
|
+
import { SideBarComponent } from './sidebar.component';
|
|
3
|
+
import { FormulaBarComponent } from './formula-bar.component';
|
|
4
|
+
import { SheetTabsComponent } from './sheet-tabs.component';
|
|
5
|
+
import { GRID_BORDER_RADIUS } from '@alaarab/ogrid-core';
|
|
6
|
+
import { OGRID_THEME_VARS_CSS } from '../styles/ogrid-theme-vars';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
const _c0 = ["*", [["", "toolbar", ""]], [["", "toolbarEnd", ""]], [["", "toolbarBelow", ""]], [["", "pagination", ""]]];
|
|
9
|
+
const _c1 = ["*", "[toolbar]", "[toolbarEnd]", "[toolbarBelow]", "[pagination]"];
|
|
10
|
+
function OGridLayoutComponent_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
11
|
+
i0.ɵɵelementStart(0, "div", 11);
|
|
12
|
+
i0.ɵɵtext(1);
|
|
13
|
+
i0.ɵɵelementEnd();
|
|
14
|
+
} if (rf & 2) {
|
|
15
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
16
|
+
i0.ɵɵadvance();
|
|
17
|
+
i0.ɵɵtextInterpolate(ctx_r0.activeCellRef ?? "\u2014");
|
|
18
|
+
} }
|
|
19
|
+
function OGridLayoutComponent_Conditional_2_Conditional_6_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
i0.ɵɵnamespaceSVG();
|
|
21
|
+
i0.ɵɵelementStart(0, "svg", 15);
|
|
22
|
+
i0.ɵɵelement(1, "polyline", 16)(2, "polyline", 17)(3, "line", 18)(4, "line", 19);
|
|
23
|
+
i0.ɵɵelementEnd();
|
|
24
|
+
} }
|
|
25
|
+
function OGridLayoutComponent_Conditional_2_Conditional_6_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
26
|
+
i0.ɵɵnamespaceSVG();
|
|
27
|
+
i0.ɵɵelementStart(0, "svg", 15);
|
|
28
|
+
i0.ɵɵelement(1, "polyline", 20)(2, "polyline", 21)(3, "line", 22)(4, "line", 23);
|
|
29
|
+
i0.ɵɵelementEnd();
|
|
30
|
+
} }
|
|
31
|
+
function OGridLayoutComponent_Conditional_2_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
32
|
+
const _r2 = i0.ɵɵgetCurrentView();
|
|
33
|
+
i0.ɵɵelementStart(0, "button", 14);
|
|
34
|
+
i0.ɵɵlistener("click", function OGridLayoutComponent_Conditional_2_Conditional_6_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r2); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.toggleFullScreen()); });
|
|
35
|
+
i0.ɵɵconditionalCreate(1, OGridLayoutComponent_Conditional_2_Conditional_6_Conditional_1_Template, 5, 0, ":svg:svg", 15)(2, OGridLayoutComponent_Conditional_2_Conditional_6_Conditional_2_Template, 5, 0, ":svg:svg", 15);
|
|
36
|
+
i0.ɵɵelementEnd();
|
|
37
|
+
} if (rf & 2) {
|
|
38
|
+
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
39
|
+
i0.ɵɵattribute("title", ctx_r0.isFullScreen ? "Exit fullscreen" : "Fullscreen")("aria-label", ctx_r0.isFullScreen ? "Exit fullscreen" : "Fullscreen");
|
|
40
|
+
i0.ɵɵadvance();
|
|
41
|
+
i0.ɵɵconditional(ctx_r0.isFullScreen ? 1 : 2);
|
|
42
|
+
} }
|
|
43
|
+
function OGridLayoutComponent_Conditional_2_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵelementStart(0, "div", 9)(1, "div", 10);
|
|
45
|
+
i0.ɵɵconditionalCreate(2, OGridLayoutComponent_Conditional_2_Conditional_2_Template, 2, 1, "div", 11);
|
|
46
|
+
i0.ɵɵprojection(3, 1);
|
|
47
|
+
i0.ɵɵelementEnd();
|
|
48
|
+
i0.ɵɵelementStart(4, "div", 12);
|
|
49
|
+
i0.ɵɵprojection(5, 2);
|
|
50
|
+
i0.ɵɵconditionalCreate(6, OGridLayoutComponent_Conditional_2_Conditional_6_Template, 3, 3, "button", 13);
|
|
51
|
+
i0.ɵɵelementEnd()();
|
|
52
|
+
} if (rf & 2) {
|
|
53
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
54
|
+
i0.ɵɵclassProp("ogrid-layout-toolbar--has-below", ctx_r0.hasToolbarBelow)("ogrid-layout-toolbar--no-below", !ctx_r0.hasToolbarBelow);
|
|
55
|
+
i0.ɵɵadvance(2);
|
|
56
|
+
i0.ɵɵconditional(ctx_r0.showNameBox ? 2 : -1);
|
|
57
|
+
i0.ɵɵadvance(4);
|
|
58
|
+
i0.ɵɵconditional(ctx_r0.fullScreen ? 6 : -1);
|
|
59
|
+
} }
|
|
60
|
+
function OGridLayoutComponent_Conditional_3_Template(rf, ctx) { if (rf & 1) {
|
|
61
|
+
i0.ɵɵelementStart(0, "div", 2);
|
|
62
|
+
i0.ɵɵprojection(1, 3);
|
|
63
|
+
i0.ɵɵelementEnd();
|
|
64
|
+
} }
|
|
65
|
+
function OGridLayoutComponent_Conditional_4_Template(rf, ctx) { if (rf & 1) {
|
|
66
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
67
|
+
i0.ɵɵelementStart(0, "ogrid-formula-bar", 24);
|
|
68
|
+
i0.ɵɵlistener("inputChange", function OGridLayoutComponent_Conditional_4_Template_ogrid_formula_bar_inputChange_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.formulaBar.onInputChange($event)); })("commit", function OGridLayoutComponent_Conditional_4_Template_ogrid_formula_bar_commit_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.formulaBar.onCommit()); })("cancel", function OGridLayoutComponent_Conditional_4_Template_ogrid_formula_bar_cancel_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.formulaBar.onCancel()); })("startEditing", function OGridLayoutComponent_Conditional_4_Template_ogrid_formula_bar_startEditing_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.formulaBar.startEditing()); });
|
|
69
|
+
i0.ɵɵelementEnd();
|
|
70
|
+
} if (rf & 2) {
|
|
71
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
72
|
+
i0.ɵɵproperty("cellRef", ctx_r0.formulaBar.cellRef)("formulaText", ctx_r0.formulaBar.formulaText)("isEditing", ctx_r0.formulaBar.isEditing);
|
|
73
|
+
} }
|
|
74
|
+
function OGridLayoutComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
|
|
75
|
+
i0.ɵɵelement(0, "ogrid-sidebar", 5);
|
|
76
|
+
} if (rf & 2) {
|
|
77
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
78
|
+
i0.ɵɵproperty("sideBarProps", ctx_r0.sideBar);
|
|
79
|
+
} }
|
|
80
|
+
function OGridLayoutComponent_Conditional_9_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
i0.ɵɵelement(0, "ogrid-sidebar", 5);
|
|
82
|
+
} if (rf & 2) {
|
|
83
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
84
|
+
i0.ɵɵproperty("sideBarProps", ctx_r0.sideBar);
|
|
85
|
+
} }
|
|
86
|
+
function OGridLayoutComponent_Conditional_10_Template(rf, ctx) { if (rf & 1) {
|
|
87
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
88
|
+
i0.ɵɵelementStart(0, "ogrid-sheet-tabs", 25);
|
|
89
|
+
i0.ɵɵlistener("sheetChange", function OGridLayoutComponent_Conditional_10_Template_ogrid_sheet_tabs_sheetChange_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onSheetChange == null ? null : ctx_r0.onSheetChange($event)); })("sheetAdd", function OGridLayoutComponent_Conditional_10_Template_ogrid_sheet_tabs_sheetAdd_0_listener() { i0.ɵɵrestoreView(_r4); const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.onSheetAdd == null ? null : ctx_r0.onSheetAdd()); });
|
|
90
|
+
i0.ɵɵelementEnd();
|
|
91
|
+
} if (rf & 2) {
|
|
92
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
93
|
+
i0.ɵɵproperty("sheets", ctx_r0.sheetDefs)("activeSheet", ctx_r0.activeSheet)("showAddButton", !!ctx_r0.onSheetAdd);
|
|
94
|
+
} }
|
|
95
|
+
function OGridLayoutComponent_Conditional_11_Template(rf, ctx) { if (rf & 1) {
|
|
96
|
+
i0.ɵɵelementStart(0, "div", 8);
|
|
97
|
+
i0.ɵɵprojection(1, 4);
|
|
98
|
+
i0.ɵɵelementEnd();
|
|
99
|
+
} }
|
|
100
|
+
export class OGridLayoutComponent {
|
|
101
|
+
constructor() {
|
|
102
|
+
this.hasToolbar = false;
|
|
103
|
+
this.hasToolbarBelow = false;
|
|
104
|
+
this.hasPagination = false;
|
|
105
|
+
this.sideBar = null;
|
|
106
|
+
this.fullScreen = false;
|
|
107
|
+
this.showNameBox = false;
|
|
108
|
+
this.activeCellRef = null;
|
|
109
|
+
this.formulaBar = null;
|
|
110
|
+
this.isFullScreen = false;
|
|
111
|
+
this.borderRadius = GRID_BORDER_RADIUS;
|
|
112
|
+
this.escListener = null;
|
|
113
|
+
}
|
|
114
|
+
get rootClass() {
|
|
115
|
+
const base = (this.className ?? '') + ' ogrid-layout-root';
|
|
116
|
+
return this.isFullScreen ? base + ' ogrid-layout-root--fullscreen' : base;
|
|
117
|
+
}
|
|
118
|
+
toggleFullScreen() {
|
|
119
|
+
this.isFullScreen = !this.isFullScreen;
|
|
120
|
+
if (this.isFullScreen) {
|
|
121
|
+
this.escListener = (e) => {
|
|
122
|
+
if (e.key === 'Escape') {
|
|
123
|
+
this.isFullScreen = false;
|
|
124
|
+
this.removeEscListener();
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
document.addEventListener('keydown', this.escListener);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
this.removeEscListener();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
removeEscListener() {
|
|
134
|
+
if (this.escListener) {
|
|
135
|
+
document.removeEventListener('keydown', this.escListener);
|
|
136
|
+
this.escListener = null;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
static { this.ɵfac = function OGridLayoutComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || OGridLayoutComponent)(); }; }
|
|
140
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: OGridLayoutComponent, selectors: [["ogrid-layout"]], inputs: { className: "className", hasToolbar: "hasToolbar", hasToolbarBelow: "hasToolbarBelow", hasPagination: "hasPagination", sideBar: "sideBar", fullScreen: "fullScreen", showNameBox: "showNameBox", activeCellRef: "activeCellRef", formulaBar: "formulaBar", sheetDefs: "sheetDefs", activeSheet: "activeSheet", onSheetChange: "onSheetChange", onSheetAdd: "onSheetAdd" }, ngContentSelectors: _c1, decls: 12, vars: 11, consts: [[1, "ogrid-layout-container"], [1, "ogrid-layout-toolbar", 3, "ogrid-layout-toolbar--has-below", "ogrid-layout-toolbar--no-below"], [1, "ogrid-layout-toolbar-below"], [3, "cellRef", "formulaText", "isEditing"], [1, "ogrid-layout-grid-area"], [3, "sideBarProps"], [1, "ogrid-layout-grid-content"], [3, "sheets", "activeSheet", "showAddButton"], [1, "ogrid-layout-footer"], [1, "ogrid-layout-toolbar"], [1, "ogrid-layout-toolbar-left"], [1, "ogrid-name-box"], [1, "ogrid-layout-toolbar-right"], ["type", "button", 1, "ogrid-fullscreen-btn"], ["type", "button", 1, "ogrid-fullscreen-btn", 3, "click"], ["width", "16", "height", "16", "viewBox", "0 0 16 16", "fill", "none", "stroke", "currentColor", "stroke-width", "1.5", "stroke-linecap", "round", "stroke-linejoin", "round"], ["points", "4 10 0 10 0 14"], ["points", "12 6 16 6 16 2"], ["x1", "0", "y1", "10", "x2", "4", "y2", "6"], ["x1", "16", "y1", "6", "x2", "12", "y2", "10"], ["points", "10 2 14 2 14 6"], ["points", "6 14 2 14 2 10"], ["x1", "14", "y1", "2", "x2", "10", "y2", "6"], ["x1", "2", "y1", "14", "x2", "6", "y2", "10"], [3, "inputChange", "commit", "cancel", "startEditing", "cellRef", "formulaText", "isEditing"], [3, "sheetChange", "sheetAdd", "sheets", "activeSheet", "showAddButton"]], template: function OGridLayoutComponent_Template(rf, ctx) { if (rf & 1) {
|
|
141
|
+
i0.ɵɵprojectionDef(_c0);
|
|
142
|
+
i0.ɵɵelementStart(0, "div")(1, "div", 0);
|
|
143
|
+
i0.ɵɵconditionalCreate(2, OGridLayoutComponent_Conditional_2_Template, 7, 6, "div", 1);
|
|
144
|
+
i0.ɵɵconditionalCreate(3, OGridLayoutComponent_Conditional_3_Template, 2, 0, "div", 2);
|
|
145
|
+
i0.ɵɵconditionalCreate(4, OGridLayoutComponent_Conditional_4_Template, 1, 3, "ogrid-formula-bar", 3);
|
|
146
|
+
i0.ɵɵelementStart(5, "div", 4);
|
|
147
|
+
i0.ɵɵconditionalCreate(6, OGridLayoutComponent_Conditional_6_Template, 1, 1, "ogrid-sidebar", 5);
|
|
148
|
+
i0.ɵɵelementStart(7, "div", 6);
|
|
149
|
+
i0.ɵɵprojection(8);
|
|
150
|
+
i0.ɵɵelementEnd();
|
|
151
|
+
i0.ɵɵconditionalCreate(9, OGridLayoutComponent_Conditional_9_Template, 1, 1, "ogrid-sidebar", 5);
|
|
152
|
+
i0.ɵɵelementEnd();
|
|
153
|
+
i0.ɵɵconditionalCreate(10, OGridLayoutComponent_Conditional_10_Template, 1, 3, "ogrid-sheet-tabs", 7);
|
|
154
|
+
i0.ɵɵconditionalCreate(11, OGridLayoutComponent_Conditional_11_Template, 2, 0, "div", 8);
|
|
155
|
+
i0.ɵɵelementEnd()();
|
|
156
|
+
} if (rf & 2) {
|
|
157
|
+
i0.ɵɵclassMap(ctx.rootClass);
|
|
158
|
+
i0.ɵɵadvance();
|
|
159
|
+
i0.ɵɵstyleProp("border-radius", ctx.isFullScreen ? 0 : ctx.borderRadius, "px");
|
|
160
|
+
i0.ɵɵadvance();
|
|
161
|
+
i0.ɵɵconditional(ctx.hasToolbar || ctx.fullScreen || ctx.showNameBox ? 2 : -1);
|
|
162
|
+
i0.ɵɵadvance();
|
|
163
|
+
i0.ɵɵconditional(ctx.hasToolbarBelow ? 3 : -1);
|
|
164
|
+
i0.ɵɵadvance();
|
|
165
|
+
i0.ɵɵconditional(ctx.formulaBar ? 4 : -1);
|
|
166
|
+
i0.ɵɵadvance(2);
|
|
167
|
+
i0.ɵɵconditional(ctx.sideBar && ctx.sideBar.position === "left" ? 6 : -1);
|
|
168
|
+
i0.ɵɵadvance(3);
|
|
169
|
+
i0.ɵɵconditional(ctx.sideBar && ctx.sideBar.position !== "left" ? 9 : -1);
|
|
170
|
+
i0.ɵɵadvance();
|
|
171
|
+
i0.ɵɵconditional(ctx.sheetDefs && ctx.sheetDefs.length > 0 && ctx.activeSheet ? 10 : -1);
|
|
172
|
+
i0.ɵɵadvance();
|
|
173
|
+
i0.ɵɵconditional(ctx.hasPagination ? 11 : -1);
|
|
174
|
+
} }, dependencies: [SideBarComponent, FormulaBarComponent, SheetTabsComponent], styles: ["\n/* \u2500\u2500\u2500 OGrid Light Theme (default) \u2500\u2500\u2500 */\n:where(:root) {\n --ogrid-bg: #ffffff;\n --ogrid-fg: rgba(0, 0, 0, 0.87);\n --ogrid-fg-secondary: rgba(0, 0, 0, 0.6);\n --ogrid-fg-muted: rgba(0, 0, 0, 0.5);\n --ogrid-border: rgba(0, 0, 0, 0.12);\n --ogrid-border-strong: rgba(0, 0, 0, 0.5);\n --ogrid-border-hover: rgba(0, 0, 0, 0.3);\n --ogrid-header-bg: #f5f5f5;\n --ogrid-hover-bg: rgba(0, 0, 0, 0.04);\n --ogrid-selected-row-bg: #e6f0fb;\n --ogrid-bg-selected-hover: #dae8f8;\n --ogrid-active-cell-bg: rgba(0, 0, 0, 0.02);\n --ogrid-range-bg: rgba(33, 115, 70, 0.12);\n --ogrid-accent: #0078d4;\n --ogrid-accent-dark: #005a9e;\n --ogrid-selection-color: #217346;\n --ogrid-primary: #0078d4;\n --ogrid-primary-fg: #fff;\n --ogrid-primary-hover: #106ebe;\n --ogrid-bg-subtle: #f5f5f5;\n --ogrid-bg-hover: rgba(0, 0, 0, 0.04);\n --ogrid-active-bg: rgba(0, 0, 0, 0.06);\n --ogrid-muted: rgba(0, 0, 0, 0.5);\n --ogrid-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n --ogrid-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.08);\n --ogrid-pinned-shadow: rgba(0, 0, 0, 0.1);\n --ogrid-loading-overlay: rgba(255, 255, 255, 0.7);\n --ogrid-selection: #217346;\n --ogrid-bg-range: rgba(33, 115, 70, 0.12);\n --ogrid-bg-selected: #e6f0fb;\n --ogrid-loading-bg: rgba(255, 255, 255, 0.7);\n}\n/* \u2500\u2500\u2500 Auto Dark (system preference) \u2500\u2500\u2500 */\n@media (prefers-color-scheme: dark) {\n :where(:root:not([data-theme=\"light\"])) {\n --ogrid-bg: #1e1e1e;\n --ogrid-fg: rgba(255, 255, 255, 0.87);\n --ogrid-fg-secondary: rgba(255, 255, 255, 0.6);\n --ogrid-fg-muted: rgba(255, 255, 255, 0.5);\n --ogrid-border: rgba(255, 255, 255, 0.12);\n --ogrid-border-strong: rgba(255, 255, 255, 0.5);\n --ogrid-border-hover: rgba(255, 255, 255, 0.3);\n --ogrid-header-bg: #2c2c2c;\n --ogrid-hover-bg: rgba(255, 255, 255, 0.08);\n --ogrid-selected-row-bg: #1a3a5c;\n --ogrid-bg-selected-hover: #1f3650;\n --ogrid-active-cell-bg: rgba(255, 255, 255, 0.06);\n --ogrid-range-bg: rgba(46, 160, 67, 0.15);\n --ogrid-accent: #4da6ff;\n --ogrid-accent-dark: #3390e0;\n --ogrid-selection-color: #2ea043;\n --ogrid-primary: #4da6ff;\n --ogrid-primary-fg: #fff;\n --ogrid-primary-hover: #66b3ff;\n --ogrid-bg-subtle: rgba(255, 255, 255, 0.04);\n --ogrid-bg-hover: rgba(255, 255, 255, 0.08);\n --ogrid-active-bg: rgba(255, 255, 255, 0.08);\n --ogrid-muted: rgba(255, 255, 255, 0.5);\n --ogrid-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);\n --ogrid-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.25);\n --ogrid-pinned-shadow: rgba(0, 0, 0, 0.3);\n --ogrid-loading-overlay: rgba(0, 0, 0, 0.7);\n --ogrid-selection: #2ea043;\n --ogrid-bg-range: rgba(46, 160, 67, 0.15);\n --ogrid-bg-selected: #1a3a5c;\n --ogrid-loading-bg: rgba(0, 0, 0, 0.7);\n }\n}\n/* \u2500\u2500\u2500 Explicit Dark \u2500\u2500\u2500 */\n:where([data-theme=\"dark\"]) {\n --ogrid-bg: #1e1e1e;\n --ogrid-fg: rgba(255, 255, 255, 0.87);\n --ogrid-fg-secondary: rgba(255, 255, 255, 0.6);\n --ogrid-fg-muted: rgba(255, 255, 255, 0.5);\n --ogrid-border: rgba(255, 255, 255, 0.12);\n --ogrid-border-strong: rgba(255, 255, 255, 0.5);\n --ogrid-border-hover: rgba(255, 255, 255, 0.3);\n --ogrid-header-bg: #2c2c2c;\n --ogrid-hover-bg: rgba(255, 255, 255, 0.08);\n --ogrid-selected-row-bg: #1a3a5c;\n --ogrid-bg-selected-hover: #1f3650;\n --ogrid-active-cell-bg: rgba(255, 255, 255, 0.06);\n --ogrid-range-bg: rgba(46, 160, 67, 0.15);\n --ogrid-accent: #4da6ff;\n --ogrid-accent-dark: #3390e0;\n --ogrid-selection-color: #2ea043;\n --ogrid-primary: #4da6ff;\n --ogrid-primary-fg: #fff;\n --ogrid-primary-hover: #66b3ff;\n --ogrid-bg-subtle: rgba(255, 255, 255, 0.04);\n --ogrid-bg-hover: rgba(255, 255, 255, 0.08);\n --ogrid-active-bg: rgba(255, 255, 255, 0.08);\n --ogrid-muted: rgba(255, 255, 255, 0.5);\n --ogrid-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);\n --ogrid-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.25);\n --ogrid-pinned-shadow: rgba(0, 0, 0, 0.3);\n --ogrid-loading-overlay: rgba(0, 0, 0, 0.7);\n --ogrid-selection: #2ea043;\n --ogrid-bg-range: rgba(46, 160, 67, 0.15);\n --ogrid-bg-selected: #1a3a5c;\n --ogrid-loading-bg: rgba(0, 0, 0, 0.7);\n}", "\n :host { display: block; height: 100%; }\n .ogrid-layout-root { display: flex; flex-direction: column; height: 100%; }\n .ogrid-layout-root--fullscreen {\n position: fixed; inset: 0; z-index: 9999;\n background: var(--ogrid-bg, #ffffff);\n }\n .ogrid-layout-container {\n border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n overflow: hidden; display: flex; flex-direction: column;\n flex: 1; min-height: 0; background: var(--ogrid-bg, #ffffff);\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-layout-root--fullscreen .ogrid-layout-container {\n border: none;\n }\n .ogrid-layout-toolbar {\n display: flex; justify-content: space-between; align-items: center;\n padding: 6px 12px; background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));\n gap: 8px; flex-wrap: wrap; min-height: 0;\n }\n .ogrid-layout-toolbar--has-below { border-bottom: none; }\n .ogrid-layout-toolbar--no-below { border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12)); }\n .ogrid-layout-toolbar-left { display: flex; align-items: center; gap: 8px; }\n .ogrid-layout-toolbar-right { display: flex; align-items: center; gap: 8px; }\n .ogrid-layout-toolbar-below {\n border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n padding: 6px 12px; background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));\n }\n .ogrid-layout-grid-area { width: 100%; min-width: 0; min-height: 0; flex: 1; display: flex; }\n .ogrid-layout-grid-content { flex: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }\n .ogrid-layout-footer {\n border-top: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04)); padding: 6px 12px;\n }\n .ogrid-fullscreen-btn {\n background: none; border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n border-radius: 4px; padding: 4px 6px; cursor: pointer;\n display: flex; align-items: center; justify-content: center;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-fullscreen-btn:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }\n .ogrid-name-box {\n display: inline-flex; align-items: center; padding: 0 8px;\n font-family: 'Consolas', 'Courier New', monospace; font-size: 12px;\n border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12)); border-radius: 3px;\n height: 24px; margin-right: 8px; background: var(--ogrid-bg, #fff);\n min-width: 40px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));\n }\n "], encapsulation: 2, changeDetection: 0 }); }
|
|
175
|
+
}
|
|
176
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(OGridLayoutComponent, [{
|
|
177
|
+
type: Component,
|
|
178
|
+
args: [{ selector: 'ogrid-layout', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [SideBarComponent, FormulaBarComponent, SheetTabsComponent], template: `
|
|
179
|
+
<div [class]="rootClass">
|
|
180
|
+
<div class="ogrid-layout-container" [style.border-radius.px]="isFullScreen ? 0 : borderRadius">
|
|
181
|
+
<!-- Toolbar strip -->
|
|
182
|
+
@if (hasToolbar || fullScreen || showNameBox) {
|
|
183
|
+
<div
|
|
184
|
+
class="ogrid-layout-toolbar"
|
|
185
|
+
[class.ogrid-layout-toolbar--has-below]="hasToolbarBelow"
|
|
186
|
+
[class.ogrid-layout-toolbar--no-below]="!hasToolbarBelow"
|
|
187
|
+
>
|
|
188
|
+
<div class="ogrid-layout-toolbar-left">
|
|
189
|
+
@if (showNameBox) {
|
|
190
|
+
<div class="ogrid-name-box">{{ activeCellRef ?? '\u2014' }}</div>
|
|
191
|
+
}
|
|
192
|
+
<ng-content select="[toolbar]"></ng-content>
|
|
193
|
+
</div>
|
|
194
|
+
<div class="ogrid-layout-toolbar-right">
|
|
195
|
+
<ng-content select="[toolbarEnd]"></ng-content>
|
|
196
|
+
@if (fullScreen) {
|
|
197
|
+
<button type="button" class="ogrid-fullscreen-btn"
|
|
198
|
+
[attr.title]="isFullScreen ? 'Exit fullscreen' : 'Fullscreen'"
|
|
199
|
+
[attr.aria-label]="isFullScreen ? 'Exit fullscreen' : 'Fullscreen'"
|
|
200
|
+
(click)="toggleFullScreen()">
|
|
201
|
+
@if (isFullScreen) {
|
|
202
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
203
|
+
<polyline points="4 10 0 10 0 14"></polyline>
|
|
204
|
+
<polyline points="12 6 16 6 16 2"></polyline>
|
|
205
|
+
<line x1="0" y1="10" x2="4" y2="6"></line>
|
|
206
|
+
<line x1="16" y1="6" x2="12" y2="10"></line>
|
|
207
|
+
</svg>
|
|
208
|
+
} @else {
|
|
209
|
+
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
|
210
|
+
<polyline points="10 2 14 2 14 6"></polyline>
|
|
211
|
+
<polyline points="6 14 2 14 2 10"></polyline>
|
|
212
|
+
<line x1="14" y1="2" x2="10" y2="6"></line>
|
|
213
|
+
<line x1="2" y1="14" x2="6" y2="10"></line>
|
|
214
|
+
</svg>
|
|
215
|
+
}
|
|
216
|
+
</button>
|
|
217
|
+
}
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
<!-- Secondary toolbar row -->
|
|
223
|
+
@if (hasToolbarBelow) {
|
|
224
|
+
<div class="ogrid-layout-toolbar-below">
|
|
225
|
+
<ng-content select="[toolbarBelow]"></ng-content>
|
|
226
|
+
</div>
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
<!-- Formula bar (between toolbar and grid) -->
|
|
230
|
+
@if (formulaBar) {
|
|
231
|
+
<ogrid-formula-bar
|
|
232
|
+
[cellRef]="formulaBar.cellRef"
|
|
233
|
+
[formulaText]="formulaBar.formulaText"
|
|
234
|
+
[isEditing]="formulaBar.isEditing"
|
|
235
|
+
(inputChange)="formulaBar.onInputChange($event)"
|
|
236
|
+
(commit)="formulaBar.onCommit()"
|
|
237
|
+
(cancel)="formulaBar.onCancel()"
|
|
238
|
+
(startEditing)="formulaBar.startEditing()"
|
|
239
|
+
/>
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
<!-- Grid area -->
|
|
243
|
+
<div class="ogrid-layout-grid-area">
|
|
244
|
+
@if (sideBar && sideBar.position === 'left') {
|
|
245
|
+
<ogrid-sidebar [sideBarProps]="sideBar"></ogrid-sidebar>
|
|
246
|
+
}
|
|
247
|
+
<div class="ogrid-layout-grid-content">
|
|
248
|
+
<ng-content></ng-content>
|
|
249
|
+
</div>
|
|
250
|
+
@if (sideBar && sideBar.position !== 'left') {
|
|
251
|
+
<ogrid-sidebar [sideBarProps]="sideBar"></ogrid-sidebar>
|
|
252
|
+
}
|
|
253
|
+
</div>
|
|
254
|
+
|
|
255
|
+
<!-- Sheet tabs (between grid and footer) -->
|
|
256
|
+
@if (sheetDefs && sheetDefs.length > 0 && activeSheet) {
|
|
257
|
+
<ogrid-sheet-tabs
|
|
258
|
+
[sheets]="sheetDefs"
|
|
259
|
+
[activeSheet]="activeSheet"
|
|
260
|
+
[showAddButton]="!!onSheetAdd"
|
|
261
|
+
(sheetChange)="onSheetChange?.($event)"
|
|
262
|
+
(sheetAdd)="onSheetAdd?.()"
|
|
263
|
+
/>
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
<!-- Footer strip (pagination) -->
|
|
267
|
+
@if (hasPagination) {
|
|
268
|
+
<div class="ogrid-layout-footer">
|
|
269
|
+
<ng-content select="[pagination]"></ng-content>
|
|
270
|
+
</div>
|
|
271
|
+
}
|
|
272
|
+
</div>
|
|
273
|
+
</div>
|
|
274
|
+
`, styles: ["\n/* \u2500\u2500\u2500 OGrid Light Theme (default) \u2500\u2500\u2500 */\n:where(:root) {\n --ogrid-bg: #ffffff;\n --ogrid-fg: rgba(0, 0, 0, 0.87);\n --ogrid-fg-secondary: rgba(0, 0, 0, 0.6);\n --ogrid-fg-muted: rgba(0, 0, 0, 0.5);\n --ogrid-border: rgba(0, 0, 0, 0.12);\n --ogrid-border-strong: rgba(0, 0, 0, 0.5);\n --ogrid-border-hover: rgba(0, 0, 0, 0.3);\n --ogrid-header-bg: #f5f5f5;\n --ogrid-hover-bg: rgba(0, 0, 0, 0.04);\n --ogrid-selected-row-bg: #e6f0fb;\n --ogrid-bg-selected-hover: #dae8f8;\n --ogrid-active-cell-bg: rgba(0, 0, 0, 0.02);\n --ogrid-range-bg: rgba(33, 115, 70, 0.12);\n --ogrid-accent: #0078d4;\n --ogrid-accent-dark: #005a9e;\n --ogrid-selection-color: #217346;\n --ogrid-primary: #0078d4;\n --ogrid-primary-fg: #fff;\n --ogrid-primary-hover: #106ebe;\n --ogrid-bg-subtle: #f5f5f5;\n --ogrid-bg-hover: rgba(0, 0, 0, 0.04);\n --ogrid-active-bg: rgba(0, 0, 0, 0.06);\n --ogrid-muted: rgba(0, 0, 0, 0.5);\n --ogrid-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n --ogrid-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.08);\n --ogrid-pinned-shadow: rgba(0, 0, 0, 0.1);\n --ogrid-loading-overlay: rgba(255, 255, 255, 0.7);\n --ogrid-selection: #217346;\n --ogrid-bg-range: rgba(33, 115, 70, 0.12);\n --ogrid-bg-selected: #e6f0fb;\n --ogrid-loading-bg: rgba(255, 255, 255, 0.7);\n}\n/* \u2500\u2500\u2500 Auto Dark (system preference) \u2500\u2500\u2500 */\n@media (prefers-color-scheme: dark) {\n :where(:root:not([data-theme=\"light\"])) {\n --ogrid-bg: #1e1e1e;\n --ogrid-fg: rgba(255, 255, 255, 0.87);\n --ogrid-fg-secondary: rgba(255, 255, 255, 0.6);\n --ogrid-fg-muted: rgba(255, 255, 255, 0.5);\n --ogrid-border: rgba(255, 255, 255, 0.12);\n --ogrid-border-strong: rgba(255, 255, 255, 0.5);\n --ogrid-border-hover: rgba(255, 255, 255, 0.3);\n --ogrid-header-bg: #2c2c2c;\n --ogrid-hover-bg: rgba(255, 255, 255, 0.08);\n --ogrid-selected-row-bg: #1a3a5c;\n --ogrid-bg-selected-hover: #1f3650;\n --ogrid-active-cell-bg: rgba(255, 255, 255, 0.06);\n --ogrid-range-bg: rgba(46, 160, 67, 0.15);\n --ogrid-accent: #4da6ff;\n --ogrid-accent-dark: #3390e0;\n --ogrid-selection-color: #2ea043;\n --ogrid-primary: #4da6ff;\n --ogrid-primary-fg: #fff;\n --ogrid-primary-hover: #66b3ff;\n --ogrid-bg-subtle: rgba(255, 255, 255, 0.04);\n --ogrid-bg-hover: rgba(255, 255, 255, 0.08);\n --ogrid-active-bg: rgba(255, 255, 255, 0.08);\n --ogrid-muted: rgba(255, 255, 255, 0.5);\n --ogrid-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);\n --ogrid-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.25);\n --ogrid-pinned-shadow: rgba(0, 0, 0, 0.3);\n --ogrid-loading-overlay: rgba(0, 0, 0, 0.7);\n --ogrid-selection: #2ea043;\n --ogrid-bg-range: rgba(46, 160, 67, 0.15);\n --ogrid-bg-selected: #1a3a5c;\n --ogrid-loading-bg: rgba(0, 0, 0, 0.7);\n }\n}\n/* \u2500\u2500\u2500 Explicit Dark \u2500\u2500\u2500 */\n:where([data-theme=\"dark\"]) {\n --ogrid-bg: #1e1e1e;\n --ogrid-fg: rgba(255, 255, 255, 0.87);\n --ogrid-fg-secondary: rgba(255, 255, 255, 0.6);\n --ogrid-fg-muted: rgba(255, 255, 255, 0.5);\n --ogrid-border: rgba(255, 255, 255, 0.12);\n --ogrid-border-strong: rgba(255, 255, 255, 0.5);\n --ogrid-border-hover: rgba(255, 255, 255, 0.3);\n --ogrid-header-bg: #2c2c2c;\n --ogrid-hover-bg: rgba(255, 255, 255, 0.08);\n --ogrid-selected-row-bg: #1a3a5c;\n --ogrid-bg-selected-hover: #1f3650;\n --ogrid-active-cell-bg: rgba(255, 255, 255, 0.06);\n --ogrid-range-bg: rgba(46, 160, 67, 0.15);\n --ogrid-accent: #4da6ff;\n --ogrid-accent-dark: #3390e0;\n --ogrid-selection-color: #2ea043;\n --ogrid-primary: #4da6ff;\n --ogrid-primary-fg: #fff;\n --ogrid-primary-hover: #66b3ff;\n --ogrid-bg-subtle: rgba(255, 255, 255, 0.04);\n --ogrid-bg-hover: rgba(255, 255, 255, 0.08);\n --ogrid-active-bg: rgba(255, 255, 255, 0.08);\n --ogrid-muted: rgba(255, 255, 255, 0.5);\n --ogrid-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);\n --ogrid-shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.25);\n --ogrid-pinned-shadow: rgba(0, 0, 0, 0.3);\n --ogrid-loading-overlay: rgba(0, 0, 0, 0.7);\n --ogrid-selection: #2ea043;\n --ogrid-bg-range: rgba(46, 160, 67, 0.15);\n --ogrid-bg-selected: #1a3a5c;\n --ogrid-loading-bg: rgba(0, 0, 0, 0.7);\n}", "\n :host { display: block; height: 100%; }\n .ogrid-layout-root { display: flex; flex-direction: column; height: 100%; }\n .ogrid-layout-root--fullscreen {\n position: fixed; inset: 0; z-index: 9999;\n background: var(--ogrid-bg, #ffffff);\n }\n .ogrid-layout-container {\n border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n overflow: hidden; display: flex; flex-direction: column;\n flex: 1; min-height: 0; background: var(--ogrid-bg, #ffffff);\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-layout-root--fullscreen .ogrid-layout-container {\n border: none;\n }\n .ogrid-layout-toolbar {\n display: flex; justify-content: space-between; align-items: center;\n padding: 6px 12px; background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));\n gap: 8px; flex-wrap: wrap; min-height: 0;\n }\n .ogrid-layout-toolbar--has-below { border-bottom: none; }\n .ogrid-layout-toolbar--no-below { border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12)); }\n .ogrid-layout-toolbar-left { display: flex; align-items: center; gap: 8px; }\n .ogrid-layout-toolbar-right { display: flex; align-items: center; gap: 8px; }\n .ogrid-layout-toolbar-below {\n border-bottom: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n padding: 6px 12px; background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04));\n }\n .ogrid-layout-grid-area { width: 100%; min-width: 0; min-height: 0; flex: 1; display: flex; }\n .ogrid-layout-grid-content { flex: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }\n .ogrid-layout-footer {\n border-top: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n background: var(--ogrid-header-bg, rgba(0, 0, 0, 0.04)); padding: 6px 12px;\n }\n .ogrid-fullscreen-btn {\n background: none; border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12));\n border-radius: 4px; padding: 4px 6px; cursor: pointer;\n display: flex; align-items: center; justify-content: center;\n color: var(--ogrid-fg, rgba(0, 0, 0, 0.87));\n }\n .ogrid-fullscreen-btn:hover { background: var(--ogrid-hover-bg, rgba(0, 0, 0, 0.04)); }\n .ogrid-name-box {\n display: inline-flex; align-items: center; padding: 0 8px;\n font-family: 'Consolas', 'Courier New', monospace; font-size: 12px;\n border: 1px solid var(--ogrid-border, rgba(0, 0, 0, 0.12)); border-radius: 3px;\n height: 24px; margin-right: 8px; background: var(--ogrid-bg, #fff);\n min-width: 40px; color: var(--ogrid-fg-secondary, rgba(0, 0, 0, 0.6));\n }\n "] }]
|
|
275
|
+
}], null, { className: [{
|
|
276
|
+
type: Input
|
|
277
|
+
}], hasToolbar: [{
|
|
278
|
+
type: Input
|
|
279
|
+
}], hasToolbarBelow: [{
|
|
280
|
+
type: Input
|
|
281
|
+
}], hasPagination: [{
|
|
282
|
+
type: Input
|
|
283
|
+
}], sideBar: [{
|
|
284
|
+
type: Input
|
|
285
|
+
}], fullScreen: [{
|
|
286
|
+
type: Input
|
|
287
|
+
}], showNameBox: [{
|
|
288
|
+
type: Input
|
|
289
|
+
}], activeCellRef: [{
|
|
290
|
+
type: Input
|
|
291
|
+
}], formulaBar: [{
|
|
292
|
+
type: Input
|
|
293
|
+
}], sheetDefs: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], activeSheet: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], onSheetChange: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], onSheetAdd: [{
|
|
300
|
+
type: Input
|
|
301
|
+
}] }); })();
|
|
302
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(OGridLayoutComponent, { className: "OGridLayoutComponent", filePath: "components/ogrid-layout.component.ts", lineNumber: 165 }); })();
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SheetTabsComponent -- Excel-style sheet tab bar at the bottom of the grid.
|
|
3
|
+
*
|
|
4
|
+
* Layout: [+] [Sheet1] [Sheet2] [Sheet3]
|
|
5
|
+
*
|
|
6
|
+
* Uses --ogrid-* CSS variables for theming.
|
|
7
|
+
* Port of React's SheetTabs component.
|
|
8
|
+
*/
|
|
9
|
+
import { Component, ChangeDetectionStrategy, ViewEncapsulation, input, output, } from '@angular/core';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
const _forTrack0 = ($index, $item) => $item.id;
|
|
12
|
+
function SheetTabsComponent_Conditional_1_Template(rf, ctx) { if (rf & 1) {
|
|
13
|
+
const _r1 = i0.ɵɵgetCurrentView();
|
|
14
|
+
i0.ɵɵdomElementStart(0, "button", 3);
|
|
15
|
+
i0.ɵɵdomListener("click", function SheetTabsComponent_Conditional_1_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.sheetAdd.emit()); });
|
|
16
|
+
i0.ɵɵtext(1, "+");
|
|
17
|
+
i0.ɵɵdomElementEnd();
|
|
18
|
+
} }
|
|
19
|
+
function SheetTabsComponent_For_3_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
+
const _r3 = i0.ɵɵgetCurrentView();
|
|
21
|
+
i0.ɵɵdomElementStart(0, "button", 4);
|
|
22
|
+
i0.ɵɵdomListener("click", function SheetTabsComponent_For_3_Template_button_click_0_listener() { const sheet_r4 = i0.ɵɵrestoreView(_r3).$implicit; const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.sheetChange.emit(sheet_r4.id)); });
|
|
23
|
+
i0.ɵɵtext(1);
|
|
24
|
+
i0.ɵɵdomElementEnd();
|
|
25
|
+
} if (rf & 2) {
|
|
26
|
+
const sheet_r4 = ctx.$implicit;
|
|
27
|
+
const isActive_r5 = sheet_r4.id === i0.ɵɵnextContext().activeSheet();
|
|
28
|
+
i0.ɵɵstyleProp("border-bottom-color", isActive_r5 && sheet_r4.color ? sheet_r4.color : null);
|
|
29
|
+
i0.ɵɵclassProp("ogrid-sheet-tabs__tab--active", isActive_r5);
|
|
30
|
+
i0.ɵɵattribute("aria-selected", isActive_r5);
|
|
31
|
+
i0.ɵɵadvance();
|
|
32
|
+
i0.ɵɵtextInterpolate(sheet_r4.name);
|
|
33
|
+
} }
|
|
34
|
+
export class SheetTabsComponent {
|
|
35
|
+
constructor() {
|
|
36
|
+
this.sheets = input.required(...(ngDevMode ? [{ debugName: "sheets" }] : []));
|
|
37
|
+
this.activeSheet = input.required(...(ngDevMode ? [{ debugName: "activeSheet" }] : []));
|
|
38
|
+
this.showAddButton = input(false, ...(ngDevMode ? [{ debugName: "showAddButton" }] : []));
|
|
39
|
+
this.sheetChange = output();
|
|
40
|
+
this.sheetAdd = output();
|
|
41
|
+
}
|
|
42
|
+
static { this.ɵfac = function SheetTabsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SheetTabsComponent)(); }; }
|
|
43
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SheetTabsComponent, selectors: [["ogrid-sheet-tabs"]], inputs: { sheets: [1, "sheets"], activeSheet: [1, "activeSheet"], showAddButton: [1, "showAddButton"] }, outputs: { sheetChange: "sheetChange", sheetAdd: "sheetAdd" }, decls: 4, vars: 1, consts: [["role", "tablist", "aria-label", "Sheet tabs", 1, "ogrid-sheet-tabs"], ["type", "button", "title", "Add sheet", "aria-label", "Add sheet", 1, "ogrid-sheet-tabs__add-btn"], ["type", "button", "role", "tab", 1, "ogrid-sheet-tabs__tab", 3, "ogrid-sheet-tabs__tab--active", "border-bottom-color"], ["type", "button", "title", "Add sheet", "aria-label", "Add sheet", 1, "ogrid-sheet-tabs__add-btn", 3, "click"], ["type", "button", "role", "tab", 1, "ogrid-sheet-tabs__tab", 3, "click"]], template: function SheetTabsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
44
|
+
i0.ɵɵdomElementStart(0, "div", 0);
|
|
45
|
+
i0.ɵɵconditionalCreate(1, SheetTabsComponent_Conditional_1_Template, 2, 0, "button", 1);
|
|
46
|
+
i0.ɵɵrepeaterCreate(2, SheetTabsComponent_For_3_Template, 2, 6, "button", 2, _forTrack0);
|
|
47
|
+
i0.ɵɵdomElementEnd();
|
|
48
|
+
} if (rf & 2) {
|
|
49
|
+
i0.ɵɵadvance();
|
|
50
|
+
i0.ɵɵconditional(ctx.showAddButton() ? 1 : -1);
|
|
51
|
+
i0.ɵɵadvance();
|
|
52
|
+
i0.ɵɵrepeater(ctx.sheets());
|
|
53
|
+
} }, styles: ["\n .ogrid-sheet-tabs {\n display: flex;\n align-items: center;\n border-top: 1px solid var(--ogrid-border, #e0e0e0);\n background: var(--ogrid-header-bg, #f5f5f5);\n min-height: 30px;\n overflow-x: auto;\n overflow-y: hidden;\n gap: 0;\n font-size: 12px;\n }\n .ogrid-sheet-tabs__add-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 10px;\n font-size: 16px;\n line-height: 22px;\n color: var(--ogrid-fg-secondary, #666);\n flex-shrink: 0;\n }\n .ogrid-sheet-tabs__tab {\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n padding: 4px 16px;\n font-size: 12px;\n line-height: 22px;\n color: var(--ogrid-fg, #242424);\n white-space: nowrap;\n position: relative;\n }\n .ogrid-sheet-tabs__tab--active {\n font-weight: 600;\n border-bottom-color: var(--ogrid-primary, #217346);\n background: var(--ogrid-bg, #fff);\n }\n "], encapsulation: 2, changeDetection: 0 }); }
|
|
54
|
+
}
|
|
55
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SheetTabsComponent, [{
|
|
56
|
+
type: Component,
|
|
57
|
+
args: [{ selector: 'ogrid-sheet-tabs', standalone: true, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
58
|
+
<div class="ogrid-sheet-tabs" role="tablist" aria-label="Sheet tabs">
|
|
59
|
+
@if (showAddButton()) {
|
|
60
|
+
<button
|
|
61
|
+
type="button"
|
|
62
|
+
class="ogrid-sheet-tabs__add-btn"
|
|
63
|
+
(click)="sheetAdd.emit()"
|
|
64
|
+
title="Add sheet"
|
|
65
|
+
aria-label="Add sheet"
|
|
66
|
+
>+</button>
|
|
67
|
+
}
|
|
68
|
+
@for (sheet of sheets(); track sheet.id) {
|
|
69
|
+
@let isActive = sheet.id === activeSheet();
|
|
70
|
+
<button
|
|
71
|
+
type="button"
|
|
72
|
+
role="tab"
|
|
73
|
+
class="ogrid-sheet-tabs__tab"
|
|
74
|
+
[class.ogrid-sheet-tabs__tab--active]="isActive"
|
|
75
|
+
[attr.aria-selected]="isActive"
|
|
76
|
+
[style.border-bottom-color]="isActive && sheet.color ? sheet.color : null"
|
|
77
|
+
(click)="sheetChange.emit(sheet.id)"
|
|
78
|
+
>{{ sheet.name }}</button>
|
|
79
|
+
}
|
|
80
|
+
</div>
|
|
81
|
+
`, styles: ["\n .ogrid-sheet-tabs {\n display: flex;\n align-items: center;\n border-top: 1px solid var(--ogrid-border, #e0e0e0);\n background: var(--ogrid-header-bg, #f5f5f5);\n min-height: 30px;\n overflow-x: auto;\n overflow-y: hidden;\n gap: 0;\n font-size: 12px;\n }\n .ogrid-sheet-tabs__add-btn {\n background: none;\n border: none;\n cursor: pointer;\n padding: 4px 10px;\n font-size: 16px;\n line-height: 22px;\n color: var(--ogrid-fg-secondary, #666);\n flex-shrink: 0;\n }\n .ogrid-sheet-tabs__tab {\n background: none;\n border: none;\n border-bottom: 2px solid transparent;\n cursor: pointer;\n padding: 4px 16px;\n font-size: 12px;\n line-height: 22px;\n color: var(--ogrid-fg, #242424);\n white-space: nowrap;\n position: relative;\n }\n .ogrid-sheet-tabs__tab--active {\n font-weight: 600;\n border-bottom-color: var(--ogrid-primary, #217346);\n background: var(--ogrid-bg, #fff);\n }\n "] }]
|
|
82
|
+
}], null, { sheets: [{ type: i0.Input, args: [{ isSignal: true, alias: "sheets", required: true }] }], activeSheet: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeSheet", required: true }] }], showAddButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAddButton", required: false }] }], sheetChange: [{ type: i0.Output, args: ["sheetChange"] }], sheetAdd: [{ type: i0.Output, args: ["sheetAdd"] }] }); })();
|
|
83
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SheetTabsComponent, { className: "SheetTabsComponent", filePath: "components/sheet-tabs.component.ts", lineNumber: 90 }); })();
|