@conduction/nextcloud-vue 2.79.0 → 2.80.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.
Files changed (197) hide show
  1. package/dist/esm/components/CnActionButtons/CnActionButtons.vue2.js.map +1 -1
  2. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js +3 -1
  3. package/dist/esm/components/CnActionButtons/CnActionButtons.vue3.js.map +1 -1
  4. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js +32 -3
  5. package/dist/esm/components/CnActionsBar/CnActionsBar.vue2.js.map +1 -1
  6. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js +10 -8
  7. package/dist/esm/components/CnActionsBar/CnActionsBar.vue3.js.map +1 -1
  8. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js +39 -3
  9. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue2.js.map +1 -1
  10. package/dist/esm/components/CnBannerWidget/CnBannerWidget.vue3.js.map +1 -1
  11. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +79 -1
  12. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
  13. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +133 -96
  14. package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
  15. package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
  16. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +1 -0
  17. package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
  18. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +62 -4
  19. package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
  20. package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
  21. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js +24 -0
  22. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue2.js.map +1 -1
  23. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js +43 -4
  24. package/dist/esm/components/CnDetailWidgetHost/CnDetailWidgetHost.vue3.js.map +1 -1
  25. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js +11 -0
  26. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue.js.map +1 -0
  27. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js +736 -0
  28. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue2.js.map +1 -0
  29. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js +238 -0
  30. package/dist/esm/components/CnFactsWidget/CnFactsWidget.vue3.js.map +1 -0
  31. package/dist/esm/components/CnFactsWidget/index.js +30 -0
  32. package/dist/esm/components/CnFactsWidget/index.js.map +1 -0
  33. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js +10 -0
  34. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue.js.map +1 -0
  35. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js +551 -0
  36. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue2.js.map +1 -0
  37. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js +183 -0
  38. package/dist/esm/components/CnFieldListWidget/CnFieldListWidget.vue3.js.map +1 -0
  39. package/dist/esm/components/CnFieldListWidget/index.js +29 -0
  40. package/dist/esm/components/CnFieldListWidget/index.js.map +1 -0
  41. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js +65 -17
  42. package/dist/esm/components/CnFormDialog/CnFormDialog.vue2.js.map +1 -1
  43. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js +4 -4
  44. package/dist/esm/components/CnFormDialog/CnFormDialog.vue3.js.map +1 -1
  45. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js +18 -3
  46. package/dist/esm/components/CnFormPage/CnFormPage.vue2.js.map +1 -1
  47. package/dist/esm/components/CnFormPage/CnFormPage.vue3.js.map +1 -1
  48. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +305 -72
  49. package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
  50. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +31 -13
  51. package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
  52. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js +10 -0
  53. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue.js.map +1 -0
  54. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js +99 -0
  55. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue2.js.map +1 -0
  56. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js +48 -0
  57. package/dist/esm/components/CnIndexPage/CnIndexPageWidgets.vue3.js.map +1 -0
  58. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js +29 -1
  59. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue2.js.map +1 -1
  60. package/dist/esm/components/CnPageRenderer/CnPageRenderer.vue3.js.map +1 -1
  61. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js +10 -0
  62. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue.js.map +1 -0
  63. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js +387 -0
  64. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue2.js.map +1 -0
  65. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js +169 -0
  66. package/dist/esm/components/CnRecordListWidget/CnRecordListWidget.vue3.js.map +1 -0
  67. package/dist/esm/components/CnRecordListWidget/index.js +31 -0
  68. package/dist/esm/components/CnRecordListWidget/index.js.map +1 -0
  69. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js +10 -0
  70. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue.js.map +1 -0
  71. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js +351 -0
  72. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue2.js.map +1 -0
  73. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js +71 -0
  74. package/dist/esm/components/CnSectionsWidget/CnSectionsWidget.vue3.js.map +1 -0
  75. package/dist/esm/components/CnSectionsWidget/index.js +35 -0
  76. package/dist/esm/components/CnSectionsWidget/index.js.map +1 -0
  77. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js +81 -2
  78. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue2.js.map +1 -1
  79. package/dist/esm/components/CnStagesWidget/CnStagesWidget.vue3.js.map +1 -1
  80. package/dist/esm/components/CnStatWidget/CnStatWidget.vue2.js.map +1 -1
  81. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js +1 -0
  82. package/dist/esm/components/CnStatWidget/CnStatWidget.vue3.js.map +1 -1
  83. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js +122 -7
  84. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue2.js.map +1 -1
  85. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js +84 -23
  86. package/dist/esm/components/CnTabsWidget/CnTabsWidget.vue3.js.map +1 -1
  87. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js +4 -0
  88. package/dist/esm/components/CnWidgetGrid/registerDashboardWidgets.js.map +1 -1
  89. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js +106 -2
  90. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue2.js.map +1 -1
  91. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js +105 -53
  92. package/dist/esm/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue3.js.map +1 -1
  93. package/dist/esm/composables/useFormDraft.js +140 -9
  94. package/dist/esm/composables/useFormDraft.js.map +1 -1
  95. package/dist/esm/index.js +4 -0
  96. package/dist/esm/index.js.map +1 -1
  97. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js +28 -20
  98. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue2.js.map +1 -1
  99. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js +9 -0
  100. package/dist/esm/integrations/builtin/field-inspection/CnFieldInspectionCard.vue3.js.map +1 -1
  101. package/dist/esm/integrations/builtin/field-inspection.js +21 -0
  102. package/dist/esm/integrations/builtin/field-inspection.js.map +1 -1
  103. package/dist/esm/integrations/offline/checklistSubmission.js +141 -0
  104. package/dist/esm/integrations/offline/checklistSubmission.js.map +1 -0
  105. package/dist/esm/integrations/offline/fieldCollectionHelpers.js +70 -5
  106. package/dist/esm/integrations/offline/fieldCollectionHelpers.js.map +1 -1
  107. package/dist/esm/integrations/offline/index.js +2 -1
  108. package/dist/esm/integrations/offline/index.js.map +1 -1
  109. package/dist/esm/integrations/offline/offlineDb.js +6 -1
  110. package/dist/esm/integrations/offline/offlineDb.js.map +1 -1
  111. package/dist/esm/integrations/offline/syncReplayService.js +8 -2
  112. package/dist/esm/integrations/offline/syncReplayService.js.map +1 -1
  113. package/dist/esm/l10n/en.json.js +12 -1
  114. package/dist/esm/l10n/en.json.js.map +1 -1
  115. package/dist/esm/l10n/nl.json.js +16 -2
  116. package/dist/esm/l10n/nl.json.js.map +1 -1
  117. package/dist/esm/nextcloud-vue.css +1000 -59
  118. package/dist/esm/utils/detailActionModel.js +60 -3
  119. package/dist/esm/utils/detailActionModel.js.map +1 -1
  120. package/dist/esm/utils/fillTemplate.js +114 -0
  121. package/dist/esm/utils/fillTemplate.js.map +1 -0
  122. package/dist/esm/utils/libraryWidgetKeys.js +4 -0
  123. package/dist/esm/utils/libraryWidgetKeys.js.map +1 -1
  124. package/dist/esm/utils/queryPresets.js +96 -0
  125. package/dist/esm/utils/queryPresets.js.map +1 -0
  126. package/dist/esm/utils/resolveFilterTokens.js +11 -0
  127. package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
  128. package/dist/esm/utils/schema.js +21 -0
  129. package/dist/esm/utils/schema.js.map +1 -1
  130. package/dist/esm/utils/sentinelTokens.js +3 -3
  131. package/dist/esm/utils/sentinelTokens.js.map +1 -1
  132. package/dist/esm/utils/validateManifestV2.compiled.js +3 -3
  133. package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
  134. package/dist/esm/utils/widgetDispatch.js +7 -1
  135. package/dist/esm/utils/widgetDispatch.js.map +1 -1
  136. package/dist/nextcloud-vue.cjs.js +12368 -7717
  137. package/dist/nextcloud-vue.cjs.js.map +2 -2
  138. package/dist/nextcloud-vue.css +1000 -59
  139. package/l10n/en.json +12 -1
  140. package/l10n/nl.json +16 -2
  141. package/package.json +1 -1
  142. package/src/components/CnActionButtons/CnActionButtons.vue +2 -0
  143. package/src/components/CnActionsBar/CnActionsBar.md +4 -0
  144. package/src/components/CnActionsBar/CnActionsBar.vue +42 -10
  145. package/src/components/CnBannerWidget/CnBannerWidget.vue +39 -3
  146. package/src/components/CnCellRenderer/CnCellRenderer.vue +188 -1
  147. package/src/components/CnDataTable/CnDataTable.vue +1 -0
  148. package/src/components/CnDetailPage/CnDetailPage.md +1 -1
  149. package/src/components/CnDetailPage/CnDetailPage.vue +63 -3
  150. package/src/components/CnDetailWidgetHost/CnDetailWidgetHost.vue +66 -0
  151. package/src/components/CnFactsWidget/CnFactsWidget.vue +1050 -0
  152. package/src/components/CnFactsWidget/index.js +29 -0
  153. package/src/components/CnFieldListWidget/CnFieldListWidget.vue +746 -0
  154. package/src/components/CnFieldListWidget/index.js +28 -0
  155. package/src/components/CnFormDialog/CnFormDialog.md +9 -3
  156. package/src/components/CnFormDialog/CnFormDialog.vue +69 -21
  157. package/src/components/CnFormPage/CnFormPage.vue +18 -3
  158. package/src/components/CnIndexPage/CnIndexPage.vue +254 -6
  159. package/src/components/CnIndexPage/CnIndexPageWidgets.vue +169 -0
  160. package/src/components/CnPageRenderer/CnPageRenderer.vue +29 -1
  161. package/src/components/CnRecordListWidget/CnRecordListWidget.vue +603 -0
  162. package/src/components/CnRecordListWidget/index.js +30 -0
  163. package/src/components/CnSectionsWidget/CnSectionsWidget.vue +489 -0
  164. package/src/components/CnSectionsWidget/index.js +34 -0
  165. package/src/components/CnStagesWidget/CnStagesWidget.vue +81 -2
  166. package/src/components/CnStatWidget/CnStatWidget.vue +1 -1
  167. package/src/components/CnTabsWidget/CnTabsWidget.vue +184 -8
  168. package/src/components/CnWidgetGrid/registerDashboardWidgets.js +4 -0
  169. package/src/components/CnWorkspaceFilterWidget/CnWorkspaceFilterWidget.vue +188 -4
  170. package/src/components/index.js +4 -0
  171. package/src/composables/__tests__/useFormDraft.spec.js +69 -0
  172. package/src/composables/useFormDraft.js +139 -8
  173. package/src/css/form-field.css +14 -0
  174. package/src/css/index-page.css +71 -0
  175. package/src/css/kpi-card.css +32 -0
  176. package/src/css/look-board-detail.css +77 -0
  177. package/src/css/look-board-index.css +51 -0
  178. package/src/css/look-board.css +37 -2
  179. package/src/css/table.css +19 -0
  180. package/src/index.js +4 -0
  181. package/src/integrations/builtin/field-inspection/CnFieldInspectionCard.vue +35 -20
  182. package/src/integrations/builtin/field-inspection.js +21 -0
  183. package/src/integrations/offline/checklistSubmission.js +137 -0
  184. package/src/integrations/offline/fieldCollectionHelpers.js +69 -4
  185. package/src/integrations/offline/index.js +3 -0
  186. package/src/integrations/offline/offlineDb.js +6 -1
  187. package/src/integrations/offline/syncReplayService.js +8 -2
  188. package/src/schemas/app-manifest-v2.schema.json +104 -5
  189. package/src/utils/detailActionModel.js +59 -2
  190. package/src/utils/fillTemplate.js +110 -0
  191. package/src/utils/libraryWidgetKeys.js +4 -0
  192. package/src/utils/queryPresets.js +93 -0
  193. package/src/utils/resolveFilterTokens.js +11 -0
  194. package/src/utils/schema.js +21 -0
  195. package/src/utils/sentinelTokens.js +3 -3
  196. package/src/utils/validateManifestV2.compiled.js +3 -3
  197. package/src/utils/widgetDispatch.js +7 -1
