diff --git a/src/meshcore_hub/web/static/js/spa/components.js b/src/meshcore_hub/web/static/js/spa/components.js index b2eac88..51f008b 100644 --- a/src/meshcore_hub/web/static/js/spa/components.js +++ b/src/meshcore_hub/web/static/js/spa/components.js @@ -2,6 +2,18 @@ * MeshCore Hub SPA - Shared UI Components * * Reusable rendering functions using lit-html. + * + * Styling conventions: + * - Page

: `text-3xl font-bold`; header row wrapper: `mb-6`. + * - Content/detail cards: `card bg-base-100 shadow-xl`; stat cards and + * table wrappers: `shadow-sm`; mobile list cards: `shadow-sm`. + * - Muted text: `opacity-70` (primary), `opacity-60` (secondary), + * `opacity-50` (timestamps/tertiary) — not `text-base-content/N`. + * - Empty states: `text-center py-8 opacity-70`. + * - Panel-level surfaces: `rounded-box`; small inline chips: `rounded`. + * - Buttons: table-row icon actions `btn btn-xs btn-ghost`; card-level + * labeled actions `btn btn-xs btn-outline` (+ `btn-error` on delete); + * modal submits full-size `btn btn-primary`, inline/header actions `btn-sm`. */ import { html, nothing } from 'lit-html'; diff --git a/src/meshcore_hub/web/static/js/spa/pages/advertisements.js b/src/meshcore_hub/web/static/js/spa/pages/advertisements.js index 0860085..daa2422 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/advertisements.js +++ b/src/meshcore_hub/web/static/js/spa/pages/advertisements.js @@ -66,7 +66,7 @@ export async function render(container, params, router) { const displayContent = error ? lastContent : content; const displayTotal = error ? lastTotal : total; litRender(html` -
+

${t('entities.advertisements')}

${tzBadge}
diff --git a/src/meshcore_hub/web/static/js/spa/pages/channels.js b/src/meshcore_hub/web/static/js/spa/pages/channels.js index 7e6998b..e9b93ea 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/channels.js +++ b/src/meshcore_hub/web/static/js/spa/pages/channels.js @@ -142,7 +142,7 @@ export async function render(container, params, router) { : nothing; const emptyMessage = channelsList.length === 0 - ? html`
+ ? html`
${t('common.no_entity_found', { entity: t('entities.channels').toLowerCase() })}
` : nothing; @@ -194,9 +194,9 @@ export async function render(container, params, router) { } litRender(html` -
-

- ${iconChannel('h-7 w-7')} +
+

+ ${iconChannel('h-8 w-8')} ${t('channels.title')}

diff --git a/src/meshcore_hub/web/static/js/spa/pages/home.js b/src/meshcore_hub/web/static/js/spa/pages/home.js index 4f1e17a..b9d25eb 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/home.js +++ b/src/meshcore_hub/web/static/js/spa/pages/home.js @@ -58,8 +58,8 @@ function renderHeroSection({ networkName, logoUrl, logoInvertLight, networkCity, : nothing; const welcomeText = networkWelcomeText - ? html`

${networkWelcomeText}

` - : html`

+ ? html`

${networkWelcomeText}

` + : html`

${t('home.welcome_default', { network_name: networkName })}

`; diff --git a/src/meshcore_hub/web/static/js/spa/pages/members.js b/src/meshcore_hub/web/static/js/spa/pages/members.js index 22aba14..999790a 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/members.js +++ b/src/meshcore_hub/web/static/js/spa/pages/members.js @@ -83,7 +83,7 @@ export async function render(container, params, router) {

${t('entities.members')}

-
+

${t('members_page.empty_state')}

${t('members_page.empty_description')}

`, container); diff --git a/src/meshcore_hub/web/static/js/spa/pages/messages.js b/src/meshcore_hub/web/static/js/spa/pages/messages.js index aa0f753..5e5ee1a 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/messages.js +++ b/src/meshcore_hub/web/static/js/spa/pages/messages.js @@ -218,7 +218,7 @@ export async function render(container, params, router) { const displayContent = error ? lastContent : content; const displayTotal = error ? lastTotal : total; litRender(html` -
+

${t('entities.messages')}

${tzBadge}
diff --git a/src/meshcore_hub/web/static/js/spa/pages/node-detail.js b/src/meshcore_hub/web/static/js/spa/pages/node-detail.js index 6d928c9..f3ed26e 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/node-detail.js +++ b/src/meshcore_hub/web/static/js/spa/pages/node-detail.js @@ -116,13 +116,13 @@ export async function render(container, params, router) {
-
+
` : html`
-
+

${t('nodes.scan_to_add')}

`; diff --git a/src/meshcore_hub/web/static/js/spa/pages/nodes.js b/src/meshcore_hub/web/static/js/spa/pages/nodes.js index 012e765..67c4da2 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/nodes.js +++ b/src/meshcore_hub/web/static/js/spa/pages/nodes.js @@ -37,7 +37,7 @@ export async function render(container, params, router) { const displayContent = error ? lastContent : content; const displayTotal = error ? lastTotal : total; litRender(html` -
+

${t('entities.nodes')}

${tzBadge}
diff --git a/src/meshcore_hub/web/static/js/spa/pages/packet-detail.js b/src/meshcore_hub/web/static/js/spa/pages/packet-detail.js index 9119b81..558ca31 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/packet-detail.js +++ b/src/meshcore_hub/web/static/js/spa/pages/packet-detail.js @@ -29,8 +29,8 @@ export async function render(container, params, router) {
-
-

${t('packets.detail_title')}

+
+

${t('packets.detail_title')}

${tzBadge}
${content}`, container); diff --git a/src/meshcore_hub/web/static/js/spa/pages/packet-group-detail.js b/src/meshcore_hub/web/static/js/spa/pages/packet-group-detail.js index a8d0fe6..a7958c5 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/packet-group-detail.js +++ b/src/meshcore_hub/web/static/js/spa/pages/packet-group-detail.js @@ -243,8 +243,8 @@ export async function render(container, params, router) {
  • ${leaf || t('packets.detail_title')}
  • -
    -

    ${t('packets.detail_title')}

    +
    +

    ${t('packets.detail_title')}

    ${tzBadge}
    ${content}`, container); diff --git a/src/meshcore_hub/web/static/js/spa/pages/packets.js b/src/meshcore_hub/web/static/js/spa/pages/packets.js index 94776f4..6b28717 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/packets.js +++ b/src/meshcore_hub/web/static/js/spa/pages/packets.js @@ -71,7 +71,7 @@ export async function render(container, params, router) { const displayContent = error ? lastContent : content; const displayTotal = error ? lastTotal : total; litRender(html` -
    +

    ${t('entities.packets')}

    ${tzBadge}
    diff --git a/src/meshcore_hub/web/static/js/spa/pages/profile.js b/src/meshcore_hub/web/static/js/spa/pages/profile.js index 5cc60d8..12c4f93 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/profile.js +++ b/src/meshcore_hub/web/static/js/spa/pages/profile.js @@ -10,7 +10,7 @@ function renderAdoptedNode(node) { const relTime = node.last_seen ? formatRelativeTime(node.last_seen) : '-'; const fullTime = node.last_seen ? formatDateTime(node.last_seen) : '-'; - return html` + return html`
    ${displayName}
    ${node.public_key}