tailjng 0.1.7 → 0.1.9
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 +15 -1
- package/cli/settings/colors-config-utils.js +26 -3
- package/cli/templates/app.generator.js +6 -3
- package/package.json +1 -1
- package/src/colors.safelist.css +1 -1
- package/src/lib/components/.config/colors/README.md +2 -0
- package/src/lib/components/.config/colors/colors.safelist.css +1 -1
- package/src/lib/components/alert/alert-dialog/dialog-alert.component.css +0 -71
- package/src/lib/components/alert/alert-dialog/dialog-alert.component.html +7 -7
- package/src/lib/components/alert/alert-toast/toast-alert.component.css +0 -138
- package/src/lib/components/alert/alert-toast/toast-alert.component.html +12 -9
- package/src/lib/components/checkbox/checkbox-input/input-checkbox.component.css +0 -67
- package/src/lib/components/checkbox/checkbox-input/input-checkbox.component.html +11 -7
- package/src/lib/components/checkbox/checkbox-switch/switch-checkbox.component.css +3 -53
- package/src/lib/components/checkbox/checkbox-switch/switch-checkbox.component.html +17 -6
- package/src/lib/components/checkbox/checkbox-switch/switch-checkbox.component.ts +7 -0
- package/src/lib/components/coach-mark/coach-mark.component.html +2 -2
- package/src/lib/components/coach-mark/coach-mark.component.scss +1 -7
- package/src/lib/components/dialog/dialog.component.css +0 -102
- package/src/lib/components/dialog/dialog.component.html +17 -6
- package/src/lib/components/filter/filter-complete/complete-filter.component.html +5 -5
- package/src/lib/components/filter/filter-complete/complete-filter.component.scss +0 -10
- package/src/lib/components/form/form-sidebar/sidebar-form.component.css +23 -254
- package/src/lib/components/form/form-sidebar/sidebar-form.component.html +22 -10
- package/src/lib/components/form/form-sidebar/sidebar-form.component.ts +13 -8
- package/src/lib/components/input/input/input.component.css +0 -14
- package/src/lib/components/input/input/input.component.html +1 -1
- package/src/lib/components/input/input-file/file-input.component.ts +1 -1
- package/src/lib/components/label/label.component.ts +24 -0
- package/src/lib/components/menu/options-coach-menu/options-coach-menu.component.html +2 -2
- package/src/lib/components/menu/options-coach-menu/options-coach-menu.component.ts +2 -2
- package/src/lib/components/progress-bar/progress-bar.component.css +0 -11
- package/src/lib/components/progress-bar/progress-bar.component.html +3 -3
- package/src/lib/components/select/select-dropdown/dropdown-select.component.css +0 -6
- package/src/lib/components/select/select-dropdown/dropdown-select.component.html +3 -3
- package/src/lib/components/select/select-dropdown/dropdown-select.component.ts +1 -1
- package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.css +0 -6
- package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.html +3 -3
- package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.ts +1 -1
- package/src/lib/components/select/select-multi-table/multi-table-select.component.css +0 -6
- package/src/lib/components/select/select-multi-table/multi-table-select.component.html +2 -2
- package/src/lib/components/sidebar/sidebar-static/static-sidebar.component.css +5 -62
- package/src/lib/components/sidebar/sidebar-static/static-sidebar.component.html +16 -6
- package/src/lib/components/table/table-complete/complete-table.component.html +6 -6
- package/src/lib/components/table/table-crud-complete/complete-crud-table.component.html +14 -14
- package/src/lib/components/table/table-crud-complete/complete-crud-table.component.scss +0 -63
- package/src/lib/components/table/table-crud-complete/complete-crud-table.component.ts +2 -2
- package/src/lib/components/theme-generator/theme-generator.component.html +5 -10
- package/src/lib/components/toggle-radio/shared/toggle-options.util.ts +19 -1
- package/src/lib/components/toggle-radio/toggle-radio/toggle-radio.component.css +0 -113
- package/src/lib/components/toggle-radio/toggle-radio/toggle-radio.component.html +22 -9
- package/src/lib/components/toggle-radio/toggle-radio/toggle-radio.component.ts +3 -9
- package/src/lib/components/toggle-radio/toggle-segment/segment-toggle.component.css +0 -74
- package/src/lib/components/toggle-radio/toggle-segment/segment-toggle.component.html +14 -4
- package/src/lib/components/toggle-radio/toggle-segment/segment-toggle.component.ts +3 -9
- package/src/lib/components/viewer/viewer-image/image-viewer.component.css +0 -76
- package/src/lib/components/viewer/viewer-image/image-viewer.component.html +27 -10
- package/src/lib/components/viewer/viewer-pdf/pdf-viewer.component.css +0 -152
- package/src/lib/components/viewer/viewer-pdf/pdf-viewer.component.html +33 -12
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
@if (openForm) {
|
|
2
2
|
<div
|
|
3
|
-
class="
|
|
3
|
+
class="fixed inset-0 z-[999] bg-black/50 backdrop-blur-[1px] animate-sidebar-overlay-in"
|
|
4
4
|
aria-hidden="true"
|
|
5
5
|
(click)="onOverlayClick()"
|
|
6
6
|
></div>
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
<ng-template #sidebarContent>
|
|
10
|
-
<header
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
<header
|
|
11
|
+
class="flex shrink-0 items-center gap-3 min-h-[3.25rem] border-b border-border bg-primary py-2.5 pr-3 pl-4 dark:border-dark-border dark:bg-dark-primary"
|
|
12
|
+
>
|
|
13
|
+
<div class="inline-flex min-w-0 flex-1 items-center gap-1.5">
|
|
14
|
+
<h2
|
|
15
|
+
class="m-0 min-w-0 flex-1 truncate text-[0.9375rem] font-semibold leading-snug tracking-tight text-white dark:text-dark-foreground"
|
|
16
|
+
>
|
|
17
|
+
{{ displayTitle }}
|
|
18
|
+
</h2>
|
|
13
19
|
|
|
14
20
|
<JButton
|
|
15
21
|
jTooltip="Información"
|
|
@@ -19,12 +25,12 @@
|
|
|
19
25
|
coachPosition="bottom"
|
|
20
26
|
coachTrigger="click"
|
|
21
27
|
[icon]="Icons.Info"
|
|
22
|
-
classes="border-none shadow-none p-0 m-0 h-5 w-5 opacity-80!"
|
|
28
|
+
classes="text-white border-none shadow-none p-0 m-0 h-5 w-5 opacity-80!"
|
|
23
29
|
/>
|
|
24
30
|
</div>
|
|
25
31
|
|
|
26
32
|
<ng-template #coachLegendTpl>
|
|
27
|
-
<div class="
|
|
33
|
+
<div class="text-xs leading-5">
|
|
28
34
|
<span>
|
|
29
35
|
Las etiquetas con <span class="text-[10px]">✱</span> indican campos
|
|
30
36
|
requeridos.
|
|
@@ -44,19 +50,21 @@
|
|
|
44
50
|
</div>
|
|
45
51
|
</ng-template>
|
|
46
52
|
|
|
47
|
-
<div class="
|
|
53
|
+
<div class="inline-flex shrink-0 items-center gap-2">
|
|
48
54
|
@for (cb of visibleCheckboxes; track $index) {
|
|
49
55
|
<JSwitchCheckbox
|
|
50
56
|
[title]="cb.title"
|
|
51
57
|
[isChecked]="cb.isChecked"
|
|
52
58
|
[isLoading]="cb.isLoading"
|
|
53
59
|
(click)="cb.onClick(!cb.isChecked, $index)"
|
|
60
|
+
classes="text-white!"
|
|
61
|
+
classesText="text-white!"
|
|
54
62
|
/>
|
|
55
63
|
}
|
|
56
64
|
|
|
57
65
|
<button
|
|
58
66
|
type="button"
|
|
59
|
-
class="
|
|
67
|
+
class="inline-flex h-8 w-8 shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-dark-primary/30 dark:bg-primary/30 p-0 leading-none text-white/70 transition-[color,background-color,transform] duration-150 hover:bg-dark-primary/80 hover:dark:bg-primary/80 hover:text-white active:scale-[0.94] focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring dark:hover:text-dark-foreground"
|
|
60
68
|
aria-label="Cerrar"
|
|
61
69
|
(click)="onClose()"
|
|
62
70
|
>
|
|
@@ -70,14 +78,18 @@
|
|
|
70
78
|
</div>
|
|
71
79
|
</header>
|
|
72
80
|
|
|
73
|
-
<div
|
|
81
|
+
<div
|
|
82
|
+
class="scroll-element min-h-0 flex-1 overflow-x-hidden overflow-y-auto p-4 text-foreground dark:text-dark-foreground bg-white dark:bg-foreground"
|
|
83
|
+
>
|
|
74
84
|
@if (formTemplate) {
|
|
75
85
|
<ng-container [ngTemplateOutlet]="formTemplate" />
|
|
76
86
|
}
|
|
77
87
|
</div>
|
|
78
88
|
|
|
79
89
|
@if (showFooter) {
|
|
80
|
-
<footer
|
|
90
|
+
<footer
|
|
91
|
+
class="flex shrink-0 justify-center gap-3 border-t border-border bg-[color-mix(in_srgb,var(--color-muted)_18%,var(--color-background))] p-4 dark:border-dark-border dark:bg-[color-mix(in_srgb,var(--color-dark-muted)_22%,var(--color-dark-background))]"
|
|
92
|
+
>
|
|
81
93
|
<JButton
|
|
82
94
|
type="submit"
|
|
83
95
|
classes="primary"
|
|
@@ -105,16 +105,21 @@ export class JSidebarFormComponent {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
get panelClasses(): Record<string, boolean> {
|
|
108
|
+
const sizeClass: Record<FormSidebarSize, string> = {
|
|
109
|
+
small: 'w-[22em]',
|
|
110
|
+
medium: 'w-[30em]',
|
|
111
|
+
large: 'w-[47em]',
|
|
112
|
+
xlarge: 'w-[65em]',
|
|
113
|
+
};
|
|
114
|
+
|
|
108
115
|
return {
|
|
109
|
-
'
|
|
110
|
-
|
|
111
|
-
'
|
|
112
|
-
'
|
|
113
|
-
'j-form-sidebar--medium': this.size === 'medium',
|
|
114
|
-
'j-form-sidebar--large': this.size === 'large',
|
|
115
|
-
'j-form-sidebar--xlarge': this.size === 'xlarge',
|
|
116
|
+
'fixed top-0 z-[999] flex h-full max-w-full flex-col overflow-hidden border border-border bg-background dark:border-dark-border dark:bg-dark-background max-md:w-full! max-md:max-w-full max-md:rounded-none': true,
|
|
117
|
+
[sizeClass[this.size]]: true,
|
|
118
|
+
'right-0 border-r-0 rounded-l-xl shadow-[-8px_0_32px_rgb(0_0_0/0.12)] dark:shadow-[-8px_0_32px_rgb(0_0_0/0.35)] max-md:border-l-0': this.position === 'right',
|
|
119
|
+
'left-0 border-l-0 rounded-r-xl shadow-[8px_0_32px_rgb(0_0_0/0.12)] dark:shadow-[8px_0_32px_rgb(0_0_0/0.35)] max-md:border-r-0': this.position === 'left',
|
|
116
120
|
[this.bgColor]: !!this.bgColor,
|
|
117
|
-
...this.ngClasses
|
|
121
|
+
...this.ngClasses,
|
|
122
|
+
};
|
|
118
123
|
}
|
|
119
124
|
|
|
120
125
|
onSubmit(): void {
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
@media (max-width: 400px) {
|
|
2
|
-
.input-container {
|
|
3
|
-
width: 100%;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
2
|
input[type="date"] {
|
|
7
3
|
appearance: none !important;
|
|
8
4
|
-webkit-appearance: none !important;
|
|
@@ -23,13 +19,3 @@
|
|
|
23
19
|
color: rgb(148 163 184) !important;
|
|
24
20
|
}
|
|
25
21
|
}
|
|
26
|
-
|
|
27
|
-
.date-fake-placeholder {
|
|
28
|
-
display: none;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
@media (pointer: coarse) {
|
|
32
|
-
.date-fake-placeholder {
|
|
33
|
-
display: block;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div class="relative w-full">
|
|
2
2
|
@if (showDatePlaceholder) {
|
|
3
3
|
<span
|
|
4
|
-
class="date-fake-placeholder pointer-events-none absolute left-3 top-1/2 z-[1] -translate-y-1/2 text-[12px] text-muted-foreground/70 dark:text-dark-muted-foreground/70"
|
|
4
|
+
class="date-fake-placeholder pointer-events-none absolute left-3 top-1/2 z-[1] hidden -translate-y-1/2 text-[12px] text-muted-foreground/70 pointer-coarse:block dark:text-dark-muted-foreground/70"
|
|
5
5
|
>
|
|
6
6
|
{{ placeholder }}
|
|
7
7
|
</span>
|
|
@@ -76,7 +76,7 @@ export class JFileInputComponent implements ControlValueAccessor, OnInit, OnDest
|
|
|
76
76
|
@Input() heightImgFile = 0;
|
|
77
77
|
|
|
78
78
|
// Placeholder when no file is selected
|
|
79
|
-
@Input() placeholder = '
|
|
79
|
+
@Input() placeholder = 'Seleccionar archivo...';
|
|
80
80
|
|
|
81
81
|
// Extra Tailwind classes on the visible label
|
|
82
82
|
@Input() classes = '';
|
|
@@ -48,6 +48,30 @@ export class JLabelComponent {
|
|
|
48
48
|
// required = red · conditioned = blue · automated = purple · null = none
|
|
49
49
|
@Input() indicator: LabelIndicator | null = null;
|
|
50
50
|
|
|
51
|
+
/** @deprecated Use `[indicator]="'required'"` instead. */
|
|
52
|
+
@Input() set isRequired(value: boolean) {
|
|
53
|
+
if (value) {
|
|
54
|
+
this.indicator = 'required';
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (this.indicator === 'required') {
|
|
59
|
+
this.indicator = null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/** @deprecated Use `[indicator]="'conditioned'"` instead. */
|
|
64
|
+
@Input() set isConditioned(value: boolean) {
|
|
65
|
+
if (value) {
|
|
66
|
+
this.indicator = 'conditioned';
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (this.indicator === 'conditioned') {
|
|
71
|
+
this.indicator = null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
51
75
|
/**
|
|
52
76
|
* Whether the indicator asterisk should render.
|
|
53
77
|
* @returns `true` when `indicator` is set.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
>
|
|
10
10
|
@if (showFilledLabel) {
|
|
11
11
|
<div
|
|
12
|
-
class="j-progress-bar__fill absolute inset-y-0 left-0 bg-primary transition-all duration-300 ease-in-out dark:bg-dark-primary"
|
|
12
|
+
class="j-progress-bar__fill absolute inset-y-0 left-0 min-w-0 bg-primary transition-all duration-300 ease-in-out dark:bg-dark-primary"
|
|
13
13
|
[style.width.%]="fillPercent"
|
|
14
14
|
[style.border-radius.px]="borderRadius"
|
|
15
15
|
></div>
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
</div>
|
|
18
18
|
|
|
19
19
|
<div
|
|
20
|
-
class="j-progress-bar__label j-progress-bar__label--track pointer-events-none absolute inset-0 flex items-center justify-center overflow-hidden"
|
|
20
|
+
class="j-progress-bar__label j-progress-bar__label--track pointer-events-none absolute inset-0 z-[1] flex items-center justify-center overflow-hidden"
|
|
21
21
|
[style.border-radius.px]="borderRadius"
|
|
22
22
|
[style.opacity]="disabled ? 0.3 : 1"
|
|
23
23
|
>
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
|
|
32
32
|
@if (showFilledLabel) {
|
|
33
33
|
<div
|
|
34
|
-
class="j-progress-bar__label j-progress-bar__label--fill pointer-events-none absolute inset-0 flex items-center justify-center"
|
|
34
|
+
class="j-progress-bar__label j-progress-bar__label--fill pointer-events-none absolute inset-0 z-[2] flex items-center justify-center"
|
|
35
35
|
[style.clip-path]="fillClipPath"
|
|
36
36
|
[style.border-radius.px]="borderRadius"
|
|
37
37
|
>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<button
|
|
27
27
|
type="button"
|
|
28
28
|
(click)="clearSelection($event)"
|
|
29
|
-
class="pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
29
|
+
class="flex items-center justify-center pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
30
30
|
>
|
|
31
31
|
<JIcon
|
|
32
32
|
[icon]="Icons.X"
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
#dropdownPanel
|
|
64
64
|
@modalTransition
|
|
65
65
|
[class]="
|
|
66
|
-
'jdropdown-panel min-w-[250px] bg-background dark:bg-dark-background rounded-lg shadow-lg border border-border border-dark-border' +
|
|
66
|
+
'jdropdown-panel fixed z-[1100] min-w-[250px] bg-background dark:bg-dark-background rounded-lg shadow-lg border border-border border-dark-border' +
|
|
67
67
|
' ' +
|
|
68
68
|
classes
|
|
69
69
|
"
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
<button
|
|
94
94
|
type="button"
|
|
95
95
|
(click)="clearSearchTerm()"
|
|
96
|
-
class="pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
96
|
+
class="flex items-center justify-center pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
97
97
|
>
|
|
98
98
|
<JIcon
|
|
99
99
|
[icon]="Icons.X"
|
|
@@ -180,7 +180,7 @@ export class JDropdownSelectComponent
|
|
|
180
180
|
@Input() ngClasses: Record<string, boolean> = {};
|
|
181
181
|
|
|
182
182
|
/** Emits the selected raw value or `null` when cleared. */
|
|
183
|
-
@Output() selectionChange = new EventEmitter<
|
|
183
|
+
@Output() selectionChange = new EventEmitter<any>();
|
|
184
184
|
|
|
185
185
|
/** Searchable: emits the full API result array after each load. */
|
|
186
186
|
@Output() fullData = new EventEmitter<unknown[]>();
|
package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.html
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
<button
|
|
24
24
|
type="button"
|
|
25
25
|
(click)="clearSelection($event)"
|
|
26
|
-
class="pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
26
|
+
class="flex items-center justify-center pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
27
27
|
>
|
|
28
28
|
<JIcon
|
|
29
29
|
[icon]="Icons.X"
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
<div
|
|
60
60
|
#dropdownPanel
|
|
61
61
|
@modalTransition
|
|
62
|
-
class="jdropdown-panel min-w-[250px] bg-background dark:bg-dark-background rounded-lg shadow-lg border border-border border-dark-border"
|
|
62
|
+
class="jdropdown-panel fixed z-[1100] min-w-[250px] bg-background dark:bg-dark-background rounded-lg shadow-lg border border-border border-dark-border"
|
|
63
63
|
[style.width.px]="dropdownWidth"
|
|
64
64
|
>
|
|
65
65
|
<div class="pt-1 pl-3 pr-3 pb-3">
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
<button
|
|
83
83
|
type="button"
|
|
84
84
|
(click)="clearSearchTerm()"
|
|
85
|
-
class="pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
85
|
+
class="flex items-center justify-center pr-1 mr-1 text-gray-400 hover:text-gray-600 focus:outline-none cursor-pointer"
|
|
86
86
|
>
|
|
87
87
|
<JIcon
|
|
88
88
|
[icon]="Icons.X"
|
|
@@ -202,7 +202,7 @@ export class JMultiDropdownSelectComponent
|
|
|
202
202
|
@Input() maxDisplayItems = 3;
|
|
203
203
|
|
|
204
204
|
/** Emits the array of selected values (empty when cleared). */
|
|
205
|
-
@Output() selectionChange = new EventEmitter<
|
|
205
|
+
@Output() selectionChange = new EventEmitter<any[]>();
|
|
206
206
|
|
|
207
207
|
/** @deprecated Kept for backward compatibility; panel positioning no longer uses this flag. */
|
|
208
208
|
@Input() isFilterSelect = false;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<div #selectButton class="min-w-[40px] max-[400px]:min-w-[30px]">
|
|
4
4
|
<JButton
|
|
5
5
|
(clicked)="toggleColumnSelector()"
|
|
6
|
-
classes="secondary"
|
|
6
|
+
classes="secondary w-[40px] h-[40px]"
|
|
7
7
|
[icon]="btnIcon"
|
|
8
8
|
[disabled]="isDisabled"
|
|
9
9
|
[ngClasses]="getButtonNgClass()"
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
<div
|
|
19
19
|
#dropdownPanel
|
|
20
20
|
@modalTransition
|
|
21
|
-
class="jdropdown-panel min-w-[250px] max-w-[250px] bg-background dark:bg-dark-background rounded-lg shadow-lg border border-border border-dark-border"
|
|
21
|
+
class="jdropdown-panel fixed z-[1100] min-w-[250px] max-w-[250px] bg-background dark:bg-dark-background rounded-lg shadow-lg border border-border border-dark-border"
|
|
22
22
|
[style.width.px]="dropdownWidth"
|
|
23
23
|
>
|
|
24
24
|
<div class="pt-1 pl-3 pr-3 pb-3">
|
|
@@ -2,16 +2,7 @@
|
|
|
2
2
|
display: contents;
|
|
3
3
|
}
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
position: fixed;
|
|
7
|
-
inset: 0;
|
|
8
|
-
z-index: 998;
|
|
9
|
-
background-color: rgb(0 0 0 / 0.5);
|
|
10
|
-
backdrop-filter: blur(1px);
|
|
11
|
-
animation: j-sidebar-overlay-in 300ms ease-out;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
@keyframes j-sidebar-overlay-in {
|
|
5
|
+
@keyframes sidebar-overlay-in {
|
|
15
6
|
from {
|
|
16
7
|
opacity: 0;
|
|
17
8
|
}
|
|
@@ -21,6 +12,10 @@
|
|
|
21
12
|
}
|
|
22
13
|
}
|
|
23
14
|
|
|
15
|
+
.animate-sidebar-overlay-in {
|
|
16
|
+
animation: sidebar-overlay-in 300ms ease-out;
|
|
17
|
+
}
|
|
18
|
+
|
|
24
19
|
.j-sidebar {
|
|
25
20
|
position: fixed;
|
|
26
21
|
top: 0;
|
|
@@ -81,23 +76,15 @@
|
|
|
81
76
|
}
|
|
82
77
|
|
|
83
78
|
.j-sidebar-header {
|
|
84
|
-
display: flex;
|
|
85
|
-
align-items: center;
|
|
86
|
-
gap: 0.75rem;
|
|
87
|
-
min-height: 3.25rem;
|
|
88
|
-
padding: 0.625rem 0.75rem 0.625rem 1rem;
|
|
89
|
-
border-bottom: 1px solid var(--color-border);
|
|
90
79
|
background: linear-gradient(
|
|
91
80
|
180deg,
|
|
92
81
|
color-mix(in srgb, var(--color-muted) 28%, var(--color-background)) 0%,
|
|
93
82
|
var(--color-background) 100%
|
|
94
83
|
);
|
|
95
|
-
flex-shrink: 0;
|
|
96
84
|
}
|
|
97
85
|
|
|
98
86
|
:host-context(.dark) .j-sidebar-header,
|
|
99
87
|
:host-context(html.dark) .j-sidebar-header {
|
|
100
|
-
border-bottom-color: var(--color-dark-border);
|
|
101
88
|
background: linear-gradient(
|
|
102
89
|
180deg,
|
|
103
90
|
color-mix(in srgb, var(--color-dark-muted) 35%, var(--color-dark-background)) 0%,
|
|
@@ -105,36 +92,6 @@
|
|
|
105
92
|
);
|
|
106
93
|
}
|
|
107
94
|
|
|
108
|
-
.j-sidebar-title {
|
|
109
|
-
flex: 1;
|
|
110
|
-
min-width: 0;
|
|
111
|
-
margin: 0;
|
|
112
|
-
font-size: 0.9375rem;
|
|
113
|
-
font-weight: 600;
|
|
114
|
-
line-height: 1.3;
|
|
115
|
-
letter-spacing: -0.015em;
|
|
116
|
-
color: var(--color-foreground);
|
|
117
|
-
white-space: nowrap;
|
|
118
|
-
overflow: hidden;
|
|
119
|
-
text-overflow: ellipsis;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
.j-sidebar-title--placeholder {
|
|
123
|
-
min-height: 1.25rem;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
:host-context(.dark) .j-sidebar-title,
|
|
127
|
-
:host-context(html.dark) .j-sidebar-title {
|
|
128
|
-
color: var(--color-dark-foreground);
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
.j-sidebar-header-actions {
|
|
132
|
-
display: inline-flex;
|
|
133
|
-
align-items: center;
|
|
134
|
-
gap: 0.5rem;
|
|
135
|
-
flex-shrink: 0;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
95
|
.j-sidebar-close {
|
|
139
96
|
display: inline-flex;
|
|
140
97
|
align-items: center;
|
|
@@ -181,20 +138,6 @@
|
|
|
181
138
|
background-color: color-mix(in srgb, var(--color-dark-muted) 50%, transparent);
|
|
182
139
|
}
|
|
183
140
|
|
|
184
|
-
.j-sidebar-body {
|
|
185
|
-
flex: 1 1 auto;
|
|
186
|
-
min-height: 0;
|
|
187
|
-
padding: 1rem;
|
|
188
|
-
overflow-x: hidden;
|
|
189
|
-
overflow-y: auto;
|
|
190
|
-
color: var(--color-foreground);
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
:host-context(.dark) .j-sidebar-body,
|
|
194
|
-
:host-context(html.dark) .j-sidebar-body {
|
|
195
|
-
color: var(--color-dark-foreground);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
141
|
@media (max-width: 767px) {
|
|
199
142
|
.j-sidebar {
|
|
200
143
|
width: 100% !important;
|
|
@@ -1,20 +1,28 @@
|
|
|
1
1
|
@if (openSidebar) {
|
|
2
2
|
<div
|
|
3
|
-
class="
|
|
3
|
+
class="fixed inset-0 z-[998] bg-black/50 backdrop-blur-[1px] animate-sidebar-overlay-in"
|
|
4
4
|
aria-hidden="true"
|
|
5
5
|
(click)="onOverlayClick()"
|
|
6
6
|
></div>
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
<ng-template #sidebarContent>
|
|
10
|
-
<header
|
|
10
|
+
<header
|
|
11
|
+
class="j-sidebar-header flex shrink-0 items-center gap-3 min-h-[3.25rem] border-b border-border py-2.5 pr-3 pl-4 dark:border-dark-border"
|
|
12
|
+
>
|
|
11
13
|
@if (titleForm) {
|
|
12
|
-
<h2
|
|
14
|
+
<h2
|
|
15
|
+
class="m-0 min-w-0 flex-1 truncate text-[0.9375rem] font-semibold leading-[1.3] tracking-[-0.015em] text-foreground dark:text-dark-foreground"
|
|
16
|
+
>
|
|
17
|
+
{{ titleForm }}
|
|
18
|
+
</h2>
|
|
13
19
|
} @else {
|
|
14
|
-
<span
|
|
20
|
+
<span
|
|
21
|
+
class="m-0 min-h-5 min-w-0 flex-1 truncate text-[0.9375rem] font-semibold leading-[1.3] tracking-[-0.015em] text-foreground dark:text-dark-foreground"
|
|
22
|
+
></span>
|
|
15
23
|
}
|
|
16
24
|
|
|
17
|
-
<div class="
|
|
25
|
+
<div class="inline-flex shrink-0 items-center gap-2">
|
|
18
26
|
@for (cb of visibleCheckboxes; track $index) {
|
|
19
27
|
<JSwitchCheckbox
|
|
20
28
|
[title]="cb.title"
|
|
@@ -35,7 +43,9 @@
|
|
|
35
43
|
</div>
|
|
36
44
|
</header>
|
|
37
45
|
|
|
38
|
-
<div
|
|
46
|
+
<div
|
|
47
|
+
class="scroll-element min-h-0 flex-1 overflow-x-hidden overflow-y-auto p-4 text-foreground dark:text-dark-foreground"
|
|
48
|
+
>
|
|
39
49
|
@if (sidebarTemplate) {
|
|
40
50
|
<ng-container [ngTemplateOutlet]="sidebarTemplate" />
|
|
41
51
|
}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
<div class="w-full mb-3 flex flex-col">
|
|
2
2
|
|
|
3
|
-
<div class="sticky top-0 left-0 right-0 grid grid-cols-2 pb-2 justify-between items-center gap-3 pt-2 select-none
|
|
3
|
+
<div class="sticky top-0 left-0 right-0 grid grid-cols-2 pb-2 justify-between items-center gap-3 pt-2 select-none z-2">
|
|
4
4
|
<div>
|
|
5
5
|
<JButton
|
|
6
6
|
[icon]="Icons.Save"
|
|
7
7
|
[iconSize]="22"
|
|
8
8
|
(clicked)="saveRecords()"
|
|
9
|
-
classes="
|
|
10
|
-
[ngClasses]="{'min-w-auto p-1! pl-2! pr-2!' : true}"
|
|
9
|
+
classes="primary"
|
|
10
|
+
[ngClasses]="{'min-w-auto h-[40px] p-1! pl-2! pr-2!' : true}"
|
|
11
11
|
>Enviar</JButton>
|
|
12
12
|
</div>
|
|
13
13
|
|
|
14
14
|
<div class="relative w-full">
|
|
15
15
|
<input type="text" [(ngModel)]="searchQuery" [placeholder]="searchPlaceholder" (ngModelChange)="onSearch()"
|
|
16
|
-
class="input w-full h-[40px] bg-
|
|
16
|
+
class="input w-full h-[40px] bg-white dark:bg-foreground border border-border dark:border-dark-border text-black dark:text-white rounded px-3 py-2 pr-16 focus:outline-none focus:ring-2 focus:ring-primary" />
|
|
17
17
|
|
|
18
18
|
<!-- Iconos dentro del input -->
|
|
19
19
|
<div class="absolute right-3 top-1/2 transform -translate-y-1/2 flex items-center gap-2">
|
|
@@ -216,14 +216,14 @@
|
|
|
216
216
|
[iconSize]="20"
|
|
217
217
|
(clicked)="onEdit(item)"
|
|
218
218
|
[tooltip]="'Editar'"
|
|
219
|
-
classes="warning_secondary min-w-
|
|
219
|
+
classes="warning_secondary min-w-[35px] h-[35px] p-[1px]! pl-[5px]! pr-[5px]!"
|
|
220
220
|
/>
|
|
221
221
|
<JButton
|
|
222
222
|
[icon]="Icons.Trash"
|
|
223
223
|
[iconSize]="20"
|
|
224
224
|
(clicked)="onDelete($index)"
|
|
225
225
|
[tooltip]="'Eliminar'"
|
|
226
|
-
classes="error_secondary min-w-
|
|
226
|
+
classes="error_secondary min-w-[35px] h-[35px] p-[1px]! pl-[5px]! pr-[5px]!"
|
|
227
227
|
/>
|
|
228
228
|
</div>
|
|
229
229
|
<div class="absolute top-[15px] bottom-[15px] left-0 w-[1px] bg-border dark:bg-dark-border"></div>
|