@@ -11,11 +11,12 @@ import Export from 'vue-material-design-icons/Export.vue';
11
11
  import Eye from 'vue-material-design-icons/Eye.vue';
12
12
  import FilterOutline from 'vue-material-design-icons/FilterOutline.vue';
13
13
  import ViewColumnOutline from 'vue-material-design-icons/ViewColumnOutline.vue';
14
- import __sfc_main$v from '../../dialogs/CnConfirmDialog.vue.js';
15
- import __sfc_main$w from '../../dialogs/CnQuickEditDialog.vue.js';
16
- import __sfc_main from '../CnBuildiqEditButton/CnBuildiqEditButton.vue.js';
17
- import __sfc_main$2 from '../CnEmptyContent/CnEmptyContent.vue.js';
18
- import __sfc_main$1 from '../CnFollowToggle/CnFollowToggle.vue.js';
14
+ import __sfc_main$w from '../../dialogs/CnConfirmDialog.vue.js';
15
+ import __sfc_main$x from '../../dialogs/CnQuickEditDialog.vue.js';
16
+ import __sfc_main$1 from '../CnBuildiqEditButton/CnBuildiqEditButton.vue.js';
17
+ import __sfc_main$3 from '../CnEmptyContent/CnEmptyContent.vue.js';
18
+ import __sfc_main$2 from '../CnFollowToggle/CnFollowToggle.vue.js';
19
+ import __sfc_main from './CnIndexPageWidgets.vue.js';
19
20
  import { useLook } from '../../composables/useLook.js';
