@lightspeed/crane 1.1.3 → 1.2.1
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/CHANGELOG.md +179 -0
- package/bin/crane.js +3 -2
- package/dist/app.d.mts +50 -12
- package/dist/app.d.ts +50 -12
- package/dist/app.mjs +1 -1
- package/dist/cli.d.mts +2 -1
- package/dist/cli.d.ts +2 -1
- package/dist/cli.mjs +6 -8
- package/package.json +11 -3
- package/template/headers/example-header/showcases/2.ts +1 -1
- package/template/package.json +3 -4
- package/template/reference/sections/about-us/showcases/1.ts +2 -23
- package/template/reference/sections/about-us/showcases/2.ts +2 -19
- package/template/reference/sections/intro-slider/showcases/1.ts +2 -1
- package/template/reference/sections/intro-slider/showcases/2.ts +2 -1
- package/template/sections/example-section/ExampleSection.vue +13 -5
- package/template/sections/example-section/assets/arrow.svg +3 -0
- package/template/sections/example-section/component/button/Button.vue +87 -0
- package/template/sections/example-section/component/selectbox/Selectbox.vue +45 -0
- package/template/sections/example-section/component/toggle/Toggle.vue +110 -0
- package/template/sections/example-section/settings/content.ts +49 -1
- package/template/sections/example-section/settings/design.ts +4 -0
- package/template/sections/example-section/settings/translations.ts +48 -0
- package/template/sections/example-section/showcases/1.ts +43 -0
- package/template/sections/example-section/showcases/2.ts +43 -0
- package/template/sections/example-section/showcases/3.ts +43 -0
- package/template/sections/example-section/showcases/translations.ts +158 -2
- package/template/shared/components/LanguageSelector.vue +4 -4
- package/template/shared/utils.ts +28 -0
- package/types.d.ts +15 -8
|
@@ -166,6 +166,49 @@ export default {
|
|
|
166
166
|
},
|
|
167
167
|
],
|
|
168
168
|
},
|
|
169
|
+
toggle: {
|
|
170
|
+
type: 'TOGGLE',
|
|
171
|
+
label: '$label.showcase_3.toggle.label',
|
|
172
|
+
description: '$label.showcase_3.toggle.description',
|
|
173
|
+
defaults: {
|
|
174
|
+
enabled: true,
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
selectbox: {
|
|
178
|
+
type: 'SELECTBOX',
|
|
179
|
+
placeholder: '$label.showcase_3.selectbox.placeholder',
|
|
180
|
+
label: '$label.showcase_3.selectbox.label',
|
|
181
|
+
description: '$label.showcase_3.selectbox.description',
|
|
182
|
+
options: [
|
|
183
|
+
{
|
|
184
|
+
value: 'one',
|
|
185
|
+
label: '$label.showcase_3.selectbox.one.label',
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
value: 'two',
|
|
189
|
+
label: '$label.showcase_3.selectbox.two.label',
|
|
190
|
+
},
|
|
191
|
+
],
|
|
192
|
+
defaults: {
|
|
193
|
+
value: 'one',
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
info: {
|
|
197
|
+
type: 'INFO',
|
|
198
|
+
text: '$label.showcase_3.info.text',
|
|
199
|
+
button: {
|
|
200
|
+
title: '$label.showcase_3.info.button.title',
|
|
201
|
+
link: 'https://example.com',
|
|
202
|
+
buttonType: 'HYPER_LINK',
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
button: {
|
|
206
|
+
type: 'BUTTON',
|
|
207
|
+
label: '$label.showcase_1.button.label',
|
|
208
|
+
title: '$label.showcase_1.button.defaults.title',
|
|
209
|
+
buttonType: 'HYPER_LINK',
|
|
210
|
+
link: 'https://www.example.com',
|
|
211
|
+
},
|
|
169
212
|
},
|
|
170
213
|
design: {
|
|
171
214
|
section_title: {
|
|
@@ -29,6 +29,57 @@ export default {
|
|
|
29
29
|
'$label.showcase_3.image_text_2.text': 'Fixed-gears',
|
|
30
30
|
'$label.showcase_3.image_text_3.text': 'Repair service',
|
|
31
31
|
'$label.showcase_3.image_text_4.text': 'Bike accessories',
|
|
32
|
+
'$label.showcase_1.info.text': 'Showcase 1: This is info section where you can provide some useful tips regarding custom section usage',
|
|
33
|
+
'$label.showcase_2.info.text': 'Showcase 2: This is area for useful tips regarding custom section usage',
|
|
34
|
+
'$label.showcase_3.info.text': 'Showcase 3: This is info section where you can provide some useful tips regarding custom section usage',
|
|
35
|
+
'$label.showcase_1.info.button.title': 'Showcase 1: Learn',
|
|
36
|
+
'$label.showcase_2.info.button.title': 'Showcase 2: More',
|
|
37
|
+
'$label.showcase_3.info.button.title': 'Showcase 3: More',
|
|
38
|
+
|
|
39
|
+
'$label.showcase_1.button.label': 'Content.ts: Button',
|
|
40
|
+
'$label.showcase_1.button.defaults.title': 'Button Title',
|
|
41
|
+
'$label.showcase_1.toggle.label': 'Toggle',
|
|
42
|
+
'$label.showcase_1.toggle.description': 'Enable or disable this feature using the toggle switch',
|
|
43
|
+
|
|
44
|
+
'$label.showcase_1.selectbox.placeholder': 'Select an option',
|
|
45
|
+
'$label.showcase_1.selectbox.label': 'Content.ts: Selectbox',
|
|
46
|
+
'$label.showcase_1.selectbox.description': 'Content.ts:Select an option from the dropdown to customize your settings',
|
|
47
|
+
'$label.showcase_1.selectbox.one.label': 'One label',
|
|
48
|
+
'$label.showcase_1.selectbox.two.label': 'Two label',
|
|
49
|
+
|
|
50
|
+
'$label.showcase_1.info.label': 'Content.ts: Info',
|
|
51
|
+
'$label.showcase_1.info.description': 'Content.ts: This is info section where you can provide some useful tips regarding custom section usage',
|
|
52
|
+
'$label.showcase_1.info.button.label': 'Content.ts: Learn more',
|
|
53
|
+
|
|
54
|
+
'$label.showcase_2.button.label': 'Content.ts: Button',
|
|
55
|
+
'$label.showcase_2.button.defaults.title': 'Button Title',
|
|
56
|
+
'$label.showcase_2.toggle.label': 'Toggle',
|
|
57
|
+
'$label.showcase_2.toggle.description': 'Enable or disable this feature using the toggle switch',
|
|
58
|
+
|
|
59
|
+
'$label.showcase_2.selectbox.placeholder': 'Select an option',
|
|
60
|
+
'$label.showcase_2.selectbox.label': 'Content.ts: Selectbox',
|
|
61
|
+
'$label.showcase_2.selectbox.description': 'Content.ts:Select an option from the dropdown to customize your settings',
|
|
62
|
+
'$label.showcase_2.selectbox.one.label': 'One label',
|
|
63
|
+
'$label.showcase_2.selectbox.two.label': 'Two label',
|
|
64
|
+
|
|
65
|
+
'$label.showcase_2.info.label': 'Content.ts: Info',
|
|
66
|
+
'$label.showcase_2.info.description': 'Content.ts: This is info section where you can provide some useful tips regarding custom section usage',
|
|
67
|
+
'$label.showcase_2.info.button.label': 'Content.ts: Learn more',
|
|
68
|
+
|
|
69
|
+
'$label.showcase_3.button.label': 'Content.ts: Button',
|
|
70
|
+
'$label.showcase_3.button.defaults.title': 'Button Title',
|
|
71
|
+
'$label.showcase_3.toggle.label': 'Toggle',
|
|
72
|
+
'$label.showcase_3.toggle.description': 'Enable or disable this feature using the toggle switch',
|
|
73
|
+
|
|
74
|
+
'$label.showcase_3.selectbox.placeholder': 'Select an option',
|
|
75
|
+
'$label.showcase_3.selectbox.label': 'Content.ts: Selectbox',
|
|
76
|
+
'$label.showcase_3.selectbox.description': 'Content.ts:Select an option from the dropdown to customize your settings',
|
|
77
|
+
'$label.showcase_3.selectbox.one.label': 'One label',
|
|
78
|
+
'$label.showcase_3.selectbox.two.label': 'Two label',
|
|
79
|
+
|
|
80
|
+
'$label.showcase_3.info.label': 'Content.ts: Info',
|
|
81
|
+
'$label.showcase_3.info.description': 'Content.ts: This is info section where you can provide some useful tips regarding custom section usage',
|
|
82
|
+
'$label.showcase_3.info.button.label': 'Content.ts: Learn more',
|
|
32
83
|
},
|
|
33
84
|
|
|
34
85
|
nl: {
|
|
@@ -59,14 +110,66 @@ export default {
|
|
|
59
110
|
'$label.showcase_3.image_text_2.text': 'Vaste versnellingen',
|
|
60
111
|
'$label.showcase_3.image_text_3.text': 'Reparatieservice',
|
|
61
112
|
'$label.showcase_3.image_text_4.text': 'Fietsaccessoires',
|
|
113
|
+
'$label.showcase_1.info.text': 'Dit is het informatiedeel waar je enkele nuttige tips kunt geven over het gebruik van aangepaste secties',
|
|
114
|
+
'$label.showcase_2.info.text': 'Hier is een gebied voor nuttige tips over het gebruik van aangepaste secties',
|
|
115
|
+
'$label.showcase_1.info.button.title': 'Leren',
|
|
116
|
+
'$label.showcase_2.info.button.title': 'Meer',
|
|
117
|
+
|
|
118
|
+
'$label.showcase_1.button.label': 'Content.ts: Knop',
|
|
119
|
+
'$label.showcase_1.button.defaults.title': 'Knoptitel',
|
|
120
|
+
'$label.showcase_1.toggle.label': 'Schakelaar',
|
|
121
|
+
'$label.showcase_1.toggle.description': 'Schakel deze functie in of uit met de schakelaar',
|
|
122
|
+
|
|
123
|
+
'$label.showcase_1.selectbox.placeholder': 'Selecteer een optie',
|
|
124
|
+
'$label.showcase_1.selectbox.label': 'Content.ts: Selectievak',
|
|
125
|
+
'$label.showcase_1.selectbox.description': 'Content.ts:Selecteer een optie uit de dropdown om uw instellingen aan te passen',
|
|
126
|
+
'$label.showcase_1.selectbox.one.label': 'Eén label',
|
|
127
|
+
'$label.showcase_1.selectbox.two.label': 'Twee label',
|
|
128
|
+
|
|
129
|
+
'$label.showcase_1.info.label': 'Content.ts: Info',
|
|
130
|
+
'$label.showcase_1.info.description': 'Content.ts: Dit is een informatiedeel waar je enkele nuttige tips '
|
|
131
|
+
+ 'kunt geven over het gebruik van aangepaste secties',
|
|
132
|
+
'$label.showcase_1.info.button.label': 'Content.ts: Meer informatie',
|
|
133
|
+
|
|
134
|
+
'$label.showcase_2.button.label': 'Content.ts: Knop',
|
|
135
|
+
'$label.showcase_2.button.defaults.title': 'Knoptitel',
|
|
136
|
+
'$label.showcase_2.toggle.label': 'Schakelaar',
|
|
137
|
+
'$label.showcase_2.toggle.description': 'Schakel deze functie in of uit met de schakelaar',
|
|
138
|
+
|
|
139
|
+
'$label.showcase_2.selectbox.placeholder': 'Selecteer een optie',
|
|
140
|
+
'$label.showcase_2.selectbox.label': 'Content.ts: Selectievak',
|
|
141
|
+
'$label.showcase_2.selectbox.description': 'Content.ts:Selecteer een optie uit de dropdown om uw instellingen aan te passen',
|
|
142
|
+
'$label.showcase_2.selectbox.one.label': 'Eén label',
|
|
143
|
+
'$label.showcase_2.selectbox.two.label': 'Twee label',
|
|
144
|
+
|
|
145
|
+
'$label.showcase_2.info.label': 'Content.ts: Info',
|
|
146
|
+
'$label.showcase_2.info.description': 'Content.ts: Dit is een informatiedeel waar je enkele '
|
|
147
|
+
+ 'nuttige tips kunt geven over het gebruik van aangepaste secties',
|
|
148
|
+
'$label.showcase_2.info.button.label': 'Content.ts: Meer informatie',
|
|
149
|
+
|
|
150
|
+
'$label.showcase_3.button.label': 'Content.ts: Knop',
|
|
151
|
+
'$label.showcase_3.button.defaults.title': 'Knoptitel',
|
|
152
|
+
'$label.showcase_3.toggle.label': 'Schakelaar',
|
|
153
|
+
'$label.showcase_3.toggle.description': 'Schakel deze functie in of uit met de schakelaar',
|
|
154
|
+
|
|
155
|
+
'$label.showcase_3.selectbox.placeholder': 'Selecteer een optie',
|
|
156
|
+
'$label.showcase_3.selectbox.label': 'Content.ts: Selectievak',
|
|
157
|
+
'$label.showcase_3.selectbox.description': 'Content.ts:Selecteer een optie uit de dropdown om uw instellingen aan te passen',
|
|
158
|
+
'$label.showcase_3.selectbox.one.label': 'Eén label',
|
|
159
|
+
'$label.showcase_3.selectbox.two.label': 'Twee label',
|
|
160
|
+
|
|
161
|
+
'$label.showcase_3.info.label': 'Content.ts: Info',
|
|
162
|
+
'$label.showcase_3.info.description': 'Content.ts: Dit is een informatiedeel waar je enkele nuttige tips '
|
|
163
|
+
+ 'kunt geven over het gebruik van aangepaste secties',
|
|
164
|
+
'$label.showcase_3.info.button.label': 'Content.ts: Meer informatie',
|
|
62
165
|
},
|
|
63
166
|
|
|
64
167
|
fr: {
|
|
65
168
|
'$label.showcase_1.blockName': 'Section de référence — Vente au détail',
|
|
66
169
|
'$label.showcase_1.section_title.text': 'Collections tendance',
|
|
67
170
|
'$label.showcase_1.section_description.text': 'Découvrez nos pièces préférées de cette saison et offrez-vous ces '
|
|
68
|
-
|
|
69
|
-
|
|
171
|
+
+ 'pièces intemporelles adaptées à toutes les occasions. Nous offrons la livraison et les retours gratuits, ainsi '
|
|
172
|
+
+ 'que des conseils de mode 24/7 via notre application mobile.',
|
|
70
173
|
'$label.showcase_1.image_text_1.text': 'Nouveautés',
|
|
71
174
|
'$label.showcase_1.image_text_2.text': 'Look sportif',
|
|
72
175
|
'$label.showcase_1.image_text_3.text': 'Accessoires d\'été',
|
|
@@ -91,5 +194,58 @@ export default {
|
|
|
91
194
|
'$label.showcase_3.image_text_2.text': 'Vélos à pignon fixe',
|
|
92
195
|
'$label.showcase_3.image_text_3.text': 'Service de réparation',
|
|
93
196
|
'$label.showcase_3.image_text_4.text': 'Accessoires pour vélos',
|
|
197
|
+
'$label.showcase_1.info.text': 'Showcase 1: Ceci est une section d\'information où vous pouvez fournir des conseils utiles sur '
|
|
198
|
+
+ 'l\'utilisation de la section personnalisée',
|
|
199
|
+
'$label.showcase_2.info.text': 'Showcase 2: Ceci est une zone pour des conseils utiles sur l\'utilisation de la section personnalisée',
|
|
200
|
+
'$label.showcase_1.info.button.title': 'Showcase 1: Apprendre',
|
|
201
|
+
'$label.showcase_2.info.button.title': 'Showcase 2: Plus',
|
|
202
|
+
|
|
203
|
+
'$label.showcase_1.button.label': 'Content.ts: Bouton',
|
|
204
|
+
'$label.showcase_1.button.defaults.title': 'Titre du bouton',
|
|
205
|
+
'$label.showcase_1.toggle.label': 'Basculer',
|
|
206
|
+
'$label.showcase_1.toggle.description': 'Activez ou désactivez cette fonctionnalité à l\'aide de l\'interrupteur',
|
|
207
|
+
|
|
208
|
+
'$label.showcase_1.selectbox.placeholder': 'Sélectionnez une option',
|
|
209
|
+
'$label.showcase_1.selectbox.label': 'Content.ts: Boîte de sélection',
|
|
210
|
+
'$label.showcase_1.selectbox.description': 'Content.ts:Sélectionnez une option dans le menu déroulant pour personnaliser vos paramètres',
|
|
211
|
+
'$label.showcase_1.selectbox.one.label': 'Un label',
|
|
212
|
+
'$label.showcase_1.selectbox.two.label': 'Deux label',
|
|
213
|
+
|
|
214
|
+
'$label.showcase_1.info.label': 'Content.ts: Info',
|
|
215
|
+
'$label.showcase_1.info.description': 'Content.ts: Ceci est une section d\'information où vous pouvez '
|
|
216
|
+
+ 'fournir des conseils utiles sur l\'utilisation de la section personnalisée',
|
|
217
|
+
'$label.showcase_1.info.button.label': 'Content.ts: En savoir plus',
|
|
218
|
+
|
|
219
|
+
'$label.showcase_2.button.label': 'Content.ts: Bouton',
|
|
220
|
+
'$label.showcase_2.button.defaults.title': 'Titre du bouton',
|
|
221
|
+
'$label.showcase_2.toggle.label': 'Basculer',
|
|
222
|
+
'$label.showcase_2.toggle.description': 'Activez ou désactivez cette fonctionnalité à l\'aide de l\'interrupteur',
|
|
223
|
+
|
|
224
|
+
'$label.showcase_2.selectbox.placeholder': 'Sélectionnez une option',
|
|
225
|
+
'$label.showcase_2.selectbox.label': 'Content.ts: Boîte de sélection',
|
|
226
|
+
'$label.showcase_2.selectbox.description': 'Content.ts:Sélectionnez une option dans le menu déroulant pour personnaliser vos paramètres',
|
|
227
|
+
'$label.showcase_2.selectbox.one.label': 'Un label',
|
|
228
|
+
'$label.showcase_2.selectbox.two.label': 'Deux label',
|
|
229
|
+
|
|
230
|
+
'$label.showcase_2.info.label': 'Content.ts: Info',
|
|
231
|
+
'$label.showcase_2.info.description': 'Content.ts: Ceci est une section d\'information où vous pouvez fournir '
|
|
232
|
+
+ 'des conseils utiles sur l\'utilisation de la section personnalisée',
|
|
233
|
+
'$label.showcase_2.info.button.label': 'Content.ts: En savoir plus',
|
|
234
|
+
|
|
235
|
+
'$label.showcase_3.button.label': 'Content.ts: Bouton',
|
|
236
|
+
'$label.showcase_3.button.defaults.title': 'Titre du bouton',
|
|
237
|
+
'$label.showcase_3.toggle.label': 'Basculer',
|
|
238
|
+
'$label.showcase_3.toggle.description': 'Activez ou désactivez cette fonctionnalité à l\'aide de l\'interrupteur',
|
|
239
|
+
|
|
240
|
+
'$label.showcase_3.selectbox.placeholder': 'Sélectionnez une option',
|
|
241
|
+
'$label.showcase_3.selectbox.label': 'Content.ts: Boîte de sélection',
|
|
242
|
+
'$label.showcase_3.selectbox.description': 'Content.ts:Sélectionnez une option dans le menu déroulant pour personnaliser vos paramètres',
|
|
243
|
+
'$label.showcase_3.selectbox.one.label': 'Un label',
|
|
244
|
+
'$label.showcase_3.selectbox.two.label': 'Deux label',
|
|
245
|
+
|
|
246
|
+
'$label.showcase_3.info.label': 'Content.ts: Info',
|
|
247
|
+
'$label.showcase_3.info.description': 'Content.ts: Ceci est une section d\'information où vous pouvez fournir '
|
|
248
|
+
+ 'des conseils utiles sur l\'utilisation de la section personnalisée',
|
|
249
|
+
'$label.showcase_3.info.button.label': 'Content.ts: En savoir plus',
|
|
94
250
|
},
|
|
95
251
|
} as const;
|
|
@@ -25,10 +25,10 @@ import { computed } from 'vue';
|
|
|
25
25
|
import { Design } from '../../headers/example-header/type.ts';
|
|
26
26
|
|
|
27
27
|
const baseProps = useVueBaseProps<unknown, Design>();
|
|
28
|
-
const
|
|
29
|
-
const isPreviewMode = computed(() =>
|
|
30
|
-
const sortedLanguages = computed(() => (
|
|
31
|
-
? [...
|
|
28
|
+
const siteContent = computed(() => baseProps.site?.value satisfies SiteContent);
|
|
29
|
+
const isPreviewMode = computed(() => siteContent.value?.isPreviewMode ?? false);
|
|
30
|
+
const sortedLanguages = computed(() => (siteContent.value?.languages
|
|
31
|
+
? [...siteContent.value.languages].sort((a, b) => {
|
|
32
32
|
if (a.main && !b.main) return -1;
|
|
33
33
|
if (!a.main && b.main) return 1;
|
|
34
34
|
return 0;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function isDark(color: string): boolean {
|
|
2
|
+
if (!color) return false;
|
|
3
|
+
|
|
4
|
+
let r; let g; let b;
|
|
5
|
+
|
|
6
|
+
if (color.startsWith('#')) {
|
|
7
|
+
const hex = color.replace('#', '');
|
|
8
|
+
if (hex.length === 3) {
|
|
9
|
+
r = parseInt(hex[0] + hex[0], 16);
|
|
10
|
+
g = parseInt(hex[1] + hex[1], 16);
|
|
11
|
+
b = parseInt(hex[2] + hex[2], 16);
|
|
12
|
+
} else {
|
|
13
|
+
r = parseInt(hex.substring(0, 2), 16);
|
|
14
|
+
g = parseInt(hex.substring(2, 4), 16);
|
|
15
|
+
b = parseInt(hex.substring(4, 6), 16);
|
|
16
|
+
}
|
|
17
|
+
} else if (color.startsWith('rgb')) {
|
|
18
|
+
const rgbValues = color.match(/\d+/g);
|
|
19
|
+
if (rgbValues) {
|
|
20
|
+
[r, g, b] = rgbValues.map(Number);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (r === undefined || g === undefined || b === undefined) return false;
|
|
25
|
+
|
|
26
|
+
const brightness = (r * 299 + g * 587 + b * 114) / 1000;
|
|
27
|
+
return brightness < 128;
|
|
28
|
+
}
|
package/types.d.ts
CHANGED
|
@@ -367,6 +367,7 @@ type MapEditorDesignTypes = {
|
|
|
367
367
|
readonly BACKGROUND: string;
|
|
368
368
|
readonly COLOR_PICKER: string;
|
|
369
369
|
readonly LOGO: string;
|
|
370
|
+
readonly DIVIDER: string;
|
|
370
371
|
};
|
|
371
372
|
|
|
372
373
|
interface TextDesignEditor {
|
|
@@ -416,15 +417,21 @@ interface LogoDesignEditor {
|
|
|
416
417
|
defaults: Record<string, unknown>;
|
|
417
418
|
}
|
|
418
419
|
|
|
420
|
+
interface DividerDesignEditor {
|
|
421
|
+
readonly type: 'DIVIDER';
|
|
422
|
+
readonly label: string | Record<string, string>;
|
|
423
|
+
}
|
|
424
|
+
|
|
419
425
|
type DesignEditor =
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
426
|
+
TextDesignEditor
|
|
427
|
+
| ButtonDesignEditor
|
|
428
|
+
| ImageDesignEditor
|
|
429
|
+
| ToggleDesignEditor
|
|
430
|
+
| SelectboxDesignEditor
|
|
431
|
+
| BackgroundDesignEditor
|
|
432
|
+
| ColorPickerDesignEditor
|
|
433
|
+
| LogoDesignEditor
|
|
434
|
+
| DividerDesignEditor;
|
|
428
435
|
|
|
429
436
|
type InferDesignType<T extends Record<string, DesignEditor>> = {
|
|
430
437
|
readonly [P in keyof T]: MapEditorDesignTypes[T[P]['type']]
|