@7365admin1/layer-common 4.0.3-staging.233 → 4.0.3-staging.235

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.
@@ -92,6 +92,16 @@
92
92
  font-family: var(--font-sans, Roboto, sans-serif);
93
93
  }
94
94
 
95
+ /* `[class*="text-h"]` is a substring match, so the rule above would also
96
+ catch an icon: `text-h6` and friends are used as SIZE classes directly on
97
+ `<v-icon>` (DeliveryCompany, PasswordConfirmation, OvernightParking-
98
+ Management), and `text-high-emphasis` matches too. The re-pointed family
99
+ would then beat `.material-symbols-outlined`, the ligature would fall back,
100
+ and the icon would draw as its literal name - hygiene saw the red word
101
+ "error" on its work-order list. `:not(.material-symbols-outlined)` keeps
102
+ icons out of the match set; web-app-hygiene `517eaeb` and web-app-account
103
+ #26 carry the same guard on their local copies. */
104
+
95
105
  /* ------------------------------------------------------------------ */
96
106
  /* The icon face. */
97
107
  /* ------------------------------------------------------------------ */
@@ -109,8 +119,18 @@
109
119
  * through `.mdi:before`, which we no longer emit. Only `text-transform` has
110
120
  * to be stated: `.v-btn` uppercases its contents, and an uppercased "close"
111
121
  * matches no ligature, so the icon would render as the word.
122
+ *
123
+ * The scoped selectors are load-bearing, not belt-and-braces: an app bundle
124
+ * emits Vuetify's typography utilities twice, and the second
125
+ * `.text-h6 { font-family: Roboto }` lands AFTER this rule, winning the
126
+ * 0,1,0 tie on source order. An icon sized with `text-h6` then drew the
127
+ * word in Roboto even with the re-point above guarded (measured in
128
+ * web-app-account's bundle). `.v-application`-scoped, the family is 0,2,0
129
+ * and survives any typography size class on the icon.
112
130
  */
113
- .material-symbols-outlined {
131
+ .material-symbols-outlined,
132
+ .v-application .material-symbols-outlined,
133
+ .v-overlay-container .material-symbols-outlined {
114
134
  font-family: "Material Symbols Outlined";
115
135
  font-style: normal;
116
136
  font-variation-settings:
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.0.3-staging.233",
5
+ "version": "4.0.3-staging.235",
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.",
@@ -24,7 +24,8 @@
24
24
  "public",
25
25
  "services",
26
26
  "types",
27
- "utils"
27
+ "utils",
28
+ "!**/*.test.ts"
28
29
  ],
29
30
  "publishConfig": {
30
31
  "access": "public"
@@ -1,108 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import { test } from "node:test";
3
-
4
- import { moduleNameFromRoute } from "./breadcrumb.ts";
5
-
6
- /**
7
- * Real routes, not invented ones: name, path and parameters exactly as
8
- * vue-router hands them to the bar in each application.
9
- */
10
- const ID = "68b0c1d2e3f4a5b6c7d8e9f0";
11
-
12
- test("a site application names the page, not its parameters", () => {
13
- assert.equal(
14
- moduleNameFromRoute({
15
- name: "org-site-work-orders",
16
- path: `/${ID}/${ID}/work-orders`,
17
- params: { org: ID, site: ID },
18
- }),
19
- "Work Orders"
20
- );
21
- });
22
-
23
- test("a detail route names its module, not its argument", () => {
24
- assert.equal(
25
- moduleNameFromRoute({
26
- name: "org-site-feedbacks-id",
27
- path: `/${ID}/${ID}/feedbacks/${ID}`,
28
- params: { org: ID, site: ID, id: ID },
29
- }),
30
- "Feedbacks"
31
- );
32
- assert.equal(
33
- moduleNameFromRoute({
34
- name: "org-site-members-status",
35
- path: `/${ID}/${ID}/members/pending`,
36
- params: { org: ID, site: ID, status: "pending" },
37
- }),
38
- "Members"
39
- );
40
- });
41
-
42
- test("a fixed folder in front of the context parameter is not the page", () => {
43
- // THE DEFECT: every screen of the organization application read "Org".
44
- assert.equal(
45
- moduleNameFromRoute({
46
- name: "org-organization-marketplace",
47
- path: `/org/${ID}/marketplace`,
48
- params: { organization: ID },
49
- }),
50
- "Marketplace"
51
- );
52
- assert.equal(
53
- moduleNameFromRoute({
54
- name: "org-organization-payment-methods-linked",
55
- path: `/org/${ID}/payment-methods/linked`,
56
- params: { organization: ID },
57
- }),
58
- "Payment Methods Linked"
59
- );
60
- });
61
-
62
- test("a literal second segment is NOT a skipped context", () => {
63
- // `/organizations/status/:status` also begins with a literal folder, but
64
- // "Organizations" is the page here - only the THIRD segment is a parameter.
65
- assert.equal(
66
- moduleNameFromRoute({
67
- name: "organizations-status-status",
68
- path: "/organizations/status/pending",
69
- params: { status: "pending" },
70
- }),
71
- "Organizations"
72
- );
73
- });
74
-
75
- test("a route with no parameters is left alone", () => {
76
- assert.equal(
77
- moduleNameFromRoute({
78
- name: "super-admin-client-list",
79
- path: "/super-admin/client-list",
80
- params: {},
81
- }),
82
- "Super Admin Client List"
83
- );
84
- assert.equal(
85
- moduleNameFromRoute({ name: "personal-info-name", path: "/personal-info/name", params: {} }),
86
- "Personal Info Name"
87
- );
88
- });
89
-
90
- test("acronyms keep their case", () => {
91
- assert.equal(
92
- moduleNameFromRoute({
93
- name: "org-site-virtual-patrol-cctv",
94
- path: `/${ID}/${ID}/virtual-patrol/cctv`,
95
- params: { org: ID, site: ID },
96
- }),
97
- "Virtual Patrol CCTV"
98
- );
99
- });
100
-
101
- test("a context-only route has no page half", () => {
102
- // The organization dashboard: the bar shows the organization's name alone.
103
- assert.equal(
104
- moduleNameFromRoute({ name: "org-organization", path: `/org/${ID}`, params: { organization: ID } }),
105
- ""
106
- );
107
- assert.equal(moduleNameFromRoute({ name: "", path: "/", params: {} }), "");
108
- });