diff --git a/package-lock.json b/package-lock.json
index 02e56903..13b5ada0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,7 @@
"version": "0.2.0",
"license": "EUPL-1.2",
"dependencies": {
- "@conduction/nextcloud-vue": "^1.0.0-beta.58",
+ "@conduction/nextcloud-vue": "^1.0.0-beta.61",
"@nextcloud/auth": "^2.4.0",
"@nextcloud/axios": "~2.5.2",
"@nextcloud/dialogs": "^3.2.0",
@@ -573,9 +573,9 @@
}
},
"node_modules/@conduction/nextcloud-vue": {
- "version": "1.0.0-beta.58",
- "resolved": "https://registry.npmjs.org/@conduction/nextcloud-vue/-/nextcloud-vue-1.0.0-beta.58.tgz",
- "integrity": "sha512-tFoV9jCNv+62c/MKbMgxwbOKH0pUTxnYGYW6pfjdhTLiSJts+BzGffZnK6khs6KDVbEssmAA3ntcpPp0hZqS/Q==",
+ "version": "1.0.0-beta.61",
+ "resolved": "https://registry.npmjs.org/@conduction/nextcloud-vue/-/nextcloud-vue-1.0.0-beta.61.tgz",
+ "integrity": "sha512-VIN6p+I5Lh0NQ62/hpBQ88ezZ9V+GP21Vp8RddsouYp1iVvXVwlsXryQVVFbyPCDHya7RQ3hXLnWwhj1ok8Dmg==",
"license": "EUPL-1.2",
"dependencies": {
"@codemirror/autocomplete": "^6.0.0",
diff --git a/package.json b/package.json
index 68fb01fa..08d2cb6b 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
"extends @nextcloud/browserslist-config"
],
"dependencies": {
- "@conduction/nextcloud-vue": "^1.0.0-beta.58",
+ "@conduction/nextcloud-vue": "^1.0.0-beta.61",
"@nextcloud/auth": "^2.4.0",
"@nextcloud/axios": "~2.5.2",
"@nextcloud/dialogs": "^3.2.0",
@@ -53,12 +53,15 @@
"eslint-plugin-n": "^16.6.2"
},
"devDependencies": {
+ "@babel/core": "^7.26.9",
+ "@babel/eslint-parser": "^7.16.5",
"@cyclonedx/cyclonedx-npm": "^4.2.1",
"@eslint/config-helpers": "^0.4.2",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "^9.39.1",
"@nextcloud/browserslist-config": "^3.0.1",
"@nextcloud/eslint-config": "^8.4.1",
+ "@nextcloud/eslint-plugin": "^2.2.1",
"@nextcloud/stylelint-config": "^2.4.0",
"@nextcloud/webpack-vue-config": "^6.0.1",
"@playwright/test": "^1.48.0",
@@ -66,16 +69,12 @@
"@typescript-eslint/parser": "^7.18.0",
"@vitejs/plugin-vue2": "^2.3.4",
"@vitest/coverage-v8": "^1.6.1",
+ "@vue/eslint-config-typescript": "^13.0.0",
"@vue/test-utils": "^1.3.6",
"css-loader": "~7.1.1",
"eslint": "^8.56.0",
- "@babel/core": "^7.26.9",
- "@babel/eslint-parser": "^7.16.5",
- "@nextcloud/eslint-plugin": "^2.2.1",
- "@vue/eslint-config-typescript": "^13.0.0",
"eslint-config-standard": "^17.1.0",
"eslint-import-resolver-alias": "^1.1.2",
- "typescript": "^5.0.2",
"eslint-import-resolver-exports": "^1.0.0-beta.5",
"eslint-import-resolver-typescript": "^3.8.0",
"eslint-plugin-import": "^2.32.0",
@@ -85,13 +84,14 @@
"eslint-plugin-vue": "^9.21.1",
"jsdom": "^24.1.3",
"newman": "^6.2.2",
+ "postcss-html": "^1.6.0",
"sass": "^1.77.8",
"sass-loader": "^16.0.2",
"style-loader": "~4.0.0",
- "postcss-html": "^1.6.0",
"stylelint": "^15.11.0",
"stylelint-config-recommended-scss": "^13.1.0",
"stylelint-config-recommended-vue": "^1.1.0",
+ "typescript": "^5.0.2",
"vitest": "^1.6.1",
"vue-eslint-parser": "^9.4.3",
"vue-loader": "^15.11.1 <16.0.0",
diff --git a/src/customComponents.js b/src/customComponents.js
index 1a07fa83..05c9aec4 100644
--- a/src/customComponents.js
+++ b/src/customComponents.js
@@ -42,13 +42,10 @@ import VirtualAppsActions from './components/VirtualAppsActions.vue'
// Tooling pages that stay `type: "custom"`.
import SchemaDesignerView from './views/SchemaDesigner.vue'
import PageDesignerView from './views/PageDesignerHost.vue'
-import ExportJobsView from './views/ExportJobsList.vue'
import BuilderHostView from './views/BuilderHost.vue'
-import TemplateGalleryView from './views/TemplateGallery.vue'
// Features & Roadmap page — thin wrapper around the lib's
// CnFeaturesAndRoadmapView (in-product roadmap surface powered by
// OpenRegister's github-issue-proxy). See ConductionNL/hydra#251.
-import FeaturesRoadmapView from './views/FeaturesRoadmap.vue'
export default {
// VirtualApps (`type: index`) card — name, status pill, version, "live"
@@ -83,13 +80,10 @@ export default {
// persists edits back.
PageDesignerView,
// Export-jobs list — status of Phase-2 "export to real app" runs.
- ExportJobsView,
// Virtual-app host — mounts a nested CnAppRoot rendering the virtual
// app's manifest from GET /api/applications/{slug}/manifest.
BuilderHostView,
// Template gallery — browse seeded ApplicationTemplate records and
// clone one into a new virtual app (openbuilt-templates-marketplace).
- TemplateGalleryView,
// Features & Roadmap page (lib's CnFeaturesAndRoadmapView).
- FeaturesRoadmap: FeaturesRoadmapView,
}
diff --git a/src/manifest.json b/src/manifest.json
index 7473fdd5..b0e7ea97 100644
--- a/src/manifest.json
+++ b/src/manifest.json
@@ -247,50 +247,98 @@
{
"id": "Schemas",
"route": "/schemas",
- "type": "custom",
+ "type": "index",
"title": "Schemas",
- "component": "SchemaDesignerView",
- "_note": "Visual schema designer for the hello-world seed app. Three-pane canvas (field palette / schema canvas / JSON preview) with drag-and-drop field placement — no standard index/detail type models this UX. Conversion blocked on a future dedicated 'designer' page type."
+ "config": {
+ "register": "openbuilt",
+ "schema": "application",
+ "viewMode": "table",
+ "sidebar": {
+ "enabled": true,
+ "showMetadata": true
+ }
+ },
+ "_note": "Top-level schemas overview \u2014 uses the openbuilt register's `application` schema as the listing source; per-app drill-down lives under /builder/:slug/schemas."
},
{
"id": "Templates",
"route": "/templates",
- "type": "custom",
+ "type": "index",
"title": "Templates",
- "component": "TemplateGalleryView",
- "_note": "Template gallery browse+clone surface. Cards show preview thumbnails and a 'Use template' CTA that triggers the 4-step creation wizard. No standard page type supports gallery-style card browsing with wizard launch; decomposition deferred until a gallery page type is available."
+ "config": {
+ "register": "openbuilt",
+ "schema": "application-template",
+ "viewMode": "cards",
+ "sidebar": {
+ "enabled": true,
+ "showMetadata": true
+ }
+ }
},
{
"id": "SchemaDesignerList",
"route": "/builder/:slug/schemas",
- "type": "custom",
+ "type": "index",
"title": "Schemas",
- "component": "SchemaDesignerView",
- "_note": "Schema designer mounted inside the per-app builder context (/builder/:slug). Shares SchemaDesignerView with the top-level /schemas shortcut but scoped to the virtual app identified by :slug. The builder context route pattern (parameterised, multi-segment) requires a custom component that reads :slug to scope its OR register queries."
+ "config": {
+ "register": "openbuilt",
+ "schema": "application",
+ "viewMode": "cards",
+ "sidebar": {
+ "enabled": true,
+ "showMetadata": true
+ }
+ },
+ "_note": "Per-app schema list under the builder route. Scoped to the virtual app identified by :slug \u2014 the index page type's filter wiring kicks in via the route param."
},
{
"id": "SchemaDesigner",
"route": "/builder/:slug/schemas/:schemaId",
- "type": "custom",
+ "type": "detail",
"title": "Schema",
- "component": "SchemaDesignerView",
- "_note": "Schema designer focused on a specific schema within the builder context. Two route params (:slug and :schemaId) drive the canvas; no standard detail type addresses designer-canvas layout. Will be revisited when the 'designer' page type lands in ADR-024."
+ "config": {
+ "register": "openbuilt",
+ "schema": "application",
+ "sidebar": {
+ "enabled": true,
+ "showMetadata": true
+ }
+ },
+ "slots": {
+ "default": "SchemaDesignerView"
+ }
},
{
"id": "PageDesigner",
"route": "/builder/:slug/pages",
- "type": "custom",
+ "type": "detail",
"title": "Page designer",
- "component": "PageDesignerView",
- "_note": "Three-pane manifest page designer (page-list / per-type sub-editor / validator side-panel, REQ-OBPD-003). Loads the virtual app's manifest from OR, renders an interactive designer, and writes edits back via PATCH. No standard page type supports a two-way manifest editor; decomposition blocked on a future 'designer' page type."
+ "config": {
+ "register": "openbuilt",
+ "schema": "application",
+ "sidebar": {
+ "enabled": true,
+ "showMetadata": true
+ }
+ },
+ "slots": {
+ "default": "PageDesignerView"
+ }
},
{
"id": "Exports",
"route": "/exports",
- "type": "custom",
+ "type": "index",
"title": "Exports",
- "component": "ExportJobsView",
- "_note": "Export-jobs status list for Phase-2 'export to real Nextcloud app' runs. Shows job progress, logs, and artefact download links. The schema is a job-queue model (not a standard OR object) so the index page type's register/schema wiring does not apply."
+ "config": {
+ "register": "openbuilt",
+ "schema": "export-job",
+ "viewMode": "table",
+ "sidebar": {
+ "enabled": true,
+ "showMetadata": true
+ }
+ }
},
{
"id": "BuilderHost",
@@ -303,10 +351,8 @@
{
"id": "FeaturesRoadmap",
"route": "/features-roadmap",
- "type": "custom",
- "title": "Features & roadmap",
- "component": "FeaturesRoadmap",
- "_note": "Thin wrapper around the lib's CnFeaturesAndRoadmapView (in-product roadmap powered by the OpenRegister GitHub-issue proxy). Registered as custom because CnFeaturesAndRoadmapView is a full-page lib component with its own layout that does not fit any standard page type."
+ "type": "roadmap",
+ "title": "Features & roadmap"
}
]
-}
+}
\ No newline at end of file
diff --git a/src/registry.js b/src/registry.js
index 7b9d467d..06ee6c0c 100644
--- a/src/registry.js
+++ b/src/registry.js
@@ -34,20 +34,17 @@ import SchemaDesignerView from './views/SchemaDesigner.vue'
// Template gallery — browse seeded ApplicationTemplate records and clone
// one into a new virtual app (openbuilt-templates-marketplace).
-import TemplateGalleryView from './views/TemplateGallery.vue'
// Visual manifest page designer — three-pane editor that reads and writes
// a virtual app's manifest via PATCH (REQ-OBPD-003).
import PageDesignerView from './views/PageDesignerHost.vue'
// Export-jobs status list — Phase-2 "export to real Nextcloud app" runs.
-import ExportJobsView from './views/ExportJobsList.vue'
// Virtual-app host — nested CnAppRoot rendering a virtual app's own manifest.
import BuilderHostView from './views/BuilderHost.vue'
// Features & Roadmap page — wrapper around CnFeaturesAndRoadmapView.
-import FeaturesRoadmapView from './views/FeaturesRoadmap.vue'
// ── Widget components (kind: "widget") ───────────────────────────────────────
@@ -71,24 +68,12 @@ export default {
kind: 'page',
component: SchemaDesignerView,
},
- TemplateGalleryView: {
- kind: 'page',
- component: TemplateGalleryView,
- },
PageDesignerView: {
kind: 'page',
component: PageDesignerView,
},
- ExportJobsView: {
- kind: 'page',
- component: ExportJobsView,
- },
BuilderHostView: {
kind: 'page',
component: BuilderHostView,
},
- FeaturesRoadmap: {
- kind: 'page',
- component: FeaturesRoadmapView,
- },
}
diff --git a/src/views/FeaturesRoadmap.vue b/src/views/FeaturesRoadmap.vue
deleted file mode 100644
index 103e4448..00000000
--- a/src/views/FeaturesRoadmap.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
-