tailjng 0.1.7 → 0.1.8

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
@@ -4,67 +4,6 @@
4
4
  height: 100%;
5
5
  }
6
6
 
7
- .j-image-viewer {
8
- position: relative;
9
- width: 100%;
10
- height: 100%;
11
- }
12
-
13
- .j-image-viewer__toolbar {
14
- position: absolute;
15
- z-index: 20;
16
- display: flex;
17
- flex-wrap: wrap;
18
- align-items: center;
19
- justify-content: flex-end;
20
- gap: 0.25rem;
21
- max-width: calc(100% - 1rem);
22
- }
23
-
24
- .j-image-viewer__stage {
25
- display: flex;
26
- align-items: center;
27
- justify-content: center;
28
- width: 100%;
29
- height: 100%;
30
- user-select: none;
31
- }
32
-
33
- .j-image-viewer__stage--fullscreen {
34
- background-color: var(--color-background);
35
- }
36
-
37
- :host-context(.dark) .j-image-viewer__stage--fullscreen,
38
- :host-context(html.dark) .j-image-viewer__stage--fullscreen {
39
- background-color: var(--color-dark-background);
40
- }
41
-
42
- .j-image-viewer__canvas {
43
- position: relative;
44
- width: 100%;
45
- height: 100%;
46
- overflow: hidden;
47
- }
48
-
49
- .j-image-viewer__image {
50
- width: 100%;
51
- height: 100%;
52
- object-fit: contain;
53
- pointer-events: auto;
54
- user-select: none;
55
- -webkit-user-drag: none;
56
- }
57
-
58
- .j-image-viewer__overlay {
59
- position: absolute;
60
- inset: 0;
61
- display: flex;
62
- flex-direction: column;
63
- align-items: center;
64
- justify-content: center;
65
- gap: 0.75rem;
66
- }
67
-
68
7
  .j-image-viewer__overlay--loading {
69
8
  background-color: color-mix(in srgb, var(--color-background) 70%, transparent);
70
9
  }
@@ -73,18 +12,3 @@
73
12
  :host-context(html.dark) .j-image-viewer__overlay--loading {
74
13
  background-color: color-mix(in srgb, var(--color-dark-background) 55%, transparent);
75
14
  }
