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 @@ - - -