@7365admin1/layer-common 4.89.0 → 4.90.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/CHANGELOG.md +16 -4
- package/assets/css/primitives.css +50 -0
- package/components/DashboardEmptyState.vue +8 -0
- package/components/DashboardMain.vue +14 -0
- package/components/DashboardPanel.vue +10 -0
- package/components/VisitorManagement.vue +12 -2
- package/package.json +1 -1
- package/plugins/vuetify.ts +6 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @iservice365/layer-common
|
|
2
2
|
|
|
3
|
+
## 4.90.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7a207dc: Phones: table cards no longer leave a big gap around each field (the desktop 52px row height and table-card cell padding are dropped below 600px), long values (emails, sync messages) wrap inside the card, and dashboard panels and "No data to display" blocks fit their content instead of a fixed 276px/140px.
|
|
8
|
+
|
|
9
|
+
## 4.90.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- eb4bce2: Phones: below 600px every data table (`VDataTable`, `VDataTableServer`, `VDataTableVirtual`) shows each row as a stacked card (label: value) instead of a wide grid scrolled sideways, and the 720px `.app-table-scroll` floor no longer applies on phones. Tablets and desktop are unchanged.
|
|
14
|
+
|
|
3
15
|
## 4.89.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
|
@@ -2004,11 +2016,11 @@
|
|
|
2004
2016
|
`utils/console-tier.ts` + `composables/useConsoleTier.ts` mirror the server's
|
|
2005
2017
|
own rule from two endpoints the console already calls, unprojected:
|
|
2006
2018
|
|
|
2007
|
-
|
|
2008
|
-
|
|
2019
|
+
GET /api/members/user/:user/app/admin the Seven365 staff membership
|
|
2020
|
+
GET /api/roles/id/:role that membership's role document
|
|
2009
2021
|
|
|
2010
|
-
|
|
2011
|
-
|
|
2022
|
+
owner = member.type === "admin" && role.type === "admin" && role.default === true
|
|
2023
|
+
staff = member.type === "admin" && role.type === "admin"
|
|
2012
2024
|
|
|
2013
2025
|
`role.default` is the marker because it is the only property of a platform
|
|
2014
2026
|
staff role no API caller can set - `role.controller.ts` validates create and
|
|
@@ -1119,6 +1119,56 @@ select option {
|
|
|
1119
1119
|
}
|
|
1120
1120
|
}
|
|
1121
1121
|
|
|
1122
|
+
/* Phones: tables restack into one card per row (Vuetify mobile mode, set in
|
|
1123
|
+
plugins/vuetify.ts), so the 720px grid floor above must not apply. */
|
|
1124
|
+
@media (max-width: 599.98px) {
|
|
1125
|
+
.app-table-scroll > * {
|
|
1126
|
+
min-width: 0;
|
|
1127
|
+
}
|
|
1128
|
+
|
|
1129
|
+
.v-data-table__tr--mobile {
|
|
1130
|
+
border-bottom: 1px solid var(--border);
|
|
1131
|
+
}
|
|
1132
|
+
|
|
1133
|
+
/* One line per field: the desktop row height (52px) and the table-card
|
|
1134
|
+
cell padding (`.table-card tbody td`, !important) made every field of a
|
|
1135
|
+
card a tall block with big gaps (owner 2026-10-02). */
|
|
1136
|
+
.v-data-table .v-table__wrapper > table tbody > tr.v-data-table__tr--mobile > td {
|
|
1137
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
|
|
1138
|
+
column-gap: 12px;
|
|
1139
|
+
min-height: 0;
|
|
1140
|
+
height: auto;
|
|
1141
|
+
padding: 4px 16px !important;
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
.v-data-table .v-table__wrapper > table tbody > tr.v-data-table__tr--mobile > td:first-child {
|
|
1145
|
+
padding-top: 12px !important;
|
|
1146
|
+
}
|
|
1147
|
+
|
|
1148
|
+
.v-data-table .v-table__wrapper > table tbody > tr.v-data-table__tr--mobile > td:last-child {
|
|
1149
|
+
padding-bottom: 12px !important;
|
|
1150
|
+
}
|
|
1151
|
+
|
|
1152
|
+
.v-data-table__td-title {
|
|
1153
|
+
color: var(--muted);
|
|
1154
|
+
font-size: 12px;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
.v-data-table__td-value {
|
|
1158
|
+
min-width: 0;
|
|
1159
|
+
overflow-wrap: anywhere;
|
|
1160
|
+
}
|
|
1161
|
+
|
|
1162
|
+
/* Long values (emails, sync messages) wrap inside the card instead of
|
|
1163
|
+
running off it; chips and buttons keep their one-line shape. */
|
|
1164
|
+
.v-data-table__td-value :is(span, div, p, a):not(.v-chip):not(.v-chip *):not(.v-btn):not(.v-btn *) {
|
|
1165
|
+
white-space: normal !important;
|
|
1166
|
+
overflow: visible;
|
|
1167
|
+
text-overflow: clip;
|
|
1168
|
+
max-width: 100%;
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1122
1172
|
/* ------------------------------------------------------------------ */
|
|
1123
1173
|
/* Field label (`components/InputLabel.vue`, 125 caller files). */
|
|
1124
1174
|
/* */
|
|
@@ -60,4 +60,12 @@ defineProps({
|
|
|
60
60
|
color: var(--text2);
|
|
61
61
|
max-width: 34ch;
|
|
62
62
|
}
|
|
63
|
+
|
|
64
|
+
/* Phones (owner 2026-10-02, "big gap"): a fixed-height panel or empty state
|
|
65
|
+
left a tall blank block under one line of content; fit the content instead. */
|
|
66
|
+
@media (max-width: 599.98px) {
|
|
67
|
+
.dashboard-empty {
|
|
68
|
+
min-height: 72px !important;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
63
71
|
</style>
|
|
@@ -5149,4 +5149,18 @@ function formatDashboardTime(value?: string) {
|
|
|
5149
5149
|
padding: 0;
|
|
5150
5150
|
white-space: nowrap;
|
|
5151
5151
|
}
|
|
5152
|
+
|
|
5153
|
+
/* Phones (owner 2026-10-02, "big gap"): a fixed-height panel or empty state
|
|
5154
|
+
left a tall blank block under one line of content; fit the content instead. */
|
|
5155
|
+
@media (max-width: 599.98px) {
|
|
5156
|
+
.dashboard-panel {
|
|
5157
|
+
height: auto;
|
|
5158
|
+
min-height: 0;
|
|
5159
|
+
}
|
|
5160
|
+
|
|
5161
|
+
.figma-panel {
|
|
5162
|
+
min-height: 0;
|
|
5163
|
+
padding: 18px 18px 16px;
|
|
5164
|
+
}
|
|
5165
|
+
}
|
|
5152
5166
|
</style>
|
|
@@ -104,4 +104,14 @@ defineEmits(["action"]);
|
|
|
104
104
|
margin-top: 20px;
|
|
105
105
|
min-width: 0;
|
|
106
106
|
}
|
|
107
|
+
|
|
108
|
+
/* Phones (owner 2026-10-02, "big gap"): a fixed-height panel or empty state
|
|
109
|
+
left a tall blank block under one line of content; fit the content instead. */
|
|
110
|
+
@media (max-width: 599.98px) {
|
|
111
|
+
.dashboard-panel {
|
|
112
|
+
height: auto;
|
|
113
|
+
min-height: 0;
|
|
114
|
+
padding: 18px 18px 16px;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
107
117
|
</style>
|
|
@@ -77,10 +77,11 @@
|
|
|
77
77
|
</v-tab>
|
|
78
78
|
</v-tabs>
|
|
79
79
|
|
|
80
|
+
<!-- Wraps on narrow screens (was a fixed 60px row: on a phone the
|
|
81
|
+
"Not Checked Out" label stacked one letter per line). -->
|
|
80
82
|
<v-card
|
|
81
|
-
class="w-100 px-3 d-flex align-center ga-
|
|
83
|
+
class="w-100 px-3 d-flex flex-wrap align-center ga-3 py-2 visitor-filters"
|
|
82
84
|
flat
|
|
83
|
-
:height="60"
|
|
84
85
|
>
|
|
85
86
|
<v-text-field
|
|
86
87
|
v-model="searchInput"
|
|
@@ -3159,4 +3160,13 @@ watchEffect(async () => {
|
|
|
3159
3160
|
opacity: 0.55;
|
|
3160
3161
|
cursor: not-allowed;
|
|
3161
3162
|
}
|
|
3163
|
+
|
|
3164
|
+
.visitor-filters > *:not(.v-checkbox) {
|
|
3165
|
+
flex: 1 1 160px;
|
|
3166
|
+
min-width: 150px;
|
|
3167
|
+
}
|
|
3168
|
+
|
|
3169
|
+
.visitor-filters > .v-checkbox {
|
|
3170
|
+
flex: 0 0 auto;
|
|
3171
|
+
}
|
|
3162
3172
|
</style>
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@7365admin1/layer-common",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "4.
|
|
5
|
+
"version": "4.90.1",
|
|
6
6
|
"author": "7365admin1",
|
|
7
7
|
"main": "./nuxt.config.ts",
|
|
8
8
|
"//files": "What a consumer extending this layer actually loads. Without this npm ships the whole working tree - the changesets, the CI workflows, the render harness in tools/ and any scratch directory that happened to exist at publish time. Nuxt resolves a layer by directory, so every runtime directory below has to stay listed; adding a new top-level runtime directory means adding it here too.",
|
package/plugins/vuetify.ts
CHANGED
|
@@ -114,6 +114,12 @@ export default defineNuxtPlugin((app) => {
|
|
|
114
114
|
|
|
115
115
|
const vuetify = createVuetify({
|
|
116
116
|
defaults: {
|
|
117
|
+
// Phones (owner 2026-10-02, "most pages are not mobile responsive"): below
|
|
118
|
+
// 600px every data table shows each row as a stacked card (label: value)
|
|
119
|
+
// instead of a wide grid scrolled sideways. Tablets and desktop unchanged.
|
|
120
|
+
VDataTable: { mobileBreakpoint: "sm" },
|
|
121
|
+
VDataTableServer: { mobileBreakpoint: "sm" },
|
|
122
|
+
VDataTableVirtual: { mobileBreakpoint: "sm" },
|
|
117
123
|
VTextField: {
|
|
118
124
|
variant: "outlined",
|
|
119
125
|
density: "comfortable",
|