Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bad3418a7c | ||
|
|
a8bfdbf20c |
@@ -36,3 +36,21 @@ PYTHONPATH=src:/mnt/DATA/git/govoplan-core/src \
|
|||||||
The module migration is applied through the platform migration runner when the
|
The module migration is applied through the platform migration runner when the
|
||||||
module is enabled. Destructive retirement requires the normal snapshot and
|
module is enabled. Destructive retirement requires the normal snapshot and
|
||||||
uninstall-guard process because it removes planning history and events.
|
uninstall-guard process because it removes planning history and events.
|
||||||
|
|
||||||
|
## Git-source WebUI package
|
||||||
|
|
||||||
|
The repository root exposes `@govoplan/projects-webui` for Git-tagged release
|
||||||
|
dependencies. It mirrors the owning `webui/package.json` version, public
|
||||||
|
TypeScript/CSS exports and peer requirements, with entry paths under
|
||||||
|
`webui/src`. Consumers provide the shared Core/React peers; the facade runs no
|
||||||
|
development or install scripts. The source archive contains `webui/src`, this
|
||||||
|
README and any repository license file. Run module development checks from `webui/`; Python
|
||||||
|
installation remains governed by `pyproject.toml`.
|
||||||
|
|
||||||
|
Das Repository stellt `@govoplan/projects-webui` am Wurzelpfad für versionierte
|
||||||
|
Git-Abhängigkeiten bereit. Version, öffentliche TypeScript-/CSS-Exporte und
|
||||||
|
Peer-Anforderungen entsprechen `webui/package.json`; die Einstiegspfade liegen
|
||||||
|
unter `webui/src`. Gemeinsame Core-/React-Peers stellt die einbindende Anwendung
|
||||||
|
bereit. Die Fassade führt keine Entwicklungs- oder Installationsskripte aus.
|
||||||
|
Entwicklungsprüfungen bleiben in `webui/`, die Python-Installation weiterhin in
|
||||||
|
`pyproject.toml` definiert.
|
||||||
|
|||||||
+29
-3
@@ -1,8 +1,34 @@
|
|||||||
{
|
{
|
||||||
"name": "@govoplan/projects",
|
"name": "@govoplan/projects-webui",
|
||||||
"version": "0.1.19",
|
"version": "0.1.20",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "GovOPlaN Projects domain module.",
|
"description": "GovOPlaN Projects domain module.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"peerDependencies": {}
|
"peerDependencies": {
|
||||||
|
"@govoplan/core-webui": "^0.1.18",
|
||||||
|
"lucide-react": "^1.23.0",
|
||||||
|
"react": ">=19.2.7 <20",
|
||||||
|
"react-dom": ">=19.2.7 <20",
|
||||||
|
"react-router": ">=8.3.0 <9"
|
||||||
|
},
|
||||||
|
"main": "webui/src/index.ts",
|
||||||
|
"module": "webui/src/index.ts",
|
||||||
|
"types": "webui/src/index.ts",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./webui/src/index.ts",
|
||||||
|
"import": "./webui/src/index.ts"
|
||||||
|
},
|
||||||
|
"./styles/projects.css": "./webui/src/styles/projects.css"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@govoplan/core-webui": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"webui/src",
|
||||||
|
"README.md",
|
||||||
|
"LICENSE"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "govoplan-projects"
|
name = "govoplan-projects"
|
||||||
version = "0.1.19"
|
version = "0.1.20"
|
||||||
description = "GovOPlaN Projects domain module."
|
description = "GovOPlaN Projects domain module."
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.12"
|
requires-python = ">=3.12"
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ from govoplan_projects.backend.service import (
|
|||||||
|
|
||||||
MODULE_ID = "projects"
|
MODULE_ID = "projects"
|
||||||
MODULE_NAME = "Projects"
|
MODULE_NAME = "Projects"
|
||||||
MODULE_VERSION = "0.1.19"
|
MODULE_VERSION = "0.1.20"
|
||||||
READ_SCOPE = "projects:project:read"
|
READ_SCOPE = "projects:project:read"
|
||||||
WRITE_SCOPE = "projects:project:write"
|
WRITE_SCOPE = "projects:project:write"
|
||||||
ADMIN_SCOPE = "projects:project:admin"
|
ADMIN_SCOPE = "projects:project:admin"
|
||||||
@@ -216,6 +216,8 @@ DOCUMENTATION = (
|
|||||||
"capacity assumptions, outcomes, and benefit reviews without absorbing work-item ownership."
|
"capacity assumptions, outcomes, and benefit reviews without absorbing work-item ownership."
|
||||||
),
|
),
|
||||||
body=(
|
body=(
|
||||||
|
"Documentation books sit immediately beside the visible heading or contextual label for "
|
||||||
|
"Projects, not among operational action buttons. Field help remains beside its label. "
|
||||||
"Projects owns native portfolio and project context, immutable revisions of goals and intended outcomes, "
|
"Projects owns native portfolio and project context, immutable revisions of goals and intended outcomes, "
|
||||||
"milestones, participants, status, dependencies, capacity assumptions, benefit reviews, and governed resource references. "
|
"milestones, participants, status, dependencies, capacity assumptions, benefit reviews, and governed resource references. "
|
||||||
"Create or revise the planning context, review its impact, and link provider-owned work and evidence without copying it. "
|
"Create or revise the planning context, review its impact, and link provider-owned work and evidence without copying it. "
|
||||||
@@ -291,6 +293,9 @@ DOCUMENTATION = (
|
|||||||
"Ergebnisse und Nutzenprüfungen koordinieren, ohne die Eigentümerschaft an Arbeitselementen zu übernehmen."
|
"Ergebnisse und Nutzenprüfungen koordinieren, ohne die Eigentümerschaft an Arbeitselementen zu übernehmen."
|
||||||
),
|
),
|
||||||
"body": (
|
"body": (
|
||||||
|
"Dokumentationsbücher stehen unmittelbar neben der sichtbaren Überschrift oder "
|
||||||
|
"Kontextbezeichnung für Projekte, nicht zwischen ausführbaren Aktionsschaltflächen. Feldhilfe "
|
||||||
|
"bleibt neben der Feldbezeichnung. "
|
||||||
"Projects führt den nativen Portfolio- und Projektkontext, unveränderliche Revisionen von Zielen und "
|
"Projects führt den nativen Portfolio- und Projektkontext, unveränderliche Revisionen von Zielen und "
|
||||||
"beabsichtigten Ergebnissen, Meilensteine, Beteiligte, Status, Abhängigkeiten, Kapazitätsannahmen, "
|
"beabsichtigten Ergebnissen, Meilensteine, Beteiligte, Status, Abhängigkeiten, Kapazitätsannahmen, "
|
||||||
"Nutzenprüfungen und gesteuerte Ressourcenreferenzen. Planungskontext wird angelegt oder revidiert, "
|
"Nutzenprüfungen und gesteuerte Ressourcenreferenzen. Planungskontext wird angelegt oder revidiert, "
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@govoplan/projects-webui",
|
"name": "@govoplan/projects-webui",
|
||||||
"version": "0.1.19",
|
"version": "0.1.20",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
|
|||||||
@@ -241,7 +241,9 @@ export default function ProjectsPage({ settings, auth }: PlatformRouteContext) {
|
|||||||
</label>
|
</label>
|
||||||
<span className="projects-count">{total} objects</span>
|
<span className="projects-count">{total} objects</span>
|
||||||
</>}
|
</>}
|
||||||
helpAction={<DocumentationHelpLink
|
title="Projects"
|
||||||
|
titleLevel={1}
|
||||||
|
titleHelp={<DocumentationHelpLink
|
||||||
reference={{ topicId: "projects.module-boundary", documentationType: "user" }}
|
reference={{ topicId: "projects.module-boundary", documentationType: "user" }}
|
||||||
label="Open Projects documentation"
|
label="Open Projects documentation"
|
||||||
/>}
|
/>}
|
||||||
@@ -309,7 +311,7 @@ function ProjectDetail({ record, canWrite, onEdit }: {
|
|||||||
<header className="project-detail-header">
|
<header className="project-detail-header">
|
||||||
<div>
|
<div>
|
||||||
<span className="project-eyebrow">{humanize(record.object_kind)} · {record.object_key}</span>
|
<span className="project-eyebrow">{humanize(record.object_kind)} · {record.object_key}</span>
|
||||||
<h1>{record.title}</h1>
|
<h2>{record.title}</h2>
|
||||||
</div>
|
</div>
|
||||||
<div className="project-detail-actions">
|
<div className="project-detail-actions">
|
||||||
<StatusBadge status={statusTone(record.state)} label={humanize(record.state)} />
|
<StatusBadge status={statusTone(record.state)} label={humanize(record.state)} />
|
||||||
|
|||||||
Executable
+12
@@ -0,0 +1,12 @@
|
|||||||
|
import type { PlatformTranslations } from "@govoplan/core-webui";
|
||||||
|
|
||||||
|
/** Module-owned translations for contextual headings. */
|
||||||
|
export const generatedTranslations: PlatformTranslations = {
|
||||||
|
en: {
|
||||||
|
"Projects": "Projects",
|
||||||
|
},
|
||||||
|
de: {
|
||||||
|
"Projects": "Projekte",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
import { createElement, lazy } from "react";
|
import { createElement, lazy } from "react";
|
||||||
import type { PlatformWebModule } from "@govoplan/core-webui";
|
import type { PlatformWebModule } from "@govoplan/core-webui";
|
||||||
|
import { generatedTranslations } from "./i18n/generatedTranslations";
|
||||||
import "./styles/projects.css";
|
import "./styles/projects.css";
|
||||||
|
|
||||||
|
|
||||||
const ProjectsPage = lazy(() => import("./features/projects/ProjectsPage"));
|
const ProjectsPage = lazy(() => import("./features/projects/ProjectsPage"));
|
||||||
|
|
||||||
export const projectsModule: PlatformWebModule = {
|
export const projectsModule: PlatformWebModule = {
|
||||||
|
translations: generatedTranslations,
|
||||||
id: "projects",
|
id: "projects",
|
||||||
label: "Projects",
|
label: "Projects",
|
||||||
version: "0.1.14",
|
version: "0.1.14",
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
border-bottom: 1px solid var(--border);
|
border-bottom: 1px solid var(--border);
|
||||||
}
|
}
|
||||||
|
|
||||||
.project-detail-header h1 {
|
.project-detail-header h2 {
|
||||||
margin: 4px 0 0;
|
margin: 4px 0 0;
|
||||||
font-size: 1.4rem;
|
font-size: 1.4rem;
|
||||||
letter-spacing: 0;
|
letter-spacing: 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user