@conduction/nextcloud-vue 0.1.0-beta.11 → 0.1.0-beta.12
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/nextcloud-vue.cjs +67614 -0
- package/dist/nextcloud-vue.cjs.js +13518 -13617
- package/dist/nextcloud-vue.cjs.js.map +1 -1
- package/dist/nextcloud-vue.cjs.map +1 -0
- package/dist/nextcloud-vue.css +1796 -1800
- package/dist/nextcloud-vue.esm.js +13518 -13617
- package/dist/nextcloud-vue.esm.js.map +1 -1
- package/package.json +3 -2
- package/src/components/CnActionsBar/CnActionsBar.vue +254 -254
- package/src/components/CnAdvancedFormDialog/CnAdvancedFormDialog.vue +570 -570
- package/src/components/CnAdvancedFormDialog/CnDataTab.vue +217 -217
- package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +121 -121
- package/src/components/CnAdvancedFormDialog/CnPropertiesTab.vue +422 -422
- package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +247 -247
- package/src/components/CnCard/CnCard.vue +415 -415
- package/src/components/CnCardGrid/CnCardGrid.vue +156 -156
- package/src/components/CnCellRenderer/CnCellRenderer.vue +132 -132
- package/src/components/CnChartWidget/CnChartWidget.vue +346 -346
- package/src/components/CnConfigurationCard/CnConfigurationCard.vue +77 -77
- package/src/components/CnContextMenu/CnContextMenu.vue +142 -142
- package/src/components/CnCopyDialog/CnCopyDialog.vue +266 -266
- package/src/components/CnDashboardGrid/CnDashboardGrid.vue +229 -229
- package/src/components/CnDashboardPage/CnDashboardPage.vue +397 -397
- package/src/components/CnDataTable/CnDataTable.vue +362 -362
- package/src/components/CnDeleteDialog/CnDeleteDialog.vue +177 -177
- package/src/components/CnDetailCard/CnDetailCard.vue +225 -225
- package/src/components/CnDetailGrid/CnDetailGrid.vue +256 -256
- package/src/components/CnDetailPage/CnDetailPage.vue +432 -432
- package/src/components/CnFacetSidebar/CnFacetSidebar.vue +234 -234
- package/src/components/CnFilterBar/CnFilterBar.vue +153 -153
- package/src/components/CnFormDialog/CnFormDialog.vue +1047 -1047
- package/src/components/CnIcon/CnIcon.vue +89 -89
- package/src/components/CnIndexPage/CnIndexPage.vue +981 -980
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +536 -536
- package/src/components/CnInfoWidget/CnInfoWidget.vue +219 -219
- package/src/components/CnItemCard/CnItemCard.vue +134 -134
- package/src/components/CnJsonViewer/CnJsonViewer.vue +312 -312
- package/src/components/CnKpiGrid/CnKpiGrid.vue +93 -93
- package/src/components/CnMassActionBar/CnMassActionBar.vue +161 -161
- package/src/components/CnMassCopyDialog/CnMassCopyDialog.vue +327 -327
- package/src/components/CnMassDeleteDialog/CnMassDeleteDialog.vue +245 -245
- package/src/components/CnMassExportDialog/CnMassExportDialog.vue +191 -191
- package/src/components/CnMassImportDialog/CnMassImportDialog.vue +494 -494
- package/src/components/CnNoteCard/CnNoteCard.vue +149 -149
- package/src/components/CnNotesCard/CnNotesCard.vue +416 -416
- package/src/components/CnObjectCard/CnObjectCard.vue +294 -294
- package/src/components/CnObjectDataWidget/CnObjectDataWidget.vue +854 -854
- package/src/components/CnObjectMetadataWidget/CnObjectMetadataWidget.vue +289 -289
- package/src/components/CnObjectSidebar/CnAuditTrailTab.vue +369 -369
- package/src/components/CnObjectSidebar/CnFilesTab.vue +287 -287
- package/src/components/CnObjectSidebar/CnNotesTab.vue +250 -250
- package/src/components/CnObjectSidebar/CnObjectSidebar.vue +255 -255
- package/src/components/CnObjectSidebar/CnTagsTab.vue +259 -259
- package/src/components/CnObjectSidebar/CnTasksTab.vue +483 -483
- package/src/components/CnPageHeader/CnPageHeader.vue +61 -61
- package/src/components/CnPagination/CnPagination.vue +253 -253
- package/src/components/CnProgressBar/CnProgressBar.vue +262 -262
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +793 -793
- package/src/components/CnRowActions/CnRowActions.vue +95 -95
- package/src/components/CnSchemaFormDialog/CnSchemaConfigurationTab.vue +226 -226
- package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +788 -788
- package/src/components/CnSchemaFormDialog/CnSchemaPropertiesTab.vue +305 -305
- package/src/components/CnSchemaFormDialog/CnSchemaPropertyActions.vue +1398 -1398
- package/src/components/CnSchemaFormDialog/CnSchemaSecurityTab.vue +236 -236
- package/src/components/CnSettingsCard/CnSettingsCard.vue +92 -92
- package/src/components/CnSettingsSection/CnSettingsSection.vue +267 -267
- package/src/components/CnStatsBlock/CnStatsBlock.vue +437 -437
- package/src/components/CnStatsPanel/CnStatsPanel.vue +321 -321
- package/src/components/CnStatusBadge/CnStatusBadge.vue +90 -90
- package/src/components/CnTabbedFormDialog/CnTabbedFormDialog.vue +545 -545
- package/src/components/CnTableWidget/CnTableWidget.vue +333 -333
- package/src/components/CnTasksCard/CnTasksCard.vue +374 -374
- package/src/components/CnTileWidget/CnTileWidget.vue +159 -159
- package/src/components/CnTimelineStages/CnTimelineStages.vue +294 -294
- package/src/components/CnUserActionMenu/CnUserActionMenu.vue +436 -436
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +313 -313
- package/src/components/CnWidgetRenderer/CnWidgetRenderer.vue +180 -180
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +248 -248
|
@@ -1,219 +1,219 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
CnInfoWidget — Renders label-value pairs in a responsive CSS grid.
|
|
3
|
-
|
|
4
|
-
Supports two modes:
|
|
5
|
-
1. Manual: provide `fields` prop with `[{ label, value }]` objects
|
|
6
|
-
2. Auto-generated: provide `object` + `schema` props to generate from JSON Schema properties
|
|
7
|
-
|
|
8
|
-
Used in dashboard and detail page grid layouts to display entity metadata.
|
|
9
|
-
-->
|
|
10
|
-
<template>
|
|
11
|
-
<div
|
|
12
|
-
class="cn-info-widget"
|
|
13
|
-
:style="gridStyle">
|
|
14
|
-
<div
|
|
15
|
-
v-for="(field, index) in displayFields"
|
|
16
|
-
:key="index"
|
|
17
|
-
class="cn-info-widget__field">
|
|
18
|
-
<dt class="cn-info-widget__label">
|
|
19
|
-
{{ field.label }}
|
|
20
|
-
</dt>
|
|
21
|
-
<dd class="cn-info-widget__value">
|
|
22
|
-
{{ field.value || '—' }}
|
|
23
|
-
</dd>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
</template>
|
|
27
|
-
|
|
28
|
-
<script>
|
|
29
|
-
/**
|
|
30
|
-
* CnInfoWidget — Renders label-value pairs in a responsive CSS grid.
|
|
31
|
-
*
|
|
32
|
-
* @example Manual fields
|
|
33
|
-
* <CnInfoWidget :fields="[
|
|
34
|
-
* { label: 'Email', value: 'test@example.com' },
|
|
35
|
-
* { label: 'Phone', value: '+31 6 12345678' },
|
|
36
|
-
* ]" :columns="2" />
|
|
37
|
-
*
|
|
38
|
-
* @example Auto-generated from schema
|
|
39
|
-
* <CnInfoWidget :object="myObject" :schema="mySchema" :columns="3" />
|
|
40
|
-
*/
|
|
41
|
-
export default {
|
|
42
|
-
name: 'CnInfoWidget',
|
|
43
|
-
|
|
44
|
-
props: {
|
|
45
|
-
/**
|
|
46
|
-
* Manual field definitions. Array of `{ label, value }` objects.
|
|
47
|
-
* Takes precedence over object+schema auto-generation.
|
|
48
|
-
*
|
|
49
|
-
* @type {{ label: string, value: string|number }[]}
|
|
50
|
-
*/
|
|
51
|
-
fields: {
|
|
52
|
-
type: Array,
|
|
53
|
-
default: null,
|
|
54
|
-
},
|
|
55
|
-
/**
|
|
56
|
-
* Object data for auto-generation mode. Properties are extracted
|
|
57
|
-
* based on the schema definition.
|
|
58
|
-
*
|
|
59
|
-
* @type {object}
|
|
60
|
-
*/
|
|
61
|
-
object: {
|
|
62
|
-
type: Object,
|
|
63
|
-
default: null,
|
|
64
|
-
},
|
|
65
|
-
/**
|
|
66
|
-
* JSON Schema for auto-generation mode. Each schema property
|
|
67
|
-
* generates a label:value pair using the property title as label.
|
|
68
|
-
*
|
|
69
|
-
* @type {object}
|
|
70
|
-
*/
|
|
71
|
-
schema: {
|
|
72
|
-
type: Object,
|
|
73
|
-
default: null,
|
|
74
|
-
},
|
|
75
|
-
/**
|
|
76
|
-
* Number of columns for the grid layout.
|
|
77
|
-
*
|
|
78
|
-
* @type {number}
|
|
79
|
-
*/
|
|
80
|
-
columns: {
|
|
81
|
-
type: Number,
|
|
82
|
-
default: 2,
|
|
83
|
-
},
|
|
84
|
-
/**
|
|
85
|
-
* Fields to include (by key). If provided, only these fields are shown.
|
|
86
|
-
* Only applies in auto-generation mode.
|
|
87
|
-
*
|
|
88
|
-
* @type {string[]}
|
|
89
|
-
*/
|
|
90
|
-
includeFields: {
|
|
91
|
-
type: Array,
|
|
92
|
-
default: null,
|
|
93
|
-
},
|
|
94
|
-
/**
|
|
95
|
-
* Fields to exclude (by key). Only applies in auto-generation mode.
|
|
96
|
-
*
|
|
97
|
-
* @type {string[]}
|
|
98
|
-
*/
|
|
99
|
-
excludeFields: {
|
|
100
|
-
type: Array,
|
|
101
|
-
default: () => [],
|
|
102
|
-
},
|
|
103
|
-
},
|
|
104
|
-
|
|
105
|
-
computed: {
|
|
106
|
-
/**
|
|
107
|
-
* Resolved fields to display. Manual fields take precedence;
|
|
108
|
-
* otherwise generates from object + schema.
|
|
109
|
-
*
|
|
110
|
-
* @return {{ label: string, value: string|number }[]}
|
|
111
|
-
*/
|
|
112
|
-
displayFields() {
|
|
113
|
-
if (this.fields) {
|
|
114
|
-
return this.fields
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (this.object && this.schema && this.schema.properties) {
|
|
118
|
-
return this.generateFieldsFromSchema()
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
return []
|
|
122
|
-
},
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* CSS grid style based on column count.
|
|
126
|
-
*
|
|
127
|
-
* @return {object}
|
|
128
|
-
*/
|
|
129
|
-
gridStyle() {
|
|
130
|
-
return {
|
|
131
|
-
gridTemplateColumns: `repeat(${this.columns}, 1fr)`,
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
},
|
|
135
|
-
|
|
136
|
-
methods: {
|
|
137
|
-
/**
|
|
138
|
-
* Generate label-value field definitions from object + schema.
|
|
139
|
-
*
|
|
140
|
-
* @return {{ label: string, value: string|number }[]}
|
|
141
|
-
*/
|
|
142
|
-
generateFieldsFromSchema() {
|
|
143
|
-
const properties = this.schema.properties || {}
|
|
144
|
-
const keys = this.includeFields || Object.keys(properties)
|
|
145
|
-
|
|
146
|
-
return keys
|
|
147
|
-
.filter(key => !this.excludeFields.includes(key))
|
|
148
|
-
.filter(key => properties[key])
|
|
149
|
-
.map(key => ({
|
|
150
|
-
label: properties[key].title || key,
|
|
151
|
-
value: this.formatFieldValue(this.object[key], properties[key]),
|
|
152
|
-
}))
|
|
153
|
-
},
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* Format a field value for display based on its schema type.
|
|
157
|
-
*
|
|
158
|
-
* @param {*} value - The raw value.
|
|
159
|
-
* @param {object} schemaProp - The JSON Schema property definition.
|
|
160
|
-
* @return {string} Formatted display value.
|
|
161
|
-
*/
|
|
162
|
-
formatFieldValue(value) {
|
|
163
|
-
if (value === null || value === undefined) {
|
|
164
|
-
return ''
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
if (Array.isArray(value)) {
|
|
168
|
-
return value.join(', ')
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
if (typeof value === 'object') {
|
|
172
|
-
return JSON.stringify(value)
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
if (typeof value === 'boolean') {
|
|
176
|
-
return value ? 'Yes' : 'No'
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
return String(value)
|
|
180
|
-
},
|
|
181
|
-
},
|
|
182
|
-
}
|
|
183
|
-
</script>
|
|
184
|
-
|
|
185
|
-
<style scoped>
|
|
186
|
-
.cn-info-widget {
|
|
187
|
-
display: grid;
|
|
188
|
-
gap: 12px 24px;
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
.cn-info-widget__field {
|
|
192
|
-
display: flex;
|
|
193
|
-
flex-direction: column;
|
|
194
|
-
gap: 2px;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
.cn-info-widget__label {
|
|
198
|
-
font-size: 12px;
|
|
199
|
-
font-weight: 600;
|
|
200
|
-
color: var(--color-text-maxcontrast);
|
|
201
|
-
text-transform: uppercase;
|
|
202
|
-
letter-spacing: 0.5px;
|
|
203
|
-
margin: 0;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
.cn-info-widget__value {
|
|
207
|
-
font-size: 14px;
|
|
208
|
-
color: var(--color-main-text);
|
|
209
|
-
margin: 0;
|
|
210
|
-
word-break: break-word;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/* Responsive: single column on small screens */
|
|
214
|
-
@media (max-width: 600px) {
|
|
215
|
-
.cn-info-widget {
|
|
216
|
-
grid-template-columns: 1fr !important;
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
</style>
|
|
1
|
+
<!--
|
|
2
|
+
CnInfoWidget — Renders label-value pairs in a responsive CSS grid.
|
|
3
|
+
|
|
4
|
+
Supports two modes:
|
|
5
|
+
1. Manual: provide `fields` prop with `[{ label, value }]` objects
|
|
6
|
+
2. Auto-generated: provide `object` + `schema` props to generate from JSON Schema properties
|
|
7
|
+
|
|
8
|
+
Used in dashboard and detail page grid layouts to display entity metadata.
|
|
9
|
+
-->
|
|
10
|
+
<template>
|
|
11
|
+
<div
|
|
12
|
+
class="cn-info-widget"
|
|
13
|
+
:style="gridStyle">
|
|
14
|
+
<div
|
|
15
|
+
v-for="(field, index) in displayFields"
|
|
16
|
+
:key="index"
|
|
17
|
+
class="cn-info-widget__field">
|
|
18
|
+
<dt class="cn-info-widget__label">
|
|
19
|
+
{{ field.label }}
|
|
20
|
+
</dt>
|
|
21
|
+
<dd class="cn-info-widget__value">
|
|
22
|
+
{{ field.value || '—' }}
|
|
23
|
+
</dd>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</template>
|
|
27
|
+
|
|
28
|
+
<script>
|
|
29
|
+
/**
|
|
30
|
+
* CnInfoWidget — Renders label-value pairs in a responsive CSS grid.
|
|
31
|
+
*
|
|
32
|
+
* @example Manual fields
|
|
33
|
+
* <CnInfoWidget :fields="[
|
|
34
|
+
* { label: 'Email', value: 'test@example.com' },
|
|
35
|
+
* { label: 'Phone', value: '+31 6 12345678' },
|
|
36
|
+
* ]" :columns="2" />
|
|
37
|
+
*
|
|
38
|
+
* @example Auto-generated from schema
|
|
39
|
+
* <CnInfoWidget :object="myObject" :schema="mySchema" :columns="3" />
|
|
40
|
+
*/
|
|
41
|
+
export default {
|
|
42
|
+
name: 'CnInfoWidget',
|
|
43
|
+
|
|
44
|
+
props: {
|
|
45
|
+
/**
|
|
46
|
+
* Manual field definitions. Array of `{ label, value }` objects.
|
|
47
|
+
* Takes precedence over object+schema auto-generation.
|
|
48
|
+
*
|
|
49
|
+
* @type {{ label: string, value: string|number }[]}
|
|
50
|
+
*/
|
|
51
|
+
fields: {
|
|
52
|
+
type: Array,
|
|
53
|
+
default: null,
|
|
54
|
+
},
|
|
55
|
+
/**
|
|
56
|
+
* Object data for auto-generation mode. Properties are extracted
|
|
57
|
+
* based on the schema definition.
|
|
58
|
+
*
|
|
59
|
+
* @type {object}
|
|
60
|
+
*/
|
|
61
|
+
object: {
|
|
62
|
+
type: Object,
|
|
63
|
+
default: null,
|
|
64
|
+
},
|
|
65
|
+
/**
|
|
66
|
+
* JSON Schema for auto-generation mode. Each schema property
|
|
67
|
+
* generates a label:value pair using the property title as label.
|
|
68
|
+
*
|
|
69
|
+
* @type {object}
|
|
70
|
+
*/
|
|
71
|
+
schema: {
|
|
72
|
+
type: Object,
|
|
73
|
+
default: null,
|
|
74
|
+
},
|
|
75
|
+
/**
|
|
76
|
+
* Number of columns for the grid layout.
|
|
77
|
+
*
|
|
78
|
+
* @type {number}
|
|
79
|
+
*/
|
|
80
|
+
columns: {
|
|
81
|
+
type: Number,
|
|
82
|
+
default: 2,
|
|
83
|
+
},
|
|
84
|
+
/**
|
|
85
|
+
* Fields to include (by key). If provided, only these fields are shown.
|
|
86
|
+
* Only applies in auto-generation mode.
|
|
87
|
+
*
|
|
88
|
+
* @type {string[]}
|
|
89
|
+
*/
|
|
90
|
+
includeFields: {
|
|
91
|
+
type: Array,
|
|
92
|
+
default: null,
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Fields to exclude (by key). Only applies in auto-generation mode.
|
|
96
|
+
*
|
|
97
|
+
* @type {string[]}
|
|
98
|
+
*/
|
|
99
|
+
excludeFields: {
|
|
100
|
+
type: Array,
|
|
101
|
+
default: () => [],
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
computed: {
|
|
106
|
+
/**
|
|
107
|
+
* Resolved fields to display. Manual fields take precedence;
|
|
108
|
+
* otherwise generates from object + schema.
|
|
109
|
+
*
|
|
110
|
+
* @return {{ label: string, value: string|number }[]}
|
|
111
|
+
*/
|
|
112
|
+
displayFields() {
|
|
113
|
+
if (this.fields) {
|
|
114
|
+
return this.fields
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (this.object && this.schema && this.schema.properties) {
|
|
118
|
+
return this.generateFieldsFromSchema()
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return []
|
|
122
|
+
},
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* CSS grid style based on column count.
|
|
126
|
+
*
|
|
127
|
+
* @return {object}
|
|
128
|
+
*/
|
|
129
|
+
gridStyle() {
|
|
130
|
+
return {
|
|
131
|
+
gridTemplateColumns: `repeat(${this.columns}, 1fr)`,
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
methods: {
|
|
137
|
+
/**
|
|
138
|
+
* Generate label-value field definitions from object + schema.
|
|
139
|
+
*
|
|
140
|
+
* @return {{ label: string, value: string|number }[]}
|
|
141
|
+
*/
|
|
142
|
+
generateFieldsFromSchema() {
|
|
143
|
+
const properties = this.schema.properties || {}
|
|
144
|
+
const keys = this.includeFields || Object.keys(properties)
|
|
145
|
+
|
|
146
|
+
return keys
|
|
147
|
+
.filter(key => !this.excludeFields.includes(key))
|
|
148
|
+
.filter(key => properties[key])
|
|
149
|
+
.map(key => ({
|
|
150
|
+
label: properties[key].title || key,
|
|
151
|
+
value: this.formatFieldValue(this.object[key], properties[key]),
|
|
152
|
+
}))
|
|
153
|
+
},
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Format a field value for display based on its schema type.
|
|
157
|
+
*
|
|
158
|
+
* @param {*} value - The raw value.
|
|
159
|
+
* @param {object} schemaProp - The JSON Schema property definition.
|
|
160
|
+
* @return {string} Formatted display value.
|
|
161
|
+
*/
|
|
162
|
+
formatFieldValue(value) {
|
|
163
|
+
if (value === null || value === undefined) {
|
|
164
|
+
return ''
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
if (Array.isArray(value)) {
|
|
168
|
+
return value.join(', ')
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (typeof value === 'object') {
|
|
172
|
+
return JSON.stringify(value)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
if (typeof value === 'boolean') {
|
|
176
|
+
return value ? 'Yes' : 'No'
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return String(value)
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
}
|
|
183
|
+
</script>
|
|
184
|
+
|
|
185
|
+
<style scoped>
|
|
186
|
+
.cn-info-widget {
|
|
187
|
+
display: grid;
|
|
188
|
+
gap: 12px 24px;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
.cn-info-widget__field {
|
|
192
|
+
display: flex;
|
|
193
|
+
flex-direction: column;
|
|
194
|
+
gap: 2px;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
.cn-info-widget__label {
|
|
198
|
+
font-size: 12px;
|
|
199
|
+
font-weight: 600;
|
|
200
|
+
color: var(--color-text-maxcontrast);
|
|
201
|
+
text-transform: uppercase;
|
|
202
|
+
letter-spacing: 0.5px;
|
|
203
|
+
margin: 0;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.cn-info-widget__value {
|
|
207
|
+
font-size: 14px;
|
|
208
|
+
color: var(--color-main-text);
|
|
209
|
+
margin: 0;
|
|
210
|
+
word-break: break-word;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/* Responsive: single column on small screens */
|
|
214
|
+
@media (max-width: 600px) {
|
|
215
|
+
.cn-info-widget {
|
|
216
|
+
grid-template-columns: 1fr !important;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
</style>
|