@conduction/nextcloud-vue 0.1.0-beta.4 → 0.1.0-beta.6
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 +9559 -8983
- package/dist/nextcloud-vue.cjs.js.map +1 -1
- package/dist/nextcloud-vue.cjs.map +1 -0
- package/dist/nextcloud-vue.css +1231 -1231
- package/dist/nextcloud-vue.esm.js +9559 -8983
- package/dist/nextcloud-vue.esm.js.map +1 -1
- package/package.json +14 -5
- package/src/components/CnActionsBar/CnActionsBar.vue +235 -235
- package/src/components/CnAdvancedFormDialog/CnAdvancedFormDialog.vue +579 -579
- package/src/components/CnAdvancedFormDialog/CnDataTab.vue +217 -217
- package/src/components/CnAdvancedFormDialog/CnMetadataTab.vue +121 -121
- package/src/components/CnAdvancedFormDialog/CnPropertiesTab.vue +418 -418
- package/src/components/CnAdvancedFormDialog/CnPropertyValueCell.vue +247 -247
- package/src/components/CnCardGrid/CnCardGrid.vue +152 -152
- package/src/components/CnCellRenderer/CnCellRenderer.vue +132 -132
- package/src/components/CnChartWidget/CnChartWidget.vue +320 -320
- package/src/components/CnConfigurationCard/CnConfigurationCard.vue +77 -77
- package/src/components/CnCopyDialog/CnCopyDialog.vue +250 -250
- package/src/components/CnDashboardGrid/CnDashboardGrid.vue +225 -225
- package/src/components/CnDashboardPage/CnDashboardPage.vue +390 -390
- package/src/components/CnDataTable/CnDataTable.vue +349 -349
- package/src/components/CnDeleteDialog/CnDeleteDialog.vue +170 -170
- package/src/components/CnDetailCard/CnDetailCard.vue +214 -214
- package/src/components/CnDetailPage/CnDetailPage.vue +285 -281
- package/src/components/CnFacetSidebar/CnFacetSidebar.vue +231 -231
- package/src/components/CnFilterBar/CnFilterBar.vue +152 -152
- package/src/components/CnFormDialog/CnFormDialog.vue +302 -11
- package/src/components/CnIcon/CnIcon.vue +89 -89
- package/src/components/CnIndexPage/CnIndexPage.vue +884 -874
- package/src/components/CnIndexSidebar/CnIndexSidebar.vue +503 -503
- package/src/components/CnItemCard/CnItemCard.vue +132 -132
- package/src/components/CnKpiGrid/CnKpiGrid.vue +89 -89
- package/src/components/CnMassActionBar/CnMassActionBar.vue +160 -160
- package/src/components/CnMassCopyDialog/CnMassCopyDialog.vue +320 -320
- package/src/components/CnMassDeleteDialog/CnMassDeleteDialog.vue +238 -238
- package/src/components/CnMassExportDialog/CnMassExportDialog.vue +190 -190
- package/src/components/CnMassImportDialog/CnMassImportDialog.vue +491 -491
- package/src/components/CnNoteCard/CnNoteCard.vue +149 -149
- package/src/components/CnNotesCard/CnNotesCard.vue +413 -413
- package/src/components/CnObjectCard/CnObjectCard.vue +292 -292
- package/src/components/CnObjectCard/eslint-setup.md +235 -0
- package/src/components/CnObjectCard/package.json-or.json +132 -0
- package/src/components/CnObjectSidebar/CnObjectSidebar.vue +876 -876
- package/src/components/CnPageHeader/CnPageHeader.vue +57 -57
- package/src/components/CnPagination/CnPagination.vue +252 -252
- package/src/components/CnRegisterMapping/CnRegisterMapping.vue +792 -792
- package/src/components/CnRowActions/CnRowActions.vue +95 -73
- package/src/components/CnSchemaFormDialog/CnSchemaConfigurationTab.vue +226 -226
- package/src/components/CnSchemaFormDialog/CnSchemaFormDialog.vue +787 -787
- 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 +266 -266
- package/src/components/CnStatsBlock/CnStatsBlock.vue +420 -420
- package/src/components/CnStatusBadge/CnStatusBadge.vue +77 -77
- package/src/components/CnTabbedFormDialog/CnTabbedFormDialog.vue +540 -540
- package/src/components/CnTasksCard/CnTasksCard.vue +373 -373
- package/src/components/CnTileWidget/CnTileWidget.vue +159 -159
- package/src/components/CnTimelineStages/CnTimelineStages.vue +292 -292
- package/src/components/CnUserActionMenu/CnUserActionMenu.vue +435 -435
- package/src/components/CnVersionInfoCard/CnVersionInfoCard.vue +312 -312
- package/src/components/CnWidgetRenderer/CnWidgetRenderer.vue +180 -180
- package/src/components/CnWidgetWrapper/CnWidgetWrapper.vue +211 -211
- package/src/index.js +1 -1
- package/src/types/notification.d.ts +13 -13
- package/src/types/organisation.d.ts +15 -15
- package/src/types/schema.d.ts +13 -13
- package/src/types/task.d.ts +6 -6
- package/src/utils/headers.js +5 -3
|
@@ -1,225 +1,225 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
CnDashboardGrid — GridStack-powered drag-and-drop dashboard grid.
|
|
3
|
-
|
|
4
|
-
Renders widgets in a configurable grid layout. Supports drag, resize,
|
|
5
|
-
and dynamic item addition/removal. Emits layout changes for persistence.
|
|
6
|
-
-->
|
|
7
|
-
<template>
|
|
8
|
-
<div ref="gridContainer" class="cn-dashboard-grid">
|
|
9
|
-
<div class="grid-stack">
|
|
10
|
-
<div
|
|
11
|
-
v-for="item in layout"
|
|
12
|
-
:key="item.id"
|
|
13
|
-
class="grid-stack-item"
|
|
14
|
-
:gs-id="item.id"
|
|
15
|
-
:gs-x="item.gridX"
|
|
16
|
-
:gs-y="item.gridY"
|
|
17
|
-
:gs-w="item.gridWidth"
|
|
18
|
-
:gs-h="item.gridHeight"
|
|
19
|
-
:gs-min-w="minWidth"
|
|
20
|
-
:gs-min-h="minHeight">
|
|
21
|
-
<div class="grid-stack-item-content">
|
|
22
|
-
<slot name="widget" :item="item">
|
|
23
|
-
<!-- Default: render nothing; CnDashboardPage provides content -->
|
|
24
|
-
</slot>
|
|
25
|
-
</div>
|
|
26
|
-
</div>
|
|
27
|
-
</div>
|
|
28
|
-
</div>
|
|
29
|
-
</template>
|
|
30
|
-
|
|
31
|
-
<script>
|
|
32
|
-
import { GridStack } from 'gridstack'
|
|
33
|
-
import 'gridstack/dist/gridstack.min.css'
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* CnDashboardGrid — Low-level grid layout engine powered by GridStack.
|
|
37
|
-
*
|
|
38
|
-
* Manages the drag-and-drop grid, syncs positions, and emits layout
|
|
39
|
-
* changes. Does NOT handle widget rendering — that's done by the parent
|
|
40
|
-
* via the `#widget` scoped slot.
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* <CnDashboardGrid
|
|
44
|
-
* :layout="placements"
|
|
45
|
-
* :editable="isEditing"
|
|
46
|
-
* @layout-change="onLayoutChange">
|
|
47
|
-
* <template #widget="{ item }">
|
|
48
|
-
* <MyWidget :config="item" />
|
|
49
|
-
* </template>
|
|
50
|
-
* </CnDashboardGrid>
|
|
51
|
-
*/
|
|
52
|
-
export default {
|
|
53
|
-
name: 'CnDashboardGrid',
|
|
54
|
-
|
|
55
|
-
props: {
|
|
56
|
-
/** Array of layout items: { id, gridX, gridY, gridWidth, gridHeight, ...extra } */
|
|
57
|
-
layout: {
|
|
58
|
-
type: Array,
|
|
59
|
-
required: true,
|
|
60
|
-
},
|
|
61
|
-
/** Whether drag and resize are enabled */
|
|
62
|
-
editable: {
|
|
63
|
-
type: Boolean,
|
|
64
|
-
default: false,
|
|
65
|
-
},
|
|
66
|
-
/** Number of grid columns */
|
|
67
|
-
columns: {
|
|
68
|
-
type: Number,
|
|
69
|
-
default: 12,
|
|
70
|
-
},
|
|
71
|
-
/** Cell height in pixels */
|
|
72
|
-
cellHeight: {
|
|
73
|
-
type: Number,
|
|
74
|
-
default: 80,
|
|
75
|
-
},
|
|
76
|
-
/** Grid margin in pixels */
|
|
77
|
-
margin: {
|
|
78
|
-
type: Number,
|
|
79
|
-
default: 12,
|
|
80
|
-
},
|
|
81
|
-
/** Minimum widget width in grid units */
|
|
82
|
-
minWidth: {
|
|
83
|
-
type: Number,
|
|
84
|
-
default: 2,
|
|
85
|
-
},
|
|
86
|
-
/** Minimum widget height in grid units */
|
|
87
|
-
minHeight: {
|
|
88
|
-
type: Number,
|
|
89
|
-
default: 2,
|
|
90
|
-
},
|
|
91
|
-
},
|
|
92
|
-
|
|
93
|
-
emits: ['layout-change'],
|
|
94
|
-
|
|
95
|
-
data() {
|
|
96
|
-
return {
|
|
97
|
-
grid: null,
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
watch: {
|
|
102
|
-
editable(val) {
|
|
103
|
-
if (!this.grid) return
|
|
104
|
-
if (val) {
|
|
105
|
-
this.grid.enable()
|
|
106
|
-
} else {
|
|
107
|
-
this.grid.disable()
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
|
|
111
|
-
layout: {
|
|
112
|
-
deep: true,
|
|
113
|
-
handler(newLayout) {
|
|
114
|
-
if (this.grid) {
|
|
115
|
-
this.syncGridItems(newLayout)
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
|
|
121
|
-
mounted() {
|
|
122
|
-
this.initGrid()
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
beforeDestroy() {
|
|
126
|
-
if (this.grid) {
|
|
127
|
-
this.grid.destroy(false)
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
|
|
131
|
-
methods: {
|
|
132
|
-
initGrid() {
|
|
133
|
-
const el = this.$refs.gridContainer.querySelector('.grid-stack')
|
|
134
|
-
this.grid = GridStack.init({
|
|
135
|
-
column: this.columns,
|
|
136
|
-
cellHeight: this.cellHeight,
|
|
137
|
-
margin: this.margin,
|
|
138
|
-
float: true,
|
|
139
|
-
animate: true,
|
|
140
|
-
disableDrag: !this.editable,
|
|
141
|
-
disableResize: !this.editable,
|
|
142
|
-
removable: false,
|
|
143
|
-
}, el)
|
|
144
|
-
|
|
145
|
-
this.grid.on('change', (_event, items) => {
|
|
146
|
-
this.handleGridChange(items)
|
|
147
|
-
})
|
|
148
|
-
},
|
|
149
|
-
|
|
150
|
-
handleGridChange(items) {
|
|
151
|
-
if (!items || items.length === 0) return
|
|
152
|
-
|
|
153
|
-
const updated = this.layout.map(item => {
|
|
154
|
-
const gridItem = items.find(gi => String(gi.id) === String(item.id))
|
|
155
|
-
if (gridItem) {
|
|
156
|
-
return {
|
|
157
|
-
...item,
|
|
158
|
-
gridX: gridItem.x,
|
|
159
|
-
gridY: gridItem.y,
|
|
160
|
-
gridWidth: gridItem.w,
|
|
161
|
-
gridHeight: gridItem.h,
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
return item
|
|
165
|
-
})
|
|
166
|
-
|
|
167
|
-
this.$emit('layout-change', updated)
|
|
168
|
-
},
|
|
169
|
-
|
|
170
|
-
syncGridItems(newLayout) {
|
|
171
|
-
// Add items that don't exist in grid yet
|
|
172
|
-
for (const item of newLayout) {
|
|
173
|
-
const exists = this.grid.engine.nodes.find(
|
|
174
|
-
n => String(n.id) === String(item.id),
|
|
175
|
-
)
|
|
176
|
-
if (!exists) {
|
|
177
|
-
this.$nextTick(() => {
|
|
178
|
-
const el = this.$refs.gridContainer.querySelector(`[gs-id="${item.id}"]`)
|
|
179
|
-
if (el) {
|
|
180
|
-
this.grid.makeWidget(el)
|
|
181
|
-
}
|
|
182
|
-
})
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
// Remove items no longer in layout
|
|
187
|
-
const ids = newLayout.map(i => String(i.id))
|
|
188
|
-
const toRemove = this.grid.engine.nodes.filter(
|
|
189
|
-
n => !ids.includes(String(n.id)),
|
|
190
|
-
)
|
|
191
|
-
for (const node of toRemove) {
|
|
192
|
-
const el = this.$refs.gridContainer.querySelector(`[gs-id="${node.id}"]`)
|
|
193
|
-
if (el) {
|
|
194
|
-
this.grid.removeWidget(el, false)
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
},
|
|
198
|
-
},
|
|
199
|
-
}
|
|
200
|
-
</script>
|
|
201
|
-
|
|
202
|
-
<style scoped>
|
|
203
|
-
.cn-dashboard-grid {
|
|
204
|
-
width: 100%;
|
|
205
|
-
min-height: 200px;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
.grid-stack {
|
|
209
|
-
background: transparent;
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
:deep(.grid-stack-item-content) {
|
|
213
|
-
background: var(--color-main-background);
|
|
214
|
-
border-radius: 0;
|
|
215
|
-
border: none;
|
|
216
|
-
box-shadow: none;
|
|
217
|
-
overflow: hidden;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
:deep(.grid-stack-placeholder > .placeholder-content) {
|
|
221
|
-
background: var(--color-primary-element-light);
|
|
222
|
-
border: 2px dashed var(--color-primary-element);
|
|
223
|
-
border-radius: var(--border-radius-large);
|
|
224
|
-
}
|
|
225
|
-
</style>
|
|
1
|
+
<!--
|
|
2
|
+
CnDashboardGrid — GridStack-powered drag-and-drop dashboard grid.
|
|
3
|
+
|
|
4
|
+
Renders widgets in a configurable grid layout. Supports drag, resize,
|
|
5
|
+
and dynamic item addition/removal. Emits layout changes for persistence.
|
|
6
|
+
-->
|
|
7
|
+
<template>
|
|
8
|
+
<div ref="gridContainer" class="cn-dashboard-grid">
|
|
9
|
+
<div class="grid-stack">
|
|
10
|
+
<div
|
|
11
|
+
v-for="item in layout"
|
|
12
|
+
:key="item.id"
|
|
13
|
+
class="grid-stack-item"
|
|
14
|
+
:gs-id="item.id"
|
|
15
|
+
:gs-x="item.gridX"
|
|
16
|
+
:gs-y="item.gridY"
|
|
17
|
+
:gs-w="item.gridWidth"
|
|
18
|
+
:gs-h="item.gridHeight"
|
|
19
|
+
:gs-min-w="minWidth"
|
|
20
|
+
:gs-min-h="minHeight">
|
|
21
|
+
<div class="grid-stack-item-content">
|
|
22
|
+
<slot name="widget" :item="item">
|
|
23
|
+
<!-- Default: render nothing; CnDashboardPage provides content -->
|
|
24
|
+
</slot>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</div>
|
|
28
|
+
</div>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script>
|
|
32
|
+
import { GridStack } from 'gridstack'
|
|
33
|
+
import 'gridstack/dist/gridstack.min.css'
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* CnDashboardGrid — Low-level grid layout engine powered by GridStack.
|
|
37
|
+
*
|
|
38
|
+
* Manages the drag-and-drop grid, syncs positions, and emits layout
|
|
39
|
+
* changes. Does NOT handle widget rendering — that's done by the parent
|
|
40
|
+
* via the `#widget` scoped slot.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* <CnDashboardGrid
|
|
44
|
+
* :layout="placements"
|
|
45
|
+
* :editable="isEditing"
|
|
46
|
+
* @layout-change="onLayoutChange">
|
|
47
|
+
* <template #widget="{ item }">
|
|
48
|
+
* <MyWidget :config="item" />
|
|
49
|
+
* </template>
|
|
50
|
+
* </CnDashboardGrid>
|
|
51
|
+
*/
|
|
52
|
+
export default {
|
|
53
|
+
name: 'CnDashboardGrid',
|
|
54
|
+
|
|
55
|
+
props: {
|
|
56
|
+
/** Array of layout items: { id, gridX, gridY, gridWidth, gridHeight, ...extra } */
|
|
57
|
+
layout: {
|
|
58
|
+
type: Array,
|
|
59
|
+
required: true,
|
|
60
|
+
},
|
|
61
|
+
/** Whether drag and resize are enabled */
|
|
62
|
+
editable: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
default: false,
|
|
65
|
+
},
|
|
66
|
+
/** Number of grid columns */
|
|
67
|
+
columns: {
|
|
68
|
+
type: Number,
|
|
69
|
+
default: 12,
|
|
70
|
+
},
|
|
71
|
+
/** Cell height in pixels */
|
|
72
|
+
cellHeight: {
|
|
73
|
+
type: Number,
|
|
74
|
+
default: 80,
|
|
75
|
+
},
|
|
76
|
+
/** Grid margin in pixels */
|
|
77
|
+
margin: {
|
|
78
|
+
type: Number,
|
|
79
|
+
default: 12,
|
|
80
|
+
},
|
|
81
|
+
/** Minimum widget width in grid units */
|
|
82
|
+
minWidth: {
|
|
83
|
+
type: Number,
|
|
84
|
+
default: 2,
|
|
85
|
+
},
|
|
86
|
+
/** Minimum widget height in grid units */
|
|
87
|
+
minHeight: {
|
|
88
|
+
type: Number,
|
|
89
|
+
default: 2,
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
emits: ['layout-change'],
|
|
94
|
+
|
|
95
|
+
data() {
|
|
96
|
+
return {
|
|
97
|
+
grid: null,
|
|
98
|
+
}
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
watch: {
|
|
102
|
+
editable(val) {
|
|
103
|
+
if (!this.grid) return
|
|
104
|
+
if (val) {
|
|
105
|
+
this.grid.enable()
|
|
106
|
+
} else {
|
|
107
|
+
this.grid.disable()
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
layout: {
|
|
112
|
+
deep: true,
|
|
113
|
+
handler(newLayout) {
|
|
114
|
+
if (this.grid) {
|
|
115
|
+
this.syncGridItems(newLayout)
|
|
116
|
+
}
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
|
|
121
|
+
mounted() {
|
|
122
|
+
this.initGrid()
|
|
123
|
+
},
|
|
124
|
+
|
|
125
|
+
beforeDestroy() {
|
|
126
|
+
if (this.grid) {
|
|
127
|
+
this.grid.destroy(false)
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
methods: {
|
|
132
|
+
initGrid() {
|
|
133
|
+
const el = this.$refs.gridContainer.querySelector('.grid-stack')
|
|
134
|
+
this.grid = GridStack.init({
|
|
135
|
+
column: this.columns,
|
|
136
|
+
cellHeight: this.cellHeight,
|
|
137
|
+
margin: this.margin,
|
|
138
|
+
float: true,
|
|
139
|
+
animate: true,
|
|
140
|
+
disableDrag: !this.editable,
|
|
141
|
+
disableResize: !this.editable,
|
|
142
|
+
removable: false,
|
|
143
|
+
}, el)
|
|
144
|
+
|
|
145
|
+
this.grid.on('change', (_event, items) => {
|
|
146
|
+
this.handleGridChange(items)
|
|
147
|
+
})
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
handleGridChange(items) {
|
|
151
|
+
if (!items || items.length === 0) return
|
|
152
|
+
|
|
153
|
+
const updated = this.layout.map(item => {
|
|
154
|
+
const gridItem = items.find(gi => String(gi.id) === String(item.id))
|
|
155
|
+
if (gridItem) {
|
|
156
|
+
return {
|
|
157
|
+
...item,
|
|
158
|
+
gridX: gridItem.x,
|
|
159
|
+
gridY: gridItem.y,
|
|
160
|
+
gridWidth: gridItem.w,
|
|
161
|
+
gridHeight: gridItem.h,
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return item
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
this.$emit('layout-change', updated)
|
|
168
|
+
},
|
|
169
|
+
|
|
170
|
+
syncGridItems(newLayout) {
|
|
171
|
+
// Add items that don't exist in grid yet
|
|
172
|
+
for (const item of newLayout) {
|
|
173
|
+
const exists = this.grid.engine.nodes.find(
|
|
174
|
+
n => String(n.id) === String(item.id),
|
|
175
|
+
)
|
|
176
|
+
if (!exists) {
|
|
177
|
+
this.$nextTick(() => {
|
|
178
|
+
const el = this.$refs.gridContainer.querySelector(`[gs-id="${item.id}"]`)
|
|
179
|
+
if (el) {
|
|
180
|
+
this.grid.makeWidget(el)
|
|
181
|
+
}
|
|
182
|
+
})
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Remove items no longer in layout
|
|
187
|
+
const ids = newLayout.map(i => String(i.id))
|
|
188
|
+
const toRemove = this.grid.engine.nodes.filter(
|
|
189
|
+
n => !ids.includes(String(n.id)),
|
|
190
|
+
)
|
|
191
|
+
for (const node of toRemove) {
|
|
192
|
+
const el = this.$refs.gridContainer.querySelector(`[gs-id="${node.id}"]`)
|
|
193
|
+
if (el) {
|
|
194
|
+
this.grid.removeWidget(el, false)
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
}
|
|
200
|
+
</script>
|
|
201
|
+
|
|
202
|
+
<style scoped>
|
|
203
|
+
.cn-dashboard-grid {
|
|
204
|
+
width: 100%;
|
|
205
|
+
min-height: 200px;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.grid-stack {
|
|
209
|
+
background: transparent;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
:deep(.grid-stack-item-content) {
|
|
213
|
+
background: var(--color-main-background);
|
|
214
|
+
border-radius: 0;
|
|
215
|
+
border: none;
|
|
216
|
+
box-shadow: none;
|
|
217
|
+
overflow: hidden;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
:deep(.grid-stack-placeholder > .placeholder-content) {
|
|
221
|
+
background: var(--color-primary-element-light);
|
|
222
|
+
border: 2px dashed var(--color-primary-element);
|
|
223
|
+
border-radius: var(--border-radius-large);
|
|
224
|
+
}
|
|
225
|
+
</style>
|