mgv-backoffice 1.47.0 → 1.49.0
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 +2099 -2072
- package/dist/components/BaseBooleanIcon.vue.d.ts +14 -0
- package/dist/components/BaseDetailList.vue.d.ts +13 -1
- package/dist/components/BasePageHeader.vue.d.ts +1 -1
- package/dist/components/BasePhotoViewer.vue.d.ts +24 -0
- package/dist/components/BaseRating.vue.d.ts +9 -0
- package/dist/components/BaseRowButton.vue.d.ts +18 -0
- package/dist/components/BaseSelect.vue.d.ts +15 -3
- package/dist/components/BaseSidebarUser.vue.d.ts +3 -0
- package/dist/components/BaseStatCard.vue.d.ts +6 -4
- package/dist/components/BaseTextarea.vue.d.ts +12 -0
- package/dist/composables/useRefreshOnReturn.d.ts +7 -0
- package/dist/index.d.ts +8 -1
- package/dist/types/photoViewer.d.ts +6 -0
- package/dist/ui-lib.css +1 -1
- package/dist/ui-lib.js +1050 -851
- package/dist/ui-lib.umd.cjs +1 -1
- package/dist/utils/format.d.ts +9 -0
- package/package.json +1 -1
- package/src/components/BaseBadge.vue +7 -7
- package/src/components/BaseBooleanIcon.vue +22 -0
- package/src/components/BaseDetailList.vue +50 -47
- package/src/components/BaseField.label.test.ts +30 -0
- package/src/components/BaseField.vue +19 -3
- package/src/components/BasePageHeader.test.ts +29 -0
- package/src/components/BasePageHeader.vue +137 -131
- package/src/components/BasePhotoViewer.test.ts +22 -0
- package/src/components/BasePhotoViewer.vue +93 -0
- package/src/components/BaseRating.test.ts +19 -0
- package/src/components/BaseRating.vue +21 -0
- package/src/components/BaseRowButton.vue +24 -0
- package/src/components/BaseSelect.vue +4 -2
- package/src/components/BaseSidebarUser.vue +85 -75
- package/src/components/BaseStatCard.vue +11 -3
- package/src/components/BaseTextarea.test.ts +17 -0
- package/src/components/BaseTextarea.vue +24 -0
- package/src/composables/useRefreshOnReturn.test.ts +47 -0
- package/src/composables/useRefreshOnReturn.ts +24 -0
- package/src/index.ts +10 -0
- package/src/style.css +132 -36
- package/src/types/photoViewer.ts +6 -0
- package/src/utils/format.test.ts +342 -322
- package/src/utils/format.ts +23 -0
package/src/style.css
CHANGED
|
@@ -31,10 +31,106 @@
|
|
|
31
31
|
over plain base utilities like bg-slate-50 on a cascade tie. */
|
|
32
32
|
@custom-variant dark (&:is(.dark, .dark *));
|
|
33
33
|
|
|
34
|
+
/* Design system ("Night Terminal"): remapping the gray/slate/emerald ramps
|
|
35
|
+
restyles every lib component and every consumer utility, since they all
|
|
36
|
+
resolve colours via var() at runtime.
|
|
37
|
+
- gray/slate: one blue-tinted ramp (deep navy dark mode, cool paper light mode)
|
|
38
|
+
- emerald: terminal green, the brand accent
|
|
39
|
+
Deliberately a plain block, NOT `@theme`: `@theme` output lands in
|
|
40
|
+
`@layer theme`, where whichever stylesheet loads last wins, so a consumer
|
|
41
|
+
importing this file before its own `@import "tailwindcss"` would silently
|
|
42
|
+
get the default palette back. An unlayered rule beats every layer in any
|
|
43
|
+
import order. Consumers re-brand with their own plain `:root` block loaded
|
|
44
|
+
after this stylesheet. */
|
|
45
|
+
:root, :host {
|
|
46
|
+
--color-gray-50: #f6f8fc;
|
|
47
|
+
--color-gray-100: #eef1f8;
|
|
48
|
+
--color-gray-200: #dee4ef;
|
|
49
|
+
--color-gray-300: #c4cede;
|
|
50
|
+
--color-gray-400: #94a3bd;
|
|
51
|
+
--color-gray-500: #65748f;
|
|
52
|
+
--color-gray-600: #475572;
|
|
53
|
+
--color-gray-700: #33415c;
|
|
54
|
+
--color-gray-800: #1c2942;
|
|
55
|
+
--color-gray-900: #101a30;
|
|
56
|
+
--color-gray-950: #070d1d;
|
|
57
|
+
|
|
58
|
+
--color-slate-50: #f6f8fc;
|
|
59
|
+
--color-slate-100: #eef1f8;
|
|
60
|
+
--color-slate-200: #dee4ef;
|
|
61
|
+
--color-slate-300: #c4cede;
|
|
62
|
+
--color-slate-400: #94a3bd;
|
|
63
|
+
--color-slate-500: #65748f;
|
|
64
|
+
--color-slate-600: #475572;
|
|
65
|
+
--color-slate-700: #33415c;
|
|
66
|
+
--color-slate-800: #1c2942;
|
|
67
|
+
--color-slate-900: #101a30;
|
|
68
|
+
--color-slate-950: #070d1d;
|
|
69
|
+
|
|
70
|
+
--color-emerald-50: #eafbf4;
|
|
71
|
+
--color-emerald-100: #d0f7e6;
|
|
72
|
+
--color-emerald-200: #a4efd0;
|
|
73
|
+
--color-emerald-300: #6fe3b5;
|
|
74
|
+
--color-emerald-400: #3ad597;
|
|
75
|
+
--color-emerald-500: #16c784;
|
|
76
|
+
--color-emerald-600: #0e9f68;
|
|
77
|
+
--color-emerald-700: #0b7d52;
|
|
78
|
+
--color-emerald-800: #0c6343;
|
|
79
|
+
--color-emerald-900: #0a5138;
|
|
80
|
+
--color-emerald-950: #042e1f;
|
|
81
|
+
|
|
82
|
+
--radius-lg: 0.625rem;
|
|
83
|
+
--radius-xl: 0.875rem;
|
|
84
|
+
}
|
|
85
|
+
|
|
34
86
|
/* Apply the brand font app-wide. Plain body rule (not preflight-dependent) so
|
|
35
|
-
it also styles consumers whose own Tailwind preflight came earlier.
|
|
87
|
+
it also styles consumers whose own Tailwind preflight came earlier.
|
|
88
|
+
Tabular numerals line up digits in KPI cards and tables. */
|
|
36
89
|
body {
|
|
37
90
|
font-family: var(--font-sans);
|
|
91
|
+
font-variant-numeric: tabular-nums;
|
|
92
|
+
text-rendering: optimizeLegibility;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Global polish. In `base` so component utilities (focus:outline-none,
|
|
96
|
+
cursor-*) still win. */
|
|
97
|
+
@layer base {
|
|
98
|
+
/* Keyboard-focus affordance in the accent colour (mouse clicks stay clean). */
|
|
99
|
+
:focus-visible {
|
|
100
|
+
outline: 2px solid var(--color-emerald-500);
|
|
101
|
+
outline-offset: 2px;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
::selection {
|
|
105
|
+
background: color-mix(in srgb, var(--color-emerald-500) 30%, transparent);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/* Slim, theme-aware scrollbars for data-dense tables and logs. */
|
|
109
|
+
* {
|
|
110
|
+
scrollbar-width: thin;
|
|
111
|
+
scrollbar-color: var(--color-gray-300) transparent;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.dark * {
|
|
115
|
+
scrollbar-color: var(--color-gray-700) transparent;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* Tailwind v4 dropped the pointer cursor on buttons; restore it everywhere. */
|
|
119
|
+
button:not(:disabled),
|
|
120
|
+
[role="button"]:not([aria-disabled="true"]),
|
|
121
|
+
input[type="button"]:not(:disabled),
|
|
122
|
+
input[type="submit"]:not(:disabled),
|
|
123
|
+
input[type="reset"]:not(:disabled) {
|
|
124
|
+
cursor: pointer;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
button:disabled,
|
|
128
|
+
[role="button"][aria-disabled="true"],
|
|
129
|
+
input[type="button"]:disabled,
|
|
130
|
+
input[type="submit"]:disabled,
|
|
131
|
+
input[type="reset"]:disabled {
|
|
132
|
+
cursor: not-allowed;
|
|
133
|
+
}
|
|
38
134
|
}
|
|
39
135
|
|
|
40
136
|
/* BaseDateTimePicker skin: re-point @vuepic/vue-datepicker's CSS variables at
|
|
@@ -53,46 +149,46 @@ html .dp--theme-dark {
|
|
|
53
149
|
}
|
|
54
150
|
html .dp--theme-light {
|
|
55
151
|
--dp-background-color: #fff; /* white, like BaseInput */
|
|
56
|
-
--dp-text-color:
|
|
57
|
-
--dp-hover-color:
|
|
58
|
-
--dp-hover-text-color:
|
|
59
|
-
--dp-hover-icon-color:
|
|
60
|
-
--dp-icon-color:
|
|
61
|
-
--dp-primary-color:
|
|
62
|
-
--dp-primary-disabled-color:
|
|
63
|
-
--dp-secondary-color:
|
|
64
|
-
--dp-border-color:
|
|
65
|
-
--dp-menu-border-color:
|
|
66
|
-
--dp-border-color-hover:
|
|
67
|
-
--dp-border-color-focus:
|
|
68
|
-
--dp-highlight-color:
|
|
69
|
-
--dp-success-color:
|
|
152
|
+
--dp-text-color: var(--color-slate-900);
|
|
153
|
+
--dp-hover-color: var(--color-slate-100);
|
|
154
|
+
--dp-hover-text-color: var(--color-slate-900);
|
|
155
|
+
--dp-hover-icon-color: var(--color-slate-500);
|
|
156
|
+
--dp-icon-color: var(--color-slate-400);
|
|
157
|
+
--dp-primary-color: var(--color-emerald-600);
|
|
158
|
+
--dp-primary-disabled-color: var(--color-emerald-300);
|
|
159
|
+
--dp-secondary-color: var(--color-slate-400);
|
|
160
|
+
--dp-border-color: var(--color-slate-300);
|
|
161
|
+
--dp-menu-border-color: var(--color-slate-300);
|
|
162
|
+
--dp-border-color-hover: var(--color-slate-400);
|
|
163
|
+
--dp-border-color-focus: var(--color-emerald-500);
|
|
164
|
+
--dp-highlight-color: color-mix(in srgb, var(--color-emerald-500) 12%, transparent);
|
|
165
|
+
--dp-success-color: var(--color-emerald-500);
|
|
70
166
|
--dp-danger-color: #ef4444; /* red-500 */
|
|
71
167
|
--dp-marker-color: #ef4444;
|
|
72
168
|
}
|
|
73
169
|
html .dp--theme-dark {
|
|
74
|
-
--dp-background-color:
|
|
75
|
-
--dp-text-color:
|
|
76
|
-
--dp-hover-color:
|
|
77
|
-
--dp-hover-text-color:
|
|
78
|
-
--dp-hover-icon-color:
|
|
79
|
-
--dp-icon-color:
|
|
80
|
-
--dp-primary-color:
|
|
81
|
-
--dp-primary-disabled-color:
|
|
82
|
-
--dp-secondary-color:
|
|
83
|
-
--dp-border-color:
|
|
84
|
-
--dp-menu-border-color:
|
|
85
|
-
--dp-border-color-hover:
|
|
86
|
-
--dp-border-color-focus:
|
|
87
|
-
--dp-highlight-color:
|
|
88
|
-
--dp-disabled-color:
|
|
89
|
-
--dp-disabled-color-text:
|
|
90
|
-
--dp-scroll-bar-background:
|
|
91
|
-
--dp-scroll-bar-color:
|
|
92
|
-
--dp-success-color:
|
|
170
|
+
--dp-background-color: var(--color-slate-900);
|
|
171
|
+
--dp-text-color: var(--color-slate-100);
|
|
172
|
+
--dp-hover-color: var(--color-slate-800);
|
|
173
|
+
--dp-hover-text-color: var(--color-slate-100);
|
|
174
|
+
--dp-hover-icon-color: var(--color-slate-300);
|
|
175
|
+
--dp-icon-color: var(--color-slate-500);
|
|
176
|
+
--dp-primary-color: var(--color-emerald-600);
|
|
177
|
+
--dp-primary-disabled-color: var(--color-emerald-800);
|
|
178
|
+
--dp-secondary-color: var(--color-slate-500);
|
|
179
|
+
--dp-border-color: var(--color-slate-600);
|
|
180
|
+
--dp-menu-border-color: var(--color-slate-700);
|
|
181
|
+
--dp-border-color-hover: var(--color-slate-500);
|
|
182
|
+
--dp-border-color-focus: var(--color-emerald-500);
|
|
183
|
+
--dp-highlight-color: color-mix(in srgb, var(--color-emerald-500) 20%, transparent);
|
|
184
|
+
--dp-disabled-color: var(--color-slate-800);
|
|
185
|
+
--dp-disabled-color-text: var(--color-slate-500);
|
|
186
|
+
--dp-scroll-bar-background: var(--color-slate-900);
|
|
187
|
+
--dp-scroll-bar-color: var(--color-slate-700);
|
|
188
|
+
--dp-success-color: var(--color-emerald-500);
|
|
93
189
|
--dp-danger-color: #ef4444;
|
|
94
190
|
--dp-marker-color: #ef4444;
|
|
95
|
-
--dp-tooltip-color:
|
|
191
|
+
--dp-tooltip-color: var(--color-slate-800);
|
|
96
192
|
}
|
|
97
193
|
|
|
98
194
|
/* BaseSelect: rounded, themed dropdown panel. Opt-in customizable <select>
|
|
@@ -161,7 +257,7 @@ html .dp--theme-dark {
|
|
|
161
257
|
}
|
|
162
258
|
|
|
163
259
|
.dark .base-select option:checked {
|
|
164
|
-
background-color:
|
|
260
|
+
background-color: color-mix(in srgb, var(--color-emerald-500) 15%, transparent);
|
|
165
261
|
color: var(--color-emerald-300);
|
|
166
262
|
}
|
|
167
263
|
}
|