From 3ceec97f6650376c321461994821a3b6bc5d4018 Mon Sep 17 00:00:00 2001 From: Brainslug Date: Fri, 22 Jul 2022 15:30:25 +0200 Subject: [PATCH 01/11] Using formFields which is filtered over the fields property (#14569) --- app/src/components/v-form/v-form.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/components/v-form/v-form.vue b/app/src/components/v-form/v-form.vue index ba94716a1c..3849df2b78 100644 --- a/app/src/components/v-form/v-form.vue +++ b/app/src/components/v-form/v-form.vue @@ -285,7 +285,7 @@ export default defineComponent({ }); const fieldsInGroup = computed(() => - fields.value.filter( + formFields.value.filter( (field: Field) => field.meta?.group === props.group || (props.group === null && isNil(field.meta?.group)) ) ); From 7d62a7000704d01c9323711a40462c3c62ad37d6 Mon Sep 17 00:00:00 2001 From: Azri Kahar <42867097+azrikahar@users.noreply.github.com> Date: Fri, 22 Jul 2022 21:55:51 +0800 Subject: [PATCH 02/11] Fix GraphQL aggregate query (#14560) * FIx aggregate query in GraphQL * change type to Query and alter previous logic * test --- api/src/services/graphql/index.ts | 18 ++++--- tests/api/items/aggregate.test.ts | 84 +++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+), 8 deletions(-) create mode 100644 tests/api/items/aggregate.test.ts diff --git a/api/src/services/graphql/index.ts b/api/src/services/graphql/index.ts index 77b9322ca5..bce34f6d4b 100644 --- a/api/src/services/graphql/index.ts +++ b/api/src/services/graphql/index.ts @@ -1250,7 +1250,7 @@ export class GraphQLService { if (!selections) return null; const args: Record = this.parseArgs(info.fieldNodes[0].arguments || [], info.variableValues); - let query: Record; + let query: Query; const isAggregate = collection.endsWith('_aggregated') && collection in this.schema.collections === false; @@ -1280,13 +1280,15 @@ export class GraphQLService { } // Transform count(a.b.c) into a.b.count(c) - for (let fieldIndex = 0; fieldIndex < query.fields.length; fieldIndex++) { - if (query.fields[fieldIndex].includes('(') && query.fields[fieldIndex].includes(')')) { - const functionName = query.fields[fieldIndex].split('(')[0]; - const columnNames = query.fields[fieldIndex].match(REGEX_BETWEEN_PARENS)![1].split('.'); - if (columnNames.length > 1) { - const column = columnNames.pop(); - query.fields[fieldIndex] = columnNames.join('.') + '.' + functionName + '(' + column + ')'; + if (query.fields?.length) { + for (let fieldIndex = 0; fieldIndex < query.fields.length; fieldIndex++) { + if (query.fields[fieldIndex].includes('(') && query.fields[fieldIndex].includes(')')) { + const functionName = query.fields[fieldIndex].split('(')[0]; + const columnNames = query.fields[fieldIndex].match(REGEX_BETWEEN_PARENS)![1].split('.'); + if (columnNames.length > 1) { + const column = columnNames.pop(); + query.fields[fieldIndex] = columnNames.join('.') + '.' + functionName + '(' + column + ')'; + } } } } diff --git a/tests/api/items/aggregate.test.ts b/tests/api/items/aggregate.test.ts new file mode 100644 index 0000000000..df1b39fc51 --- /dev/null +++ b/tests/api/items/aggregate.test.ts @@ -0,0 +1,84 @@ +import config, { getUrl } from '../../config'; +import vendors from '../../get-dbs-to-test'; +import request from 'supertest'; +import knex, { Knex } from 'knex'; +import { createGuest, seedTable, createMany } from '../../setup/utils/factories'; + +describe('/items', () => { + const databases = new Map(); + + beforeAll(async () => { + for (const vendor of vendors) { + databases.set(vendor, knex(config.knexConfig[vendor]!)); + } + }); + + afterAll(async () => { + for (const [_vendor, connection] of databases) { + await connection.destroy(); + } + }); + + beforeEach(async () => { + for (const [, connection] of databases) { + await connection('guests').delete(); + } + }); + + describe('/:collection GET', () => { + describe('returns count correctly', () => { + it.each(vendors)('%s', async (vendor) => { + const count = 10; + const guests: any[] = createMany(createGuest, count); + await seedTable(databases.get(vendor)!, 1, 'guests', guests); + + const response = await request(getUrl(vendor)) + .get(`/items/guests?aggregate[count]=id`) + .set('Authorization', 'Bearer AdminToken') + .expect('Content-Type', /application\/json/) + .expect(200); + + const { data } = response.body; + expect(data[0]).toMatchObject({ + count: { + id: guests.length, + }, + }); + }); + }); + }); + + describe('/:collection GraphQL Query', () => { + describe('returns count correctly', () => { + it.each(vendors)('%s', async (vendor) => { + const count = 10; + const guests: any[] = createMany(createGuest, count); + await seedTable(databases.get(vendor)!, 1, 'guests', guests); + + const query = ` + { + guests_aggregated { + count { + id + } + } + }`; + + const response = await request(getUrl(vendor)) + .post('/graphql') + .send({ query }) + .set('Authorization', 'Bearer AdminToken') + .expect('Content-Type', /application\/json/) + .expect(200); + + const { data } = response.body; + + expect(data.guests_aggregated[0]).toMatchObject({ + count: { + id: guests.length, + }, + }); + }); + }); + }); +}); From 1b368291eb9a2f0fe090d42481df689b313ca0d8 Mon Sep 17 00:00:00 2001 From: ian Date: Fri, 22 Jul 2022 22:17:14 +0800 Subject: [PATCH 03/11] Revert to for image editor (#14576) * Revert to for image editor * Fix typings --- .../components/image-editor/image-editor.vue | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/app/src/views/private/components/image-editor/image-editor.vue b/app/src/views/private/components/image-editor/image-editor.vue index 21996b14ca..c5ed40d1cf 100644 --- a/app/src/views/private/components/image-editor/image-editor.vue +++ b/app/src/views/private/components/image-editor/image-editor.vue @@ -22,7 +22,7 @@
- +
@@ -80,7 +80,7 @@ v-if="imageData" clickable :active="aspectRatio === imageData.width / imageData.height" - @click="aspectRatio = imageData.width / imageData.height" + @click="setAspectRatio" > {{ t('original') }} @@ -96,7 +96,7 @@ {{ n(imageData.width) }}x{{ n(imageData.height) }}
@@ -115,7 +115,7 @@ From aec37f619888ed6f8ad1e678251ca72cc8ed7f85 Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Fri, 22 Jul 2022 10:38:33 -0400 Subject: [PATCH 04/11] v9.14.4 --- api/package.json | 2 +- app/package.json | 2 +- packages/create-directus-extension/package.json | 2 +- packages/drive-azure/package.json | 2 +- packages/drive-gcs/package.json | 2 +- packages/drive-s3/package.json | 2 +- packages/drive/package.json | 2 +- packages/extensions-sdk/package.json | 2 +- packages/schema/package.json | 2 +- packages/shared/package.json | 2 +- packages/specs/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/api/package.json b/api/package.json index dee8d28a46..5ebbcb3438 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "directus", - "version": "9.14.3", + "version": "9.14.4", "license": "GPL-3.0-only", "homepage": "https://github.com/directus/directus#readme", "description": "Directus is a real-time API and App dashboard for managing SQL database content.", diff --git a/app/package.json b/app/package.json index 8ea5761992..a764c13c08 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "@directus/app", - "version": "9.14.3", + "version": "9.14.4", "private": false, "description": "Directus is an Open-Source Headless CMS & API for Managing Custom Databases", "author": "Rijk van Zanten ", diff --git a/packages/create-directus-extension/package.json b/packages/create-directus-extension/package.json index c0d710f814..2e136d3e6a 100644 --- a/packages/create-directus-extension/package.json +++ b/packages/create-directus-extension/package.json @@ -1,6 +1,6 @@ { "name": "create-directus-extension", - "version": "9.14.3", + "version": "9.14.4", "description": "A small util that will scaffold a Directus extension.", "main": "lib/index.js", "repository": "directus/directus", diff --git a/packages/drive-azure/package.json b/packages/drive-azure/package.json index 62a0ba1a3c..e667f957aa 100644 --- a/packages/drive-azure/package.json +++ b/packages/drive-azure/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive-azure", - "version": "9.14.3", + "version": "9.14.4", "description": "Azure Blob driver for @directus/drive", "license": "MIT", "main": "dist/index.js", diff --git a/packages/drive-gcs/package.json b/packages/drive-gcs/package.json index 3018f84952..8972ff9222 100644 --- a/packages/drive-gcs/package.json +++ b/packages/drive-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive-gcs", - "version": "9.14.2", + "version": "9.14.3", "description": "Google Cloud Storage driver for @directus/drive", "license": "MIT", "main": "dist/index.js", diff --git a/packages/drive-s3/package.json b/packages/drive-s3/package.json index 60f2d017d1..2880670c97 100644 --- a/packages/drive-s3/package.json +++ b/packages/drive-s3/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive-s3", - "version": "9.14.3", + "version": "9.14.4", "description": "AWS S3 driver for @directus/drive", "license": "MIT", "main": "dist/index.js", diff --git a/packages/drive/package.json b/packages/drive/package.json index 7d1e30a350..07bbda8aab 100644 --- a/packages/drive/package.json +++ b/packages/drive/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive", - "version": "9.14.3", + "version": "9.14.4", "description": "Flexible and Fluent way to manage storage in Node.js.", "license": "MIT", "main": "dist/index.js", diff --git a/packages/extensions-sdk/package.json b/packages/extensions-sdk/package.json index 2789a03850..43fd806447 100644 --- a/packages/extensions-sdk/package.json +++ b/packages/extensions-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@directus/extensions-sdk", - "version": "9.14.2", + "version": "9.14.3", "description": "A toolkit to develop extensions to extend Directus.", "main": "dist/cjs/index.js", "repository": "directus/directus", diff --git a/packages/schema/package.json b/packages/schema/package.json index 0ebf246b96..6cb5b97d6e 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -1,6 +1,6 @@ { "name": "@directus/schema", - "version": "9.14.3", + "version": "9.14.4", "description": "Utility for extracting information about existing DB schema", "main": "dist/index.js", "exports": { diff --git a/packages/shared/package.json b/packages/shared/package.json index 696b93ddd9..e8f94e7dff 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@directus/shared", - "version": "9.14.3", + "version": "9.14.4", "description": "Code shared between all directus packages.", "exports": { "./composables": { diff --git a/packages/specs/package.json b/packages/specs/package.json index 3eb552ca72..f4cccb3bf3 100644 --- a/packages/specs/package.json +++ b/packages/specs/package.json @@ -1,6 +1,6 @@ { "name": "@directus/specs", - "version": "9.14.3", + "version": "9.14.4", "description": "OpenAPI Specification of the Directus API", "main": "index.js", "exports": { From 6e4738e4c0b75ee6030600867f1e6eb6058f34ac Mon Sep 17 00:00:00 2001 From: rijkvanzanten Date: Fri, 22 Jul 2022 14:45:15 -0400 Subject: [PATCH 05/11] v9.14.5 --- api/package.json | 2 +- app/package.json | 2 +- packages/create-directus-extension/package.json | 2 +- packages/drive-azure/package.json | 2 +- packages/drive-gcs/package.json | 2 +- packages/drive-s3/package.json | 2 +- packages/drive/package.json | 2 +- packages/extensions-sdk/package.json | 2 +- packages/schema/package.json | 2 +- packages/shared/package.json | 2 +- packages/specs/package.json | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/api/package.json b/api/package.json index 5ebbcb3438..4773f11fef 100644 --- a/api/package.json +++ b/api/package.json @@ -1,6 +1,6 @@ { "name": "directus", - "version": "9.14.4", + "version": "9.14.5", "license": "GPL-3.0-only", "homepage": "https://github.com/directus/directus#readme", "description": "Directus is a real-time API and App dashboard for managing SQL database content.", diff --git a/app/package.json b/app/package.json index a764c13c08..862bc8b517 100644 --- a/app/package.json +++ b/app/package.json @@ -1,6 +1,6 @@ { "name": "@directus/app", - "version": "9.14.4", + "version": "9.14.5", "private": false, "description": "Directus is an Open-Source Headless CMS & API for Managing Custom Databases", "author": "Rijk van Zanten ", diff --git a/packages/create-directus-extension/package.json b/packages/create-directus-extension/package.json index 2e136d3e6a..8721d55068 100644 --- a/packages/create-directus-extension/package.json +++ b/packages/create-directus-extension/package.json @@ -1,6 +1,6 @@ { "name": "create-directus-extension", - "version": "9.14.4", + "version": "9.14.5", "description": "A small util that will scaffold a Directus extension.", "main": "lib/index.js", "repository": "directus/directus", diff --git a/packages/drive-azure/package.json b/packages/drive-azure/package.json index e667f957aa..b13b9d030d 100644 --- a/packages/drive-azure/package.json +++ b/packages/drive-azure/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive-azure", - "version": "9.14.4", + "version": "9.14.5", "description": "Azure Blob driver for @directus/drive", "license": "MIT", "main": "dist/index.js", diff --git a/packages/drive-gcs/package.json b/packages/drive-gcs/package.json index 8972ff9222..93c66aecaf 100644 --- a/packages/drive-gcs/package.json +++ b/packages/drive-gcs/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive-gcs", - "version": "9.14.3", + "version": "9.14.4", "description": "Google Cloud Storage driver for @directus/drive", "license": "MIT", "main": "dist/index.js", diff --git a/packages/drive-s3/package.json b/packages/drive-s3/package.json index 2880670c97..1d3df1189b 100644 --- a/packages/drive-s3/package.json +++ b/packages/drive-s3/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive-s3", - "version": "9.14.4", + "version": "9.14.5", "description": "AWS S3 driver for @directus/drive", "license": "MIT", "main": "dist/index.js", diff --git a/packages/drive/package.json b/packages/drive/package.json index 07bbda8aab..9b5cf217b1 100644 --- a/packages/drive/package.json +++ b/packages/drive/package.json @@ -1,6 +1,6 @@ { "name": "@directus/drive", - "version": "9.14.4", + "version": "9.14.5", "description": "Flexible and Fluent way to manage storage in Node.js.", "license": "MIT", "main": "dist/index.js", diff --git a/packages/extensions-sdk/package.json b/packages/extensions-sdk/package.json index 43fd806447..50c1484f5e 100644 --- a/packages/extensions-sdk/package.json +++ b/packages/extensions-sdk/package.json @@ -1,6 +1,6 @@ { "name": "@directus/extensions-sdk", - "version": "9.14.3", + "version": "9.14.4", "description": "A toolkit to develop extensions to extend Directus.", "main": "dist/cjs/index.js", "repository": "directus/directus", diff --git a/packages/schema/package.json b/packages/schema/package.json index 6cb5b97d6e..1ecff21d93 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -1,6 +1,6 @@ { "name": "@directus/schema", - "version": "9.14.4", + "version": "9.14.5", "description": "Utility for extracting information about existing DB schema", "main": "dist/index.js", "exports": { diff --git a/packages/shared/package.json b/packages/shared/package.json index e8f94e7dff..fcbeb8533b 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@directus/shared", - "version": "9.14.4", + "version": "9.14.5", "description": "Code shared between all directus packages.", "exports": { "./composables": { diff --git a/packages/specs/package.json b/packages/specs/package.json index f4cccb3bf3..b3b445a7be 100644 --- a/packages/specs/package.json +++ b/packages/specs/package.json @@ -1,6 +1,6 @@ { "name": "@directus/specs", - "version": "9.14.4", + "version": "9.14.5", "description": "OpenAPI Specification of the Directus API", "main": "index.js", "exports": { From d6846d74ebb36a7765a6a0a1960363875b16b3c0 Mon Sep 17 00:00:00 2001 From: Rijk van Zanten Date: Fri, 22 Jul 2022 15:10:28 -0400 Subject: [PATCH 06/11] Refactor unnecessary nested app folders (#14580) * Remove unused nested folders from components * Remove nested folders * Standardize composables output * Fix import inconsistencies * Same trick for directives * Same for routes * Replace reliance root grouped export in favor of explicit imports * Replace reliance on implicit imports * Remove nested folder structure * Consistent use of non-default exports in utils * Remove nested folder structure from private components * Fix test mock * Remove extraneous component registration for valuenull * Fix stores provider * Fix logo sprite --- app/src/api.ts | 2 +- app/src/app.vue | 8 +- .../module-bar-logo => assets}/sprite.svg | 0 app/src/auth.ts | 2 +- app/src/components/register.ts | 103 +++++++------ .../expand/transition-expand-methods.ts | 2 +- .../components/{v-avatar => }/v-avatar.vue | 2 +- app/src/components/v-avatar/index.ts | 4 - app/src/components/{v-badge => }/v-badge.vue | 0 app/src/components/v-badge/index.ts | 4 - .../{v-breadcrumb => }/v-breadcrumb.vue | 0 app/src/components/v-breadcrumb/index.ts | 4 - .../components/{v-button => }/v-button.vue | 4 +- app/src/components/v-button/index.ts | 4 - .../{v-card => }/v-card-actions.vue | 0 .../{v-card => }/v-card-subtitle.vue | 0 .../components/{v-card => }/v-card-text.vue | 0 .../components/{v-card => }/v-card-title.vue | 0 app/src/components/{v-card => }/v-card.vue | 0 app/src/components/v-card/index.ts | 8 -- app/src/components/v-checkbox-tree/index.ts | 4 - .../{v-checkbox => }/v-checkbox.vue | 0 app/src/components/v-checkbox/index.ts | 4 - app/src/components/{v-chip => }/v-chip.vue | 2 +- app/src/components/v-chip/index.ts | 4 - .../{v-date-picker => }/v-date-picker.vue | 5 - app/src/components/v-date-picker/index.ts | 4 - .../components/{v-detail => }/v-detail.vue | 0 app/src/components/v-detail/index.ts | 4 - .../components/{v-dialog => }/v-dialog.vue | 2 +- app/src/components/v-dialog/index.ts | 4 - .../components/{v-divider => }/v-divider.vue | 0 app/src/components/v-divider/index.ts | 4 - .../components/{v-drawer => }/v-drawer.vue | 2 +- app/src/components/v-drawer/index.ts | 4 - app/src/components/{v-error => }/v-error.vue | 2 +- app/src/components/v-error/index.ts | 4 - .../{v-fancy-select => }/v-fancy-select.vue | 11 +- app/src/components/v-fancy-select/index.ts | 4 - app/src/components/v-fancy-select/types.ts | 8 -- .../components/v-field-list/v-field-list.vue | 2 +- app/src/components/v-field-template/index.ts | 4 - app/src/components/v-form/form-field-menu.vue | 2 +- app/src/components/v-form/form-field.vue | 2 +- app/src/components/v-form/index.ts | 4 - app/src/components/v-form/v-form.vue | 4 +- app/src/components/{v-hover => }/v-hover.vue | 0 app/src/components/v-hover/index.ts | 4 - app/src/components/v-icon/index.ts | 4 - app/src/components/v-icon/v-icon.vue | 2 +- app/src/components/{v-info => }/v-info.vue | 0 app/src/components/v-info/index.ts | 4 - app/src/components/{v-input => }/v-input.vue | 0 app/src/components/v-input/index.ts | 4 - .../{v-item-group => }/v-item-group.vue | 2 +- app/src/components/v-item-group/index.ts | 5 - .../components/{v-item-group => }/v-item.vue | 2 +- .../components/{v-list => }/v-list-group.vue | 2 +- .../{v-list => }/v-list-item-content.vue | 0 .../{v-list => }/v-list-item-hint.vue | 0 .../{v-list => }/v-list-item-icon.vue | 0 .../components/{v-list => }/v-list-item.vue | 2 +- app/src/components/{v-list => }/v-list.vue | 2 +- app/src/components/v-list/index.ts | 10 -- app/src/components/{v-menu => }/v-menu.vue | 135 +++++++++++++++++- app/src/components/v-menu/index.ts | 4 - app/src/components/v-menu/use-popper.ts | 130 ----------------- .../components/{v-notice => }/v-notice.vue | 0 app/src/components/v-notice/index.ts | 4 - .../components/{v-overlay => }/v-overlay.vue | 0 app/src/components/v-overlay/index.ts | 4 - .../{v-pagination => }/v-pagination.vue | 0 app/src/components/v-pagination/index.ts | 4 - .../circular => }/v-progress-circular.vue | 2 +- .../linear => }/v-progress-linear.vue | 0 .../components/v-progress/circular/index.ts | 4 - .../components/v-progress/circular/readme.md | 70 --------- app/src/components/v-progress/linear/index.ts | 4 - .../components/v-progress/linear/readme.md | 55 ------- app/src/components/{v-radio => }/v-radio.vue | 0 app/src/components/v-radio/index.ts | 4 - app/src/components/v-select/index.ts | 4 - app/src/components/{v-sheet => }/v-sheet.vue | 0 app/src/components/v-sheet/index.ts | 4 - .../v-skeleton-loader.vue | 0 app/src/components/v-skeleton-loader/index.ts | 4 - .../components/{v-slider => }/v-slider.vue | 0 app/src/components/v-slider/index.ts | 4 - .../components/{v-switch => }/v-switch.vue | 0 app/src/components/v-switch/index.ts | 4 - .../{v-tabs/v-tab-item => }/v-tab-item.vue | 2 +- .../components/{v-tabs/v-tab => }/v-tab.vue | 2 +- app/src/components/v-table/index.ts | 4 - app/src/components/v-table/table-header.vue | 4 +- app/src/components/v-table/v-table.vue | 2 +- .../v-tabs-items => }/v-tabs-items.vue | 0 app/src/components/{v-tabs => }/v-tabs.vue | 2 +- app/src/components/v-tabs/index.ts | 7 - app/src/components/v-tabs/v-tab-item/index.ts | 4 - app/src/components/v-tabs/v-tab/index.ts | 4 - .../components/v-tabs/v-tabs-items/index.ts | 4 - .../{v-textarea => }/v-textarea.vue | 0 app/src/components/v-textarea/index.ts | 4 - .../components/{v-upload => }/v-upload.vue | 6 +- app/src/components/v-upload/index.ts | 4 - app/src/composables/groupable/index.ts | 4 - app/src/composables/groupable/readme.md | 69 --------- app/src/composables/readme.md | 14 -- app/src/composables/size-class/index.ts | 4 - app/src/composables/size-class/readme.md | 33 ----- app/src/composables/use-alias-fields.ts | 2 +- app/src/composables/use-clipboard.ts | 2 +- .../use-custom-selection.ts | 0 .../composables/use-custom-selection/index.ts | 4 - .../use-custom-selection/readme.md | 10 -- .../{use-edits-guard => }/use-edits-guard.ts | 0 app/src/composables/use-edits-guard/index.ts | 4 - .../use-element-size.ts | 2 +- app/src/composables/use-element-size/index.ts | 4 - .../composables/use-element-size/readme.md | 28 ---- .../use-event-listener.ts | 2 +- .../composables/use-event-listener/index.ts | 4 - .../composables/use-event-listener/readme.md | 30 ---- app/src/composables/use-field-tree.ts | 3 +- app/src/composables/use-folders.ts | 2 +- .../{use-form-fields => }/use-form-fields.ts | 2 +- app/src/composables/use-form-fields/index.ts | 4 - .../groupable.ts => use-groupable.ts} | 2 +- .../composables/{use-item => }/use-item.ts | 7 +- app/src/composables/use-item/index.ts | 4 - app/src/composables/use-item/readme.md | 0 app/src/composables/use-local-storage.ts | 2 +- app/src/composables/use-m2m.ts | 7 +- app/src/composables/use-permissions.ts | 3 +- .../{use-preset => }/use-preset.ts | 3 +- app/src/composables/use-preset/index.ts | 4 - app/src/composables/use-preset/types.ts | 16 --- .../{use-relation => }/use-relation-m2a.ts | 6 +- .../{use-relation => }/use-relation-m2m.ts | 6 +- .../{use-relation => }/use-relation-m2o.ts | 6 +- .../use-relation-multiple.ts | 10 +- .../{use-relation => }/use-relation-o2m.ts | 6 +- .../{use-relation => }/use-relation-single.ts | 2 +- app/src/composables/use-relation/index.ts | 30 ---- .../composables/use-scroll-distance/index.ts | 4 - .../composables/use-scroll-distance/readme.md | 41 ------ .../use-scroll-distance.ts | 45 ------ .../{use-shortcut => }/use-shortcut.ts | 2 +- app/src/composables/use-shortcut/index.ts | 4 - app/src/composables/use-shortcut/readme.md | 27 ---- .../size-class.ts => use-size-class.ts} | 2 +- app/src/composables/use-system.ts | 34 ++++- app/src/composables/use-template-data.ts | 7 +- app/src/composables/use-tfa-setup.ts | 2 +- .../use-time-from-now.ts | 6 +- .../composables/use-time-from-now/index.ts | 4 - .../composables/use-time-from-now/readme.md | 21 --- .../composables/{use-title => }/use-title.ts | 0 app/src/composables/use-title/index.ts | 4 - .../composables/use-translation-strings.ts | 2 +- .../{use-window-size => }/use-window-size.ts | 2 +- app/src/composables/use-window-size/index.ts | 4 - app/src/composables/use-window-size/readme.md | 22 --- .../{click-outside => }/click-outside.ts | 0 app/src/directives/click-outside/index.ts | 4 - app/src/directives/click-outside/readme.md | 37 ----- .../{context-menu => }/context-menu.ts | 0 app/src/directives/context-menu/index.ts | 4 - app/src/directives/context-menu/readme.md | 18 --- app/src/directives/{focus => }/focus.ts | 0 app/src/directives/focus/readme.md | 17 --- app/src/directives/readme.md | 4 - app/src/directives/register.ts | 8 +- app/src/directives/{tooltip => }/tooltip.ts | 0 app/src/directives/tooltip/index.ts | 4 - app/src/directives/tooltip/readme.md | 22 --- app/src/displays/collection/index.ts | 2 +- app/src/displays/color/color.vue | 2 +- app/src/displays/datetime/datetime.vue | 6 +- app/src/displays/datetime/index.ts | 4 +- app/src/displays/file/file.vue | 4 +- app/src/displays/filesize/index.ts | 2 +- app/src/displays/icon/icon.vue | 2 +- app/src/displays/image/image.vue | 2 - app/src/displays/mime-type/index.ts | 2 +- app/src/displays/readme.md | 11 -- app/src/displays/related-values/index.ts | 6 +- .../related-values/related-values.vue | 4 +- app/src/displays/translations/index.ts | 5 +- .../displays/translations/translations.vue | 6 +- app/src/hydrate.ts | 30 ++-- .../system-collection/system-collection.vue | 2 +- .../system-collections/system-collections.vue | 2 +- .../_system/system-field/system-field.vue | 2 +- .../_system/system-filter/input-group.vue | 2 +- .../_system/system-filter/nodes.vue | 2 +- .../_system/system-filter/system-filter.vue | 2 +- .../_system/system-folder/folder.vue | 2 +- .../system-mfa-setup/system-mfa-setup.vue | 2 +- .../_system/system-scope/system-scope.vue | 2 +- app/src/interfaces/datetime/datetime.vue | 4 +- app/src/interfaces/file-image/file-image.vue | 11 +- app/src/interfaces/file/file.vue | 9 +- app/src/interfaces/files/files.vue | 12 +- .../input-rich-text-html.vue | 2 +- .../input-rich-text-md/input-rich-text-md.vue | 4 +- app/src/interfaces/list-m2a/list-m2a.vue | 9 +- app/src/interfaces/list-m2m/list-m2m.vue | 12 +- .../list-o2m-tree-view/item-preview.vue | 4 +- .../list-o2m-tree-view/list-o2m-tree-view.vue | 3 +- .../list-o2m-tree-view/nested-draggable.vue | 10 +- app/src/interfaces/list-o2m/list-o2m.vue | 12 +- app/src/interfaces/list/list.vue | 2 +- app/src/interfaces/map/map.vue | 4 +- app/src/interfaces/map/options.vue | 4 +- .../interfaces/select-color/select-color.vue | 2 +- .../select-dropdown-m2o.vue | 12 +- app/src/interfaces/translations/index.ts | 2 +- .../interfaces/translations/translations.vue | 5 +- app/src/lang/readme.md | 4 - app/src/lang/set-language.ts | 3 +- app/src/layouts/calendar/index.ts | 2 +- app/src/layouts/calendar/options.vue | 2 +- app/src/layouts/cards/cards.vue | 4 +- app/src/layouts/cards/index.ts | 4 +- app/src/layouts/map/components/map.vue | 4 +- app/src/layouts/map/options.vue | 2 +- app/src/layouts/tabular/index.ts | 8 +- app/src/layouts/tabular/tabular.vue | 8 +- .../modules/activity/routes/collection.vue | 6 +- .../components/navigation-bookmark.vue | 3 +- .../content/components/navigation-item.vue | 6 +- .../content/composables/use-navigation.ts | 2 +- app/src/modules/content/index.ts | 4 +- .../content/routes/collection-or-item.vue | 4 +- app/src/modules/content/routes/collection.vue | 17 +-- app/src/modules/content/routes/item.vue | 16 +-- .../modules/content/routes/no-collections.vue | 2 +- .../modules/files/components/add-folder.vue | 2 +- .../components/file-info-sidebar-detail.vue | 6 +- .../files/components/navigation-folder.vue | 4 +- .../modules/files/components/navigation.vue | 4 +- app/src/modules/files/routes/collection.vue | 20 +-- app/src/modules/files/routes/item.vue | 18 +-- .../insights/components/dashboard-dialog.vue | 4 +- .../insights/components/navigation.vue | 4 +- app/src/modules/insights/index.ts | 2 +- app/src/modules/insights/routes/dashboard.vue | 10 +- app/src/modules/insights/routes/overview.vue | 5 +- .../insights/routes/panel-configuration.vue | 4 +- app/src/modules/register.ts | 3 +- app/src/modules/settings/index.ts | 4 +- .../data-model/collections/collections.vue | 4 +- .../components/collection-dialog.vue | 4 +- .../components/collection-item.vue | 4 +- .../components/collection-options.vue | 4 +- .../field-detail-advanced-display.vue | 2 +- .../field-detail-advanced-interface.vue | 2 +- ...field-detail-advanced-relationship-m2a.vue | 4 +- ...field-detail-advanced-relationship-m2m.vue | 3 +- ...field-detail-advanced-relationship-m2o.vue | 2 +- ...field-detail-advanced-relationship-o2m.vue | 3 +- ...ail-advanced-relationship-translations.vue | 2 +- .../relationship-configuration.vue | 2 +- .../data-model/field-detail/field-detail.vue | 3 +- .../shared/related-collection-select.vue | 2 +- .../shared/related-field-select.vue | 2 +- .../field-detail/store/alterations/files.ts | 3 +- .../field-detail/store/alterations/m2a.ts | 3 +- .../field-detail/store/alterations/m2m.ts | 4 +- .../field-detail/store/alterations/m2o.ts | 3 +- .../field-detail/store/alterations/o2m.ts | 4 +- .../store/alterations/translations.ts | 3 +- .../data-model/field-detail/store/index.ts | 4 +- .../fields/components/field-select.vue | 5 +- .../fields/components/fields-management.vue | 4 +- .../routes/data-model/fields/fields.vue | 9 +- .../routes/data-model/get-local-type.ts | 3 +- .../routes/data-model/new-collection.vue | 4 +- .../routes/flows/components/flow-dialog.vue | 2 +- .../routes/flows/components/operation.vue | 2 +- .../settings/routes/flows/flow-drawer.vue | 2 +- .../modules/settings/routes/flows/flow.vue | 6 +- .../settings/routes/flows/overview.vue | 3 +- .../routes/presets/collection/collection.vue | 14 +- .../modules/settings/routes/presets/item.vue | 7 +- .../settings/routes/project/project.vue | 7 +- .../settings/routes/roles/collection.vue | 3 +- .../item/components/permissions-overview.vue | 2 +- .../components/role-info-sidebar-detail.vue | 2 +- .../settings/routes/roles/item/item.vue | 14 +- .../permissions-detail/components/fields.vue | 2 +- .../permissions-detail/permissions-detail.vue | 2 +- .../translation-strings-tooltip.vue | 3 +- .../settings/routes/webhooks/collection.vue | 4 +- .../modules/settings/routes/webhooks/item.vue | 10 +- .../users/components/navigation-role.vue | 2 +- .../components/user-info-sidebar-detail.vue | 4 +- app/src/modules/users/routes/collection.vue | 14 +- app/src/modules/users/routes/item.vue | 20 +-- app/src/panels/list/index.ts | 4 +- app/src/panels/list/panel-list.vue | 2 +- app/src/panels/metric/index.ts | 2 +- .../panels/time-series/panel-time-series.vue | 2 +- app/src/panels/variable/panel-variable.vue | 2 +- app/src/router.ts | 18 +-- .../{accept-invite => }/accept-invite.vue | 2 +- app/src/routes/accept-invite/index.ts | 4 - .../login/components/login-form/ldap-form.vue | 2 +- .../components/login-form/login-form.vue | 2 +- app/src/routes/login/components/sso-links.vue | 2 +- app/src/routes/login/index.ts | 4 - app/src/routes/login/login.vue | 3 +- app/src/routes/{logout => }/logout.vue | 0 app/src/routes/logout/index.ts | 4 - .../private-not-found.vue | 0 app/src/routes/private-not-found/index.ts | 4 - app/src/routes/readme.md | 8 -- app/src/routes/reset-password/index.ts | 4 - app/src/routes/reset-password/reset.vue | 2 +- app/src/routes/shared/index.ts | 4 - app/src/routes/shared/shared.vue | 2 +- app/src/routes/{tfa-setup => }/tfa-setup.vue | 3 +- app/src/routes/tfa-setup/index.ts | 4 - app/src/stores/collections.ts | 4 +- app/src/stores/fields.ts | 5 +- app/src/stores/flows.ts | 3 +- app/src/stores/index.ts | 14 -- app/src/stores/insights.ts | 2 +- app/src/stores/notifications.ts | 2 +- app/src/stores/presets.ts | 2 +- app/src/stores/relations.ts | 2 +- app/src/stores/user.ts | 2 +- .../lib/_flatpickr.scss} | 2 + app/src/styles/readme.md | 8 -- .../types.ts => types/activity.ts} | 0 app/src/types/index.ts | 6 - .../types.ts => types/revisions.ts} | 0 .../add-related-primary-key-to-fields.ts | 2 +- .../adjust-fields-for-displays.ts | 4 +- .../utils/adjust-fields-for-displays/index.ts | 4 - .../arrays-are-equal.ts | 2 +- app/src/utils/arrays-are-equal/index.ts | 4 - app/src/utils/arrays-are-equal/readme.md | 16 --- app/src/utils/capitalize-first.ts | 3 + .../capitalize-first/capitalize-first.ts | 3 - app/src/utils/capitalize-first/index.ts | 4 - app/src/utils/format-field-function.ts | 2 +- .../{format-filesize => }/format-filesize.ts | 2 +- app/src/utils/format-filesize/index.ts | 4 - app/src/utils/geometry/basemap.ts | 2 +- ...-date-locale.ts => get-date-fns-locale.ts} | 31 +++- app/src/utils/get-date-fns-locale/index.ts | 30 ---- app/src/utils/get-flatpickr-locale.ts | 30 ++-- ...r-locale.ts => get-fullcalendar-locale.ts} | 24 +++- .../get-fullcalendar-locale.ts | 23 --- .../utils/get-fullcalendar-locale/index.ts | 4 - .../get-related-collection.ts | 6 +- app/src/utils/get-related-collection/index.ts | 4 - app/src/utils/get-setting.ts | 4 +- app/src/utils/get-theme.ts | 2 +- .../{hide-drag-image => }/hide-drag-image.ts | 2 +- app/src/utils/hide-drag-image/index.ts | 4 - app/src/utils/is-allowed.ts | 3 +- app/src/utils/{is-empty => }/is-empty.ts | 0 app/src/utils/is-empty/index.ts | 4 - app/src/utils/is-empty/readme.md | 32 ----- app/src/utils/{color/index.ts => is-hex.ts} | 4 - .../utils/{jwt-payload => }/jwt-payload.ts | 2 +- app/src/utils/jwt-payload/index.ts | 4 - app/src/utils/jwt-payload/readme.md | 11 -- .../localized-format-distance-strict.ts | 0 .../localized-format-distance-strict/index.ts | 4 - .../localized-format-distance.ts | 0 .../utils/localized-format-distance/index.ts | 4 - app/src/utils/localized-format.ts | 11 ++ app/src/utils/localized-format/index.ts | 4 - .../localized-format/localized-format.ts | 11 -- app/src/utils/notify.ts | 4 +- app/src/utils/parse-filter.ts | 2 +- app/src/utils/parse-preset.ts | 2 +- app/src/utils/query-to-gql-string.ts | 2 +- app/src/utils/readable-mime-type/index.ts | 12 +- .../readable-mime-type/readable-mime-type.ts | 10 -- app/src/utils/render-string-template.ts | 4 +- app/src/utils/save-as-csv.ts | 4 +- app/src/utils/set-favicon.ts | 2 +- .../translate-shortcut.ts | 4 +- app/src/utils/translate-shortcut/index.ts | 4 - app/src/utils/translate-shortcut/readme.md | 16 --- app/src/utils/unexpected-error.ts | 4 +- .../utils/{upload-file => }/upload-file.ts | 4 +- app/src/utils/upload-file/index.ts | 4 - .../utils/{upload-files => }/upload-files.ts | 6 +- app/src/utils/upload-files/index.ts | 4 - .../archive-sidebar-detail.vue | 0 .../archive-sidebar-detail/index.ts | 4 - .../{bookmark-add => }/bookmark-add.vue | 0 .../private/components/bookmark-add/index.ts | 4 - .../comment-input.vue | 2 +- .../comment-item-header.vue | 0 .../comment-item.vue | 0 .../comments-sidebar-detail.vue | 6 +- .../comments-sidebar-detail/index.ts | 4 - .../comments-sidebar-detail/readme.md | 9 -- .../{docs-wrapper => }/docs-wrapper.vue | 0 .../private/components/docs-wrapper/index.ts | 4 - .../{drawer-batch => }/drawer-batch.vue | 2 +- .../private/components/drawer-batch/index.ts | 4 - .../drawer-collection.vue | 4 +- .../components/drawer-collection/index.ts | 4 - .../{drawer-item => }/drawer-item.vue | 7 +- .../private/components/drawer-item/index.ts | 4 - .../components/export-sidebar-detail.vue | 6 +- .../{file-lightbox => }/file-lightbox.vue | 2 +- .../private/components/file-lightbox/index.ts | 4 - .../{file-preview => }/file-preview.vue | 0 .../private/components/file-preview/index.ts | 4 - .../components/flow-sidebar-detail.vue | 2 +- .../folder-picker-list-item.vue | 0 .../{folder-picker => }/folder-picker.vue | 0 .../header-bar-actions.vue | 0 .../components/header-bar-actions/index.ts | 4 - .../components/header-bar-actions/readme.md | 43 ------ .../{header-bar => }/header-bar.vue | 2 +- .../private/components/header-bar/index.ts | 4 - .../private/components/header-bar/readme.md | 53 ------- .../{image-editor => }/image-editor.vue | 0 .../private/components/image-editor/index.ts | 4 - .../latency-indicator.vue | 2 +- .../components/latency-indicator/index.ts | 4 - .../layout-sidebar-detail.vue | 0 .../components/layout-sidebar-detail/index.ts | 4 - .../module-bar-avatar.vue | 4 +- .../components/module-bar-avatar/index.ts | 4 - .../components/module-bar-avatar/readme.md | 25 ---- .../{module-bar-logo => }/module-bar-logo.vue | 5 +- .../components/module-bar-logo/index.ts | 4 - .../components/module-bar-logo/readme.md | 27 ---- .../views/private/components/module-bar.vue | 6 +- .../notification-dialogs.vue | 5 +- .../components/notification-dialogs/index.ts | 4 - .../notification-item.vue | 2 +- .../components/notification-item/index.ts | 4 - .../components/notification-item/readme.md | 34 ----- .../components/notifications-drawer.vue | 5 +- .../notifications-group.vue | 4 +- .../components/notifications-group/index.ts | 4 - .../components/notifications-group/readme.md | 25 ---- .../notifications-preview.vue | 6 +- .../components/notifications-preview/index.ts | 4 - .../notifications-preview/readme.md | 1 - .../{project-info => }/project-info.vue | 4 +- .../private/components/project-info/index.ts | 4 - .../refresh-sidebar-detail.vue | 0 .../refresh-sidebar-detail/index.ts | 4 - .../{render-display => }/render-display.vue | 2 - .../components/render-display/index.ts | 4 - .../components/render-display/readme.md | 36 ----- .../{render-template => }/render-template.vue | 4 +- .../components/render-template/index.ts | 4 - .../revision-item.vue | 0 .../revisions-date-group.vue | 0 .../revisions-drawer-detail.vue | 0 .../revisions-drawer-detail/index.ts | 4 - .../revisions-drawer-detail/readme.md | 9 -- .../revisions-drawer-picker.vue | 2 +- .../revisions-drawer-preview.vue | 0 .../revisions-drawer-updates-change.vue | 0 .../revisions-drawer-updates.vue | 2 +- .../revisions-drawer.vue | 0 .../{save-options => }/save-options.vue | 2 +- .../private/components/save-options/index.ts | 4 - .../private/components/save-options/readme.md | 1 - .../{search-input => }/search-input.vue | 0 .../private/components/search-input/index.ts | 4 - .../private/components/search-input/readme.md | 30 ---- .../share-item.vue | 0 .../shares-sidebar-detail.vue | 4 +- .../components/shares-sidebar-detail/index.ts | 4 - .../{sidebar-button => }/sidebar-button.vue | 2 +- .../components/sidebar-button/index.ts | 4 - .../components/sidebar-button/readme.md | 32 ----- .../sidebar-detail-group.vue | 0 .../components/sidebar-detail-group/index.ts | 4 - .../components/sidebar-detail-group/readme.md | 44 ------ .../{sidebar-detail => }/sidebar-detail.vue | 4 +- .../components/sidebar-detail/index.ts | 4 - .../components/sidebar-detail/readme.md | 39 ----- .../{user-popover => }/user-popover.vue | 0 .../private/components/user-popover/index.ts | 4 - .../{users-invite => }/users-invite.vue | 2 +- .../private/components/users-invite/index.ts | 4 - .../{value-null => }/value-null.vue | 0 .../private/components/value-null/index.ts | 4 - app/src/views/private/private-view.vue | 25 ++-- app/src/views/public/public-view.vue | 2 +- app/src/views/shared/shared-view.vue | 2 +- app/tests/utils/is-allowed.test.ts | 6 +- 499 files changed, 900 insertions(+), 2411 deletions(-) rename app/src/{views/private/components/module-bar-logo => assets}/sprite.svg (100%) rename app/src/components/{v-avatar => }/v-avatar.vue (94%) delete mode 100644 app/src/components/v-avatar/index.ts rename app/src/components/{v-badge => }/v-badge.vue (100%) delete mode 100644 app/src/components/v-badge/index.ts rename app/src/components/{v-breadcrumb => }/v-breadcrumb.vue (100%) delete mode 100644 app/src/components/v-breadcrumb/index.ts rename app/src/components/{v-button => }/v-button.vue (98%) delete mode 100644 app/src/components/v-button/index.ts rename app/src/components/{v-card => }/v-card-actions.vue (100%) rename app/src/components/{v-card => }/v-card-subtitle.vue (100%) rename app/src/components/{v-card => }/v-card-text.vue (100%) rename app/src/components/{v-card => }/v-card-title.vue (100%) rename app/src/components/{v-card => }/v-card.vue (100%) delete mode 100644 app/src/components/v-card/index.ts delete mode 100644 app/src/components/v-checkbox-tree/index.ts rename app/src/components/{v-checkbox => }/v-checkbox.vue (100%) delete mode 100644 app/src/components/v-checkbox/index.ts rename app/src/components/{v-chip => }/v-chip.vue (98%) delete mode 100644 app/src/components/v-chip/index.ts rename app/src/components/{v-date-picker => }/v-date-picker.vue (97%) delete mode 100644 app/src/components/v-date-picker/index.ts rename app/src/components/{v-detail => }/v-detail.vue (100%) delete mode 100644 app/src/components/v-detail/index.ts rename app/src/components/{v-dialog => }/v-dialog.vue (98%) delete mode 100644 app/src/components/v-dialog/index.ts rename app/src/components/{v-divider => }/v-divider.vue (100%) delete mode 100644 app/src/components/v-divider/index.ts rename app/src/components/{v-drawer => }/v-drawer.vue (98%) delete mode 100644 app/src/components/v-drawer/index.ts rename app/src/components/{v-error => }/v-error.vue (96%) delete mode 100644 app/src/components/v-error/index.ts rename app/src/components/{v-fancy-select => }/v-fancy-select.vue (94%) delete mode 100644 app/src/components/v-fancy-select/index.ts delete mode 100644 app/src/components/v-fancy-select/types.ts delete mode 100644 app/src/components/v-field-template/index.ts delete mode 100644 app/src/components/v-form/index.ts rename app/src/components/{v-hover => }/v-hover.vue (100%) delete mode 100644 app/src/components/v-hover/index.ts delete mode 100644 app/src/components/v-icon/index.ts rename app/src/components/{v-info => }/v-info.vue (100%) delete mode 100644 app/src/components/v-info/index.ts rename app/src/components/{v-input => }/v-input.vue (100%) delete mode 100644 app/src/components/v-input/index.ts rename app/src/components/{v-item-group => }/v-item-group.vue (93%) delete mode 100644 app/src/components/v-item-group/index.ts rename app/src/components/{v-item-group => }/v-item.vue (91%) rename app/src/components/{v-list => }/v-list-group.vue (97%) rename app/src/components/{v-list => }/v-list-item-content.vue (100%) rename app/src/components/{v-list => }/v-list-item-hint.vue (100%) rename app/src/components/{v-list => }/v-list-item-icon.vue (100%) rename app/src/components/{v-list => }/v-list-item.vue (99%) rename app/src/components/{v-list => }/v-list.vue (96%) delete mode 100644 app/src/components/v-list/index.ts rename app/src/components/{v-menu => }/v-menu.vue (71%) delete mode 100644 app/src/components/v-menu/index.ts delete mode 100644 app/src/components/v-menu/use-popper.ts rename app/src/components/{v-notice => }/v-notice.vue (100%) delete mode 100644 app/src/components/v-notice/index.ts rename app/src/components/{v-overlay => }/v-overlay.vue (100%) delete mode 100644 app/src/components/v-overlay/index.ts rename app/src/components/{v-pagination => }/v-pagination.vue (100%) delete mode 100644 app/src/components/v-pagination/index.ts rename app/src/components/{v-progress/circular => }/v-progress-circular.vue (97%) rename app/src/components/{v-progress/linear => }/v-progress-linear.vue (100%) delete mode 100644 app/src/components/v-progress/circular/index.ts delete mode 100644 app/src/components/v-progress/circular/readme.md delete mode 100644 app/src/components/v-progress/linear/index.ts delete mode 100644 app/src/components/v-progress/linear/readme.md rename app/src/components/{v-radio => }/v-radio.vue (100%) delete mode 100644 app/src/components/v-radio/index.ts delete mode 100644 app/src/components/v-select/index.ts rename app/src/components/{v-sheet => }/v-sheet.vue (100%) delete mode 100644 app/src/components/v-sheet/index.ts rename app/src/components/{v-skeleton-loader => }/v-skeleton-loader.vue (100%) delete mode 100644 app/src/components/v-skeleton-loader/index.ts rename app/src/components/{v-slider => }/v-slider.vue (100%) delete mode 100644 app/src/components/v-slider/index.ts rename app/src/components/{v-switch => }/v-switch.vue (100%) delete mode 100644 app/src/components/v-switch/index.ts rename app/src/components/{v-tabs/v-tab-item => }/v-tab-item.vue (87%) rename app/src/components/{v-tabs/v-tab => }/v-tab.vue (96%) delete mode 100644 app/src/components/v-table/index.ts rename app/src/components/{v-tabs/v-tabs-items => }/v-tabs-items.vue (100%) rename app/src/components/{v-tabs => }/v-tabs.vue (95%) delete mode 100644 app/src/components/v-tabs/index.ts delete mode 100644 app/src/components/v-tabs/v-tab-item/index.ts delete mode 100644 app/src/components/v-tabs/v-tab/index.ts delete mode 100644 app/src/components/v-tabs/v-tabs-items/index.ts rename app/src/components/{v-textarea => }/v-textarea.vue (100%) delete mode 100644 app/src/components/v-textarea/index.ts rename app/src/components/{v-upload => }/v-upload.vue (98%) delete mode 100644 app/src/components/v-upload/index.ts delete mode 100644 app/src/composables/groupable/index.ts delete mode 100644 app/src/composables/groupable/readme.md delete mode 100644 app/src/composables/readme.md delete mode 100644 app/src/composables/size-class/index.ts delete mode 100644 app/src/composables/size-class/readme.md rename app/src/composables/{use-custom-selection => }/use-custom-selection.ts (100%) delete mode 100644 app/src/composables/use-custom-selection/index.ts delete mode 100644 app/src/composables/use-custom-selection/readme.md rename app/src/composables/{use-edits-guard => }/use-edits-guard.ts (100%) delete mode 100644 app/src/composables/use-edits-guard/index.ts rename app/src/composables/{use-element-size => }/use-element-size.ts (92%) delete mode 100644 app/src/composables/use-element-size/index.ts delete mode 100644 app/src/composables/use-element-size/readme.md rename app/src/composables/{use-event-listener => }/use-event-listener.ts (85%) delete mode 100644 app/src/composables/use-event-listener/index.ts delete mode 100644 app/src/composables/use-event-listener/readme.md rename app/src/composables/{use-form-fields => }/use-form-fields.ts (94%) delete mode 100644 app/src/composables/use-form-fields/index.ts rename app/src/composables/{groupable/groupable.ts => use-groupable.ts} (99%) rename app/src/composables/{use-item => }/use-item.ts (98%) delete mode 100644 app/src/composables/use-item/index.ts delete mode 100644 app/src/composables/use-item/readme.md rename app/src/composables/{use-preset => }/use-preset.ts (98%) delete mode 100644 app/src/composables/use-preset/index.ts delete mode 100644 app/src/composables/use-preset/types.ts rename app/src/composables/{use-relation => }/use-relation-m2a.ts (94%) rename app/src/composables/{use-relation => }/use-relation-m2m.ts (92%) rename app/src/composables/{use-relation => }/use-relation-m2o.ts (86%) rename app/src/composables/{use-relation => }/use-relation-multiple.ts (98%) rename app/src/composables/{use-relation => }/use-relation-o2m.ts (88%) rename app/src/composables/{use-relation => }/use-relation-single.ts (97%) delete mode 100644 app/src/composables/use-relation/index.ts delete mode 100644 app/src/composables/use-scroll-distance/index.ts delete mode 100644 app/src/composables/use-scroll-distance/readme.md delete mode 100644 app/src/composables/use-scroll-distance/use-scroll-distance.ts rename app/src/composables/{use-shortcut => }/use-shortcut.ts (98%) delete mode 100644 app/src/composables/use-shortcut/index.ts delete mode 100644 app/src/composables/use-shortcut/readme.md rename app/src/composables/{size-class/size-class.ts => use-size-class.ts} (86%) rename app/src/composables/{use-time-from-now => }/use-time-from-now.ts (67%) delete mode 100644 app/src/composables/use-time-from-now/index.ts delete mode 100644 app/src/composables/use-time-from-now/readme.md rename app/src/composables/{use-title => }/use-title.ts (100%) delete mode 100644 app/src/composables/use-title/index.ts rename app/src/composables/{use-window-size => }/use-window-size.ts (87%) delete mode 100644 app/src/composables/use-window-size/index.ts delete mode 100644 app/src/composables/use-window-size/readme.md rename app/src/directives/{click-outside => }/click-outside.ts (100%) delete mode 100644 app/src/directives/click-outside/index.ts delete mode 100644 app/src/directives/click-outside/readme.md rename app/src/directives/{context-menu => }/context-menu.ts (100%) delete mode 100644 app/src/directives/context-menu/index.ts delete mode 100644 app/src/directives/context-menu/readme.md rename app/src/directives/{focus => }/focus.ts (100%) delete mode 100644 app/src/directives/focus/readme.md delete mode 100644 app/src/directives/readme.md rename app/src/directives/{tooltip => }/tooltip.ts (100%) delete mode 100644 app/src/directives/tooltip/index.ts delete mode 100644 app/src/directives/tooltip/readme.md delete mode 100644 app/src/displays/readme.md delete mode 100644 app/src/lang/readme.md rename app/src/routes/{accept-invite => }/accept-invite.vue (97%) delete mode 100644 app/src/routes/accept-invite/index.ts delete mode 100644 app/src/routes/login/index.ts rename app/src/routes/{logout => }/logout.vue (100%) delete mode 100644 app/src/routes/logout/index.ts rename app/src/routes/{private-not-found => }/private-not-found.vue (100%) delete mode 100644 app/src/routes/private-not-found/index.ts delete mode 100644 app/src/routes/readme.md delete mode 100644 app/src/routes/reset-password/index.ts delete mode 100644 app/src/routes/shared/index.ts rename app/src/routes/{tfa-setup => }/tfa-setup.vue (97%) delete mode 100644 app/src/routes/tfa-setup/index.ts delete mode 100644 app/src/stores/index.ts rename app/src/{components/v-date-picker/flatpickr-overrides.css => styles/lib/_flatpickr.scss} (99%) delete mode 100644 app/src/styles/readme.md rename app/src/{views/private/components/comments-sidebar-detail/types.ts => types/activity.ts} (100%) delete mode 100644 app/src/types/index.ts rename app/src/{views/private/components/revisions-drawer-detail/types.ts => types/revisions.ts} (100%) rename app/src/utils/{adjust-fields-for-displays => }/adjust-fields-for-displays.ts (91%) delete mode 100644 app/src/utils/adjust-fields-for-displays/index.ts rename app/src/utils/{arrays-are-equal => }/arrays-are-equal.ts (76%) delete mode 100644 app/src/utils/arrays-are-equal/index.ts delete mode 100644 app/src/utils/arrays-are-equal/readme.md create mode 100644 app/src/utils/capitalize-first.ts delete mode 100644 app/src/utils/capitalize-first/capitalize-first.ts delete mode 100644 app/src/utils/capitalize-first/index.ts rename app/src/utils/{format-filesize => }/format-filesize.ts (87%) delete mode 100644 app/src/utils/format-filesize/index.ts rename app/src/utils/{get-date-fns-locale/import-date-locale.ts => get-date-fns-locale.ts} (88%) delete mode 100644 app/src/utils/get-date-fns-locale/index.ts rename app/src/utils/{get-fullcalendar-locale/import-calendar-locale.ts => get-fullcalendar-locale.ts} (90%) delete mode 100644 app/src/utils/get-fullcalendar-locale/get-fullcalendar-locale.ts delete mode 100644 app/src/utils/get-fullcalendar-locale/index.ts rename app/src/utils/{get-related-collection => }/get-related-collection.ts (76%) delete mode 100644 app/src/utils/get-related-collection/index.ts rename app/src/utils/{hide-drag-image => }/hide-drag-image.ts (50%) delete mode 100644 app/src/utils/hide-drag-image/index.ts rename app/src/utils/{is-empty => }/is-empty.ts (100%) delete mode 100644 app/src/utils/is-empty/index.ts delete mode 100644 app/src/utils/is-empty/readme.md rename app/src/utils/{color/index.ts => is-hex.ts} (76%) rename app/src/utils/{jwt-payload => }/jwt-payload.ts (80%) delete mode 100644 app/src/utils/jwt-payload/index.ts delete mode 100644 app/src/utils/jwt-payload/readme.md rename app/src/utils/{localized-format-distance-strict => }/localized-format-distance-strict.ts (100%) delete mode 100644 app/src/utils/localized-format-distance-strict/index.ts rename app/src/utils/{localized-format-distance => }/localized-format-distance.ts (100%) delete mode 100644 app/src/utils/localized-format-distance/index.ts create mode 100644 app/src/utils/localized-format.ts delete mode 100644 app/src/utils/localized-format/index.ts delete mode 100644 app/src/utils/localized-format/localized-format.ts delete mode 100644 app/src/utils/readable-mime-type/readable-mime-type.ts rename app/src/utils/{translate-shortcut => }/translate-shortcut.ts (80%) delete mode 100644 app/src/utils/translate-shortcut/index.ts delete mode 100644 app/src/utils/translate-shortcut/readme.md rename app/src/utils/{upload-file => }/upload-file.ts (92%) delete mode 100644 app/src/utils/upload-file/index.ts rename app/src/utils/{upload-files => }/upload-files.ts (85%) delete mode 100644 app/src/utils/upload-files/index.ts rename app/src/views/private/components/{archive-sidebar-detail => }/archive-sidebar-detail.vue (100%) delete mode 100644 app/src/views/private/components/archive-sidebar-detail/index.ts rename app/src/views/private/components/{bookmark-add => }/bookmark-add.vue (100%) delete mode 100644 app/src/views/private/components/bookmark-add/index.ts rename app/src/views/private/components/{comments-sidebar-detail => }/comment-input.vue (99%) rename app/src/views/private/components/{comments-sidebar-detail => }/comment-item-header.vue (100%) rename app/src/views/private/components/{comments-sidebar-detail => }/comment-item.vue (100%) rename app/src/views/private/components/{comments-sidebar-detail => }/comments-sidebar-detail.vue (95%) delete mode 100644 app/src/views/private/components/comments-sidebar-detail/index.ts delete mode 100644 app/src/views/private/components/comments-sidebar-detail/readme.md rename app/src/views/private/components/{docs-wrapper => }/docs-wrapper.vue (100%) delete mode 100644 app/src/views/private/components/docs-wrapper/index.ts rename app/src/views/private/components/{drawer-batch => }/drawer-batch.vue (98%) delete mode 100644 app/src/views/private/components/drawer-batch/index.ts rename app/src/views/private/components/{drawer-collection => }/drawer-collection.vue (98%) delete mode 100644 app/src/views/private/components/drawer-collection/index.ts rename app/src/views/private/components/{drawer-item => }/drawer-item.vue (98%) delete mode 100644 app/src/views/private/components/drawer-item/index.ts rename app/src/views/private/components/{file-lightbox => }/file-lightbox.vue (99%) delete mode 100644 app/src/views/private/components/file-lightbox/index.ts rename app/src/views/private/components/{file-preview => }/file-preview.vue (100%) delete mode 100644 app/src/views/private/components/file-preview/index.ts rename app/src/views/private/components/{folder-picker => }/folder-picker-list-item.vue (100%) rename app/src/views/private/components/{folder-picker => }/folder-picker.vue (100%) rename app/src/views/private/components/{header-bar-actions => }/header-bar-actions.vue (100%) delete mode 100644 app/src/views/private/components/header-bar-actions/index.ts delete mode 100644 app/src/views/private/components/header-bar-actions/readme.md rename app/src/views/private/components/{header-bar => }/header-bar.vue (98%) delete mode 100644 app/src/views/private/components/header-bar/index.ts delete mode 100644 app/src/views/private/components/header-bar/readme.md rename app/src/views/private/components/{image-editor => }/image-editor.vue (100%) delete mode 100644 app/src/views/private/components/image-editor/index.ts rename app/src/views/private/components/{latency-indicator => }/latency-indicator.vue (97%) delete mode 100644 app/src/views/private/components/latency-indicator/index.ts rename app/src/views/private/components/{layout-sidebar-detail => }/layout-sidebar-detail.vue (100%) delete mode 100644 app/src/views/private/components/layout-sidebar-detail/index.ts rename app/src/views/private/components/{module-bar-avatar => }/module-bar-avatar.vue (96%) delete mode 100644 app/src/views/private/components/module-bar-avatar/index.ts delete mode 100644 app/src/views/private/components/module-bar-avatar/readme.md rename app/src/views/private/components/{module-bar-logo => }/module-bar-logo.vue (94%) delete mode 100644 app/src/views/private/components/module-bar-logo/index.ts delete mode 100644 app/src/views/private/components/module-bar-logo/readme.md rename app/src/views/private/components/{notification-dialogs => }/notification-dialogs.vue (93%) delete mode 100644 app/src/views/private/components/notification-dialogs/index.ts rename app/src/views/private/components/{notification-item => }/notification-item.vue (98%) delete mode 100644 app/src/views/private/components/notification-item/index.ts delete mode 100644 app/src/views/private/components/notification-item/readme.md rename app/src/views/private/components/{notifications-group => }/notifications-group.vue (93%) delete mode 100644 app/src/views/private/components/notifications-group/index.ts delete mode 100644 app/src/views/private/components/notifications-group/readme.md rename app/src/views/private/components/{notifications-preview => }/notifications-preview.vue (92%) delete mode 100644 app/src/views/private/components/notifications-preview/index.ts delete mode 100644 app/src/views/private/components/notifications-preview/readme.md rename app/src/views/private/components/{project-info => }/project-info.vue (91%) delete mode 100644 app/src/views/private/components/project-info/index.ts rename app/src/views/private/components/{refresh-sidebar-detail => }/refresh-sidebar-detail.vue (100%) delete mode 100644 app/src/views/private/components/refresh-sidebar-detail/index.ts rename app/src/views/private/components/{render-display => }/render-display.vue (93%) delete mode 100644 app/src/views/private/components/render-display/index.ts delete mode 100644 app/src/views/private/components/render-display/readme.md rename app/src/views/private/components/{render-template => }/render-template.vue (96%) delete mode 100644 app/src/views/private/components/render-template/index.ts rename app/src/views/private/components/{revisions-drawer-detail => }/revision-item.vue (100%) rename app/src/views/private/components/{revisions-drawer-detail => }/revisions-date-group.vue (100%) rename app/src/views/private/components/{revisions-drawer-detail => }/revisions-drawer-detail.vue (100%) delete mode 100644 app/src/views/private/components/revisions-drawer-detail/index.ts delete mode 100644 app/src/views/private/components/revisions-drawer-detail/readme.md rename app/src/views/private/components/{revisions-drawer-detail => }/revisions-drawer-picker.vue (97%) rename app/src/views/private/components/{revisions-drawer-detail => }/revisions-drawer-preview.vue (100%) rename app/src/views/private/components/{revisions-drawer-detail => }/revisions-drawer-updates-change.vue (100%) rename app/src/views/private/components/{revisions-drawer-detail => }/revisions-drawer-updates.vue (98%) rename app/src/views/private/components/{revisions-drawer-detail => }/revisions-drawer.vue (100%) rename app/src/views/private/components/{save-options => }/save-options.vue (97%) delete mode 100644 app/src/views/private/components/save-options/index.ts delete mode 100644 app/src/views/private/components/save-options/readme.md rename app/src/views/private/components/{search-input => }/search-input.vue (100%) delete mode 100644 app/src/views/private/components/search-input/index.ts delete mode 100644 app/src/views/private/components/search-input/readme.md rename app/src/views/private/components/{shares-sidebar-detail => }/share-item.vue (100%) rename app/src/views/private/components/{shares-sidebar-detail => }/shares-sidebar-detail.vue (98%) delete mode 100644 app/src/views/private/components/shares-sidebar-detail/index.ts rename app/src/views/private/components/{sidebar-button => }/sidebar-button.vue (96%) delete mode 100644 app/src/views/private/components/sidebar-button/index.ts delete mode 100644 app/src/views/private/components/sidebar-button/readme.md rename app/src/views/private/components/{sidebar-detail-group => }/sidebar-detail-group.vue (100%) delete mode 100644 app/src/views/private/components/sidebar-detail-group/index.ts delete mode 100644 app/src/views/private/components/sidebar-detail-group/readme.md rename app/src/views/private/components/{sidebar-detail => }/sidebar-detail.vue (97%) delete mode 100644 app/src/views/private/components/sidebar-detail/index.ts delete mode 100644 app/src/views/private/components/sidebar-detail/readme.md rename app/src/views/private/components/{user-popover => }/user-popover.vue (100%) delete mode 100644 app/src/views/private/components/user-popover/index.ts rename app/src/views/private/components/{users-invite => }/users-invite.vue (98%) delete mode 100644 app/src/views/private/components/users-invite/index.ts rename app/src/views/private/components/{value-null => }/value-null.vue (100%) delete mode 100644 app/src/views/private/components/value-null/index.ts diff --git a/app/src/api.ts b/app/src/api.ts index 174e75ca1c..23c9a46ee6 100644 --- a/app/src/api.ts +++ b/app/src/api.ts @@ -1,5 +1,5 @@ import { logout, LogoutReason, refresh } from '@/auth'; -import { useRequestsStore } from '@/stores/'; +import { useRequestsStore } from '@/stores/requests'; import { getRootPath } from '@/utils/get-root-path'; import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'; import { addQueryToPath } from './utils/add-query-to-path'; diff --git a/app/src/app.vue b/app/src/app.vue index b20d92cad5..b0836d0e1a 100644 --- a/app/src/app.vue +++ b/app/src/app.vue @@ -23,11 +23,13 @@ - - -``` - -## Sizes - -The circular progress component supports the following sizes through the use of props: - -- x-small -- small -- (default) -- large -- x-large - -```html - - - - - -``` - -## Props - -| Prop | Description | Default | -| --------------- | ------------------------------ | ------- | -| `value` | The percentage value | `0` | -| `indeterminate` | Displays the loading animation | `false` | -| `x-small` | Render extra small | `false` | -| `small` | Render small | `false` | -| `large` | Render large | `false` | -| `x-large` | Render extra large | `false` | - -## Slots - -| Slot | Description | Data | -| --------- | ------------------------------------ | ---- | -| _default_ | Rendered in the center of the circle | -- | - -## Events - -n/a - -## CSS Variables - -| Variable | Default | -| ---------------------------------------- | ---------------------------------------- | -| `--v-progress-circular-color` | `var(--loading-background-color-accent)` | -| `--v-progress-circular-background-color` | `var(--loading-background-color)` | -| `--v-progress-circular-transition` | `400ms` | -| `--v-progress-circular-speed` | `1s` | -| `--v-progress-circular-size` | `28px` | -| `--v-progress-circular-line-size` | `3px` | diff --git a/app/src/components/v-progress/linear/index.ts b/app/src/components/v-progress/linear/index.ts deleted file mode 100644 index 348de049d4..0000000000 --- a/app/src/components/v-progress/linear/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import VProgressLinear from './v-progress-linear.vue'; - -export { VProgressLinear }; -export default VProgressLinear; diff --git a/app/src/components/v-progress/linear/readme.md b/app/src/components/v-progress/linear/readme.md deleted file mode 100644 index bdba50edf3..0000000000 --- a/app/src/components/v-progress/linear/readme.md +++ /dev/null @@ -1,55 +0,0 @@ -# Progress (Linear) - -```html - -``` - -## Colors - -The linear progress component supports colors. Colors can be changed via the css variables `--v-progress-linear-color` -and `--v-progress-linear-background-color` - -```html - - -``` - -## Indeterminate - -The progress indicator can be rendered in indeterminate mode by passing the `indeterminate` prop. Use this when it's -unclear when the progress will be done. - -## Props - -| Prop | Description | Default | -| --------------- | ------------------------------------------------------ | ------- | -| `absolute` | Applies `position: absolute` | `false` | -| `bottom` | Align the progress bar to the bottom | `false` | -| `fixed` | Applies `position: fixed;` to the element | `false` | -| `indeterminate` | Animates the bar, use when loading progress is unknown | `false` | -| `rounded` | Add a border radius to the bar | `false` | -| `top` | Align progress bar to the top of the parent container | `false` | -| `value` | Percentage value for current progress | `0` | - -## Events - -n/a - -## Slots - -| Slots | Description | Value | -| --------- | ----------- | ----- | -| _default_ | | -- | - -## CSS Variables - -| Variable | Default | -| -------------------------------------- | -------------------------- | -| `--v-progress-linear-height` | `4px` | -| `--v-progress-linear-color` | `var(--foreground-normal)` | -| `--v-progress-linear-background-color` | `var(--border-normal)` | diff --git a/app/src/components/v-radio/v-radio.vue b/app/src/components/v-radio.vue similarity index 100% rename from app/src/components/v-radio/v-radio.vue rename to app/src/components/v-radio.vue diff --git a/app/src/components/v-radio/index.ts b/app/src/components/v-radio/index.ts deleted file mode 100644 index 755279ee90..0000000000 --- a/app/src/components/v-radio/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import VRadio from './v-radio.vue'; - -export { VRadio }; -export default VRadio; diff --git a/app/src/components/v-select/index.ts b/app/src/components/v-select/index.ts deleted file mode 100644 index e4cef8f144..0000000000 --- a/app/src/components/v-select/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import VSelect from './v-select.vue'; - -export { VSelect }; -export default VSelect; diff --git a/app/src/components/v-sheet/v-sheet.vue b/app/src/components/v-sheet.vue similarity index 100% rename from app/src/components/v-sheet/v-sheet.vue rename to app/src/components/v-sheet.vue diff --git a/app/src/components/v-sheet/index.ts b/app/src/components/v-sheet/index.ts deleted file mode 100644 index d8f1b19758..0000000000 --- a/app/src/components/v-sheet/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import VSheet from './v-sheet.vue'; - -export { VSheet }; -export default VSheet; diff --git a/app/src/components/v-skeleton-loader/v-skeleton-loader.vue b/app/src/components/v-skeleton-loader.vue similarity index 100% rename from app/src/components/v-skeleton-loader/v-skeleton-loader.vue rename to app/src/components/v-skeleton-loader.vue diff --git a/app/src/components/v-skeleton-loader/index.ts b/app/src/components/v-skeleton-loader/index.ts deleted file mode 100644 index 7f97a751d0..0000000000 --- a/app/src/components/v-skeleton-loader/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import VSkeletonLoader from './v-skeleton-loader.vue'; - -export { VSkeletonLoader }; -export default VSkeletonLoader; diff --git a/app/src/components/v-slider/v-slider.vue b/app/src/components/v-slider.vue similarity index 100% rename from app/src/components/v-slider/v-slider.vue rename to app/src/components/v-slider.vue diff --git a/app/src/components/v-slider/index.ts b/app/src/components/v-slider/index.ts deleted file mode 100644 index 2aba9554cd..0000000000 --- a/app/src/components/v-slider/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import VSlider from './v-slider.vue'; - -export { VSlider }; -export default VSlider; diff --git a/app/src/components/v-switch/v-switch.vue b/app/src/components/v-switch.vue similarity index 100% rename from app/src/components/v-switch/v-switch.vue rename to app/src/components/v-switch.vue diff --git a/app/src/components/v-switch/index.ts b/app/src/components/v-switch/index.ts deleted file mode 100644 index 69b3a8107d..0000000000 --- a/app/src/components/v-switch/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import VSwitch from './v-switch.vue'; - -export { VSwitch }; -export default VSwitch; diff --git a/app/src/components/v-tabs/v-tab-item/v-tab-item.vue b/app/src/components/v-tab-item.vue similarity index 87% rename from app/src/components/v-tabs/v-tab-item/v-tab-item.vue rename to app/src/components/v-tab-item.vue index bab1f82666..00e3f8cf56 100644 --- a/app/src/components/v-tabs/v-tab-item/v-tab-item.vue +++ b/app/src/components/v-tab-item.vue @@ -6,7 +6,7 @@ -``` diff --git a/app/src/composables/use-event-listener/use-event-listener.ts b/app/src/composables/use-event-listener.ts similarity index 85% rename from app/src/composables/use-event-listener/use-event-listener.ts rename to app/src/composables/use-event-listener.ts index 386516c8ea..dae7bf3e78 100644 --- a/app/src/composables/use-event-listener/use-event-listener.ts +++ b/app/src/composables/use-event-listener.ts @@ -1,6 +1,6 @@ import { onMounted, onBeforeUnmount, Ref, isRef } from 'vue'; -export default function useEventListener( +export function useEventListener( target: T | Ref, type: string, handler: (this: T, evt: E) => void, diff --git a/app/src/composables/use-event-listener/index.ts b/app/src/composables/use-event-listener/index.ts deleted file mode 100644 index d753738fd3..0000000000 --- a/app/src/composables/use-event-listener/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import useEventListener from './use-event-listener'; - -export { useEventListener }; -export default useEventListener; diff --git a/app/src/composables/use-event-listener/readme.md b/app/src/composables/use-event-listener/readme.md deleted file mode 100644 index ee4db4f539..0000000000 --- a/app/src/composables/use-event-listener/readme.md +++ /dev/null @@ -1,30 +0,0 @@ -# `useEventListener` - -```ts -function useEventListener( - target: HTMLElement, - type: string, - handler: (event: Event) => void, - options: AddEventListenerOptions -): void; -``` - -Can be used to attach an event listener to any DOM element that will automatically be attached / cleaned up whenever the -component mounts / unmounts. - -## Usage - -```js -import { defineComponent } from 'vue'; -import { useEventListener } from '@/composables/use-event-listener'; - -export default defineComponent({ - setup(props) { - useEventListener(document.querySelector('#example'), 'click', onExampleClick); - - function onExampleClick(event) { - // ... - } - }, -}); -``` diff --git a/app/src/composables/use-field-tree.ts b/app/src/composables/use-field-tree.ts index 54c8b956ec..080ce6b0e0 100644 --- a/app/src/composables/use-field-tree.ts +++ b/app/src/composables/use-field-tree.ts @@ -1,4 +1,5 @@ -import { useFieldsStore, useRelationsStore } from '@/stores/'; +import { useFieldsStore } from '@/stores/fields'; +import { useRelationsStore } from '@/stores/relations'; import { Field, Relation, Type } from '@directus/shared/types'; import { getRelationType } from '@directus/shared/utils'; import { isNil } from 'lodash'; diff --git a/app/src/composables/use-folders.ts b/app/src/composables/use-folders.ts index e52fb88fc1..56073f87ab 100644 --- a/app/src/composables/use-folders.ts +++ b/app/src/composables/use-folders.ts @@ -30,7 +30,7 @@ let openFolders: Ref | null = null; let error: Ref | null = null; -export default function useFolders(): UsableFolders { +export function useFolders(): UsableFolders { if (loading === null) loading = ref(false); if (folders === null) folders = ref(null); if (nestedFolders === null) nestedFolders = ref(null); diff --git a/app/src/composables/use-form-fields/use-form-fields.ts b/app/src/composables/use-form-fields.ts similarity index 94% rename from app/src/composables/use-form-fields/use-form-fields.ts rename to app/src/composables/use-form-fields.ts index a29fe38673..afe5d1d872 100644 --- a/app/src/composables/use-form-fields/use-form-fields.ts +++ b/app/src/composables/use-form-fields.ts @@ -6,7 +6,7 @@ import { cloneDeep, orderBy } from 'lodash'; import { computed, ComputedRef, Ref } from 'vue'; import { translate } from '@/utils/translate-object-values'; -export default function useFormFields(fields: Ref): { formFields: ComputedRef } { +export function useFormFields(fields: Ref): { formFields: ComputedRef } { const formFields = computed(() => { let formFields = cloneDeep(fields.value); diff --git a/app/src/composables/use-form-fields/index.ts b/app/src/composables/use-form-fields/index.ts deleted file mode 100644 index ede96c2125..0000000000 --- a/app/src/composables/use-form-fields/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import useFormFields from './use-form-fields'; - -export { useFormFields }; -export default useFormFields; diff --git a/app/src/composables/groupable/groupable.ts b/app/src/composables/use-groupable.ts similarity index 99% rename from app/src/composables/groupable/groupable.ts rename to app/src/composables/use-groupable.ts index 413c310784..4a7235cc44 100644 --- a/app/src/composables/groupable/groupable.ts +++ b/app/src/composables/use-groupable.ts @@ -1,4 +1,4 @@ -import { isEmpty, notEmpty } from '@/utils/is-empty/'; +import { isEmpty, notEmpty } from '@/utils/is-empty'; import { isEqual } from 'lodash'; import { computed, inject, nextTick, onBeforeUnmount, provide, ref, shallowRef, Ref, watch } from 'vue'; diff --git a/app/src/composables/use-item/use-item.ts b/app/src/composables/use-item.ts similarity index 98% rename from app/src/composables/use-item/use-item.ts rename to app/src/composables/use-item.ts index fd0964b562..6f6e214e56 100644 --- a/app/src/composables/use-item/use-item.ts +++ b/app/src/composables/use-item.ts @@ -1,8 +1,9 @@ import api from '@/api'; import { VALIDATION_TYPES } from '@/constants'; import { i18n } from '@/lang'; -import { useFieldsStore, useRelationsStore } from '@/stores/'; -import { APIError } from '@/types'; +import { useFieldsStore } from '@/stores/fields'; +import { useRelationsStore } from '@/stores/relations'; +import { APIError } from '@/types/error'; import { notify } from '@/utils/notify'; import { translate } from '@/utils/translate-object-values'; import { unexpectedError } from '@/utils/unexpected-error'; @@ -12,7 +13,7 @@ import { getEndpoint } from '@directus/shared/utils'; import { AxiosResponse } from 'axios'; import { merge } from 'lodash'; import { computed, ComputedRef, Ref, ref, watch } from 'vue'; -import { usePermissions } from '../use-permissions'; +import { usePermissions } from './use-permissions'; import { Field, Relation } from '@directus/shared/types'; type UsableItem = { diff --git a/app/src/composables/use-item/index.ts b/app/src/composables/use-item/index.ts deleted file mode 100644 index b17d753256..0000000000 --- a/app/src/composables/use-item/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { useItem } from './use-item'; - -export { useItem }; -export default useItem; diff --git a/app/src/composables/use-item/readme.md b/app/src/composables/use-item/readme.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/app/src/composables/use-local-storage.ts b/app/src/composables/use-local-storage.ts index e73acee620..6f7c33d7e4 100644 --- a/app/src/composables/use-local-storage.ts +++ b/app/src/composables/use-local-storage.ts @@ -1,6 +1,6 @@ import { ref, watch } from 'vue'; -export default function useLocalStorage(key: string) { +export function useLocalStorage(key: string) { const internalKey = `directus-${key}`; const data = ref(null); diff --git a/app/src/composables/use-m2m.ts b/app/src/composables/use-m2m.ts index 6ef2ca869e..eea1898e7f 100644 --- a/app/src/composables/use-m2m.ts +++ b/app/src/composables/use-m2m.ts @@ -1,7 +1,8 @@ import { useCollection } from '@directus/shared/composables'; -import { useCollectionsStore, useRelationsStore } from '@/stores/'; +import { useCollectionsStore } from '@/stores/collections'; +import { useRelationsStore } from '@/stores/relations'; import { Field, Relation } from '@directus/shared/types'; -import { Collection } from '@/types'; +import { Collection } from '@/types/collections'; import { computed, ComputedRef, Ref } from 'vue'; export type RelationInfo = { @@ -25,7 +26,7 @@ type UsableRelation = { relationFields: ComputedRef; }; -export default function useRelation(collection: Ref, field: Ref): UsableRelation { +export function useRelation(collection: Ref, field: Ref): UsableRelation { const relationsStore = useRelationsStore(); const collectionsStore = useCollectionsStore(); diff --git a/app/src/composables/use-permissions.ts b/app/src/composables/use-permissions.ts index 2f33b22e97..8f9b5fa885 100644 --- a/app/src/composables/use-permissions.ts +++ b/app/src/composables/use-permissions.ts @@ -1,4 +1,5 @@ -import { usePermissionsStore, useUserStore } from '@/stores'; +import { usePermissionsStore } from '@/stores/permissions'; +import { useUserStore } from '@/stores/user'; import { Field } from '@directus/shared/types'; import { computed, ComputedRef, Ref } from 'vue'; import { cloneDeep } from 'lodash'; diff --git a/app/src/composables/use-preset/use-preset.ts b/app/src/composables/use-preset.ts similarity index 98% rename from app/src/composables/use-preset/use-preset.ts rename to app/src/composables/use-preset.ts index 1a77bb9b08..db85fd8cb8 100644 --- a/app/src/composables/use-preset/use-preset.ts +++ b/app/src/composables/use-preset.ts @@ -1,4 +1,5 @@ -import { usePresetsStore, useUserStore } from '@/stores'; +import { usePresetsStore } from '@/stores/presets'; +import { useUserStore } from '@/stores/user'; import { translate } from '@/utils/translate-literal'; import { Filter, Preset } from '@directus/shared/types'; import { assign, debounce, isEqual } from 'lodash'; diff --git a/app/src/composables/use-preset/index.ts b/app/src/composables/use-preset/index.ts deleted file mode 100644 index 9596abf57b..0000000000 --- a/app/src/composables/use-preset/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { usePreset } from './use-preset'; - -export { usePreset }; -export default usePreset; diff --git a/app/src/composables/use-preset/types.ts b/app/src/composables/use-preset/types.ts deleted file mode 100644 index a25965fcce..0000000000 --- a/app/src/composables/use-preset/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { Filter } from '@directus/shared/types'; - -export type Preset = { - id: number; - collection: string; - filter: Filter | null; - role: number | null; - search: string | null; - title: string | null; - user: number | null; - - layout_options: Record; - - layout_query: Record; - layout: string | null; -}; diff --git a/app/src/composables/use-relation/use-relation-m2a.ts b/app/src/composables/use-relation-m2a.ts similarity index 94% rename from app/src/composables/use-relation/use-relation-m2a.ts rename to app/src/composables/use-relation-m2a.ts index 346b7a5a02..822cd3d442 100644 --- a/app/src/composables/use-relation/use-relation-m2a.ts +++ b/app/src/composables/use-relation-m2a.ts @@ -1,5 +1,7 @@ -import { useCollectionsStore, useFieldsStore, useRelationsStore } from '@/stores'; -import { Collection } from '@/types'; +import { useCollectionsStore } from '@/stores/collections'; +import { useFieldsStore } from '@/stores/fields'; +import { useRelationsStore } from '@/stores/relations'; +import { Collection } from '@/types/collections'; import { Field, Relation } from '@directus/shared/types'; import { computed, Ref } from 'vue'; diff --git a/app/src/composables/use-relation/use-relation-m2m.ts b/app/src/composables/use-relation-m2m.ts similarity index 92% rename from app/src/composables/use-relation/use-relation-m2m.ts rename to app/src/composables/use-relation-m2m.ts index 57d4da690e..adf6fbf966 100644 --- a/app/src/composables/use-relation/use-relation-m2m.ts +++ b/app/src/composables/use-relation-m2m.ts @@ -1,6 +1,8 @@ -import { useCollectionsStore, useFieldsStore, useRelationsStore } from '@/stores'; +import { useCollectionsStore } from '@/stores/collections'; +import { useFieldsStore } from '@/stores/fields'; +import { useRelationsStore } from '@/stores/relations'; import { Field, Relation } from '@directus/shared/types'; -import { Collection } from '@/types'; +import { Collection } from '@/types/collections'; import { computed, Ref } from 'vue'; export type RelationM2M = { diff --git a/app/src/composables/use-relation/use-relation-m2o.ts b/app/src/composables/use-relation-m2o.ts similarity index 86% rename from app/src/composables/use-relation/use-relation-m2o.ts rename to app/src/composables/use-relation-m2o.ts index 7189668192..c06583903a 100644 --- a/app/src/composables/use-relation/use-relation-m2o.ts +++ b/app/src/composables/use-relation-m2o.ts @@ -1,6 +1,8 @@ -import { useCollectionsStore, useFieldsStore, useRelationsStore } from '@/stores'; +import { useCollectionsStore } from '@/stores/collections'; +import { useFieldsStore } from '@/stores/fields'; +import { useRelationsStore } from '@/stores/relations'; import { Field, Relation } from '@directus/shared/types'; -import { Collection } from '@/types'; +import { Collection } from '@/types/collections'; import { computed, Ref } from 'vue'; export type RelationM2O = { diff --git a/app/src/composables/use-relation/use-relation-multiple.ts b/app/src/composables/use-relation-multiple.ts similarity index 98% rename from app/src/composables/use-relation/use-relation-multiple.ts rename to app/src/composables/use-relation-multiple.ts index 1c5480ccf6..af5a6b1f86 100644 --- a/app/src/composables/use-relation/use-relation-multiple.ts +++ b/app/src/composables/use-relation-multiple.ts @@ -3,7 +3,9 @@ import { getEndpoint } from '@directus/shared/utils'; import { unexpectedError } from '@/utils/unexpected-error'; import { clamp, cloneDeep, isEqual, merge, isPlainObject } from 'lodash'; import { computed, ref, Ref, watch } from 'vue'; -import { RelationM2A, RelationM2M, RelationO2M } from '@/composables/use-relation'; +import { RelationM2A } from '@/composables/use-relation-m2a'; +import { RelationM2M } from '@/composables/use-relation-m2m'; +import { RelationO2M } from '@/composables/use-relation-o2m'; export type RelationQueryMultiple = { page: number; @@ -18,7 +20,7 @@ export type DisplayItem = { $edits?: number; }; -export type Item = { +export type ChangesItem = { create: Record[]; update: Record[]; delete: (string | number)[]; @@ -36,7 +38,7 @@ export function useRelationMultiple( const { cleanItem, getPage, localDelete } = useUtil(); - const _value = computed({ + const _value = computed({ get() { if (!value.value || Array.isArray(value.value)) return { @@ -44,7 +46,7 @@ export function useRelationMultiple( update: [], delete: [], }; - return value.value as Item; + return value.value as ChangesItem; }, set(newValue) { value.value = newValue; diff --git a/app/src/composables/use-relation/use-relation-o2m.ts b/app/src/composables/use-relation-o2m.ts similarity index 88% rename from app/src/composables/use-relation/use-relation-o2m.ts rename to app/src/composables/use-relation-o2m.ts index 6ec95c63a1..67d394a839 100644 --- a/app/src/composables/use-relation/use-relation-o2m.ts +++ b/app/src/composables/use-relation-o2m.ts @@ -1,6 +1,8 @@ -import { useCollectionsStore, useFieldsStore, useRelationsStore } from '@/stores'; +import { useCollectionsStore } from '@/stores/collections'; +import { useFieldsStore } from '@/stores/fields'; +import { useRelationsStore } from '@/stores/relations'; import { Field, Relation } from '@directus/shared/types'; -import { Collection } from '@/types'; +import { Collection } from '@/types/collections'; import { computed, Ref } from 'vue'; export type RelationO2M = { diff --git a/app/src/composables/use-relation/use-relation-single.ts b/app/src/composables/use-relation-single.ts similarity index 97% rename from app/src/composables/use-relation/use-relation-single.ts rename to app/src/composables/use-relation-single.ts index a1be2c35f9..7653351be4 100644 --- a/app/src/composables/use-relation/use-relation-single.ts +++ b/app/src/composables/use-relation-single.ts @@ -3,7 +3,7 @@ import { getEndpoint } from '@directus/shared/utils'; import { unexpectedError } from '@/utils/unexpected-error'; import { merge } from 'lodash'; import { ref, Ref, watch } from 'vue'; -import { RelationM2O } from '@/composables/use-relation'; +import { RelationM2O } from '@/composables/use-relation-m2o'; export type RelationQuerySingle = { fields: string[]; diff --git a/app/src/composables/use-relation/index.ts b/app/src/composables/use-relation/index.ts deleted file mode 100644 index c0787c56a7..0000000000 --- a/app/src/composables/use-relation/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { useRelationM2A } from './use-relation-m2a'; -import { useRelationM2M } from './use-relation-m2m'; -import { useRelationM2O } from './use-relation-m2o'; -import { useRelationO2M } from './use-relation-o2m'; -import { useRelationSingle } from './use-relation-single'; -import { useRelationMultiple } from './use-relation-multiple'; - -import type { RelationM2A } from './use-relation-m2a'; -import type { RelationM2M } from './use-relation-m2m'; -import type { RelationM2O } from './use-relation-m2o'; -import type { RelationO2M } from './use-relation-o2m'; -import type { RelationQuerySingle } from './use-relation-single'; -import type { RelationQueryMultiple, DisplayItem, Item as ChangesItem } from './use-relation-multiple'; - -export { - useRelationM2A, - RelationM2A, - RelationM2M, - RelationM2O, - RelationO2M, - DisplayItem, - ChangesItem, - useRelationM2M, - RelationQueryMultiple, - RelationQuerySingle, - useRelationM2O, - useRelationMultiple, - useRelationO2M, - useRelationSingle, -}; diff --git a/app/src/composables/use-scroll-distance/index.ts b/app/src/composables/use-scroll-distance/index.ts deleted file mode 100644 index 435be47f43..0000000000 --- a/app/src/composables/use-scroll-distance/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import useScrollDistance from './use-scroll-distance'; - -export { useScrollDistance }; -export default useScrollDistance; diff --git a/app/src/composables/use-scroll-distance/readme.md b/app/src/composables/use-scroll-distance/readme.md deleted file mode 100644 index baecbd6a41..0000000000 --- a/app/src/composables/use-scroll-distance/readme.md +++ /dev/null @@ -1,41 +0,0 @@ -# `useScrollDistance` - -```ts -function useScrollDistance( - t: T | Ref -): { top: Ref; left: Ref; target: Element }; -``` - -Returns a ref for the top and left scroll positions of the given element. Parameter supports Element, Ref, -Ref, and Ref. - -## Usage - -```html - - - -``` diff --git a/app/src/composables/use-scroll-distance/use-scroll-distance.ts b/app/src/composables/use-scroll-distance/use-scroll-distance.ts deleted file mode 100644 index efeeb81215..0000000000 --- a/app/src/composables/use-scroll-distance/use-scroll-distance.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { throttle } from 'lodash'; -import { ComponentPublicInstance, computed, isRef, onMounted, onUnmounted, ref, Ref, ComputedRef } from 'vue'; - -type UsableScrollDistance = { - top: Ref; - left: Ref; - target: ComputedRef; -}; - -export default function useScrollDistance( - t: T | Ref -): UsableScrollDistance { - const top = ref(); - const left = ref(); - - const onScroll = throttle((event: Event) => { - const target = event.target as Element; - top.value = target.scrollTop; - left.value = target.scrollLeft; - }, 20); - - const target = computed(() => { - const target = isRef(t) ? t.value : t; - - if (target === null) { - return null; - } - - if ('$el' in target) { - return (target as ComponentPublicInstance).$el as Element; - } - - return target as Element; - }); - - onMounted(() => { - target.value?.addEventListener('scroll', onScroll, { passive: true }); - }); - - onUnmounted(() => { - target.value?.removeEventListener('scroll', onScroll); - }); - - return { top, left, target }; -} diff --git a/app/src/composables/use-shortcut/use-shortcut.ts b/app/src/composables/use-shortcut.ts similarity index 98% rename from app/src/composables/use-shortcut/use-shortcut.ts rename to app/src/composables/use-shortcut.ts index 620204fef0..0efc5a8f9d 100644 --- a/app/src/composables/use-shortcut/use-shortcut.ts +++ b/app/src/composables/use-shortcut.ts @@ -17,7 +17,7 @@ document.body.addEventListener('keyup', (event: KeyboardEvent) => { keysdown.clear(); }); -export default function useShortcut( +export function useShortcut( shortcuts: string | string[], handler: ShortcutHandler, reference: Ref | Ref = ref(document.body) diff --git a/app/src/composables/use-shortcut/index.ts b/app/src/composables/use-shortcut/index.ts deleted file mode 100644 index 88ab7e094f..0000000000 --- a/app/src/composables/use-shortcut/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import useShortcut from './use-shortcut'; - -export { useShortcut }; -export default useShortcut; diff --git a/app/src/composables/use-shortcut/readme.md b/app/src/composables/use-shortcut/readme.md deleted file mode 100644 index 3c91912d30..0000000000 --- a/app/src/composables/use-shortcut/readme.md +++ /dev/null @@ -1,27 +0,0 @@ -# `useShortcut` - -```ts -function useShortcut( - shortcut: string | string[], - handler: handler: (evt?: ExtendedKeyboardEvent, combo?: string) => void -): void -``` - -Can be used to attach a global keyboard shortcut to a function. Removes the shortcut once the current component unmounts - -## Usage - -```js -import { defineComponent } from 'vue'; -import { useShortcut } from '@/composables/use-shortcut'; - -export default defineComponent({ - setup(props) { - useShortcut('meta+s', save); - - function save() { - // ... - } - }, -}); -``` diff --git a/app/src/composables/size-class/size-class.ts b/app/src/composables/use-size-class.ts similarity index 86% rename from app/src/composables/size-class/size-class.ts rename to app/src/composables/use-size-class.ts index cb6468c4c3..228ae45983 100644 --- a/app/src/composables/size-class/size-class.ts +++ b/app/src/composables/use-size-class.ts @@ -26,7 +26,7 @@ interface RequiredProps { xLarge: boolean; } -export default function useSizeClass(props: T & RequiredProps): ComputedRef { +export function useSizeClass(props: T & RequiredProps): ComputedRef { const sizeClass = computed(() => { if (props.xSmall) return 'x-small'; if (props.small) return 'small'; diff --git a/app/src/composables/use-system.ts b/app/src/composables/use-system.ts index 2133d2c50e..3a6c862c10 100644 --- a/app/src/composables/use-system.ts +++ b/app/src/composables/use-system.ts @@ -1,6 +1,5 @@ import { provide } from 'vue'; import api from '@/api'; -import * as stores from '@/stores'; import { API_INJECT, EXTENSIONS_INJECT, STORES_INJECT } from '@directus/shared/constants'; import { getInterfaces } from '@/interfaces'; import { getDisplays } from '@/displays'; @@ -8,9 +7,38 @@ import { getLayouts } from '@/layouts'; import { getModules } from '@/modules'; import { getPanels } from '@/panels'; import { getOperations } from '@/operations'; +import { useAppStore } from '@/stores/app'; +import { useCollectionsStore } from '@/stores/collections'; +import { useFieldsStore } from '@/stores/fields'; +import { useInsightsStore } from '@/stores/insights'; +import { useLatencyStore } from '@/stores/latency'; +import { useNotificationsStore } from '@/stores/notifications'; +import { usePermissionsStore } from '@/stores/permissions'; +import { usePresetsStore } from '@/stores/presets'; +import { useRelationsStore } from '@/stores/relations'; +import { useRequestsStore } from '@/stores/requests'; +import { useServerStore } from '@/stores/server'; +import { useSettingsStore } from '@/stores/settings'; +import { useUserStore } from '@/stores/user'; +import { useFlowsStore } from '@/stores/flows'; -export default function useSystem(): void { - provide(STORES_INJECT, stores); +export function useSystem(): void { + provide(STORES_INJECT, { + useAppStore, + useCollectionsStore, + useFieldsStore, + useInsightsStore, + useLatencyStore, + useNotificationsStore, + usePermissionsStore, + usePresetsStore, + useRelationsStore, + useRequestsStore, + useServerStore, + useSettingsStore, + useUserStore, + useFlowsStore, + }); provide(API_INJECT, api); diff --git a/app/src/composables/use-template-data.ts b/app/src/composables/use-template-data.ts index 34f95a8ada..4914dd4a14 100644 --- a/app/src/composables/use-template-data.ts +++ b/app/src/composables/use-template-data.ts @@ -1,5 +1,5 @@ import api from '@/api'; -import { Collection } from '@/types'; +import { Collection } from '@/types/collections'; import { getFieldsFromTemplate } from '@directus/shared/utils'; import { computed, Ref, ref, watch } from 'vue'; @@ -9,10 +9,7 @@ type UsableTemplateData = { error: Ref; }; -export default function useTemplateData( - collection: Ref, - primaryKey: Ref -): UsableTemplateData { +export function useTemplateData(collection: Ref, primaryKey: Ref): UsableTemplateData { const templateData = ref>(); const loading = ref(false); const error = ref(null); diff --git a/app/src/composables/use-tfa-setup.ts b/app/src/composables/use-tfa-setup.ts index 89a3ebd844..a215995117 100644 --- a/app/src/composables/use-tfa-setup.ts +++ b/app/src/composables/use-tfa-setup.ts @@ -2,7 +2,7 @@ import api from '@/api'; import { nanoid } from 'nanoid'; import { onMounted, ref } from 'vue'; import qrcode from 'qrcode'; -import { useUserStore } from '@/stores'; +import { useUserStore } from '@/stores/user'; export function useTFASetup(initialEnabled: boolean) { const loading = ref(false); diff --git a/app/src/composables/use-time-from-now/use-time-from-now.ts b/app/src/composables/use-time-from-now.ts similarity index 67% rename from app/src/composables/use-time-from-now/use-time-from-now.ts rename to app/src/composables/use-time-from-now.ts index 40c124d6a6..47d0606988 100644 --- a/app/src/composables/use-time-from-now/use-time-from-now.ts +++ b/app/src/composables/use-time-from-now.ts @@ -1,7 +1,7 @@ -import localizedFormatDistance from '@/utils/localized-format-distance/'; +import { localizedFormatDistance } from '@/utils/localized-format-distance/'; import { onMounted, onUnmounted, Ref, ref } from 'vue'; -export async function useTimeFromNow(date: Date | number, autoUpdate = 60000): Promise> { +export function useTimeFromNow(date: Date | number, autoUpdate = 60000): Ref { let interval: number; const formatOptions = { @@ -12,7 +12,7 @@ export async function useTimeFromNow(date: Date | number, autoUpdate = 60000): P if (autoUpdate !== 0) { onMounted(() => { - interval = window.setInterval(async () => { + interval = window.setInterval(() => { formattedDate.value = localizedFormatDistance(date, new Date(), formatOptions); }, autoUpdate); }); diff --git a/app/src/composables/use-time-from-now/index.ts b/app/src/composables/use-time-from-now/index.ts deleted file mode 100644 index 1e5c898b5c..0000000000 --- a/app/src/composables/use-time-from-now/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { useTimeFromNow } from './use-time-from-now'; - -export { useTimeFromNow }; -export default useTimeFromNow; diff --git a/app/src/composables/use-time-from-now/readme.md b/app/src/composables/use-time-from-now/readme.md deleted file mode 100644 index 75ea19efb1..0000000000 --- a/app/src/composables/use-time-from-now/readme.md +++ /dev/null @@ -1,21 +0,0 @@ -# `useTimeFromNow` - -```ts -function useTimeFromNow(date: Date | number, autoUpdate: number = 60000): Ref; -``` - -Composable that can be used to create a relative time format that is auto updated every `autoUpdate` milliseconds. - -## Usage - -```js -import { defineComponent } from 'vue'; -import { useTimeFromNow } from '@/composables/use-time-from-now'; - -export default defineComponent({ - setup(props) { - const timeFromNow = useTimeFromNow(Date.now()); - return { timeFromNow }; - }, -}); -``` diff --git a/app/src/composables/use-title/use-title.ts b/app/src/composables/use-title.ts similarity index 100% rename from app/src/composables/use-title/use-title.ts rename to app/src/composables/use-title.ts diff --git a/app/src/composables/use-title/index.ts b/app/src/composables/use-title/index.ts deleted file mode 100644 index 122f3049bb..0000000000 --- a/app/src/composables/use-title/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { useTitle } from './use-title'; - -export { useTitle }; -export default useTitle; diff --git a/app/src/composables/use-translation-strings.ts b/app/src/composables/use-translation-strings.ts index 3704c6f8bd..d61250bbef 100644 --- a/app/src/composables/use-translation-strings.ts +++ b/app/src/composables/use-translation-strings.ts @@ -2,7 +2,7 @@ import { ref, Ref } from 'vue'; import api from '@/api'; import { unexpectedError } from '@/utils/unexpected-error'; import { Language, i18n } from '@/lang'; -import { useUserStore } from '@/stores'; +import { useUserStore } from '@/stores/user'; export type Translation = { language: string; diff --git a/app/src/composables/use-window-size/use-window-size.ts b/app/src/composables/use-window-size.ts similarity index 87% rename from app/src/composables/use-window-size/use-window-size.ts rename to app/src/composables/use-window-size.ts index 5193eb6144..33c3d09281 100644 --- a/app/src/composables/use-window-size/use-window-size.ts +++ b/app/src/composables/use-window-size.ts @@ -5,7 +5,7 @@ type WindowSizeOptions = { throttle: number; }; -export default function useWindowSize(options: WindowSizeOptions = { throttle: 100 }): { +export function useWindowSize(options: WindowSizeOptions = { throttle: 100 }): { width: Ref; height: Ref; } { diff --git a/app/src/composables/use-window-size/index.ts b/app/src/composables/use-window-size/index.ts deleted file mode 100644 index b6fdd674f2..0000000000 --- a/app/src/composables/use-window-size/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import useWindowSize from './use-window-size'; - -export { useWindowSize }; -export default useWindowSize; diff --git a/app/src/composables/use-window-size/readme.md b/app/src/composables/use-window-size/readme.md deleted file mode 100644 index 67a9231b97..0000000000 --- a/app/src/composables/use-window-size/readme.md +++ /dev/null @@ -1,22 +0,0 @@ -# `useWindowSize` - -```ts -function useWindowSize(options: WindowSizeOptions = { throttle: 100 }): { width: Ref; height: Ref }; -``` - -Returns the window's width and height in an object. These values are reactive. - -The optional `options` parameter allows you to set the throttling speed. - -## Usage - -```js -import { defineComponent } from 'vue'; -import { useWindowSize } from '@/composables/use-window-size/'; - -export default defineComponent({ - setup(props) { - const { width, height } = useWindowSize(); - }, -}); -``` diff --git a/app/src/directives/click-outside/click-outside.ts b/app/src/directives/click-outside.ts similarity index 100% rename from app/src/directives/click-outside/click-outside.ts rename to app/src/directives/click-outside.ts diff --git a/app/src/directives/click-outside/index.ts b/app/src/directives/click-outside/index.ts deleted file mode 100644 index d8a51ac39c..0000000000 --- a/app/src/directives/click-outside/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import ClickOutside from './click-outside'; - -export { ClickOutside }; -export default ClickOutside; diff --git a/app/src/directives/click-outside/readme.md b/app/src/directives/click-outside/readme.md deleted file mode 100644 index 2621dc96af..0000000000 --- a/app/src/directives/click-outside/readme.md +++ /dev/null @@ -1,37 +0,0 @@ -# Click Outside - -Adds a handler when clicking outside the element. - -## Usage: - -```html - -``` - -For more control, you can pass an option with the following properties: - -```html - -``` - -### Options - -| Name | Description | Type | Default | -| ------------ | --------------------------------------------------------- | --------------------------- | ----------------- | -| `handler` | Function that is fired when the event is triggered | `(event: Event) => void` | `() => undefined` | -| `middleware` | Function that allows you to dynamically fire the handler. | `(event: Event) => boolean` | `() => true` | -| `events` | Array of individual events that the directive triggers on | `string[]` | `['pointerdown']` | -| `disabled` | Disable the directive completely | `boolean` | `false` | diff --git a/app/src/directives/context-menu/context-menu.ts b/app/src/directives/context-menu.ts similarity index 100% rename from app/src/directives/context-menu/context-menu.ts rename to app/src/directives/context-menu.ts diff --git a/app/src/directives/context-menu/index.ts b/app/src/directives/context-menu/index.ts deleted file mode 100644 index e291c8b125..0000000000 --- a/app/src/directives/context-menu/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import ContextMenu from './context-menu'; - -export { ContextMenu }; -export default ContextMenu; diff --git a/app/src/directives/context-menu/readme.md b/app/src/directives/context-menu/readme.md deleted file mode 100644 index 7170ec7582..0000000000 --- a/app/src/directives/context-menu/readme.md +++ /dev/null @@ -1,18 +0,0 @@ -# Context Menu - -## Usage - -This allows the element to open a context menu with the specified ref. It adds `contextmenu` event (right click) to -activate/open the context menu, and `pointerdown` event on document to deactivate/close when it's not the event target. - -```html - -``` - -Somewhere in the same component: - -```html - - - -``` diff --git a/app/src/directives/focus/focus.ts b/app/src/directives/focus.ts similarity index 100% rename from app/src/directives/focus/focus.ts rename to app/src/directives/focus.ts diff --git a/app/src/directives/focus/readme.md b/app/src/directives/focus/readme.md deleted file mode 100644 index 0c5a2158ca..0000000000 --- a/app/src/directives/focus/readme.md +++ /dev/null @@ -1,17 +0,0 @@ -# Focus - -The focus directive is basically `autofocus`, but works in Vue. Because of the way HTML works, `autofocus` isn't -triggered for DOM elements that are added after first load, which means that `autofocus` basically never works in the -context of the Directus app. That's where you can use `v-focus` instead: - -```html - -``` - -## Value - -You can pass it a boolean value if you need more fine grained control over when focus is set: - -```html - -``` diff --git a/app/src/directives/readme.md b/app/src/directives/readme.md deleted file mode 100644 index 92147936f9..0000000000 --- a/app/src/directives/readme.md +++ /dev/null @@ -1,4 +0,0 @@ -# Directives - -Directives are functions that are available on Vue components in templates. For example `v-focus` or -`v-tooltip="'Hello world!'` diff --git a/app/src/directives/register.ts b/app/src/directives/register.ts index 745d143cb8..61e9049703 100644 --- a/app/src/directives/register.ts +++ b/app/src/directives/register.ts @@ -1,8 +1,8 @@ import { App } from 'vue'; -import ClickOutside from './click-outside/click-outside'; -import ContextMenu from './context-menu/context-menu'; -import Focus from './focus/focus'; -import Tooltip from './tooltip/tooltip'; +import ClickOutside from './click-outside'; +import ContextMenu from './context-menu'; +import Focus from './focus'; +import Tooltip from './tooltip'; import Markdown from './markdown'; export function registerDirectives(app: App): void { diff --git a/app/src/directives/tooltip/tooltip.ts b/app/src/directives/tooltip.ts similarity index 100% rename from app/src/directives/tooltip/tooltip.ts rename to app/src/directives/tooltip.ts diff --git a/app/src/directives/tooltip/index.ts b/app/src/directives/tooltip/index.ts deleted file mode 100644 index bba5e6fcfa..0000000000 --- a/app/src/directives/tooltip/index.ts +++ /dev/null @@ -1,4 +0,0 @@ -import Tooltip from './tooltip'; - -export { Tooltip }; -export default Tooltip; diff --git a/app/src/directives/tooltip/readme.md b/app/src/directives/tooltip/readme.md deleted file mode 100644 index 107fb2e931..0000000000 --- a/app/src/directives/tooltip/readme.md +++ /dev/null @@ -1,22 +0,0 @@ -# Tooltip - -The tooltip can display more detailed information about an element to clarify its use. - -```html -This is a button -``` - -## Options - -The tooltip is displayed at the bottom of an element by default. - -| Option | Description | -| ---------- | ----------------------------------------------- | -| `left` | Display the tooltip to the left of the element | -| `right` | Display the tooltip to the right of the element | -| `top` | Display the tooltip on top of the element | -| `bottom` | Display the tooltip on bottom of the element | -| `start` | Places the tooltip at the start of the element | -| `end` | Places the tooltip at the end of the element | -| `instant` | Shows the tooltip instantly on hover | -| `inverted` | Inverts all colors | diff --git a/app/src/displays/collection/index.ts b/app/src/displays/collection/index.ts index 54baa9c1ca..4b7ca895fe 100644 --- a/app/src/displays/collection/index.ts +++ b/app/src/displays/collection/index.ts @@ -1,6 +1,6 @@ import { defineDisplay } from '@directus/shared/utils'; import DisplayCollection from './collection.vue'; -import { useCollectionsStore } from '@/stores'; +import { useCollectionsStore } from '@/stores/collections'; export default defineDisplay({ id: 'collection', diff --git a/app/src/displays/color/color.vue b/app/src/displays/color/color.vue index 809a11ad22..beb3e12a7c 100644 --- a/app/src/displays/color/color.vue +++ b/app/src/displays/color/color.vue @@ -8,7 +8,7 @@