ConusAI vendor v0.1.0-beta.114
ci / gate (push) Waiting to run

This commit is contained in:
ConusAI vendor v0.1.0-beta.114
2026-11-14 09:56:45 +00:00
commit 1ce8d23c35
867 changed files with 122104 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: LicenseRef-ConusAI-Template-1.0
// What a project offers, in one place: the pages of the modules, as the organization home, the
// workspace page and the project home all list them (spec §3.1, §4.1). Server-only: it reads the manifests,
// so a page's loader hands the entries to its view (F10).
//
// A module with pages under a project says so in its manifest (`ui.nav`, scope `project`) and
// `modules/pages.ts` mounts them (`modulePages`); nothing here is edited to add one. The documents
// module is the exception that proves the rule: its two pages are routes of the shell
// (`src/routes/$org.$workspace.$project.documents.*`), so the shell lists it by name.
import { PROFILE } from "@app/config"
import { appModules } from "@app/modules"
import { moduleSelected } from "@app/modules/inclusion" // kit:documents
import type { Profile } from "@conusai-kit/platform"
import type { ProjectEntry } from "../ui/projects"
/**
* Documents, then every project-level entry the manifests declare, by their `order` (core-5): lower first across
* modules, equal or absent ones (Documents among them, at 0) in this order.
*/
export function projectEntriesFor(profile: Profile): readonly ProjectEntry[] {
return [
...(moduleSelected("documents") ? [{ href: "documents", label: "documents.title", module: "documents" }] : []), // kit:documents
...appModules.flatMap((module) =>
(module.ui?.nav ?? [])
.filter((item) => item.scope === "project")
.filter(() => profile !== "convex" || ["notes", "files"].includes(module.id))
.map((item) => ({
href: item.href,
label: item.label,
module: module.id,
...(item.icon ? { icon: item.icon } : {}),
...(item.permission === undefined ? {} : { permission: item.permission }),
...(item.order === undefined ? {} : { order: item.order }),
...(item.flag === undefined ? {} : { flag: item.flag }),
})),
),
].sort((a: ProjectEntry, b: ProjectEntry) => (a.order ?? 0) - (b.order ?? 0))
}
export const PROJECT_ENTRIES: readonly ProjectEntry[] = projectEntriesFor(PROFILE)
/** The values a project's `moduleKey` can take when it is created from the shell. */
const moduleKeys = [...new Set(PROJECT_ENTRIES.map((entry) => entry.module))]
export const PROJECT_MODULE_KEYS: readonly string[] = moduleKeys.length ? moduleKeys : ["general"]