@antelopejs/dms 0.7.5 → 0.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +21 -0
- package/dist/implementations/dms-base/export-jobs.d.ts +4 -1
- package/dist/implementations/dms-base/export-jobs.js +10 -6
- package/dist/implementations/dms-base/export-jobs.js.map +1 -1
- package/dist/implementations/dms-base/search-route.js +20 -11
- package/dist/implementations/dms-base/search-route.js.map +1 -1
- package/dist/test/attachment-host/capabilities.d.ts +2 -0
- package/dist/test/attachment-host/capabilities.js +11 -0
- package/dist/test/attachment-host/capabilities.js.map +1 -1
- package/dist/test/integration/table-view-capabilities.test.js +23 -5
- package/dist/test/integration/table-view-capabilities.test.js.map +1 -1
- package/dist/test/unit/interfaces/dms-base/data-types/field-types.test.js +29 -0
- package/dist/test/unit/interfaces/dms-base/data-types/field-types.test.js.map +1 -1
- package/dist/test/unit/interfaces/dms-base/display-blocks-catalog.test.js +14 -0
- package/dist/test/unit/interfaces/dms-base/display-blocks-catalog.test.js.map +1 -1
- package/dist/test/unit/interfaces/dms-base/export-jobs-binding.test.d.ts +1 -0
- package/dist/test/unit/interfaces/dms-base/export-jobs-binding.test.js +49 -0
- package/dist/test/unit/interfaces/dms-base/export-jobs-binding.test.js.map +1 -0
- package/dist/test/unit/interfaces/dms-base/table-view-hidden-columns.test.d.ts +1 -0
- package/dist/test/unit/interfaces/dms-base/table-view-hidden-columns.test.js +105 -0
- package/dist/test/unit/interfaces/dms-base/table-view-hidden-columns.test.js.map +1 -0
- package/dist/test/unit/request-tenant-guards.test.js +38 -0
- package/dist/test/unit/request-tenant-guards.test.js.map +1 -1
- package/frontend-vue/layers/dms-auth/app/custom-pages/auth/accounts.vue +9 -3
- package/frontend-vue/layers/dms-core/i18n/locales/core-en-GB.json +6 -0
- package/frontend-vue/layers/dms-core/i18n/locales/core-fr-FR.json +6 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/CommandPaletteAssistantAnswer.vue +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/DashboardHeader.vue +2 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/Footer.vue +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/layout/PageSkeleton.vue +13 -4
- package/frontend-vue/layers/dms-layout/app/build/components/layout/RolePreviewBar.vue +9 -3
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/members/MemberRolePicker.vue +5 -1
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/profile/ProfilePersonalInfo.vue +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/profile/ProfileSummaryRow.vue +4 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/roles/RoleEditor.vue +1 -1
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/security/SecurityEmail.vue +4 -1
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/security/SecurityPassword.vue +4 -1
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/security/SecuritySessions.vue +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/security/SecurityTwoFactor.vue +19 -4
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/theme/AppearanceDeveloper.vue +1 -0
- package/frontend-vue/layers/dms-layout/app/build/components/pages/settings/theme/CssVariablesList.vue +6 -3
- package/frontend-vue/layers/dms-layout/app/custom-pages/modules.vue +20 -5
- package/frontend-vue/layers/dms-ui/app/build/components/chart/internal/ChartSkeleton.vue +4 -0
- package/frontend-vue/layers/dms-ui/app/build/components/containers/drawer/DynamicDrawer.vue +10 -2
- package/frontend-vue/layers/dms-ui/app/build/components/containers/modal/DynamicModal.vue +7 -2
- package/frontend-vue/layers/dms-ui/app/build/components/form/FormSectionNav.vue +87 -40
- package/frontend-vue/layers/dms-ui/app/build/components/skeleton/RowSkeleton.vue +8 -1
- package/frontend-vue/layers/dms-ui/app/build/components/stat/StatCell.vue +54 -13
- package/frontend-vue/layers/dms-ui/app/build/components/table/Pagination.vue +9 -2
- package/frontend-vue/layers/dms-ui/app/build/components/table/Table.vue +8 -0
- package/frontend-vue/layers/dms-ui/app/build/components/table/Tabs.vue +1 -0
- package/frontend-vue/layers/dms-ui/app/build/components/table/Views.vue +1 -0
- package/frontend-vue/layers/dms-ui/app/build/components/table-view/CardGridSkeleton.vue +22 -5
- package/frontend-vue/layers/dms-ui/app/build/components/table-view/ExpandedRowDetail.vue +1 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/data-types/registerDefaults.ts +3 -1
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formFooter.ts +3 -2
- package/frontend-vue/layers/dms-ui/app/build/composables/form/formSections.ts +25 -0
- package/frontend-vue/layers/dms-ui/app/build/composables/table-view/useTableViewRowActions.ts +20 -2
- package/frontend-vue/layers/dms-ui/app/build/utils/characterCount.ts +8 -0
- package/frontend-vue/layers/dms-ui/app/components/activity-feed/ActivityFeed.vue +4 -1
- package/frontend-vue/layers/dms-ui/app/components/blocks/CodeBlock.vue +3 -0
- package/frontend-vue/layers/dms-ui/app/components/blocks/NavCardGridBlock.vue +13 -5
- package/frontend-vue/layers/dms-ui/app/components/card/NavCard.vue +7 -1
- package/frontend-vue/layers/dms-ui/app/components/chart/ChartCard.vue +10 -3
- package/frontend-vue/layers/dms-ui/app/components/confirm/ConfirmModal.vue +8 -0
- package/frontend-vue/layers/dms-ui/app/components/form/Form.vue +4 -3
- package/frontend-vue/layers/dms-ui/app/components/form/components/Cascader.vue +6 -1
- package/frontend-vue/layers/dms-ui/app/components/form/components/Display.vue +5 -1
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputNumber.vue +27 -3
- package/frontend-vue/layers/dms-ui/app/components/form/components/InputText.vue +24 -2
- package/frontend-vue/layers/dms-ui/app/components/form/components/RichText.vue +13 -4
- package/frontend-vue/layers/dms-ui/app/components/form/components/Textarea.vue +27 -2
- package/frontend-vue/layers/dms-ui/app/components/key-value-list/KeyValueList.vue +8 -4
- package/frontend-vue/layers/dms-ui/app/components/kpi/KpiCard.vue +12 -4
- package/frontend-vue/layers/dms-ui/app/components/meter/MeterBlock.vue +15 -4
- package/frontend-vue/layers/dms-ui/app/components/save-bar/SaveBar.vue +69 -42
- package/frontend-vue/layers/dms-ui/app/components/tab/Tab.vue +15 -1
- package/frontend-vue/layers/dms-ui/app/components/table-view/KanbanBoard.vue +13 -3
- package/frontend-vue/layers/dms-ui/app/components/top-list/TopListCard.vue +45 -9
- package/frontend-vue/layers/dms-ui/app/composables/form/types/field.ts +2 -0
- package/frontend-vue/layers/dms-ui/app/composables/tab/types/props.ts +5 -0
- package/frontend-vue/tests/confirm-dialog-fields.test.ts +12 -0
- package/frontend-vue/tests/drawer-target-direction.test.ts +1 -0
- package/frontend-vue/tests/field-suffix-count.test.ts +120 -0
- package/frontend-vue/tests/form-section-nav-groups.test.ts +116 -0
- package/frontend-vue/tests/nav-card-badge.test.ts +5 -1
- package/frontend-vue/tests/nuxt-ui-aria-labels.test.ts +58 -0
- package/frontend-vue/tests/page-fill-height.test.ts +2 -2
- package/frontend-vue/tests/save-bar.test.ts +49 -0
- package/frontend-vue/tests/stat-group-detail-lines.test.ts +63 -0
- package/frontend-vue/tests/tab-fit.test.ts +99 -0
- package/frontend-vue/tests/table-cell-sublines.test.ts +15 -0
- package/frontend-vue/tests/table-cell-wrap.test.ts +24 -2
- package/frontend-vue/tests/table-row-action-errors.test.ts +26 -0
- package/frontend-vue/tests/top-list-card-actions.test.ts +91 -0
- package/package.json +2 -2
- package/skills/dms/SKILL.md +11 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table-view-hidden-columns.test.js","sourceRoot":"","sources":["../../../../../src/test/unit/interfaces/dms-base/table-view-hidden-columns.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const node_fs_1 = require("node:fs");
|
|
4
|
+
const node_path_1 = require("node:path");
|
|
3
5
|
const interface_api_1 = require("@antelopejs/interface-api");
|
|
4
6
|
const interface_database_decorators_1 = require("@antelopejs/interface-database-decorators");
|
|
5
7
|
const chai_1 = require("chai");
|
|
@@ -20,6 +22,10 @@ const AUTH_KEY = "request-guard-key";
|
|
|
20
22
|
const HTTP_UNAUTHORIZED = 401;
|
|
21
23
|
const HTTP_FORBIDDEN = 403;
|
|
22
24
|
const gate = (0, page_access_1.denyingTenantGate)("request-guard-gate", TENANT);
|
|
25
|
+
const TENANT_OWNER_REQUIRED = "error.tenant_owner_required";
|
|
26
|
+
const TENANT_MEMBER_REQUIRED = "error.tenant_member_required";
|
|
27
|
+
const CORE_LOCALES = ["core-en-GB.json", "core-fr-FR.json"];
|
|
28
|
+
const CORE_LOCALES_DIR = "frontend-vue/layers/dms-core/i18n/locales";
|
|
23
29
|
function context(token) {
|
|
24
30
|
return {
|
|
25
31
|
rawRequest: { headers: { authorization: `Bearer ${token}` } },
|
|
@@ -35,6 +41,23 @@ async function expectStatus(action, status) {
|
|
|
35
41
|
(0, chai_1.expect)(error.getStatus()).to.equal(status);
|
|
36
42
|
}
|
|
37
43
|
}
|
|
44
|
+
async function refusalOf(action) {
|
|
45
|
+
try {
|
|
46
|
+
await action();
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
(0, chai_1.expect)(error).to.be.instanceOf(interface_api_1.HTTPResult);
|
|
50
|
+
(0, chai_1.expect)(error.getStatus()).to.equal(HTTP_FORBIDDEN);
|
|
51
|
+
return error.getBody();
|
|
52
|
+
}
|
|
53
|
+
return chai_1.expect.fail("Expected guard rejection");
|
|
54
|
+
}
|
|
55
|
+
function translationOf(locale, key) {
|
|
56
|
+
const messages = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(process.cwd(), CORE_LOCALES_DIR, locale), "utf8"));
|
|
57
|
+
return key
|
|
58
|
+
.split(".")
|
|
59
|
+
.reduce((node, part) => node?.[part], messages);
|
|
60
|
+
}
|
|
38
61
|
describe("[unit] request tenant guards — JWT and custom credentials", () => {
|
|
39
62
|
let user;
|
|
40
63
|
let jwt;
|
|
@@ -127,6 +150,21 @@ describe("[unit] request tenant guards — JWT and custom credentials", () => {
|
|
|
127
150
|
});
|
|
128
151
|
}
|
|
129
152
|
});
|
|
153
|
+
it("refuses with an i18n key the dashboard translates", async () => {
|
|
154
|
+
(0, chai_1.expect)(await refusalOf(() => (0, guards_1.authenticateTenantRequest)(context(jwt), { requireOwner: true }))).to.equal(TENANT_OWNER_REQUIRED);
|
|
155
|
+
const foreign = {
|
|
156
|
+
...authenticator,
|
|
157
|
+
authenticate: async () => ({ user, tenantId: OTHER_TENANT }),
|
|
158
|
+
};
|
|
159
|
+
(0, chai_1.expect)(await refusalOf(() => (0, guards_1.authenticateTenantRequest)(context("opaque.secret"), {
|
|
160
|
+
authenticators: [foreign],
|
|
161
|
+
}))).to.equal(TENANT_MEMBER_REQUIRED);
|
|
162
|
+
for (const locale of CORE_LOCALES) {
|
|
163
|
+
for (const key of [TENANT_OWNER_REQUIRED, TENANT_MEMBER_REQUIRED]) {
|
|
164
|
+
(0, chai_1.expect)(translationOf(locale, key), `${locale} ${key}`).to.be.a("string");
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
});
|
|
130
168
|
it("rechecks tenant gates on long-lived requests; bypass does not bypass ownership", async () => {
|
|
131
169
|
const ctx = context("opaque.secret");
|
|
132
170
|
await (0, guards_1.authenticateTenantRequest)(ctx, options);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"request-tenant-guards.test.js","sourceRoot":"","sources":["../../../src/test/unit/request-tenant-guards.test.ts"],"names":[],"mappings":";;AAAA,6DAA4E;AAC5E,6FAAqE;AACrE,+BAA8B;AAC9B,6DAAqE;AACrE,qDAAiE;AACjE,6DAA6E;AAC7E,6EAA8E;AAC9E,2EAGiD;AACjD,iGAAyG;AACzG,yDAGwC;AACxC,0DAAyE;AACzE,wDAA2D;AAE3D,MAAM,MAAM,GAAG,sBAAsB,CAAC;AACtC,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,MAAM,OAAO,GAAG,oBAAoB,CAAC;AACrC,MAAM,SAAS,GAAG,sBAAsB,CAAC;AACzC,MAAM,QAAQ,GAAG,mBAAmB,CAAC;AACrC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,MAAM,cAAc,GAAG,GAAG,CAAC;AAC3B,MAAM,IAAI,GAAG,IAAA,+BAAiB,EAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"request-tenant-guards.test.js","sourceRoot":"","sources":["../../../src/test/unit/request-tenant-guards.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -148,10 +148,16 @@ onMounted(() => {
|
|
|
148
148
|
:key="row"
|
|
149
149
|
:class="[TILE_ROW_CLASS, 'py-2.5']"
|
|
150
150
|
>
|
|
151
|
-
<USkeleton
|
|
151
|
+
<USkeleton
|
|
152
|
+
:aria-label="t('dms.a11y.loading')"
|
|
153
|
+
class="size-8 rounded-full"
|
|
154
|
+
/>
|
|
152
155
|
<span class="grid gap-1.5">
|
|
153
|
-
<USkeleton
|
|
154
|
-
|
|
156
|
+
<USkeleton
|
|
157
|
+
:aria-label="t('dms.a11y.loading')"
|
|
158
|
+
class="h-3.5 w-32"
|
|
159
|
+
/>
|
|
160
|
+
<USkeleton :aria-label="t('dms.a11y.loading')" class="h-3 w-44" />
|
|
155
161
|
</span>
|
|
156
162
|
</li>
|
|
157
163
|
</template>
|
|
@@ -69,6 +69,8 @@
|
|
|
69
69
|
"unauthorized": "You are not allowed to perform this action.",
|
|
70
70
|
"forbidden": "You are not authorized to access this resource.",
|
|
71
71
|
"not_a_member": "You are no longer a member of this account.",
|
|
72
|
+
"tenant_owner_required": "Only a workspace owner can do this.",
|
|
73
|
+
"tenant_member_required": "Only a workspace member can do this.",
|
|
72
74
|
"session_expired": "Your session has expired. Please sign in again.",
|
|
73
75
|
"session_not_found": "This session no longer exists.",
|
|
74
76
|
"rate_limited": "Too many requests. Please wait before trying again.",
|
|
@@ -485,6 +487,10 @@
|
|
|
485
487
|
"previous_month": "Previous month",
|
|
486
488
|
"next_month": "Next month"
|
|
487
489
|
}
|
|
490
|
+
},
|
|
491
|
+
"a11y": {
|
|
492
|
+
"breadcrumb": "Breadcrumb",
|
|
493
|
+
"loading": "Loading"
|
|
488
494
|
}
|
|
489
495
|
}
|
|
490
496
|
}
|
|
@@ -69,6 +69,8 @@
|
|
|
69
69
|
"unauthorized": "Vous n'êtes pas autorisé à effectuer cette action.",
|
|
70
70
|
"forbidden": "Vous n'êtes pas autorisé à accéder à cette ressource.",
|
|
71
71
|
"not_a_member": "Vous n'êtes plus membre de ce compte.",
|
|
72
|
+
"tenant_owner_required": "Seul un propriétaire de l'espace peut faire cela.",
|
|
73
|
+
"tenant_member_required": "Seul un membre de l'espace peut faire cela.",
|
|
72
74
|
"session_expired": "Votre session a expiré. Veuillez vous reconnecter.",
|
|
73
75
|
"session_not_found": "Cette session n'existe plus.",
|
|
74
76
|
"rate_limited": "Trop de requêtes. Veuillez patienter avant de réessayer.",
|
|
@@ -485,6 +487,10 @@
|
|
|
485
487
|
"previous_month": "Mois précédent",
|
|
486
488
|
"next_month": "Mois suivant"
|
|
487
489
|
}
|
|
490
|
+
},
|
|
491
|
+
"a11y": {
|
|
492
|
+
"breadcrumb": "Fil d'Ariane",
|
|
493
|
+
"loading": "Chargement"
|
|
488
494
|
}
|
|
489
495
|
}
|
|
490
496
|
}
|
|
@@ -211,6 +211,7 @@ const mobileBreadcrumb = computed(
|
|
|
211
211
|
|
|
212
212
|
<template #title>
|
|
213
213
|
<UBreadcrumb
|
|
214
|
+
:aria-label="t('dms.a11y.breadcrumb')"
|
|
214
215
|
:items="breadcrumb"
|
|
215
216
|
:ui="{ linkLabel: 'first-letter:uppercase' }"
|
|
216
217
|
class="hidden md:block"
|
|
@@ -290,6 +291,7 @@ const mobileBreadcrumb = computed(
|
|
|
290
291
|
with its buttons. -->
|
|
291
292
|
<div class="border-default border-b px-3 py-2 sm:px-4 md:hidden">
|
|
292
293
|
<UBreadcrumb
|
|
294
|
+
:aria-label="t('dms.a11y.breadcrumb')"
|
|
293
295
|
:items="mobileBreadcrumb"
|
|
294
296
|
:ui="{ linkLabel: 'first-letter:uppercase' }"
|
|
295
297
|
>
|
|
@@ -142,6 +142,7 @@ async function onLocaleChange(code: unknown) {
|
|
|
142
142
|
class="border-default flex items-center border-s px-2 font-mono tabular-nums"
|
|
143
143
|
>
|
|
144
144
|
<USkeleton
|
|
145
|
+
:aria-label="t('dms.a11y.loading')"
|
|
145
146
|
v-if="githubStars === null"
|
|
146
147
|
aria-hidden="true"
|
|
147
148
|
class="h-2.5 w-6"
|
|
@@ -11,20 +11,29 @@ interface PageSkeletonProps {
|
|
|
11
11
|
const props = defineProps<PageSkeletonProps>();
|
|
12
12
|
|
|
13
13
|
const CONTENT_LINE_WIDTHS = ["72%", "58%", "66%", "44%"];
|
|
14
|
+
|
|
15
|
+
const { t } = useI18n();
|
|
14
16
|
</script>
|
|
15
17
|
|
|
16
18
|
<template>
|
|
17
19
|
<div aria-hidden="true" class="dms-page-skeleton space-y-6">
|
|
18
20
|
<div v-if="props.withTitle" class="flex items-center gap-3.5">
|
|
19
|
-
<USkeleton
|
|
21
|
+
<USkeleton
|
|
22
|
+
:aria-label="t('dms.a11y.loading')"
|
|
23
|
+
class="size-9 rounded-[9px]"
|
|
24
|
+
/>
|
|
20
25
|
<div class="space-y-2">
|
|
21
|
-
<USkeleton class="h-5 w-48" />
|
|
22
|
-
<USkeleton
|
|
26
|
+
<USkeleton :aria-label="t('dms.a11y.loading')" class="h-5 w-48" />
|
|
27
|
+
<USkeleton
|
|
28
|
+
:aria-label="t('dms.a11y.loading')"
|
|
29
|
+
class="h-3 w-72 max-w-[60vw]"
|
|
30
|
+
/>
|
|
23
31
|
</div>
|
|
24
32
|
</div>
|
|
25
33
|
<div class="dms-card space-y-4 p-[18px]">
|
|
26
|
-
<USkeleton class="h-3.5 w-40" />
|
|
34
|
+
<USkeleton :aria-label="t('dms.a11y.loading')" class="h-3.5 w-40" />
|
|
27
35
|
<USkeleton
|
|
36
|
+
:aria-label="t('dms.a11y.loading')"
|
|
28
37
|
v-for="width in CONTENT_LINE_WIDTHS"
|
|
29
38
|
:key="width"
|
|
30
39
|
class="h-2.5"
|
|
@@ -130,8 +130,14 @@ const outOfScope = computed(() => preview.result.value?.outOfScope ?? 0);
|
|
|
130
130
|
aria-hidden="true"
|
|
131
131
|
class="hidden h-[37px] items-center gap-2.5 border-b border-(--dms-accent-line) bg-(--dms-accent-tint) ps-4 pe-3 [html[data-dms-role-preview=pending]_&]:flex"
|
|
132
132
|
>
|
|
133
|
-
<USkeleton
|
|
134
|
-
|
|
135
|
-
|
|
133
|
+
<USkeleton
|
|
134
|
+
:aria-label="t('dms.a11y.loading')"
|
|
135
|
+
class="size-4 rounded-full"
|
|
136
|
+
/>
|
|
137
|
+
<USkeleton
|
|
138
|
+
:aria-label="t('dms.a11y.loading')"
|
|
139
|
+
class="h-3 w-64 max-w-[60%]"
|
|
140
|
+
/>
|
|
141
|
+
<USkeleton :aria-label="t('dms.a11y.loading')" class="ms-auto h-6 w-24" />
|
|
136
142
|
</div>
|
|
137
143
|
</template>
|
|
@@ -169,7 +169,11 @@ function toggle(roleId: string) {
|
|
|
169
169
|
|
|
170
170
|
<template>
|
|
171
171
|
<div class="flex flex-col gap-1.5">
|
|
172
|
-
<USkeleton
|
|
172
|
+
<USkeleton
|
|
173
|
+
:aria-label="t('dms.a11y.loading')"
|
|
174
|
+
v-if="isLoading"
|
|
175
|
+
class="h-7 w-48 rounded-full"
|
|
176
|
+
/>
|
|
173
177
|
<span
|
|
174
178
|
v-else-if="options.roles.length === 0"
|
|
175
179
|
class="text-dimmed text-[12.5px]"
|
|
@@ -52,6 +52,8 @@ defineSlots<{
|
|
|
52
52
|
/** The summary, after the lead. */
|
|
53
53
|
default?: () => unknown;
|
|
54
54
|
}>();
|
|
55
|
+
|
|
56
|
+
const { t } = useI18n();
|
|
55
57
|
</script>
|
|
56
58
|
|
|
57
59
|
<template>
|
|
@@ -62,6 +64,7 @@ defineSlots<{
|
|
|
62
64
|
class="border-muted flex flex-wrap items-center gap-3.5 border-t px-[18px] py-3.5 first:border-t-0"
|
|
63
65
|
>
|
|
64
66
|
<USkeleton
|
|
67
|
+
:aria-label="t('dms.a11y.loading')"
|
|
65
68
|
v-if="props.loading"
|
|
66
69
|
aria-hidden="true"
|
|
67
70
|
class="size-8 shrink-0 rounded-[9px]"
|
|
@@ -78,6 +81,7 @@ defineSlots<{
|
|
|
78
81
|
</template>
|
|
79
82
|
<!-- Transparent text on a 12px bar per line it wraps to. -->
|
|
80
83
|
<USkeleton
|
|
84
|
+
:aria-label="t('dms.a11y.loading')"
|
|
81
85
|
v-if="props.loading"
|
|
82
86
|
as="span"
|
|
83
87
|
aria-hidden="true"
|
|
@@ -271,7 +271,10 @@ async function cancelChange(): Promise<void> {
|
|
|
271
271
|
<!-- A badge's height (the address line carries one) holds the
|
|
272
272
|
line while the address loads. -->
|
|
273
273
|
<span v-if="!email" aria-hidden="true" class="flex h-5">
|
|
274
|
-
<USkeleton
|
|
274
|
+
<USkeleton
|
|
275
|
+
:aria-label="t('dms.a11y.loading')"
|
|
276
|
+
class="my-auto h-3.5 w-40"
|
|
277
|
+
/>
|
|
275
278
|
</span>
|
|
276
279
|
<span v-else class="break-all">{{ email }}</span>
|
|
277
280
|
<UBadge
|
|
@@ -211,7 +211,10 @@ async function submit(): Promise<void> {
|
|
|
211
211
|
{{ t("page.settings.security.password.label") }}
|
|
212
212
|
<template #meta>
|
|
213
213
|
<span v-if="!overview" aria-hidden="true" class="flex h-[1lh]">
|
|
214
|
-
<USkeleton
|
|
214
|
+
<USkeleton
|
|
215
|
+
:aria-label="t('dms.a11y.loading')"
|
|
216
|
+
class="my-auto h-2.5 w-52"
|
|
217
|
+
/>
|
|
215
218
|
</span>
|
|
216
219
|
<template v-else-if="!hasPassword">
|
|
217
220
|
<span>{{ t("page.settings.security.password.not_set") }}</span>
|
|
@@ -398,6 +398,7 @@ async function markSaved(): Promise<void> {
|
|
|
398
398
|
>
|
|
399
399
|
<template #badge>
|
|
400
400
|
<USkeleton
|
|
401
|
+
:aria-label="t('dms.a11y.loading')"
|
|
401
402
|
v-if="!status"
|
|
402
403
|
aria-hidden="true"
|
|
403
404
|
class="h-5 w-12 rounded-full"
|
|
@@ -419,11 +420,17 @@ async function markSaved(): Promise<void> {
|
|
|
419
420
|
<template #label>
|
|
420
421
|
<DmsListRow bare>
|
|
421
422
|
<span class="flex h-[1lh]">
|
|
422
|
-
<USkeleton
|
|
423
|
+
<USkeleton
|
|
424
|
+
:aria-label="t('dms.a11y.loading')"
|
|
425
|
+
class="my-auto h-3 w-36"
|
|
426
|
+
/>
|
|
423
427
|
</span>
|
|
424
428
|
<template #meta>
|
|
425
429
|
<span class="flex h-[1lh]">
|
|
426
|
-
<USkeleton
|
|
430
|
+
<USkeleton
|
|
431
|
+
:aria-label="t('dms.a11y.loading')"
|
|
432
|
+
class="my-auto h-2.5 w-64 max-w-full"
|
|
433
|
+
/>
|
|
427
434
|
</span>
|
|
428
435
|
</template>
|
|
429
436
|
</DmsListRow>
|
|
@@ -518,8 +525,16 @@ async function markSaved(): Promise<void> {
|
|
|
518
525
|
</template>
|
|
519
526
|
|
|
520
527
|
<template v-if="!status" #footer>
|
|
521
|
-
<USkeleton
|
|
522
|
-
|
|
528
|
+
<USkeleton
|
|
529
|
+
:aria-label="t('dms.a11y.loading')"
|
|
530
|
+
aria-hidden="true"
|
|
531
|
+
class="h-3 w-56"
|
|
532
|
+
/>
|
|
533
|
+
<USkeleton
|
|
534
|
+
:aria-label="t('dms.a11y.loading')"
|
|
535
|
+
aria-hidden="true"
|
|
536
|
+
class="ms-auto h-7 w-36"
|
|
537
|
+
/>
|
|
523
538
|
</template>
|
|
524
539
|
<template v-else #footer>
|
|
525
540
|
<span class="flex items-center gap-1.5 text-xs">
|
|
@@ -25,6 +25,7 @@ const { t } = useI18n();
|
|
|
25
25
|
<!-- The variables are read after mount: a placeholder holds
|
|
26
26
|
the count's place until then. -->
|
|
27
27
|
<USkeleton
|
|
28
|
+
:aria-label="t('dms.a11y.loading')"
|
|
28
29
|
v-if="cssVariableCount === null"
|
|
29
30
|
aria-hidden="true"
|
|
30
31
|
class="inline-block h-2.5 w-20 align-middle"
|
|
@@ -224,9 +224,12 @@ onBeforeUnmount(() => {
|
|
|
224
224
|
:key="i"
|
|
225
225
|
class="border-muted grid h-10 grid-cols-[22px_minmax(0,1.2fr)_minmax(0,1fr)_90px] items-center gap-3 ps-[18px] pe-3 not-first:border-t"
|
|
226
226
|
>
|
|
227
|
-
<USkeleton
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
<USkeleton
|
|
228
|
+
:aria-label="t('dms.a11y.loading')"
|
|
229
|
+
class="size-[18px] rounded-[5px]"
|
|
230
|
+
/>
|
|
231
|
+
<USkeleton :aria-label="t('dms.a11y.loading')" class="h-3 w-40" />
|
|
232
|
+
<USkeleton :aria-label="t('dms.a11y.loading')" class="h-3 w-32" />
|
|
230
233
|
<span />
|
|
231
234
|
</div>
|
|
232
235
|
</div>
|
|
@@ -419,12 +419,27 @@ const summaryCards = computed<StatGroupItem[]>(() =>
|
|
|
419
419
|
class="flex min-h-[228px] flex-col gap-3 p-4"
|
|
420
420
|
>
|
|
421
421
|
<div class="flex items-start justify-between">
|
|
422
|
-
<USkeleton
|
|
423
|
-
|
|
422
|
+
<USkeleton
|
|
423
|
+
:aria-label="t('dms.a11y.loading')"
|
|
424
|
+
class="size-9 rounded-[10px]"
|
|
425
|
+
/>
|
|
426
|
+
<USkeleton
|
|
427
|
+
:aria-label="t('dms.a11y.loading')"
|
|
428
|
+
class="h-5 w-12 rounded-full"
|
|
429
|
+
/>
|
|
424
430
|
</div>
|
|
425
|
-
<USkeleton
|
|
426
|
-
|
|
427
|
-
|
|
431
|
+
<USkeleton
|
|
432
|
+
:aria-label="t('dms.a11y.loading')"
|
|
433
|
+
class="h-2.5 w-4/5"
|
|
434
|
+
/>
|
|
435
|
+
<USkeleton
|
|
436
|
+
:aria-label="t('dms.a11y.loading')"
|
|
437
|
+
class="h-2.5 w-3/5"
|
|
438
|
+
/>
|
|
439
|
+
<USkeleton
|
|
440
|
+
:aria-label="t('dms.a11y.loading')"
|
|
441
|
+
class="mt-auto h-4 w-2/5"
|
|
442
|
+
/>
|
|
428
443
|
</DmsCard>
|
|
429
444
|
</div>
|
|
430
445
|
|
|
@@ -22,6 +22,8 @@ const PERCENT_UNIT = "%";
|
|
|
22
22
|
const RING_SIZE = "min(78%, 16rem)";
|
|
23
23
|
const RING_HOLE_MASK =
|
|
24
24
|
"radial-gradient(circle, transparent 54%, #000 calc(54% + 1px))";
|
|
25
|
+
|
|
26
|
+
const { t } = useI18n();
|
|
25
27
|
</script>
|
|
26
28
|
|
|
27
29
|
<template>
|
|
@@ -32,6 +34,7 @@ const RING_HOLE_MASK =
|
|
|
32
34
|
aria-busy="true"
|
|
33
35
|
>
|
|
34
36
|
<USkeleton
|
|
37
|
+
:aria-label="t('dms.a11y.loading')"
|
|
35
38
|
class="aspect-square rounded-full"
|
|
36
39
|
:style="{
|
|
37
40
|
height: RING_SIZE,
|
|
@@ -47,6 +50,7 @@ const RING_HOLE_MASK =
|
|
|
47
50
|
aria-busy="true"
|
|
48
51
|
>
|
|
49
52
|
<USkeleton
|
|
53
|
+
:aria-label="t('dms.a11y.loading')"
|
|
50
54
|
v-for="(barHeight, index) in GHOST_BAR_HEIGHTS"
|
|
51
55
|
:key="index"
|
|
52
56
|
class="flex-1 rounded-t-[4px] rounded-b-none"
|
|
@@ -115,6 +115,8 @@ function onContentPending() {
|
|
|
115
115
|
function onContentResolve() {
|
|
116
116
|
isContentLoading.value = false;
|
|
117
117
|
}
|
|
118
|
+
|
|
119
|
+
const { t } = useI18n();
|
|
118
120
|
</script>
|
|
119
121
|
|
|
120
122
|
<template>
|
|
@@ -191,8 +193,14 @@ function onContentResolve() {
|
|
|
191
193
|
:key="field"
|
|
192
194
|
class="flex flex-col gap-2"
|
|
193
195
|
>
|
|
194
|
-
<USkeleton
|
|
195
|
-
|
|
196
|
+
<USkeleton
|
|
197
|
+
:aria-label="t('dms.a11y.loading')"
|
|
198
|
+
class="h-3 w-24"
|
|
199
|
+
/>
|
|
200
|
+
<USkeleton
|
|
201
|
+
:aria-label="t('dms.a11y.loading')"
|
|
202
|
+
class="h-8 w-full"
|
|
203
|
+
/>
|
|
196
204
|
</div>
|
|
197
205
|
</div>
|
|
198
206
|
</template>
|
|
@@ -137,6 +137,8 @@ function onContentPending() {
|
|
|
137
137
|
function onContentResolve() {
|
|
138
138
|
isContentLoading.value = false;
|
|
139
139
|
}
|
|
140
|
+
|
|
141
|
+
const { t } = useI18n();
|
|
140
142
|
</script>
|
|
141
143
|
|
|
142
144
|
<template>
|
|
@@ -205,8 +207,11 @@ function onContentResolve() {
|
|
|
205
207
|
:key="field"
|
|
206
208
|
class="flex flex-col gap-2"
|
|
207
209
|
>
|
|
208
|
-
<USkeleton class="h-3 w-24" />
|
|
209
|
-
<USkeleton
|
|
210
|
+
<USkeleton :aria-label="t('dms.a11y.loading')" class="h-3 w-24" />
|
|
211
|
+
<USkeleton
|
|
212
|
+
:aria-label="t('dms.a11y.loading')"
|
|
213
|
+
class="h-8 w-full"
|
|
214
|
+
/>
|
|
210
215
|
</div>
|
|
211
216
|
</div>
|
|
212
217
|
</template>
|