@schenkerjon/ng-govbr-tw 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/components/badge/br-badge.component.mjs +42 -0
- package/esm2022/lib/components/button/br-button.component.mjs +93 -0
- package/esm2022/lib/components/card/br-card.component.mjs +65 -0
- package/esm2022/lib/components/footer/br-footer.component.mjs +56 -0
- package/esm2022/lib/components/header/br-header.component.mjs +133 -0
- package/esm2022/lib/components/input/br-input.component.mjs +219 -0
- package/esm2022/lib/components/layout/br-layout.component.mjs +54 -0
- package/esm2022/lib/components/menu/br-menu-item.component.mjs +49 -0
- package/esm2022/lib/components/menu/br-menu.component.mjs +26 -0
- package/esm2022/lib/components/message/br-message.component.mjs +90 -0
- package/esm2022/lib/components/table/br-table.component.mjs +143 -0
- package/esm2022/public-api.mjs +16 -0
- package/esm2022/schenkerjon-ng-govbr-tw.mjs +5 -0
- package/fesm2022/schenkerjon-ng-govbr-tw.mjs +943 -0
- package/fesm2022/schenkerjon-ng-govbr-tw.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/badge/br-badge.component.d.ts +7 -0
- package/lib/components/button/br-button.component.d.ts +17 -0
- package/lib/components/card/br-card.component.d.ts +8 -0
- package/lib/components/footer/br-footer.component.d.ts +6 -0
- package/lib/components/header/br-header.component.d.ts +13 -0
- package/lib/components/input/br-input.component.d.ts +28 -0
- package/lib/components/layout/br-layout.component.d.ts +5 -0
- package/lib/components/menu/br-menu-item.component.d.ts +8 -0
- package/lib/components/menu/br-menu.component.d.ts +5 -0
- package/lib/components/message/br-message.component.d.ts +13 -0
- package/lib/components/table/br-table.component.d.ts +12 -0
- package/package.json +43 -0
- package/public-api.d.ts +11 -0
- package/src/lib/styles/govbr-tw.css +71 -0
- package/tailwind.preset.js +54 -0
|
@@ -0,0 +1,943 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { EventEmitter, Output, Input, ViewEncapsulation, Component, forwardRef, ContentChild } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/common';
|
|
4
|
+
import { CommonModule } from '@angular/common';
|
|
5
|
+
import * as i2 from '@angular/forms';
|
|
6
|
+
import { FormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
7
|
+
import * as i2$1 from '@angular/router';
|
|
8
|
+
import { RouterModule } from '@angular/router';
|
|
9
|
+
|
|
10
|
+
class BrButtonComponent {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.variant = 'primary';
|
|
13
|
+
this.size = 'medium';
|
|
14
|
+
this.type = 'button';
|
|
15
|
+
this.circle = false;
|
|
16
|
+
this.block = false;
|
|
17
|
+
this.loading = false;
|
|
18
|
+
this.disabled = false;
|
|
19
|
+
this.onClick = new EventEmitter();
|
|
20
|
+
}
|
|
21
|
+
get buttonClasses() {
|
|
22
|
+
const base = 'inline-flex items-center justify-center font-rawline font-semibold transition-colors duration-200 focus:outline-none focus:ring-2 focus:ring-offset-2';
|
|
23
|
+
const variants = {
|
|
24
|
+
primary: 'bg-govbr-primary text-white hover:bg-govbr-primary-dark focus:ring-govbr-primary',
|
|
25
|
+
secondary: 'bg-transparent text-govbr-primary border border-govbr-primary hover:bg-govbr-primary hover:text-white focus:ring-govbr-primary',
|
|
26
|
+
danger: 'bg-govbr-danger text-white hover:bg-red-700 focus:ring-govbr-danger',
|
|
27
|
+
};
|
|
28
|
+
const sizes = {
|
|
29
|
+
small: this.circle ? 'w-8 h-8 text-sm' : 'px-3 py-1.5 text-sm',
|
|
30
|
+
medium: this.circle ? 'w-10 h-10 text-base' : 'px-5 py-2 text-base',
|
|
31
|
+
large: this.circle ? 'w-12 h-12 text-lg' : 'px-7 py-3 text-lg',
|
|
32
|
+
};
|
|
33
|
+
const shape = this.circle ? 'rounded-full' : 'rounded-govbr-pill';
|
|
34
|
+
const width = this.block ? 'w-full' : '';
|
|
35
|
+
const disabledCls = this.disabled || this.loading ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer';
|
|
36
|
+
return [base, variants[this.variant], sizes[this.size], shape, width, disabledCls]
|
|
37
|
+
.filter(Boolean)
|
|
38
|
+
.join(' ');
|
|
39
|
+
}
|
|
40
|
+
handleClick(event) {
|
|
41
|
+
if (!this.disabled && !this.loading) {
|
|
42
|
+
this.onClick.emit(event);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
46
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrButtonComponent, isStandalone: true, selector: "br-button", inputs: { variant: "variant", size: "size", type: "type", circle: "circle", block: "block", icon: "icon", loading: "loading", disabled: "disabled" }, outputs: { onClick: "onClick" }, ngImport: i0, template: `
|
|
47
|
+
<button
|
|
48
|
+
[type]="type"
|
|
49
|
+
[disabled]="disabled || loading"
|
|
50
|
+
[class]="buttonClasses"
|
|
51
|
+
(click)="handleClick($event)"
|
|
52
|
+
>
|
|
53
|
+
<i *ngIf="loading" class="fa-solid fa-spinner fa-spin mr-2"></i>
|
|
54
|
+
<i *ngIf="icon && !loading" [class]="'fa-solid fa-' + icon + (circle ? '' : ' mr-2')"></i>
|
|
55
|
+
<span *ngIf="!circle"><ng-content></ng-content></span>
|
|
56
|
+
</button>
|
|
57
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
58
|
+
}
|
|
59
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrButtonComponent, decorators: [{
|
|
60
|
+
type: Component,
|
|
61
|
+
args: [{
|
|
62
|
+
selector: 'br-button',
|
|
63
|
+
standalone: true,
|
|
64
|
+
imports: [CommonModule],
|
|
65
|
+
encapsulation: ViewEncapsulation.None,
|
|
66
|
+
template: `
|
|
67
|
+
<button
|
|
68
|
+
[type]="type"
|
|
69
|
+
[disabled]="disabled || loading"
|
|
70
|
+
[class]="buttonClasses"
|
|
71
|
+
(click)="handleClick($event)"
|
|
72
|
+
>
|
|
73
|
+
<i *ngIf="loading" class="fa-solid fa-spinner fa-spin mr-2"></i>
|
|
74
|
+
<i *ngIf="icon && !loading" [class]="'fa-solid fa-' + icon + (circle ? '' : ' mr-2')"></i>
|
|
75
|
+
<span *ngIf="!circle"><ng-content></ng-content></span>
|
|
76
|
+
</button>
|
|
77
|
+
`,
|
|
78
|
+
}]
|
|
79
|
+
}], propDecorators: { variant: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}], size: [{
|
|
82
|
+
type: Input
|
|
83
|
+
}], type: [{
|
|
84
|
+
type: Input
|
|
85
|
+
}], circle: [{
|
|
86
|
+
type: Input
|
|
87
|
+
}], block: [{
|
|
88
|
+
type: Input
|
|
89
|
+
}], icon: [{
|
|
90
|
+
type: Input
|
|
91
|
+
}], loading: [{
|
|
92
|
+
type: Input
|
|
93
|
+
}], disabled: [{
|
|
94
|
+
type: Input
|
|
95
|
+
}], onClick: [{
|
|
96
|
+
type: Output
|
|
97
|
+
}] } });
|
|
98
|
+
|
|
99
|
+
class BrInputComponent {
|
|
100
|
+
constructor() {
|
|
101
|
+
this.type = 'text';
|
|
102
|
+
this.placeholder = '';
|
|
103
|
+
this.required = false;
|
|
104
|
+
this.fileSelected = new EventEmitter();
|
|
105
|
+
this.value = '';
|
|
106
|
+
this.isDisabled = false;
|
|
107
|
+
this.fileName = '';
|
|
108
|
+
this.inputId = `br-input-${BrInputComponent.nextId++}`;
|
|
109
|
+
this.onChange = () => { };
|
|
110
|
+
this.onTouched = () => { };
|
|
111
|
+
}
|
|
112
|
+
static { this.nextId = 0; }
|
|
113
|
+
get inputClasses() {
|
|
114
|
+
const base = 'w-full px-4 py-2 border rounded text-govbr-gray-80 bg-white font-rawline text-base transition-colors focus:outline-none focus:ring-2 focus:ring-govbr-primary focus:border-govbr-primary';
|
|
115
|
+
const errorCls = this.error
|
|
116
|
+
? 'border-govbr-danger focus:ring-govbr-danger focus:border-govbr-danger'
|
|
117
|
+
: 'border-govbr-gray-10';
|
|
118
|
+
const disabledCls = this.isDisabled ? 'bg-govbr-gray-2 cursor-not-allowed' : '';
|
|
119
|
+
return [base, errorCls, disabledCls].filter(Boolean).join(' ');
|
|
120
|
+
}
|
|
121
|
+
writeValue(value) {
|
|
122
|
+
this.value = value ?? '';
|
|
123
|
+
}
|
|
124
|
+
registerOnChange(fn) {
|
|
125
|
+
this.onChange = fn;
|
|
126
|
+
}
|
|
127
|
+
registerOnTouched(fn) {
|
|
128
|
+
this.onTouched = fn;
|
|
129
|
+
}
|
|
130
|
+
setDisabledState(isDisabled) {
|
|
131
|
+
this.isDisabled = isDisabled;
|
|
132
|
+
}
|
|
133
|
+
onInputChange(event) {
|
|
134
|
+
const val = event.target.value;
|
|
135
|
+
this.value = val;
|
|
136
|
+
this.onChange(val);
|
|
137
|
+
}
|
|
138
|
+
onSelectChange(event) {
|
|
139
|
+
const val = event.target.value;
|
|
140
|
+
this.value = val;
|
|
141
|
+
this.onChange(val);
|
|
142
|
+
}
|
|
143
|
+
onFileChange(event) {
|
|
144
|
+
const input = event.target;
|
|
145
|
+
if (input.files && input.files.length > 0) {
|
|
146
|
+
const file = input.files[0];
|
|
147
|
+
this.fileName = file.name;
|
|
148
|
+
this.fileSelected.emit(file);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrInputComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
152
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrInputComponent, isStandalone: true, selector: "br-input", inputs: { label: "label", type: "type", placeholder: "placeholder", required: "required", error: "error" }, outputs: { fileSelected: "fileSelected" }, providers: [
|
|
153
|
+
{
|
|
154
|
+
provide: NG_VALUE_ACCESSOR,
|
|
155
|
+
useExisting: forwardRef(() => BrInputComponent),
|
|
156
|
+
multi: true,
|
|
157
|
+
},
|
|
158
|
+
], ngImport: i0, template: `
|
|
159
|
+
<div class="mb-4 font-rawline">
|
|
160
|
+
<label
|
|
161
|
+
*ngIf="label"
|
|
162
|
+
[for]="inputId"
|
|
163
|
+
class="block text-sm font-semibold text-govbr-gray-80 mb-1"
|
|
164
|
+
>
|
|
165
|
+
{{ label }}
|
|
166
|
+
<span *ngIf="required" class="text-govbr-danger">*</span>
|
|
167
|
+
</label>
|
|
168
|
+
|
|
169
|
+
<!-- Select -->
|
|
170
|
+
<select
|
|
171
|
+
*ngIf="type === 'select'"
|
|
172
|
+
[id]="inputId"
|
|
173
|
+
[disabled]="isDisabled"
|
|
174
|
+
[class]="inputClasses"
|
|
175
|
+
[value]="value"
|
|
176
|
+
(change)="onSelectChange($event)"
|
|
177
|
+
(blur)="onTouched()"
|
|
178
|
+
>
|
|
179
|
+
<option value="" disabled [selected]="!value">{{ placeholder }}</option>
|
|
180
|
+
<ng-content></ng-content>
|
|
181
|
+
</select>
|
|
182
|
+
|
|
183
|
+
<!-- File -->
|
|
184
|
+
<div *ngIf="type === 'file'">
|
|
185
|
+
<label
|
|
186
|
+
[for]="inputId"
|
|
187
|
+
class="inline-flex items-center px-4 py-2 bg-govbr-primary text-white rounded-govbr-pill cursor-pointer hover:bg-govbr-primary-dark transition-colors text-sm font-semibold"
|
|
188
|
+
>
|
|
189
|
+
<i class="fa-solid fa-upload mr-2"></i>
|
|
190
|
+
{{ placeholder || 'Selecionar arquivo' }}
|
|
191
|
+
</label>
|
|
192
|
+
<input
|
|
193
|
+
[id]="inputId"
|
|
194
|
+
type="file"
|
|
195
|
+
class="hidden"
|
|
196
|
+
[disabled]="isDisabled"
|
|
197
|
+
(change)="onFileChange($event)"
|
|
198
|
+
/>
|
|
199
|
+
<span *ngIf="fileName" class="ml-2 text-sm text-govbr-gray-60">{{ fileName }}</span>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
<!-- Text / Email / Password -->
|
|
203
|
+
<input
|
|
204
|
+
*ngIf="type !== 'select' && type !== 'file'"
|
|
205
|
+
[id]="inputId"
|
|
206
|
+
[type]="type"
|
|
207
|
+
[placeholder]="placeholder"
|
|
208
|
+
[disabled]="isDisabled"
|
|
209
|
+
[class]="inputClasses"
|
|
210
|
+
[value]="value"
|
|
211
|
+
(input)="onInputChange($event)"
|
|
212
|
+
(blur)="onTouched()"
|
|
213
|
+
/>
|
|
214
|
+
|
|
215
|
+
<span *ngIf="error" class="block mt-1 text-sm text-govbr-danger">
|
|
216
|
+
<i class="fa-solid fa-circle-exclamation mr-1"></i>{{ error }}
|
|
217
|
+
</span>
|
|
218
|
+
</div>
|
|
219
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
220
|
+
}
|
|
221
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrInputComponent, decorators: [{
|
|
222
|
+
type: Component,
|
|
223
|
+
args: [{
|
|
224
|
+
selector: 'br-input',
|
|
225
|
+
standalone: true,
|
|
226
|
+
imports: [CommonModule, FormsModule],
|
|
227
|
+
encapsulation: ViewEncapsulation.None,
|
|
228
|
+
providers: [
|
|
229
|
+
{
|
|
230
|
+
provide: NG_VALUE_ACCESSOR,
|
|
231
|
+
useExisting: forwardRef(() => BrInputComponent),
|
|
232
|
+
multi: true,
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
template: `
|
|
236
|
+
<div class="mb-4 font-rawline">
|
|
237
|
+
<label
|
|
238
|
+
*ngIf="label"
|
|
239
|
+
[for]="inputId"
|
|
240
|
+
class="block text-sm font-semibold text-govbr-gray-80 mb-1"
|
|
241
|
+
>
|
|
242
|
+
{{ label }}
|
|
243
|
+
<span *ngIf="required" class="text-govbr-danger">*</span>
|
|
244
|
+
</label>
|
|
245
|
+
|
|
246
|
+
<!-- Select -->
|
|
247
|
+
<select
|
|
248
|
+
*ngIf="type === 'select'"
|
|
249
|
+
[id]="inputId"
|
|
250
|
+
[disabled]="isDisabled"
|
|
251
|
+
[class]="inputClasses"
|
|
252
|
+
[value]="value"
|
|
253
|
+
(change)="onSelectChange($event)"
|
|
254
|
+
(blur)="onTouched()"
|
|
255
|
+
>
|
|
256
|
+
<option value="" disabled [selected]="!value">{{ placeholder }}</option>
|
|
257
|
+
<ng-content></ng-content>
|
|
258
|
+
</select>
|
|
259
|
+
|
|
260
|
+
<!-- File -->
|
|
261
|
+
<div *ngIf="type === 'file'">
|
|
262
|
+
<label
|
|
263
|
+
[for]="inputId"
|
|
264
|
+
class="inline-flex items-center px-4 py-2 bg-govbr-primary text-white rounded-govbr-pill cursor-pointer hover:bg-govbr-primary-dark transition-colors text-sm font-semibold"
|
|
265
|
+
>
|
|
266
|
+
<i class="fa-solid fa-upload mr-2"></i>
|
|
267
|
+
{{ placeholder || 'Selecionar arquivo' }}
|
|
268
|
+
</label>
|
|
269
|
+
<input
|
|
270
|
+
[id]="inputId"
|
|
271
|
+
type="file"
|
|
272
|
+
class="hidden"
|
|
273
|
+
[disabled]="isDisabled"
|
|
274
|
+
(change)="onFileChange($event)"
|
|
275
|
+
/>
|
|
276
|
+
<span *ngIf="fileName" class="ml-2 text-sm text-govbr-gray-60">{{ fileName }}</span>
|
|
277
|
+
</div>
|
|
278
|
+
|
|
279
|
+
<!-- Text / Email / Password -->
|
|
280
|
+
<input
|
|
281
|
+
*ngIf="type !== 'select' && type !== 'file'"
|
|
282
|
+
[id]="inputId"
|
|
283
|
+
[type]="type"
|
|
284
|
+
[placeholder]="placeholder"
|
|
285
|
+
[disabled]="isDisabled"
|
|
286
|
+
[class]="inputClasses"
|
|
287
|
+
[value]="value"
|
|
288
|
+
(input)="onInputChange($event)"
|
|
289
|
+
(blur)="onTouched()"
|
|
290
|
+
/>
|
|
291
|
+
|
|
292
|
+
<span *ngIf="error" class="block mt-1 text-sm text-govbr-danger">
|
|
293
|
+
<i class="fa-solid fa-circle-exclamation mr-1"></i>{{ error }}
|
|
294
|
+
</span>
|
|
295
|
+
</div>
|
|
296
|
+
`,
|
|
297
|
+
}]
|
|
298
|
+
}], propDecorators: { label: [{
|
|
299
|
+
type: Input
|
|
300
|
+
}], type: [{
|
|
301
|
+
type: Input
|
|
302
|
+
}], placeholder: [{
|
|
303
|
+
type: Input
|
|
304
|
+
}], required: [{
|
|
305
|
+
type: Input
|
|
306
|
+
}], error: [{
|
|
307
|
+
type: Input
|
|
308
|
+
}], fileSelected: [{
|
|
309
|
+
type: Output
|
|
310
|
+
}] } });
|
|
311
|
+
|
|
312
|
+
class BrBadgeComponent {
|
|
313
|
+
constructor() {
|
|
314
|
+
this.variant = 'primary';
|
|
315
|
+
}
|
|
316
|
+
get badgeClasses() {
|
|
317
|
+
const base = 'inline-flex items-center px-2.5 py-0.5 rounded-govbr-pill text-xs font-semibold font-rawline';
|
|
318
|
+
const variants = {
|
|
319
|
+
primary: 'bg-govbr-primary text-white',
|
|
320
|
+
success: 'bg-govbr-success text-white',
|
|
321
|
+
danger: 'bg-govbr-danger text-white',
|
|
322
|
+
warning: 'bg-govbr-warning-bg text-govbr-gray-80',
|
|
323
|
+
neutral: 'bg-govbr-gray-5 text-govbr-gray-80',
|
|
324
|
+
};
|
|
325
|
+
return `${base} ${variants[this.variant]}`;
|
|
326
|
+
}
|
|
327
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrBadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
328
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrBadgeComponent, isStandalone: true, selector: "br-badge", inputs: { variant: "variant" }, ngImport: i0, template: `
|
|
329
|
+
<span [class]="badgeClasses">
|
|
330
|
+
<ng-content></ng-content>
|
|
331
|
+
</span>
|
|
332
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
333
|
+
}
|
|
334
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrBadgeComponent, decorators: [{
|
|
335
|
+
type: Component,
|
|
336
|
+
args: [{
|
|
337
|
+
selector: 'br-badge',
|
|
338
|
+
standalone: true,
|
|
339
|
+
imports: [CommonModule],
|
|
340
|
+
encapsulation: ViewEncapsulation.None,
|
|
341
|
+
template: `
|
|
342
|
+
<span [class]="badgeClasses">
|
|
343
|
+
<ng-content></ng-content>
|
|
344
|
+
</span>
|
|
345
|
+
`,
|
|
346
|
+
}]
|
|
347
|
+
}], propDecorators: { variant: [{
|
|
348
|
+
type: Input
|
|
349
|
+
}] } });
|
|
350
|
+
|
|
351
|
+
class BrMessageComponent {
|
|
352
|
+
constructor() {
|
|
353
|
+
this.type = 'info';
|
|
354
|
+
this.dismissible = false;
|
|
355
|
+
this.dismissed = new EventEmitter();
|
|
356
|
+
this.visible = true;
|
|
357
|
+
}
|
|
358
|
+
get messageClasses() {
|
|
359
|
+
const base = 'p-4 rounded font-rawline border-l-4';
|
|
360
|
+
const styles = {
|
|
361
|
+
success: 'bg-green-50 border-govbr-success text-govbr-success',
|
|
362
|
+
danger: 'bg-red-50 border-govbr-danger text-govbr-danger',
|
|
363
|
+
warning: 'bg-govbr-warning-bg border-govbr-warning text-govbr-gray-80',
|
|
364
|
+
info: 'bg-govbr-info-bg border-govbr-info text-govbr-primary-dark',
|
|
365
|
+
};
|
|
366
|
+
return `${base} ${styles[this.type]}`;
|
|
367
|
+
}
|
|
368
|
+
get iconClass() {
|
|
369
|
+
const icons = {
|
|
370
|
+
success: 'fa-solid fa-circle-check',
|
|
371
|
+
danger: 'fa-solid fa-circle-xmark',
|
|
372
|
+
warning: 'fa-solid fa-triangle-exclamation',
|
|
373
|
+
info: 'fa-solid fa-circle-info',
|
|
374
|
+
};
|
|
375
|
+
return icons[this.type];
|
|
376
|
+
}
|
|
377
|
+
dismiss() {
|
|
378
|
+
this.visible = false;
|
|
379
|
+
this.dismissed.emit();
|
|
380
|
+
}
|
|
381
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrMessageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
382
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrMessageComponent, isStandalone: true, selector: "br-message", inputs: { type: "type", dismissible: "dismissible" }, outputs: { dismissed: "dismissed" }, ngImport: i0, template: `
|
|
383
|
+
<div *ngIf="visible" [class]="messageClasses" role="alert">
|
|
384
|
+
<div class="flex items-start">
|
|
385
|
+
<i [class]="iconClass + ' mt-0.5 mr-3 text-lg'"></i>
|
|
386
|
+
<div class="flex-1 text-sm">
|
|
387
|
+
<ng-content></ng-content>
|
|
388
|
+
</div>
|
|
389
|
+
<button
|
|
390
|
+
*ngIf="dismissible"
|
|
391
|
+
type="button"
|
|
392
|
+
class="ml-3 text-current opacity-60 hover:opacity-100 transition-opacity"
|
|
393
|
+
(click)="dismiss()"
|
|
394
|
+
aria-label="Fechar"
|
|
395
|
+
>
|
|
396
|
+
<i class="fa-solid fa-xmark"></i>
|
|
397
|
+
</button>
|
|
398
|
+
</div>
|
|
399
|
+
</div>
|
|
400
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
401
|
+
}
|
|
402
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrMessageComponent, decorators: [{
|
|
403
|
+
type: Component,
|
|
404
|
+
args: [{
|
|
405
|
+
selector: 'br-message',
|
|
406
|
+
standalone: true,
|
|
407
|
+
imports: [CommonModule],
|
|
408
|
+
encapsulation: ViewEncapsulation.None,
|
|
409
|
+
template: `
|
|
410
|
+
<div *ngIf="visible" [class]="messageClasses" role="alert">
|
|
411
|
+
<div class="flex items-start">
|
|
412
|
+
<i [class]="iconClass + ' mt-0.5 mr-3 text-lg'"></i>
|
|
413
|
+
<div class="flex-1 text-sm">
|
|
414
|
+
<ng-content></ng-content>
|
|
415
|
+
</div>
|
|
416
|
+
<button
|
|
417
|
+
*ngIf="dismissible"
|
|
418
|
+
type="button"
|
|
419
|
+
class="ml-3 text-current opacity-60 hover:opacity-100 transition-opacity"
|
|
420
|
+
(click)="dismiss()"
|
|
421
|
+
aria-label="Fechar"
|
|
422
|
+
>
|
|
423
|
+
<i class="fa-solid fa-xmark"></i>
|
|
424
|
+
</button>
|
|
425
|
+
</div>
|
|
426
|
+
</div>
|
|
427
|
+
`,
|
|
428
|
+
}]
|
|
429
|
+
}], propDecorators: { type: [{
|
|
430
|
+
type: Input
|
|
431
|
+
}], dismissible: [{
|
|
432
|
+
type: Input
|
|
433
|
+
}], dismissed: [{
|
|
434
|
+
type: Output
|
|
435
|
+
}] } });
|
|
436
|
+
|
|
437
|
+
class BrTableComponent {
|
|
438
|
+
constructor() {
|
|
439
|
+
this.headerVariant = 'blue';
|
|
440
|
+
this.page = 1;
|
|
441
|
+
this.totalPages = 1;
|
|
442
|
+
this.pageChange = new EventEmitter();
|
|
443
|
+
}
|
|
444
|
+
get visiblePages() {
|
|
445
|
+
const pages = [];
|
|
446
|
+
const start = Math.max(1, this.page - 2);
|
|
447
|
+
const end = Math.min(this.totalPages, this.page + 2);
|
|
448
|
+
for (let i = start; i <= end; i++) {
|
|
449
|
+
pages.push(i);
|
|
450
|
+
}
|
|
451
|
+
return pages;
|
|
452
|
+
}
|
|
453
|
+
goToPage(p) {
|
|
454
|
+
if (p >= 1 && p <= this.totalPages && p !== this.page) {
|
|
455
|
+
this.pageChange.emit(p);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
459
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrTableComponent, isStandalone: true, selector: "br-table", inputs: { headerVariant: "headerVariant", page: "page", totalPages: "totalPages" }, outputs: { pageChange: "pageChange" }, ngImport: i0, template: `
|
|
460
|
+
<div class="overflow-x-auto font-rawline" [attr.data-header]="headerVariant">
|
|
461
|
+
<table class="w-full text-sm text-left text-govbr-gray-80">
|
|
462
|
+
<ng-content></ng-content>
|
|
463
|
+
</table>
|
|
464
|
+
|
|
465
|
+
<nav
|
|
466
|
+
*ngIf="totalPages > 1"
|
|
467
|
+
class="flex items-center justify-between px-4 py-3 border-t border-govbr-gray-5"
|
|
468
|
+
aria-label="Paginacao"
|
|
469
|
+
>
|
|
470
|
+
<span class="text-sm text-govbr-gray-40">
|
|
471
|
+
Pagina {{ page }} de {{ totalPages }}
|
|
472
|
+
</span>
|
|
473
|
+
<div class="flex gap-1">
|
|
474
|
+
<button
|
|
475
|
+
type="button"
|
|
476
|
+
[disabled]="page <= 1"
|
|
477
|
+
(click)="goToPage(page - 1)"
|
|
478
|
+
class="px-3 py-1.5 text-sm rounded border transition-colors"
|
|
479
|
+
[class]="page <= 1
|
|
480
|
+
? 'border-govbr-gray-10 text-govbr-gray-20 cursor-not-allowed'
|
|
481
|
+
: 'border-govbr-gray-10 text-govbr-primary hover:bg-govbr-primary-lightest cursor-pointer'"
|
|
482
|
+
>
|
|
483
|
+
<i class="fa-solid fa-chevron-left"></i>
|
|
484
|
+
</button>
|
|
485
|
+
<button
|
|
486
|
+
*ngFor="let p of visiblePages"
|
|
487
|
+
type="button"
|
|
488
|
+
(click)="goToPage(p)"
|
|
489
|
+
class="px-3 py-1.5 text-sm rounded border transition-colors cursor-pointer"
|
|
490
|
+
[class]="p === page
|
|
491
|
+
? 'bg-govbr-primary text-white border-govbr-primary'
|
|
492
|
+
: 'border-govbr-gray-10 text-govbr-primary hover:bg-govbr-primary-lightest'"
|
|
493
|
+
>
|
|
494
|
+
{{ p }}
|
|
495
|
+
</button>
|
|
496
|
+
<button
|
|
497
|
+
type="button"
|
|
498
|
+
[disabled]="page >= totalPages"
|
|
499
|
+
(click)="goToPage(page + 1)"
|
|
500
|
+
class="px-3 py-1.5 text-sm rounded border transition-colors"
|
|
501
|
+
[class]="page >= totalPages
|
|
502
|
+
? 'border-govbr-gray-10 text-govbr-gray-20 cursor-not-allowed'
|
|
503
|
+
: 'border-govbr-gray-10 text-govbr-primary hover:bg-govbr-primary-lightest cursor-pointer'"
|
|
504
|
+
>
|
|
505
|
+
<i class="fa-solid fa-chevron-right"></i>
|
|
506
|
+
</button>
|
|
507
|
+
</div>
|
|
508
|
+
</nav>
|
|
509
|
+
</div>
|
|
510
|
+
`, isInline: true, styles: ["br-table table{border-collapse:collapse;border-spacing:0}br-table table thead th{background-color:var(--govbr-table-header-bg);color:var(--govbr-table-header-color);font-weight:var(--govbr-font-weight-semi-bold);font-size:var(--govbr-font-size-sm);line-height:var(--govbr-line-height-medium);padding:var(--govbr-spacing-4);text-align:left;border-bottom:var(--govbr-table-header-border)}br-table table thead th:first-child{border-radius:var(--govbr-table-header-radius) 0 0 0}br-table table thead th:last-child{border-radius:0 var(--govbr-table-header-radius) 0 0}br-table [data-header=light] table thead th{--govbr-table-header-bg: var(--govbr-bg);--govbr-table-header-color: var(--govbr-primary);--govbr-table-header-border: 2px solid var(--govbr-border-color);--govbr-table-header-radius: 0}br-table table tbody td{padding:var(--govbr-spacing-4);font-size:var(--govbr-font-size-sm);line-height:var(--govbr-line-height-medium);color:var(--govbr-table-cell-color);border-bottom:var(--govbr-table-cell-border);background-color:var(--govbr-table-row-bg)}br-table table tbody tr:nth-child(2n) td{background-color:var(--govbr-table-row-alt-bg)}br-table table tbody tr:hover td{background-color:var(--govbr-table-row-hover-bg)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
511
|
+
}
|
|
512
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrTableComponent, decorators: [{
|
|
513
|
+
type: Component,
|
|
514
|
+
args: [{ selector: 'br-table', standalone: true, imports: [CommonModule], encapsulation: ViewEncapsulation.None, template: `
|
|
515
|
+
<div class="overflow-x-auto font-rawline" [attr.data-header]="headerVariant">
|
|
516
|
+
<table class="w-full text-sm text-left text-govbr-gray-80">
|
|
517
|
+
<ng-content></ng-content>
|
|
518
|
+
</table>
|
|
519
|
+
|
|
520
|
+
<nav
|
|
521
|
+
*ngIf="totalPages > 1"
|
|
522
|
+
class="flex items-center justify-between px-4 py-3 border-t border-govbr-gray-5"
|
|
523
|
+
aria-label="Paginacao"
|
|
524
|
+
>
|
|
525
|
+
<span class="text-sm text-govbr-gray-40">
|
|
526
|
+
Pagina {{ page }} de {{ totalPages }}
|
|
527
|
+
</span>
|
|
528
|
+
<div class="flex gap-1">
|
|
529
|
+
<button
|
|
530
|
+
type="button"
|
|
531
|
+
[disabled]="page <= 1"
|
|
532
|
+
(click)="goToPage(page - 1)"
|
|
533
|
+
class="px-3 py-1.5 text-sm rounded border transition-colors"
|
|
534
|
+
[class]="page <= 1
|
|
535
|
+
? 'border-govbr-gray-10 text-govbr-gray-20 cursor-not-allowed'
|
|
536
|
+
: 'border-govbr-gray-10 text-govbr-primary hover:bg-govbr-primary-lightest cursor-pointer'"
|
|
537
|
+
>
|
|
538
|
+
<i class="fa-solid fa-chevron-left"></i>
|
|
539
|
+
</button>
|
|
540
|
+
<button
|
|
541
|
+
*ngFor="let p of visiblePages"
|
|
542
|
+
type="button"
|
|
543
|
+
(click)="goToPage(p)"
|
|
544
|
+
class="px-3 py-1.5 text-sm rounded border transition-colors cursor-pointer"
|
|
545
|
+
[class]="p === page
|
|
546
|
+
? 'bg-govbr-primary text-white border-govbr-primary'
|
|
547
|
+
: 'border-govbr-gray-10 text-govbr-primary hover:bg-govbr-primary-lightest'"
|
|
548
|
+
>
|
|
549
|
+
{{ p }}
|
|
550
|
+
</button>
|
|
551
|
+
<button
|
|
552
|
+
type="button"
|
|
553
|
+
[disabled]="page >= totalPages"
|
|
554
|
+
(click)="goToPage(page + 1)"
|
|
555
|
+
class="px-3 py-1.5 text-sm rounded border transition-colors"
|
|
556
|
+
[class]="page >= totalPages
|
|
557
|
+
? 'border-govbr-gray-10 text-govbr-gray-20 cursor-not-allowed'
|
|
558
|
+
: 'border-govbr-gray-10 text-govbr-primary hover:bg-govbr-primary-lightest cursor-pointer'"
|
|
559
|
+
>
|
|
560
|
+
<i class="fa-solid fa-chevron-right"></i>
|
|
561
|
+
</button>
|
|
562
|
+
</div>
|
|
563
|
+
</nav>
|
|
564
|
+
</div>
|
|
565
|
+
`, styles: ["br-table table{border-collapse:collapse;border-spacing:0}br-table table thead th{background-color:var(--govbr-table-header-bg);color:var(--govbr-table-header-color);font-weight:var(--govbr-font-weight-semi-bold);font-size:var(--govbr-font-size-sm);line-height:var(--govbr-line-height-medium);padding:var(--govbr-spacing-4);text-align:left;border-bottom:var(--govbr-table-header-border)}br-table table thead th:first-child{border-radius:var(--govbr-table-header-radius) 0 0 0}br-table table thead th:last-child{border-radius:0 var(--govbr-table-header-radius) 0 0}br-table [data-header=light] table thead th{--govbr-table-header-bg: var(--govbr-bg);--govbr-table-header-color: var(--govbr-primary);--govbr-table-header-border: 2px solid var(--govbr-border-color);--govbr-table-header-radius: 0}br-table table tbody td{padding:var(--govbr-spacing-4);font-size:var(--govbr-font-size-sm);line-height:var(--govbr-line-height-medium);color:var(--govbr-table-cell-color);border-bottom:var(--govbr-table-cell-border);background-color:var(--govbr-table-row-bg)}br-table table tbody tr:nth-child(2n) td{background-color:var(--govbr-table-row-alt-bg)}br-table table tbody tr:hover td{background-color:var(--govbr-table-row-hover-bg)}\n"] }]
|
|
566
|
+
}], propDecorators: { headerVariant: [{
|
|
567
|
+
type: Input
|
|
568
|
+
}], page: [{
|
|
569
|
+
type: Input
|
|
570
|
+
}], totalPages: [{
|
|
571
|
+
type: Input
|
|
572
|
+
}], pageChange: [{
|
|
573
|
+
type: Output
|
|
574
|
+
}] } });
|
|
575
|
+
|
|
576
|
+
class BrCardComponent {
|
|
577
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
578
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrCardComponent, isStandalone: true, selector: "br-card", inputs: { icon: "icon", linkText: "linkText", linkRoute: "linkRoute" }, ngImport: i0, template: `
|
|
579
|
+
<div class="bg-white rounded border border-govbr-gray-5 shadow-sm hover:shadow-md transition-shadow font-rawline overflow-hidden">
|
|
580
|
+
<div class="p-6">
|
|
581
|
+
<div *ngIf="icon" class="mb-3">
|
|
582
|
+
<i [class]="'fa-solid fa-' + icon + ' text-govbr-primary text-2xl'"></i>
|
|
583
|
+
</div>
|
|
584
|
+
<ng-content></ng-content>
|
|
585
|
+
</div>
|
|
586
|
+
<div *ngIf="linkText" class="px-6 pb-4">
|
|
587
|
+
<a
|
|
588
|
+
*ngIf="linkRoute"
|
|
589
|
+
[routerLink]="linkRoute"
|
|
590
|
+
class="text-govbr-primary text-sm font-semibold hover:underline inline-flex items-center"
|
|
591
|
+
>
|
|
592
|
+
{{ linkText }}
|
|
593
|
+
<i class="fa-solid fa-arrow-right ml-1 text-xs"></i>
|
|
594
|
+
</a>
|
|
595
|
+
</div>
|
|
596
|
+
</div>
|
|
597
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
598
|
+
}
|
|
599
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrCardComponent, decorators: [{
|
|
600
|
+
type: Component,
|
|
601
|
+
args: [{
|
|
602
|
+
selector: 'br-card',
|
|
603
|
+
standalone: true,
|
|
604
|
+
imports: [CommonModule, RouterModule],
|
|
605
|
+
encapsulation: ViewEncapsulation.None,
|
|
606
|
+
template: `
|
|
607
|
+
<div class="bg-white rounded border border-govbr-gray-5 shadow-sm hover:shadow-md transition-shadow font-rawline overflow-hidden">
|
|
608
|
+
<div class="p-6">
|
|
609
|
+
<div *ngIf="icon" class="mb-3">
|
|
610
|
+
<i [class]="'fa-solid fa-' + icon + ' text-govbr-primary text-2xl'"></i>
|
|
611
|
+
</div>
|
|
612
|
+
<ng-content></ng-content>
|
|
613
|
+
</div>
|
|
614
|
+
<div *ngIf="linkText" class="px-6 pb-4">
|
|
615
|
+
<a
|
|
616
|
+
*ngIf="linkRoute"
|
|
617
|
+
[routerLink]="linkRoute"
|
|
618
|
+
class="text-govbr-primary text-sm font-semibold hover:underline inline-flex items-center"
|
|
619
|
+
>
|
|
620
|
+
{{ linkText }}
|
|
621
|
+
<i class="fa-solid fa-arrow-right ml-1 text-xs"></i>
|
|
622
|
+
</a>
|
|
623
|
+
</div>
|
|
624
|
+
</div>
|
|
625
|
+
`,
|
|
626
|
+
}]
|
|
627
|
+
}], propDecorators: { icon: [{
|
|
628
|
+
type: Input
|
|
629
|
+
}], linkText: [{
|
|
630
|
+
type: Input
|
|
631
|
+
}], linkRoute: [{
|
|
632
|
+
type: Input
|
|
633
|
+
}] } });
|
|
634
|
+
|
|
635
|
+
class BrHeaderComponent {
|
|
636
|
+
constructor() {
|
|
637
|
+
this.systemTitle = '';
|
|
638
|
+
this.logoSrc = '';
|
|
639
|
+
this.logout = new EventEmitter();
|
|
640
|
+
}
|
|
641
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
642
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrHeaderComponent, isStandalone: true, selector: "br-header", inputs: { systemTitle: "systemTitle", systemSubtitle: "systemSubtitle", logoSrc: "logoSrc", userName: "userName", userRole: "userRole" }, outputs: { logout: "logout" }, queries: [{ propertyName: "quickAccessItems", first: true, predicate: ["quickAccessItems"], descendants: true }], ngImport: i0, template: `
|
|
643
|
+
<!-- Top bar -->
|
|
644
|
+
<div style="background-color:#071d41;color:#ffffff;font-size:12px;padding:4px 16px;font-family:'Rawline','Raleway',sans-serif;">
|
|
645
|
+
<div style="max-width:1280px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;">
|
|
646
|
+
<ng-container *ngIf="quickAccessItems; else defaultQuickAccess">
|
|
647
|
+
<ng-container *ngTemplateOutlet="quickAccessItems"></ng-container>
|
|
648
|
+
</ng-container>
|
|
649
|
+
<ng-template #defaultQuickAccess>
|
|
650
|
+
<span></span>
|
|
651
|
+
</ng-template>
|
|
652
|
+
</div>
|
|
653
|
+
</div>
|
|
654
|
+
|
|
655
|
+
<!-- Main header -->
|
|
656
|
+
<header style="background-color:#1351b4;color:#ffffff;font-family:'Rawline','Raleway',sans-serif;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1);">
|
|
657
|
+
<div style="max-width:1280px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;padding:12px 16px;">
|
|
658
|
+
<!-- Logo + Title -->
|
|
659
|
+
<div style="display:flex;align-items:center;gap:16px;">
|
|
660
|
+
<img
|
|
661
|
+
*ngIf="logoSrc"
|
|
662
|
+
[src]="logoSrc"
|
|
663
|
+
[alt]="systemTitle"
|
|
664
|
+
style="height:40px;"
|
|
665
|
+
/>
|
|
666
|
+
<div>
|
|
667
|
+
<h1 style="font-size:18px;font-weight:700;line-height:1.25;color:#ffffff;margin:0;">{{ systemTitle }}</h1>
|
|
668
|
+
<p *ngIf="systemSubtitle" style="font-size:12px;opacity:0.8;color:#ffffff;margin:0;">{{ systemSubtitle }}</p>
|
|
669
|
+
</div>
|
|
670
|
+
</div>
|
|
671
|
+
|
|
672
|
+
<!-- User area -->
|
|
673
|
+
<div *ngIf="userName" style="display:flex;align-items:center;gap:12px;">
|
|
674
|
+
<div style="text-align:right;">
|
|
675
|
+
<span style="display:block;font-size:14px;font-weight:600;color:#ffffff;">{{ userName }}</span>
|
|
676
|
+
<span *ngIf="userRole" style="display:block;font-size:12px;opacity:0.8;color:#ffffff;">{{ userRole }}</span>
|
|
677
|
+
</div>
|
|
678
|
+
<button
|
|
679
|
+
type="button"
|
|
680
|
+
style="margin-left:8px;padding:8px;border-radius:50%;border:none;background:transparent;color:#ffffff;cursor:pointer;"
|
|
681
|
+
(click)="logout.emit()"
|
|
682
|
+
title="Sair"
|
|
683
|
+
>
|
|
684
|
+
<i class="fa-solid fa-right-from-bracket"></i>
|
|
685
|
+
</button>
|
|
686
|
+
</div>
|
|
687
|
+
</div>
|
|
688
|
+
</header>
|
|
689
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
690
|
+
}
|
|
691
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrHeaderComponent, decorators: [{
|
|
692
|
+
type: Component,
|
|
693
|
+
args: [{
|
|
694
|
+
selector: 'br-header',
|
|
695
|
+
standalone: true,
|
|
696
|
+
imports: [CommonModule],
|
|
697
|
+
encapsulation: ViewEncapsulation.None,
|
|
698
|
+
template: `
|
|
699
|
+
<!-- Top bar -->
|
|
700
|
+
<div style="background-color:#071d41;color:#ffffff;font-size:12px;padding:4px 16px;font-family:'Rawline','Raleway',sans-serif;">
|
|
701
|
+
<div style="max-width:1280px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;">
|
|
702
|
+
<ng-container *ngIf="quickAccessItems; else defaultQuickAccess">
|
|
703
|
+
<ng-container *ngTemplateOutlet="quickAccessItems"></ng-container>
|
|
704
|
+
</ng-container>
|
|
705
|
+
<ng-template #defaultQuickAccess>
|
|
706
|
+
<span></span>
|
|
707
|
+
</ng-template>
|
|
708
|
+
</div>
|
|
709
|
+
</div>
|
|
710
|
+
|
|
711
|
+
<!-- Main header -->
|
|
712
|
+
<header style="background-color:#1351b4;color:#ffffff;font-family:'Rawline','Raleway',sans-serif;box-shadow:0 4px 6px -1px rgba(0,0,0,0.1);">
|
|
713
|
+
<div style="max-width:1280px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;padding:12px 16px;">
|
|
714
|
+
<!-- Logo + Title -->
|
|
715
|
+
<div style="display:flex;align-items:center;gap:16px;">
|
|
716
|
+
<img
|
|
717
|
+
*ngIf="logoSrc"
|
|
718
|
+
[src]="logoSrc"
|
|
719
|
+
[alt]="systemTitle"
|
|
720
|
+
style="height:40px;"
|
|
721
|
+
/>
|
|
722
|
+
<div>
|
|
723
|
+
<h1 style="font-size:18px;font-weight:700;line-height:1.25;color:#ffffff;margin:0;">{{ systemTitle }}</h1>
|
|
724
|
+
<p *ngIf="systemSubtitle" style="font-size:12px;opacity:0.8;color:#ffffff;margin:0;">{{ systemSubtitle }}</p>
|
|
725
|
+
</div>
|
|
726
|
+
</div>
|
|
727
|
+
|
|
728
|
+
<!-- User area -->
|
|
729
|
+
<div *ngIf="userName" style="display:flex;align-items:center;gap:12px;">
|
|
730
|
+
<div style="text-align:right;">
|
|
731
|
+
<span style="display:block;font-size:14px;font-weight:600;color:#ffffff;">{{ userName }}</span>
|
|
732
|
+
<span *ngIf="userRole" style="display:block;font-size:12px;opacity:0.8;color:#ffffff;">{{ userRole }}</span>
|
|
733
|
+
</div>
|
|
734
|
+
<button
|
|
735
|
+
type="button"
|
|
736
|
+
style="margin-left:8px;padding:8px;border-radius:50%;border:none;background:transparent;color:#ffffff;cursor:pointer;"
|
|
737
|
+
(click)="logout.emit()"
|
|
738
|
+
title="Sair"
|
|
739
|
+
>
|
|
740
|
+
<i class="fa-solid fa-right-from-bracket"></i>
|
|
741
|
+
</button>
|
|
742
|
+
</div>
|
|
743
|
+
</div>
|
|
744
|
+
</header>
|
|
745
|
+
`,
|
|
746
|
+
}]
|
|
747
|
+
}], propDecorators: { systemTitle: [{
|
|
748
|
+
type: Input
|
|
749
|
+
}], systemSubtitle: [{
|
|
750
|
+
type: Input
|
|
751
|
+
}], logoSrc: [{
|
|
752
|
+
type: Input
|
|
753
|
+
}], userName: [{
|
|
754
|
+
type: Input
|
|
755
|
+
}], userRole: [{
|
|
756
|
+
type: Input
|
|
757
|
+
}], logout: [{
|
|
758
|
+
type: Output
|
|
759
|
+
}], quickAccessItems: [{
|
|
760
|
+
type: ContentChild,
|
|
761
|
+
args: ['quickAccessItems']
|
|
762
|
+
}] } });
|
|
763
|
+
|
|
764
|
+
class BrFooterComponent {
|
|
765
|
+
constructor() {
|
|
766
|
+
this.logoSrc = '';
|
|
767
|
+
}
|
|
768
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
769
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrFooterComponent, isStandalone: true, selector: "br-footer", inputs: { logoSrc: "logoSrc" }, ngImport: i0, template: `
|
|
770
|
+
<footer class="bg-govbr-primary-darkest text-white font-rawline mt-auto">
|
|
771
|
+
<div class="max-w-screen-xl mx-auto px-4 py-6">
|
|
772
|
+
<div class="flex flex-col md:flex-row items-center justify-between gap-4">
|
|
773
|
+
<img
|
|
774
|
+
*ngIf="logoSrc"
|
|
775
|
+
[src]="logoSrc"
|
|
776
|
+
alt="Logo"
|
|
777
|
+
class="h-8 brightness-0 invert"
|
|
778
|
+
/>
|
|
779
|
+
<div class="text-center md:text-right text-sm opacity-80">
|
|
780
|
+
<ng-content></ng-content>
|
|
781
|
+
</div>
|
|
782
|
+
</div>
|
|
783
|
+
</div>
|
|
784
|
+
</footer>
|
|
785
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
786
|
+
}
|
|
787
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrFooterComponent, decorators: [{
|
|
788
|
+
type: Component,
|
|
789
|
+
args: [{
|
|
790
|
+
selector: 'br-footer',
|
|
791
|
+
standalone: true,
|
|
792
|
+
imports: [CommonModule],
|
|
793
|
+
encapsulation: ViewEncapsulation.None,
|
|
794
|
+
template: `
|
|
795
|
+
<footer class="bg-govbr-primary-darkest text-white font-rawline mt-auto">
|
|
796
|
+
<div class="max-w-screen-xl mx-auto px-4 py-6">
|
|
797
|
+
<div class="flex flex-col md:flex-row items-center justify-between gap-4">
|
|
798
|
+
<img
|
|
799
|
+
*ngIf="logoSrc"
|
|
800
|
+
[src]="logoSrc"
|
|
801
|
+
alt="Logo"
|
|
802
|
+
class="h-8 brightness-0 invert"
|
|
803
|
+
/>
|
|
804
|
+
<div class="text-center md:text-right text-sm opacity-80">
|
|
805
|
+
<ng-content></ng-content>
|
|
806
|
+
</div>
|
|
807
|
+
</div>
|
|
808
|
+
</div>
|
|
809
|
+
</footer>
|
|
810
|
+
`,
|
|
811
|
+
}]
|
|
812
|
+
}], propDecorators: { logoSrc: [{
|
|
813
|
+
type: Input
|
|
814
|
+
}] } });
|
|
815
|
+
|
|
816
|
+
class BrMenuComponent {
|
|
817
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
818
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrMenuComponent, isStandalone: true, selector: "br-menu", ngImport: i0, template: `
|
|
819
|
+
<nav class="bg-white border-r border-govbr-gray-5 font-rawline min-h-full w-64">
|
|
820
|
+
<ng-content></ng-content>
|
|
821
|
+
</nav>
|
|
822
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
823
|
+
}
|
|
824
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrMenuComponent, decorators: [{
|
|
825
|
+
type: Component,
|
|
826
|
+
args: [{
|
|
827
|
+
selector: 'br-menu',
|
|
828
|
+
standalone: true,
|
|
829
|
+
imports: [CommonModule],
|
|
830
|
+
encapsulation: ViewEncapsulation.None,
|
|
831
|
+
template: `
|
|
832
|
+
<nav class="bg-white border-r border-govbr-gray-5 font-rawline min-h-full w-64">
|
|
833
|
+
<ng-content></ng-content>
|
|
834
|
+
</nav>
|
|
835
|
+
`,
|
|
836
|
+
}]
|
|
837
|
+
}] });
|
|
838
|
+
|
|
839
|
+
class BrMenuItemComponent {
|
|
840
|
+
constructor() {
|
|
841
|
+
this.route = '/';
|
|
842
|
+
this.label = '';
|
|
843
|
+
}
|
|
844
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
845
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrMenuItemComponent, isStandalone: true, selector: "br-menu-item", inputs: { route: "route", label: "label", icon: "icon" }, ngImport: i0, template: `
|
|
846
|
+
<a
|
|
847
|
+
[routerLink]="route"
|
|
848
|
+
routerLinkActive="bg-govbr-primary text-white"
|
|
849
|
+
class="flex items-center gap-3 px-4 py-3 text-sm text-govbr-gray-80 hover:bg-govbr-primary-lightest hover:text-govbr-primary transition-colors"
|
|
850
|
+
>
|
|
851
|
+
<i *ngIf="icon" [class]="'fa-solid fa-' + icon + ' w-5 text-center'"></i>
|
|
852
|
+
<span>{{ label }}</span>
|
|
853
|
+
</a>
|
|
854
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2$1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2$1.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
855
|
+
}
|
|
856
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrMenuItemComponent, decorators: [{
|
|
857
|
+
type: Component,
|
|
858
|
+
args: [{
|
|
859
|
+
selector: 'br-menu-item',
|
|
860
|
+
standalone: true,
|
|
861
|
+
imports: [CommonModule, RouterModule],
|
|
862
|
+
encapsulation: ViewEncapsulation.None,
|
|
863
|
+
template: `
|
|
864
|
+
<a
|
|
865
|
+
[routerLink]="route"
|
|
866
|
+
routerLinkActive="bg-govbr-primary text-white"
|
|
867
|
+
class="flex items-center gap-3 px-4 py-3 text-sm text-govbr-gray-80 hover:bg-govbr-primary-lightest hover:text-govbr-primary transition-colors"
|
|
868
|
+
>
|
|
869
|
+
<i *ngIf="icon" [class]="'fa-solid fa-' + icon + ' w-5 text-center'"></i>
|
|
870
|
+
<span>{{ label }}</span>
|
|
871
|
+
</a>
|
|
872
|
+
`,
|
|
873
|
+
}]
|
|
874
|
+
}], propDecorators: { route: [{
|
|
875
|
+
type: Input
|
|
876
|
+
}], label: [{
|
|
877
|
+
type: Input
|
|
878
|
+
}], icon: [{
|
|
879
|
+
type: Input
|
|
880
|
+
}] } });
|
|
881
|
+
|
|
882
|
+
class BrLayoutComponent {
|
|
883
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
884
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: BrLayoutComponent, isStandalone: true, selector: "br-layout", ngImport: i0, template: `
|
|
885
|
+
<div class="flex flex-col min-h-screen font-rawline">
|
|
886
|
+
<!-- Header slot -->
|
|
887
|
+
<ng-content select="br-header"></ng-content>
|
|
888
|
+
|
|
889
|
+
<div class="flex flex-1">
|
|
890
|
+
<!-- Menu slot -->
|
|
891
|
+
<ng-content select="br-menu"></ng-content>
|
|
892
|
+
|
|
893
|
+
<!-- Main content -->
|
|
894
|
+
<main class="flex-1 bg-govbr-gray-2 p-6">
|
|
895
|
+
<ng-content></ng-content>
|
|
896
|
+
</main>
|
|
897
|
+
</div>
|
|
898
|
+
|
|
899
|
+
<!-- Footer slot -->
|
|
900
|
+
<ng-content select="br-footer"></ng-content>
|
|
901
|
+
</div>
|
|
902
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
903
|
+
}
|
|
904
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrLayoutComponent, decorators: [{
|
|
905
|
+
type: Component,
|
|
906
|
+
args: [{
|
|
907
|
+
selector: 'br-layout',
|
|
908
|
+
standalone: true,
|
|
909
|
+
imports: [CommonModule],
|
|
910
|
+
encapsulation: ViewEncapsulation.None,
|
|
911
|
+
template: `
|
|
912
|
+
<div class="flex flex-col min-h-screen font-rawline">
|
|
913
|
+
<!-- Header slot -->
|
|
914
|
+
<ng-content select="br-header"></ng-content>
|
|
915
|
+
|
|
916
|
+
<div class="flex flex-1">
|
|
917
|
+
<!-- Menu slot -->
|
|
918
|
+
<ng-content select="br-menu"></ng-content>
|
|
919
|
+
|
|
920
|
+
<!-- Main content -->
|
|
921
|
+
<main class="flex-1 bg-govbr-gray-2 p-6">
|
|
922
|
+
<ng-content></ng-content>
|
|
923
|
+
</main>
|
|
924
|
+
</div>
|
|
925
|
+
|
|
926
|
+
<!-- Footer slot -->
|
|
927
|
+
<ng-content select="br-footer"></ng-content>
|
|
928
|
+
</div>
|
|
929
|
+
`,
|
|
930
|
+
}]
|
|
931
|
+
}] });
|
|
932
|
+
|
|
933
|
+
/*
|
|
934
|
+
* Public API Surface of @aspect-br/ng-govbr-tw
|
|
935
|
+
*/
|
|
936
|
+
// Components
|
|
937
|
+
|
|
938
|
+
/**
|
|
939
|
+
* Generated bundle index. Do not edit.
|
|
940
|
+
*/
|
|
941
|
+
|
|
942
|
+
export { BrBadgeComponent, BrButtonComponent, BrCardComponent, BrFooterComponent, BrHeaderComponent, BrInputComponent, BrLayoutComponent, BrMenuComponent, BrMenuItemComponent, BrMessageComponent, BrTableComponent };
|
|
943
|
+
//# sourceMappingURL=schenkerjon-ng-govbr-tw.mjs.map
|