@platecms/delta-vue 0.13.0 → 1.3.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/__generated__/graphql.ts +490 -108
- package/package.json +5 -5
- package/src/components/editor/EditorGridPlacement.vue +16 -3
- package/src/components/editor/controls/EditorControlsContainer.vue +160 -83
- package/src/components/placeholders/EmptyGridPlacements.vue +49 -22
- package/src/components/placeholders/MissingExperienceComponent.vue +15 -8
- package/src/views/ExperienceEditorView.vue +14 -6
- package/src/views/ExperienceView.vue +3 -3
- package/src/views/NotFoundView.vue +22 -5
- package/src/components/atoms/icon/FontAwesomeIcon.vue +0 -21
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platecms/delta-vue",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Plugin to connect to the Plate Delta CMS in a Vue application.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"publishConfig": {
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
"./styles.css": "./src/styles.css"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@platecms/delta-cast": "
|
|
27
|
-
"@platecms/delta-castscript": "
|
|
28
|
-
"@platecms/delta-client": "
|
|
29
|
-
"@platecms/delta-plate-resource-notation": "
|
|
26
|
+
"@platecms/delta-cast": "1.3.0",
|
|
27
|
+
"@platecms/delta-castscript": "1.3.0",
|
|
28
|
+
"@platecms/delta-client": "1.3.0",
|
|
29
|
+
"@platecms/delta-plate-resource-notation": "1.3.0",
|
|
30
30
|
"@graphql-codegen/cli": "5.0.7",
|
|
31
31
|
"@graphql-typed-document-node/core": "3.2.0",
|
|
32
32
|
"axios": "1.11.0",
|
|
@@ -61,7 +61,7 @@ function handleMouseUp() {
|
|
|
61
61
|
}"
|
|
62
62
|
@mousemove="throttleHandleMouseOver"
|
|
63
63
|
>
|
|
64
|
-
<div v-if="isInsideTarget && mode === 'drag' && mousePosition === 'top'" class="
|
|
64
|
+
<div v-if="isInsideTarget && mode === 'drag' && mousePosition === 'top'" class="editor-grid-placement-target">
|
|
65
65
|
<RenderLibraryComponent :building-block="buildingBlockToCreate">
|
|
66
66
|
<template v-slot:missing-component="slotProps">
|
|
67
67
|
<MissingExperienceComponent v-if="slotProps.data" :building-block="slotProps.data" />
|
|
@@ -71,7 +71,7 @@ function handleMouseUp() {
|
|
|
71
71
|
|
|
72
72
|
<EditorExperienceComponent :experience-component="gridPlacement.experienceComponent as Draft<ExperienceComponent>" :grid-placement="gridPlacement" :rows="rows" />
|
|
73
73
|
|
|
74
|
-
<div v-if="isInsideTarget && mode === 'drag' && mousePosition === 'bottom'" class="
|
|
74
|
+
<div v-if="isInsideTarget && mode === 'drag' && mousePosition === 'bottom'" class="editor-grid-placement-target">
|
|
75
75
|
<RenderLibraryComponent :building-block="buildingBlockToCreate">
|
|
76
76
|
<template v-slot:missing-component="slotProps">
|
|
77
77
|
<MissingExperienceComponent v-if="slotProps.data" :building-block="slotProps.data" />
|
|
@@ -81,6 +81,19 @@ function handleMouseUp() {
|
|
|
81
81
|
</div>
|
|
82
82
|
</template>
|
|
83
83
|
|
|
84
|
-
<style scoped>
|
|
84
|
+
<style scoped lang="scss">
|
|
85
|
+
.editor-grid-placement-target {
|
|
86
|
+
outline: 2px dashed #1f2937;
|
|
87
|
+
outline-offset: 2px;
|
|
88
|
+
animation: pulse 2s cubic-bezier(.4,0,.6,1)infinite;
|
|
89
|
+
@keyframes pulse {
|
|
90
|
+
0% {
|
|
91
|
+
opacity: 1;
|
|
92
|
+
}
|
|
93
|
+
50% {
|
|
94
|
+
opacity: 0.5;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
85
98
|
|
|
86
99
|
</style>
|
|
@@ -10,7 +10,6 @@ import {
|
|
|
10
10
|
WindowConnector
|
|
11
11
|
} from "@platecms/delta-client/utils"
|
|
12
12
|
import type {ExperienceComponent} from "../../../../__generated__/graphql";
|
|
13
|
-
import FontAwesomeIcon from '../../atoms/icon/FontAwesomeIcon.vue';
|
|
14
13
|
|
|
15
14
|
const connector = inject<WindowConnector>('connector')
|
|
16
15
|
const mode = inject<'edit' | 'drag' | 'preview'>('mode', 'preview')
|
|
@@ -23,98 +22,176 @@ defineProps<{
|
|
|
23
22
|
</script>
|
|
24
23
|
|
|
25
24
|
<template>
|
|
26
|
-
<div class="
|
|
27
|
-
<
|
|
28
|
-
|
|
29
|
-
<div class="dv:hidden dv:group-hover/controls:flex dv:absolute dv:z-50 dv:top-0 dv:w-full dv:items-center dv:justify-center">
|
|
30
|
-
<div class="dv:rounded-b-md dv:bg-gray-800 dv:px-6 dv:py-2 dv:text-white dv:text-xs">
|
|
31
|
-
<p>
|
|
32
|
-
{{ experienceComponent.buildingBlock?.slug ?? 'No slug' }}
|
|
33
|
-
</p>
|
|
34
|
-
</div>
|
|
25
|
+
<div class="editor-container">
|
|
26
|
+
<div class="editor-container-content">
|
|
27
|
+
<slot />
|
|
35
28
|
</div>
|
|
36
|
-
<div v-if="experienceComponent.isDraft" class="delta-snapshot-ignore
|
|
37
|
-
|
|
38
|
-
<p>
|
|
39
|
-
Draft
|
|
40
|
-
</p>
|
|
41
|
-
</div>
|
|
29
|
+
<div v-if="experienceComponent.isDraft" class="delta-snapshot-ignore editor-container-draft">
|
|
30
|
+
Draft
|
|
42
31
|
</div>
|
|
43
|
-
<div
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
@click="connector?.send({
|
|
47
|
-
type: ConnectorEventType.EXPERIENCE_COMPONENT_EDIT,
|
|
48
|
-
payload: {
|
|
49
|
-
uuid: experienceComponent.uuid,
|
|
50
|
-
prn: experienceComponent.prn
|
|
51
|
-
}
|
|
52
|
-
} as ExperienceComponentEditEvent)"
|
|
53
|
-
class="dv:opacity-0 dv:group-hover/controls:opacity-100 dv:transition-all dv:duration-300 dv:bg-gray-800 dv:w-8 dv:h-8 dv:flex dv:items-center dv:justify-center dv:rounded-sm dv:cursor-pointer"
|
|
54
|
-
>
|
|
55
|
-
<FontAwesomeIcon :icon="['fal', 'pencil']" />
|
|
32
|
+
<div class="editor-container-controls delta-snapshot-ignore">
|
|
33
|
+
<div class="editor-container-controls-label">
|
|
34
|
+
{{ experienceComponent.buildingBlock?.slug ?? 'No slug' }}
|
|
56
35
|
</div>
|
|
36
|
+
<div v-if="mode === 'edit'" class="editor-container-controls-buttons">
|
|
37
|
+
<!-- Edit button -->
|
|
38
|
+
<div
|
|
39
|
+
@click="connector?.send({
|
|
40
|
+
type: ConnectorEventType.EXPERIENCE_COMPONENT_EDIT,
|
|
41
|
+
payload: {
|
|
42
|
+
uuid: experienceComponent.uuid,
|
|
43
|
+
prn: experienceComponent.prn
|
|
44
|
+
}
|
|
45
|
+
} as ExperienceComponentEditEvent)"
|
|
46
|
+
class="editor-container-controls-button"
|
|
47
|
+
>
|
|
48
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
|
|
49
|
+
<!-- !Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. -->
|
|
50
|
+
<path fill="#fff" d="M100.4 417.2C104.5 402.6 112.2 389.3 123 378.5L304.2 197.3L338.1 163.4C354.7 180 389.4 214.7 442.1 267.4L476 301.3L442.1 335.2L260.9 516.4C250.2 527.1 236.8 534.9 222.2 539L94.4 574.6C86.1 576.9 77.1 574.6 71 568.4C64.9 562.2 62.6 553.3 64.9 545L100.4 417.2zM156 413.5C151.6 418.2 148.4 423.9 146.7 430.1L122.6 517L209.5 492.9C215.9 491.1 221.7 487.8 226.5 483.2L155.9 413.5zM510 267.4C493.4 250.8 458.7 216.1 406 163.4L372 129.5C398.5 103 413.4 88.1 416.9 84.6C430.4 71 448.8 63.4 468 63.4C487.2 63.4 505.6 71 519.1 84.6L554.8 120.3C568.4 133.9 576 152.3 576 171.4C576 190.5 568.4 209 554.8 222.5C551.3 226 536.4 240.9 509.9 267.4z"/>
|
|
51
|
+
</svg>
|
|
52
|
+
</div>
|
|
57
53
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
v-if="(row ?? 1) > 1"
|
|
75
|
-
@click="connector?.send({
|
|
76
|
-
type: ConnectorEventType.GRID_PLACEMENT_UP,
|
|
77
|
-
payload: {
|
|
78
|
-
uuid: experienceComponent.uuid,
|
|
79
|
-
prn: experienceComponent.prn
|
|
80
|
-
}
|
|
81
|
-
} as GridPlacementUpEvent)"
|
|
82
|
-
class="dv:opacity-0 dv:group-hover/controls:opacity-100 dv:transition-all dv:duration-300 dv:bg-gray-800 dv:w-8 dv:h-8 dv:flex dv:items-center dv:justify-center dv:rounded-sm dv:cursor-pointer"
|
|
83
|
-
>
|
|
84
|
-
<FontAwesomeIcon :icon="['fal', 'arrow-up']" />
|
|
85
|
-
</div>
|
|
54
|
+
<!-- Remove button -->
|
|
55
|
+
<div
|
|
56
|
+
@click="connector?.send({
|
|
57
|
+
type: ConnectorEventType.EXPERIENCE_COMPONENT_REMOVE,
|
|
58
|
+
payload: {
|
|
59
|
+
uuid: experienceComponent.uuid,
|
|
60
|
+
prn: experienceComponent.prn
|
|
61
|
+
}
|
|
62
|
+
} as ExperienceComponentRemoveEvent)"
|
|
63
|
+
class="editor-container-controls-button"
|
|
64
|
+
>
|
|
65
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
|
|
66
|
+
<!-- !Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. -->
|
|
67
|
+
<path fill="#fff" d="M262.2 48C248.9 48 236.9 56.3 232.2 68.8L216 112L120 112C106.7 112 96 122.7 96 136C96 149.3 106.7 160 120 160L520 160C533.3 160 544 149.3 544 136C544 122.7 533.3 112 520 112L424 112L407.8 68.8C403.1 56.3 391.2 48 377.8 48L262.2 48zM128 208L128 512C128 547.3 156.7 576 192 576L448 576C483.3 576 512 547.3 512 512L512 208L464 208L464 512C464 520.8 456.8 528 448 528L192 528C183.2 528 176 520.8 176 512L176 208L128 208zM288 280C288 266.7 277.3 256 264 256C250.7 256 240 266.7 240 280L240 456C240 469.3 250.7 480 264 480C277.3 480 288 469.3 288 456L288 280zM400 280C400 266.7 389.3 256 376 256C362.7 256 352 266.7 352 280L352 456C352 469.3 362.7 480 376 480C389.3 480 400 469.3 400 456L400 280z"/>
|
|
68
|
+
</svg>
|
|
69
|
+
</div>
|
|
86
70
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
71
|
+
<!-- Move Up button -->
|
|
72
|
+
<div
|
|
73
|
+
v-if="(row ?? 1) > 1"
|
|
74
|
+
@click="connector?.send({
|
|
75
|
+
type: ConnectorEventType.GRID_PLACEMENT_UP,
|
|
76
|
+
payload: {
|
|
77
|
+
uuid: experienceComponent.uuid,
|
|
78
|
+
prn: experienceComponent.prn
|
|
79
|
+
}
|
|
80
|
+
} as GridPlacementUpEvent)"
|
|
81
|
+
class="editor-container-controls-button"
|
|
82
|
+
>
|
|
83
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
|
|
84
|
+
<!-- !Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. -->
|
|
85
|
+
<path fill="#fff" d="M342.6 81.4C330.1 68.9 309.8 68.9 297.3 81.4L137.3 241.4C124.8 253.9 124.8 274.2 137.3 286.7C149.8 299.2 170.1 299.2 182.6 286.7L288 181.3L288 552C288 569.7 302.3 584 320 584C337.7 584 352 569.7 352 552L352 181.3L457.4 286.7C469.9 299.2 490.2 299.2 502.7 286.7C515.2 274.2 515.2 253.9 502.7 241.4L342.7 81.4z"/>
|
|
86
|
+
</svg>
|
|
87
|
+
</div>
|
|
101
88
|
|
|
102
|
-
|
|
103
|
-
<
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
89
|
+
<!-- Move Down button -->
|
|
90
|
+
<div
|
|
91
|
+
v-if="(row ?? 1) <( (rows ?? 1))"
|
|
92
|
+
@click="connector?.send({
|
|
93
|
+
type: ConnectorEventType.GRID_PLACEMENT_DOWN,
|
|
94
|
+
payload: {
|
|
95
|
+
uuid: experienceComponent.uuid,
|
|
96
|
+
prn: experienceComponent.prn
|
|
97
|
+
}
|
|
98
|
+
} as GridPlacementDownEvent)"
|
|
99
|
+
class="editor-container-controls-button"
|
|
100
|
+
>
|
|
101
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
|
|
102
|
+
<!-- !Font Awesome Free v7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc. -->
|
|
103
|
+
<path fill="#fff" d="M297.4 566.6C309.9 579.1 330.2 579.1 342.7 566.6L502.7 406.6C515.2 394.1 515.2 373.8 502.7 361.3C490.2 348.8 469.9 348.8 457.4 361.3L352 466.7L352 96C352 78.3 337.7 64 320 64C302.3 64 288 78.3 288 96L288 466.7L182.6 361.3C170.1 348.8 149.8 348.8 137.3 361.3C124.8 373.8 124.8 394.1 137.3 406.6L297.3 566.6z"/>
|
|
104
|
+
</svg>
|
|
105
|
+
</div>
|
|
108
106
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
<FontAwesomeIcon :icon="['fal', 'arrow-from-line']" />
|
|
107
|
+
<div class="editor-container-controls-button">
|
|
108
|
+
<p>{{ row }}</p>
|
|
109
|
+
</div>
|
|
113
110
|
</div>
|
|
114
111
|
</div>
|
|
115
112
|
</div>
|
|
116
113
|
</template>
|
|
117
114
|
|
|
118
|
-
<style scoped>
|
|
119
|
-
|
|
115
|
+
<style scoped lang="scss">
|
|
116
|
+
.editor-container {
|
|
117
|
+
display: grid;
|
|
118
|
+
grid-template-areas: "building-block";
|
|
119
|
+
z-index: 40;
|
|
120
|
+
min-height: 3rem;
|
|
121
|
+
cursor: pointer;
|
|
122
|
+
&:hover {
|
|
123
|
+
outline: 2px dashed #1f2937;
|
|
124
|
+
outline-offset: 2px;
|
|
125
|
+
background-color: #E5E7EB;
|
|
126
|
+
.editor-container-wrapper{
|
|
127
|
+
opacity: 1;
|
|
128
|
+
pointer-events: all;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
.editor-container-draft {
|
|
132
|
+
background-color: #1f2937;
|
|
133
|
+
color: #fff;
|
|
134
|
+
border-radius: 5rem;
|
|
135
|
+
padding: 0.5rem 0.75rem 0.3rem;
|
|
136
|
+
grid-area: building-block;
|
|
137
|
+
margin: 1rem 1rem auto auto;
|
|
138
|
+
}
|
|
139
|
+
.editor-container-controls,
|
|
140
|
+
.editor-container-content {
|
|
141
|
+
grid-area: building-block;
|
|
142
|
+
}
|
|
143
|
+
.editor-container-controls {
|
|
144
|
+
position: relative;
|
|
145
|
+
opacity: 0;
|
|
146
|
+
transition: opacity 0.3s ease;
|
|
147
|
+
z-index: 50;
|
|
148
|
+
width: 100%;
|
|
149
|
+
display: flex;
|
|
150
|
+
align-items: flex-start;
|
|
151
|
+
justify-content: center;
|
|
152
|
+
&:hover {
|
|
153
|
+
opacity: 1;
|
|
154
|
+
}
|
|
155
|
+
.editor-container-controls-label {
|
|
156
|
+
background-color: #1f2937;
|
|
157
|
+
color: #fff;
|
|
158
|
+
padding: 6px 12px;
|
|
159
|
+
font-size: 0.75rem;
|
|
160
|
+
font-weight: 600;
|
|
161
|
+
text-align: center;
|
|
162
|
+
border-radius: 0 0 6px 6px;
|
|
163
|
+
position: absolute;
|
|
164
|
+
top: 0;
|
|
165
|
+
margin: 0 auto;
|
|
166
|
+
}
|
|
167
|
+
.editor-container-controls-buttons {
|
|
168
|
+
display: flex;
|
|
169
|
+
gap: 0.5rem;
|
|
170
|
+
position: absolute;
|
|
171
|
+
left: 1rem;
|
|
172
|
+
top: 1rem;
|
|
173
|
+
.editor-container-controls-button {
|
|
174
|
+
background-color: #1f2937;
|
|
175
|
+
color: #fff;
|
|
176
|
+
font-size: 0.75rem;
|
|
177
|
+
font-weight: 600;
|
|
178
|
+
height: 2rem;
|
|
179
|
+
width: 2rem;
|
|
180
|
+
text-align: center;
|
|
181
|
+
display: flex;
|
|
182
|
+
align-items: center;
|
|
183
|
+
justify-content: center;
|
|
184
|
+
border-radius: 0.25rem;
|
|
185
|
+
cursor: pointer;
|
|
186
|
+
svg{
|
|
187
|
+
width: 1.2rem;
|
|
188
|
+
height: 1.2rem;
|
|
189
|
+
}
|
|
190
|
+
p {
|
|
191
|
+
margin: 0 0 -.15rem 0;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
120
197
|
</style>
|
|
@@ -33,30 +33,57 @@ function handleMouseUp() {
|
|
|
33
33
|
<div @mouseenter="isInsidePlaceholder = true" @mouseleave="isInsidePlaceholder = false" @mouseup="handleMouseUp()">
|
|
34
34
|
<component v-if="currentComponent && isInsidePlaceholder" :is="currentComponent" :building-block="buildingBlockToCreate" :building-block-field-fulfillments="[]" class="dv:animate-pulse" />
|
|
35
35
|
|
|
36
|
-
<div v-else class="
|
|
37
|
-
<
|
|
38
|
-
<
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
</button>
|
|
55
|
-
</div>
|
|
36
|
+
<div v-else class="empty-grid-placements">
|
|
37
|
+
<svg width="39" height="39" viewBox="0 0 39 39" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
38
|
+
<rect x="0.5" y="9.5" width="29" height="29" rx="4.5" stroke="#705ED9" stroke-dasharray="2 2"/>
|
|
39
|
+
<rect x="9.5" y="0.5" width="29" height="29" rx="4.5" fill="#EAEAFA" stroke="#705ED9"/>
|
|
40
|
+
</svg>
|
|
41
|
+
|
|
42
|
+
<p v-if="type === 'content-experience'">
|
|
43
|
+
Drag experience components from the sidebar to begin <br>
|
|
44
|
+
or add a template
|
|
45
|
+
</p>
|
|
46
|
+
|
|
47
|
+
<p v-else>
|
|
48
|
+
Drag experience components from the sidebar to begin
|
|
49
|
+
</p>
|
|
50
|
+
|
|
51
|
+
<button v-if="type === 'content-experience'" @click="connector?.send({ type: ConnectorEventType.BLUEPRINT_OVERLAY_OPEN, payload: null })" class="dv:bg-gradient-to-bl dv:from-primary dv:to-primary-tint dv:px-6 dv:py-3 dv:rounded-md dv:text-white dv:font-medium">
|
|
52
|
+
Use template
|
|
53
|
+
</button>
|
|
56
54
|
</div>
|
|
57
55
|
</div>
|
|
58
56
|
</template>
|
|
59
57
|
|
|
60
|
-
<style scoped>
|
|
61
|
-
|
|
58
|
+
<style scoped lang="scss">
|
|
59
|
+
.empty-grid-placements {
|
|
60
|
+
font-family: "Roboto", "Calibri", "Arial", sans-serif;
|
|
61
|
+
padding: 1rem;
|
|
62
|
+
height: 100%;
|
|
63
|
+
width: 100%;
|
|
64
|
+
border: 1px dashed #705ED9;
|
|
65
|
+
display: flex;
|
|
66
|
+
flex-direction: column;
|
|
67
|
+
gap: 1rem;
|
|
68
|
+
align-items: center;
|
|
69
|
+
justify-content: center;
|
|
70
|
+
background-color: #EAEAFA;
|
|
71
|
+
border-radius: 0.5rem;
|
|
72
|
+
p {
|
|
73
|
+
text-align: center;
|
|
74
|
+
color: #000;
|
|
75
|
+
}
|
|
76
|
+
.empty-grid-placements-button {
|
|
77
|
+
background: linear-gradient(to left bottom in oklab, rgb(112, 94, 217) 0%, rgb(136, 118, 242) 100%);
|
|
78
|
+
color: #fff;
|
|
79
|
+
padding: 0.7rem 1.2rem;
|
|
80
|
+
border-radius: 0.5rem;
|
|
81
|
+
font-size: 0.875rem;
|
|
82
|
+
font-weight: 600;
|
|
83
|
+
cursor: pointer;
|
|
84
|
+
&:hover {
|
|
85
|
+
background-color: #5243A2;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
62
89
|
</style>
|
|
@@ -7,15 +7,22 @@ defineProps<{
|
|
|
7
7
|
</script>
|
|
8
8
|
|
|
9
9
|
<template>
|
|
10
|
-
<div class="
|
|
11
|
-
<
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
</p>
|
|
15
|
-
</div>
|
|
10
|
+
<div class="missing-experience-component">
|
|
11
|
+
<p>
|
|
12
|
+
Missing component: {{ buildingBlock.slug }}
|
|
13
|
+
</p>
|
|
16
14
|
</div>
|
|
17
15
|
</template>
|
|
18
16
|
|
|
19
|
-
<style scoped>
|
|
20
|
-
|
|
17
|
+
<style scoped lang="scss">
|
|
18
|
+
.missing-experience-component {
|
|
19
|
+
font-family: "Roboto", "Calibri", "Arial", sans-serif;
|
|
20
|
+
padding: 1rem;
|
|
21
|
+
width: 100%;
|
|
22
|
+
height: 16rem;
|
|
23
|
+
display: flex;
|
|
24
|
+
align-items: center;
|
|
25
|
+
justify-content: center;
|
|
26
|
+
border: 1px dashed #000;
|
|
27
|
+
}
|
|
21
28
|
</style>
|
|
@@ -121,10 +121,8 @@ provide('buildingBlockToCreate', buildingBlockToCreate)
|
|
|
121
121
|
</script>
|
|
122
122
|
|
|
123
123
|
<template>
|
|
124
|
-
<div v-if="!inIframe" class="
|
|
125
|
-
<
|
|
126
|
-
The editor does not work without Delta Client. <br> Please connect the editor
|
|
127
|
-
</p>
|
|
124
|
+
<div v-if="!inIframe" class="experience-editor-view">
|
|
125
|
+
The editor does not work without Delta Client. <br> Please connect the editor
|
|
128
126
|
</div>
|
|
129
127
|
|
|
130
128
|
<EditorRootExperienceComponent v-if="rootExperienceComponent" :root-experience-component="rootExperienceComponent" />
|
|
@@ -132,6 +130,16 @@ provide('buildingBlockToCreate', buildingBlockToCreate)
|
|
|
132
130
|
<EmptyGridPlacements v-if="rootExperienceComponent && !hasGridPlacements && !hasBuildingBlock" :building-block-to-create="buildingBlockToCreate" />
|
|
133
131
|
</template>
|
|
134
132
|
|
|
135
|
-
<style scoped>
|
|
136
|
-
|
|
133
|
+
<style scoped lang="scss">
|
|
134
|
+
.experience-editor-view {
|
|
135
|
+
position: fixed;
|
|
136
|
+
height: 100vh;
|
|
137
|
+
width: 100%;
|
|
138
|
+
background-color: rgba(0, 0, 0, 0.9);
|
|
139
|
+
display: flex;
|
|
140
|
+
align-items: center;
|
|
141
|
+
justify-content: center;
|
|
142
|
+
text-align: center;
|
|
143
|
+
color: #fff;
|
|
144
|
+
}
|
|
137
145
|
</style>
|
|
@@ -20,9 +20,9 @@ const axiosErrorResponse: ComputedRef<{ name: string, message: string, statusCod
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
const modeBaseUrlMap: Ref<{ [key in 'dev' | 'acc' | 'prod']: string }> = ref({
|
|
23
|
-
dev: 'https://api.dev.getplate.rocks/
|
|
24
|
-
acc: 'https://api.acc.getplate.rocks/
|
|
25
|
-
prod: 'https://api.acc.getplate.rocks/
|
|
23
|
+
dev: 'https://api.dev.getplate.rocks/content-delivery-api/content-experiences',
|
|
24
|
+
acc: 'https://api.acc.getplate.rocks/content-delivery-api/content-experiences',
|
|
25
|
+
prod: 'https://api.acc.getplate.rocks/content-delivery-api/content-experiences',
|
|
26
26
|
})
|
|
27
27
|
|
|
28
28
|
const client = axios.create({
|
|
@@ -7,11 +7,11 @@ export default defineComponent({
|
|
|
7
7
|
</script>
|
|
8
8
|
|
|
9
9
|
<template>
|
|
10
|
-
<div class="
|
|
11
|
-
<p class="
|
|
10
|
+
<div class="not-found-view">
|
|
11
|
+
<p class="not-found-view-number">
|
|
12
12
|
404
|
|
13
13
|
</p>
|
|
14
|
-
<div class="
|
|
14
|
+
<div class="not-found-view-content">
|
|
15
15
|
<h1 class="dv:font-bold">
|
|
16
16
|
Page not found
|
|
17
17
|
</h1>
|
|
@@ -22,6 +22,23 @@ export default defineComponent({
|
|
|
22
22
|
</div>
|
|
23
23
|
</template>
|
|
24
24
|
|
|
25
|
-
<style scoped>
|
|
26
|
-
|
|
25
|
+
<style scoped lang="scss">
|
|
26
|
+
.not-found-view {
|
|
27
|
+
height: 100vh;
|
|
28
|
+
width: 100%;
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
gap: 1rem;
|
|
32
|
+
align-items: center;
|
|
33
|
+
justify-content: center;
|
|
34
|
+
.not-found-view-number {
|
|
35
|
+
font-size: 8rem;
|
|
36
|
+
}
|
|
37
|
+
.not-found-view-content {
|
|
38
|
+
text-align: center;
|
|
39
|
+
h1 {
|
|
40
|
+
font-weight: 700;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
27
44
|
</style>
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { computed } from 'vue';
|
|
3
|
-
|
|
4
|
-
const props = defineProps<{
|
|
5
|
-
icon: [string, string]
|
|
6
|
-
className?: string
|
|
7
|
-
size?: string
|
|
8
|
-
spin?: boolean
|
|
9
|
-
}>()
|
|
10
|
-
|
|
11
|
-
const iconStyle = computed(() => {
|
|
12
|
-
return props.icon[0] === 'fas' ? 'fa-solid' : 'fa-light'
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
</script>
|
|
16
|
-
|
|
17
|
-
<template>
|
|
18
|
-
<i
|
|
19
|
-
:class="`${iconStyle} fa-${icon[1]} ${className ?? ''} ${size && size !== 'md' ? `text-${size}` : 'text-[16px]'} ${spin ? 'fa-spin' : ''}`"
|
|
20
|
-
></i>
|
|
21
|
-
</template>
|