@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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @iservice365/layer-common
2
2
 
3
+ ## 3.2.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 9c1803d: 08172026 Release latest version
8
+
3
9
  ## 3.2.6
4
10
 
5
11
  ### Patch Changes
@@ -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 {
@@ -646,7 +646,16 @@
646
646
  */
647
647
  .table-card thead th {
648
648
  background: var(--thead) !important;
649
- color: var(--muted) !important;
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 icon="mdi-database-search-outline" size="28" />
7
- <span class="text-caption font-weight-bold">No data to display</span>
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>