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.
Files changed (59) hide show
  1. package/README.md +15 -1
  2. package/cli/settings/colors-config-utils.js +26 -3
  3. package/cli/templates/app.generator.js +6 -3
  4. package/package.json +1 -1
  5. package/src/colors.safelist.css +1 -1
  6. package/src/lib/components/.config/colors/README.md +2 -0
  7. package/src/lib/components/.config/colors/colors.safelist.css +1 -1
  8. package/src/lib/components/alert/alert-dialog/dialog-alert.component.css +0 -71
  9. package/src/lib/components/alert/alert-dialog/dialog-alert.component.html +7 -7
  10. package/src/lib/components/alert/alert-toast/toast-alert.component.css +0 -138
  11. package/src/lib/components/alert/alert-toast/toast-alert.component.html +12 -9
  12. package/src/lib/components/checkbox/checkbox-input/input-checkbox.component.css +0 -67
  13. package/src/lib/components/checkbox/checkbox-input/input-checkbox.component.html +11 -7
  14. package/src/lib/components/checkbox/checkbox-switch/switch-checkbox.component.css +3 -53
  15. package/src/lib/components/checkbox/checkbox-switch/switch-checkbox.component.html +17 -6
  16. package/src/lib/components/checkbox/checkbox-switch/switch-checkbox.component.ts +7 -0
  17. package/src/lib/components/coach-mark/coach-mark.component.html +2 -2
  18. package/src/lib/components/coach-mark/coach-mark.component.scss +1 -7
  19. package/src/lib/components/dialog/dialog.component.css +0 -102
  20. package/src/lib/components/dialog/dialog.component.html +17 -6
  21. package/src/lib/components/filter/filter-complete/complete-filter.component.html +5 -5
  22. package/src/lib/components/filter/filter-complete/complete-filter.component.scss +0 -10
  23. package/src/lib/components/form/form-sidebar/sidebar-form.component.css +23 -254
  24. package/src/lib/components/form/form-sidebar/sidebar-form.component.html +22 -10
  25. package/src/lib/components/form/form-sidebar/sidebar-form.component.ts +13 -8
  26. package/src/lib/components/input/input/input.component.css +0 -14
  27. package/src/lib/components/input/input/input.component.html +1 -1
  28. package/src/lib/components/input/input-file/file-input.component.ts +1 -1
  29. package/src/lib/components/label/label.component.ts +24 -0
  30. package/src/lib/components/menu/options-coach-menu/options-coach-menu.component.html +2 -2
  31. package/src/lib/components/menu/options-coach-menu/options-coach-menu.component.ts +2 -2
  32. package/src/lib/components/progress-bar/progress-bar.component.css +0 -11
  33. package/src/lib/components/progress-bar/progress-bar.component.html +3 -3
  34. package/src/lib/components/select/select-dropdown/dropdown-select.component.css +0 -6
  35. package/src/lib/components/select/select-dropdown/dropdown-select.component.html +3 -3
  36. package/src/lib/components/select/select-dropdown/dropdown-select.component.ts +1 -1
  37. package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.css +0 -6
  38. package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.html +3 -3
  39. package/src/lib/components/select/select-multi-dropdown/multi-dropdown-select.component.ts +1 -1
  40. package/src/lib/components/select/select-multi-table/multi-table-select.component.css +0 -6
  41. package/src/lib/components/select/select-multi-table/multi-table-select.component.html +2 -2
  42. package/src/lib/components/sidebar/sidebar-static/static-sidebar.component.css +5 -62
  43. package/src/lib/components/sidebar/sidebar-static/static-sidebar.component.html +16 -6
  44. package/src/lib/components/table/table-complete/complete-table.component.html +6 -6
  45. package/src/lib/components/table/table-crud-complete/complete-crud-table.component.html +14 -14
  46. package/src/lib/components/table/table-crud-complete/complete-crud-table.component.scss +0 -63
  47. package/src/lib/components/table/table-crud-complete/complete-crud-table.component.ts +2 -2
  48. package/src/lib/components/theme-generator/theme-generator.component.html +5 -10
  49. package/src/lib/components/toggle-radio/shared/toggle-options.util.ts +19 -1
  50. package/src/lib/components/toggle-radio/toggle-radio/toggle-radio.component.css +0 -113
  51. package/src/lib/components/toggle-radio/toggle-radio/toggle-radio.component.html +22 -9
  52. package/src/lib/components/toggle-radio/toggle-radio/toggle-radio.component.ts +3 -9
  53. package/src/lib/components/toggle-radio/toggle-segment/segment-toggle.component.css +0 -74
  54. package/src/lib/components/toggle-radio/toggle-segment/segment-toggle.component.html +14 -4
  55. package/src/lib/components/toggle-radio/toggle-segment/segment-toggle.component.ts +3 -9
  56. package/src/lib/components/viewer/viewer-image/image-viewer.component.css +0 -76
  57. package/src/lib/components/viewer/viewer-image/image-viewer.component.html +27 -10
  58. package/src/lib/components/viewer/viewer-pdf/pdf-viewer.component.css +0 -152
  59. 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="j-form-sidebar-overlay"
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 class="j-form-sidebar-header">
11
- <div class="j-form-sidebar-title-wrap">
12
- <h2 class="j-form-sidebar-title">{{ displayTitle }}</h2>
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="j-form-sidebar-coach">
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="j-form-sidebar-header-actions">
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="j-form-sidebar-close"
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 class="j-form-sidebar-body scroll-element">
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 class="j-form-sidebar-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
- 'j-form-sidebar': true,
110
- 'j-form-sidebar--left': this.position === 'left',
111
- 'j-form-sidebar--right': this.position === 'right',
112
- 'j-form-sidebar--small': this.size === 'small',
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 = 'Select file...';
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.
@@ -4,8 +4,8 @@
4
4
  [isDescriptionFormatted]="true"
