@conduction/nextcloud-vue 2.75.0 → 2.77.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/CnAppNav/CnAppNav.vue2.js +18 -3
- package/dist/esm/components/CnAppNav/CnAppNav.vue2.js.map +1 -1
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js +49 -3
- package/dist/esm/components/CnAppNav/CnAppNav.vue3.js.map +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js +6 -0
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue2.js.map +1 -1
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js +3 -2
- package/dist/esm/components/CnCardGrid/CnCardGrid.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js +42 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue2.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js +228 -203
- package/dist/esm/components/CnCellRenderer/CnCellRenderer.vue3.js.map +1 -1
- package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue.js +9 -0
- package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue.js.map +1 -0
- package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue2.js +50 -0
- package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue2.js.map +1 -0
- package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue3.js +13 -0
- package/dist/esm/components/CnCellRenderer/CnGroupNameCell.vue3.js.map +1 -0
- package/dist/esm/components/CnCredentials/CnCredentials.vue2.js +11 -10
- package/dist/esm/components/CnCredentials/CnCredentials.vue2.js.map +1 -1
- package/dist/esm/components/CnCredentials/CnCredentials.vue3.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js +41 -4
- package/dist/esm/components/CnDataTable/CnDataTable.vue2.js.map +1 -1
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js +90 -51
- package/dist/esm/components/CnDataTable/CnDataTable.vue3.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js +24 -33
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue2.js.map +1 -1
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js +12 -24
- package/dist/esm/components/CnDetailPage/CnDetailPage.vue3.js.map +1 -1
- package/dist/esm/components/CnFavouriteToggle/CnFavouriteToggle.vue2.js +7 -2
- package/dist/esm/components/CnFavouriteToggle/CnFavouriteToggle.vue2.js.map +1 -1
- package/dist/esm/components/CnFavouriteToggle/CnFavouriteToggle.vue3.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js +114 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue2.js.map +1 -1
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js +115 -62
- package/dist/esm/components/CnFilesBrowser/CnFilesBrowser.vue3.js.map +1 -1
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js +89 -7
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue2.js.map +1 -1
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue3.js +62 -30
- package/dist/esm/components/CnFollowToggle/CnFollowToggle.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js +242 -19
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue2.js.map +1 -1
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js +25 -20
- package/dist/esm/components/CnIndexPage/CnIndexPage.vue3.js.map +1 -1
- package/dist/esm/components/CnIndexPage/selfModeActions.js +90 -14
- package/dist/esm/components/CnIndexPage/selfModeActions.js.map +1 -1
- package/dist/esm/components/CnIndexPage/useSelfFetchList.js +15 -3
- package/dist/esm/components/CnIndexPage/useSelfFetchList.js.map +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js +26 -0
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js +26 -9
- package/dist/esm/components/CnObjectCard/CnObjectCard.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js +199 -7
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js +155 -119
- package/dist/esm/components/CnObjectDataWidget/CnObjectDataWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js +19 -3
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectListWidget/CnObjectListWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js +6 -0
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue2.js.map +1 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js +4 -1
- package/dist/esm/components/CnObjectSidebar/CnFilesTab.vue3.js.map +1 -1
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js +153 -38
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js +74 -56
- package/dist/esm/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue3.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js +13 -0
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue2.js.map +1 -1
- package/dist/esm/components/CnWidgetObjectTable/CnWidgetObjectTable.vue3.js.map +1 -1
- package/dist/esm/composables/useListView.js +4 -0
- package/dist/esm/composables/useListView.js.map +1 -1
- package/dist/esm/composables/useObjectLock.js +41 -10
- package/dist/esm/composables/useObjectLock.js.map +1 -1
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/l10n/en.json.js +31 -1
- package/dist/esm/l10n/en.json.js.map +1 -1
- package/dist/esm/l10n/nl.json.js +32 -2
- package/dist/esm/l10n/nl.json.js.map +1 -1
- package/dist/esm/nextcloud-vue.css +376 -75
- package/dist/esm/store/plugins/interactions.js +20 -10
- package/dist/esm/store/plugins/interactions.js.map +1 -1
- package/dist/esm/store/useObjectStore.js +54 -9
- package/dist/esm/store/useObjectStore.js.map +1 -1
- package/dist/esm/utils/builtInFormatters.js +15 -7
- package/dist/esm/utils/builtInFormatters.js.map +1 -1
- package/dist/esm/utils/groupAutocomplete.js +63 -1
- package/dist/esm/utils/groupAutocomplete.js.map +1 -1
- package/dist/esm/utils/lensAvailability.js +90 -0
- package/dist/esm/utils/lensAvailability.js.map +1 -0
- package/dist/esm/utils/objectSignals.js +44 -0
- package/dist/esm/utils/objectSignals.js.map +1 -0
- package/dist/esm/utils/personalLenses.js +13 -6
- package/dist/esm/utils/personalLenses.js.map +1 -1
- package/dist/esm/utils/recordInteractions.js +31 -13
- package/dist/esm/utils/recordInteractions.js.map +1 -1
- package/dist/esm/utils/resolveFilterTokens.js +46 -3
- package/dist/esm/utils/resolveFilterTokens.js.map +1 -1
- package/dist/esm/utils/schema.js +1 -1
- package/dist/esm/utils/schema.js.map +1 -1
- package/dist/esm/utils/sentinelTokens.js +4 -4
- package/dist/esm/utils/sentinelTokens.js.map +1 -1
- package/dist/esm/utils/validateManifestV2.compiled.js +2 -2
- package/dist/esm/utils/validateManifestV2.compiled.js.map +1 -1
- package/dist/esm/utils/widgetVisibility.js +46 -1
- package/dist/esm/utils/widgetVisibility.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +4732 -2990
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +376 -75
- package/l10n/en.json +31 -1
- package/l10n/nl.json +32 -2
- package/package.json +1 -1
- package/src/components/CnAppNav/CnAppNav.vue +44 -5
- package/src/components/CnCardGrid/CnCardGrid.md +1 -0
- package/src/components/CnCardGrid/CnCardGrid.vue +7 -0
- package/src/components/CnCellRenderer/CnCellRenderer.vue +56 -1
- package/src/components/CnCellRenderer/CnGroupNameCell.vue +61 -0
- package/src/components/CnCredentials/CnCredentials.vue +17 -16
- package/src/components/CnDataTable/CnDataTable.md +9 -0
- package/src/components/CnDataTable/CnDataTable.vue +80 -20
- package/src/components/CnDetailPage/CnDetailPage.vue +18 -32
- package/src/components/CnFavouriteToggle/CnFavouriteToggle.vue +7 -2
- package/src/components/CnFilesBrowser/CnFilesBrowser.vue +204 -5
- package/src/components/CnFollowToggle/CnFollowToggle.vue +118 -13
- package/src/components/CnIndexPage/CnIndexPage.md +51 -0
- package/src/components/CnIndexPage/CnIndexPage.vue +261 -35
- package/src/components/CnIndexPage/selfModeActions.js +89 -13
- package/src/components/CnIndexPage/useSelfFetchList.js +15 -3
- package/src/components/CnObjectCard/CnObjectCard.md +1 -0
- package/src/components/CnObjectCard/CnObjectCard.vue +89 -1
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +226 -2
- package/src/components/CnObjectListWidget/CnObjectListWidget.vue +19 -3
- package/src/components/CnObjectSidebar/CnFilesTab.vue +9 -0
- package/src/components/CnRelatedObjectsWidget/CnRelatedObjectsWidget.vue +181 -38
- package/src/components/CnWidgetObjectTable/CnWidgetObjectTable.vue +13 -0
- package/src/composables/__tests__/useObjectLock.endpoints.spec.js +83 -0
- package/src/composables/useListView.js +4 -0
- package/src/composables/useObjectLock.js +41 -10
- package/src/css/look-board-detail.css +40 -2
- package/src/css/look-board-index.css +35 -1
- package/src/css/table.css +82 -17
- package/src/index.js +3 -1
- package/src/schemas/app-manifest-v2.schema.json +11 -7
- package/src/store/plugins/interactions.js +20 -10
- package/src/store/useObjectStore.js +54 -9
- package/src/utils/builtInFormatters.js +15 -7
- package/src/utils/groupAutocomplete.js +75 -0
- package/src/utils/index.js +2 -1
- package/src/utils/lensAvailability.js +86 -0
- package/src/utils/objectSignals.js +41 -0
- package/src/utils/personalLenses.js +13 -6
- package/src/utils/recordInteractions.js +31 -13
- package/src/utils/resolveFilterTokens.js +45 -2
- package/src/utils/schema.js +1 -1
- package/src/utils/sentinelTokens.js +4 -4
- package/src/utils/validateManifestV2.compiled.js +2 -2
- package/src/utils/widgetVisibility.js +45 -0
|
@@ -1490,7 +1490,10 @@
|
|
|
1490
1490
|
}
|
|
1491
1491
|
|
|
1492
1492
|
.cn-look-board .cn-index-page__main.cn-index-page__main--table {
|
|
1493
|
-
|
|
1493
|
+
/* The body is a row: the card takes the width left beside a sidebar (the
|
|
1494
|
+
board's table card spans the content), and keeps the height of its rows. */
|
|
1495
|
+
flex: 1 1 auto;
|
|
1496
|
+
align-self: flex-start;
|
|
1494
1497
|
border: 1px solid var(--color-border);
|
|
1495
1498
|
border-radius: var(--cn-board-card-radius, 12px);
|
|
1496
1499
|
background: var(--color-main-background);
|
|
@@ -1680,6 +1683,37 @@
|
|
|
1680
1683
|
background: var(--color-primary-element-light);
|
|
1681
1684
|
}
|
|
1682
1685
|
|
|
1686
|
+
/* The status accent outranks the board's border, also on hover and selection. */
|
|
1687
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent {
|
|
1688
|
+
border-inline-start-width: 4px;
|
|
1689
|
+
padding-inline-start: 13px;
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1692
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-success,
|
|
1693
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-success:hover {
|
|
1694
|
+
border-inline-start-color: var(--color-element-success);
|
|
1695
|
+
}
|
|
1696
|
+
|
|
1697
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-warning,
|
|
1698
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-warning:hover {
|
|
1699
|
+
border-inline-start-color: var(--color-element-warning);
|
|
1700
|
+
}
|
|
1701
|
+
|
|
1702
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-error,
|
|
1703
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-error:hover {
|
|
1704
|
+
border-inline-start-color: var(--color-element-error);
|
|
1705
|
+
}
|
|
1706
|
+
|
|
1707
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-info,
|
|
1708
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-info:hover {
|
|
1709
|
+
border-inline-start-color: var(--color-element-info);
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-primary,
|
|
1713
|
+
.cn-look-board .cn-object-card.cn-object-card--board.cn-object-card--accent-primary:hover {
|
|
1714
|
+
border-inline-start-color: var(--color-primary-element);
|
|
1715
|
+
}
|
|
1716
|
+
|
|
1683
1717
|
.cn-look-board .cn-object-card--board .cn-object-card__content {
|
|
1684
1718
|
display: flex;
|
|
1685
1719
|
flex: 1 1 auto;
|
|
@@ -2164,9 +2198,64 @@
|
|
|
2164
2198
|
background-color: var(--color-background-hover);
|
|
2165
2199
|
}
|
|
2166
2200
|
|
|
2167
|
-
|
|
2168
|
-
|
|
2169
|
-
|
|
2201
|
+
/* The sort control: a real button that looks like the header text, the label
|
|
2202
|
+
followed by a 14px chevron 4px after it (the "Wettelijke termijn" header on
|
|
2203
|
+
the DqWooVerzoeken board). Selector scoped under the table so it outranks
|
|
2204
|
+
Nextcloud's own `button` rule, which would otherwise give it a border, a
|
|
2205
|
+
fill, a 34px min-height and a margin. */
|
|
2206
|
+
.cn-data-table th .cn-table-header__sort {
|
|
2207
|
+
display: inline-flex;
|
|
2208
|
+
align-items: center;
|
|
2209
|
+
gap: 4px;
|
|
2210
|
+
max-width: 100%;
|
|
2211
|
+
min-width: 0;
|
|
2212
|
+
min-height: 0;
|
|
2213
|
+
margin: 0;
|
|
2214
|
+
padding: 0;
|
|
2215
|
+
border: 0;
|
|
2216
|
+
border-radius: var(--border-radius, 4px);
|
|
2217
|
+
background: transparent;
|
|
2218
|
+
color: inherit;
|
|
2219
|
+
font: inherit;
|
|
2220
|
+
font-weight: inherit;
|
|
2221
|
+
text-align: start;
|
|
2222
|
+
vertical-align: middle;
|
|
2223
|
+
cursor: pointer;
|
|
2224
|
+
}
|
|
2225
|
+
|
|
2226
|
+
.cn-data-table th .cn-table-header__sort:hover,
|
|
2227
|
+
.cn-data-table th .cn-table-header__sort:focus {
|
|
2228
|
+
background: transparent;
|
|
2229
|
+
}
|
|
2230
|
+
|
|
2231
|
+
.cn-data-table th .cn-table-header__sort:focus-visible {
|
|
2232
|
+
outline: 2px solid var(--color-main-text);
|
|
2233
|
+
outline-offset: 2px;
|
|
2234
|
+
}
|
|
2235
|
+
|
|
2236
|
+
.cn-data-table th .cn-table-header__sort > :first-child {
|
|
2237
|
+
min-width: 0;
|
|
2238
|
+
overflow: hidden;
|
|
2239
|
+
text-overflow: ellipsis;
|
|
2240
|
+
}
|
|
2241
|
+
|
|
2242
|
+
/* The chevron. Unsorted columns show a pale down chevron, so every sortable
|
|
2243
|
+
column says it sorts; the sorted column shows the direction at full text
|
|
2244
|
+
colour. The direction is also in the header's `aria-sort`. */
|
|
2245
|
+
.cn-table-header__chevron {
|
|
2246
|
+
display: inline-flex;
|
|
2247
|
+
flex: none;
|
|
2248
|
+
color: var(--color-main-text);
|
|
2249
|
+
}
|
|
2250
|
+
|
|
2251
|
+
.cn-table-header__chevron--idle {
|
|
2252
|
+
color: var(--color-text-maxcontrast);
|
|
2253
|
+
opacity: 0.5;
|
|
2254
|
+
}
|
|
2255
|
+
|
|
2256
|
+
.cn-data-table th.cn-table-header--sortable:hover .cn-table-header__chevron--idle,
|
|
2257
|
+
.cn-data-table th .cn-table-header__sort:focus-visible .cn-table-header__chevron--idle {
|
|
2258
|
+
opacity: 1;
|
|
2170
2259
|
}
|
|
2171
2260
|
|
|
2172
2261
|
/* A column carrying a `description` gets a dotted underline — the long-standing
|
|
@@ -2182,15 +2271,12 @@
|
|
|
2182
2271
|
cursor: help;
|
|
2183
2272
|
}
|
|
2184
2273
|
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
16px icon; the filled icon plus the primary colour marks an active filter,
|
|
2192
|
-
so the state never rests on colour alone. */
|
|
2193
|
-
.cn-table-header__filter {
|
|
2274
|
+
/* Header filter button (CnDataTable `filterable`): a 14px funnel directly
|
|
2275
|
+
after the sort chevron, in a 24px hit area. Muted with no filter set; with
|
|
2276
|
+
a filter set it takes the dark primary and a dot, so the state never rests
|
|
2277
|
+
on colour alone. */
|
|
2278
|
+
.cn-data-table th .cn-table-header__filter {
|
|
2279
|
+
position: relative;
|
|
2194
2280
|
display: inline-flex;
|
|
2195
2281
|
align-items: center;
|
|
2196
2282
|
justify-content: center;
|
|
@@ -2198,7 +2284,7 @@
|
|
|
2198
2284
|
min-width: 24px;
|
|
2199
2285
|
height: 24px;
|
|
2200
2286
|
min-height: 24px;
|
|
2201
|
-
margin: 0 0 0
|
|
2287
|
+
margin: 0 0 0 2px;
|
|
2202
2288
|
padding: 0;
|
|
2203
2289
|
border: none;
|
|
2204
2290
|
border-radius: var(--border-radius, 4px);
|
|
@@ -2208,18 +2294,31 @@
|
|
|
2208
2294
|
cursor: pointer;
|
|
2209
2295
|
}
|
|
2210
2296
|
|
|
2211
|
-
.cn-table-header__filter:hover {
|
|
2297
|
+
.cn-data-table th .cn-table-header__filter:hover {
|
|
2212
2298
|
background-color: var(--color-background-hover);
|
|
2213
2299
|
color: var(--color-main-text);
|
|
2214
2300
|
}
|
|
2215
2301
|
|
|
2216
|
-
.cn-table-header__filter:focus-visible {
|
|
2302
|
+
.cn-data-table th .cn-table-header__filter:focus-visible {
|
|
2217
2303
|
outline: 2px solid var(--color-main-text);
|
|
2218
2304
|
outline-offset: 0;
|
|
2219
2305
|
}
|
|
2220
2306
|
|
|
2221
|
-
.cn-table-header__filter--active
|
|
2222
|
-
|
|
2307
|
+
.cn-data-table th .cn-table-header__filter--active,
|
|
2308
|
+
.cn-data-table th .cn-table-header__filter--active:hover {
|
|
2309
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
2310
|
+
}
|
|
2311
|
+
|
|
2312
|
+
/* The active-filter dot, on the funnel's top right. */
|
|
2313
|
+
.cn-table-header__filter-dot {
|
|
2314
|
+
position: absolute;
|
|
2315
|
+
inset-block-start: 3px;
|
|
2316
|
+
inset-inline-end: 3px;
|
|
2317
|
+
width: 6px;
|
|
2318
|
+
height: 6px;
|
|
2319
|
+
border-radius: 50%;
|
|
2320
|
+
background-color: var(--color-primary-element);
|
|
2321
|
+
pointer-events: none;
|
|
2223
2322
|
}
|
|
2224
2323
|
|
|
2225
2324
|
/* Active header filters above the table, one removable chip each. */
|
|
@@ -5469,12 +5568,26 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
5469
5568
|
|
|
5470
5569
|
/* ---- Folder tabs ------------------------------------------------------- */
|
|
5471
5570
|
|
|
5571
|
+
/* The strip draws no line of its own (design-system pull request 147). The card under it
|
|
5572
|
+
carries its full border, top included, so the top-right corner is the
|
|
5573
|
+
card's own rounded corner instead of a strip rule running straight past it.
|
|
5574
|
+
The open tab overlaps that top border by 1px (the nav's -1px margin) and
|
|
5575
|
+
paints over it, so it flows into the card as a folder tab. */
|
|
5472
5576
|
.cn-look-board .cn-tabs--board .cn-tabs__bar {
|
|
5473
|
-
border-bottom:
|
|
5577
|
+
border-bottom: none;
|
|
5474
5578
|
gap: 4px;
|
|
5579
|
+
position: relative;
|
|
5475
5580
|
}
|
|
5476
5581
|
|
|
5582
|
+
.cn-look-board .cn-tabs.cn-tabs--board .cn-tabs__bar::after {
|
|
5583
|
+
content: none;
|
|
5584
|
+
}
|
|
5585
|
+
|
|
5586
|
+
/* Tabs sit on the card's top edge; only the open tab reaches 1px further
|
|
5587
|
+
down (min-height 35px below), over the card's top border. Top-aligned so
|
|
5588
|
+
the inactive tabs do not stretch to the open tab's height. */
|
|
5477
5589
|
.cn-look-board .cn-tabs--board .cn-tabs__nav {
|
|
5590
|
+
align-items: flex-start;
|
|
5478
5591
|
gap: 4px;
|
|
5479
5592
|
}
|
|
5480
5593
|
|
|
@@ -5495,7 +5608,11 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
5495
5608
|
border-bottom: 1px solid var(--color-main-background);
|
|
5496
5609
|
border-top: 1px solid var(--color-border-dark);
|
|
5497
5610
|
font-weight: 700;
|
|
5611
|
+
min-height: 35px;
|
|
5612
|
+
padding-bottom: 9px;
|
|
5498
5613
|
padding-top: 8px;
|
|
5614
|
+
position: relative;
|
|
5615
|
+
z-index: 1;
|
|
5499
5616
|
}
|
|
5500
5617
|
|
|
5501
5618
|
/* The count: a grey, borderless 20px badge 8px after the label. */
|
|
@@ -5532,10 +5649,30 @@ a.cn-kpi-card--stacked:focus-visible {
|
|
|
5532
5649
|
.cn-look-board .cn-tabs--board .cn-tabs__content > .cn-tab > :first-child .cn-widget-wrapper,
|
|
5533
5650
|
.cn-look-board .cn-tabs--board .cn-tabs__content > .cn-tab > .cn-widget-wrapper,
|
|
5534
5651
|
.cn-look-board .cn-tabs--board .cn-tabs__content > .cn-tab > .cn-detail-card {
|
|
5535
|
-
border-top:
|
|
5652
|
+
border-top: 1px solid var(--color-border);
|
|
5536
5653
|
border-radius: 0 12px 12px 12px;
|
|
5537
5654
|
}
|
|
5538
5655
|
|
|
5656
|
+
/* A CnTabsWidget panel is the card itself: the same full border, so it joins
|
|
5657
|
+
the open tab the same way. The top-left stays square under the first tab. */
|
|
5658
|
+
.cn-look-board .cn-tabs--board.cn-tabs-widget__tabs .cn-tabs__content {
|
|
5659
|
+
border: 1px solid var(--color-border);
|
|
5660
|
+
border-radius: 0 12px 12px 12px;
|
|
5661
|
+
}
|
|
5662
|
+
|
|
5663
|
+
/* A panel of CnTabsWidget is the content block itself: the open tab flows
|
|
5664
|
+
straight into it. The widget in the panel renders chromeless, but the board
|
|
5665
|
+
card rule below (and the first-card rule above) used to give its wrapper a
|
|
5666
|
+
border and a 12px radius again, so a second card sat inside the panel. Its
|
|
5667
|
+
left edge ran down from the open tab and its rounded top-right drew a line
|
|
5668
|
+
across the top right of the content block, where DqZaak shows one sheet.
|
|
5669
|
+
Same specificity as the first-card rule and later, so it wins on order. */
|
|
5670
|
+
.cn-look-board .cn-tabs--board.cn-tabs-widget__tabs .cn-tabs__content .cn-widget-wrapper.cn-widget-wrapper--chromeless {
|
|
5671
|
+
background: transparent;
|
|
5672
|
+
border: 0;
|
|
5673
|
+
border-radius: 0;
|
|
5674
|
+
}
|
|
5675
|
+
|
|
5539
5676
|
/* ---- Body cards and side cards ----------------------------------------- */
|
|
5540
5677
|
|
|
5541
5678
|
.cn-look-board .cn-detail-page .cn-widget-wrapper,
|
|
@@ -9322,9 +9459,64 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9322
9459
|
background-color: var(--color-background-hover);
|
|
9323
9460
|
}
|
|
9324
9461
|
|
|
9325
|
-
|
|
9326
|
-
|
|
9327
|
-
|
|
9462
|
+
/* The sort control: a real button that looks like the header text, the label
|
|
9463
|
+
followed by a 14px chevron 4px after it (the "Wettelijke termijn" header on
|
|
9464
|
+
the DqWooVerzoeken board). Selector scoped under the table so it outranks
|
|
9465
|
+
Nextcloud's own `button` rule, which would otherwise give it a border, a
|
|
9466
|
+
fill, a 34px min-height and a margin. */
|
|
9467
|
+
.cn-data-table th .cn-table-header__sort {
|
|
9468
|
+
display: inline-flex;
|
|
9469
|
+
align-items: center;
|
|
9470
|
+
gap: 4px;
|
|
9471
|
+
max-width: 100%;
|
|
9472
|
+
min-width: 0;
|
|
9473
|
+
min-height: 0;
|
|
9474
|
+
margin: 0;
|
|
9475
|
+
padding: 0;
|
|
9476
|
+
border: 0;
|
|
9477
|
+
border-radius: var(--border-radius, 4px);
|
|
9478
|
+
background: transparent;
|
|
9479
|
+
color: inherit;
|
|
9480
|
+
font: inherit;
|
|
9481
|
+
font-weight: inherit;
|
|
9482
|
+
text-align: start;
|
|
9483
|
+
vertical-align: middle;
|
|
9484
|
+
cursor: pointer;
|
|
9485
|
+
}
|
|
9486
|
+
|
|
9487
|
+
.cn-data-table th .cn-table-header__sort:hover,
|
|
9488
|
+
.cn-data-table th .cn-table-header__sort:focus {
|
|
9489
|
+
background: transparent;
|
|
9490
|
+
}
|
|
9491
|
+
|
|
9492
|
+
.cn-data-table th .cn-table-header__sort:focus-visible {
|
|
9493
|
+
outline: 2px solid var(--color-main-text);
|
|
9494
|
+
outline-offset: 2px;
|
|
9495
|
+
}
|
|
9496
|
+
|
|
9497
|
+
.cn-data-table th .cn-table-header__sort > :first-child {
|
|
9498
|
+
min-width: 0;
|
|
9499
|
+
overflow: hidden;
|
|
9500
|
+
text-overflow: ellipsis;
|
|
9501
|
+
}
|
|
9502
|
+
|
|
9503
|
+
/* The chevron. Unsorted columns show a pale down chevron, so every sortable
|
|
9504
|
+
column says it sorts; the sorted column shows the direction at full text
|
|
9505
|
+
colour. The direction is also in the header's `aria-sort`. */
|
|
9506
|
+
.cn-table-header__chevron {
|
|
9507
|
+
display: inline-flex;
|
|
9508
|
+
flex: none;
|
|
9509
|
+
color: var(--color-main-text);
|
|
9510
|
+
}
|
|
9511
|
+
|
|
9512
|
+
.cn-table-header__chevron--idle {
|
|
9513
|
+
color: var(--color-text-maxcontrast);
|
|
9514
|
+
opacity: 0.5;
|
|
9515
|
+
}
|
|
9516
|
+
|
|
9517
|
+
.cn-data-table th.cn-table-header--sortable:hover .cn-table-header__chevron--idle,
|
|
9518
|
+
.cn-data-table th .cn-table-header__sort:focus-visible .cn-table-header__chevron--idle {
|
|
9519
|
+
opacity: 1;
|
|
9328
9520
|
}
|
|
9329
9521
|
|
|
9330
9522
|
/* A column carrying a `description` gets a dotted underline — the long-standing
|
|
@@ -9340,15 +9532,12 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9340
9532
|
cursor: help;
|
|
9341
9533
|
}
|
|
9342
9534
|
|
|
9343
|
-
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
|
|
9347
|
-
|
|
9348
|
-
|
|
9349
|
-
16px icon; the filled icon plus the primary colour marks an active filter,
|
|
9350
|
-
so the state never rests on colour alone. */
|
|
9351
|
-
.cn-table-header__filter {
|
|
9535
|
+
/* Header filter button (CnDataTable `filterable`): a 14px funnel directly
|
|
9536
|
+
after the sort chevron, in a 24px hit area. Muted with no filter set; with
|
|
9537
|
+
a filter set it takes the dark primary and a dot, so the state never rests
|
|
9538
|
+
on colour alone. */
|
|
9539
|
+
.cn-data-table th .cn-table-header__filter {
|
|
9540
|
+
position: relative;
|
|
9352
9541
|
display: inline-flex;
|
|
9353
9542
|
align-items: center;
|
|
9354
9543
|
justify-content: center;
|
|
@@ -9356,7 +9545,7 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9356
9545
|
min-width: 24px;
|
|
9357
9546
|
height: 24px;
|
|
9358
9547
|
min-height: 24px;
|
|
9359
|
-
margin: 0 0 0
|
|
9548
|
+
margin: 0 0 0 2px;
|
|
9360
9549
|
padding: 0;
|
|
9361
9550
|
border: none;
|
|
9362
9551
|
border-radius: var(--border-radius, 4px);
|
|
@@ -9366,18 +9555,31 @@ svg.leaflet-image-layer.leaflet-interactive path {
|
|
|
9366
9555
|
cursor: pointer;
|
|
9367
9556
|
}
|
|
9368
9557
|
|
|
9369
|
-
.cn-table-header__filter:hover {
|
|
9558
|
+
.cn-data-table th .cn-table-header__filter:hover {
|
|
9370
9559
|
background-color: var(--color-background-hover);
|
|
9371
9560
|
color: var(--color-main-text);
|
|
9372
9561
|
}
|
|
9373
9562
|
|
|
9374
|
-
.cn-table-header__filter:focus-visible {
|
|
9563
|
+
.cn-data-table th .cn-table-header__filter:focus-visible {
|
|
9375
9564
|
outline: 2px solid var(--color-main-text);
|
|
9376
9565
|
outline-offset: 0;
|
|
9377
9566
|
}
|
|
9378
9567
|
|
|
9379
|
-
.cn-table-header__filter--active
|
|
9380
|
-
|
|
9568
|
+
.cn-data-table th .cn-table-header__filter--active,
|
|
9569
|
+
.cn-data-table th .cn-table-header__filter--active:hover {
|
|
9570
|
+
color: var(--color-primary-element-light-text, var(--color-primary-element));
|
|
9571
|
+
}
|
|
9572
|
+
|
|
9573
|
+
/* The active-filter dot, on the funnel's top right. */
|
|
9574
|
+
.cn-table-header__filter-dot {
|
|
9575
|
+
position: absolute;
|
|
9576
|
+
inset-block-start: 3px;
|
|
9577
|
+
inset-inline-end: 3px;
|
|
9578
|
+
width: 6px;
|
|
9579
|
+
height: 6px;
|
|
9580
|
+
border-radius: 50%;
|
|
9581
|
+
background-color: var(--color-primary-element);
|
|
9582
|
+
pointer-events: none;
|
|
9381
9583
|
}
|
|
9382
9584
|
|
|
9383
9585
|
/* Active header filters above the table, one removable chip each. */
|
|
@@ -14154,12 +14356,55 @@ button.cn-files-card__open[data-v-46f7e3c9]:hover {
|
|
|
14154
14356
|
flex-direction: column;
|
|
14155
14357
|
gap: 8px;
|
|
14156
14358
|
min-width: 0;
|
|
14359
|
+
position: relative;
|
|
14157
14360
|
border-radius: var(--border-radius-large, 8px);
|
|
14158
14361
|
}
|
|
14159
14362
|
.cn-files-browser--dragging[data-v-f5bdd9e2] {
|
|
14160
14363
|
outline: 2px dashed var(--color-primary-element);
|
|
14161
14364
|
outline-offset: 4px;
|
|
14162
14365
|
}
|
|
14366
|
+
.cn-files-browser__drop-overlay[data-v-f5bdd9e2] {
|
|
14367
|
+
position: absolute;
|
|
14368
|
+
inset: 0;
|
|
14369
|
+
z-index: 2;
|
|
14370
|
+
display: flex;
|
|
14371
|
+
flex-direction: column;
|
|
14372
|
+
align-items: center;
|
|
14373
|
+
justify-content: center;
|
|
14374
|
+
gap: 10px;
|
|
14375
|
+
padding: 24px;
|
|
14376
|
+
box-sizing: border-box;
|
|
14377
|
+
border: 2px dashed var(--color-primary-element);
|
|
14378
|
+
border-radius: var(--border-radius-large, 8px);
|
|
14379
|
+
background: var(--color-primary-element-light);
|
|
14380
|
+
color: var(--color-primary-element-light-text, var(--color-main-text));
|
|
14381
|
+
text-align: center;
|
|
14382
|
+
pointer-events: none;
|
|
14383
|
+
}
|
|
14384
|
+
.cn-files-browser__drop-icon[data-v-f5bdd9e2] {
|
|
14385
|
+
display: flex;
|
|
14386
|
+
align-items: center;
|
|
14387
|
+
justify-content: center;
|
|
14388
|
+
width: 56px;
|
|
14389
|
+
height: 56px;
|
|
14390
|
+
border-radius: 50%;
|
|
14391
|
+
background: var(--color-main-background);
|
|
14392
|
+
color: var(--color-primary-element);
|
|
14393
|
+
}
|
|
14394
|
+
.cn-files-browser__drop-label[data-v-f5bdd9e2] {
|
|
14395
|
+
font-size: 20px;
|
|
14396
|
+
font-weight: 700;
|
|
14397
|
+
}
|
|
14398
|
+
.cn-files-browser__drop-hint[data-v-f5bdd9e2] {
|
|
14399
|
+
display: flex;
|
|
14400
|
+
align-items: center;
|
|
14401
|
+
gap: 8px;
|
|
14402
|
+
margin: 0;
|
|
14403
|
+
padding-top: 12px;
|
|
14404
|
+
border-top: 1px solid var(--color-border);
|
|
14405
|
+
font-size: 13px;
|
|
14406
|
+
color: var(--color-text-maxcontrast);
|
|
14407
|
+
}
|
|
14163
14408
|
.cn-files-browser__bar[data-v-f5bdd9e2] {
|
|
14164
14409
|
display: flex;
|
|
14165
14410
|
align-items: center;
|
|
@@ -19425,6 +19670,18 @@ a.cn-xwiki-card__title[data-v-54e85fe3]:hover {
|
|
|
19425
19670
|
color: var(--color-text-maxcontrast);
|
|
19426
19671
|
font-style: italic;
|
|
19427
19672
|
}
|
|
19673
|
+
.cn-related-objects-widget__section-status[data-v-44c2988f] {
|
|
19674
|
+
margin: 0;
|
|
19675
|
+
padding: var(--default-grid-baseline, 4px) calc(2 * var(--default-grid-baseline, 4px));
|
|
19676
|
+
color: var(--color-text-maxcontrast);
|
|
19677
|
+
font-size: 0.85em;
|
|
19678
|
+
}
|
|
19679
|
+
.cn-related-objects-widget__section-error[data-v-44c2988f] {
|
|
19680
|
+
margin: 0;
|
|
19681
|
+
padding: var(--default-grid-baseline, 4px) calc(2 * var(--default-grid-baseline, 4px));
|
|
19682
|
+
color: var(--color-error-text, var(--color-error));
|
|
19683
|
+
font-size: 0.85em;
|
|
19684
|
+
}
|
|
19428
19685
|
.cn-related-objects-widget__empty-state[data-v-44c2988f] {
|
|
19429
19686
|
/* NcEmptyContent defaults to filling tall parents; inside a widget cell a
|
|
19430
19687
|
compact block reads better. */
|
|
@@ -22090,6 +22347,47 @@ to { background-position: -200% 0;
|
|
|
22090
22347
|
border-color: var(--color-primary-element);
|
|
22091
22348
|
background: var(--color-primary-element-light);
|
|
22092
22349
|
}
|
|
22350
|
+
|
|
22351
|
+
/* The 4px start border takes 3px of padding, so the content stays put. */
|
|
22352
|
+
.cn-object-card.cn-object-card--accent[data-v-6f672c8f] {
|
|
22353
|
+
border-inline-start-width: 4px;
|
|
22354
|
+
padding-inline-start: 13px;
|
|
22355
|
+
}
|
|
22356
|
+
.cn-object-card.cn-object-card--accent-success[data-v-6f672c8f] {
|
|
22357
|
+
border-inline-start-color: var(--color-element-success);
|
|
22358
|
+
}
|
|
22359
|
+
.cn-object-card.cn-object-card--accent-warning[data-v-6f672c8f] {
|
|
22360
|
+
border-inline-start-color: var(--color-element-warning);
|
|
22361
|
+
}
|
|
22362
|
+
.cn-object-card.cn-object-card--accent-error[data-v-6f672c8f] {
|
|
22363
|
+
border-inline-start-color: var(--color-element-error);
|
|
22364
|
+
}
|
|
22365
|
+
.cn-object-card.cn-object-card--accent-info[data-v-6f672c8f] {
|
|
22366
|
+
border-inline-start-color: var(--color-element-info);
|
|
22367
|
+
}
|
|
22368
|
+
.cn-object-card.cn-object-card--accent-primary[data-v-6f672c8f] {
|
|
22369
|
+
border-inline-start-color: var(--color-primary-element);
|
|
22370
|
+
}
|
|
22371
|
+
.cn-object-card__accent-icon[data-v-6f672c8f] {
|
|
22372
|
+
display: inline-flex;
|
|
22373
|
+
vertical-align: -2px;
|
|
22374
|
+
margin-inline-end: 4px;
|
|
22375
|
+
}
|
|
22376
|
+
.cn-object-card--accent-success .cn-object-card__accent-icon[data-v-6f672c8f] {
|
|
22377
|
+
color: var(--color-text-success);
|
|
22378
|
+
}
|
|
22379
|
+
.cn-object-card--accent-warning .cn-object-card__accent-icon[data-v-6f672c8f] {
|
|
22380
|
+
color: var(--color-text-warning);
|
|
22381
|
+
}
|
|
22382
|
+
.cn-object-card--accent-error .cn-object-card__accent-icon[data-v-6f672c8f] {
|
|
22383
|
+
color: var(--color-text-error);
|
|
22384
|
+
}
|
|
22385
|
+
.cn-object-card--accent-info .cn-object-card__accent-icon[data-v-6f672c8f] {
|
|
22386
|
+
color: var(--color-element-info);
|
|
22387
|
+
}
|
|
22388
|
+
.cn-object-card--accent-primary .cn-object-card__accent-icon[data-v-6f672c8f] {
|
|
22389
|
+
color: var(--color-primary-element);
|
|
22390
|
+
}
|
|
22093
22391
|
.cn-object-card__checkbox[data-v-6f672c8f] {
|
|
22094
22392
|
flex-shrink: 0;
|
|
22095
22393
|
padding-top: 2px;
|
|
@@ -32006,8 +32304,42 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
|
|
|
32006
32304
|
}
|
|
32007
32305
|
|
|
32008
32306
|
|
|
32009
|
-
.cn-
|
|
32010
|
-
|
|
32307
|
+
.cn-follow-toggle[data-v-eec896e2] {
|
|
32308
|
+
display: inline-flex;
|
|
32309
|
+
align-items: center;
|
|
32310
|
+
gap: 4px;
|
|
32311
|
+
}
|
|
32312
|
+
.cn-follow-toggle__on[data-v-eec896e2] {
|
|
32313
|
+
color: var(--color-primary-element);
|
|
32314
|
+
}
|
|
32315
|
+
.cn-follow-toggle__popover[data-v-eec896e2] {
|
|
32316
|
+
min-width: 260px;
|
|
32317
|
+
padding: 12px;
|
|
32318
|
+
}
|
|
32319
|
+
.cn-follow-toggle__list[data-v-eec896e2] {
|
|
32320
|
+
list-style: none;
|
|
32321
|
+
margin: 0 0 8px;
|
|
32322
|
+
padding: 0;
|
|
32323
|
+
}
|
|
32324
|
+
.cn-follow-toggle__row[data-v-eec896e2] {
|
|
32325
|
+
display: flex;
|
|
32326
|
+
align-items: center;
|
|
32327
|
+
gap: 8px;
|
|
32328
|
+
padding: 4px 0;
|
|
32329
|
+
}
|
|
32330
|
+
.cn-follow-toggle__who[data-v-eec896e2] {
|
|
32331
|
+
display: flex;
|
|
32332
|
+
flex-direction: column;
|
|
32333
|
+
flex: 1 1 auto;
|
|
32334
|
+
min-width: 0;
|
|
32335
|
+
}
|
|
32336
|
+
.cn-follow-toggle__since[data-v-eec896e2] {
|
|
32337
|
+
color: var(--color-text-maxcontrast);
|
|
32338
|
+
font-size: var(--font-size-small, 13px);
|
|
32339
|
+
}
|
|
32340
|
+
.cn-follow-toggle__error[data-v-eec896e2] {
|
|
32341
|
+
margin: 8px 0 0;
|
|
32342
|
+
color: var(--color-error-text);
|
|
32011
32343
|
}
|
|
32012
32344
|
|
|
32013
32345
|
|
|
@@ -34152,42 +34484,6 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
|
|
|
34152
34484
|
}
|
|
34153
34485
|
|
|
34154
34486
|
|
|
34155
|
-
.cn-follow-toggle[data-v-eec896e2] {
|
|
34156
|
-
display: inline-flex;
|
|
34157
|
-
align-items: center;
|
|
34158
|
-
gap: 4px;
|
|
34159
|
-
}
|
|
34160
|
-
.cn-follow-toggle__popover[data-v-eec896e2] {
|
|
34161
|
-
min-width: 260px;
|
|
34162
|
-
padding: 12px;
|
|
34163
|
-
}
|
|
34164
|
-
.cn-follow-toggle__list[data-v-eec896e2] {
|
|
34165
|
-
list-style: none;
|
|
34166
|
-
margin: 0 0 8px;
|
|
34167
|
-
padding: 0;
|
|
34168
|
-
}
|
|
34169
|
-
.cn-follow-toggle__row[data-v-eec896e2] {
|
|
34170
|
-
display: flex;
|
|
34171
|
-
align-items: center;
|
|
34172
|
-
gap: 8px;
|
|
34173
|
-
padding: 4px 0;
|
|
34174
|
-
}
|
|
34175
|
-
.cn-follow-toggle__who[data-v-eec896e2] {
|
|
34176
|
-
display: flex;
|
|
34177
|
-
flex-direction: column;
|
|
34178
|
-
flex: 1 1 auto;
|
|
34179
|
-
min-width: 0;
|
|
34180
|
-
}
|
|
34181
|
-
.cn-follow-toggle__since[data-v-eec896e2] {
|
|
34182
|
-
color: var(--color-text-maxcontrast);
|
|
34183
|
-
font-size: var(--font-size-small, 13px);
|
|
34184
|
-
}
|
|
34185
|
-
.cn-follow-toggle__error[data-v-eec896e2] {
|
|
34186
|
-
margin: 8px 0 0;
|
|
34187
|
-
color: var(--color-error-text);
|
|
34188
|
-
}
|
|
34189
|
-
|
|
34190
|
-
|
|
34191
34487
|
.cn-lifecycle-actions[data-v-a62ad362] {
|
|
34192
34488
|
display: flex;
|
|
34193
34489
|
flex-wrap: wrap;
|
|
@@ -35861,6 +36157,11 @@ button.cn-object-calendar__overflow[data-v-bea31862] {
|
|
|
35861
36157
|
}
|
|
35862
36158
|
|
|
35863
36159
|
|
|
36160
|
+
.cn-favourite-toggle__star[data-v-836dad16] {
|
|
36161
|
+
color: var(--color-warning);
|
|
36162
|
+
}
|
|
36163
|
+
|
|
36164
|
+
|
|
35864
36165
|
.cn-journey-review-list__items[data-v-d3c04832] {
|
|
35865
36166
|
list-style: none;
|
|
35866
36167
|
margin: 8px 0 0;
|
|
@@ -3,7 +3,8 @@ import { setFavourite, setReadState, setWatching, listWatchers, setWatcher } fro
|
|
|
3
3
|
/**
|
|
4
4
|
* Interactions plugin for the object store.
|
|
5
5
|
*
|
|
6
|
-
* Per-user interaction calls on a record:
|
|
6
|
+
* Per-user interaction calls on a record: follow (watch, with its
|
|
7
|
+
* notifications switch), the deprecated favourite (a quiet follow), and the
|
|
7
8
|
* followers list. Each write puts the server's answer into the stored object's
|
|
8
9
|
* `@self`, so a list showing the same object agrees with the toggle.
|
|
9
10
|
*
|
|
@@ -55,7 +56,10 @@ function interactionsPlugin() {
|
|
|
55
56
|
},
|
|
56
57
|
|
|
57
58
|
/**
|
|
58
|
-
* Star a record.
|
|
59
|
+
* Star a record: a quiet follow on the server.
|
|
60
|
+
*
|
|
61
|
+
* @deprecated A favourite is a follow with notifications off since
|
|
62
|
+
* OpenRegister's `merge-follow-and-favourites`; use `watch(type, id, { notify: false })`.
|
|
59
63
|
*
|
|
60
64
|
* @param {string} type The registered object type slug
|
|
61
65
|
* @param {string} objectId The object ID
|
|
@@ -65,13 +69,15 @@ function interactionsPlugin() {
|
|
|
65
69
|
const { register, schema } = this._interactionTarget(type);
|
|
66
70
|
const result = await setFavourite(register, schema, objectId, true);
|
|
67
71
|
if (result.ok) {
|
|
68
|
-
this._patchSelf(type, objectId, { favourite: true });
|
|
72
|
+
this._patchSelf(type, objectId, { favourite: true, watching: true });
|
|
69
73
|
}
|
|
70
74
|
return result
|
|
71
75
|
},
|
|
72
76
|
|
|
73
77
|
/**
|
|
74
|
-
* Unstar a record.
|
|
78
|
+
* Unstar a record: unfollow it.
|
|
79
|
+
*
|
|
80
|
+
* @deprecated Use `unwatch`.
|
|
75
81
|
*
|
|
76
82
|
* @param {string} type The registered object type slug
|
|
77
83
|
* @param {string} objectId The object ID
|
|
@@ -81,7 +87,7 @@ function interactionsPlugin() {
|
|
|
81
87
|
const { register, schema } = this._interactionTarget(type);
|
|
82
88
|
const result = await setFavourite(register, schema, objectId, false);
|
|
83
89
|
if (result.ok) {
|
|
84
|
-
this._patchSelf(type, objectId, { favourite: false });
|
|
90
|
+
this._patchSelf(type, objectId, { favourite: false, watching: false, watchNotify: undefined });
|
|
85
91
|
}
|
|
86
92
|
return result
|
|
87
93
|
},
|
|
@@ -119,17 +125,21 @@ function interactionsPlugin() {
|
|
|
119
125
|
},
|
|
120
126
|
|
|
121
127
|
/**
|
|
122
|
-
* Follow a record.
|
|
128
|
+
* Follow a record, optionally setting its notifications switch.
|
|
123
129
|
*
|
|
124
130
|
* @param {string} type The registered object type slug
|
|
125
131
|
* @param {string} objectId The object ID
|
|
132
|
+
* @param {object} [options] Options
|
|
133
|
+
* @param {boolean} [options.notify] The notifications switch; left out, a new follow notifies
|
|
126
134
|
* @return {Promise<object>} The outcome
|
|
135
|
+
* @spec openspec/changes/one-follow-control/specs/record-follow/spec.md#requirement-one-follow-control-with-a-notifications-switch
|
|
127
136
|
*/
|
|
128
|
-
async watch(type, objectId) {
|
|
137
|
+
async watch(type, objectId, options = {}) {
|
|
129
138
|
const { register, schema } = this._interactionTarget(type);
|
|
130
|
-
const result = await setWatching(register, schema, objectId, true);
|
|
139
|
+
const result = await setWatching(register, schema, objectId, true, options);
|
|
131
140
|
if (result.ok) {
|
|
132
|
-
|
|
141
|
+
const notify = result.data && typeof result.data.notify === 'boolean' ? result.data.notify : true;
|
|
142
|
+
this._patchSelf(type, objectId, { watching: true, favourite: true, watchNotify: notify });
|
|
133
143
|
}
|
|
134
144
|
return result
|
|
135
145
|
},
|
|
@@ -145,7 +155,7 @@ function interactionsPlugin() {
|
|
|
145
155
|
const { register, schema } = this._interactionTarget(type);
|
|
146
156
|
const result = await setWatching(register, schema, objectId, false);
|
|
147
157
|
if (result.ok) {
|
|
148
|
-
this._patchSelf(type, objectId, { watching: false });
|
|
158
|
+
this._patchSelf(type, objectId, { watching: false, favourite: false, watchNotify: undefined });
|
|
149
159
|
}
|
|
150
160
|
return result
|
|
151
161
|
},
|