@conduction/nextcloud-vue 2.79.0 → 2.81.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/esm/components/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js +3 -1
- package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +32 -3
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +13 -11
- package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js +80 -4
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue2.js.map +1 -1
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js +95 -91
- package/dist/esm/components/CnAppRoot/CnAppRoot.vue3.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +179 -13
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js +52 -16
- package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +96 -4
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +158 -110
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js +10 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue.js.map +1 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js +252 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js +140 -0
- package/dist/esm/components/CnChipsFieldWidget/CnChipsFieldWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnChipsFieldWidget/index.js +26 -0
- package/dist/esm/components/CnChipsFieldWidget/index.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js +10 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js +354 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js +172 -0
- package/dist/esm/components/CnChoicePickerWidget/CnChoicePickerWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnChoicePickerWidget/index.js +27 -0
- package/dist/esm/components/CnChoicePickerWidget/index.js.map +1 -0
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnConversationThread/CnConversationWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js +2 -2
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardGrid/CnDashboardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js +65 -5
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js +2 -1
- package/dist/esm/components/CnDashboardPage/CnDashboardPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +19 -11
- 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/CnDetailPage/CnDetailPage.vue2.js +134 -4
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +21 -4
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +24 -0
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +43 -4
- package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js +1 -1
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnDocumentReviewList/CnDocumentReviewWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js +7 -7
- package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnFacetSidebar/CnFacetSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +11 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +867 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +238 -0
- package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnFactsWidget/index.js +30 -0
- package/dist/esm/components/CnFactsWidget/index.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +10 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +626 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +396 -0
- package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnFieldListWidget/index.js +29 -0
- package/dist/esm/components/CnFieldListWidget/index.js.map +1 -0
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +302 -4
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +417 -244
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js +101 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowser.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js +141 -1
- package/dist/esm/components/CnFilesBrowser/filesBrowserColumns.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +65 -17
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +4 -4
- package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +78 -3
- package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
- package/dist/esm/components/CnFormPage/CnFormPage.vue3.js +74 -49
- package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +333 -73
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +79 -17
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +10 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js.map +1 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +99 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +48 -0
- package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -0
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js +7 -7
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexSidebar/CnIndexSidebar.vue3.js.map +1 -1
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js +1 -1
- package/dist/esm/components/CnNextStepCard/CnNextStepWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +65 -2
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js +6 -2
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +63 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +8 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js +14 -0
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js +5 -1
- package/dist/esm/components/CnObjectSidebar/CnNotesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js +29 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js +10 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js +174 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js +75 -0
- package/dist/esm/components/CnRadioCardsWidget/CnRadioCardsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnRadioCardsWidget/index.js +28 -0
- package/dist/esm/components/CnRadioCardsWidget/index.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +10 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +411 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +178 -0
- package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnRecordListWidget/index.js +31 -0
- package/dist/esm/components/CnRecordListWidget/index.js.map +1 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js +10 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js +222 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js +64 -0
- package/dist/esm/components/CnSavedViewsWidget/CnSavedViewsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSavedViewsWidget/index.js +30 -0
- package/dist/esm/components/CnSavedViewsWidget/index.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js +10 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js +351 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js +71 -0
- package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSectionsWidget/index.js +35 -0
- package/dist/esm/components/CnSectionsWidget/index.js.map +1 -0
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue2.js.map +1 -1
- package/dist/esm/components/CnSegmentedControl/CnSegmentedControl.vue3.js.map +1 -1
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js +10 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js +347 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js +184 -0
- package/dist/esm/components/CnSettingsFormWidget/CnSettingsFormWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSettingsFormWidget/index.js +27 -0
- package/dist/esm/components/CnSettingsFormWidget/index.js.map +1 -0
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +81 -2
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js +87 -6
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +1 -0
- package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js +84 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js +85 -41
- package/dist/esm/components/CnStatsBlockWidget/CnStatsBlockWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js +10 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue.js.map +1 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js +159 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js +60 -0
- package/dist/esm/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnSwitchRowsWidget/index.js +26 -0
- package/dist/esm/components/CnSwitchRowsWidget/index.js.map +1 -0
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +168 -7
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +86 -23
- package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js +80 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js +75 -32
- package/dist/esm/components/CnTasksWidget/CnTasksWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js +10 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue.js.map +1 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js +269 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue2.js.map +1 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js +106 -0
- package/dist/esm/components/CnToggleTableWidget/CnToggleTableWidget.vue3.js.map +1 -0
- package/dist/esm/components/CnToggleTableWidget/index.js +27 -0
- package/dist/esm/components/CnToggleTableWidget/index.js.map +1 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +11 -0
- package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +7 -2
- 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/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
- package/dist/esm/components/CnWidgetObjectTable/dashboardRegistration.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +301 -6
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +153 -55
- package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
- package/dist/esm/composables/useFormDraft.js +140 -9
- package/dist/esm/composables/useFormDraft.js.map +1 -1
- package/dist/esm/composables/useListView.js +4 -4
- package/dist/esm/composables/useListView.js.map +1 -1
- package/dist/esm/index.js +21 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +28 -20
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js +9 -0
- package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
- package/dist/esm/integrations/builtin/field-inspection.js +21 -0
- package/dist/esm/integrations/builtin/field-inspection.js.map +1 -1
- package/dist/esm/integrations/offline/checklistSubmission.js +141 -0
- package/dist/esm/integrations/offline/checklistSubmission.js.map +1 -0
- package/dist/esm/integrations/offline/fieldCollectionHelpers.js +70 -5
- package/dist/esm/integrations/offline/fieldCollectionHelpers.js.map +1 -1
- package/dist/esm/integrations/offline/index.js +2 -1
- package/dist/esm/integrations/offline/index.js.map +1 -1
- package/dist/esm/integrations/offline/offlineDb.js +6 -1
- package/dist/esm/integrations/offline/offlineDb.js.map +1 -1
- package/dist/esm/integrations/offline/syncReplayService.js +8 -2
- package/dist/esm/integrations/offline/syncReplayService.js.map +1 -1
- package/dist/esm/l10n/en.json.js +20 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +70 -2
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +2192 -222
- package/dist/esm/utils/contentHeaderLink.js +51 -0
- package/dist/esm/utils/contentHeaderLink.js.map +1 -0
- package/dist/esm/utils/detailActionModel.js +60 -3
- package/dist/esm/utils/detailActionModel.js.map +1 -1
- package/dist/esm/utils/facets.js +75 -3
- package/dist/esm/utils/facets.js.map +1 -1
- package/dist/esm/utils/fetchFilterCounts.js +40 -5
- package/dist/esm/utils/fetchFilterCounts.js.map +1 -1
- package/dist/esm/utils/fillTemplate.js +120 -0
- package/dist/esm/utils/fillTemplate.js.map +1 -0
- package/dist/esm/utils/initials.js +32 -0
- package/dist/esm/utils/initials.js.map +1 -0
- package/dist/esm/utils/libraryWidgetKeys.js +11 -0
- package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
- package/dist/esm/utils/objectWrite.js +59 -0
- package/dist/esm/utils/objectWrite.js.map +1 -0
- package/dist/esm/utils/pageControls.js +81 -0
- package/dist/esm/utils/pageControls.js.map +1 -0
- package/dist/esm/utils/personalLenses.js +40 -3
- package/dist/esm/utils/personalLenses.js.map +1 -1
- package/dist/esm/utils/queryPresets.js +96 -0
- package/dist/esm/utils/queryPresets.js.map +1 -0
- package/dist/esm/utils/resolveFilterTokens.js +12 -1
- package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
- package/dist/esm/utils/resolveManifestTokens.js +2 -0
- package/dist/esm/utils/resolveManifestTokens.js.map +1 -1
- package/dist/esm/utils/schema.js +21 -0
- package/dist/esm/utils/schema.js.map +1 -1
- package/dist/esm/utils/sentinelTokens.js +22 -4
- package/dist/esm/utils/sentinelTokens.js.map +1 -1
- package/dist/esm/utils/userGroupsPeek.js +91 -0
- package/dist/esm/utils/userGroupsPeek.js.map +1 -0
- package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/visibleWhen.js +57 -5
- package/dist/esm/utils/visibleWhen.js.map +1 -1
- package/dist/esm/utils/widgetDispatch.js +7 -1
- package/dist/esm/utils/widgetDispatch.js.map +1 -1
- package/dist/esm/utils/widgetVisibility.js +4 -57
- package/dist/esm/utils/widgetVisibility.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +19708 -9301
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +2192 -222
- package/l10n/en.json +20 -1
- package/l10n/nl.json +70 -2
- package/package.json +2 -1
- package/scripts/check-docs-mdx.mjs +108 -0
- package/src/components/CnActionButtons/CnActionButtons.vue +2 -0
- package/src/components/CnActionsBar/CnActionsBar.md +4 -0
- package/src/components/CnActionsBar/CnActionsBar.vue +48 -11
- package/src/components/CnAppRoot/CnAppRoot.md +4 -2
- package/src/components/CnAppRoot/CnAppRoot.vue +151 -59
- package/src/components/CnBannerWidget/CnBannerWidget.vue +244 -23
- package/src/components/CnCellRenderer/CnCellRenderer.md +2 -0
- package/src/components/CnCellRenderer/CnCellRenderer.vue +235 -5
- package/src/components/CnChipsFieldWidget/CnChipsFieldWidget.vue +433 -0
- package/src/components/CnChipsFieldWidget/index.js +25 -0
- package/src/components/CnChoicePickerWidget/CnChoicePickerWidget.vue +556 -0
- package/src/components/CnChoicePickerWidget/index.js +26 -0
- package/src/components/CnConversationThread/CnConversationWidget.vue +1 -1
- package/src/components/CnDashboardGrid/CnDashboardGrid.vue +2 -2
- package/src/components/CnDashboardPage/CnDashboardPage.vue +78 -5
- package/src/components/CnDataTable/CnDataTable.vue +22 -12
- package/src/components/CnDetailPage/CnDetailPage.md +1 -1
- package/src/components/CnDetailPage/CnDetailPage.vue +152 -6
- package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +66 -0
- package/src/components/CnDocumentReviewList/CnDocumentReviewWidget.vue +1 -1
- package/src/components/CnFacetSidebar/CnFacetSidebar.vue +7 -7
- package/src/components/CnFactsWidget/CnFactsWidget.vue +1190 -0
- package/src/components/CnFactsWidget/index.js +29 -0
- package/src/components/CnFieldListWidget/CnFieldListWidget.vue +1008 -0
- package/src/components/CnFieldListWidget/index.js +28 -0
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +588 -117
- package/src/components/CnFilesBrowser/filesBrowser.js +100 -0
- package/src/components/CnFilesBrowser/filesBrowserColumns.js +140 -0
- package/src/components/CnFormDialog/CnFormDialog.md +9 -3
- package/src/components/CnFormDialog/CnFormDialog.vue +69 -21
- package/src/components/CnFormPage/CnFormPage.vue +99 -3
- package/src/components/CnIndexPage/CnIndexPage.vue +309 -9
- package/src/components/CnIndexPage/CnIndexPageWidgets.vue +169 -0
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +7 -7
- package/src/components/CnNextStepCard/CnNextStepWidget.vue +1 -1
- package/src/components/CnObjectListWidget/CnObjectListWidget.vue +69 -2
- package/src/components/CnObjectSidebar/CnFilesTab.vue +70 -1
- package/src/components/CnObjectSidebar/CnNotesTab.vue +16 -0
- package/src/components/CnPageRenderer/CnPageRenderer.vue +29 -1
- package/src/components/CnRadioCardsWidget/CnRadioCardsWidget.vue +313 -0
- package/src/components/CnRadioCardsWidget/index.js +27 -0
- package/src/components/CnRecordListWidget/CnRecordListWidget.vue +652 -0
- package/src/components/CnRecordListWidget/index.js +30 -0
- package/src/components/CnSavedViewsWidget/CnSavedViewsWidget.vue +296 -0
- package/src/components/CnSavedViewsWidget/index.js +29 -0
- package/src/components/CnSectionsWidget/CnSectionsWidget.vue +489 -0
- package/src/components/CnSectionsWidget/index.js +34 -0
- package/src/components/CnSegmentedControl/CnSegmentedControl.vue +13 -0
- package/src/components/CnSettingsFormWidget/CnSettingsFormWidget.vue +555 -0
- package/src/components/CnSettingsFormWidget/index.js +26 -0
- package/src/components/CnStagesWidget/CnStagesWidget.vue +81 -2
- package/src/components/CnStatWidget/CnStatWidget.vue +88 -7
- package/src/components/CnStatsBlockWidget/CnStatsBlockWidget.vue +180 -3
- package/src/components/CnSwitchRowsWidget/CnSwitchRowsWidget.vue +226 -0
- package/src/components/CnSwitchRowsWidget/index.js +25 -0
- package/src/components/CnTabsWidget/CnTabsWidget.vue +263 -8
- package/src/components/CnTasksWidget/CnTasksWidget.vue +175 -15
- package/src/components/CnToggleTableWidget/CnToggleTableWidget.vue +386 -0
- package/src/components/CnToggleTableWidget/index.js +26 -0
- package/src/components/CnWidgetGrid/registerDashboardWidgets.js +11 -0
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +7 -2
- package/src/components/CnWidgetObjectTable/dashboardRegistration.js +5 -0
- package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +493 -11
- package/src/components/index.js +19 -0
- package/src/composables/__tests__/useFormDraft.spec.js +69 -0
- package/src/composables/useFormDraft.js +139 -8
- package/src/composables/useListView.js +4 -4
- package/src/css/form-field.css +14 -0
- package/src/css/index-page.css +71 -0
- package/src/css/kpi-card.css +32 -0
- package/src/css/look-board-detail.css +113 -2
- package/src/css/look-board-index.css +90 -8
- package/src/css/look-board.css +109 -2
- package/src/css/table.css +19 -0
- package/src/index.js +19 -0
- package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +35 -20
- package/src/integrations/builtin/field-inspection.js +21 -0
- package/src/integrations/offline/checklistSubmission.js +137 -0
- package/src/integrations/offline/fieldCollectionHelpers.js +69 -4
- package/src/integrations/offline/index.js +3 -0
- package/src/integrations/offline/offlineDb.js +6 -1
- package/src/integrations/offline/syncReplayService.js +8 -2
- package/src/schemas/app-manifest-v2.schema.json +196 -13
- package/src/utils/contentHeaderLink.js +48 -0
- package/src/utils/detailActionModel.js +59 -2
- package/src/utils/facets.js +74 -2
- package/src/utils/fetchFilterCounts.js +39 -4
- package/src/utils/fillTemplate.js +116 -0
- package/src/utils/initials.js +29 -0
- package/src/utils/libraryWidgetKeys.js +11 -0
- package/src/utils/objectWrite.js +55 -0
- package/src/utils/pageControls.js +78 -0
- package/src/utils/personalLenses.js +39 -2
- package/src/utils/queryPresets.js +93 -0
- package/src/utils/resolveFilterTokens.js +14 -1
- package/src/utils/resolveManifestTokens.js +2 -0
- package/src/utils/schema.js +21 -0
- package/src/utils/sentinelTokens.js +22 -4
- package/src/utils/userGroupsPeek.js +87 -0
- package/src/utils/validateManifestV2.compiled.js +3 -3
- package/src/utils/visibleWhen.js +56 -4
- package/src/utils/widgetDispatch.js +7 -1
- package/src/utils/widgetVisibility.js +7 -56
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CnFieldListWidget.vue2.js","sources":["../../../../src/components/CnFieldListWidget/CnFieldListWidget.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Conduction B.V.\n - SPDX-License-Identifier: EUPL-1.2\n-->\n\n<template>\n\t<div class=\"cn-field-list-widget\" data-testid=\"cn-field-list-widget\">\n\t\t<div v-if=\"canAdd && addTrigger && addPlacement === 'header'\" class=\"cn-field-list-widget__toolbar\">\n\t\t\t<NcButton\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-open-add\"\n\t\t\t\t@click=\"adding = !adding\">\n\t\t\t\t+ {{ addLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<form\n\t\t\tv-if=\"canAdd && addTrigger && addPlacement === 'header' && adding\"\n\t\t\tclass=\"cn-field-list-widget__add\"\n\t\t\tdata-testid=\"cn-field-list-add\"\n\t\t\t@submit.prevent=\"add\">\n\t\t\t<div\n\t\t\t\tv-for=\"field in addFields\"\n\t\t\t\t:key=\"field.key\"\n\t\t\t\tclass=\"cn-field-list-widget__field\"\n\t\t\t\t:data-testid=\"`cn-field-list-input-${field.key}`\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-if=\"field.type === 'select'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-else\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:error=\"Boolean(errors[field.key])\"\n\t\t\t\t\t:helperText=\"errors[field.key] || ''\" />\n\t\t\t</div>\n\t\t\t<NcButton type=\"submit\"\n\t\t\t\tvariant=\"primary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-submit\">\n\t\t\t\t{{ addLabel }}\n\t\t\t</NcButton>\n\t\t</form>\n\t\t<p v-if=\"rows.length === 0\" class=\"cn-field-list-widget__empty\" data-testid=\"cn-field-list-empty\">\n\t\t\t{{ emptyLabel }}\n\t\t</p>\n\t\t<div v-else-if=\"isTable\" class=\"cn-field-list-widget__table-wrap\">\n\t\t\t<table class=\"cn-field-list-widget__table\" data-testid=\"cn-field-list-table\">\n\t\t\t\t<thead>\n\t\t\t\t\t<tr>\n\t\t\t\t\t\t<th\n\t\t\t\t\t\t\tv-for=\"column in tableColumns\"\n\t\t\t\t\t\t\t:key=\"column.key\"\n\t\t\t\t\t\t\tscope=\"col\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__th\">\n\t\t\t\t\t\t\t{{ column.header }}\n\t\t\t\t\t\t</th>\n\t\t\t\t\t\t<th v-if=\"hasMenu\" scope=\"col\" class=\"cn-field-list-widget__th cn-field-list-widget__th--menu\">\n\t\t\t\t\t\t\t<span class=\"cn-field-list-widget__sr\">{{ tr('Actions') }}</span>\n\t\t\t\t\t\t</th>\n\t\t\t\t\t</tr>\n\t\t\t\t</thead>\n\t\t\t\t<tbody>\n\t\t\t\t\t<tr\n\t\t\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t\t\t:key=\"row.key\"\n\t\t\t\t\t\tclass=\"cn-field-list-widget__tr\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-row-${row.key}`\">\n\t\t\t\t\t\t<td\n\t\t\t\t\t\t\tv-for=\"(column, index) in tableColumns\"\n\t\t\t\t\t\t\t:key=\"column.key\"\n\t\t\t\t\t\t\tclass=\"cn-field-list-widget__td\">\n\t\t\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\t\t\tv-if=\"column.pill && row.cells[index].pill\"\n\t\t\t\t\t\t\t\t:label=\"row.cells[index].pill.label\"\n\t\t\t\t\t\t\t\t:variant=\"row.cells[index].pill.variant\"\n\t\t\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t\t\t<strong v-else-if=\"column.strong\">{{ row.cells[index].text }}</strong>\n\t\t\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t\t\t{{ row.cells[index].text }}\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t\t<td v-if=\"hasMenu\" class=\"cn-field-list-widget__td cn-field-list-widget__td--menu\">\n\t\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\t\tv-if=\"menuItems(row).length > 0\"\n\t\t\t\t\t\t\t\t:forceMenu=\"true\"\n\t\t\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t\t\t:ariaLabel=\"`${tr('More actions')}: ${row.title}`\"\n\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-menu-${row.key}`\">\n\t\t\t\t\t\t\t\t<NcActionButton\n\t\t\t\t\t\t\t\t\tv-for=\"item in menuItems(row)\"\n\t\t\t\t\t\t\t\t\t:key=\"item.id\"\n\t\t\t\t\t\t\t\t\t:data-testid=\"`cn-field-list-menu-${item.id}-${row.key}`\"\n\t\t\t\t\t\t\t\t\t@click=\"item.run\">\n\t\t\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>\n\t\t\t\t</tbody>\n\t\t\t</table>\n\t\t\t<div\n\t\t\t\tv-for=\"row in bandRows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-field-list-widget__band\"\n\t\t\t\trole=\"note\"\n\t\t\t\t:data-testid=\"`cn-field-list-band-${row.key}`\">\n\t\t\t\t<span class=\"cn-field-list-widget__band-text\">{{ row.detail }}</span>\n\t\t\t\t<NcButton\n\t\t\t\t\tv-for=\"action in row.bandActions\"\n\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t:data-testid=\"`cn-field-list-band-action-${action.id}-${row.key}`\"\n\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t{{ action.label }}\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\t\t</div>\n\t\t<ul v-else class=\"cn-field-list-widget__rows\">\n\t\t\t<li\n\t\t\t\tv-for=\"row in rows\"\n\t\t\t\t:key=\"row.key\"\n\t\t\t\tclass=\"cn-field-list-widget__row\"\n\t\t\t\t:data-testid=\"`cn-field-list-row-${row.key}`\">\n\t\t\t\t<div class=\"cn-field-list-widget__line\">\n\t\t\t\t\t<span v-if=\"row.initials\" class=\"cn-field-list-widget__avatar\" aria-hidden=\"true\">{{ row.initials }}</span>\n\t\t\t\t\t<span class=\"cn-field-list-widget__main\">\n\t\t\t\t\t\t<span class=\"cn-field-list-widget__title\">{{ row.title }}</span>\n\t\t\t\t\t\t<span v-if=\"row.meta\" class=\"cn-field-list-widget__meta\">{{ row.meta }}</span>\n\t\t\t\t\t</span>\n\t\t\t\t\t<CnStatusBadge\n\t\t\t\t\t\tv-if=\"row.pill\"\n\t\t\t\t\t\t:label=\"row.pill.label\"\n\t\t\t\t\t\t:variant=\"row.pill.variant\"\n\t\t\t\t\t\tsize=\"small\" />\n\t\t\t\t\t<span v-if=\"row.aside\" class=\"cn-field-list-widget__aside\">{{ row.aside }}</span>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-for=\"action in row.actions\"\n\t\t\t\t\t\t:key=\"action.id\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-action-${action.id}-${row.key}`\"\n\t\t\t\t\t\t@click=\"runAction(action, row)\">\n\t\t\t\t\t\t{{ action.label }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcButton\n\t\t\t\t\t\tv-if=\"canRemove\"\n\t\t\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\t\t\t:aria-label=\"removeAriaLabel(row)\"\n\t\t\t\t\t\t:data-testid=\"`cn-field-list-remove-${row.key}`\"\n\t\t\t\t\t\t@click=\"remove(row)\">\n\t\t\t\t\t\t{{ removeLabel }}\n\t\t\t\t\t</NcButton>\n\t\t\t\t</div>\n\t\t\t\t<p v-if=\"row.detail\" class=\"cn-field-list-widget__detail\">\n\t\t\t\t\t{{ row.detail }}\n\t\t\t\t</p>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<p v-if=\"hint\" class=\"cn-field-list-widget__hint\">\n\t\t\t{{ hint }}\n\t\t</p>\n\n\t\t<div v-if=\"canAdd && addTrigger && addPlacement !== 'header' && !adding\" class=\"cn-field-list-widget__toolbar\">\n\t\t\t<NcButton\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-open-add\"\n\t\t\t\t@click=\"adding = true\">\n\t\t\t\t+ {{ addLabel }}\n\t\t\t</NcButton>\n\t\t</div>\n\t\t<form\n\t\t\tv-if=\"canAdd && !(addTrigger && addPlacement === 'header') && (!addTrigger || adding)\"\n\t\t\tclass=\"cn-field-list-widget__add\"\n\t\t\tdata-testid=\"cn-field-list-add\"\n\t\t\t@submit.prevent=\"add\">\n\t\t\t<div\n\t\t\t\tv-for=\"field in addFields\"\n\t\t\t\t:key=\"field.key\"\n\t\t\t\tclass=\"cn-field-list-widget__field\"\n\t\t\t\t:data-testid=\"`cn-field-list-input-${field.key}`\">\n\t\t\t\t<NcSelect\n\t\t\t\t\tv-if=\"field.type === 'select'\"\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:inputLabel=\"field.label\"\n\t\t\t\t\t:options=\"field.options\"\n\t\t\t\t\t:reduce=\"(option) => option.value\"\n\t\t\t\t\t:clearable=\"false\"\n\t\t\t\t\tlabel=\"label\" />\n\t\t\t\t<NcTextField\n\t\t\t\t\tv-else\n\t\t\t\t\tv-model=\"draft[field.key]\"\n\t\t\t\t\t:label=\"field.label\"\n\t\t\t\t\t:error=\"Boolean(errors[field.key])\"\n\t\t\t\t\t:helperText=\"errors[field.key] || ''\" />\n\t\t\t</div>\n\t\t\t<NcButton type=\"submit\"\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\t:disabled=\"busy !== ''\"\n\t\t\t\tdata-testid=\"cn-field-list-submit\">\n\t\t\t\t{{ addLabel }}\n\t\t\t</NcButton>\n\t\t</form>\n\n\t\t<NcNoteCard v-if=\"notice\" :type=\"noticeType\" data-testid=\"cn-field-list-notice\">\n\t\t\t{{ notice }}\n\t\t</NcNoteCard>\n\t</div>\n</template>\n\n<script>\nimport { NcActionButton, NcActions, NcButton, NcNoteCard, NcSelect, NcTextField } from '@nextcloud/vue'\nimport CnStatusBadge from '../CnStatusBadge/CnStatusBadge.vue'\nimport { isBadgeVariant } from '../../utils/badgeVariants.js'\nimport { formatBoardDate } from '../../utils/boardDate.js'\nimport { parseDateValue } from '../../utils/dateVariant.js'\nimport { prefixUrl } from '../../utils/headers.js'\nimport { readPath } from '../../utils/readPath.js'\nimport { serverErrorMessage } from '../../utils/serverErrorMessage.js'\n\n/**\n * CnFieldListWidget — the `field-list` widget: a list stored INSIDE one field\n * of the current object (a portal's `domains[]`, its `editors[]`), shown as\n * rows and edited in place.\n *\n * Rows are drawn from configuration (title, meta line, pill, aside, a detail\n * line); a small form adds an entry, a button removes one, and each change is\n * saved as ONE PATCH of that field on the object, after re-reading the stored\n * value so a concurrent change to the same list is not overwritten with a\n * stale copy. Optional row actions call a configured endpoint (a \"check\n * again\"), and an optional `rowSource` merges live per-row state read from an\n * endpoint by key without writing it back.\n *\n * The server decides who may write: a refused PATCH shows the server's words\n * and leaves the list as stored.\n *\n * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md\n */\nexport default {\n\tname: 'CnFieldListWidget',\n\n\tcomponents: { CnStatusBadge, NcActionButton, NcActions, NcButton, NcNoteCard, NcSelect, NcTextField },\n\n\tinject: {\n\t\tcnTranslate: { default: () => (key) => key },\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * The widget configuration.\n\t\t *\n\t\t * - `field` (required) — the object field holding the array.\n\t\t * - `key` — the item field that identifies an entry (default: the item itself for strings).\n\t\t * - `row` — `{ title, titleFallback?, avatar?, meta?: [paths|{ path, map?, format? }], pill?: { path, map?, variantMap? }, aside?: { path, format?, prefix?, fallback? }, detail?: { template, when? } }`.\n\t\t * - `add` — `{ label?, fields: [{ key, label, type?: 'text'|'select', options?, required?, pattern?, patternMessage? }], unique?, defaults? }`.\n\t\t * - `remove` — `{ label? }`; omitted = no remove.\n\t\t * - `rowActions` — `[{ id, label, when?, placement?: 'band', request: { method?, url, payload? } }]`; tokens `@object.<field>`, `@objectId`, `@row.<field>`.\n\t\t * - `rowSource` — `{ url, path?, key }`: live per-row state merged by key.\n\t\t * - `variant: 'table'` + `columns` — `[{ header, path, map?, format?, strong?, pill?, variantMap? }]`: rows as a table; a per-row \"...\" menu holds the row actions and remove; `detail` lines become a warning band under the table, with the row actions that have `placement: 'band'`.\n\t\t * - `add.trigger: 'button'`, `add.placement: 'header' | 'footer'` — the add form opens from a button.\n\t\t * - `readOnly`, `hint`, `emptyText`.\n\t\t *\n\t\t * @type {object}\n\t\t */\n\t\tcontent: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\n\t\t/** The current detail-page object. */\n\t\tobjectData: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/** The current object id. */\n\t\tobjectId: {\n\t\t\ttype: [String, Number],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** OpenRegister register slug of the surface. */\n\t\tregister: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/** OpenRegister schema slug of the surface. */\n\t\tschema: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\temits: ['saved'],\n\n\tdata() {\n\t\treturn {\n\t\t\t/** The list as last saved by this widget; null = read it off objectData. */\n\t\t\tsaved: null,\n\t\t\t/** Live per-row state from `rowSource`, by key. */\n\t\t\tlive: {},\n\t\t\tdraft: {},\n\t\t\t/** Whether the add form is open (only with `add.trigger: 'button'`). */\n\t\t\tadding: false,\n\t\t\terrors: {},\n\t\t\tbusy: '',\n\t\t\tnotice: '',\n\t\t\tnoticeType: 'error',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\t/**\n\t\t * The stored list.\n\t\t *\n\t\t * @return {Array}\n\t\t */\n\t\titems() {\n\t\t\tconst list = this.saved !== null ? this.saved : readPath(this.objectData || {}, this.content.field)\n\t\t\treturn Array.isArray(list) ? list : []\n\t\t},\n\n\t\t/**\n\t\t * The rows to draw.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-draws-the-entries-of-one-object-field\n\t\t */\n\t\trows() {\n\t\t\tconst spec = this.content.row || {}\n\t\t\treturn this.items.map((item, index) => {\n\t\t\t\tconst key = this.keyOf(item, index)\n\t\t\t\tconst entry = item && typeof item === 'object'\n\t\t\t\t\t? { ...item, ...(this.live[key] || {}) }\n\t\t\t\t\t: { value: item, ...(this.live[key] || {}) }\n\t\t\t\tconst title = this.text(entry, spec.title) || this.text(entry, spec.titleFallback) || (typeof item === 'string' ? item : key)\n\t\t\t\tconst meta = (Array.isArray(spec.meta) ? spec.meta : [])\n\t\t\t\t\t.map((part) => this.text(entry, part))\n\t\t\t\t\t.filter((part) => part !== '')\n\t\t\t\t\t.join(' · ')\n\t\t\t\treturn {\n\t\t\t\t\tkey,\n\t\t\t\t\titem,\n\t\t\t\t\tentry,\n\t\t\t\t\ttitle,\n\t\t\t\t\tinitials: spec.avatar ? this.initials(title) : '',\n\t\t\t\t\tmeta,\n\t\t\t\t\tpill: this.pillOf(entry, spec.pill),\n\t\t\t\t\taside: spec.aside ? this.asideOf(entry, spec.aside) : '',\n\t\t\t\t\tdetail: spec.detail && this.matches(entry, spec.detail.when) ? this.fill(spec.detail.template, entry) : '',\n\t\t\t\t\tactions: this.actionsFor(entry),\n\t\t\t\t\tcells: this.isTable ? this.cellsOf(entry) : [],\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\t/** Whether the list is read-only. */\n\t\treadOnly() {\n\t\t\treturn this.content.readOnly === true\n\t\t},\n\n\t\t/** Whether entries can be added. */\n\t\tcanAdd() {\n\t\t\treturn !this.readOnly && this.addFields.length > 0 && Boolean(this.content.field)\n\t\t},\n\n\t\t/** Whether entries can be removed. */\n\t\tcanRemove() {\n\t\t\treturn !this.readOnly && Boolean(this.content.remove) && Boolean(this.content.field)\n\t\t},\n\n\t\t/**\n\t\t * The add form's fields, labels translated, select options translated.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\taddFields() {\n\t\t\tconst fields = this.content.add && Array.isArray(this.content.add.fields) ? this.content.add.fields : []\n\t\t\treturn fields\n\t\t\t\t.filter((field) => field && field.key)\n\t\t\t\t.map((field) => ({\n\t\t\t\t\t...field,\n\t\t\t\t\tlabel: this.tr(field.label || field.key),\n\t\t\t\t\toptions: (Array.isArray(field.options) ? field.options : []).map((option) => (\n\t\t\t\t\t\ttypeof option === 'object' ? { value: option.value, label: this.tr(option.label || String(option.value)) } : { value: option, label: this.tr(String(option)) }\n\t\t\t\t\t)),\n\t\t\t\t}))\n\t\t},\n\n\t\t/** Whether the rows are drawn as a table (`variant: 'table'`). */\n\t\tisTable() {\n\t\t\treturn this.content.variant === 'table' && this.tableColumns.length > 0\n\t\t},\n\n\t\t/**\n\t\t * The table columns, headers translated.\n\t\t *\n\t\t * @return {Array<object>}\n\t\t */\n\t\ttableColumns() {\n\t\t\treturn (Array.isArray(this.content.columns) ? this.content.columns : [])\n\t\t\t\t.filter((column) => column && column.path)\n\t\t\t\t.map((column, index) => ({ ...column, key: `${column.path}-${index}`, header: this.tr(column.header || '') }))\n\t\t},\n\n\t\t/** Whether each row has a \"more actions\" menu (row actions not placed in the band, and remove). */\n\t\thasMenu() {\n\t\t\treturn this.isTable && !this.readOnly && (this.canRemove || this.rows.some((row) => this.menuItems(row).length > 0))\n\t\t},\n\n\t\t/** Rows with a detail line: in the table variant it is a warning band under the table. */\n\t\tbandRows() {\n\t\t\treturn this.rows\n\t\t\t\t.filter((row) => row.detail !== '')\n\t\t\t\t.map((row) => ({ ...row, bandActions: row.actions.filter((action) => action.placement === 'band') }))\n\t\t},\n\n\t\t/** Whether the add form opens from a button (`add.trigger: 'button'`). */\n\t\taddTrigger() {\n\t\t\treturn Boolean(this.content.add && this.content.add.trigger === 'button')\n\t\t},\n\n\t\t/** Where the add button sits: `header` (above the rows) or `footer` (default). */\n\t\taddPlacement() {\n\t\t\treturn this.content.add && this.content.add.placement === 'header' ? 'header' : 'footer'\n\t\t},\n\n\t\taddLabel() {\n\t\t\treturn this.tr((this.content.add && this.content.add.label) || 'Add')\n\t\t},\n\n\t\tremoveLabel() {\n\t\t\treturn this.tr((this.content.remove && this.content.remove.label) || 'Remove')\n\t\t},\n\n\t\thint() {\n\t\t\treturn this.tr(this.content.hint || '')\n\t\t},\n\n\t\temptyLabel() {\n\t\t\treturn this.tr(this.content.emptyText || 'Nothing listed yet')\n\t\t},\n\n\t\t/** The object URL the list is saved to, or '' when it is not known. */\n\t\tobjectUrl() {\n\t\t\tconst id = this.objectId || (this.objectData && this.objectData.id)\n\t\t\tif (!this.register || !this.schema || !id || typeof this.register !== 'string' || typeof this.schema !== 'string') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn `/apps/openregister/api/objects/${encodeURIComponent(this.register)}/${encodeURIComponent(this.schema)}/${encodeURIComponent(String(id))}`\n\t\t},\n\t},\n\n\twatch: {\n\t\tobjectData() {\n\t\t\tthis.saved = null\n\t\t\tthis.loadLive()\n\t\t},\n\t},\n\n\tcreated() {\n\t\tthis.resetDraft()\n\t\tthis.loadLive()\n\t},\n\n\tmethods: {\n\t\ttr(text) {\n\t\t\tif (typeof text !== 'string' || text === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn typeof this.cnTranslate === 'function' ? this.cnTranslate(text) : text\n\t\t},\n\n\t\t/**\n\t\t * The cells of one table row, one per column.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @return {Array<{text: string, pill: object|null}>}\n\t\t */\n\t\tcellsOf(entry) {\n\t\t\treturn this.tableColumns.map((column) => ({\n\t\t\t\ttext: this.text(entry, column),\n\t\t\t\tpill: column.pill ? this.pillOf(entry, column) : null,\n\t\t\t}))\n\t\t},\n\n\t\t/**\n\t\t * The items of a row's menu in the table variant: the row actions not\n\t\t * placed in the band, then remove.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Array<{id: string, label: string, run: Function}>}\n\t\t */\n\t\tmenuItems(row) {\n\t\t\tconst items = row.actions\n\t\t\t\t.filter((action) => action.placement !== 'band')\n\t\t\t\t.map((action) => ({ id: action.id, label: action.label, run: () => this.runAction(action, row) }))\n\t\t\tif (this.canRemove) {\n\t\t\t\titems.push({ id: 'remove', label: this.removeLabel, run: () => this.remove(row) })\n\t\t\t}\n\t\t\treturn items\n\t\t},\n\n\t\t/**\n\t\t * The identity of an entry.\n\t\t *\n\t\t * @param {unknown} item The entry.\n\t\t * @param {number} index Its position.\n\t\t * @return {string}\n\t\t */\n\t\tkeyOf(item, index) {\n\t\t\tif (item === null || typeof item !== 'object') {\n\t\t\t\treturn String(item)\n\t\t\t}\n\t\t\tconst key = this.content.key ? readPath(item, this.content.key) : undefined\n\t\t\treturn key === undefined || key === null || key === '' ? `item-${index}` : String(key)\n\t\t},\n\n\t\t/**\n\t\t * A display text off an entry: a path, or `{ path, map?, format? }`.\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {string|object} spec The spec.\n\t\t * @return {string}\n\t\t */\n\t\ttext(entry, spec) {\n\t\t\tif (!spec) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tconst def = typeof spec === 'string' ? { path: spec } : spec\n\t\t\tconst raw = readPath(entry, def.path)\n\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tif (def.format === 'date' || def.format === 'date-long') {\n\t\t\t\tconst date = parseDateValue(raw)\n\t\t\t\tif (date === null) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\t\t\t\treturn def.format === 'date-long' ? formatBoardDate(date, new Date(date.getFullYear() + 1, 0, 1)) : formatBoardDate(date)\n\t\t\t}\n\t\t\tif (def.map && Object.hasOwn(def.map, String(raw))) {\n\t\t\t\treturn this.tr(def.map[String(raw)])\n\t\t\t}\n\t\t\treturn typeof raw === 'object' ? '' : String(raw)\n\t\t},\n\n\t\tpillOf(entry, spec) {\n\t\t\tif (!spec || !spec.path) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst raw = readPath(entry, spec.path)\n\t\t\tif (raw === null || raw === undefined || raw === '') {\n\t\t\t\treturn null\n\t\t\t}\n\t\t\tconst label = this.text(entry, spec)\n\t\t\tconst variant = spec.variantMap && spec.variantMap[String(raw)]\n\t\t\treturn { label, variant: isBadgeVariant(variant) ? variant : 'default' }\n\t\t},\n\n\t\tasideOf(entry, spec) {\n\t\t\tconst value = this.text(entry, spec)\n\t\t\tif (value === '') {\n\t\t\t\t// No value: the optional `fallback` label, translated, instead of an empty aside.\n\t\t\t\treturn this.tr(spec.fallback)\n\t\t\t}\n\t\t\treturn spec.prefix ? `${this.tr(spec.prefix)} ${value}` : value\n\t\t},\n\n\t\t/**\n\t\t * Whether an entry matches a `{ field: value }` condition (every field equal).\n\t\t *\n\t\t * @param {object} entry The entry.\n\t\t * @param {object|undefined} when The condition.\n\t\t * @return {boolean}\n\t\t */\n\t\tmatches(entry, when) {\n\t\t\tif (!when || typeof when !== 'object') {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn Object.entries(when).every(([field, expected]) => {\n\t\t\t\tconst actual = readPath(entry, field)\n\t\t\t\tif (expected === false) {\n\t\t\t\t\treturn actual === false || actual === undefined || actual === null || actual === ''\n\t\t\t\t}\n\t\t\t\treturn String(actual) === String(expected)\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Fill `{path}` placeholders from an entry; '' when one stays empty.\n\t\t *\n\t\t * @param {string} template The template, translated first.\n\t\t * @param {object} entry The entry.\n\t\t * @return {string}\n\t\t */\n\t\tfill(template, entry) {\n\t\t\tif (typeof template !== 'string') {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\tlet missing = false\n\t\t\tconst out = this.tr(template).replace(/\\{([\\w.@]+)\\}/g, (match, path) => {\n\t\t\t\tconst value = readPath(entry, path)\n\t\t\t\tif (value === undefined || value === null || value === '') {\n\t\t\t\t\tmissing = true\n\t\t\t\t\treturn match\n\t\t\t\t}\n\t\t\t\treturn String(value)\n\t\t\t})\n\t\t\treturn missing ? '' : out\n\t\t},\n\n\t\tactionsFor(entry) {\n\t\t\tif (this.readOnly) {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\tconst actions = Array.isArray(this.content.rowActions) ? this.content.rowActions : []\n\t\t\treturn actions\n\t\t\t\t.filter((action) => action && action.id && action.request && action.request.url && this.matches(entry, action.when))\n\t\t\t\t.map((action) => ({ ...action, label: this.tr(action.label || action.id) }))\n\t\t},\n\n\t\tinitials(name) {\n\t\t\treturn String(name || '').split(/[\\s@._-]+/).filter(Boolean).slice(0, 2).map((part) => part.charAt(0).toUpperCase()).join('')\n\t\t},\n\n\t\tremoveAriaLabel(row) {\n\t\t\treturn `${this.removeLabel}: ${row.title}`\n\t\t},\n\n\t\tresetDraft() {\n\t\t\tconst draft = {}\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst first = field.type === 'select' && field.options.length > 0 ? field.options[0].value : ''\n\t\t\t\tdraft[field.key] = field.default !== undefined ? field.default : first\n\t\t\t}\n\t\t\tthis.draft = draft\n\t\t\tthis.errors = {}\n\t\t},\n\n\t\t/**\n\t\t * Resolve `@objectId`, `@object.<field>` and `@row.<field>` inside a string or a payload.\n\t\t *\n\t\t * @param {unknown} value The value.\n\t\t * @param {object} entry The row entry.\n\t\t * @return {unknown}\n\t\t */\n\t\tresolve(value, entry) {\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\treturn value.map((v) => this.resolve(v, entry))\n\t\t\t}\n\t\t\tif (value && typeof value === 'object') {\n\t\t\t\treturn Object.fromEntries(Object.entries(value).map(([k, v]) => [k, this.resolve(v, entry)]))\n\t\t\t}\n\t\t\tif (typeof value !== 'string') {\n\t\t\t\treturn value\n\t\t\t}\n\t\t\tconst object = this.objectData || {}\n\t\t\tconst read = (source, path) => {\n\t\t\t\tconst v = readPath(source || {}, path)\n\t\t\t\treturn v === undefined || v === null ? '' : v\n\t\t\t}\n\t\t\tconst whole = value.match(/^@(row|object)\\.([\\w.@]+)$/)\n\t\t\tif (whole) {\n\t\t\t\treturn read(whole[1] === 'row' ? entry : object, whole[2])\n\t\t\t}\n\t\t\treturn value\n\t\t\t\t.replace(/@objectId/g, () => encodeURIComponent(String(this.objectId || object.id || '')))\n\t\t\t\t.replace(/@(row|object)\\.([\\w.@]+)/g, (m, scope, path) => encodeURIComponent(String(read(scope === 'row' ? entry : object, path))))\n\t\t},\n\n\t\tasync http() {\n\t\t\tconst { default: axios } = await import('@nextcloud/axios')\n\t\t\treturn { axios }\n\t\t},\n\n\t\t/**\n\t\t * Read live per-row state from `rowSource` and keep it by key.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync loadLive() {\n\t\t\tconst source = this.content.rowSource\n\t\t\tif (!source || !source.url || !source.key || !this.objectData) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst response = await axios.get(prefixUrl(this.resolve(source.url, {})))\n\t\t\t\tconst data = response && response.data\n\t\t\t\tconst list = source.path ? readPath(data, source.path) : data\n\t\t\t\tconst live = {}\n\t\t\t\tfor (const item of Array.isArray(list) ? list : []) {\n\t\t\t\t\tconst key = item && readPath(item, source.key)\n\t\t\t\t\tif (key !== undefined && key !== null) {\n\t\t\t\t\t\tlive[String(key)] = item\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.live = live\n\t\t\t} catch (e) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.warn('[CnFieldListWidget] rowSource could not be read:', e?.message || e)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Save a new list: re-read the stored value, apply the change to it, and\n\t\t * PATCH that one field.\n\t\t *\n\t\t * @param {(stored: Array) => Array} change Builds the next list from the stored one, or throws an Error with a `userMessage`.\n\t\t * @param {string} busyKey What is busy.\n\t\t * @return {Promise<boolean>} Whether it saved.\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-saves-one-field-with-one-patch\n\t\t */\n\t\tasync save(change, busyKey) {\n\t\t\tif (!this.objectUrl) {\n\t\t\t\tthis.notify(this.tr('This list cannot be saved here.'))\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.busy = busyKey\n\t\t\tthis.notice = ''\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst { data: stored } = await axios.get(prefixUrl(this.objectUrl))\n\t\t\t\tconst current = readPath(stored || {}, this.content.field)\n\t\t\t\tconst next = change(Array.isArray(current) ? current : [])\n\t\t\t\tconst { data } = await axios.patch(prefixUrl(this.objectUrl), { [this.content.field]: next })\n\t\t\t\tconst written = readPath(data || {}, this.content.field)\n\t\t\t\tthis.saved = Array.isArray(written) ? written : next\n\t\t\t\t/**\n\t\t\t\t * @event saved The list was saved: one PATCH of the field succeeded.\n\t\t\t\t * @type {{field: string, value: Array}}\n\t\t\t\t */\n\t\t\t\tthis.$emit('saved', { field: this.content.field, value: this.saved })\n\t\t\t\treturn true\n\t\t\t} catch (e) {\n\t\t\t\tthis.notify(e && e.userMessage ? e.userMessage : serverErrorMessage(e))\n\t\t\t\treturn false\n\t\t\t} finally {\n\t\t\t\tthis.busy = ''\n\t\t\t}\n\t\t},\n\n\t\tnotify(message, type = 'error') {\n\t\t\tthis.notice = message\n\t\t\tthis.noticeType = type\n\t\t},\n\n\t\t/**\n\t\t * Validate the draft and add it.\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-adds-and-removes-entries\n\t\t */\n\t\tasync add() {\n\t\t\tconst errors = {}\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst value = this.draft[field.key]\n\t\t\t\tconst empty = value === undefined || value === null || String(value).trim() === ''\n\t\t\t\tif (field.required && empty) {\n\t\t\t\t\terrors[field.key] = this.tr('Fill this in.')\n\t\t\t\t} else if (!empty && field.pattern && !new RegExp(field.pattern).test(String(value).trim())) {\n\t\t\t\t\terrors[field.key] = this.tr(field.patternMessage || 'This value is not valid.')\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.errors = errors\n\t\t\tif (Object.keys(errors).length > 0) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst entry = { ...((this.content.add && this.content.add.defaults) || {}) }\n\t\t\tfor (const field of this.addFields) {\n\t\t\t\tconst value = this.draft[field.key]\n\t\t\t\tif (value !== undefined && value !== null && String(value).trim() !== '') {\n\t\t\t\t\tentry[field.key] = typeof value === 'string' ? value.trim() : value\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst unique = this.content.add && this.content.add.unique\n\t\t\tconst saved = await this.save((stored) => {\n\t\t\t\tif (unique && stored.some((item) => item && String(readPath(item, unique)) === String(entry[unique]))) {\n\t\t\t\t\tconst error = new Error('duplicate')\n\t\t\t\t\terror.userMessage = this.tr('This is already in the list.')\n\t\t\t\t\tthrow error\n\t\t\t\t}\n\t\t\t\treturn [...stored, entry]\n\t\t\t}, '*')\n\t\t\tif (saved) {\n\t\t\t\tthis.resetDraft()\n\t\t\t\tthis.adding = false\n\t\t\t\tthis.loadLive()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove an entry by its key.\n\t\t *\n\t\t * @param {object} row The row.\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync remove(row) {\n\t\t\tawait this.save((stored) => stored.filter((item, index) => this.keyOf(item, index) !== row.key), row.key)\n\t\t},\n\n\t\t/**\n\t\t * Run a row action's request, then re-read the live state.\n\t\t *\n\t\t * @param {object} action The action.\n\t\t * @param {object} row The row.\n\t\t * @return {Promise<void>}\n\t\t * @spec openspec/changes/abstract-field-list/specs/field-list/spec.md#requirement-a-field-list-row-can-run-a-configured-request\n\t\t */\n\t\tasync runAction(action, row) {\n\t\t\tthis.busy = row.key\n\t\t\tthis.notice = ''\n\t\t\ttry {\n\t\t\t\tconst { axios } = await this.http()\n\t\t\t\tconst method = String(action.request.method || 'POST').toLowerCase()\n\t\t\t\tconst payload = this.resolve(action.request.payload || {}, row.entry)\n\t\t\t\tconst response = method === 'get'\n\t\t\t\t\t? await axios.get(prefixUrl(this.resolve(action.request.url, row.entry)))\n\t\t\t\t\t: await axios[method](prefixUrl(this.resolve(action.request.url, row.entry)), payload)\n\t\t\t\tconst message = response && response.data && typeof response.data.message === 'string' ? response.data.message : ''\n\t\t\t\tif (message) {\n\t\t\t\t\tthis.notify(message, 'info')\n\t\t\t\t}\n\t\t\t\tawait this.loadLive()\n\t\t\t} catch (e) {\n\t\t\t\tthis.notify(serverErrorMessage(e))\n\t\t\t} finally {\n\t\t\t\tthis.busy = ''\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n.cn-field-list-widget {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__rows {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n\tdisplay: flex;\n\tflex-direction: column;\n}\n\n.cn-field-list-widget__row {\n\tpadding: 10px 0;\n\tborder-top: 1px solid var(--color-border);\n}\n\n.cn-field-list-widget__row:first-child {\n\tborder-top: none;\n\tpadding-top: 0;\n}\n\n.cn-field-list-widget__line {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 12px;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__avatar {\n\tflex: 0 0 auto;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\twidth: 32px;\n\theight: 32px;\n\tborder-radius: 50%;\n\tbackground: var(--color-primary-element-light);\n\tcolor: var(--color-primary-element-light-text, var(--color-main-text));\n\tfont-size: 12px;\n\tfont-weight: 700;\n}\n\n.cn-field-list-widget__main {\n\tdisplay: flex;\n\tflex-direction: column;\n\tflex: 1 1 auto;\n\tmin-width: 0;\n}\n\n.cn-field-list-widget__title {\n\tfont-weight: 600;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__meta,\n.cn-field-list-widget__aside,\n.cn-field-list-widget__detail,\n.cn-field-list-widget__hint,\n.cn-field-list-widget__empty {\n\tcolor: var(--color-text-maxcontrast);\n}\n\n.cn-field-list-widget__meta,\n.cn-field-list-widget__aside,\n.cn-field-list-widget__detail {\n\tfont-size: 13px;\n}\n\n.cn-field-list-widget__aside {\n\twhite-space: nowrap;\n}\n\n.cn-field-list-widget__detail,\n.cn-field-list-widget__hint,\n.cn-field-list-widget__empty {\n\tmargin: 4px 0 0;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__add {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: flex-end;\n\tgap: 8px 12px;\n}\n\n.cn-field-list-widget__add > * {\n\tflex: 1 1 180px;\n}\n\n.cn-field-list-widget__add > button {\n\tflex: 0 0 auto;\n}\n\n.cn-field-list-widget__toolbar {\n\tdisplay: flex;\n\tjustify-content: flex-end;\n}\n\n.cn-field-list-widget__table-wrap {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 12px;\n\toverflow-x: auto;\n}\n\n.cn-field-list-widget__table {\n\twidth: 100%;\n\tborder-collapse: collapse;\n}\n\n.cn-field-list-widget__th {\n\tpadding: 8px 12px;\n\ttext-align: start;\n\tfont-size: 13px;\n\tfont-weight: 600;\n\twhite-space: nowrap;\n\tcolor: var(--color-text-maxcontrast);\n\tbackground: var(--color-background-hover);\n}\n\n.cn-field-list-widget__th--menu,\n.cn-field-list-widget__td--menu {\n\twidth: 1%;\n\ttext-align: end;\n}\n\n.cn-field-list-widget__tr {\n\tborder-top: 1px solid var(--cn-board-hairline, var(--color-border));\n}\n\n.cn-field-list-widget__td {\n\tpadding: 10px 12px;\n\tvertical-align: middle;\n\toverflow-wrap: anywhere;\n}\n\n.cn-field-list-widget__sr {\n\tposition: absolute;\n\twidth: 1px;\n\theight: 1px;\n\toverflow: hidden;\n\tclip-path: inset(50%);\n}\n\n.cn-field-list-widget__band {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: 8px 12px;\n\tpadding: 12px 14px;\n\tborder: 1px solid var(--color-warning);\n\tborder-radius: 10px;\n\tbackground: color-mix(in srgb, var(--color-warning) 14%, var(--color-main-background));\n\tfont-size: 14px;\n}\n</style>\n"],"names":["CnStatusBadge"],"mappings":"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"}
|
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
import { resolveComponent, openBlock, createElementBlock, createVNode, withCtx, createTextVNode, toDisplayString, createCommentVNode, withModifiers, Fragment, renderList, createBlock, createElementVNode } from 'vue';
|
|
2
|
+
|
|
3
|
+
const _hoisted_1 = {
|
|
4
|
+
class: "cn-field-list-widget",
|
|
5
|
+
"data-testid": "cn-field-list-widget"
|
|
6
|
+
};
|
|
7
|
+
const _hoisted_2 = {
|
|
8
|
+
key: 0,
|
|
9
|
+
class: "cn-field-list-widget__toolbar"
|
|
10
|
+
};
|
|
11
|
+
const _hoisted_3 = ["data-testid"];
|
|
12
|
+
const _hoisted_4 = {
|
|
13
|
+
key: 2,
|
|
14
|
+
class: "cn-field-list-widget__empty",
|
|
15
|
+
"data-testid": "cn-field-list-empty"
|
|
16
|
+
};
|
|
17
|
+
const _hoisted_5 = {
|
|
18
|
+
key: 3,
|
|
19
|
+
class: "cn-field-list-widget__table-wrap"
|
|
20
|
+
};
|
|
21
|
+
const _hoisted_6 = {
|
|
22
|
+
class: "cn-field-list-widget__table",
|
|
23
|
+
"data-testid": "cn-field-list-table"
|
|
24
|
+
};
|
|
25
|
+
const _hoisted_7 = {
|
|
26
|
+
key: 0,
|
|
27
|
+
scope: "col",
|
|
28
|
+
class: "cn-field-list-widget__th cn-field-list-widget__th--menu"
|
|
29
|
+
};
|
|
30
|
+
const _hoisted_8 = { class: "cn-field-list-widget__sr" };
|
|
31
|
+
const _hoisted_9 = ["data-testid"];
|
|
32
|
+
const _hoisted_10 = { key: 1 };
|
|
33
|
+
const _hoisted_11 = {
|
|
34
|
+
key: 0,
|
|
35
|
+
class: "cn-field-list-widget__td cn-field-list-widget__td--menu"
|
|
36
|
+
};
|
|
37
|
+
const _hoisted_12 = ["data-testid"];
|
|
38
|
+
const _hoisted_13 = { class: "cn-field-list-widget__band-text" };
|
|
39
|
+
const _hoisted_14 = {
|
|
40
|
+
key: 4,
|
|
41
|
+
class: "cn-field-list-widget__rows"
|
|
42
|
+
};
|
|
43
|
+
const _hoisted_15 = ["data-testid"];
|
|
44
|
+
const _hoisted_16 = { class: "cn-field-list-widget__line" };
|
|
45
|
+
const _hoisted_17 = {
|
|
46
|
+
key: 0,
|
|
47
|
+
class: "cn-field-list-widget__avatar",
|
|
48
|
+
"aria-hidden": "true"
|
|
49
|
+
};
|
|
50
|
+
const _hoisted_18 = { class: "cn-field-list-widget__main" };
|
|
51
|
+
const _hoisted_19 = { class: "cn-field-list-widget__title" };
|
|
52
|
+
const _hoisted_20 = {
|
|
53
|
+
key: 0,
|
|
54
|
+
class: "cn-field-list-widget__meta"
|
|
55
|
+
};
|
|
56
|
+
const _hoisted_21 = {
|
|
57
|
+
key: 2,
|
|
58
|
+
class: "cn-field-list-widget__aside"
|
|
59
|
+
};
|
|
60
|
+
const _hoisted_22 = {
|
|
61
|
+
key: 0,
|
|
62
|
+
class: "cn-field-list-widget__detail"
|
|
63
|
+
};
|
|
64
|
+
const _hoisted_23 = {
|
|
65
|
+
key: 5,
|
|
66
|
+
class: "cn-field-list-widget__hint"
|
|
67
|
+
};
|
|
68
|
+
const _hoisted_24 = {
|
|
69
|
+
key: 6,
|
|
70
|
+
class: "cn-field-list-widget__toolbar"
|
|
71
|
+
};
|
|
72
|
+
const _hoisted_25 = ["data-testid"];
|
|
73
|
+
|
|
74
|
+
function render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
75
|
+
const _component_NcButton = resolveComponent("NcButton");
|
|
76
|
+
const _component_NcSelect = resolveComponent("NcSelect");
|
|
77
|
+
const _component_NcTextField = resolveComponent("NcTextField");
|
|
78
|
+
const _component_CnStatusBadge = resolveComponent("CnStatusBadge");
|
|
79
|
+
const _component_NcActionButton = resolveComponent("NcActionButton");
|
|
80
|
+
const _component_NcActions = resolveComponent("NcActions");
|
|
81
|
+
const _component_NcNoteCard = resolveComponent("NcNoteCard");
|
|
82
|
+
|
|
83
|
+
return (openBlock(), createElementBlock("div", _hoisted_1, [
|
|
84
|
+
($options.canAdd && $options.addTrigger && $options.addPlacement === 'header')
|
|
85
|
+
? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
86
|
+
createVNode(_component_NcButton, {
|
|
87
|
+
variant: "secondary",
|
|
88
|
+
disabled: $data.busy !== '',
|
|
89
|
+
"data-testid": "cn-field-list-open-add",
|
|
90
|
+
onClick: _cache[0] || (_cache[0] = $event => ($data.adding = !$data.adding))
|
|
91
|
+
}, {
|
|
92
|
+
default: withCtx(() => [
|
|
93
|
+
createTextVNode(" + " + toDisplayString($options.addLabel), 1 /* TEXT */)
|
|
94
|
+
]),
|
|
95
|
+
_: 1 /* STABLE */
|
|
96
|
+
}, 8 /* PROPS */, ["disabled"])
|
|
97
|
+
]))
|
|
98
|
+
: createCommentVNode("v-if", true),
|
|
99
|
+
($options.canAdd && $options.addTrigger && $options.addPlacement === 'header' && $data.adding)
|
|
100
|
+
? (openBlock(), createElementBlock("form", {
|
|
101
|
+
key: 1,
|
|
102
|
+
class: "cn-field-list-widget__add",
|
|
103
|
+
"data-testid": "cn-field-list-add",
|
|
104
|
+
onSubmit: _cache[1] || (_cache[1] = withModifiers((...args) => ($options.add && $options.add(...args)), ["prevent"]))
|
|
105
|
+
}, [
|
|
106
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.addFields, (field) => {
|
|
107
|
+
return (openBlock(), createElementBlock("div", {
|
|
108
|
+
key: field.key,
|
|
109
|
+
class: "cn-field-list-widget__field",
|
|
110
|
+
"data-testid": `cn-field-list-input-${field.key}`
|
|
111
|
+
}, [
|
|
112
|
+
(field.type === 'select')
|
|
113
|
+
? (openBlock(), createBlock(_component_NcSelect, {
|
|
114
|
+
key: 0,
|
|
115
|
+
modelValue: $data.draft[field.key],
|
|
116
|
+
"onUpdate:modelValue": $event => (($data.draft[field.key]) = $event),
|
|
117
|
+
inputLabel: field.label,
|
|
118
|
+
options: field.options,
|
|
119
|
+
reduce: (option) => option.value,
|
|
120
|
+
clearable: false,
|
|
121
|
+
label: "label"
|
|
122
|
+
}, null, 8 /* PROPS */, ["modelValue", "onUpdate:modelValue", "inputLabel", "options", "reduce"]))
|
|
123
|
+
: (openBlock(), createBlock(_component_NcTextField, {
|
|
124
|
+
key: 1,
|
|
125
|
+
modelValue: $data.draft[field.key],
|
|
126
|
+
"onUpdate:modelValue": $event => (($data.draft[field.key]) = $event),
|
|
127
|
+
label: field.label,
|
|
128
|
+
error: Boolean($data.errors[field.key]),
|
|
129
|
+
helperText: $data.errors[field.key] || ''
|
|
130
|
+
}, null, 8 /* PROPS */, ["modelValue", "onUpdate:modelValue", "label", "error", "helperText"]))
|
|
131
|
+
], 8 /* PROPS */, _hoisted_3))
|
|
132
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
133
|
+
createVNode(_component_NcButton, {
|
|
134
|
+
type: "submit",
|
|
135
|
+
variant: "primary",
|
|
136
|
+
disabled: $data.busy !== '',
|
|
137
|
+
"data-testid": "cn-field-list-submit"
|
|
138
|
+
}, {
|
|
139
|
+
default: withCtx(() => [
|
|
140
|
+
createTextVNode(toDisplayString($options.addLabel), 1 /* TEXT */)
|
|
141
|
+
]),
|
|
142
|
+
_: 1 /* STABLE */
|
|
143
|
+
}, 8 /* PROPS */, ["disabled"])
|
|
144
|
+
], 32 /* NEED_HYDRATION */))
|
|
145
|
+
: createCommentVNode("v-if", true),
|
|
146
|
+
($options.rows.length === 0)
|
|
147
|
+
? (openBlock(), createElementBlock("p", _hoisted_4, toDisplayString($options.emptyLabel), 1 /* TEXT */))
|
|
148
|
+
: ($options.isTable)
|
|
149
|
+
? (openBlock(), createElementBlock("div", _hoisted_5, [
|
|
150
|
+
createElementVNode("table", _hoisted_6, [
|
|
151
|
+
createElementVNode("thead", null, [
|
|
152
|
+
createElementVNode("tr", null, [
|
|
153
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.tableColumns, (column) => {
|
|
154
|
+
return (openBlock(), createElementBlock("th", {
|
|
155
|
+
key: column.key,
|
|
156
|
+
scope: "col",
|
|
157
|
+
class: "cn-field-list-widget__th"
|
|
158
|
+
}, toDisplayString(column.header), 1 /* TEXT */))
|
|
159
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
160
|
+
($options.hasMenu)
|
|
161
|
+
? (openBlock(), createElementBlock("th", _hoisted_7, [
|
|
162
|
+
createElementVNode("span", _hoisted_8, toDisplayString($options.tr('Actions')), 1 /* TEXT */)
|
|
163
|
+
]))
|
|
164
|
+
: createCommentVNode("v-if", true)
|
|
165
|
+
])
|
|
166
|
+
]),
|
|
167
|
+
createElementVNode("tbody", null, [
|
|
168
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.rows, (row) => {
|
|
169
|
+
return (openBlock(), createElementBlock("tr", {
|
|
170
|
+
key: row.key,
|
|
171
|
+
class: "cn-field-list-widget__tr",
|
|
172
|
+
"data-testid": `cn-field-list-row-${row.key}`
|
|
173
|
+
}, [
|
|
174
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.tableColumns, (column, index) => {
|
|
175
|
+
return (openBlock(), createElementBlock("td", {
|
|
176
|
+
key: column.key,
|
|
177
|
+
class: "cn-field-list-widget__td"
|
|
178
|
+
}, [
|
|
179
|
+
(column.pill && row.cells[index].pill)
|
|
180
|
+
? (openBlock(), createBlock(_component_CnStatusBadge, {
|
|
181
|
+
key: 0,
|
|
182
|
+
label: row.cells[index].pill.label,
|
|
183
|
+
variant: row.cells[index].pill.variant,
|
|
184
|
+
size: "small"
|
|
185
|
+
}, null, 8 /* PROPS */, ["label", "variant"]))
|
|
186
|
+
: (column.strong)
|
|
187
|
+
? (openBlock(), createElementBlock("strong", _hoisted_10, toDisplayString(row.cells[index].text), 1 /* TEXT */))
|
|
188
|
+
: (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
|
189
|
+
createTextVNode(toDisplayString(row.cells[index].text), 1 /* TEXT */)
|
|
190
|
+
], 64 /* STABLE_FRAGMENT */))
|
|
191
|
+
]))
|
|
192
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
193
|
+
($options.hasMenu)
|
|
194
|
+
? (openBlock(), createElementBlock("td", _hoisted_11, [
|
|
195
|
+
($options.menuItems(row).length > 0)
|
|
196
|
+
? (openBlock(), createBlock(_component_NcActions, {
|
|
197
|
+
key: 0,
|
|
198
|
+
forceMenu: true,
|
|
199
|
+
disabled: $data.busy !== '',
|
|
200
|
+
ariaLabel: `${$options.tr('More actions')}: ${row.title}`,
|
|
201
|
+
"data-testid": `cn-field-list-menu-${row.key}`
|
|
202
|
+
}, {
|
|
203
|
+
default: withCtx(() => [
|
|
204
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.menuItems(row), (item) => {
|
|
205
|
+
return (openBlock(), createBlock(_component_NcActionButton, {
|
|
206
|
+
key: item.id,
|
|
207
|
+
"data-testid": `cn-field-list-menu-${item.id}-${row.key}`,
|
|
208
|
+
onClick: item.run
|
|
209
|
+
}, {
|
|
210
|
+
default: withCtx(() => [
|
|
211
|
+
createTextVNode(toDisplayString(item.label), 1 /* TEXT */)
|
|
212
|
+
]),
|
|
213
|
+
_: 2 /* DYNAMIC */
|
|
214
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["data-testid", "onClick"]))
|
|
215
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
216
|
+
]),
|
|
217
|
+
_: 2 /* DYNAMIC */
|
|
218
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["disabled", "ariaLabel", "data-testid"]))
|
|
219
|
+
: createCommentVNode("v-if", true)
|
|
220
|
+
]))
|
|
221
|
+
: createCommentVNode("v-if", true)
|
|
222
|
+
], 8 /* PROPS */, _hoisted_9))
|
|
223
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
224
|
+
])
|
|
225
|
+
]),
|
|
226
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.bandRows, (row) => {
|
|
227
|
+
return (openBlock(), createElementBlock("div", {
|
|
228
|
+
key: row.key,
|
|
229
|
+
class: "cn-field-list-widget__band",
|
|
230
|
+
role: "note",
|
|
231
|
+
"data-testid": `cn-field-list-band-${row.key}`
|
|
232
|
+
}, [
|
|
233
|
+
createElementVNode("span", _hoisted_13, toDisplayString(row.detail), 1 /* TEXT */),
|
|
234
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(row.bandActions, (action) => {
|
|
235
|
+
return (openBlock(), createBlock(_component_NcButton, {
|
|
236
|
+
key: action.id,
|
|
237
|
+
variant: "secondary",
|
|
238
|
+
disabled: $data.busy !== '',
|
|
239
|
+
"data-testid": `cn-field-list-band-action-${action.id}-${row.key}`,
|
|
240
|
+
onClick: $event => ($options.runAction(action, row))
|
|
241
|
+
}, {
|
|
242
|
+
default: withCtx(() => [
|
|
243
|
+
createTextVNode(toDisplayString(action.label), 1 /* TEXT */)
|
|
244
|
+
]),
|
|
245
|
+
_: 2 /* DYNAMIC */
|
|
246
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["disabled", "data-testid", "onClick"]))
|
|
247
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
248
|
+
], 8 /* PROPS */, _hoisted_12))
|
|
249
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
250
|
+
]))
|
|
251
|
+
: (openBlock(), createElementBlock("ul", _hoisted_14, [
|
|
252
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.rows, (row) => {
|
|
253
|
+
return (openBlock(), createElementBlock("li", {
|
|
254
|
+
key: row.key,
|
|
255
|
+
class: "cn-field-list-widget__row",
|
|
256
|
+
"data-testid": `cn-field-list-row-${row.key}`
|
|
257
|
+
}, [
|
|
258
|
+
createElementVNode("div", _hoisted_16, [
|
|
259
|
+
(row.initials)
|
|
260
|
+
? (openBlock(), createElementBlock("span", _hoisted_17, toDisplayString(row.initials), 1 /* TEXT */))
|
|
261
|
+
: createCommentVNode("v-if", true),
|
|
262
|
+
createElementVNode("span", _hoisted_18, [
|
|
263
|
+
createElementVNode("span", _hoisted_19, toDisplayString(row.title), 1 /* TEXT */),
|
|
264
|
+
(row.meta)
|
|
265
|
+
? (openBlock(), createElementBlock("span", _hoisted_20, toDisplayString(row.meta), 1 /* TEXT */))
|
|
266
|
+
: createCommentVNode("v-if", true)
|
|
267
|
+
]),
|
|
268
|
+
(row.pill)
|
|
269
|
+
? (openBlock(), createBlock(_component_CnStatusBadge, {
|
|
270
|
+
key: 1,
|
|
271
|
+
label: row.pill.label,
|
|
272
|
+
variant: row.pill.variant,
|
|
273
|
+
size: "small"
|
|
274
|
+
}, null, 8 /* PROPS */, ["label", "variant"]))
|
|
275
|
+
: createCommentVNode("v-if", true),
|
|
276
|
+
(row.aside)
|
|
277
|
+
? (openBlock(), createElementBlock("span", _hoisted_21, toDisplayString(row.aside), 1 /* TEXT */))
|
|
278
|
+
: createCommentVNode("v-if", true),
|
|
279
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(row.actions, (action) => {
|
|
280
|
+
return (openBlock(), createBlock(_component_NcButton, {
|
|
281
|
+
key: action.id,
|
|
282
|
+
variant: "tertiary",
|
|
283
|
+
disabled: $data.busy !== '',
|
|
284
|
+
"data-testid": `cn-field-list-action-${action.id}-${row.key}`,
|
|
285
|
+
onClick: $event => ($options.runAction(action, row))
|
|
286
|
+
}, {
|
|
287
|
+
default: withCtx(() => [
|
|
288
|
+
createTextVNode(toDisplayString(action.label), 1 /* TEXT */)
|
|
289
|
+
]),
|
|
290
|
+
_: 2 /* DYNAMIC */
|
|
291
|
+
}, 1032 /* PROPS, DYNAMIC_SLOTS */, ["disabled", "data-testid", "onClick"]))
|
|
292
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
293
|
+
($options.canRemove)
|
|
294
|
+
? (openBlock(), createBlock(_component_NcButton, {
|
|
295
|
+
key: 3,
|
|
296
|
+
variant: "tertiary",
|
|
297
|
+
disabled: $data.busy !== '',
|
|
298
|
+
"aria-label": $options.removeAriaLabel(row),
|
|
299
|
+
"data-testid": `cn-field-list-remove-${row.key}`,
|
|
300
|
+
onClick: $event => ($options.remove(row))
|
|
301
|
+
}, {
|
|
302
|
+
default: withCtx(() => [
|
|
303
|
+
createTextVNode(toDisplayString($options.removeLabel), 1 /* TEXT */)
|
|
304
|
+
]),
|
|
305
|
+
_: 1 /* STABLE */
|
|
306
|
+
}, 8 /* PROPS */, ["disabled", "aria-label", "data-testid", "onClick"]))
|
|
307
|
+
: createCommentVNode("v-if", true)
|
|
308
|
+
]),
|
|
309
|
+
(row.detail)
|
|
310
|
+
? (openBlock(), createElementBlock("p", _hoisted_22, toDisplayString(row.detail), 1 /* TEXT */))
|
|
311
|
+
: createCommentVNode("v-if", true)
|
|
312
|
+
], 8 /* PROPS */, _hoisted_15))
|
|
313
|
+
}), 128 /* KEYED_FRAGMENT */))
|
|
314
|
+
])),
|
|
315
|
+
($options.hint)
|
|
316
|
+
? (openBlock(), createElementBlock("p", _hoisted_23, toDisplayString($options.hint), 1 /* TEXT */))
|
|
317
|
+
: createCommentVNode("v-if", true),
|
|
318
|
+
($options.canAdd && $options.addTrigger && $options.addPlacement !== 'header' && !$data.adding)
|
|
319
|
+
? (openBlock(), createElementBlock("div", _hoisted_24, [
|
|
320
|
+
createVNode(_component_NcButton, {
|
|
321
|
+
variant: "secondary",
|
|
322
|
+
disabled: $data.busy !== '',
|
|
323
|
+
"data-testid": "cn-field-list-open-add",
|
|
324
|
+
onClick: _cache[2] || (_cache[2] = $event => ($data.adding = true))
|
|
325
|
+
}, {
|
|
326
|
+
default: withCtx(() => [
|
|
327
|
+
createTextVNode(" + " + toDisplayString($options.addLabel), 1 /* TEXT */)
|
|
328
|
+
]),
|
|
329
|
+
_: 1 /* STABLE */
|
|
330
|
+
}, 8 /* PROPS */, ["disabled"])
|
|
331
|
+
]))
|
|
332
|
+
: createCommentVNode("v-if", true),
|
|
333
|
+
($options.canAdd && !($options.addTrigger && $options.addPlacement === 'header') && (!$options.addTrigger || $data.adding))
|
|
334
|
+
? (openBlock(), createElementBlock("form", {
|
|
335
|
+
key: 7,
|
|
336
|
+
class: "cn-field-list-widget__add",
|
|
337
|
+
"data-testid": "cn-field-list-add",
|
|
338
|
+
onSubmit: _cache[3] || (_cache[3] = withModifiers((...args) => ($options.add && $options.add(...args)), ["prevent"]))
|
|
339
|
+
}, [
|
|
340
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList($options.addFields, (field) => {
|
|
341
|
+
return (openBlock(), createElementBlock("div", {
|
|
342
|
+
key: field.key,
|
|
343
|
+
class: "cn-field-list-widget__field",
|
|
344
|
+
"data-testid": `cn-field-list-input-${field.key}`
|
|
345
|
+
}, [
|
|
346
|
+
(field.type === 'select')
|
|
347
|
+
? (openBlock(), createBlock(_component_NcSelect, {
|
|
348
|
+
key: 0,
|
|
349
|
+
modelValue: $data.draft[field.key],
|
|
350
|
+
"onUpdate:modelValue": $event => (($data.draft[field.key]) = $event),
|
|
351
|
+
inputLabel: field.label,
|
|
352
|
+
options: field.options,
|
|
353
|
+
reduce: (option) => option.value,
|
|
354
|
+
clearable: false,
|
|
355
|
+
label: "label"
|
|
356
|
+
}, null, 8 /* PROPS */, ["modelValue", "onUpdate:modelValue", "inputLabel", "options", "reduce"]))
|
|
357
|
+
: (openBlock(), createBlock(_component_NcTextField, {
|
|
358
|
+
key: 1,
|
|
359
|
+
modelValue: $data.draft[field.key],
|
|
360
|
+
"onUpdate:modelValue": $event => (($data.draft[field.key]) = $event),
|
|
361
|
+
label: field.label,
|
|
362
|
+
error: Boolean($data.errors[field.key]),
|
|
363
|
+
helperText: $data.errors[field.key] || ''
|
|
364
|
+
}, null, 8 /* PROPS */, ["modelValue", "onUpdate:modelValue", "label", "error", "helperText"]))
|
|
365
|
+
], 8 /* PROPS */, _hoisted_25))
|
|
366
|
+
}), 128 /* KEYED_FRAGMENT */)),
|
|
367
|
+
createVNode(_component_NcButton, {
|
|
368
|
+
type: "submit",
|
|
369
|
+
variant: "secondary",
|
|
370
|
+
disabled: $data.busy !== '',
|
|
371
|
+
"data-testid": "cn-field-list-submit"
|
|
372
|
+
}, {
|
|
373
|
+
default: withCtx(() => [
|
|
374
|
+
createTextVNode(toDisplayString($options.addLabel), 1 /* TEXT */)
|
|
375
|
+
]),
|
|
376
|
+
_: 1 /* STABLE */
|
|
377
|
+
}, 8 /* PROPS */, ["disabled"])
|
|
378
|
+
], 32 /* NEED_HYDRATION */))
|
|
379
|
+
: createCommentVNode("v-if", true),
|
|
380
|
+
($data.notice)
|
|
381
|
+
? (openBlock(), createBlock(_component_NcNoteCard, {
|
|
382
|
+
key: 8,
|
|
383
|
+
type: $data.noticeType,
|
|
384
|
+
"data-testid": "cn-field-list-notice"
|
|
385
|
+
}, {
|
|
386
|
+
default: withCtx(() => [
|
|
387
|
+
createTextVNode(toDisplayString($data.notice), 1 /* TEXT */)
|
|
388
|
+
]),
|
|
389
|
+
_: 1 /* STABLE */
|
|
390
|
+
}, 8 /* PROPS */, ["type"]))
|
|
391
|
+
: createCommentVNode("v-if", true)
|
|
392
|
+
]))
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
export { render };
|
|
396
|
+
//# sourceMappingURL=CnFieldListWidget.vue3.js.map
|