@meddleware/dashboard-ui 0.1.98 → 0.1.100
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 +23 -0
- package/index.html +0 -1
- package/package.json +9 -9
- package/src/App.vue +3 -2
- package/src/components/NetworkSelector.vue +2 -2
- package/src/network.ts +19 -21
- package/vite.config.ts +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,29 @@ 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.100] - 2026-11-13
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- The network selector reads each network's availability from the deployment records (`networkAvailability` over the Access Gate and Sealed Storage records): a network without records for every hosted product is listed disabled as "Mainnet (not available yet)" (plain, naming no product), and one that has them is selectable. Testnet follows the same rule as mainnet.
|
|
13
|
+
- Takes `@meddleware/ui` ^0.1.43 and `@meddleware/frontend-config` ^0.0.9; the embedded tools are unchanged (access-gate-ui 0.1.49, sealed-storage-ui 0.0.49, token-issuance-ui 0.0.47, treasury-ui 0.0.28, walrus-storage-ui 0.1.70).
|
|
14
|
+
|
|
15
|
+
### Internal
|
|
16
|
+
|
|
17
|
+
- Tests: both states of the selector (not available yet; selectable) with the records mocked, for testnet and mainnet.
|
|
18
|
+
|
|
19
|
+
## [0.1.99] - 2026-11-12
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- The header shows the Meddleware mark (`BrandMark` from `@meddleware/ui` ^0.1.42) in place of the `◆` placeholder, and the browser tab, home-screen and web-manifest icons are the shared brand icon set. The app keeps no icon of its own: `public/favicon.svg` and the `<link rel="icon">` in `index.html` are removed, and `meddlewareApp` (`@meddleware/frontend-config` ^0.0.8, `name: 'Meddleware'`) emits `favicon.svg`, `favicon.ico`, `apple-touch-icon.png`, `icon-192.png`, `icon-512.png` and `site.webmanifest` and injects the links. The footer's copyright symbol is unchanged.
|
|
24
|
+
- No third-party fonts, scripts, styles, images or analytics: the only outside calls are the Sui node, the status page and the read-index the tools exist to use. CI workflows set `DO_NOT_TRACK=1`.
|
|
25
|
+
- Takes the embedded tools' releases (access-gate-ui 0.1.49, sealed-storage-ui 0.0.49, token-issuance-ui 0.0.47, treasury-ui 0.0.28, walrus-storage-ui 0.1.70), `@meddleware/wallet-adapter` ^0.0.23 and `@meddleware/ui` ^0.1.42. The installed tree now has one copy of `@meddleware/web-utils` (^0.0.4; the lock takes `@meddleware/walrus-storage-kit` 0.1.40).
|
|
26
|
+
|
|
27
|
+
### Internal
|
|
28
|
+
|
|
29
|
+
- New tests: the mark in the header (decorative) and no icon of the app's own, and, over the built `dist/` (run in CI after the build with `REQUIRE_DIST=1`), the icon set once per page, the mark in the bundle and no `◆`, no font file or font host, no third-party load and no origin beyond this site, the explorers and the protocol endpoints.
|
|
30
|
+
|
|
8
31
|
## [0.1.98] - 2026-11-08
|
|
9
32
|
|
|
10
33
|
### Changed
|
package/index.html
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
|
-
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
6
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
7
6
|
<title>Meddleware</title>
|
|
8
7
|
<meta name="description" content="The Meddleware dashboard: the treasury and the Sui tools (Walrus storage, sealed storage, access gates, token issuance) in one place, with one wallet connection for all of them." />
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meddleware/dashboard-ui",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.100",
|
|
4
4
|
"homepage": "https://docs.meddleware.co.uk/",
|
|
5
5
|
"description": "The Meddleware dashboard: the treasury, Walrus storage, sealed storage, access gates and token issuance in one place, with one wallet connection for all five tools. Vue 3 single-page app.",
|
|
6
6
|
"author": "Meddleware <dev@meddleware.co.uk>",
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
45
|
"@meddleware/access-gate-client": "^0.0.13",
|
|
46
|
-
"@meddleware/access-gate-ui": "^0.1.
|
|
46
|
+
"@meddleware/access-gate-ui": "^0.1.49",
|
|
47
47
|
"@meddleware/design-tokens": "^0.1.13",
|
|
48
48
|
"@meddleware/sealed-storage-client": "^0.0.26",
|
|
49
|
-
"@meddleware/sealed-storage-ui": "^0.0.
|
|
50
|
-
"@meddleware/token-issuance-ui": "^0.0.
|
|
51
|
-
"@meddleware/treasury-ui": "^0.0.
|
|
52
|
-
"@meddleware/ui": "^0.1.
|
|
53
|
-
"@meddleware/wallet-adapter": "^0.0.
|
|
54
|
-
"@meddleware/walrus-storage-ui": "^0.1.
|
|
49
|
+
"@meddleware/sealed-storage-ui": "^0.0.49",
|
|
50
|
+
"@meddleware/token-issuance-ui": "^0.0.47",
|
|
51
|
+
"@meddleware/treasury-ui": "^0.0.28",
|
|
52
|
+
"@meddleware/ui": "^0.1.43",
|
|
53
|
+
"@meddleware/wallet-adapter": "^0.0.23",
|
|
54
|
+
"@meddleware/walrus-storage-ui": "^0.1.70",
|
|
55
55
|
"@meddleware/web-utils": "^0.0.4",
|
|
56
56
|
"@mysten/sui": "^2.36.0",
|
|
57
57
|
"vue": "^3.5.44",
|
|
@@ -59,7 +59,7 @@
|
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@lhci/cli": "^0.16.0",
|
|
62
|
-
"@meddleware/frontend-config": "^0.0.
|
|
62
|
+
"@meddleware/frontend-config": "^0.0.9",
|
|
63
63
|
"@playwright/test": "~1.64.1",
|
|
64
64
|
"@types/node": "~26.6.5",
|
|
65
65
|
"@vitejs/plugin-vue": "^6.0.10",
|
package/src/App.vue
CHANGED
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
AppFooter,
|
|
8
8
|
AppHeader,
|
|
9
9
|
AppSidebar,
|
|
10
|
+
BrandMark,
|
|
10
11
|
ColorModeControl,
|
|
11
12
|
CopyableAddress,
|
|
12
13
|
CopyrightLine,
|
|
@@ -72,7 +73,7 @@ const title = computed(() => (typeof route.meta.title === 'string' ? route.meta.
|
|
|
72
73
|
<template #header>
|
|
73
74
|
<AppHeader variant="dark" sidebar-id="main-nav" menu-label="Open the menu">
|
|
74
75
|
<template #brand>
|
|
75
|
-
<RouterLink to="/" class="brand-link"><
|
|
76
|
+
<RouterLink to="/" class="brand-link"><BrandMark class="mark" /> Meddleware</RouterLink>
|
|
76
77
|
</template>
|
|
77
78
|
<template #actions>
|
|
78
79
|
<ColorModeControl v-model="mode" />
|
|
@@ -146,7 +147,7 @@ const title = computed(() => (typeof route.meta.title === 'string' ? route.meta.
|
|
|
146
147
|
color: inherit;
|
|
147
148
|
text-decoration: none;
|
|
148
149
|
}
|
|
149
|
-
.
|
|
150
|
+
.mark {
|
|
150
151
|
color: var(--accent);
|
|
151
152
|
}
|
|
152
153
|
.foot {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup lang="ts">
|
|
2
2
|
// Network selector for the dashboard sidebar. Reads and writes the shared useNetwork() singleton so every embedded tool view reacts to the
|
|
3
3
|
// chosen network immediately. Mainnet is selectable only when the deployment records say it is live (`src/network.ts`); until then it is
|
|
4
|
-
// listed, disabled
|
|
4
|
+
// listed, disabled and marked "not available yet".
|
|
5
5
|
import { ref, watch } from 'vue'
|
|
6
6
|
import { UiFormField, UiSelect, UiTextField } from '@meddleware/ui'
|
|
7
7
|
import { useNetwork, type MwNetwork } from '@meddleware/wallet-adapter'
|
|
@@ -32,7 +32,7 @@ const options = networkOptions()
|
|
|
32
32
|
<UiFormField id="ns-select" label="Network">
|
|
33
33
|
<template #default="{ attrs }">
|
|
34
34
|
<UiSelect :id="attrs.id" :model-value="network" @change="onNetworkChange">
|
|
35
|
-
<option v-for="o in options" :key="o.value" :value="o.value" :disabled="o.disabled"
|
|
35
|
+
<option v-for="o in options" :key="o.value" :value="o.value" :disabled="o.disabled">{{ o.label }}</option>
|
|
36
36
|
</UiSelect>
|
|
37
37
|
</template>
|
|
38
38
|
</UiFormField>
|
package/src/network.ts
CHANGED
|
@@ -16,40 +16,38 @@ export const AVAILABILITY = networkAvailability({
|
|
|
16
16
|
'sealed storage': Object.keys(SEAL_POLICIES_DEPLOYMENTS),
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
-
export interface
|
|
20
|
-
/**
|
|
19
|
+
export interface NetworkChoice {
|
|
20
|
+
/** The network can be selected. */
|
|
21
21
|
readonly open: boolean
|
|
22
|
-
/** The option's text. */
|
|
22
|
+
/** The option's text: the network's name, and "not available yet" while its records are missing. */
|
|
23
23
|
readonly label: string
|
|
24
|
-
/** The option's tooltip: what is missing, or that mainnet is coming. Absent when mainnet is open. */
|
|
25
|
-
readonly title?: string
|
|
26
24
|
}
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
26
|
+
const NAMES = { testnet: 'Testnet', mainnet: 'Mainnet' } as const
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* How a network's option reads for its availability: selectable once every hosted product has a record there, otherwise listed with
|
|
30
|
+
* "not available yet" (plain: a reader cannot act on which product is missing, so the text names none; D117).
|
|
31
|
+
*/
|
|
32
|
+
export function networkChoice(network: keyof typeof NAMES, availability: NetworkAvailability): NetworkChoice {
|
|
33
|
+
return availability.status === 'live'
|
|
34
|
+
? { open: true, label: NAMES[network] }
|
|
35
|
+
: { open: false, label: `${NAMES[network]} (not available yet)` }
|
|
38
36
|
}
|
|
39
37
|
|
|
40
38
|
export interface NetworkOption {
|
|
41
39
|
readonly value: MwNetwork
|
|
42
40
|
readonly label: string
|
|
43
41
|
readonly disabled: boolean
|
|
44
|
-
readonly title?: string
|
|
45
42
|
}
|
|
46
43
|
|
|
47
|
-
/** The options of the network selector: testnet and
|
|
48
|
-
export function networkOptions(
|
|
49
|
-
const
|
|
44
|
+
/** The options of the network selector: testnet and mainnet as the records allow, localnet always (a developer's own node). */
|
|
45
|
+
export function networkOptions(availability: Pick<typeof AVAILABILITY, 'testnet' | 'mainnet'> = AVAILABILITY): NetworkOption[] {
|
|
46
|
+
const testnet = networkChoice('testnet', availability.testnet)
|
|
47
|
+
const mainnet = networkChoice('mainnet', availability.mainnet)
|
|
50
48
|
return [
|
|
51
|
-
{ value: 'testnet', label:
|
|
52
|
-
{ value: 'mainnet', label:
|
|
49
|
+
{ value: 'testnet', label: testnet.label, disabled: !testnet.open },
|
|
50
|
+
{ value: 'mainnet', label: mainnet.label, disabled: !mainnet.open },
|
|
53
51
|
{ value: 'localnet', label: 'Localnet', disabled: false },
|
|
54
52
|
]
|
|
55
53
|
}
|
package/vite.config.ts
CHANGED
|
@@ -8,6 +8,7 @@ import { meddlewareApp } from '@meddleware/frontend-config/vite'
|
|
|
8
8
|
export default defineConfig(
|
|
9
9
|
meddlewareApp({
|
|
10
10
|
plugins: [vue()],
|
|
11
|
+
name: 'Meddleware',
|
|
11
12
|
config: {
|
|
12
13
|
optimizeDeps: {
|
|
13
14
|
// The Walrus wasm client is dynamically imported inside the inline WalrusStorageView upload flow; keep it out of the eager
|