20
21
  import { copyKindsOf } from '../../composables/useObjectCopy.js';
21
22
  import { createRefLabelResolver } from '../../composables/useRefLabels.js';
@@ -45,37 +46,37 @@ import { viewMatchesScope, extractViewState, buildRouteQueryFromViewState, extra
45
46
  import { fieldsFromSchema, columnsFromSchema } from '../../utils/schema.js';
46
47
  import { resolveScopeLayout } from '../../utils/scopeListLayout.js';
47
48
  import { dispatchObjectCreated } from '../../utils/walkthroughSignals.js';
48
- import __sfc_main$5 from '../CnActionsBar/CnActionsBar.vue.js';
49
- import __sfc_main$o from '../CnAdvancedFormDialog/CnAdvancedFormDialog.vue.js';
49
+ import __sfc_main$6 from '../CnActionsBar/CnActionsBar.vue.js';
50
+ import __sfc_main$p from '../CnAdvancedFormDialog/CnAdvancedFormDialog.vue.js';
50
51
  import '../CnAdvancedFormDialog/CnMetadataTab.vue.js';
51
52
  import '../CnAdvancedFormDialog/CnPropertiesTab.vue.js';
52
53
  import '../CnAdvancedFormDialog/CnPropertyValueCell.vue.js';
53
- import __sfc_main$9 from '../CnBoardView/CnBoardView.vue.js';
54
- import __sfc_main$8 from '../CnCardGrid/CnCardGrid.vue.js';
55
- import __sfc_main$p from '../CnContextMenu/CnContextMenu.vue.js';
56
- import __sfc_main$m from '../CnCopyDialog/CnCopyDialog.vue.js';
57
- import __sfc_main$7 from '../CnDataTable/CnDataTable.vue.js';
58
- import __sfc_main$a from '../CnDateAxisView/CnDateAxisView.vue.js';
59
- import __sfc_main$l from '../CnDeleteDialog/CnDeleteDialog.vue.js';
60
- import __sfc_main$e from '../CnFolderSidebar/CnFolderSidebar.vue.js';
61
- import __sfc_main$n from '../CnFormDialog/CnFormDialog.vue.js';
62
- import __sfc_main$6 from '../CnIcon/CnIcon.vue.js';
63
- import __sfc_main$q from '../CnIndexSidebar/CnIndexSidebar.vue.js';
64
- import __sfc_main$c from '../CnMapWidget/CnMapWidget.vue.js';
65
- import __sfc_main$i from '../CnMassCopyDialog/CnMassCopyDialog.vue.js';
66
- import __sfc_main$h from '../CnMassDeleteDialog/CnMassDeleteDialog.vue.js';
67
- import __sfc_main$j from '../CnMassExportDialog/CnMassExportDialog.vue.js';
68
- import __sfc_main$k from '../CnMassImportDialog/CnMassImportDialog.vue.js';
69
- import __sfc_main$b from '../CnObjectCalendar/CnObjectCalendar.vue.js';
70
- import __sfc_main$d from '../CnObjectList/CnObjectList.vue.js';
71
- import __sfc_main$3 from '../CnPageHeader/CnPageHeader.vue.js';
72
- import __sfc_main$f from '../CnPagination/CnPagination.vue.js';
73
- import __sfc_main$4 from '../CnQuickFilterBar/CnQuickFilterBar.vue.js';
74
- import __sfc_main$g from '../CnRowActions/CnRowActions.vue.js';
75
- import __sfc_main$s from '../CnSavedViewPresentationDialog/CnSavedViewPresentationDialog.vue.js';
76
- import __sfc_main$r from '../CnSavedViewsControl/CnSavedViewsControl.vue.js';
77
- import __sfc_main$t from '../CnSavedViewShareDialog/CnSavedViewShareDialog.vue.js';
78
- import __sfc_main$u from '../CnSaveViewDialog/CnSaveViewDialog.vue.js';
54
+ import __sfc_main$a from '../CnBoardView/CnBoardView.vue.js';
55
+ import __sfc_main$9 from '../CnCardGrid/CnCardGrid.vue.js';
56
+ import __sfc_main$q from '../CnContextMenu/CnContextMenu.vue.js';
57
+ import __sfc_main$n from '../CnCopyDialog/CnCopyDialog.vue.js';
58
+ import __sfc_main$8 from '../CnDataTable/CnDataTable.vue.js';
59
+ import __sfc_main$b from '../CnDateAxisView/CnDateAxisView.vue.js';
60
+ import __sfc_main$m from '../CnDeleteDialog/CnDeleteDialog.vue.js';
61
+ import __sfc_main$f from '../CnFolderSidebar/CnFolderSidebar.vue.js';
62
+ import __sfc_main$o from '../CnFormDialog/CnFormDialog.vue.js';
63
+ import __sfc_main$7 from '../CnIcon/CnIcon.vue.js';
64
+ import __sfc_main$r from '../CnIndexSidebar/CnIndexSidebar.vue.js';
65
+ import __sfc_main$d from '../CnMapWidget/CnMapWidget.vue.js';
66
+ import __sfc_main$j from '../CnMassCopyDialog/CnMassCopyDialog.vue.js';
67
+ import __sfc_main$i from '../CnMassDeleteDialog/CnMassDeleteDialog.vue.js';
68
+ import __sfc_main$k from '../CnMassExportDialog/CnMassExportDialog.vue.js';
69
+ import __sfc_main$l from '../CnMassImportDialog/CnMassImportDialog.vue.js';
70
+ import __sfc_main$c from '../CnObjectCalendar/CnObjectCalendar.vue.js';
71
+ import __sfc_main$e from '../CnObjectList/CnObjectList.vue.js';
72
+ import __sfc_main$4 from '../CnPageHeader/CnPageHeader.vue.js';
73
+ import __sfc_main$g from '../CnPagination/CnPagination.vue.js';
74
+ import __sfc_main$5 from '../CnQuickFilterBar/CnQuickFilterBar.vue.js';
75
+ import __sfc_main$h from '../CnRowActions/CnRowActions.vue.js';
76
+ import __sfc_main$t from '../CnSavedViewPresentationDialog/CnSavedViewPresentationDialog.vue.js';
77
+ import __sfc_main$s from '../CnSavedViewsControl/CnSavedViewsControl.vue.js';
78
+ import __sfc_main$u from '../CnSavedViewShareDialog/CnSavedViewShareDialog.vue.js';
79
+ import __sfc_main$v from '../CnSaveViewDialog/CnSaveViewDialog.vue.js';
79
80
  import { applyAiContext } from './aiContext.js';
80
81
  import { buildDefaultActions } from './defaultActions.js';
81
82
  import { dispatchAction } from './manifestActionDispatch.js';
@@ -303,10 +304,11 @@ var script = {
303
304
  name: 'CnIndexPage',
304
305
 
305
306
  components: {
306
- CnBuildiqEditButton: __sfc_main,
307
- CnFollowToggle: __sfc_main$1,
307
+ CnIndexPageWidgets: __sfc_main,
308
+ CnBuildiqEditButton: __sfc_main$1,
309
+ CnFollowToggle: __sfc_main$2,
308
310
  NcLoadingIcon,
309
- CnEmptyContent: __sfc_main$2,
311
+ CnEmptyContent: __sfc_main$3,
310
312
  NcActions,
311
313
  NcActionButton,
312
314
  NcActionCaption,
@@ -320,37 +322,37 @@ var script = {
320
322
  FilterOutline,
321
323
  ViewColumnOutline,
322
324
  NcCheckboxRadioSwitch,
323
- CnPageHeader: __sfc_main$3,
324
- CnQuickFilterBar: __sfc_main$4,
325
- CnActionsBar: __sfc_main$5,
325
+ CnPageHeader: __sfc_main$4,
326
+ CnQuickFilterBar: __sfc_main$5,
327
+ CnActionsBar: __sfc_main$6,
326
328
  DotsHorizontal,
327
- CnIcon: __sfc_main$6,
328
- CnDataTable: __sfc_main$7,
329
- CnCardGrid: __sfc_main$8,
330
- CnBoardView: __sfc_main$9,
331
- CnDateAxisView: __sfc_main$a,
332
- CnObjectCalendar: __sfc_main$b,
333
- CnMapWidget: __sfc_main$c,
334
- CnObjectList: __sfc_main$d,
335
- CnFolderSidebar: __sfc_main$e,
336
- CnPagination: __sfc_main$f,
337
- CnRowActions: __sfc_main$g,
338
- CnMassDeleteDialog: __sfc_main$h,
339
- CnMassCopyDialog: __sfc_main$i,
340
- CnMassExportDialog: __sfc_main$j,
341
- CnMassImportDialog: __sfc_main$k,
342
- CnDeleteDialog: __sfc_main$l,
343
- CnCopyDialog: __sfc_main$m,
344
- CnFormDialog: __sfc_main$n,
345
- CnAdvancedFormDialog: __sfc_main$o,
346
- CnContextMenu: __sfc_main$p,
347
- CnIndexSidebar: __sfc_main$q,
348
- CnSavedViewsControl: __sfc_main$r,
349
- CnSavedViewPresentationDialog: __sfc_main$s,
350
- CnSavedViewShareDialog: __sfc_main$t,
351
- CnSaveViewDialog: __sfc_main$u,
352
- CnConfirmDialog: __sfc_main$v,
353
- CnQuickEditDialog: __sfc_main$w,
329
+ CnIcon: __sfc_main$7,
330
+ CnDataTable: __sfc_main$8,
331
+ CnCardGrid: __sfc_main$9,
332
+ CnBoardView: __sfc_main$a,
333
+ CnDateAxisView: __sfc_main$b,
334
+ CnObjectCalendar: __sfc_main$c,
335
+ CnMapWidget: __sfc_main$d,
336
+ CnObjectList: __sfc_main$e,
337
+ CnFolderSidebar: __sfc_main$f,
338
+ CnPagination: __sfc_main$g,
339
+ CnRowActions: __sfc_main$h,
340
+ CnMassDeleteDialog: __sfc_main$i,
341
+ CnMassCopyDialog: __sfc_main$j,
342
+ CnMassExportDialog: __sfc_main$k,
343
+ CnMassImportDialog: __sfc_main$l,
344
+ CnDeleteDialog: __sfc_main$m,
345
+ CnCopyDialog: __sfc_main$n,
346
+ CnFormDialog: __sfc_main$o,
347
+ CnAdvancedFormDialog: __sfc_main$p,
348
+ CnContextMenu: __sfc_main$q,
349
+ CnIndexSidebar: __sfc_main$r,
350
+ CnSavedViewsControl: __sfc_main$s,
351
+ CnSavedViewPresentationDialog: __sfc_main$t,
352
+ CnSavedViewShareDialog: __sfc_main$u,
353
+ CnSaveViewDialog: __sfc_main$v,
354
+ CnConfirmDialog: __sfc_main$w,
355
+ CnQuickEditDialog: __sfc_main$x,
354
356
  },
355
357
 
356
358
  /**
@@ -647,7 +649,10 @@ var script = {
647
649
  * `$route.params` just like the `filter` prop. The first tab with
648
650
  * `default:true` (else index 0) is active on mount; changing tabs
649
651
  * re-fetches at page 1. Omit (or `null`) → no tab strip, behaviour
650
- * unchanged.
652
+ * unchanged. Under the board look a tab with `activeLabel` ("Pipeline:
653
+ * Sales") adds a removable chip with that text to the Active line and
654
+ * counts on the Filter badge while it is selected; removing the chip
655
+ * goes back to the default tab.
651
656
  */
652
657
  quickFilters: {
653
658
  type: Array,
@@ -1018,6 +1023,22 @@ var script = {
1018
1023
  default: null,
1019
1024
  },
1020
1025
 
1026
+ /**
1027
+ * Board look: the segments the view switch draws, e.g. `['table',
1028
+ * 'cards', 'board', 'map']` as the boards do. A listed mode the page
1029
+ * can open is an ordinary segment; one it cannot (no board columns, no
1030
+ * map configured) is drawn disabled, named "<mode>: not available on
1031
+ * this list". Fed from `pages[].config.viewSwitch`. Ignored without the
1032
+ * board look, and absent the switch is as before.
1033
+ *
1034
+ * @type {Array<'table' | 'cards' | 'board' | 'map'>}
1035
+ * @spec openspec/changes/screens-view-switch-parity/specs/view-switch-board-look/spec.md#requirement-the-manifest-can-draw-segments-the-page-cannot-open
1036
+ */
1037
+ viewSwitch: {
1038
+ type: Array,
1039
+ default: null,
1040
+ },
1041
+
1021
1042
  /**
1022
1043
  * The board's configuration, mirroring the manifest `config.board`
1023
1044
  * block: `{ statusField, cardFields, swimlaneField }`. The board is
@@ -1704,6 +1725,35 @@ var script = {
1704
1725
  default: null,
1705
1726
  },
1706
1727
 
1728
+ /**
1729
+ * KPI tiles above the list (manifest `config.statRow`): dashboard
1730
+ * widget definitions `{ id, type, title?, content }`, usually `stat`,
1731
+ * drawn in an auto-fit row (each at least 200px) in the listed order.
1732
+ * Types resolve like dashboard widgets: the app registry, then the
1733
+ * dashboard catalog. Empty by default.
1734
+ *
1735
+ * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-stat-row-above-the-list
1736
+ * @type {Array<object>}
1737
+ */
1738
+ statRow: {
1739
+ type: Array,
1740
+ default: () => [],
1741
+ },
1742
+
1743
+ /**
1744
+ * Cards beside the list (manifest `config.sidePanel`): dashboard
1745
+ * widget definitions `{ id, type, title?, content, headerLink? }`
1746
+ * drawn in a 300px column right of the toolbar and the list. Empty
1747
+ * by default; below 1024px the column moves above the list.
1748
+ *
1749
+ * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-side-panel-beside-the-list
1750
+ * @type {Array<object>}
1751
+ */
1752
+ sidePanel: {
1753
+ type: Array,
1754
+ default: () => [],
1755
+ },
1756
+
1707
1757
  /**
1708
1758
  * Where a row carries the actions the server says this caller may run
1709
1759
  * on it: a dotted path, read off the rows the list already fetched, so
@@ -2383,6 +2433,16 @@ var script = {
2383
2433
  },
2384
2434
 
2385
2435
  computed: {
2436
+ /**
2437
+ * Whether the page draws cards beside its list (`sidePanel`).
2438
+ *
2439
+ * @spec openspec/changes/screens-index-stat-row/specs/index-page/spec.md#requirement-an-index-page-can-draw-a-side-panel-beside-the-list
2440
+ * @return {boolean}
2441
+ */
2442
+ hasSidePanel() {
2443
+ return Array.isArray(this.sidePanel) && this.sidePanel.length > 0
2444
+ },
2445
+
2386
2446
  /**
2387
2447
  * The empty-state copy run through the host translate function
2388
2448
  * (the injected `cnTranslate`, identity by default). Only this
@@ -2755,6 +2815,21 @@ var script = {
2755
2815
  return Object.keys(this.mapConfig || {}).length > 0
2756
2816
  },
2757
2817
 
2818
+ /**
2819
+ * Board look: the modes `viewSwitch` lists that this page cannot open,
2820
+ * drawn as disabled segments.
2821
+ *
2822
+ * @return {Array<string>} The disabled modes.
2823
+ * @spec openspec/changes/screens-view-switch-parity/specs/view-switch-board-look/spec.md#requirement-the-manifest-can-draw-segments-the-page-cannot-open
2824
+ */
2825
+ viewSwitchDisabledModes() {
2826
+ if (!this.isBoardLook || !Array.isArray(this.viewSwitch)) {
2827
+ return []
2828
+ }
2829
+ const offered = [...this.effectiveToggleModes, ...(this.showMapSegment ? ['map'] : [])];
2830
+ return this.viewSwitch.filter((mode) => ['table', 'cards', 'board', 'map'].includes(mode) && !offered.includes(mode))
2831
+ },
2832
+
2758
2833
  /**
2759
2834
  * The base view-toggle segments (cards/table/list) passed to CnActionsBar.
2760
2835
  * Beta's explicit `viewModes` whitelist wins when set; otherwise the
@@ -4324,11 +4399,11 @@ var script = {
4324
4399
  return []
4325
4400
  }
4326
4401
  const props = this.effectiveSchema?.properties || {};
4327
- const chips = [];
4402
+ const chips = [...this.quickFilterActiveChips];
4328
4403
  for (const [key, raw] of Object.entries(this.effectiveActiveFilters || {})) {
4329
4404
  const values = (Array.isArray(raw) ? raw : [raw])
4330
4405
  .filter((value) => value !== null && value !== undefined && value !== '')
4331
- .map((value) => String(value));
4406
+ .map((value) => this.activeFilterValueLabel(key, value));
4332
4407
  if (values.length === 0) {
4333
4408
  continue
4334
4409
  }
@@ -4338,6 +4413,87 @@ var script = {
4338
4413
  return chips
4339
4414
  },
4340
4415
 
4416
+ /**
4417
+ * The Active line's chips for the selected quick filters: one per
4418
+ * selected tab that declares an `activeLabel` ("Pipeline: Sales"), run
4419
+ * through the app's translate. A tab without one (an "All" tab) adds no
4420
+ * chip. The chip carries the tab's index so removing it can deselect it.
4421
+ *
4422
+ * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-a-quick-filter-with-an-active-label-joins-the-active-line
4423
+ * @return {Array<{key: string, label: string, quickFilterIndex: number}>}
4424
+ */
4425
+ quickFilterActiveChips() {
4426
+ const tabs = this.tabStripEntries || [];
4427
+ if (tabs.length === 0) {
4428
+ return []
4429
+ }
4430
+ const indices = this.quickFilterMultiple
4431
+ ? (this.selectedQuickFilterIndices || [])
4432
+ : [this.activeQuickFilterIndex];
4433
+ return indices
4434
+ .filter((index) => typeof index === 'number' && tabs[index] && typeof tabs[index].activeLabel === 'string' && tabs[index].activeLabel !== '')
4435
+ .map((index) => ({ key: `quick-filter:${index}`, label: this.cnTranslate(tabs[index].activeLabel), quickFilterIndex: index }))
4436
+ },
4437
+
4438
+ /**
4439
+ * Filter keys over a reference property that the Active line must name,
4440
+ * and that no reference column resolves already: one spec each, with the
4441
+ * referenced register and schema off the page schema's `$ref`.
4442
+ *
4443
+ * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-an-active-chip-names-the-value-not-its-id
4444
+ * @return {Array<{key: string, labelField: string, register: string, schema: string}>}
4445
+ */
4446
+ activeFilterRefSpecs() {
4447
+ if (!this.isBoardLook || !this.effectiveSchema) {
4448
+ return []
4449
+ }
4450
+ const keys = Object.keys(this.effectiveActiveFilters || {});
4451
+ if (keys.length === 0) {
4452
+ return []
4453
+ }
4454
+ const covered = new Set(this.refLabelSpecs.map((spec) => spec.key));
4455
+ const fields = fieldsFromSchema(this.effectiveSchema, { includeReadOnly: true });
4456
+ const specs = [];
4457
+ for (const key of keys) {
4458
+ if (covered.has(key)) {
4459
+ continue
4460
+ }
4461
+ const field = fields.find((f) => f.key === key);
4462
+ const ref = field && field.reference;
4463
+ if (!ref || ref.schema === undefined || ref.schema === null) {
4464
+ continue
4465
+ }
4466
+ specs.push({
4467
+ key,
4468
+ labelField: '',
4469
+ register: ref.register || (typeof this.register === 'string' ? this.register : ''),
4470
+ schema: String(ref.schema),
4471
+ });
4472
+ }
4473
+ return specs
4474
+ },
4475
+
4476
+ /**
4477
+ * The ids each active reference filter holds, per filter key, for the
4478
+ * label lookup of the Active line.
4479
+ *
4480
+ * @return {{[key: string]: string[]}} Distinct ids per filter key.
4481
+ */
4482
+ activeFilterRefIds() {
4483
+ const out = {};
4484
+ const keys = new Set([...this.refLabelSpecs, ...this.activeFilterRefSpecs].map((spec) => spec.key));
4485
+ for (const [key, raw] of Object.entries(this.effectiveActiveFilters || {})) {
4486
+ if (!keys.has(key)) {
4487
+ continue
4488
+ }
4489
+ out[key] = (Array.isArray(raw) ? raw : [raw])
4490
+ .filter((id) => id !== null && id !== undefined && id !== '' && typeof id !== 'object')
4491
+ .map((id) => String(id))
4492
+ .sort();
4493
+ }
4494
+ return out
4495
+ },
4496
+
4341
4497
  /**
4342
4498
  * The plural the board bulk band names: "With the selected cases".
4343
4499
  * The schema's `titlePlural` (or `plural`), else the lower-cased
@@ -4618,6 +4774,14 @@ var script = {
4618
4774
  },
4619
4775
  },
4620
4776
 
4777
+ // The Active line names a referenced value, not its id.
4778
+ activeFilterRefIds: {
4779
+ deep: true,
4780
+ handler() {
4781
+ this.loadRefLabels();
4782
+ },
4783
+ },
4784
+
4621
4785
  countRequestKey: {
4622
4786
  immediate: true,
4623
4787
  /** @spec openspec/changes/workplace-dashboard-primitives/specs/workplace-dashboard-primitives/spec.md#requirement-counts-on-filters-and-views */
@@ -4886,7 +5050,7 @@ var script = {
4886
5050
  * @spec openspec/changes/index-ref-column-labels/tasks.md#task-2
4887
5051
  */
4888
5052
  async loadRefLabels() {
4889
- const specs = this.refLabelSpecs;
5053
+ const specs = [...this.refLabelSpecs, ...this.activeFilterRefSpecs];
4890
5054
  if (specs.length === 0) {
4891
5055
  return
4892
5056
  }
@@ -4901,7 +5065,8 @@ var script = {
4901
5065
  }
4902
5066
  await Promise.all(specs.map(async (spec) => {
4903
5067
  const known = this.refLabels[spec.key] || {};
4904
- const ids = (this.refLabelIds[spec.key] || []).filter((id) => !Object.hasOwn(known, id));
5068
+ const wanted = new Set([...(this.refLabelIds[spec.key] || []), ...(this.activeFilterRefIds[spec.key] || [])]);
5069
+ const ids = [...wanted].filter((id) => !Object.hasOwn(known, id));
4905
5070
  if (ids.length === 0) {
4906
5071
  return
4907
5072
  }
@@ -5585,6 +5750,11 @@ var script = {
5585
5750
  * @return {void}
5586
5751
  */
5587
5752
  onClearFilters() {
5753
+ // "Clear all" on the Active line also undoes the quick filters it
5754
+ // listed (a tab without an `activeLabel` is not a filter there).
5755
+ for (const chip of this.quickFilterActiveChips) {
5756
+ this.deselectQuickFilterChip(chip.quickFilterIndex);
5757
+ }
5588
5758
  // Clearing the view brings the person's own columns back.
5589
5759
  this.appliedViewColumns = null;
5590
5760
  this.appliedSavedViewId = '';
@@ -5675,11 +5845,74 @@ var script = {
5675
5845
  * @spec openspec/changes/screens-index-list-parity/specs/index-list-board-look/spec.md#requirement-the-toolbar-sits-on-the-ground-in-two-rows
5676
5846
  */
5677
5847
  onRemoveActiveFilter(chip) {
5848
+ if (chip && typeof chip.quickFilterIndex === 'number') {
5849
+ this.deselectQuickFilterChip(chip.quickFilterIndex);
5850
+ return
5851
+ }
5678
5852
  if (chip && typeof chip.key === 'string') {
5679
5853
  this.onFilterEvent({ key: chip.key, values: [] });
5680
5854
  }
5681
5855
  },
5682
5856
 
5857
+ /**
5858
+ * Undo a quick filter from the Active line. With several tabs selectable
5859
+ * the tab leaves the selection; with one, the page goes back to its
5860
+ * default tab when that tab names no active filter itself, and else to no
5861
+ * tab at all, so the chip does not come straight back.
5862
+ *
5863
+ * @param {number} index The tab index the chip stands for.
5864
+ * @return {void}
5865
+ * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-a-quick-filter-with-an-active-label-joins-the-active-line
5866
+ */
5867
+ deselectQuickFilterChip(index) {
5868
+ if (this.quickFilterMultiple) {
5869
+ this.onQuickFilterMultiChange((this.selectedQuickFilterIndices || []).filter((i) => i !== index));
5870
+ return
5871
+ }
5872
+ if (this.activeQuickFilterIndex !== index) {
5873
+ return
5874
+ }
5875
+ const tabs = this.tabStripEntries || [];
5876
+ let fallback = tabs.findIndex((tab) => tab && tab.default === true);
5877
+ if (fallback < 0 && tabs.length > 0) {
5878
+ fallback = 0;
5879
+ }
5880
+ const fallbackNamed = fallback >= 0 && typeof tabs[fallback].activeLabel === 'string' && tabs[fallback].activeLabel !== '';
5881
+ this.onQuickFilterChange(fallback >= 0 && fallback !== index && !fallbackNamed ? fallback : null);
5882
+ },
5883
+
5884
+ /**
5885
+ * The text an Active chip shows for one filter value: the referenced
5886
+ * object's label, the facet bucket's label, the schema's `oneOf` title,
5887
+ * else the value itself.
5888
+ *
5889
+ * @param {string} key The filter key.
5890
+ * @param {unknown} value One value of that filter.
5891
+ * @return {string} The label.
5892
+ * @spec openspec/changes/screens-active-filter-line-parity/specs/active-filter-line-board-look/spec.md#requirement-an-active-chip-names-the-value-not-its-id
5893
+ */
5894
+ activeFilterValueLabel(key, value) {
5895
+ const id = String(value);
5896
+ const refs = this.refLabels[key];
5897
+ if (refs && typeof refs[id] === 'string' && refs[id] !== '') {
5898
+ return refs[id]
5899
+ }
5900
+ const facet = this.effectiveFacetData && this.effectiveFacetData[key];
5901
+ const bucket = facet && Array.isArray(facet.values)
5902
+ ? facet.values.find((fv) => fv && typeof fv === 'object' && String(fv.value) === id)
5903
+ : null;
5904
+ if (bucket && typeof bucket.label === 'string' && bucket.label !== '') {
5905
+ return this.cnTranslate(bucket.label)
5906
+ }
5907
+ const prop = this.effectiveSchema?.properties?.[key];
5908
+ const options = prop && Array.isArray(prop.oneOf) ? prop.oneOf : [];
5909
+ const option = options.find((o) => o && String(o.const) === id && typeof o.title === 'string');
5910
+ if (option) {
5911
+ return this.cnTranslate(option.title)
5912
+ }
5913
+ return id
5914
+ },
5915
+
5683
5916
  /**
5684
5917
  * A header filter was applied or cleared. One column can own several
5685
5918
  * query parameters (a range is `key[gte]` and `key[lte]`), so they are
@@ -6374,7 +6607,7 @@ var script = {
6374
6607
  this.cnIndexSidebarConfig.value = {
6375
6608
  // markRaw: the holder is CnAppRoot `data()`, so it is deeply
6376
6609
  // reactive and would proxy the component definition itself.
6377
- component: markRaw(__sfc_main$q),
6610
+ component: markRaw(__sfc_main$r),
6378
6611
  props: this.hoistedSidebarProps,
6379
6612
  listeners: {
6380
6613
  'update:open': (val) => {