@7365admin1/layer-common 4.90.2-staging.483 → 4.90.2-staging.484
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/assets/css/robot-hero.css +3 -0
- package/components/ClientMain.vue +56 -14
- package/package.json +1 -1
|
@@ -324,6 +324,9 @@
|
|
|
324
324
|
}
|
|
325
325
|
/* The site fleet's strip: always six columns (README §2). */
|
|
326
326
|
.hero-summary--six { grid-template-columns: repeat(6, minmax(0, 1fr)); }
|
|
327
|
+
/* Phones (owner 2026-10-02): six cells in one row cut every label ("TOTA",
|
|
328
|
+
"ONL"); three per row keeps each label whole. */
|
|
329
|
+
@media (max-width: 599.98px) { .hero-summary--six { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
|
|
327
330
|
.hero-cell {
|
|
328
331
|
--hero-cell-color: var(--hero-text);
|
|
329
332
|
position: relative;
|
|
@@ -141,17 +141,17 @@
|
|
|
141
141
|
before, and which is the one thing the admin app's
|
|
142
142
|
Organizations list showed that this one did not.
|
|
143
143
|
-->
|
|
144
|
-
<td class="td-name">
|
|
144
|
+
<td class="td-name" data-label="Organization">
|
|
145
145
|
{{ item.name }}
|
|
146
146
|
<span class="td-name-sub">{{ item.email }}</span>
|
|
147
147
|
</td>
|
|
148
148
|
<!-- A blank cell reads as a broken screen, so the one case
|
|
149
149
|
with nothing to print says so. `--text2`, not `--muted`:
|
|
150
150
|
this is text to be read, and `--muted` measures 3.24:1. -->
|
|
151
|
-
<td :class="{ 'td-nature-none': !item.nature }">
|
|
151
|
+
<td data-label="Nature" :class="{ 'td-nature-none': !item.nature }">
|
|
152
152
|
{{ item.nature ? formatNature(item.nature) : 'Not recorded' }}
|
|
153
153
|
</td>
|
|
154
|
-
<td>
|
|
154
|
+
<td data-label="Sites">
|
|
155
155
|
<span class="sites-badge">{{ item.sites }}</span>
|
|
156
156
|
</td>
|
|
157
157
|
<!--
|
|
@@ -159,7 +159,7 @@
|
|
|
159
159
|
which reads as a broken screen. It is one ordinary state, so it
|
|
160
160
|
is said once, in words.
|
|
161
161
|
-->
|
|
162
|
-
<td v-if="item.sub.state === 'none'" colspan="4" class="sub-none">
|
|
162
|
+
<td v-if="item.sub.state === 'none'" colspan="4" class="sub-none" data-label="Subscription">
|
|
163
163
|
No subscription set up
|
|
164
164
|
<button class="sub-setup-btn" @click="openSubscription(item)">
|
|
165
165
|
Set up subscription
|
|
@@ -167,13 +167,13 @@
|
|
|
167
167
|
</td>
|
|
168
168
|
|
|
169
169
|
<template v-else>
|
|
170
|
-
<td>
|
|
170
|
+
<td data-label="Subscription">
|
|
171
171
|
<span class="sub-label" :class="{ 'needs-attention': item.sub.needsAttention }">
|
|
172
172
|
{{ item.sub.label }}
|
|
173
173
|
</span>
|
|
174
174
|
</td>
|
|
175
|
-
<td class="td-muted">{{ item.sub.billingCycle }}</td>
|
|
176
|
-
<td>
|
|
175
|
+
<td class="td-muted" data-label="Billing cycle">{{ item.sub.billingCycle }}</td>
|
|
176
|
+
<td data-label="Start date">
|
|
177
177
|
<span class="date-cell">
|
|
178
178
|
<svg viewBox="0 0 16 16" fill="none" width="13" height="13">
|
|
179
179
|
<rect x="1" y="3" width="14" height="12" rx="2" stroke="#9CA3AF" stroke-width="1.3"/>
|
|
@@ -183,7 +183,7 @@
|
|
|
183
183
|
{{ item.sub.start }}
|
|
184
184
|
</span>
|
|
185
185
|
</td>
|
|
186
|
-
<td>
|
|
186
|
+
<td data-label="End date">
|
|
187
187
|
<span class="date-cell" :class="{ 'needs-attention': item.sub.needsAttention }">
|
|
188
188
|
<svg viewBox="0 0 16 16" fill="none" width="13" height="13">
|
|
189
189
|
<rect x="1" y="3" width="14" height="12" rx="2" stroke="#9CA3AF" stroke-width="1.3"/>
|
|
@@ -194,7 +194,7 @@
|
|
|
194
194
|
</span>
|
|
195
195
|
</td>
|
|
196
196
|
</template>
|
|
197
|
-
<td>
|
|
197
|
+
<td data-label="Actions">
|
|
198
198
|
<div class="action-wrap">
|
|
199
199
|
<button class="dots-btn" @click.stop="toggleMenu(item._id, $event)">
|
|
200
200
|
<span /><span /><span />
|
|
@@ -223,11 +223,11 @@
|
|
|
223
223
|
<td colspan="5" class="empty">No pending invitations.</td>
|
|
224
224
|
</tr>
|
|
225
225
|
<tr v-for="item in items" :key="item._id">
|
|
226
|
-
<td class="td-muted">{{ item.email }}</td>
|
|
227
|
-
<td>{{ item.app }}</td>
|
|
228
|
-
<td class="td-muted">{{ item.role }}</td>
|
|
229
|
-
<td><span class="status-chip pending">{{ item.status }}</span></td>
|
|
230
|
-
<td>
|
|
226
|
+
<td class="td-muted" data-label="Email">{{ item.email }}</td>
|
|
227
|
+
<td data-label="App">{{ item.app }}</td>
|
|
228
|
+
<td class="td-muted" data-label="Role">{{ item.role }}</td>
|
|
229
|
+
<td data-label="Status"><span class="status-chip pending">{{ item.status }}</span></td>
|
|
230
|
+
<td data-label="Action">
|
|
231
231
|
<button
|
|
232
232
|
class="cancel-btn"
|
|
233
233
|
:disabled="cancelLoadingId === item._id"
|
|
@@ -1314,4 +1314,46 @@ tbody td { vertical-align: middle; }
|
|
|
1314
1314
|
background: var(--err-bg);
|
|
1315
1315
|
color: var(--err);
|
|
1316
1316
|
}
|
|
1317
|
+
|
|
1318
|
+
/* Phones (owner 2026-10-02): the client table was 1085px wide inside a 390px
|
|
1319
|
+
screen. Below 600px each client is a card, one "label: value" line per cell. */
|
|
1320
|
+
@media (max-width: 599.98px) {
|
|
1321
|
+
.table-scroll table,
|
|
1322
|
+
.table-scroll tbody,
|
|
1323
|
+
.table-scroll tr,
|
|
1324
|
+
.table-scroll td {
|
|
1325
|
+
display: block;
|
|
1326
|
+
width: 100%;
|
|
1327
|
+
}
|
|
1328
|
+
|
|
1329
|
+
.table-scroll thead {
|
|
1330
|
+
display: none;
|
|
1331
|
+
}
|
|
1332
|
+
|
|
1333
|
+
.table-scroll tr {
|
|
1334
|
+
border-bottom: 1px solid var(--border);
|
|
1335
|
+
padding: 8px 0;
|
|
1336
|
+
}
|
|
1337
|
+
|
|
1338
|
+
.table-scroll td {
|
|
1339
|
+
display: grid;
|
|
1340
|
+
grid-template-columns: minmax(0, 2fr) minmax(0, 3fr);
|
|
1341
|
+
column-gap: 12px;
|
|
1342
|
+
align-items: center;
|
|
1343
|
+
padding: 4px 16px !important;
|
|
1344
|
+
border: 0;
|
|
1345
|
+
white-space: normal;
|
|
1346
|
+
overflow-wrap: anywhere;
|
|
1347
|
+
}
|
|
1348
|
+
|
|
1349
|
+
.table-scroll td[data-label]::before {
|
|
1350
|
+
content: attr(data-label);
|
|
1351
|
+
color: var(--muted);
|
|
1352
|
+
font-size: 12px;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
.table-scroll td.empty {
|
|
1356
|
+
display: block;
|
|
1357
|
+
}
|
|
1358
|
+
}
|
|
1317
1359
|
</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.90.2-staging.
|
|
5
|
+
"version": "4.90.2-staging.484",
|
|
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.",
|