All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m5s
Combines shared, blog, market, cart, events, federation, and account into a single repository. Eliminates submodule sync, sibling model copying at build time, and per-app CI orchestration. Changes: - Remove per-app .git, .gitmodules, .gitea, submodule shared/ dirs - Remove stale sibling model copies from each app - Update all 6 Dockerfiles for monorepo build context (root = .) - Add build directives to docker-compose.yml - Add single .gitea/workflows/ci.yml with change detection - Add .dockerignore for monorepo build context - Create __init__.py for federation and account (cross-app imports)
50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
"""Widget descriptors for cross-domain UI composition.
|
|
|
|
Each widget type describes a UI fragment that one domain contributes to
|
|
another domain's page. Host apps iterate widgets generically — they never
|
|
name the contributing domain.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Callable
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class NavWidget:
|
|
"""Renders nav items on a container page (entries, calendars, markets)."""
|
|
domain: str
|
|
order: int
|
|
context_fn: Callable # async (session, *, container_type, container_id, **kw) -> dict
|
|
template: str
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class CardWidget:
|
|
"""Decorates content cards in listings with domain data."""
|
|
domain: str
|
|
order: int
|
|
batch_fn: Callable # async (session, post_ids) -> dict[int, list]
|
|
context_key: str # key injected into each post dict
|
|
template: str
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class AccountPageWidget:
|
|
"""Sub-page under /auth/<slug>/."""
|
|
domain: str
|
|
slug: str
|
|
label: str
|
|
order: int
|
|
context_fn: Callable # async (session, *, user_id, **kw) -> dict
|
|
template: str
|
|
|
|
|
|
@dataclass(frozen=True, slots=True)
|
|
class AccountNavLink:
|
|
"""Nav link on account page (internal or external)."""
|
|
label: str
|
|
order: int
|
|
href_fn: Callable # () -> str
|
|
external: bool = False
|