Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
204 commits
Select commit Hold shift + click to select a range
f2746e1
Added resize observer to automatically fix width of chart
SudoThijn Apr 17, 2026
9e4110e
package-lock update
SudoThijn Apr 17, 2026
b89c18d
3rd times the charm
SudoThijn Apr 17, 2026
6efeb09
removed bad rule CLAUDE added without me knowing
SudoThijn Apr 20, 2026
1041ec8
feat(i18n): add translation bundles and registration utility
SudoThijn Apr 20, 2026
a120c6b
updated package lock
SudoThijn Apr 20, 2026
2af8b73
Merge pull request #72 from ConductionNL/feature/add-translation-regi…
SudoThijn Apr 20, 2026
f01c7a3
Added more translations
SudoThijn Apr 20, 2026
847cf57
test: register global translation methods in test setup
SudoThijn Apr 20, 2026
4d57bc8
Merge branch 'development' into feature/autofix-apexchart-width
SudoThijn Apr 20, 2026
b33a449
Merge pull request #71 from ConductionNL/feature/autofix-apexchart-width
SudoThijn Apr 20, 2026
f40468b
feat(i18n): standardize translation casing and update terminology
SudoThijn Apr 20, 2026
c6e61af
Merge pull request #73 from ConductionNL/feature/translations
SudoThijn Apr 20, 2026
a34a613
typescript inference
SudoThijn Apr 20, 2026
9e4fea3
package lock update
SudoThijn Apr 21, 2026
e506dcf
Merge pull request #74 from ConductionNL/feature/typescript-inference
SudoThijn Apr 21, 2026
1691ffe
v1
SudoThijn Apr 21, 2026
8bad7e7
added proper event watching for setItem as to not collide with other …
SudoThijn Apr 21, 2026
8ba06cc
Merge pull request #75 from ConductionNL/feature/crud-store-plugins
SudoThijn Apr 22, 2026
735eae9
Updated user to authenticated
remko48 Apr 22, 2026
f3a4220
Merge pull request #76 from ConductionNL/feature/update-schema-securi…
remko48 Apr 22, 2026
a3dde9f
added code support in basic form
SudoThijn Apr 22, 2026
d5d488f
Fixed code quality warnings
remko48 Apr 22, 2026
b2f863a
improved error look
SudoThijn Apr 22, 2026
9f2b4f2
Merge pull request #79 from ConductionNL/feature/update-schema-securi…
remko48 Apr 22, 2026
09e1f9e
Merge pull request #78 from ConductionNL/feature/code-editor-in-form
SudoThijn Apr 22, 2026
41019c4
Merge pull request #77 from ConductionNL/development
remko48 Apr 22, 2026
360ee9b
version up (beta 11)
SudoThijn Apr 22, 2026
567480b
Merge pull request #80 from ConductionNL/development
SudoThijn Apr 22, 2026
f132a1a
added a slot prop to be able to close forms
SudoThijn Apr 23, 2026
886d129
Merge pull request #81 from ConductionNL/fix/modal-not-closing
SudoThijn Apr 23, 2026
9dde4a6
fix: bundle CSS into JS output so styles load automatically from npm …
remko48 Apr 23, 2026
30d57fe
Updated doctype
remko48 Apr 24, 2026
2b269e2
reverted doctype
remko48 Apr 24, 2026
251821d
Merge pull request #82 from ConductionNL/feature/css
remko48 Apr 24, 2026
3fab891
Merge pull request #83 from ConductionNL/development
remko48 Apr 24, 2026
84c65a1
Updated version
remko48 Apr 24, 2026
ca0ff89
Merge pull request #84 from ConductionNL/development
remko48 Apr 24, 2026
09d258d
Merge branch 'development' into feature/css
remko48 Apr 24, 2026
116eb88
Updated package and config
remko48 Apr 24, 2026
794ffa3
Merge pull request #85 from ConductionNL/feature/css
remko48 Apr 24, 2026
2dc0d3c
Merge pull request #86 from ConductionNL/development
remko48 Apr 24, 2026
9c3d68a
patched nextcloud's date-picker to show proper css on disabled dated
SudoThijn Apr 24, 2026
14e3ba6
Merge remote-tracking branch 'origin/development' into feature/update…
remko48 Apr 24, 2026
cc0e97f
feat(security-tab): first draft of conditional access rules UI
remko48 Apr 24, 2026
6679d87
docs(openspec): add json-manifest-renderer change proposal
rubenvdlinde Apr 27, 2026
3344d95
Merge pull request #88 from ConductionNL/specs/json-manifest-renderer
rubenvdlinde Apr 27, 2026
fb36e86
feat(manifest): add manifest JSON Schema and TypeScript types
rubenvdlinde Apr 27, 2026
382d986
feat(manifest): add useAppManifest composable
rubenvdlinde Apr 27, 2026
cdb3538
feat(manifest): add useAppStatus composable
rubenvdlinde Apr 27, 2026
9ff1ba9
feat(manifest): add CnPageRenderer (core dispatch)
rubenvdlinde Apr 27, 2026
21eac89
feat(manifest): wire CnPageRenderer slot overrides + add #header slot
rubenvdlinde Apr 27, 2026
54bac1c
feat(manifest): add CnAppNav (manifest-driven app navigation)
rubenvdlinde Apr 27, 2026
1d54a29
feat(manifest): add CnAppLoading and CnDependencyMissing
rubenvdlinde Apr 27, 2026
ee05511
feat(manifest): add CnAppRoot orchestrator
rubenvdlinde Apr 27, 2026
a8a68e1
feat(manifest): extract validateManifest util + schema fixtures + tests
rubenvdlinde Apr 27, 2026
6e0aec9
docs(manifest): demo manifest, migration guide, CLAUDE.md update
rubenvdlinde Apr 27, 2026
fb9e9d3
feat(manifest): generic slot-override map for CnPageRenderer
rubenvdlinde Apr 28, 2026
faf17fd
feat(manifest): extensible page-type registry (defaultPageTypes)
rubenvdlinde Apr 28, 2026
85649a4
Merge pull request #87 from ConductionNL/fix/date-picker-bad-disabled…
SudoThijn Apr 28, 2026
a35421f
Improved first draft, added better styling and fixed adding and displ…
remko48 Apr 28, 2026
57f1e83
Added lodash
remko48 Apr 28, 2026
efbbf86
Eslint and Stylelint
remko48 Apr 28, 2026
65050e7
fix(CnDashboardPage): add #header-actions slot (alongside #actions)
rubenvdlinde Apr 28, 2026
b97a8f1
Requested changes to use I10N correctly
remko48 Apr 28, 2026
6d63204
Merge pull request #92 from ConductionNL/feature/update-schema-securi…
remko48 Apr 28, 2026
e2d967d
Merge remote-tracking branch 'origin/development' into feat/eslint
remko48 Apr 28, 2026
11b243d
Merge pull request #93 from ConductionNL/feat/eslint
remko48 Apr 28, 2026
b53405e
fix(CnAppRoot, useAppStatus): proper layout + reliable app detection
rubenvdlinde Apr 28, 2026
5d0c609
feat(manifest): add menu section + external href fields
rubenvdlinde Apr 28, 2026
f33cb68
Removed new from property and title on create
remko48 Apr 28, 2026
a307410
Added better alignment to selected/active row
remko48 Apr 28, 2026
e1c9647
Savebutton is now disabled when having a property with no name
remko48 Apr 28, 2026
4f2ad2d
fix(CnAppNav): list slot, exact-match for root, white icon on active
rubenvdlinde Apr 28, 2026
3c1b4b6
fix(CnAppNav): pin section:settings to bottom, drop popover
rubenvdlinde Apr 28, 2026
32630f6
fix(CnAppNav): remove stray scrollbar on footer list
rubenvdlinde Apr 28, 2026
b4dff6d
feat(form-components): extract and enhance advanced form tabs
SudoThijn Apr 28, 2026
a09d015
added required indicator
SudoThijn Apr 28, 2026
2f458b8
Merge pull request #94 from ConductionNL/feat/GIT-OREG-1299/new-prope…
remko48 Apr 28, 2026
54325a5
small alignment fix
remko48 Apr 28, 2026
1a498da
package lock update
SudoThijn Apr 28, 2026
1c28f88
Added more O10N
remko48 Apr 28, 2026
52c3f36
fix(l10n/nl): spellingscorrecties
Apr 29, 2026
f8533b2
Merge pull request #97 from ConductionNL/feat/GIT-OREG-1299/new-prope…
remko48 Apr 29, 2026
c648195
Updated md files of past pr's
remko48 Apr 29, 2026
ef34ff5
Merge pull request #98 from ConductionNL/development
remko48 Apr 29, 2026
6549930
Updated package
remko48 Apr 29, 2026
327f8be
Merge pull request #99 from ConductionNL/update-md-files
remko48 Apr 29, 2026
1a91e7a
Merge pull request #100 from ConductionNL/development
remko48 Apr 29, 2026
5707387
added color picker, updated properties tab and value cells
SudoThijn Apr 29, 2026
4e01e6f
disable properties tab when no properties exists
SudoThijn Apr 29, 2026
b37231f
changed immutable logic
SudoThijn Apr 29, 2026
fec77c6
Merge branch 'development' into feature/changes-for-publication
SudoThijn Apr 29, 2026
737c8d8
made immutable field editable
SudoThijn Apr 29, 2026
8131d72
updated spec
SudoThijn Apr 29, 2026
68d0d34
fixed error color
SudoThijn Apr 30, 2026
41c10ec
fixed required color
SudoThijn Apr 30, 2026
1a1f062
fix: treat id-less items as create mode in schema form dialogs
rjzondervan Apr 30, 2026
9022f9d
fixed date picker console error by implementing dedicated date picker
SudoThijn Apr 30, 2026
8109262
fixed tests
SudoThijn Apr 30, 2026
e00d471
Merge pull request #95 from ConductionNL/feature/changes-for-publication
SudoThijn Apr 30, 2026
e6ae4fb
upped package version
SudoThijn Apr 30, 2026
6989186
updated package-lock
SudoThijn Apr 30, 2026
461d2b6
added npmrc
SudoThijn Apr 30, 2026
36edacf
18th try is the charm
SudoThijn Apr 30, 2026
50eb66e
33rd time's the charm
SudoThijn Apr 30, 2026
37cc39f
reverted to something that worked
SudoThijn Apr 30, 2026
d85d050
Merge pull request #101 from ConductionNL/development
SudoThijn Apr 30, 2026
3f12504
feat(barrel): re-export every Nc* component from @nextcloud/vue
rubenvdlinde May 1, 2026
9606570
Merge branch 'development' into fix/extend-schema-create-mode
remko48 May 1, 2026
0bdf376
added visible boolean to actions options. split logic between click a…
SudoThijn May 1, 2026
7e13d03
Merge pull request #103 from ConductionNL/feature/row-actions-fix
SudoThijn May 1, 2026
ccd20af
Merge pull request #102 from ConductionNL/fix/nc-component-reexports
rubenvdlinde May 1, 2026
fe3fae9
Made properties of extended schema during extend edit visible
remko48 May 1, 2026
aff5e72
Fixed security tab
remko48 May 1, 2026
e6676b6
Merge origin/development into feature/json-manifest-renderer
rubenvdlinde May 1, 2026
5bd235b
Merge pull request #104 from ConductionNL/fix/extend-schema-create-mode
remko48 May 1, 2026
63d8bab
right click menu now supports tooltips via title
SudoThijn May 1, 2026
1502239
docs: add manifest renderer docs
rubenvdlinde May 1, 2026
08d9b0e
fix: ESLint cleanups and named-slot rendering in shared test stub
rubenvdlinde May 1, 2026
8571f97
test: stub @nextcloud/axios so jest can resolve it under CJS
rubenvdlinde May 1, 2026
5ba5a11
Merge pull request #89 from ConductionNL/feature/json-manifest-renderer
rubenvdlinde May 1, 2026
c713143
Merge pull request #105 from ConductionNL/feature/right-click-support…
SudoThijn May 1, 2026
e3ed336
Updated icons
remko48 May 1, 2026
5b46b81
Updated package
remko48 May 1, 2026
0d2a125
Merge pull request #106 from ConductionNL/feature/GIT-OCAT-465/proper…
remko48 May 1, 2026
2aefd01
Merge pull request #107 from ConductionNL/development
remko48 May 1, 2026
f58e705
fix: Add naam to delete dialog fallback chain
rubenvdlinde Mar 19, 2026
192b7e5
fix: escape curly braces in MDX to prevent JSX parsing
rubenvdlinde Mar 19, 2026
30f2142
feat: add Dutch (nl) locale support for documentation
rubenvdlinde Mar 19, 2026
0b169b3
Updated date to local date
remko48 May 1, 2026
4c36157
Merge pull request #110 from ConductionNL/feature/date-to-local
remko48 May 1, 2026
05569d3
Merge pull request #111 from ConductionNL/development
remko48 May 1, 2026
a43900b
feat(files): batchFiles action for one-shot publish/depublish/delete/…
rubenvdlinde May 2, 2026
653fe5d
feat(openspec): multi-tenancy context for createObjectStore + UI shel…
rubenvdlinde May 3, 2026
50f902e
chore: add .github/CODEOWNERS for auto-review-request (#114)
rubenvdlinde May 3, 2026
897ece7
feat(openspec): manifest follow-ups (page-type extensions + @resolve …
rubenvdlinde May 3, 2026
0f68d8f
Merge remote-tracking branch 'origin/beta' into development
remko48 May 4, 2026
5bf89e0
Updated dashboard to allow icons
remko48 May 4, 2026
5083742
Updated docs
remko48 May 4, 2026
608a574
Merge pull request #116 from ConductionNL/feature/dashboard
remko48 May 4, 2026
d332edd
Updated docs check to check for gaps in documentation
remko48 May 4, 2026
5af4ae7
Updated docs based on recently changed workflow
remko48 May 4, 2026
796e4ea
Updated check-docs to check more then just components
remko48 May 4, 2026
123d898
Updated details
remko48 May 4, 2026
36a251f
Merge pull request #117 from ConductionNL/feature/auto-docs-check
remko48 May 4, 2026
7598e3b
Added a better indicator if a property is edited or not filled in yet
remko48 May 4, 2026
466a6e2
Merge pull request #118 from ConductionNL/feature/GIT-OCAT-465/warnin…
remko48 May 4, 2026
5769dae
Merge remote-tracking branch 'origin/development' into feat/files-bat…
remko48 May 4, 2026
86a78d9
Merge pull request #108 from ConductionNL/docs/dutch-locale-and-mdx-f…
remko48 May 4, 2026
865f5a4
Merge pull request #112 from ConductionNL/feat/files-batch-action
remko48 May 4, 2026
b7f542b
Updated package and docs
remko48 May 4, 2026
6c2eceb
Merge pull request #119 from ConductionNL/development
remko48 May 4, 2026
b2d3f02
Added first part of styleguide to run a styleguide in browser
remko48 May 5, 2026
3e94b95
Removed @example from docblocks wich caused errors in styleguide run
remko48 May 5, 2026
f14ceee
First part of live demo update
remko48 May 5, 2026
7b9aef5
Eslint
remko48 May 5, 2026
69e96be
Second part of styleguide config
remko48 May 5, 2026
00bbd95
fixed bug where inline actions count prop was unused
SudoThijn May 5, 2026
b873455
updated default to be backwards compatible
SudoThijn May 5, 2026
85b6476
Merge pull request #122 from ConductionNL/feature/fix-unused-prop
SudoThijn May 5, 2026
cf70264
Added component documentation
remko48 May 5, 2026
9fd6dd7
Made sure that doc coverage is tested on both types of docs
remko48 May 5, 2026
1a4b83c
Fixed styling for table and link
remko48 May 6, 2026
2064eb7
Fixed hover on table
remko48 May 6, 2026
2d0ac76
Fixed button styling
remko48 May 6, 2026
fd66224
Updated sidebar styling
remko48 May 6, 2026
d5c9775
Fixed main tag styling and made sure only selected items are shown in…
remko48 May 6, 2026
32cefa8
Added vue docs
remko48 May 6, 2026
6873171
Added favicon and fixed console errors for Data Display
remko48 May 6, 2026
d3bd1e0
Fixed console errors in cards
remko48 May 6, 2026
923917c
Fixed console errors in dialogs
remko48 May 6, 2026
f934a98
Fixed console errors in Dialogs
remko48 May 6, 2026
08746d8
Fixed console errors in Object Widgets
remko48 May 6, 2026
c7e02e5
Fixed console errors in Dashboard
remko48 May 6, 2026
cb8c009
Fixed console errors in Full pages
remko48 May 6, 2026
fa04e25
Fixed console errors in App Shell
remko48 May 6, 2026
7099d5b
Fixed console errors in Settings
remko48 May 6, 2026
d163647
Fixed console errors in Specialized
remko48 May 6, 2026
6c310f0
Updated code to go through the docs checker and added an introduction
remko48 May 6, 2026
23f4fbe
Quality flow, tests
remko48 May 7, 2026
2f1b189
Update styleguide/styleguide.config.js
remko48 May 7, 2026
e51392c
Requested changes
remko48 May 7, 2026
d9d78e2
ci: switch release.yml to npm Trusted Publisher (OIDC) and bump Node …
rubenvdlinde May 7, 2026
984a536
chore(release): 1.0.0-beta.1 [skip ci]
semantic-release-bot May 7, 2026
bfa8515
fix: add repository, homepage, bugs to package.json for npm provenance
rubenvdlinde May 7, 2026
95d1513
Merge branch 'beta' of https://github.com/ConductionNL/nextcloud-vue …
rubenvdlinde May 7, 2026
c1c6835
chore(release): 1.0.0-beta.2 [skip ci]
semantic-release-bot May 7, 2026
d8d96ec
Merge pull request #121 from ConductionNL/feature/GIT-NEXTVUE-120/sty…
remko48 May 7, 2026
a2333d1
Fixed build issues
remko48 May 7, 2026
9a28651
Added back @type
remko48 May 7, 2026
4ef703b
Merge pull request #124 from ConductionNL/feature/GIT-NEXTVUE-120/sty…
remko48 May 7, 2026
8e2ef36
Updated packages for build
remko48 May 7, 2026
42892d2
Merge pull request #125 from ConductionNL/feature/GIT-NEXTVUE-120/sty…
remko48 May 7, 2026
84de137
feat(schema-security): add inheritFromPublic checkbox
rjzondervan May 7, 2026
0c4d9d0
Added docusaurus favicon
remko48 May 7, 2026
730ac6d
Merge pull request #127 from ConductionNL/feature/docusaurus-favicon
remko48 May 7, 2026
70a7bcb
Updated frontend
remko48 May 7, 2026
0345c6d
Translation and docs update
remko48 May 7, 2026
e6c57f2
Merge remote-tracking branch 'origin/development' into feat/inherit-f…
remko48 May 7, 2026
0ea2335
Merge pull request #128 from ConductionNL/feat/inherit-from-public-ch…
remko48 May 7, 2026
d6f8fa7
updated branch-protections name to fire action
remko48 May 7, 2026
d142a5d
Merge pull request #130 from ConductionNL/feat/inherit-from-public-ch…
remko48 May 7, 2026
23c6c19
Merge pull request #129 from ConductionNL/development
remko48 May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
36 changes: 36 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# CODEOWNERS — auto-request reviewers based on path domain.
# Last-match-wins; broad rules first, specific overrides below.
# Created 2026-05-03 from the OR-abstraction audit follow-up.

# Default: every named codeowner reviews unmatched paths.
* @rubenvdlinde @rjzondervan @Rem-Dam @remko48 @WilcoLouwerse @bbrands02 @SudoThijn

# Backend (PHP) — services, controllers, mappers, db, migration, etc.
lib/ @bbrands02 @rjzondervan @WilcoLouwerse
appinfo/ @bbrands02 @rjzondervan @WilcoLouwerse
**/*.php @bbrands02 @rjzondervan @WilcoLouwerse
phpcs.xml @bbrands02 @rjzondervan @WilcoLouwerse
phpmd.xml @bbrands02 @rjzondervan @WilcoLouwerse
phpstan.neon @bbrands02 @rjzondervan @WilcoLouwerse
phpstan-baseline.neon @bbrands02 @rjzondervan @WilcoLouwerse
phpmd.baseline.xml @bbrands02 @rjzondervan @WilcoLouwerse
composer.json @bbrands02 @rjzondervan @WilcoLouwerse
composer.lock @bbrands02 @rjzondervan @WilcoLouwerse

# Frontend (Vue / TS / JS) — components, stores, pages, build config.
src/ @SudoThijn @remko48
**/*.vue @SudoThijn @remko48
**/*.ts @SudoThijn @remko48
**/*.js @SudoThijn @remko48
package.json @SudoThijn @remko48
package-lock.json @SudoThijn @remko48
jest.config.js @SudoThijn @remko48
playwright.config.ts @SudoThijn @remko48
webpack.config.js @SudoThijn @remko48
babel.config.js @SudoThijn @remko48

# Specs / docs / ADRs / openspec.
openspec/ @rubenvdlinde @Rem-Dam
docs/ @rubenvdlinde @Rem-Dam
**/*.md @rubenvdlinde @Rem-Dam
README.md @rubenvdlinde @Rem-Dam
2 changes: 1 addition & 1 deletion .github/workflows/branch-protection.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@ on:
branches: [main, beta]

jobs:
check:
branch-protection:
uses: ConductionNL/.github/.github/workflows/branch-protection.yml@main
40 changes: 40 additions & 0 deletions .github/workflows/documentation-beta.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Documentation (Beta)

on:
push:
branches:
- beta

jobs:
deploy-beta:
name: Deploy Beta Styleguide
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install and build component styleguide
timeout-minutes: 10
run: |
cd styleguide
npm ci
npm run build

- name: Deploy styleguide to /beta/ on GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./styleguide/build
publish_branch: gh-pages
destination_dir: beta/styleguide
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
keep_files: true
41 changes: 41 additions & 0 deletions .github/workflows/documentation-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: Documentation (Dev)

on:
push:
branches:
- development

jobs:
deploy-dev:
name: Deploy Dev Styleguide
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Install and build component styleguide
timeout-minutes: 10
run: |
cd styleguide
npm ci
npm run build

- name: Deploy styleguide to /dev/ on GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./styleguide/build

publish_branch: gh-pages
destination_dir: dev/styleguide
user_name: 'github-actions[bot]'
user_email: 'github-actions[bot]@users.noreply.github.com'
keep_files: true
15 changes: 14 additions & 1 deletion .github/workflows/documentation.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,13 @@ jobs:
with:
node-version: '20'

- name: Install and build component styleguide
timeout-minutes: 10
run: |
cd styleguide
npm ci
npm run build

- name: Clear build cache and install dependencies
timeout-minutes: 3
run: |
Expand All @@ -43,6 +50,12 @@ jobs:
exit 1
fi

- name: Copy styleguide into Docusaurus build
run: |
mkdir -p docusaurus/build/styleguide
cp -r styleguide/build/. docusaurus/build/styleguide/


- name: Create .nojekyll file
run: |
cd docusaurus/build
Expand All @@ -58,7 +71,7 @@ jobs:
user_email: 'github-actions[bot]@users.noreply.github.com'
force_orphan: false
allow_empty_commit: true
keep_files: false
keep_files: true

- name: Verify deployment
run: |
Expand Down
29 changes: 26 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,21 @@
name: Release

# Auto-publish @conduction/nextcloud-vue to npm via semantic-release.
#
# Authentication: npm Trusted Publisher (OIDC). The runner mints a
# short-lived ID token via `id-token: write`, the npm plugin exchanges it
# at the registry for a one-shot publish credential, and provenance is
# attested via NPM_CONFIG_PROVENANCE=true. There is no NPM_TOKEN secret
# to rotate.
#
# Trust config on npmjs.com expects this workflow at the path
# `.github/workflows/release.yml` in `ConductionNL/nextcloud-vue`. If you
# rename or move this file, update the npm Trusted Publisher config.
#
# Node 24 is the floor: semantic-release@24 requires Node ^22.14 || ≥24.10
# and the Trusted Publisher publish path uses npm CLI's own OIDC support,
# which lands in npm 11.x (bundled with Node 24).

on:
push:
branches: [main, beta]
Expand All @@ -17,7 +33,7 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'npm'
- run: npm ci
- run: npm run lint
Expand All @@ -27,6 +43,13 @@ jobs:
name: Release
needs: quality
runs-on: ubuntu-latest
permissions:
contents: write # @semantic-release/git pushes the chore(release) bump back to beta/main
issues: write
pull-requests: write
id-token: write # npm Trusted Publisher (OIDC) + provenance attestation
env:
NPM_CONFIG_PROVENANCE: 'true'
steps:
- uses: actions/checkout@v4
with:
Expand All @@ -35,13 +58,13 @@ jobs:

- uses: actions/setup-node@v4
with:
node-version: 20
node-version: 24
cache: 'npm'
registry-url: 'https://registry.npmjs.org'

- run: npm ci

- name: Release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
run: npx semantic-release
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,7 @@ dist/
# Docusaurus build output
docusaurus/build
.docusaurus

# Styleguide build output
styleguide/build
.styleguide
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,7 @@
"[php]": {
"editor.defaultFormatter": "DEVSENSE.phptools-vscode"
},
"[markdown]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
}
58 changes: 54 additions & 4 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,23 @@ import { useObjectStore } from '@conduction/nextcloud-vue'
import '@conduction/nextcloud-vue/src/css/index.css'
```

Consumer apps MUST also call `registerTranslations()` once in `main.js` (alongside `registerIcons({})`) **before** `new Vue().$mount(...)` — without it, library-rendered strings stay in English even when the user's Nextcloud language is Dutch. See [docs/getting-started.md](docs/getting-started.md#register-library-translations-required).

### Available Components

**Layout & Pages**
- `CnIndexPage` — Top-level schema-driven index page (table/cards, pagination, mass actions, dialogs)
- `CnDetailPage` — Generic detail/overview page with stats table and flexible content slots (simpler alternative to CnIndexPage)
- `CnIndexPage` — Top-level schema-driven index page (table/cards, pagination, mass actions, dialogs). Overridable via `#header` and `#actions` slots.
- `CnDetailPage` — Generic detail/overview page with stats table and flexible content slots. Overridable via `#header` and `#actions` slots.
- `CnPageHeader` — Page header with icon, title, description
- `CnActionsBar` — Action bar with add button, mass actions, view toggle, search

**Manifest Renderer (JSON-driven app shell)**
- `CnAppRoot` — Top-level app wrapper. Orchestrates loading → dependency-check → shell phases. Provides `cnManifest`, `cnCustomComponents`, `cnTranslate` to descendants. Slots: `#loading`, `#dependency-missing`, `#menu`, `#header-actions`, `#sidebar`, `#footer` — each independently overridable. Use this when adopting the full manifest pattern; lower tiers (just `useAppManifest`, or `+ CnPageRenderer`, or `+ CnAppNav`) are also supported.
- `CnAppNav` — Manifest-driven `NcAppNavigation`. Reads `manifest.menu[]`; sorts by `order`; filters by `permission`; one level of `children[]`. Accepts `manifest`, `translate`, `permissions` as props (with inject fallback) for standalone use.
- `CnPageRenderer` — Type dispatcher mounted inside `<router-view>`. Matches `$route.name === page.id`, dispatches by `page.type` (`index | detail | dashboard | custom`) using `defineAsyncComponent` for tree-shaking. Forwards `page.config` as props; resolves `page.headerComponent` / `page.actionsComponent` against the customComponents registry.
- `CnAppLoading` — Default loading screen (logo slot + NcLoadingIcon + message). Used by CnAppRoot's `#loading` phase.
- `CnDependencyMissing` — Default dependency-missing screen (lists missing apps with install/enable links). Used by CnAppRoot's `#dependency-missing` phase.

**Data Display**
- `CnDetailGrid` — Data-driven label-value grid with grid and horizontal layout modes
- `CnDataTable` — Sortable data table with selection, loading, empty states
Expand Down Expand Up @@ -92,6 +101,7 @@ import '@conduction/nextcloud-vue/src/css/index.css'
- `buildQueryString(params)` — Build URL query string from params object
- `parseResponseError(response)` — Extract error message from API response
- `networkError()` / `genericError()` — Standard error message helpers
- `validateManifest(manifest)` — Validate an app manifest against the JSON Schema. Returns `{ valid, errors }`. Use at build time or in test fixtures; the same validator runs at runtime inside `useAppManifest`.

### Available Store
- `useObjectStore` — Generic Pinia store for OpenRegister objects (CRUD, pagination, search, caching)
Expand All @@ -103,6 +113,8 @@ import '@conduction/nextcloud-vue/src/css/index.css'
- `useFileSelection(options)` — File upload/drop handling
- `useDashboardView(options)` — Dashboard state: widget defs, layout, NC widget loading, add/remove/persist
- `useContextMenu()` — Right-click context menu positioning and state (cursor CSS vars, open/close, action helpers)
- `useAppManifest(appId, bundledManifest, options?)` — Load + validate the app manifest. Returns `{ manifest, isLoading, validationErrors }`. Synchronous bundled load + async backend-merge stub (silent fallback on 4xx / network errors); validates via `validateManifest`. Pass `options.endpoint` or `options.fetcher` to override the backend URL or inject a mock.
- `useAppStatus(appId)` — Check whether a Nextcloud app is installed and enabled via `@nextcloud/capabilities`. Returns `{ installed, enabled, loading }`. Cached per appId for the page lifetime. CnAppRoot calls this once per `manifest.dependencies` entry to drive the dependency-check phase.

### CnIndexPage Dialog Override System

Expand All @@ -113,7 +125,7 @@ CnIndexPage has built-in single-object dialogs (Delete, Copy, Form) that are **o
- `#copy-dialog="{ item, close }"` — Replace copy dialog
- `#form-dialog="{ item, schema, close }"` — Replace create/edit dialog (use CnFormDialog or CnAdvancedFormDialog)
2. **Form content override** — `#form-fields` replaces the form inside the built-in CnFormDialog
3. **Per-field override** — `#field-{key}` inside CnFormDialog replaces a single field
3. **Per-field override** — `#field-{key}` inside CnFormDialog replaces a single field. For JSON / code-editor fields this slot is rarely needed: set `widget: 'json'` (structured value, parses on input) or `widget: 'code'` (raw string + `field.language` for highlighting) on the schema property and CnFormDialog renders `CnJsonViewer` automatically.
4. **Per-field option rendering** — `#field-{key}-option` and `#field-{key}-selected-option` customize dropdown option display for select/multiselect/tags fields

Key events emitted by CnIndexPage:
Expand Down Expand Up @@ -175,6 +187,34 @@ const DEFAULT_LAYOUT = [
</CnDashboardPage>
```

### JSON Manifest Renderer

Apps can declare their entire shell — routes, navigation, page configuration, dependencies — in a single `src/manifest.json`. The library reads it and renders the app. Adoption is incremental (four tiers from "just `useAppManifest`" to "full `CnAppRoot` shell"); a custom menu component can replace the default `CnAppNav` via the `#menu` slot.

Minimal manifest:

```json
{
"$schema": "https://raw.githubusercontent.com/ConductionNL/nextcloud-vue/main/src/schemas/app-manifest.schema.json",
"version": "1.0.0",
"dependencies": ["openregister"],
"menu": [
{ "id": "decisions", "label": "myapp.menu.decisions", "icon": "icon-checkmark", "route": "decisions-index", "order": 10 }
],
"pages": [
{ "id": "decisions-index", "route": "/decisions", "type": "index", "title": "myapp.decisions.title",
"config": { "register": "decisions", "schema": "decision", "columns": ["title", "status"] } },
{ "id": "decisions-detail", "route": "/decisions/:id", "type": "detail", "title": "myapp.decisions.detail",
"config": { "register": "decisions", "schema": "decision" } },
{ "id": "settings", "route": "/settings", "type": "custom", "title": "myapp.settings.title", "component": "SettingsPage" }
]
}
```

`page.id` is also the vue-router route name; CnPageRenderer matches by `$route.name === page.id`. The `type` enum is closed (`index | detail | dashboard | custom`) — bespoke pages use `type: "custom"` with a registry component.

See `examples/manifest-demo/manifest.json` for a fuller reference and `docs/migrating-to-manifest.md` for tier-by-tier adoption guidance.

## Rules for Modifying Components

1. **NEVER break existing prop interfaces** — new props MUST have defaults
Expand All @@ -184,7 +224,7 @@ const DEFAULT_LAYOUT = [
5. **Run `npm test` before submitting changes**
6. **CSS class prefix**: All classes use `cn-` prefix to avoid collisions
7. **Theming**: Use Nextcloud CSS variables only (`var(--color-primary-element)`, `var(--color-border)`, etc.). Do NOT reference `--nldesign-*` variables — the nldesign app overrides Nextcloud's own variables, so theming works automatically.
8. **Translation**: Components accept pre-translated strings via props with English defaults. Never import `t()` from a specific app.
8. **Always update docs when you add, rename, or remove a prop, event, or slot** — edit `docs/components/cn-<component>.md` in the same change. The CI `check:docs` step (run via `npm run check:docs`) verifies both that a doc file exists AND that every SFC prop and named slot appears in it. Run it locally before committing to catch gaps.

## Adding New Components

Expand Down Expand Up @@ -268,3 +308,13 @@ scripts/

This library is used by: OpenRegister, OpenCatalogi, Procest, Pipelinq, MyDash.
Changes here affect all of them. Test carefully.

Every consumer's `main.js` must include:

```js
import { registerIcons, registerTranslations } from '@conduction/nextcloud-vue'
registerIcons({ /* app-specific icons */ })
registerTranslations()
```

`registerTranslations()` is a required bootstrap call — without it, the library falls back to English regardless of the user's Nextcloud language.
Loading
Loading