5
5
  coachPosition="bottom-left"
6
6
  coachTrigger="click"
7
- coachMaxWidth="170px"
8
- coachWidth="170px"
7
+ coachMaxWidth="180px"
8
+ coachWidth="180px"
9
9
  [coachSpotlight]="false"
10
10
  size="icon"
11
11
  [icon]="Icons.EllipsisVertical"
@@ -61,9 +61,9 @@ export class JOptionsCoachMenuComponent {
61
61
  'min-h-[30px]',
62
62
  'text-left',
63
63
  'justify-start',
64
- 'text-[14px]',
64
+ 'text-[12px]',
65
65
  'leading-tight',
66
- 'font-medium',
66
+ 'font-normal',
67
67
  option.classes ?? '',
68
68
  ]
69
69
  .filter(Boolean)
@@ -1,11 +0,0 @@
1
- .j-progress-bar__label {
2
- z-index: 1;
3
- }
4
-
5
- .j-progress-bar__label--fill {
6
- z-index: 2;
7
- }
8
-
9
- .j-progress-bar__fill {
10
- min-width: 0;
11
- }
@@ -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
  >
@@ -2,9 +2,3 @@
2
2
  display: block;
3
3
  width: 100%;
4
4
  }
5
-
6
- /* Floating panel — coordinates set in TS via positionDropdownPanel */
7
- .jdropdown-panel {
8
- position: fixed;
9
- z-index: 1100;
10
- }
@@ -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<unknown>();
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[]>();
@@ -2,9 +2,3 @@
2
2
  display: block;
3
3
  width: 100%;
4
4
  }
5
-
6
- /* Floating panel — coordinates set in TS via positionDropdownPanel */
7
- .jdropdown-panel {
8
- position: fixed;
9
- z-index: 1100;
10
- }
@@ -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<unknown[]>();
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;
@@ -2,9 +2,3 @@
2
2
  display: block;
3
3
  width: 100%;
4
4
  }
5
-
6
- /* Floating panel — coordinates set in TS via positionDropdownPanel */
7
- .jdropdown-panel {
8
- position: fixed;
9
- z-index: 1100;
10
- }
@@ -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
- .j-sidebar-overlay {
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="j-sidebar-overlay"
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 class="j-sidebar-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 class="j-sidebar-title">{{ titleForm }}</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 class="j-sidebar-title j-sidebar-title--placeholder"></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="j-sidebar-header-actions">
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 class="j-sidebar-body scroll-element">
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 bg-white dark:bg-dark-background z-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 z-2">
4
4
  <div>
5
5
  <JButton
6
6
  [icon]="Icons.Save"
7
7
  [iconSize]="22"
8
8
  (clicked)="saveRecords()"
9
- classes="secondary"
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-background dark:bg-dark-background 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" />
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-auto p-[1px]! pl-[5px]! pr-[5px]!"
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-auto p-[1px]! pl-[5px]! pr-[5px]!"
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>