@conduction/nextcloud-vue 2.77.0 → 2.79.0
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/dist/bundled-packages.json +0 -2
- package/dist/esm/bundled-packages.json +0 -2
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +113 -104
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue2.js +23 -0
- package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue2.js.map +1 -1
- package/dist/esm/components/CnAiCompanion/CnAiCompanion.vue3.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +12 -2
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js +2 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue2.js.map +1 -1
- package/dist/esm/components/CnBoardView/CnBoardView.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +117 -0
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +122 -97
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +37 -0
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js +2 -2
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +168 -5
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +140 -92
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +84 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +4 -2
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue.js +1 -1
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue2.js +45 -2
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue2.js.map +1 -1
- package/dist/esm/components/CnDateRangePicker/CnDateRangePicker.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +61 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +173 -5
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +181 -99
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js +29 -11
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/openRegisterSource.js +252 -0
- package/dist/esm/components/CnFilesBrowser/openRegisterSource.js.map +1 -0
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +8 -2
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +4 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +31 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +3 -2
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +100 -3
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +4 -2
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js +3 -2
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue2.js.map +1 -1
- package/dist/esm/components/CnQuickFilterBar/CnQuickFilterBar.vue3.js.map +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue2.js.map +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js +1 -1
- package/dist/esm/components/CnSavedViewsControl/CnSavedViewsControl.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +36 -0
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +35 -23
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue2.js +6 -2
- package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue2.js.map +1 -1
- package/dist/esm/components/CnStatusBadge/CnStatusBadge.vue3.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +30 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -0
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
- package/dist/esm/composables/useAppManifest.js +8 -3
- package/dist/esm/composables/useAppManifest.js.map +1 -1
- package/dist/esm/composables/useFormDraft.js +11 -1
- package/dist/esm/composables/useFormDraft.js.map +1 -1
- package/dist/esm/composables/useObjectPresence.js +15 -4
- package/dist/esm/composables/useObjectPresence.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +68 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +113 -2
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +526 -16
- package/dist/esm/utils/badgeVariants.js +32 -0
- package/dist/esm/utils/badgeVariants.js.map +1 -0
- package/dist/esm/utils/boardDate.js +193 -0
- package/dist/esm/utils/boardDate.js.map +1 -0
- package/dist/esm/utils/dynamicProperties.js +5 -1
- package/dist/esm/utils/dynamicProperties.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +57 -6
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +2569 -811
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +526 -16
- package/l10n/en.json +68 -1
- package/l10n/nl.json +113 -2
- package/package.json +1 -1
- package/scripts/build-validators.js +26 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +48 -39
- package/src/components/CnAiCompanion/CnAiCompanion.vue +23 -0
- package/src/components/CnAppRoot/CnAppRoot.vue +12 -2
- package/src/components/CnBoardView/CnBoardView.vue +2 -1
- package/src/components/CnCellRenderer/CnCellRenderer.md +1 -0
- package/src/components/CnCellRenderer/CnCellRenderer.vue +169 -10
- package/src/components/CnChartWidget/CnChartWidget.vue +39 -2
- package/src/components/CnDashboardPage/CnDashboardPage.vue +248 -8
- package/src/components/CnDataTable/CnDataTable.md +2 -0
- package/src/components/CnDataTable/CnDataTable.vue +88 -4
- package/src/components/CnDateRangePicker/CnDateRangePicker.vue +44 -1
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +61 -1
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +232 -11
- package/src/components/CnFilesBrowser/filesBrowser.js +43 -2
- package/src/components/CnFilesBrowser/index.js +1 -0
- package/src/components/CnFilesBrowser/openRegisterSource.js +248 -0
- package/src/components/CnFormDialog/CnFormDialog.vue +8 -2
- package/src/components/CnFormPage/CnFormPage.vue +4 -1
- package/src/components/CnIndexPage/CnIndexPage.vue +33 -3
- package/src/components/CnObjectSidebar/CnFilesTab.vue +103 -4
- package/src/components/CnQuickFilterBar/CnQuickFilterBar.vue +3 -2
- package/src/components/CnSavedViewsControl/CnSavedViewsControl.vue +1 -1
- package/src/components/CnStatWidget/CnStatWidget.vue +52 -2
- package/src/components/CnStatusBadge/CnStatusBadge.vue +6 -2
- package/src/components/CnTabsWidget/CnTabsWidget.vue +30 -1
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -0
- package/src/components/index.js +1 -1
- package/src/composables/__tests__/useObjectPresence.spec.js +24 -0
- package/src/composables/useAppManifest.js +8 -3
- package/src/composables/useFormDraft.js +11 -1
- package/src/composables/useObjectPresence.js +15 -4
- package/src/css/badge.css +31 -0
- package/src/css/kpi-card.css +51 -0
- package/src/css/look-board-detail.css +10 -0
- package/src/css/look-board-index.css +128 -14
- package/src/css/look-board.css +85 -0
- package/src/css/table.css +37 -0
- package/src/index.js +4 -0
- package/src/schemas/app-manifest-v2.schema.json +50 -5
- package/src/utils/badgeVariants.js +29 -0
- package/src/utils/boardDate.js +189 -0
- package/src/utils/dynamicProperties.js +5 -1
- package/src/utils/validateManifestV2.compiled.js +57 -2
- package/dist/esm/_virtual/equal.js +0 -4
- package/dist/esm/_virtual/equal.js.map +0 -1
- package/dist/esm/_virtual/ucs2length.js +0 -4
- package/dist/esm/_virtual/ucs2length.js.map +0 -1
- package/dist/esm/node_modules/ajv/dist/runtime/equal.js +0 -9
- package/dist/esm/node_modules/ajv/dist/runtime/equal.js.map +0 -1
- package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js +0 -25
- package/dist/esm/node_modules/ajv/dist/runtime/ucs2length.js.map +0 -1
- package/dist/esm/node_modules/fast-deep-equal/index.js +0 -47
- package/dist/esm/node_modules/fast-deep-equal/index.js.map +0 -1
package/l10n/en.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"translations": {
|
|
3
|
+
"You cannot see these files": "You cannot see these files",
|
|
4
|
+
"Delete {name}? This cannot be undone here.": "Delete {name}? This cannot be undone here.",
|
|
3
5
|
"Linked items": "Linked items",
|
|
4
6
|
"Still loading: {sections}": "Still loading: {sections}",
|
|
5
7
|
"Could not load {section}.": "Could not load {section}.",
|
|
@@ -114,6 +116,7 @@
|
|
|
114
116
|
"Saved just now": "Saved just now",
|
|
115
117
|
"Saved {time}": "Saved {time}",
|
|
116
118
|
"Saved": "Saved",
|
|
119
|
+
"Draft kept on this device": "Draft kept on this device",
|
|
117
120
|
"Publish": "Publish",
|
|
118
121
|
"Edit {title} (draft)": "Edit {title} (draft)",
|
|
119
122
|
"Also search inside files": "Also search inside files",
|
|
@@ -453,6 +456,12 @@
|
|
|
453
456
|
"NC Activity is currently unavailable.": "NC Activity is currently unavailable.",
|
|
454
457
|
"Could not load activity.": "Could not load activity.",
|
|
455
458
|
"Today": "Today",
|
|
459
|
+
"Last 8 hours": "Last 8 hours",
|
|
460
|
+
"Last 24 hours": "Last 24 hours",
|
|
461
|
+
"Last 7 days": "Last 7 days",
|
|
462
|
+
"Last 30 days": "Last 30 days",
|
|
463
|
+
"Last 90 days": "Last 90 days",
|
|
464
|
+
"Custom range": "Custom range",
|
|
456
465
|
"Yesterday": "Yesterday",
|
|
457
466
|
"Earlier": "Earlier",
|
|
458
467
|
"System": "System",
|
|
@@ -565,6 +574,8 @@
|
|
|
565
574
|
"Order": "Order",
|
|
566
575
|
"Owner:": "Owner:",
|
|
567
576
|
"Page {current} of {total}": "Page {current} of {total}",
|
|
577
|
+
"{shown} of {total}": "{shown} of {total}",
|
|
578
|
+
"{from}–{to} of {total}": "{from}–{to} of {total}",
|
|
568
579
|
"Parent schemas:": "Parent schemas:",
|
|
569
580
|
"Password": "Password",
|
|
570
581
|
"Pattern (regex)": "Pattern (regex)",
|
|
@@ -764,6 +775,27 @@
|
|
|
764
775
|
"Message input": "Message input",
|
|
765
776
|
"Start new chat": "Start new chat",
|
|
766
777
|
"History": "History",
|
|
778
|
+
"No audit entries yet": "No audit entries yet",
|
|
779
|
+
"Meetings": "Meetings",
|
|
780
|
+
"No meetings": "No meetings",
|
|
781
|
+
"Open in Calendar": "Open in Calendar",
|
|
782
|
+
"(no title)": "(no title)",
|
|
783
|
+
"Could not load meetings.": "Could not load meetings.",
|
|
784
|
+
"Could not load meeting.": "Could not load meeting.",
|
|
785
|
+
"Calendar is currently unavailable.": "Calendar is currently unavailable.",
|
|
786
|
+
"Show all {count} fields": "Show all {count} fields",
|
|
787
|
+
"Show less": "Show less",
|
|
788
|
+
"{count} more": "{count} more",
|
|
789
|
+
"Identifier: {identifier}": "Identifier: {identifier}",
|
|
790
|
+
"What happened, who did it and when, newest first": "What happened, who did it and when, newest first",
|
|
791
|
+
"{app} is not installed": "{app} is not installed",
|
|
792
|
+
"Install and enable the {app} app to see this.": "Install and enable the {app} app to see this.",
|
|
793
|
+
"{title} needs the {app} app. Install and enable it to see this.": "{title} needs the {app} app. Install and enable it to see this.",
|
|
794
|
+
"View all ({total})": "View all ({total})",
|
|
795
|
+
"No items": "No items",
|
|
796
|
+
"Nothing here yet": "Nothing here yet",
|
|
797
|
+
"No items match this filter": "No items match this filter",
|
|
798
|
+
"Could not load these records": "Could not load these records",
|
|
767
799
|
"No conversations yet": "No conversations yet",
|
|
768
800
|
"Connecting...": "Connecting...",
|
|
769
801
|
"Loading conversations...": "Loading conversations...",
|
|
@@ -1302,7 +1334,34 @@
|
|
|
1302
1334
|
"Filter by {column}, active": "Filter by {column}, active",
|
|
1303
1335
|
"Turn notifications off": "Turn notifications off",
|
|
1304
1336
|
"Turn notifications on": "Turn notifications on",
|
|
1305
|
-
"Could not change notifications.": "Could not change notifications."
|
|
1337
|
+
"Could not change notifications.": "Could not change notifications.",
|
|
1338
|
+
"Actions for the selection": "Actions for the selection",
|
|
1339
|
+
"Active:": "Active:",
|
|
1340
|
+
"Filter": "Filter",
|
|
1341
|
+
"List": "List",
|
|
1342
|
+
"Map": "Map",
|
|
1343
|
+
"Remove filter: {label}": "Remove filter: {label}",
|
|
1344
|
+
"Search and columns": "Search and columns",
|
|
1345
|
+
"Sort by": "Sort by",
|
|
1346
|
+
"View mode": "View mode",
|
|
1347
|
+
"With the selected {plural}": "With the selected {plural}",
|
|
1348
|
+
"items": "items",
|
|
1349
|
+
"{count} active": "{count} active",
|
|
1350
|
+
"Delete \"{name}\"": "Delete \"{name}\"",
|
|
1351
|
+
"No saved views yet": "No saved views yet",
|
|
1352
|
+
"No views with this label": "No views with this label",
|
|
1353
|
+
"Save current view…": "Save current view…",
|
|
1354
|
+
"Save view": "Save view",
|
|
1355
|
+
"Saved views": "Saved views",
|
|
1356
|
+
"Show only views labelled \"{label}\"": "Show only views labelled \"{label}\"",
|
|
1357
|
+
"Stop filtering on \"{label}\"": "Stop filtering on \"{label}\"",
|
|
1358
|
+
"{name}, level {level}": "{name}, level {level}",
|
|
1359
|
+
"{name}. Parts of this view come from one you cannot see.": "{name}. Parts of this view come from one you cannot see.",
|
|
1360
|
+
"More filters": "More filters",
|
|
1361
|
+
"Quick filters": "Quick filters",
|
|
1362
|
+
"{count} filters": "{count} filters",
|
|
1363
|
+
"{count} more filters": "{count} more filters",
|
|
1364
|
+
"{label} — show the other filters": "{label} — show the other filters"
|
|
1306
1365
|
},
|
|
1307
1366
|
"plurals": {
|
|
1308
1367
|
"%n year": [
|
|
@@ -1313,6 +1372,10 @@
|
|
|
1313
1372
|
"%n month",
|
|
1314
1373
|
"%n months"
|
|
1315
1374
|
],
|
|
1375
|
+
"%n hour": [
|
|
1376
|
+
"%n hour",
|
|
1377
|
+
"%n hours"
|
|
1378
|
+
],
|
|
1316
1379
|
"%n day": [
|
|
1317
1380
|
"%n day",
|
|
1318
1381
|
"%n days"
|
|
@@ -1368,6 +1431,10 @@
|
|
|
1368
1431
|
"in {count} day": [
|
|
1369
1432
|
"in {count} day",
|
|
1370
1433
|
"in {count} days"
|
|
1434
|
+
],
|
|
1435
|
+
"{count} more filter": [
|
|
1436
|
+
"{count} more filter",
|
|
1437
|
+
"{count} more filters"
|
|
1371
1438
|
]
|
|
1372
1439
|
}
|
|
1373
1440
|
}
|
package/l10n/nl.json
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"translations": {
|
|
3
|
+
"You cannot see these files": "Je kunt deze bestanden niet zien",
|
|
4
|
+
"Delete {name}? This cannot be undone here.": "{name} verwijderen? Dit kun je hier niet ongedaan maken.",
|
|
3
5
|
"Linked items": "Gekoppelde items",
|
|
4
6
|
"Still loading: {sections}": "Nog aan het laden: {sections}",
|
|
5
7
|
"Could not load {section}.": "{section} kon niet worden geladen.",
|
|
@@ -114,6 +116,7 @@
|
|
|
114
116
|
"Saved just now": "Zojuist opgeslagen",
|
|
115
117
|
"Saved {time}": "Opgeslagen {time}",
|
|
116
118
|
"Saved": "Opgeslagen",
|
|
119
|
+
"Draft kept on this device": "Concept bewaard op dit apparaat",
|
|
117
120
|
"Edit {title} (draft)": "{title} bewerken (concept)",
|
|
118
121
|
"Also search inside files": "Zoek ook in bestanden",
|
|
119
122
|
"File matches are limited to the best 50.": "Bestandstreffers zijn beperkt tot de beste 50.",
|
|
@@ -452,6 +455,12 @@
|
|
|
452
455
|
"NC Activity is currently unavailable.": "NC Activiteit is momenteel niet beschikbaar.",
|
|
453
456
|
"Could not load activity.": "Kon activiteit niet laden.",
|
|
454
457
|
"Today": "Vandaag",
|
|
458
|
+
"Last 8 hours": "Laatste 8 uur",
|
|
459
|
+
"Last 24 hours": "Laatste 24 uur",
|
|
460
|
+
"Last 7 days": "Laatste 7 dagen",
|
|
461
|
+
"Last 30 days": "Laatste 30 dagen",
|
|
462
|
+
"Last 90 days": "Laatste 90 dagen",
|
|
463
|
+
"Custom range": "Aangepaste periode",
|
|
455
464
|
"Yesterday": "Gisteren",
|
|
456
465
|
"Earlier": "Eerder",
|
|
457
466
|
"System": "Systeem",
|
|
@@ -564,6 +573,8 @@
|
|
|
564
573
|
"Order": "Volgorde",
|
|
565
574
|
"Owner:": "Eigenaar:",
|
|
566
575
|
"Page {current} of {total}": "Pagina {current} van {total}",
|
|
576
|
+
"{shown} of {total}": "{shown} van {total}",
|
|
577
|
+
"{from}–{to} of {total}": "{from}–{to} van {total}",
|
|
567
578
|
"Parent schemas:": "Bovenliggende schema's:",
|
|
568
579
|
"Password": "Wachtwoord",
|
|
569
580
|
"Pattern (regex)": "Patroon (regex)",
|
|
@@ -762,7 +773,28 @@
|
|
|
762
773
|
"AI assistant": "AI-assistent",
|
|
763
774
|
"Message input": "Berichtinvoer",
|
|
764
775
|
"Start new chat": "Nieuwe chat starten",
|
|
765
|
-
"History": "
|
|
776
|
+
"History": "Historie",
|
|
777
|
+
"No audit entries yet": "Nog geen wijzigingen vastgelegd",
|
|
778
|
+
"Meetings": "Afspraken",
|
|
779
|
+
"No meetings": "Geen afspraken",
|
|
780
|
+
"Open in Calendar": "Openen in Agenda",
|
|
781
|
+
"(no title)": "(geen titel)",
|
|
782
|
+
"Could not load meetings.": "De afspraken konden niet worden geladen.",
|
|
783
|
+
"Could not load meeting.": "De afspraak kon niet worden geladen.",
|
|
784
|
+
"Calendar is currently unavailable.": "De agenda is nu niet beschikbaar.",
|
|
785
|
+
"Show all {count} fields": "Alle {count} velden tonen",
|
|
786
|
+
"Show less": "Minder tonen",
|
|
787
|
+
"{count} more": "Nog {count}",
|
|
788
|
+
"Identifier: {identifier}": "Kenmerk: {identifier}",
|
|
789
|
+
"What happened, who did it and when, newest first": "Wat er gebeurde, door wie en wanneer, nieuwste eerst",
|
|
790
|
+
"{app} is not installed": "{app} is niet geïnstalleerd",
|
|
791
|
+
"Install and enable the {app} app to see this.": "Installeer en activeer de app {app} om dit te zien.",
|
|
792
|
+
"{title} needs the {app} app. Install and enable it to see this.": "{title} heeft de app {app} nodig. Installeer en activeer die om dit te zien.",
|
|
793
|
+
"View all ({total})": "Alles bekijken ({total})",
|
|
794
|
+
"No items": "Geen items",
|
|
795
|
+
"Nothing here yet": "Hier staat nog niets",
|
|
796
|
+
"No items match this filter": "Geen items voldoen aan dit filter",
|
|
797
|
+
"Could not load these records": "Deze gegevens konden niet worden geladen",
|
|
766
798
|
"No conversations yet": "Nog geen gesprekken",
|
|
767
799
|
"Connecting...": "Verbinden...",
|
|
768
800
|
"Loading conversations...": "Gesprekken laden...",
|
|
@@ -1353,7 +1385,78 @@
|
|
|
1353
1385
|
"Filter by {column}, active": "Filteren op {column}, actief",
|
|
1354
1386
|
"Turn notifications off": "Meldingen uitzetten",
|
|
1355
1387
|
"Turn notifications on": "Meldingen aanzetten",
|
|
1356
|
-
"Could not change notifications.": "Meldingen konden niet worden gewijzigd."
|
|
1388
|
+
"Could not change notifications.": "Meldingen konden niet worden gewijzigd.",
|
|
1389
|
+
"Actions for the selection": "Acties voor de selectie",
|
|
1390
|
+
"Active:": "Actief:",
|
|
1391
|
+
"Filter": "Filter",
|
|
1392
|
+
"List": "Lijst",
|
|
1393
|
+
"Map": "Kaart",
|
|
1394
|
+
"Remove filter: {label}": "Filter verwijderen: {label}",
|
|
1395
|
+
"Search and columns": "Zoeken en kolommen",
|
|
1396
|
+
"Sort by": "Sorteren op",
|
|
1397
|
+
"View mode": "Weergave",
|
|
1398
|
+
"With the selected {plural}": "Met de geselecteerde {plural}",
|
|
1399
|
+
"items": "items",
|
|
1400
|
+
"{count} active": "{count} actief",
|
|
1401
|
+
"Delete \"{name}\"": "\"{name}\" verwijderen",
|
|
1402
|
+
"No saved views yet": "Nog geen opgeslagen weergaven",
|
|
1403
|
+
"No views with this label": "Geen weergaven met dit label",
|
|
1404
|
+
"Save current view…": "Huidige weergave opslaan…",
|
|
1405
|
+
"Save view": "Weergave opslaan",
|
|
1406
|
+
"Saved views": "Opgeslagen weergaven",
|
|
1407
|
+
"Show only views labelled \"{label}\"": "Alleen weergaven met label \"{label}\" tonen",
|
|
1408
|
+
"Stop filtering on \"{label}\"": "Niet meer filteren op \"{label}\"",
|
|
1409
|
+
"{name}, level {level}": "{name}, niveau {level}",
|
|
1410
|
+
"{name}. Parts of this view come from one you cannot see.": "{name}. Delen van deze weergave komen uit een weergave die u niet kunt zien.",
|
|
1411
|
+
"More filters": "Meer filters",
|
|
1412
|
+
"Quick filters": "Snelfilters",
|
|
1413
|
+
"{count} filters": "{count} filters",
|
|
1414
|
+
"{count} more filters": "{count} filters meer",
|
|
1415
|
+
"{label} — show the other filters": "{label}, toon de andere filters",
|
|
1416
|
+
"A file or folder with that name is already here": "Hier staat al een bestand of map met die naam",
|
|
1417
|
+
"A file with that name is already here": "Hier staat al een bestand met die naam",
|
|
1418
|
+
"A name cannot contain a slash": "Een naam kan geen schuine streep bevatten",
|
|
1419
|
+
"Actions for {name}": "Acties voor {name}",
|
|
1420
|
+
"Download": "Downloaden",
|
|
1421
|
+
"Drop files here, or use New": "Sleep bestanden hierheen, of gebruik Nieuw",
|
|
1422
|
+
"Folder name": "Mapnaam",
|
|
1423
|
+
"Modified": "Gewijzigd",
|
|
1424
|
+
"New": "Nieuw",
|
|
1425
|
+
"New folder": "Nieuwe map",
|
|
1426
|
+
"New name": "Nieuwe naam",
|
|
1427
|
+
"Rename": "Naam wijzigen",
|
|
1428
|
+
"Show in Files": "Tonen in Bestanden",
|
|
1429
|
+
"Size": "Grootte",
|
|
1430
|
+
"The folder could not be created": "De map kon niet worden gemaakt",
|
|
1431
|
+
"The folder could not be read": "De map kon niet worden gelezen",
|
|
1432
|
+
"The name could not be changed": "De naam kon niet worden gewijzigd",
|
|
1433
|
+
"The upload failed": "Het uploaden is mislukt",
|
|
1434
|
+
"This folder is empty": "Deze map is leeg",
|
|
1435
|
+
"This folder no longer exists": "Deze map bestaat niet meer",
|
|
1436
|
+
"Try again": "Opnieuw proberen",
|
|
1437
|
+
"Upload files": "Bestanden uploaden",
|
|
1438
|
+
"You cannot see this folder": "Je kunt deze map niet zien",
|
|
1439
|
+
"{action} did not succeed": "{action} is niet gelukt",
|
|
1440
|
+
"Error:": "Fout:",
|
|
1441
|
+
"optional": "optioneel",
|
|
1442
|
+
"Copy link": "Link kopiëren",
|
|
1443
|
+
"Details and sharing": "Details en delen",
|
|
1444
|
+
"Link copied": "Link gekopieerd",
|
|
1445
|
+
"Share uploaded files": "Geüploade bestanden delen",
|
|
1446
|
+
"The link could not be copied": "De link kon niet worden gekopieerd",
|
|
1447
|
+
"Invalid JSON: {msg}": "Ongeldige JSON: {msg}",
|
|
1448
|
+
"Loading the fields this choice adds.": "De velden van deze keuze worden geladen.",
|
|
1449
|
+
"Restore": "Herstellen",
|
|
1450
|
+
"Save draft": "Concept opslaan",
|
|
1451
|
+
"Saved {title}": "{title} opgeslagen",
|
|
1452
|
+
"Saved, but some rows were not saved: {rows}": "Opgeslagen, maar sommige rijen zijn niet opgeslagen: {rows}",
|
|
1453
|
+
"The list of choices could not be loaded. Enter the value by hand.": "De keuzelijst kon niet worden geladen. Vul de waarde zelf in.",
|
|
1454
|
+
"You have unsaved changes from an earlier visit.": "Je hebt niet-opgeslagen wijzigingen van een eerder bezoek.",
|
|
1455
|
+
"no longer offered": "niet meer beschikbaar",
|
|
1456
|
+
"1 day left": "Nog 1 dag",
|
|
1457
|
+
"{count} days left": "Nog {count} dagen",
|
|
1458
|
+
"1 day overdue": "1 dag te laat",
|
|
1459
|
+
"{count} days overdue": "{count} dagen te laat"
|
|
1357
1460
|
},
|
|
1358
1461
|
"plurals": {
|
|
1359
1462
|
"%n year": [
|
|
@@ -1364,6 +1467,10 @@
|
|
|
1364
1467
|
"%n maand",
|
|
1365
1468
|
"%n maanden"
|
|
1366
1469
|
],
|
|
1470
|
+
"%n hour": [
|
|
1471
|
+
"%n uur",
|
|
1472
|
+
"%n uur"
|
|
1473
|
+
],
|
|
1367
1474
|
"%n day": [
|
|
1368
1475
|
"%n dag",
|
|
1369
1476
|
"%n dagen"
|
|
@@ -1419,6 +1526,10 @@
|
|
|
1419
1526
|
"in {count} day": [
|
|
1420
1527
|
"over {count} dag",
|
|
1421
1528
|
"over {count} dagen"
|
|
1529
|
+
],
|
|
1530
|
+
"{count} more filter": [
|
|
1531
|
+
"Nog {count} filter",
|
|
1532
|
+
"Nog {count} filters"
|
|
1422
1533
|
]
|
|
1423
1534
|
}
|
|
1424
1535
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@conduction/nextcloud-vue",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.79.0",
|
|
4
4
|
"description": "Shared Vue component library for Conduction Nextcloud apps — complements @nextcloud/vue with higher-level components, OpenRegister integration, and NL Design System support",
|
|
5
5
|
"homepage": "https://github.com/ConductionNL/nextcloud-vue#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -148,6 +148,32 @@ if (/require\("ajv-formats/.test(moduleCode)) {
|
|
|
148
148
|
throw new Error('build-validators: a require("ajv-formats…") reference survived inlining — the standalone validator is not self-contained')
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
+
// Inline Ajv's runtime helpers for the same reason. The standalone output
|
|
152
|
+
// emits `require("ajv/dist/runtime/ucs2length").default` (every `minLength` /
|
|
153
|
+
// `maxLength`) and `require("ajv/dist/runtime/equal").default` (`enum` / `const`
|
|
154
|
+
// on objects). Rollup turns each into a bare side-effect import that fills an
|
|
155
|
+
// `__exports` object, and a consumer's webpack drops that import because the
|
|
156
|
+
// library's `sideEffects` allowlist does not name it. `.default` is then
|
|
157
|
+
// undefined, the validator throws "f is not a function" on the first string it
|
|
158
|
+
// length-checks, and useAppManifest's catch-all kept the bundled manifest: the
|
|
159
|
+
// `/api/manifest` delta never reached the navigation (observed 2026-10-10 on
|
|
160
|
+
// dossiq). Both helpers are self-contained functions (fast-deep-equal recurses
|
|
161
|
+
// through its own name), so their source inlines as is.
|
|
162
|
+
moduleCode = moduleCode.replace(
|
|
163
|
+
/require\("ajv\/dist\/runtime\/([A-Za-z0-9_]+)"\)\.default/g,
|
|
164
|
+
(_match, name) => {
|
|
165
|
+
const fn = require(`ajv/dist/runtime/${name}`).default
|
|
166
|
+
if (typeof fn !== 'function') {
|
|
167
|
+
throw new Error(`build-validators: ajv runtime helper "${name}" is not a function and cannot be inlined`)
|
|
168
|
+
}
|
|
169
|
+
return `(${fn.toString()})`
|
|
170
|
+
},
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
if (/require\(/.test(moduleCode)) {
|
|
174
|
+
throw new Error('build-validators: a require(…) survived inlining — the standalone validator is not self-contained')
|
|
175
|
+
}
|
|
176
|
+
|
|
151
177
|
const banner = `// SPDX-License-Identifier: EUPL-1.2
|
|
152
178
|
// Copyright (C) 2026 Conduction B.V.
|
|
153
179
|
//
|
|
@@ -18,45 +18,54 @@
|
|
|
18
18
|
@description Under the board look: saved views as chips and the Save view button, in row 1 after the quick-filter chips.
|
|
19
19
|
-->
|
|
20
20
|
<slot name="actions-end" />
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
:aria-label="
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
class="cn-actions-bar__view-toggle-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
:
|
|
58
|
-
|
|
59
|
-
|
|
21
|
+
<!--
|
|
22
|
+
Filter and the view switch are one unit: when row 1 is full they
|
|
23
|
+
wrap together to the start of the next line (the DqZaken board),
|
|
24
|
+
never the switch alone.
|
|
25
|
+
-->
|
|
26
|
+
<div v-if="showSidebarToggle || (showViewToggle && viewSegments.length > 1)"
|
|
27
|
+
class="cn-actions-bar__view-controls"
|
|
28
|
+
data-testid="cn-actions-bar-view-controls">
|
|
29
|
+
<NcButton v-if="showSidebarToggle"
|
|
30
|
+
variant="secondary"
|
|
31
|
+
class="cn-actions-bar__filter-button"
|
|
32
|
+
data-testid="cn-actions-bar-filter-button"
|
|
33
|
+
:pressed="sidebarOpen"
|
|
34
|
+
@click="$emit('toggle-sidebar')">
|
|
35
|
+
<template #icon>
|
|
36
|
+
<Tune :size="16" />
|
|
37
|
+
</template>
|
|
38
|
+
{{ t('nextcloud-vue', 'Filter') }}
|
|
39
|
+
<span
|
|
40
|
+
v-if="filterCount > 0"
|
|
41
|
+
class="cn-actions-bar__filter-badge"
|
|
42
|
+
data-testid="cn-actions-bar-filter-badge"
|
|
43
|
+
:aria-label="filterCountLabel">{{ filterCount }}</span>
|
|
44
|
+
</NcButton>
|
|
45
|
+
<div v-if="showViewToggle && viewSegments.length > 1"
|
|
46
|
+
class="cn-actions-bar__view-toggle"
|
|
47
|
+
role="group"
|
|
48
|
+
:aria-label="t('nextcloud-vue', 'View')">
|
|
49
|
+
<button
|
|
50
|
+
v-for="seg in viewSegments"
|
|
51
|
+
:key="seg.mode"
|
|
52
|
+
type="button"
|
|
53
|
+
class="cn-actions-bar__view-toggle-btn"
|
|
54
|
+
:class="{ 'cn-actions-bar__view-toggle-btn--active': viewMode === seg.mode }"
|
|
55
|
+
:aria-pressed="viewMode === seg.mode"
|
|
56
|
+
:aria-label="seg.label"
|
|
57
|
+
:title="seg.label"
|
|
58
|
+
@click="$emit('view-mode-change', seg.mode)">
|
|
59
|
+
<CnIcon v-if="seg.icon"
|
|
60
|
+
:name="seg.icon"
|
|
61
|
+
:size="24"
|
|
62
|
+
class="cn-actions-bar__view-toggle-icon" />
|
|
63
|
+
<component :is="seg.fallback"
|
|
64
|
+
v-else
|
|
65
|
+
:size="24"
|
|
66
|
+
class="cn-actions-bar__view-toggle-icon" />
|
|
67
|
+
</button>
|
|
68
|
+
</div>
|
|
60
69
|
</div>
|
|
61
70
|
</div>
|
|
62
71
|
<div v-if="!isBoardLayout" class="cn-actions-bar__info">
|
|
@@ -66,6 +66,7 @@ import CnAiChatPanel from './CnAiChatPanel.vue'
|
|
|
66
66
|
import CnAiFloatingButton from './CnAiFloatingButton.vue'
|
|
67
67
|
import { chatHealthUrl, DEFAULT_CHAT_APP_ID } from '../../composables/aiChatConfig.js'
|
|
68
68
|
import { useAiChatStream } from '../../composables/useAiChatStream.js'
|
|
69
|
+
import { isAppInstalled } from '../../utils/appInstalled.js'
|
|
69
70
|
|
|
70
71
|
const HEALTH_TIMEOUT = 5000
|
|
71
72
|
|
|
@@ -340,6 +341,15 @@ export default {
|
|
|
340
341
|
}
|
|
341
342
|
},
|
|
342
343
|
|
|
344
|
+
/**
|
|
345
|
+
* Ask the chat backend whether it can answer, and render only if so.
|
|
346
|
+
*
|
|
347
|
+
* Skipped without a request when the backend app is not installed for
|
|
348
|
+
* this user.
|
|
349
|
+
*
|
|
350
|
+
* @return {Promise<void>}
|
|
351
|
+
* @spec openspec/changes/no-calls-to-missing-apps-and-presence-beacon/specs/ai-companion/spec.md#requirement-the-companion-does-not-probe-a-backend-that-is-not-installed
|
|
352
|
+
*/
|
|
343
353
|
async runHealthProbe() {
|
|
344
354
|
// RETRY before hiding. A single probe makes the whole companion
|
|
345
355
|
// disappear on one slow response, and "slow" is normal: measured on a
|
|
@@ -351,6 +361,19 @@ export default {
|
|
|
351
361
|
//
|
|
352
362
|
// A backend that is genuinely down fails all attempts and is still
|
|
353
363
|
// reported; this only stops one unlucky request from deciding.
|
|
364
|
+
//
|
|
365
|
+
// 🔴 NO PROBE AT AN APP THAT IS NOT THERE. Nextcloud already tells
|
|
366
|
+
// the page which apps the user has (`OC.appswebroots`), so asking a
|
|
367
|
+
// missing backend for its health is a guaranteed 404, three times
|
|
368
|
+
// per page, in every console. Measured on cloud.conduction.nl
|
|
369
|
+
// (round-5 check): hermiq not installed, three
|
|
370
|
+
// `/apps/hermiq/api/chat/health` 404s on every pipelinq and dossiq
|
|
371
|
+
// page. Hidden either way; now hidden without the requests.
|
|
372
|
+
if (!isAppInstalled(this.chatAppId || DEFAULT_CHAT_APP_ID)) {
|
|
373
|
+
this.probeSucceeded = false
|
|
374
|
+
return
|
|
375
|
+
}
|
|
376
|
+
|
|
354
377
|
for (let attempt = 1; attempt <= HEALTH_PROBE_ATTEMPTS; attempt++) {
|
|
355
378
|
try {
|
|
356
379
|
const response = await axios.get(chatHealthUrl(this.chatAppId), {
|
|
@@ -3724,6 +3724,7 @@ export default {
|
|
|
3724
3724
|
* entry continues there (local mirror + per-user preference).
|
|
3725
3725
|
*
|
|
3726
3726
|
* @spec openspec/changes/walkthrough-advance-pause-resume/specs/cn-walkthrough/spec.md
|
|
3727
|
+
* @spec openspec/changes/walkthrough-autostart-and-countdown-dutch/specs/walkthrough-autostart-and-countdown-dutch/spec.md#requirement-a-tour-that-opens-on-its-own-opens-once
|
|
3727
3728
|
* @param {object} progress `{ tourId, stepId, index }` from CnWalkthrough.
|
|
3728
3729
|
* @return {void}
|
|
3729
3730
|
*/
|
|
@@ -3731,9 +3732,18 @@ export default {
|
|
|
3731
3732
|
if (!progress || !progress.tourId) {
|
|
3732
3733
|
return
|
|
3733
3734
|
}
|
|
3734
|
-
//
|
|
3735
|
-
// so it
|
|
3735
|
+
// A fresh tour that opens on its own is recorded as paused at its
|
|
3736
|
+
// first step, so a user who never touches it does not get it again
|
|
3737
|
+
// on every page load; "Continue" in the settings brings it back.
|
|
3738
|
+
// Kept out of memory so the open tour runs on as it is.
|
|
3736
3739
|
if (progress.index === 0 && !this.walkthroughProgressValue) {
|
|
3740
|
+
persistWalkthroughProgress(this.appId, this.walkthroughConfigKey, {
|
|
3741
|
+
tourId: progress.tourId,
|
|
3742
|
+
stepId: progress.stepId || '',
|
|
3743
|
+
index: 0,
|
|
3744
|
+
version: String((this.manifest && this.manifest.version) || ''),
|
|
3745
|
+
paused: true,
|
|
3746
|
+
})
|
|
3737
3747
|
return
|
|
3738
3748
|
}
|
|
3739
3749
|
const value = {
|
|
@@ -308,6 +308,7 @@
|
|
|
308
308
|
import { translate as t } from '@nextcloud/l10n'
|
|
309
309
|
import CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'
|
|
310
310
|
import { normalizeLook } from '../../composables/useLook.js'
|
|
311
|
+
import { isBadgeVariant } from '../../utils/badgeVariants.js'
|
|
311
312
|
import { buildBoardColumns, resolveStageColor } from '../../utils/boardColumns.js'
|
|
312
313
|
import { buildSwimlanes } from '../../utils/boardSwimlanes.js'
|
|
313
314
|
import { DROP_OUTCOMES, runBoardDrop } from '../../utils/boardTransition.js'
|
|
@@ -688,7 +689,7 @@ export default {
|
|
|
688
689
|
pillVariant(card) {
|
|
689
690
|
const raw = this.textOf(readPath(card, this.roles.pill))
|
|
690
691
|
const variant = this.roles.pillColors[raw] ?? this.roles.pillColors[raw.toLowerCase()]
|
|
691
|
-
return
|
|
692
|
+
return isBadgeVariant(variant) ? variant : 'default'
|
|
692
693
|
},
|
|
693
694
|
|
|
694
695
|
/**
|
|
@@ -89,6 +89,7 @@ fall back to the normal rendering. See `docs/migrating-to-manifest.md` →
|
|
|
89
89
|
Column widget — `widget="badge"`, `widget="fkResolve"` (uuid → related object label via the shared object store with per-schema caching; config `widgetProps { register, schema, labelField }`), and `widget="link"` are built-in; any other id resolves against the app's `cellWidgets` registry (`CnAppRoot`'s `cellWidgets` prop → `cnCellWidgets`), and that component receives `{ value, row, property, formatted, ...widgetProps }`. `widget` takes precedence over `formatter`; when both are set the widget gets the formatter-shaped value as `formatted`. See `docs/migrating-to-manifest.md` → "Column widgets" + "Built-in cell formatters / widgets".
|
|
90
90
|
|
|
91
91
|
- `widget="badge"` — `CnStatusBadge` pill; `widgetProps.variant` picks the colour.
|
|
92
|
+
An enum value shows its `x-enum-labels` label, translated, as the plain enum cell does; a column `formatter` still wins. `widgetProps.colorMap` is looked up by the stored value when it has an entry for it, else by the label. The `link` widget and the `swatch` format show the same label.
|
|
92
93
|
- `widget="link"` — `<router-link>` when `widgetProps.route` is a manifest page id, or when `widgetProps.routeMap` maps the row's `widgetProps.routeField` value to one (a value the map does not hold falls back to `route`, then to text); `<a target="_blank">` when `widgetProps.href` is set (with `{key}` placeholders substituted from the row); plain text + once-per-session `console.warn` when neither resolves (silence with `widgetProps.fallback:"silent"`). For non-`id` route params: `widgetProps.params: { routeParam: "rowField" }`. Default param map is `{ id: row[rowKey] }` — see the `row-key` prop below.
|
|
93
94
|
|
|
94
95
|
```vue
|