@meddleware/dashboard-ui 0.1.94 → 0.1.96

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
@@ -5,6 +5,26 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version
5
5
  [Semantic Versioning](https://semver.org/). Before 0.2.0, breaking changes ship as patch releases.
6
6
  Releases before 0.1.85 are recorded in the git history only.
7
7
 
8
+ ## [0.1.96] - 2026-11-06
9
+
10
+ ### Changed
11
+
12
+ - Takes `@meddleware/access-gate-ui` 0.1.46 (its gate-policy template reads type-check under every `vue-tsc`) and the Dependabot merges of 2026-11-06 (image base `static-server` 0.1.12, dev tools).
13
+
14
+ ## [0.1.95] - 2026-11-05
15
+
16
+ ### Fixed
17
+
18
+ - The Blockchain view's tab strip sits under the header's real height and publishes its own offset (`--mw-sticky-extra`), so focus is not hidden behind the sticky header and strip (WCAG 2.4.11).
19
+
20
+ ### Security
21
+
22
+ - CI and the image build scan the production bundle for the e2e harness (`check-prod-bundle` from `@meddleware/frontend-config`), and `src/e2e*.ts` is no longer in the published package.
23
+
24
+ ### Changed
25
+
26
+ - Takes the embedded tools' 2026-11-05 releases (access-gate-ui 0.1.45, sealed-storage-ui 0.0.46, token-issuance-ui 0.0.44, treasury-ui 0.0.25, walrus-storage-ui 0.1.67) and `@meddleware/ui` ^0.1.38, `@meddleware/design-tokens` ^0.1.13, `@meddleware/web-utils` ^0.0.2, `@meddleware/frontend-config` ^0.0.2, `@meddleware/wallet-adapter` ^0.0.21.
27
+
8
28
  ## [0.1.94] - 2026-11-01
9
29
 
10
30
  - Shared shell, sidebar drawer on phones, tools updated, accessibility gates
package/LICENSE ADDED
@@ -0,0 +1,14 @@
1
+ BSD Zero Clause License
2
+
3
+ Copyright (c) 2024 Meddleware
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any
6
+ purpose with or without fee is hereby granted.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
9
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
10
+ FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
11
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
12
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
13
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
14
+ PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # @meddleware/dashboard-ui
2
+
3
+ The organisation-level Meddleware dashboard, served at [`dash.meddleware.co.uk`](https://dash.meddleware.co.uk): a Vue 3 + Vite single-page
4
+ app that embeds each tool from its own package (Treasury, and under *Blockchain* the Walrus Storage, Sealed Storage, Access Gate and Token
5
+ Issuance consoles) inside one shell with a chain selector. It holds no financial logic: every number is read from the chain by the embedded tool.
6
+
7
+ - **Stack:** Vue 3, Vite, `@meddleware/design-tokens`, `@meddleware/ui`, `@meddleware/wallet-adapter`.
8
+ - **Image:** `quay.io/meddleware-org/dashboard-ui`, built on `quay.io/meddleware-org/static-server` (see `Dockerfile`).
9
+ - **Context for contributors and agents:** [CLAUDE.md](CLAUDE.md); the security review is `docs/audit/dashboard-ui-audit.md`.
10
+ - **Licence:** BSD Zero Clause ([0BSD](LICENSE)).
11
+
12
+ ## Develop
13
+
14
+ ```bash
15
+ npm ci
16
+ npm run dev # Vite dev server
17
+ npm test # unit tests (Vitest)
18
+ npm run test:e2e # builds the e2e variant and runs the Playwright sweep (E2E_BROWSERS=all adds Firefox, WebKit and two mobile profiles)
19
+ npm run lint && npm run type-check
20
+ npm run build && npm run check:bundle && npm run check:dist
21
+ ```
22
+
23
+ `npm run check:bundle` fails if a test hook reached the production bundle; `npm run check:dist` fails if the build has an inline script the CSP would refuse.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@meddleware/dashboard-ui",
3
- "version": "0.1.94",
3
+ "version": "0.1.96",
4
4
  "homepage": "https://docs.meddleware.co.uk/",
5
5
  "description": "Meddleware tools hub — Vue 3 SPA listing hosted services (Walrus, Access Gate) with white-label deploy options.",
6
6
  "author": "Meddleware <dev@meddleware.co.uk>",
@@ -15,7 +15,8 @@
15
15
  "index.html",
16
16
  "vite.config.ts",
17
17
  "tsconfig.json",
18
- "CHANGELOG.md"
18
+ "CHANGELOG.md",
19
+ "!src/e2e*.ts"
19
20
  ],
20
21
  "scripts": {
21
22
  "dev": "vite",
@@ -34,28 +35,29 @@
34
35
  "check:licenses": "node scripts/third-party-licenses.mjs --check",
35
36
  "check:dist": "node scripts/check-inline-scripts.mjs",
36
37
  "shots": "SHOTS=1 playwright test",
37
- "lhci": "npm run build && lhci autorun"
38
+ "lhci": "npm run build && lhci autorun",
39
+ "check:bundle": "check-prod-bundle dist"
38
40
  },
39
41
  "publishConfig": {
40
42
  "access": "public"
41
43
  },
42
44
  "dependencies": {
43
- "@meddleware/access-gate-ui": "^0.1.44",
44
- "@meddleware/design-tokens": "^0.1.12",
45
- "@meddleware/sealed-storage-ui": "^0.0.45",
46
- "@meddleware/token-issuance-ui": "^0.0.43",
47
- "@meddleware/treasury-ui": "^0.0.24",
48
- "@meddleware/ui": "^0.1.37",
49
- "@meddleware/wallet-adapter": "^0.0.20",
50
- "@meddleware/walrus-storage-ui": "^0.1.66",
51
- "@meddleware/web-utils": "^0.0.1",
45
+ "@meddleware/access-gate-ui": "^0.1.46",
46
+ "@meddleware/design-tokens": "^0.1.13",
47
+ "@meddleware/sealed-storage-ui": "^0.0.46",
48
+ "@meddleware/token-issuance-ui": "^0.0.44",
49
+ "@meddleware/treasury-ui": "^0.0.25",
50
+ "@meddleware/ui": "^0.1.38",
51
+ "@meddleware/wallet-adapter": "^0.0.21",
52
+ "@meddleware/walrus-storage-ui": "^0.1.67",
53
+ "@meddleware/web-utils": "^0.0.2",
52
54
  "@mysten/sui": "^2.36.0",
53
55
  "vue": "^3.5.44",
54
56
  "vue-router": "^5.4.0"
55
57
  },
56
58
  "devDependencies": {
57
59
  "@lhci/cli": "^0.15.1",
58
- "@meddleware/frontend-config": "^0.0.1",
60
+ "@meddleware/frontend-config": "^0.0.2",
59
61
  "@playwright/test": "~1.64.1",
60
62
  "@types/node": "~26.6.5",
61
63
  "@vitejs/plugin-vue": "^6.0.10",
@@ -3,7 +3,7 @@
3
3
  // chain is Sui; the `chain` prop is the sidebar's choice, so a second chain switches the tool set without a rewrite. Each tool view is lazy-loaded (its deps, incl. the Walrus
4
4
  // wasm, load only when its tab is first opened) and kept alive so switching tabs preserves state.
5
5
  import { computed, defineAsyncComponent, ref, watch } from 'vue'
6
- import { AppTabNav, UiTabPanel, type AppTab } from '@meddleware/ui'
6
+ import { AppTabNav, UiTabPanel, useStickyOffset, type AppTab } from '@meddleware/ui'
7
7
 
8
8
  import { CHAINS, DEFAULT_CHAIN } from '../chains.js'
9
9
 
@@ -37,12 +37,16 @@ watch(
37
37
  )
38
38
 
39
39
  const activeComp = computed(() => tools.value.find((t) => t.id === active.value)?.comp)
40
+
41
+ // The tab strip sticks under the header: publish its height so a focused field is never left behind either of them (WCAG 2.4.11).
42
+ const strip = ref<{ $el?: unknown } | null>(null)
43
+ useStickyOffset(strip, '--mw-sticky-extra')
40
44
  </script>
41
45
 
42
46
  <template>
43
47
  <section aria-labelledby="blockchain-title" class="blockchain-view">
44
48
  <h2 id="blockchain-title" class="mw-visually-hidden">{{ chainLabel }} tools</h2>
45
- <AppTabNav v-model="active" :tabs="tabs" id-prefix="blockchain" variant="raised" size="lg" flush class="tabs" :aria-label="`${chainLabel} tools`" />
49
+ <AppTabNav v-model="active" :tabs="tabs" id-prefix="blockchain" variant="raised" size="lg" flush ref="strip" class="tabs" :aria-label="`${chainLabel} tools`" />
46
50
 
47
51
  <UiTabPanel id-prefix="blockchain" :tab="active" class="content">
48
52
  <KeepAlive>
@@ -59,10 +63,11 @@ const activeComp = computed(() => tools.value.find((t) => t.id === active.value)
59
63
  min-height: 0;
60
64
  }
61
65
 
62
- /* The tool tabs stay in view under the sticky header while the page scrolls. */
66
+ /* The tool tabs stay in view under the sticky header while the page scrolls: under its real height, which is more than its minimum when
67
+ the header wraps on a phone. */
63
68
  .tabs {
64
69
  position: sticky;
65
- top: var(--mw-header-height);
70
+ top: var(--mw-header-offset, var(--mw-header-height));
66
71
  z-index: var(--z-raised);
67
72
  background: var(--bg);
68
73
  }
package/src/e2e.ts DELETED
@@ -1,8 +0,0 @@
1
- // End-to-end build only (`vite build --mode e2e`; main.ts loads this when MODE is `e2e` and VITE_E2E is `1`, both static, so every other
2
- // build drops it). A mock wallet is registered like an extension and the chain client is a stub with nothing on it, so every embedded tool
3
- // can be checked connected (each tool's own flows are covered in its own repository).
4
- import { installE2eWallet } from '@meddleware/wallet-adapter/testing'
5
-
6
- export function installE2e(): void {
7
- installE2eWallet()
8
- }