76
-
77
- .j-image-viewer__message {
78
- font-size: 0.875rem;
79
- line-height: 1.25;
80
- color: var(--color-muted-foreground);
81
- }
82
-
83
- :host-context(.dark) .j-image-viewer__message,
84
- :host-context(html.dark) .j-image-viewer__message {
85
- color: var(--color-dark-muted-foreground);
86
- }
87
-
88
- .j-image-viewer__message--error {
89
- color: var(--color-destructive);
90
- }
@@ -1,6 +1,9 @@
1
- <div class="j-image-viewer" [ngClass]="ngClasses" #container>
1
+ <div class="relative h-full w-full" [ngClass]="ngClasses" #container>
2
2
  @if (hasAnyControlVisible) {
3
- <div class="j-image-viewer__toolbar" [ngClass]="controlsPositionClasses">
3
+ <div
4
+ class="absolute z-20 flex max-w-[calc(100%-1rem)] flex-wrap items-center justify-end gap-1"
5
+ [ngClass]="controlsPositionClasses"
6
+ >
4
7
  @if (isControlVisible(showRotateLeft)) {
5
8
  <JButton
6
9
  jTooltip="Girar a la izquierda"
@@ -76,10 +79,14 @@
76
79
  </div>
77
80
  }
78
81
 
79
- <div class="j-image-viewer__stage" [class.j-image-viewer__stage--fullscreen]="isFullscreen">
80
- <div class="j-image-viewer__canvas">
82
+ <div
83
+ class="flex h-full w-full select-none items-center justify-center"
84
+ [ngClass]="{ 'bg-background dark:bg-dark-background': isFullscreen }"
85
+ >
86
+ <div class="relative h-full w-full overflow-hidden">
81
87
  @if (hasImage && !hasError) {
82
88
  <img
89
+ class="pointer-events-auto h-full w-full select-none [-webkit-user-drag:none]"
83
90
  [src]="src"
84
91
  [alt]="alt"
85
92
  (load)="onImageLoad()"
@@ -93,38 +100,48 @@
93
100
  }
94
101
 
95
102
  @if (hasImage && loading && !hasError) {
96
- <div class="j-image-viewer__overlay j-image-viewer__overlay--loading">
103
+ <div
104
+ class="j-image-viewer__overlay--loading absolute inset-0 flex flex-col items-center justify-center gap-3"
105
+ >
97
106
  <JIcon
98
107
  [icon]="Icons.Loader2"
99
108
  [size]="30"
100
109
  iconClass="animate-spin text-primary dark:text-dark-primary"
101
110
  [ariaHidden]="true"
102
111
  />
103
- <span class="j-image-viewer__message">Cargando imagen...</span>
112
+ <span
113
+ class="text-sm leading-tight text-muted-foreground dark:text-dark-muted-foreground"
114
+ >
115
+ Cargando imagen...
116
+ </span>
104
117
  </div>
105
118
  }
106
119
 
107
120
  @if (!hasImage) {
108
- <div class="j-image-viewer__overlay">
121
+ <div class="absolute inset-0 flex flex-col items-center justify-center gap-3">
109
122
  <JIcon
110
123
  [icon]="Icons.ImageOff"
111
124
  [size]="30"
112
125
  iconClass="text-muted-foreground"
113
126
  [ariaHidden]="true"
114
127
  />
115
- <span class="j-image-viewer__message">{{ emptyMessage }}</span>
128
+ <span
129
+ class="text-sm leading-tight text-muted-foreground dark:text-dark-muted-foreground"
130
+ >
131
+ {{ emptyMessage }}
132
+ </span>
116
133
  </div>
117
134
  }
118
135
 
119
136
  @if (hasImage && hasError) {
120
- <div class="j-image-viewer__overlay">
137
+ <div class="absolute inset-0 flex flex-col items-center justify-center gap-3">
121
138
  <JIcon
122
139
  [icon]="Icons.ImageOff"
123
140
  [size]="30"
124
141
  iconClass="text-destructive"
125
142
  [ariaHidden]="true"
126
143
  />
127
- <span class="j-image-viewer__message j-image-viewer__message--error">
144
+ <span class="text-sm leading-tight text-destructive">
128
145
  No se pudo cargar la imagen
129
146
  </span>
130
147
  </div>
@@ -4,125 +4,7 @@
4
4
  height: 100%;
5
5
  }
6
6
 
7
- .j-pdf-viewer {
8
- display: flex;
9
- flex-direction: column;
10
- width: 100%;
11
- height: 100%;
12
- min-height: 18.75rem;
13
- }
14
-
15
- .j-pdf-viewer__frame {
16
- display: block;
17
- width: 100%;
18
- height: 100%;
19
- min-height: 18.75rem;
20
- border: 1px solid var(--color-border);
21
- border-radius: 0.75rem;
22
- background-color: var(--color-background);
23
- }
24
-
25
- :host-context(.dark) .j-pdf-viewer__frame,
26
- :host-context(html.dark) .j-pdf-viewer__frame {
27
- border-color: var(--color-dark-border);
28
- background-color: var(--color-dark-background);
29
- }
30
-
31
- .j-pdf-viewer__frame--mobile {
32
- min-height: 60vh;
33
- border-radius: 0.75rem 0.75rem 0 0;
34
- }
35
-
36
- .j-pdf-viewer__fallback,
37
- .j-pdf-viewer__empty {
38
- display: flex;
39
- flex-direction: column;
40
- align-items: center;
41
- justify-content: center;
42
- gap: 0.75rem;
43
- padding: 1.5rem;
44
- text-align: center;
45
- border: 1px dashed var(--color-border);
46
- border-radius: 0.75rem;
47
- min-height: 18.75rem;
48
- }
49
-
50
- :host-context(.dark) .j-pdf-viewer__fallback,
51
- :host-context(.dark) .j-pdf-viewer__empty,
52
- :host-context(html.dark) .j-pdf-viewer__fallback,
53
- :host-context(html.dark) .j-pdf-viewer__empty {
54
- border-color: var(--color-dark-border);
55
- }
56
-
57
- .j-pdf-viewer__fallback {
58
- display: none;
59
- }
60
-
61
- .j-pdf-viewer__fallback-title,
62
- .j-pdf-viewer__mobile-title {
63
- margin: 0;
64
- font-size: 0.9375rem;
65
- font-weight: 600;
66
- color: var(--color-foreground);
67
- }
68
-
69
- :host-context(.dark) .j-pdf-viewer__fallback-title,
70
- :host-context(.dark) .j-pdf-viewer__mobile-title,
71
- :host-context(html.dark) .j-pdf-viewer__fallback-title,
72
- :host-context(html.dark) .j-pdf-viewer__mobile-title {
73
- color: var(--color-dark-foreground);
74
- }
75
-
76
- .j-pdf-viewer__fallback-text,
77
- .j-pdf-viewer__mobile-text,
78
- .j-pdf-viewer__message {
79
- margin: 0;
80
- font-size: 0.8125rem;
81
- line-height: 1.45;
82
- color: var(--color-muted-foreground);
83
- max-width: 20rem;
84
- }
85
-
86
- :host-context(.dark) .j-pdf-viewer__fallback-text,
87
- :host-context(.dark) .j-pdf-viewer__mobile-text,
88
- :host-context(.dark) .j-pdf-viewer__message,
89
- :host-context(html.dark) .j-pdf-viewer__fallback-text,
90
- :host-context(html.dark) .j-pdf-viewer__mobile-text,
91
- :host-context(html.dark) .j-pdf-viewer__message {
92
- color: var(--color-dark-muted-foreground);
93
- }
94
-
95
- .j-pdf-viewer__actions {
96
- display: flex;
97
- flex-wrap: wrap;
98
- align-items: center;
99
- justify-content: center;
100
- gap: 0.5rem;
101
- }
102
-
103
- .j-pdf-viewer__actions--stacked {
104
- flex-direction: column;
105
- width: 100%;
106
- max-width: 16rem;
107
- }
108
-
109
- .j-pdf-viewer__mobile {
110
- display: flex;
111
- flex-direction: column;
112
- gap: 0;
113
- width: 100%;
114
- height: 100%;
115
- }
116
-
117
7
  .j-pdf-viewer__mobile-card {
118
- display: flex;
119
- flex: 1;
120
- flex-direction: column;
121
- align-items: center;
122
- justify-content: center;
123
- gap: 0.875rem;
124
- padding: 1.25rem;
125
- text-align: center;
126
8
  border: 1px solid var(--color-border);
127
9
  border-radius: 0.75rem;
128
10
  background: linear-gradient(
@@ -141,37 +23,3 @@
141
23
  var(--color-dark-background) 100%
142
24
  );
143
25
  }
144
-
145
- .j-pdf-viewer__mobile-copy {
146
- display: flex;
147
- flex-direction: column;
148
- gap: 0.375rem;
149
- }
150
-
151
- .j-pdf-viewer__mobile-bar {
152
- display: flex;
153
- align-items: center;
154
- justify-content: center;
155
- gap: 0.5rem;
156
- padding: 0.625rem 0.75rem;
157
- border: 1px solid var(--color-border);
158
- border-top: 0;
159
- border-radius: 0 0 0.75rem 0.75rem;
160
- background-color: var(--color-background);
161
- }
162
-
163
- :host-context(.dark) .j-pdf-viewer__mobile-bar,
164
- :host-context(html.dark) .j-pdf-viewer__mobile-bar {
165
- border-color: var(--color-dark-border);
166
- background-color: var(--color-dark-background);
167
- }
168
-
169
- @media (max-width: 767px) {
170
- .j-pdf-viewer {
171
- min-height: 14rem;
172
- }
173
-
174
- .j-pdf-viewer__frame {
175
- min-height: 14rem;
176
- }
177
- }
@@ -1,39 +1,58 @@
1
- <div class="j-pdf-viewer" [ngClass]="ngClasses">
1
+ <div
2
+ class="flex h-full min-h-[18.75rem] w-full flex-col max-md:min-h-56"
3
+ [ngClass]="ngClasses"
4
+ >
2
5
  @if (!hasUrl) {
3
- <div class="j-pdf-viewer__empty">
6
+ <div
7
+ class="flex min-h-[18.75rem] flex-col items-center justify-center gap-3 rounded-xl border border-dashed border-border p-6 text-center max-md:min-h-56 dark:border-dark-border"
8
+ >
4
9
  <JIcon
5
10
  [icon]="Icons.CircleAlert"
6
11
  [size]="32"
7
12
  iconClass="text-muted-foreground"
8
13
  [ariaHidden]="true"
9
14
  />
10
- <p class="j-pdf-viewer__message">{{ emptyMessage }}</p>
15
+ <p
16
+ class="m-0 max-w-80 text-[0.8125rem] leading-[1.45] text-muted-foreground dark:text-dark-muted-foreground"
17
+ >
18
+ {{ emptyMessage }}
19
+ </p>
11
20
  </div>
12
21
  } @else if (showDesktopEmbed) {
13
22
  <iframe
14
- class="j-pdf-viewer__frame"
23
+ class="block h-full min-h-[18.75rem] w-full rounded-xl border border-border bg-background max-md:min-h-56 dark:border-dark-border dark:bg-dark-background"
15
24
  [src]="safeUrl"
16
25
  [title]="documentTitle"
17
26
  loading="lazy"
18
27
  ></iframe>
19
28
  } @else if (useMobileLayout) {
20
- <div class="j-pdf-viewer__mobile">
29
+ <div class="flex h-full w-full flex-col gap-0">
21
30
  @if (showMobileActions) {
22
- <div class="j-pdf-viewer__mobile-card">
31
+ <div
32
+ class="j-pdf-viewer__mobile-card flex flex-1 flex-col items-center justify-center gap-3.5 p-5 text-center"
33
+ >
23
34
  <JIcon
24
35
  [icon]="Icons.FileUp"
25
36
  [size]="36"
26
37
  iconClass="text-primary dark:text-dark-primary"
27
38
  [ariaHidden]="true"
28
39
  />
29
- <div class="j-pdf-viewer__mobile-copy">
30
- <h3 class="j-pdf-viewer__mobile-title">{{ documentTitle }}</h3>
31
- <p class="j-pdf-viewer__mobile-text">
40
+ <div class="flex flex-col gap-1.5">
41
+ <h3
42
+ class="m-0 text-[0.9375rem] font-semibold text-foreground dark:text-dark-foreground"
43
+ >
44
+ {{ documentTitle }}
45
+ </h3>
46
+ <p
47
+ class="m-0 max-w-80 text-[0.8125rem] leading-[1.45] text-muted-foreground dark:text-dark-muted-foreground"
48
+ >
32
49
  En móvil, abre el PDF en el visor del sistema para navegar y hacer zoom con
33
50
  mejor experiencia.
34
51
  </p>
35
52
  </div>
36
- <div class="j-pdf-viewer__actions j-pdf-viewer__actions--stacked">
53
+ <div
54
+ class="flex w-full max-w-64 flex-col flex-wrap items-center justify-center gap-2"
55
+ >
37
56
  <JButton
38
57
  [text]="'Abrir PDF'"
39
58
  [icon]="Icons.Eye"
@@ -51,13 +70,15 @@
51
70
 
52
71
  @if (showMobileEmbed) {
53
72
  <iframe
54
- class="j-pdf-viewer__frame j-pdf-viewer__frame--mobile"
73
+ class="block min-h-[60vh] w-full rounded-t-xl border border-border bg-background dark:border-dark-border dark:bg-dark-background"
55
74
  [src]="safeUrl"
56
75
  [title]="documentTitle"
57
76
  loading="lazy"
58
77
  ></iframe>
59
78
 
60
- <div class="j-pdf-viewer__mobile-bar">
79
+ <div
80
+ class="flex items-center justify-center gap-2 rounded-b-xl border border-t-0 border-border bg-background px-3 py-2.5 dark:border-dark-border dark:bg-dark-background"
81
+ >
61
82
  <JButton
62
83
  [text]="'Abrir'"
63
84
  [icon]="Icons.Eye"