Skip to content
Open

2.0.0 #255

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
3245c5e
Merge pull request #250 from anzusystems/release
volarname Feb 9, 2026
0feae64
Feature/#84581/internal image (#251)
TomasHermanek Mar 5, 2026
dac09f6
refs #84581 lints (#252)
TomasHermanek Mar 10, 2026
d1bf182
ref #73441 Add "mainFileInternal" filter and translations (#253)
TomasHermanek Mar 11, 2026
0a338ce
vuetify 4 upgrade
May 27, 2026
11de7e6
changelog: remove admin-cms reference
May 27, 2026
cf9d8ea
wip
May 27, 2026
03e7e16
migrate router guards to return-based api (vue-router 5)
May 27, 2026
39d90ba
router: file-based routing scaffolding + dts generator
May 27, 2026
f7d2c0e
router: migrate system pages to file-based routing
May 27, 2026
19a9492
router: migrate (common) pages to file-based routing
May 27, 2026
5105fa8
router: migrate simple (coreDam) pages to file-based routing
May 27, 2026
e0de9cc
router: migrate nested (coreDam) pages to file-based routing
May 27, 2026
a4b3049
router: cleanup + re-enable typed router, drop ROUTE constants
May 27, 2026
4b6aa63
router: switch breadcrumbs to defineBreadcrumbs (admin-cms style)
May 27, 2026
5704c30
fix: wrong redirect routes in distributionCategory + assetLicenceGrou…
May 27, 2026
3448ede
router: add unplugin-auto-import (admin-cms parity)
May 27, 2026
1a907b8
router: strip imports now provided by unplugin-auto-import
May 27, 2026
06d2c14
router: strip remaining auto-imported symbols missed by first pass
May 27, 2026
7205a7e
router: add DocIdNullable to auto-import + strip explicit imports
May 27, 2026
6d5f5d5
doc: changelog for auto-import + bug fixes; drop temp gitignore entries
May 27, 2026
74c2bbe
router: admin-cms parity round 2 — drop prettier, manual chunks, anzu…
May 27, 2026
1ffd23d
doc: changelog for admin-cms parity round 2
May 27, 2026
2e94a69
chore: drop leftover .prettierrc.js + .prettierignore
May 27, 2026
efd1aca
router: pluralize entity route paths (admin-cms convention)
May 27, 2026
b2592aa
test+doc: cypress paths to plural + changelog for plural migration
May 27, 2026
71e8230
infra: build:dev script, tsc --build, @tsconfig/node24, move Actionba…
May 27, 2026
7149500
doc: changelog for B small wins
May 27, 2026
ae50bc6
refactor: domain-driven src/ structure (admin-cms parity)
May 27, 2026
027f194
build: split common-admin into 4 sub-chunks + vue-i18n + vendor-utils
May 27, 2026
94e5668
infra: vuetify dedupe + dotenv devDep (admin-cms parity)
May 27, 2026
ecc7ec2
update deps
May 29, 2026
2447d8a
refactor: migrate common-admin imports off deprecated barrel to /labs
May 29, 2026
79bbe04
chore: gitignore .common-admin-updated and .playwright-cli
May 29, 2026
eb8a7c7
fix: restore filter labels/field lost in /labs migration
May 29, 2026
ddb8baf
wip
May 29, 2026
9ea7c2b
add #84735 implement voice family settings module (#254)
TomasHermanek Jun 10, 2026
6e0bb20
fix #84735 bind public export create to licences array (#256)
TomasHermanek Jun 15, 2026
acf178c
Merge origin/main into feature/#85491/upgrade
Jun 15, 2026
f195697
fix: formatter-proof distributionCategory model-value binding
Jun 16, 2026
a8da3a0
refactor: migrate sortable components to common-admin /labs list editors
Jun 16, 2026
aa487f9
chore: yarn lint:fix (oxfmt + eslint + stylelint formatting)
Jun 16, 2026
2108232
refactor: narrow distributionCategory autocomplete model-value via co…
Jun 17, 2026
2809f6a
chore: gitignore generated typed-router.d.ts + auto-imports.d.ts (adm…
Jun 17, 2026
89f5aed
chore: bump dependencies
Jun 17, 2026
aa8625b
chore: bump dependencies
Jun 28, 2026
bab0008
fix: correct list-editor consumers to common-admin v2 labs API
Jun 28, 2026
4fe3201
fix: strip podcast export-data temp ids on save
Jun 28, 2026
25e4f5c
fix(author): order author lists by createdAt instead of id
Jun 29, 2026
963db35
Merge pull request #257 from anzusystems/fix/author-list-sort-by-crea…
volarname Jun 30, 2026
06d3194
chore: bump dependencies
Jul 1, 2026
77d301d
fix: update e2e Cypress route references to pluralized paths
Jul 1, 2026
3a5c5c6
fix: remove non-functional shortestDimension asset filter
Jul 1, 2026
4b2f392
Merge origin/main into feature/#85491/upgrade
Jul 1, 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
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .browserslistrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
> 0.5%
last 2 versions
not dead
not IE 11
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
matrix:
include:
- node-version: 24
docker-image: anzusystems/node:4.0.0-node24-nginx-browsers
docker-image: anzusystems/node:4.1.0-node24-nginx-browsers

name: Node ${{ matrix.node-version }}
runs-on: ubuntu-latest
Expand Down
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ dist
dist-ssr
node_modules

# Auto-generated by vite plugins (regenerated by generate:dts in CI)
src/typed-router.d.ts
src/auto-imports.d.ts

# Tests
coverage
.scannerwork
Expand Down Expand Up @@ -47,5 +51,9 @@ lerna-debug.log*
# Docker
docker-compose.override.yml*

# Local tooling artifacts
.common-admin-updated
.playwright-cli/

# Exclusions
!.gitkeep
17 changes: 17 additions & 0 deletions .oxfmtrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"$schema": "./node_modules/oxfmt/configuration_schema.json",
"printWidth": 120,
"semi": false,
"singleQuote": true,
"trailingComma": "es5",
"ignorePatterns": [],
"overrides": [
{
"files": ["**/*.scss"],
"options": {
"trailingComma": "none"
}
}
],
"exclude": ["dist/", "cypress/", "coverage/"]
}
101 changes: 101 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
{
"$schema": "./node_modules/oxlint/configuration_schema.json",
"plugins": [
"vue",
"typescript"
],
"categories": {
"correctness": "off"
},
"env": {
"builtin": true
},
"ignorePatterns": [
"**/dist/**",
"**/dist-ssr/**",
"**/coverage/**",
".stylelintrc.js",
"cypress/**",
"eslint.config.mjs",
"src/typed-router.d.ts",
"src/auto-imports.d.ts"
],
"rules": {
"vue/no-arrow-functions-in-watch": "error",
"vue/no-deprecated-destroyed-lifecycle": "error",
"vue/no-export-in-script-setup": "error",
"vue/no-lifecycle-after-await": "error",
"vue/prefer-import-from-vue": "error",
"vue/valid-define-emits": "error",
"vue/valid-define-props": "error",
"vue/no-multiple-slot-args": "warn",
"vue/no-required-prop-with-default": "warn",
"vue/require-typed-ref": "error",
"no-array-constructor": "error",
"no-unused-vars": [
"error",
{
"caughtErrors": "none"
}
],
"no-restricted-imports": [
"error",
{
"patterns": [
{
"group": [
"../*",
"./*"
],
"message": "Use absolute imports with @ instead of relative imports"
}
]
}
],
"typescript/no-duplicate-enum-values": "error",
"typescript/no-extra-non-null-assertion": "error",
"typescript/no-misused-new": "error",
"typescript/no-namespace": "error",
"typescript/no-non-null-asserted-optional-chain": "error",
"typescript/no-require-imports": "error",
"typescript/no-this-alias": "error",
"typescript/no-unnecessary-type-constraint": "error",
"typescript/no-unsafe-declaration-merging": "error",
"typescript/no-unsafe-function-type": "error",
"typescript/no-wrapper-object-types": "error",
"typescript/prefer-as-const": "error",
"typescript/prefer-namespace-keyword": "error",
"typescript/triple-slash-reference": "error"
},
"overrides": [
{
"files": [
"**/*.ts",
"**/*.tsx",
"**/*.mts",
"**/*.cts",
"**/*.vue"
],
"rules": {
"constructor-super": "off",
"no-class-assign": "off",
"no-const-assign": "off",
"no-dupe-class-members": "off",
"no-dupe-keys": "off",
"no-func-assign": "off",
"no-import-assign": "off",
"no-new-native-nonconstructor": "off",
"no-obj-calls": "off",
"no-redeclare": "off",
"no-setter-return": "off",
"no-this-before-super": "off",
"no-unsafe-negation": "off",
"no-var": "error",
"no-with": "off",
"prefer-const": "error",
"prefer-rest-params": "error",
"prefer-spread": "error"
}
}
]
}
2 changes: 0 additions & 2 deletions .prettierignore

