@7365admin1/layer-common 3.2.2-staging.182 → 3.2.2-staging.188
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 +6 -0
- package/assets/css/primitives.css +22 -0
- package/assets/css/screens.css +10 -1
- package/components/DashboardEmptyState.vue +37 -2
- package/components/DashboardMain.vue +247 -99
- package/components/Layout/Header.vue +7 -32
- package/components/OnlineFormConfigurationForm.vue +82 -13
- package/components/OnlineFormFill.vue +14 -4
- package/components/SwitchContext.vue +30 -1
- package/package.json +1 -1
- package/utils/breadcrumb.test.ts +108 -0
- package/utils/breadcrumb.ts +82 -0
- package/utils/dashboard.test.ts +118 -0
- package/utils/dashboard.ts +53 -0
- package/utils/theme-aa-ledger.ts +9 -3
- package/utils/theme.test.ts +88 -4
package/CHANGELOG.md
CHANGED
|
@@ -614,6 +614,28 @@ button.app-btn--err {
|
|
|
614
614
|
opacity: 1;
|
|
615
615
|
}
|
|
616
616
|
|
|
617
|
+
/*
|
|
618
|
+
* A native `<select>`'s option list is painted by the BROWSER, not by the page.
|
|
619
|
+
* The control above sets `color`, and an `<option>` inherits it - but it gets
|
|
620
|
+
* no background of its own, so the browser paints its own popup behind the
|
|
621
|
+
* theme's ink. In dark mode that popup is white on Windows/Chrome, and the
|
|
622
|
+
* theme's near-white ink on it measures 1.14:1: the list reads as blank, with
|
|
623
|
+
* only the highlighted row legible. QA reported exactly that on two apps.
|
|
624
|
+
*
|
|
625
|
+
* Giving the option the card's own fill and ink is what makes the open list
|
|
626
|
+
* belong to the theme. `--card`/`--text` and not a literal, so it follows the
|
|
627
|
+
* `v-theme--*` subtree the select is actually in - a dialog that forces a
|
|
628
|
+
* theme included. Declared once here rather than per component, so every
|
|
629
|
+
* native select this layer renders is covered, in every consuming app.
|
|
630
|
+
*
|
|
631
|
+
* The FRAME around the list is browser chrome and is not ours to paint; a
|
|
632
|
+
* light strip may remain around the options in some browsers.
|
|
633
|
+
*/
|
|
634
|
+
select option {
|
|
635
|
+
background-color: var(--card);
|
|
636
|
+
color: var(--text);
|
|
637
|
+
}
|
|
638
|
+
|
|
617
639
|
/* The `trailing` slot's control - same muted weight as the leading icon, so a
|
|
618
640
|
reveal toggle reads as field chrome rather than as a second action. */
|
|
619
641
|
.app-field__trailing {
|
package/assets/css/screens.css
CHANGED
|
@@ -646,7 +646,16 @@
|
|
|
646
646
|
*/
|
|
647
647
|
.table-card thead th {
|
|
648
648
|
background: var(--thead) !important;
|
|
649
|
-
|
|
649
|
+
/*
|
|
650
|
+
* `--text2`, not the prototype's `--muted`. `--muted` on the header band
|
|
651
|
+
* measures 3.10:1 in light (3.24:1 where the band sits on a plain card) -
|
|
652
|
+
* below AA, and reported independently by two apps' QA runs. `--text2` is
|
|
653
|
+
* the design's SECONDARY text token: 9.22:1 light / 9.57:1 dark on the same
|
|
654
|
+
* band, while still sitting clearly below the primary ink the data rows use
|
|
655
|
+
* (16.52:1 / 13.77:1), so the header keeps reading as secondary to the data.
|
|
656
|
+
* The uppercase/800/11px treatment below is unchanged.
|
|
657
|
+
*/
|
|
658
|
+
color: var(--text2) !important;
|
|
650
659
|
font-size: var(--fs-table-head) !important;
|
|
651
660
|
font-weight: var(--fw-table-head) !important;
|
|
652
661
|
letter-spacing: var(--ls-table-head);
|
|
@@ -1,10 +1,28 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
"No data to display" and "we could not fetch it" are not the same sentence.
|
|
3
|
+
|
|
4
|
+
This component drew the first one for both, because every dashboard request
|
|
5
|
+
defaulted a rejection to an empty list. `error` splits them: a genuine zero
|
|
6
|
+
keeps the neutral wording, a failed request says so in the error tone and
|
|
7
|
+
tells the reader the figure is missing rather than nil.
|
|
8
|
+
-->
|
|
1
9
|
<template>
|
|
2
10
|
<div
|
|
3
11
|
class="d-flex flex-column align-center justify-center text-center dashboard-empty"
|
|
12
|
+
:class="{ 'dashboard-empty--error': error }"
|
|
4
13
|
:style="{ minHeight: compact ? '72px' : '140px', gap: '8px' }"
|
|
14
|
+
role="status"
|
|
5
15
|
>
|
|
6
|
-
<v-icon
|
|
7
|
-
|
|
16
|
+
<v-icon
|
|
17
|
+
:icon="error ? 'mdi-cloud-alert-outline' : 'mdi-database-search-outline'"
|
|
18
|
+
size="28"
|
|
19
|
+
/>
|
|
20
|
+
<span class="text-caption font-weight-bold">
|
|
21
|
+
{{ error ? "Couldn't load this data" : "No data to display" }}
|
|
22
|
+
</span>
|
|
23
|
+
<span v-if="error" class="text-caption dashboard-empty__hint">
|
|
24
|
+
The request failed — this is not a zero. Refresh to try again.
|
|
25
|
+
</span>
|
|
8
26
|
</div>
|
|
9
27
|
</template>
|
|
10
28
|
|
|
@@ -14,6 +32,11 @@ defineProps({
|
|
|
14
32
|
type: Boolean,
|
|
15
33
|
default: false,
|
|
16
34
|
},
|
|
35
|
+
/** The request behind this panel failed - say so instead of showing "none". */
|
|
36
|
+
error: {
|
|
37
|
+
type: Boolean,
|
|
38
|
+
default: false,
|
|
39
|
+
},
|
|
17
40
|
});
|
|
18
41
|
</script>
|
|
19
42
|
|
|
@@ -25,4 +48,16 @@ defineProps({
|
|
|
25
48
|
font-family: var(--font-sans);
|
|
26
49
|
color: var(--muted);
|
|
27
50
|
}
|
|
51
|
+
|
|
52
|
+
/* `--err` is the design's own error tone and is AA in both themes; the hint
|
|
53
|
+
line stays on `--text2` so the explanation is never the palest thing here
|
|
54
|
+
(a dimmed explanation is the one line that must stay readable). */
|
|
55
|
+
.dashboard-empty--error {
|
|
56
|
+
color: var(--err);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.dashboard-empty__hint {
|
|
60
|
+
color: var(--text2);
|
|
61
|
+
max-width: 34ch;
|
|
62
|
+
}
|
|
28
63
|
</style>
|