@conduction/nextcloud-vue 2.149.0 → 2.150.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/CnChartWidget/CnChartWidget.vue.js +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js +12 -0
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue2.js.map +1 -1
- package/dist/esm/components/CnChartWidget/CnChartWidget.vue3.js.map +1 -1
- package/dist/esm/library-style.js +1 -1
- package/dist/esm/nextcloud-vue.css +84 -76
- package/dist/esm/utils/fillTemplate.js +19 -2
- package/dist/esm/utils/fillTemplate.js.map +1 -1
- package/dist/nextcloud-vue.cjs.js +32 -3
- package/dist/nextcloud-vue.cjs.js.map +2 -2
- package/dist/nextcloud-vue.css +84 -76
- package/package.json +1 -1
- package/src/components/CnChartWidget/CnChartWidget.md +1 -1
- package/src/components/CnChartWidget/CnChartWidget.vue +12 -0
- package/src/css/board.css +2 -0
- package/src/css/look-board-index.css +5 -1
- package/src/utils/fillTemplate.js +19 -2
|
@@ -24950,6 +24950,9 @@ var script$8z = {
|
|
|
24950
24950
|
aggregateData: null,
|
|
24951
24951
|
// The `cellSource` matrix, laid out (`{ series, categories, columnKeys }`), or null.
|
|
24952
24952
|
cellData: null,
|
|
24953
|
+
// The record a `cellSource` with `cellsPath` read its cells from, for
|
|
24954
|
+
// `@source.<field>` in the notice.
|
|
24955
|
+
cellRecord: null,
|
|
24953
24956
|
// Active `views[]` switcher key (null = the first view). Local
|
|
24954
24957
|
// UI state only — never persisted.
|
|
24955
24958
|
activeViewKey: null,
|
|
@@ -25594,6 +25597,14 @@ var script$8z = {
|
|
|
25594
25597
|
}
|
|
25595
25598
|
const declared = def.values && typeof def.values === 'object' ? def.values : {};
|
|
25596
25599
|
const resolved = resolveFilterTokens(declared, this.chartTokenCtx());
|
|
25600
|
+
// `@source.<field>`: a field of the record the matrix read its cells
|
|
25601
|
+
// from (the matrix's name and version on an enforcement advice).
|
|
25602
|
+
for (const [name, token] of Object.entries(declared)) {
|
|
25603
|
+
if (typeof token === 'string' && token.startsWith('@source.')) {
|
|
25604
|
+
const value = token.slice('@source.'.length).split('.').reduce((at, key) => (at && typeof at === 'object' ? at[key] : undefined), this.cellRecord);
|
|
25605
|
+
resolved[name] = value === undefined ? null : value;
|
|
25606
|
+
}
|
|
25607
|
+
}
|
|
25597
25608
|
const source = this.cellSource && typeof this.cellSource === 'object' ? this.cellSource : {};
|
|
25598
25609
|
const maps = { rows: source.rowLabels, columns: source.columnLabels, values: source.valueLabels };
|
|
25599
25610
|
const words = {};
|
|
@@ -26322,6 +26333,7 @@ var script$8z = {
|
|
|
26322
26333
|
if (this._cellRequest !== key) {
|
|
26323
26334
|
return
|
|
26324
26335
|
}
|
|
26336
|
+
this.cellRecord = this.cellSource.cellsPath ? (records[0] || null) : null;
|
|
26325
26337
|
if (this.cellSource.cellsPath) {
|
|
26326
26338
|
const { cells, config } = cellsFromRecord(records[0] || null, this.cellSource, cellFilter);
|
|
26327
26339
|
this.cellData = pivotCells(cells, config);
|
|
@@ -27060,7 +27072,7 @@ function render$8y(_ctx, _cache, $props, $setup, $data, $options) {
|
|
|
27060
27072
|
}
|
|
27061
27073
|
|
|
27062
27074
|
script$8z.render = render$8y;
|
|
27063
|
-
script$8z.__scopeId = "data-v-
|
|
27075
|
+
script$8z.__scopeId = "data-v-37644514";
|
|
27064
27076
|
const __sfc_main$8t = script$8z;
|
|
27065
27077
|
|
|
27066
27078
|
/**
|
|
@@ -41834,6 +41846,22 @@ function formatLongDate(value, now = new Date(), withYear = false) {
|
|
|
41834
41846
|
}
|
|
41835
41847
|
}
|
|
41836
41848
|
|
|
41849
|
+
/**
|
|
41850
|
+
* How many entries a list holds; with a key, the entries of that list in each
|
|
41851
|
+
* of its entries summed (`{sections|count:items}`: the questions of every
|
|
41852
|
+
* section of a checklist).
|
|
41853
|
+
*
|
|
41854
|
+
* @param {Array} list The list.
|
|
41855
|
+
* @param {string} key The key of each entry's own list, or '' to count the entries.
|
|
41856
|
+
* @return {number} The count.
|
|
41857
|
+
*/
|
|
41858
|
+
function countEntries(list, key) {
|
|
41859
|
+
if (key === '') {
|
|
41860
|
+
return list.length
|
|
41861
|
+
}
|
|
41862
|
+
return list.reduce((sum, entry) => sum + (entry && Array.isArray(entry[key]) ? entry[key].length : 0), 0)
|
|
41863
|
+
}
|
|
41864
|
+
|
|
41837
41865
|
/**
|
|
41838
41866
|
* Format one token value.
|
|
41839
41867
|
*
|
|
@@ -41850,7 +41878,7 @@ function formatLongDate(value, now = new Date(), withYear = false) {
|
|
|
41850
41878
|
function formatValue(value, format, now, arg = '', object = null, config = null, formatters = null) {
|
|
41851
41879
|
// `{list|count}`: how many entries a list holds, nothing for an empty one.
|
|
41852
41880
|
if (format === 'count') {
|
|
41853
|
-
const count = Array.isArray(value) ? value
|
|
41881
|
+
const count = Array.isArray(value) ? countEntries(value, arg) : Number(value);
|
|
41854
41882
|
return Number.isFinite(count) && count > 0 ? String(count) : ''
|
|
41855
41883
|
}
|
|
41856
41884
|
if (value === null || value === undefined || value === '' || typeof value === 'object') {
|
|
@@ -41934,7 +41962,8 @@ function formatValue(value, format, now, arg = '', object = null, config = null,
|
|
|
41934
41962
|
* ("vandaag, 09.42"), `{path|ago}` says how long ago it was ("10 min
|
|
41935
41963
|
* geleden", "vanochtend", "vrijdag"), and `{path|days}` is the
|
|
41936
41964
|
* whole days since that date ("has waited {createdAt|days} days"),
|
|
41937
|
-
* `{path|count}` is how many entries a list holds (nothing for an empty one
|
|
41965
|
+
* `{path|count}` is how many entries a list holds (nothing for an empty one;
|
|
41966
|
+
* `{path|count:key}` sums the `key` list of each entry),
|
|
41938
41967
|
* `{path|lower}` writes the value in lower case ("Step 2: {statusLabel|lower}"
|
|
41939
41968
|
* reads "Step 2: in progress" mid-sentence), and any other name is one of
|
|
41940
41969
|
* the app's formatters, passed as `context.formatters` (`{id|caseAddress}`).
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
[diffend] Oversized file quarantined before diffing.
|
|
2
2
|
name: package/dist/nextcloud-vue.cjs.js.map
|
|
3
|
-
size:
|
|
4
|
-
sha256:
|
|
3
|
+
size: 50055380 bytes
|
|
4
|
+
sha256: c2f523dc7dc2364a1deb46100db51b95207cb80241f95d5c5daadc73c9fad6e4
|
package/dist/nextcloud-vue.css
CHANGED
|
@@ -4527,6 +4527,7 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .modal-mask {
|
|
|
4527
4527
|
|
|
4528
4528
|
.cn-board-view.cn-board-view--board .cn-board-view__card-sub {
|
|
4529
4529
|
font-size: 13px;
|
|
4530
|
+
line-height: normal;
|
|
4530
4531
|
color: var(--color-text-maxcontrast);
|
|
4531
4532
|
}
|
|
4532
4533
|
|
|
@@ -4546,6 +4547,7 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .modal-mask {
|
|
|
4546
4547
|
|
|
4547
4548
|
.cn-board-view.cn-board-view--board .cn-board-view__card-footer {
|
|
4548
4549
|
display: flex;
|
|
4550
|
+
line-height: normal;
|
|
4549
4551
|
align-items: center;
|
|
4550
4552
|
justify-content: space-between;
|
|
4551
4553
|
gap: 8px;
|
|
@@ -6291,17 +6293,19 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .modal-mask {
|
|
|
6291
6293
|
margin: 0;
|
|
6292
6294
|
font-size: 17px;
|
|
6293
6295
|
font-weight: 700;
|
|
6294
|
-
line-height:
|
|
6296
|
+
line-height: normal;
|
|
6295
6297
|
text-decoration: none;
|
|
6296
6298
|
white-space: normal;
|
|
6297
6299
|
}
|
|
6298
6300
|
|
|
6299
6301
|
.cn-look-board .cn-object-card--board .cn-object-card__record-meta {
|
|
6300
6302
|
--nldesign-component-paragraph-font-size: 14px;
|
|
6303
|
+
--nldesign-component-paragraph-line-height: normal;
|
|
6301
6304
|
--nldesign-component-paragraph-color: var(--color-text-maxcontrast);
|
|
6302
6305
|
margin: 0;
|
|
6303
6306
|
color: var(--color-text-maxcontrast);
|
|
6304
6307
|
font-size: 14px;
|
|
6308
|
+
line-height: normal;
|
|
6305
6309
|
}
|
|
6306
6310
|
|
|
6307
6311
|
/* The meta line, note and description are paragraphs: each hands the theme,
|
|
@@ -6309,11 +6313,13 @@ body:has(.cn-look-board):not(:has(.cn-look-nextcloud)) .modal-mask {
|
|
|
6309
6313
|
.cn-look-board .cn-object-card--board .cn-object-card__record-note {
|
|
6310
6314
|
--nldesign-component-paragraph-font-size: 13px;
|
|
6311
6315
|
--nldesign-component-paragraph-font-weight: 600;
|
|
6316
|
+
--nldesign-component-paragraph-line-height: normal;
|
|
6312
6317
|
--nldesign-component-paragraph-color: var(--cn-board-text-soft);
|
|
6313
6318
|
margin: 0;
|
|
6314
6319
|
color: var(--cn-board-text-soft);
|
|
6315
6320
|
font-size: 13px;
|
|
6316
6321
|
font-weight: 600;
|
|
6322
|
+
line-height: normal;
|
|
6317
6323
|
}
|
|
6318
6324
|
|
|
6319
6325
|
.cn-look-board .cn-object-card--board .cn-object-card__record-note--purple {
|
|
@@ -16996,7 +17002,7 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
16996
17002
|
}
|
|
16997
17003
|
|
|
16998
17004
|
|
|
16999
|
-
.cn-chart-widget[data-v-
|
|
17005
|
+
.cn-chart-widget[data-v-37644514] {
|
|
17000
17006
|
width: 100%;
|
|
17001
17007
|
/* A chart FITS its container — it is never a scroll region. apexcharts
|
|
17002
17008
|
sizes its SVG from the element it is mounted in, but it also enforces
|
|
@@ -17018,13 +17024,13 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17018
17024
|
takes what is left, so the chart is sized by the box rather than sizing it.
|
|
17019
17025
|
`min-height: 0` drops the 100px floor — on a fixed-height surface a floor is
|
|
17020
17026
|
the thing that produces the overflow it was meant to prevent. */
|
|
17021
|
-
.cn-chart-widget--fit[data-v-
|
|
17027
|
+
.cn-chart-widget--fit[data-v-37644514] {
|
|
17022
17028
|
height: 100%;
|
|
17023
17029
|
min-height: 0;
|
|
17024
17030
|
display: flex;
|
|
17025
17031
|
flex-direction: column;
|
|
17026
17032
|
}
|
|
17027
|
-
.cn-chart-widget__canvas[data-v-
|
|
17033
|
+
.cn-chart-widget__canvas[data-v-37644514] {
|
|
17028
17034
|
min-width: 0;
|
|
17029
17035
|
max-width: 100%;
|
|
17030
17036
|
/* Never a scroll region (see the root). `overflow-x: hidden` alone made
|
|
@@ -17037,14 +17043,14 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17037
17043
|
/* apexcharts writes an inline `width` onto its own wrapper from its measured
|
|
17038
17044
|
minimum, which beats the container when the container is narrower. Cap the
|
|
17039
17045
|
painted box so the inline width cannot push past the widget's border. */
|
|
17040
|
-
.cn-chart-widget[data-v-
|
|
17041
|
-
.cn-chart-widget[data-v-
|
|
17046
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-canvas,
|
|
17047
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-canvas svg {
|
|
17042
17048
|
max-width: 100%;
|
|
17043
17049
|
}
|
|
17044
17050
|
|
|
17045
17051
|
/* The SVG is a block: as an inline box it sits on a line and adds the line's
|
|
17046
17052
|
descender space under the chart. */
|
|
17047
|
-
.cn-chart-widget[data-v-
|
|
17053
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-canvas svg {
|
|
17048
17054
|
display: block;
|
|
17049
17055
|
}
|
|
17050
17056
|
|
|
@@ -17052,24 +17058,24 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17052
17058
|
would grow to its content, i.e. to the chart, and the percentage height would
|
|
17053
17059
|
resolve against a box the chart itself defined. `overflow: hidden` keeps a
|
|
17054
17060
|
sub-pixel rounding difference from reintroducing a scrollbar. */
|
|
17055
|
-
.cn-chart-widget--fit .cn-chart-widget__canvas[data-v-
|
|
17061
|
+
.cn-chart-widget--fit .cn-chart-widget__canvas[data-v-37644514] {
|
|
17056
17062
|
flex: 1 1 0;
|
|
17057
17063
|
min-height: 0;
|
|
17058
17064
|
overflow: hidden;
|
|
17059
17065
|
}
|
|
17060
|
-
.cn-chart-widget__fallback[data-v-
|
|
17066
|
+
.cn-chart-widget__fallback[data-v-37644514] {
|
|
17061
17067
|
display: flex;
|
|
17062
17068
|
align-items: center;
|
|
17063
17069
|
justify-content: center;
|
|
17064
17070
|
min-height: 150px;
|
|
17065
17071
|
color: var(--color-text-maxcontrast);
|
|
17066
17072
|
}
|
|
17067
|
-
.cn-chart-widget__html[data-v-
|
|
17073
|
+
.cn-chart-widget__html[data-v-37644514] {
|
|
17068
17074
|
display: flex;
|
|
17069
17075
|
flex-direction: column;
|
|
17070
17076
|
gap: 12px;
|
|
17071
17077
|
}
|
|
17072
|
-
.cn-chart-widget__bar-list[data-v-
|
|
17078
|
+
.cn-chart-widget__bar-list[data-v-37644514] {
|
|
17073
17079
|
display: flex;
|
|
17074
17080
|
flex-direction: column;
|
|
17075
17081
|
gap: 10px;
|
|
@@ -17077,7 +17083,7 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17077
17083
|
margin: 0;
|
|
17078
17084
|
padding: 0;
|
|
17079
17085
|
}
|
|
17080
|
-
.cn-chart-widget__bar-line[data-v-
|
|
17086
|
+
.cn-chart-widget__bar-line[data-v-37644514] {
|
|
17081
17087
|
align-items: center;
|
|
17082
17088
|
background: none;
|
|
17083
17089
|
border: 0;
|
|
@@ -17092,32 +17098,32 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17092
17098
|
text-align: start;
|
|
17093
17099
|
width: 100%;
|
|
17094
17100
|
}
|
|
17095
|
-
.cn-chart-widget__bar-line--drill[data-v-
|
|
17101
|
+
.cn-chart-widget__bar-line--drill[data-v-37644514] {
|
|
17096
17102
|
border-radius: var(--border-radius-small, 4px);
|
|
17097
17103
|
cursor: pointer;
|
|
17098
17104
|
}
|
|
17099
|
-
.cn-chart-widget__bar-line--drill:hover .cn-chart-widget__bar-label[data-v-
|
|
17100
|
-
.cn-chart-widget__bar-line--drill:focus-visible .cn-chart-widget__bar-label[data-v-
|
|
17105
|
+
.cn-chart-widget__bar-line--drill:hover .cn-chart-widget__bar-label[data-v-37644514],
|
|
17106
|
+
.cn-chart-widget__bar-line--drill:focus-visible .cn-chart-widget__bar-label[data-v-37644514] {
|
|
17101
17107
|
text-decoration: underline;
|
|
17102
17108
|
}
|
|
17103
|
-
.cn-chart-widget__bar-label[data-v-
|
|
17109
|
+
.cn-chart-widget__bar-label[data-v-37644514] {
|
|
17104
17110
|
overflow: hidden;
|
|
17105
17111
|
text-overflow: ellipsis;
|
|
17106
17112
|
white-space: nowrap;
|
|
17107
17113
|
}
|
|
17108
|
-
.cn-chart-widget__bar-track[data-v-
|
|
17114
|
+
.cn-chart-widget__bar-track[data-v-37644514] {
|
|
17109
17115
|
background: var(--color-background-dark);
|
|
17110
17116
|
border-radius: 4px;
|
|
17111
17117
|
display: block;
|
|
17112
17118
|
height: 14px;
|
|
17113
17119
|
overflow: hidden;
|
|
17114
17120
|
}
|
|
17115
|
-
.cn-chart-widget__bar-fill[data-v-
|
|
17121
|
+
.cn-chart-widget__bar-fill[data-v-37644514] {
|
|
17116
17122
|
background: var(--color-primary-element);
|
|
17117
17123
|
display: block;
|
|
17118
17124
|
height: 100%;
|
|
17119
17125
|
}
|
|
17120
|
-
.cn-chart-widget__bar-value[data-v-
|
|
17126
|
+
.cn-chart-widget__bar-value[data-v-37644514] {
|
|
17121
17127
|
font-weight: 600;
|
|
17122
17128
|
text-align: end;
|
|
17123
17129
|
white-space: nowrap;
|
|
@@ -17125,10 +17131,10 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17125
17131
|
|
|
17126
17132
|
/* `barValueAtEnd`: no track; the bar takes its share of the row and gives way
|
|
17127
17133
|
to the value right after its end, so the longest bar still fits. */
|
|
17128
|
-
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-line[data-v-
|
|
17134
|
+
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-line[data-v-37644514] {
|
|
17129
17135
|
grid-template-columns: minmax(80px, 130px) minmax(0, 1fr);
|
|
17130
17136
|
}
|
|
17131
|
-
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-track[data-v-
|
|
17137
|
+
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-track[data-v-37644514] {
|
|
17132
17138
|
align-items: center;
|
|
17133
17139
|
background: none;
|
|
17134
17140
|
display: flex;
|
|
@@ -17136,71 +17142,71 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17136
17142
|
height: auto;
|
|
17137
17143
|
overflow: visible;
|
|
17138
17144
|
}
|
|
17139
|
-
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-fill[data-v-
|
|
17145
|
+
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-fill[data-v-37644514] {
|
|
17140
17146
|
border-radius: 4px;
|
|
17141
17147
|
flex: 0 1 auto;
|
|
17142
17148
|
height: 18px;
|
|
17143
17149
|
min-width: 2px;
|
|
17144
17150
|
}
|
|
17145
|
-
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-value[data-v-
|
|
17151
|
+
.cn-chart-widget__bar-list--value-at-end .cn-chart-widget__bar-value[data-v-37644514] {
|
|
17146
17152
|
flex: none;
|
|
17147
17153
|
text-align: start;
|
|
17148
17154
|
}
|
|
17149
|
-
.cn-chart-widget__footnote[data-v-
|
|
17155
|
+
.cn-chart-widget__footnote[data-v-37644514] {
|
|
17150
17156
|
color: var(--color-text-maxcontrast);
|
|
17151
17157
|
margin: 0;
|
|
17152
17158
|
}
|
|
17153
|
-
.cn-chart-widget__notice[data-v-
|
|
17159
|
+
.cn-chart-widget__notice[data-v-37644514] {
|
|
17154
17160
|
margin: 12px 0 0;
|
|
17155
17161
|
}
|
|
17156
|
-
.cn-chart-widget__notice-text[data-v-
|
|
17162
|
+
.cn-chart-widget__notice-text[data-v-37644514] {
|
|
17157
17163
|
margin: 0;
|
|
17158
17164
|
}
|
|
17159
17165
|
|
|
17160
17166
|
/* Under an ApexCharts plot the footnote is a sibling of the canvas, so it keeps
|
|
17161
17167
|
its own line height while the canvas takes the rest of a fitted column. */
|
|
17162
|
-
.cn-chart-widget > .cn-chart-widget__footnote[data-v-
|
|
17168
|
+
.cn-chart-widget > .cn-chart-widget__footnote[data-v-37644514] {
|
|
17163
17169
|
flex: 0 0 auto;
|
|
17164
17170
|
margin-top: 8px;
|
|
17165
17171
|
}
|
|
17166
|
-
.cn-chart-widget__matrix[data-v-
|
|
17172
|
+
.cn-chart-widget__matrix[data-v-37644514] {
|
|
17167
17173
|
display: grid;
|
|
17168
17174
|
gap: 4px;
|
|
17169
17175
|
}
|
|
17170
|
-
.cn-chart-widget__matrix-row[data-v-
|
|
17176
|
+
.cn-chart-widget__matrix-row[data-v-37644514] {
|
|
17171
17177
|
display: contents;
|
|
17172
17178
|
}
|
|
17173
17179
|
|
|
17174
17180
|
/* A column takes its share of the width (minmax(0, 1fr)), so a long phase
|
|
17175
17181
|
name breaks inside its own column instead of running into the next. */
|
|
17176
|
-
.cn-chart-widget__matrix-head[data-v-
|
|
17182
|
+
.cn-chart-widget__matrix-head[data-v-37644514] {
|
|
17177
17183
|
--nldesign-color-on-surface: var(--color-text-maxcontrast);
|
|
17178
17184
|
color: var(--color-text-maxcontrast);
|
|
17179
17185
|
padding: 6px;
|
|
17180
17186
|
hyphens: auto;
|
|
17181
17187
|
overflow-wrap: anywhere;
|
|
17182
17188
|
}
|
|
17183
|
-
.cn-chart-widget__matrix-label[data-v-
|
|
17189
|
+
.cn-chart-widget__matrix-label[data-v-37644514] {
|
|
17184
17190
|
padding: 10px 6px;
|
|
17185
17191
|
}
|
|
17186
|
-
.cn-chart-widget__matrix-cell[data-v-
|
|
17192
|
+
.cn-chart-widget__matrix-cell[data-v-37644514] {
|
|
17187
17193
|
border-radius: 6px;
|
|
17188
17194
|
padding: 10px;
|
|
17189
17195
|
text-align: center;
|
|
17190
17196
|
}
|
|
17191
|
-
.cn-chart-widget__matrix-cell--success[data-v-
|
|
17197
|
+
.cn-chart-widget__matrix-cell--success[data-v-37644514] {
|
|
17192
17198
|
background: var(--color-success-light, color-mix(in srgb, var(--color-success) 15%, var(--color-main-background)));
|
|
17193
17199
|
}
|
|
17194
|
-
.cn-chart-widget__matrix-cell--warning[data-v-
|
|
17200
|
+
.cn-chart-widget__matrix-cell--warning[data-v-37644514] {
|
|
17195
17201
|
background: var(--color-warning-light, color-mix(in srgb, var(--color-warning) 15%, var(--color-main-background)));
|
|
17196
17202
|
}
|
|
17197
|
-
.cn-chart-widget__matrix-cell--error[data-v-
|
|
17203
|
+
.cn-chart-widget__matrix-cell--error[data-v-37644514] {
|
|
17198
17204
|
background: var(--color-error-light, color-mix(in srgb, var(--color-error) 12%, var(--color-main-background)));
|
|
17199
17205
|
}
|
|
17200
|
-
.cn-chart-widget__matrix-cell--danger[data-v-
|
|
17206
|
+
.cn-chart-widget__matrix-cell--danger[data-v-37644514] {
|
|
17201
17207
|
background: color-mix(in srgb, var(--color-error) 25%, var(--color-main-background));
|
|
17202
17208
|
}
|
|
17203
|
-
.cn-chart-widget__matrix-cell--current[data-v-
|
|
17209
|
+
.cn-chart-widget__matrix-cell--current[data-v-37644514] {
|
|
17204
17210
|
font-weight: 700;
|
|
17205
17211
|
outline: 3px solid var(--color-primary-element);
|
|
17206
17212
|
outline-offset: -3px;
|
|
@@ -17212,26 +17218,26 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17212
17218
|
primary at 35% and at 70%, and level 1 inverted. Levels 1 to 3 take a dark
|
|
17213
17219
|
ink; the board's white on level 3 is about 3.1:1, and 70% is as deep as the
|
|
17214
17220
|
dark ink stays at 4.5:1 in Nextcloud's dark theme. */
|
|
17215
|
-
.cn-chart-widget__matrix-cell--1[data-v-
|
|
17221
|
+
.cn-chart-widget__matrix-cell--1[data-v-37644514] {
|
|
17216
17222
|
--nldesign-color-on-surface: var(--color-primary-element-light-text);
|
|
17217
17223
|
background: var(--color-primary-element-light);
|
|
17218
17224
|
color: var(--color-primary-element-light-text);
|
|
17219
17225
|
}
|
|
17220
|
-
.cn-chart-widget__matrix-cell--2[data-v-
|
|
17226
|
+
.cn-chart-widget__matrix-cell--2[data-v-37644514] {
|
|
17221
17227
|
background: color-mix(in srgb, var(--color-primary-element) 35%, var(--color-main-background));
|
|
17222
17228
|
color: var(--color-main-text);
|
|
17223
17229
|
}
|
|
17224
|
-
.cn-chart-widget__matrix-cell--3[data-v-
|
|
17230
|
+
.cn-chart-widget__matrix-cell--3[data-v-37644514] {
|
|
17225
17231
|
--nldesign-color-on-surface: var(--color-main-text);
|
|
17226
17232
|
background: color-mix(in srgb, var(--color-primary-element) 70%, var(--color-main-background));
|
|
17227
17233
|
color: var(--color-main-text);
|
|
17228
17234
|
}
|
|
17229
|
-
.cn-chart-widget__matrix-cell--4[data-v-
|
|
17235
|
+
.cn-chart-widget__matrix-cell--4[data-v-37644514] {
|
|
17230
17236
|
--nldesign-color-on-surface: var(--color-primary-element-light);
|
|
17231
17237
|
background: var(--color-primary-element-light-text);
|
|
17232
17238
|
color: var(--color-primary-element-light);
|
|
17233
17239
|
}
|
|
17234
|
-
.cn-chart-widget__empty[data-v-
|
|
17240
|
+
.cn-chart-widget__empty[data-v-37644514] {
|
|
17235
17241
|
display: flex;
|
|
17236
17242
|
align-items: center;
|
|
17237
17243
|
justify-content: center;
|
|
@@ -17246,25 +17252,25 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17246
17252
|
content-sized case; in fit mode they take the leftover space and centre in it
|
|
17247
17253
|
instead, since the floor would overflow a short tile. Declared after the base
|
|
17248
17254
|
rules so the cascade order matches specificity (no-descending-specificity). */
|
|
17249
|
-
.cn-chart-widget--fit .cn-chart-widget__empty[data-v-
|
|
17250
|
-
.cn-chart-widget--fit .cn-chart-widget__fallback[data-v-
|
|
17255
|
+
.cn-chart-widget--fit .cn-chart-widget__empty[data-v-37644514],
|
|
17256
|
+
.cn-chart-widget--fit .cn-chart-widget__fallback[data-v-37644514] {
|
|
17251
17257
|
flex: 1 1 0;
|
|
17252
17258
|
min-height: 0;
|
|
17253
17259
|
}
|
|
17254
|
-
.cn-chart-widget__error[data-v-
|
|
17260
|
+
.cn-chart-widget__error[data-v-37644514] {
|
|
17255
17261
|
font-size: 14px;
|
|
17256
17262
|
margin: 0;
|
|
17257
17263
|
}
|
|
17258
17264
|
|
|
17259
17265
|
/* In-widget view switcher pills (views[] prop) — compact segmented row,
|
|
17260
17266
|
mirroring the dashboard date-range pill styling. */
|
|
17261
|
-
.cn-chart-widget__views[data-v-
|
|
17267
|
+
.cn-chart-widget__views[data-v-37644514] {
|
|
17262
17268
|
display: flex;
|
|
17263
17269
|
gap: 4px;
|
|
17264
17270
|
margin-bottom: 6px;
|
|
17265
17271
|
justify-content: flex-end;
|
|
17266
17272
|
}
|
|
17267
|
-
.cn-chart-widget__view-pill[data-v-
|
|
17273
|
+
.cn-chart-widget__view-pill[data-v-37644514] {
|
|
17268
17274
|
padding: 2px 10px;
|
|
17269
17275
|
border: 1px solid var(--color-border);
|
|
17270
17276
|
border-radius: 999px;
|
|
@@ -17273,7 +17279,7 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17273
17279
|
font-size: 12px;
|
|
17274
17280
|
cursor: pointer;
|
|
17275
17281
|
}
|
|
17276
|
-
.cn-chart-widget__view-pill--active[data-v-
|
|
17282
|
+
.cn-chart-widget__view-pill--active[data-v-37644514] {
|
|
17277
17283
|
background: var(--color-primary-element-light, #aad2ed);
|
|
17278
17284
|
color: var(--color-main-text);
|
|
17279
17285
|
border-color: var(--color-primary-element, #0082c9);
|
|
@@ -17302,8 +17308,8 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17302
17308
|
each override below therefore carries one more class than the apexcharts rule
|
|
17303
17309
|
it replaces, and holds even without the scope attribute this block compiles
|
|
17304
17310
|
with. */
|
|
17305
|
-
.cn-chart-widget[data-v-
|
|
17306
|
-
.cn-chart-widget[data-v-
|
|
17311
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-tooltip.apexcharts-theme-light,
|
|
17312
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-tooltip.apexcharts-theme-dark {
|
|
17307
17313
|
background: var(--color-main-background);
|
|
17308
17314
|
border: 1px solid var(--color-border);
|
|
17309
17315
|
color: var(--color-main-text);
|
|
@@ -17312,8 +17318,8 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17312
17318
|
|
|
17313
17319
|
/* The title row is the date/category header ("Aug 26"). Its own background is
|
|
17314
17320
|
what made it unreadable rather than merely off-theme. */
|
|
17315
|
-
.cn-chart-widget[data-v-
|
|
17316
|
-
.cn-chart-widget[data-v-
|
|
17321
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,
|
|
17322
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {
|
|
17317
17323
|
background: var(--color-background-hover);
|
|
17318
17324
|
border-bottom: 1px solid var(--color-border);
|
|
17319
17325
|
color: var(--color-main-text);
|
|
@@ -17322,8 +17328,8 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17322
17328
|
/* Crosshair axis tooltips. apexcharts puts light hex values on the BASE class
|
|
17323
17329
|
here and only overrides them for its dark theme, so the base rule has to be
|
|
17324
17330
|
replaced too — not just the theme variants. */
|
|
17325
|
-
.cn-chart-widget[data-v-
|
|
17326
|
-
.cn-chart-widget[data-v-
|
|
17331
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-xaxistooltip,
|
|
17332
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-yaxistooltip {
|
|
17327
17333
|
background: var(--color-main-background);
|
|
17328
17334
|
border: 1px solid var(--color-border);
|
|
17329
17335
|
color: var(--color-main-text);
|
|
@@ -17332,55 +17338,55 @@ li[data-cn-admin-tag] > .action-link::after {
|
|
|
17332
17338
|
/* Their pointer arrows are two stacked triangles: `::before` paints the border
|
|
17333
17339
|
edge, `::after` the fill. Both need the tokens the box above uses, or the
|
|
17334
17340
|
arrow keeps the old palette and reads as a stray light wedge. */
|
|
17335
|
-
.cn-chart-widget[data-v-
|
|
17336
|
-
.cn-chart-widget[data-v-
|
|
17341
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-xaxistooltip-bottom::after,
|
|
17342
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-xaxistooltip-top::after {
|
|
17337
17343
|
border-bottom-color: var(--color-main-background);
|
|
17338
17344
|
border-top-color: var(--color-main-background);
|
|
17339
17345
|
}
|
|
17340
|
-
.cn-chart-widget[data-v-
|
|
17341
|
-
.cn-chart-widget[data-v-
|
|
17346
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-xaxistooltip-bottom::before,
|
|
17347
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-xaxistooltip-top::before {
|
|
17342
17348
|
border-bottom-color: var(--color-border);
|
|
17343
17349
|
border-top-color: var(--color-border);
|
|
17344
17350
|
}
|
|
17345
|
-
.cn-chart-widget[data-v-
|
|
17346
|
-
.cn-chart-widget[data-v-
|
|
17351
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-yaxistooltip-left::after,
|
|
17352
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-yaxistooltip-right::after {
|
|
17347
17353
|
border-left-color: var(--color-main-background);
|
|
17348
17354
|
border-right-color: var(--color-main-background);
|
|
17349
17355
|
}
|
|
17350
|
-
.cn-chart-widget[data-v-
|
|
17351
|
-
.cn-chart-widget[data-v-
|
|
17356
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-yaxistooltip-left::before,
|
|
17357
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-yaxistooltip-right::before {
|
|
17352
17358
|
border-left-color: var(--color-border);
|
|
17353
17359
|
border-right-color: var(--color-border);
|
|
17354
17360
|
}
|
|
17355
17361
|
|
|
17356
17362
|
/* Toolbar menu — only reachable with `toolbar: true`, but the same defect: a
|
|
17357
17363
|
hardcoded `#fff` panel under inherited near-white text. */
|
|
17358
|
-
.cn-chart-widget[data-v-
|
|
17364
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-menu {
|
|
17359
17365
|
background: var(--color-main-background);
|
|
17360
17366
|
border: 1px solid var(--color-border);
|
|
17361
17367
|
color: var(--color-main-text);
|
|
17362
17368
|
}
|
|
17363
|
-
.cn-chart-widget[data-v-
|
|
17369
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-menu .apexcharts-menu-item:hover {
|
|
17364
17370
|
background: var(--color-background-hover);
|
|
17365
17371
|
}
|
|
17366
17372
|
|
|
17367
17373
|
/* Toolbar icons: `#6e8192` at rest and `#333` on hover, i.e. the hover state
|
|
17368
17374
|
vanishes against a dark background. One selector per icon class, matching
|
|
17369
17375
|
apexcharts' own list, to clear its (0,3,1) hover rules. */
|
|
17370
|
-
.cn-chart-widget[data-v-
|
|
17371
|
-
.cn-chart-widget[data-v-
|
|
17372
|
-
.cn-chart-widget[data-v-
|
|
17373
|
-
.cn-chart-widget[data-v-
|
|
17374
|
-
.cn-chart-widget[data-v-
|
|
17375
|
-
.cn-chart-widget[data-v-
|
|
17376
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-menu-icon svg,
|
|
17377
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-reset-icon svg,
|
|
17378
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-selection-icon svg,
|
|
17379
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-zoom-icon svg,
|
|
17380
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-zoomin-icon svg,
|
|
17381
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-zoomout-icon svg {
|
|
17376
17382
|
fill: var(--color-text-maxcontrast);
|
|
17377
17383
|
}
|
|
17378
|
-
.cn-chart-widget[data-v-
|
|
17379
|
-
.cn-chart-widget[data-v-
|
|
17380
|
-
.cn-chart-widget[data-v-
|
|
17381
|
-
.cn-chart-widget[data-v-
|
|
17382
|
-
.cn-chart-widget[data-v-
|
|
17383
|
-
.cn-chart-widget[data-v-
|
|
17384
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-menu-icon:hover svg,
|
|
17385
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-reset-icon:hover svg,
|
|
17386
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-selection-icon:hover svg,
|
|
17387
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-zoom-icon:hover svg,
|
|
17388
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-zoomin-icon:hover svg,
|
|
17389
|
+
.cn-chart-widget[data-v-37644514] .apexcharts-toolbar .apexcharts-zoomout-icon:hover svg {
|
|
17384
17390
|
fill: var(--color-main-text);
|
|
17385
17391
|
}
|
|
17386
17392
|
|
|
@@ -48554,6 +48560,7 @@ to {
|
|
|
48554
48560
|
|
|
48555
48561
|
.cn-board-view.cn-board-view--board .cn-board-view__card-sub {
|
|
48556
48562
|
font-size: 13px;
|
|
48563
|
+
line-height: normal;
|
|
48557
48564
|
color: var(--color-text-maxcontrast);
|
|
48558
48565
|
}
|
|
48559
48566
|
|
|
@@ -48573,6 +48580,7 @@ to {
|
|
|
48573
48580
|
|
|
48574
48581
|
.cn-board-view.cn-board-view--board .cn-board-view__card-footer {
|
|
48575
48582
|
display: flex;
|
|
48583
|
+
line-height: normal;
|
|
48576
48584
|
align-items: center;
|
|
48577
48585
|
justify-content: space-between;
|
|
48578
48586
|
gap: 8px;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@conduction/nextcloud-vue",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.150.0",
|
|
4
4
|
"description": "Shared Vue component library for Conduction Nextcloud apps — complements @nextcloud/vue with higher-level components, OpenRegister integration, and NL Design System support",
|
|
5
5
|
"homepage": "https://github.com/ConductionNL/nextcloud-vue#readme",
|
|
6
6
|
"bugs": {
|
|
@@ -109,7 +109,7 @@ Fallback slot — shown when ApexCharts is not available:
|
|
|
109
109
|
| `barMax` | Number | `null` | `bar-list`: the value a full track stands for (100 for percentages); null takes the largest value |
|
|
110
110
|
| `matrixLabelWidth` | Number | `null` | `matrix`: the row-label column's width in px; a long label wraps (DqProcesanalyse "Dagen per fase": 240). Null sizes the column to its longest label, at least 120px |
|
|
111
111
|
| `footnote` | String | `''` | A line under the chart, through the host's translate: under the rows of a `bar-list` or `matrix`, under the plot of a `line`, `area` or `bar` chart |
|
|
112
|
-
| `notice` | Object | `null` | A toned note card under the chart: `{ lead?, text?, values?, labels?, tone? }`. `{name}` in `lead` (bold) and `text` is filled from `values[name]`, a literal
|
|
112
|
+
| `notice` | Object | `null` | A toned note card under the chart: `{ lead?, text?, values?, labels?, tone? }`. `{name}` in `lead` (bold) and `text` is filled from `values[name]`, a literal, a record token (`@object.<field>`) or a field of the record a `cellSource` with `cellsPath` read its cells from (`@source.<field>`, such as the matrix's name); `labels[name]` (`"rows"`, `"columns"`, `"values"` or a map) turns a key into words. `tone`: info, success, warning, error. Hidden while a value is missing |
|
|
113
113
|
| `referenceLines` | Array | `[]` | Dashed horizontal reference lines on the value axis of a line, area or bar chart, such as a norm: `[{ value, label?, color? }]`. The label goes through the host's translate; the colour defaults to the theme's error colour (board DqDoorlooptijd). `valuePath` reads the value from the endpoint answer instead, `{value}` in the label writes it, and a line without a value is not drawn. |
|
|
114
114
|
| `categoryFormat` | String | `''` | How date categories read on the x-axis: `month` ("jan") or `month-year` ("jan 2026"), in the user's language, or `week` for ISO week keys ("2026-W40" as "w40"). Categories that are not dates are left as is; a bare year key stays a year. |
|
|
115
115
|
| `emptyCellLabel` | String | `''` | `matrix`: the text of a cell without a value ("geen"), through the host's translate. Empty leaves the cell blank |
|
|
@@ -1020,6 +1020,9 @@ export default {
|
|
|
1020
1020
|
aggregateData: null,
|
|
1021
1021
|
// The `cellSource` matrix, laid out (`{ series, categories, columnKeys }`), or null.
|
|
1022
1022
|
cellData: null,
|
|
1023
|
+
// The record a `cellSource` with `cellsPath` read its cells from, for
|
|
1024
|
+
// `@source.<field>` in the notice.
|
|
1025
|
+
cellRecord: null,
|
|
1023
1026
|
// Active `views[]` switcher key (null = the first view). Local
|
|
1024
1027
|
// UI state only — never persisted.
|
|
1025
1028
|
activeViewKey: null,
|
|
@@ -1664,6 +1667,14 @@ export default {
|
|
|
1664
1667
|
}
|
|
1665
1668
|
const declared = def.values && typeof def.values === 'object' ? def.values : {}
|
|
1666
1669
|
const resolved = resolveFilterTokens(declared, this.chartTokenCtx())
|
|
1670
|
+
// `@source.<field>`: a field of the record the matrix read its cells
|
|
1671
|
+
// from (the matrix's name and version on an enforcement advice).
|
|
1672
|
+
for (const [name, token] of Object.entries(declared)) {
|
|
1673
|
+
if (typeof token === 'string' && token.startsWith('@source.')) {
|
|
1674
|
+
const value = token.slice('@source.'.length).split('.').reduce((at, key) => (at && typeof at === 'object' ? at[key] : undefined), this.cellRecord)
|
|
1675
|
+
resolved[name] = value === undefined ? null : value
|
|
1676
|
+
}
|
|
1677
|
+
}
|
|
1667
1678
|
const source = this.cellSource && typeof this.cellSource === 'object' ? this.cellSource : {}
|
|
1668
1679
|
const maps = { rows: source.rowLabels, columns: source.columnLabels, values: source.valueLabels }
|
|
1669
1680
|
const words = {}
|
|
@@ -2392,6 +2403,7 @@ export default {
|
|
|
2392
2403
|
if (this._cellRequest !== key) {
|
|
2393
2404
|
return
|
|
2394
2405
|
}
|
|
2406
|
+
this.cellRecord = this.cellSource.cellsPath ? (records[0] || null) : null
|
|
2395
2407
|
if (this.cellSource.cellsPath) {
|
|
2396
2408
|
const { cells, config } = cellsFromRecord(records[0] || null, this.cellSource, cellFilter)
|
|
2397
2409
|
this.cellData = pivotCells(cells, config)
|
package/src/css/board.css
CHANGED
|
@@ -132,6 +132,7 @@
|
|
|
132
132
|
|
|
133
133
|
.cn-board-view.cn-board-view--board .cn-board-view__card-sub {
|
|
134
134
|
font-size: 13px;
|
|
135
|
+
line-height: normal;
|
|
135
136
|
color: var(--color-text-maxcontrast);
|
|
136
137
|
}
|
|
137
138
|
|
|
@@ -151,6 +152,7 @@
|
|
|
151
152
|
|
|
152
153
|
.cn-board-view.cn-board-view--board .cn-board-view__card-footer {
|
|
153
154
|
display: flex;
|
|
155
|
+
line-height: normal;
|
|
154
156
|
align-items: center;
|
|
155
157
|
justify-content: space-between;
|
|
156
158
|
gap: 8px;
|
|
@@ -1514,17 +1514,19 @@
|
|
|
1514
1514
|
margin: 0;
|
|
1515
1515
|
font-size: 17px;
|
|
1516
1516
|
font-weight: 700;
|
|
1517
|
-
line-height:
|
|
1517
|
+
line-height: normal;
|
|
1518
1518
|
text-decoration: none;
|
|
1519
1519
|
white-space: normal;
|
|
1520
1520
|
}
|
|
1521
1521
|
|
|
1522
1522
|
.cn-look-board .cn-object-card--board .cn-object-card__record-meta {
|
|
1523
1523
|
--nldesign-component-paragraph-font-size: 14px;
|
|
1524
|
+
--nldesign-component-paragraph-line-height: normal;
|
|
1524
1525
|
--nldesign-component-paragraph-color: var(--color-text-maxcontrast);
|
|
1525
1526
|
margin: 0;
|
|
1526
1527
|
color: var(--color-text-maxcontrast);
|
|
1527
1528
|
font-size: 14px;
|
|
1529
|
+
line-height: normal;
|
|
1528
1530
|
}
|
|
1529
1531
|
|
|
1530
1532
|
/* The meta line, note and description are paragraphs: each hands the theme,
|
|
@@ -1532,11 +1534,13 @@
|
|
|
1532
1534
|
.cn-look-board .cn-object-card--board .cn-object-card__record-note {
|
|
1533
1535
|
--nldesign-component-paragraph-font-size: 13px;
|
|
1534
1536
|
--nldesign-component-paragraph-font-weight: 600;
|
|
1537
|
+
--nldesign-component-paragraph-line-height: normal;
|
|
1535
1538
|
--nldesign-component-paragraph-color: var(--cn-board-text-soft);
|
|
1536
1539
|
margin: 0;
|
|
1537
1540
|
color: var(--cn-board-text-soft);
|
|
1538
1541
|
font-size: 13px;
|
|
1539
1542
|
font-weight: 600;
|
|
1543
|
+
line-height: normal;
|
|
1540
1544
|
}
|
|
1541
1545
|
|
|
1542
1546
|
.cn-look-board .cn-object-card--board .cn-object-card__record-note--purple {
|