This file was deleted.

8 changes: 0 additions & 8 deletions .prettierrc.js

This file was deleted.

7 changes: 7 additions & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
approvedGitRepositories:
- "**"

compressionLevel: mixed

enableGlobalCache: false

enableScripts: true

nodeLinker: node-modules

npmMinimalAgeGate: 0
20 changes: 15 additions & 5 deletions bin/lint
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
# Script used to run the linter check in the application container

PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd)"
ARGS="$*"
cd "${PROJECT_ROOT}" || exit 1
# Initialize default variables
# shellcheck disable=SC1091
Expand All @@ -13,11 +14,20 @@ docker_env_vars

if [ -f /.dockerenv ]; then
env-config
echo "[INFO] Running Yarn lint"
yarn lint:tsc
yarn lint:eslint
yarn lint:stylelint
if [[ "$1" == -* ]] || [ $# -eq 0 ]; then
echo "[INFO] Running Yarn lint $@"
yarn run lint "$@"
else
SCRIPT=$1
shift
# Automatically prefix with 'lint:' if the specific script doesn't exist but the prefixed one does
if ! grep -q "\"$SCRIPT\":" package.json && grep -q "\"lint:$SCRIPT\":" package.json; then
SCRIPT="lint:$SCRIPT"
fi
echo "[INFO] Running Yarn $SCRIPT $@"
yarn run "$SCRIPT" "$@"
fi
exit
fi

bin/docker-compose exec --user node "${DOCKER_COMPOSE_SERVICE_NAME}" bash -c \'bin/lint\'
bin/docker-compose exec --user node "${DOCKER_COMPOSE_SERVICE_NAME}" bash -c \'bin/lint "${ARGS}"\'
4 changes: 2 additions & 2 deletions cypress/e2e/assetEmpty/audioEmptyAsset.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe(`Test audio empty asset, Env: ${CY.cfg}`,
cy.getCy('button-confirm').should('be.visible').click()
cy.alertMessage(ALERT_CREATE)

cy.urlContains('/asset')
cy.urlContains('/assets')
cy.get('.sidebar-info__content > .pa-2 > .v-alert').contains('Neobsahuje žiaden súbor')
cy.getCy('button-download').should('be.visible')
cy.getCy('button-delete').should('be.visible')
Expand Down Expand Up @@ -62,7 +62,7 @@ describe(`Test audio empty asset, Env: ${CY.cfg}`,
cy.api_getFileID().then((assetID) => {
cy.circleLoad()

cy.visit(`/asset/${assetID}`)
cy.visit(`/assets/${assetID}`)
cy.circleLoad()
cy.get('.dam-image-detail__sidebar [data-cy="custom-field-title"] textarea').eq(0)
.invoke('val').then((assetTitle)=>{
Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/assetEmpty/documentAssetEmpty.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe(`Test document empty asset, Env: ${CY.cfg}`,
cy.getCy('button-confirm').should('be.visible').click()
cy.alertMessage(ALERT_CREATE)

cy.urlContains('/asset')
cy.urlContains('/assets')
cy.get('.sidebar-info__content > .pa-2 > .v-alert').contains('Neobsahuje žiaden súbor')
cy.getCy('button-download').should('be.visible')
cy.getCy('button-delete').should('be.visible')
Expand All @@ -43,7 +43,7 @@ describe(`Test document empty asset, Env: ${CY.cfg}`,
cy.api_getFileID().then((assetID) => {
cy.circleLoad()

cy.visit(`/asset/${assetID}`)
cy.visit(`/assets/${assetID}`)
cy.circleLoad()
cy.get('.dam-image-detail__sidebar [data-cy="custom-field-title"] textarea').eq(0)
.invoke('val').then((assetTitle)=>{
Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/assetEmpty/imageAssetEmpty.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe(`Test image empty asset, Env: ${CY.cfg}`,
cy.getCy('button-confirm').should('be.visible').click()
cy.alertMessage(ALERT_CREATE)

cy.urlContains('/asset')
cy.urlContains('/assets')
cy.get('.sidebar-info__content > .pa-2 > .v-alert').contains('Neobsahuje žiaden súbor')
cy.get('.sidebar-info .v-btn').contains('Zobraziť viac').click()
cy.getCy('button-download').should('be.visible')
Expand Down Expand Up @@ -53,7 +53,7 @@ describe(`Test image empty asset, Env: ${CY.cfg}`,
cy.api_getFileID().then((assetID) => {
cy.circleLoad()

cy.visit(`/asset/${assetID}`)
cy.visit(`/assets/${assetID}`)
cy.circleLoad()
cy.get('.dam-image-detail__sidebar [data-cy="custom-field-title"] textarea[rows]')
.invoke('val').then((assetTitle)=>{
Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/assetEmpty/videoAssetEmpty.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ describe(`Test video empty asset, Env: ${CY.cfg}`,
cy.getCy('button-confirm').should('be.visible').click()
cy.alertMessage(ALERT_CREATE)

cy.urlContains('/asset')
cy.urlContains('/assets')
cy.get('.sidebar-info__content > .pa-2 > .v-alert').contains('Neobsahuje žiaden súbor')
cy.getCy('button-download').should('be.visible')
cy.getCy('button-delete').should('be.visible')
Expand Down Expand Up @@ -59,7 +59,7 @@ describe(`Test video empty asset, Env: ${CY.cfg}`,
cy.api_getFileID().then((assetID) => {
cy.circleLoad()

cy.visit(`/asset/${assetID}`)
cy.visit(`/assets/${assetID}`)
cy.circleLoad()
cy.get('.dam-image-detail__sidebar [data-cy="custom-field-title"] textarea').eq(0)
.invoke('val').then((assetTitle)=>{
Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/assets/assetExifAutofill.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ describe(`Test add audio asset to podcast episode function, Env: ${CY.cfg}`,
cy.prepareData('image/sampleMeta1.jpg', true, assetIDs)
})
it('Check image on Title-Description-Keywords-Artists', () => {
cy.visit(`/asset/${assetIDs}`)
cy.visit(`/assets/${assetIDs}`)
cy.api_waitPageLoad('asset-edit')
cy.get('[data-cy="custom-field-title"] textarea')
.should('have.value', EXPECTED_TITLE)
Expand All @@ -35,7 +35,7 @@ describe(`Test add audio asset to podcast episode function, Env: ${CY.cfg}`,
cy.prepareData('image/sampleMeta2.jpg', true, assetIDs)
})
it('Check image on Subject-ImageDescription-Subjects-Owners', () => {
cy.visit(`/asset/${assetIDs[1]}`)
cy.visit(`/assets/${assetIDs[1]}`)
cy.api_waitPageLoad('asset-edit')
cy.get('[data-cy="custom-field-title"] textarea')
.should('have.value', EXPECTED_TITLE)
Expand Down
6 changes: 3 additions & 3 deletions cypress/e2e/assets/audioAsset.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ describe(`Test asset audio function, Env: ${CY.cfg}`,
cy.prepareData('audio/sample.mp3',true, assetIDs)
})
it('Create Metadata', () => {
cy.visit(`/asset/${assetIDs}`)
cy.visit(`/assets/${assetIDs}`)
cy.api_waitPageLoad('asset-edit')
cy.get('[data-cy="custom-field-title"] textarea')
.first().clear({ force: true }).type(`${ASSET_TITLE}`)
Expand All @@ -35,7 +35,7 @@ describe(`Test asset audio function, Env: ${CY.cfg}`,
cy.alertMessage(ALERT_UPDATE)
})
it('Edit Metadata', ()=>{
cy.visit(`/asset/${assetIDs}`)
cy.visit(`/assets/${assetIDs}`)
cy.api_waitPageLoad('asset-edit')
cy.get('[data-cy="custom-field-title"] textarea')
.first().clear({ force: true }).type(`${ASSET_TITLE}-edit`)
Expand All @@ -45,7 +45,7 @@ describe(`Test asset audio function, Env: ${CY.cfg}`,
cy.alertMessage(ALERT_UPDATE)
})
it('Clear Metadata', ()=>{
cy.visit(`/asset/${assetIDs}`)
cy.visit(`/assets/${assetIDs}`)
cy.api_waitPageLoad('asset-edit')
cy.get('[data-cy="custom-field-title"] textarea')
.first().clear({ force: true })
Expand Down
4 changes: 2 additions & 2 deletions cypress/e2e/assets/audioAssetToPodcast.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ describe(`Test add audio asset to podcast episode function, Env: ${CY.cfg}`,
cy.prepareData('audio/sample.mp3', true, assetIDs)
})
it('Add audio asset to podcast episode', () => {
cy.visit(`/asset/${assetIDs}`)
cy.visit(`/assets/${assetIDs}`)
cy.api_waitPageLoad('asset-edit')
cy.get('[data-cy="custom-field-title"] textarea')
.first().clear({ force: true }).type(`${ASSET_TITLE}`)
Expand All @@ -36,7 +36,7 @@ describe(`Test add audio asset to podcast episode function, Env: ${CY.cfg}`,
cy.alertMessage(ALERT_CREATE)
})
it('Delete podcast', ()=>{
cy.visit(`/asset/${assetIDs}`)
cy.visit(`/assets/${assetIDs}`)
cy.api_waitPageLoad('asset-edit')
cy.getCy('button-podcast').should('be.visible').click()
cy.get('.text-body-2').contains(`${ASSET_TITLE}-edit`).should('exist')
Expand Down
Loading
Loading