@nascentdigital/funnel-ui 4.4.20 → 4.5.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/Tailwind.d.ts +5 -1
- package/dist/Tailwind.js +9 -0
- package/dist/server/blocks/Block.d.ts +42 -2
- package/dist/server/blocks/Block.js +88 -0
- package/dist/server/blocks/Clients.d.ts +20 -29
- package/dist/server/blocks/Clients.js +13 -57
- package/dist/server/blocks/MediaLayout.d.ts +10 -5
- package/dist/server/blocks/MediaLayout.js +41 -22
- package/dist/server/blocks/Message.d.ts +9 -67
- package/dist/server/blocks/Message.js +15 -292
- package/dist/server/blocks/Outcome.d.ts +22 -82
- package/dist/server/blocks/Outcome.js +20 -474
- package/dist/server/blocks/Testimonial.d.ts +81 -16
- package/dist/server/blocks/Testimonial.js +59 -27
- package/dist/server/blocks/Testimonials.d.ts +41 -0
- package/dist/server/blocks/Testimonials.js +90 -0
- package/dist/server/blocks/ValueProp.d.ts +19 -38
- package/dist/server/blocks/ValueProp.js +14 -100
- package/dist/server/blocks/index.d.ts +1 -0
- package/dist/server/blocks/index.js +1 -0
- package/dist/server/blocks/summary/Statement.d.ts +304 -0
- package/dist/server/blocks/summary/Statement.js +52 -0
- package/dist/server/blocks/summary/Summary.d.ts +18 -0
- package/dist/server/blocks/summary/Summary.js +34 -0
- package/dist/server/blocks/summary/index.d.ts +1 -0
- package/dist/server/blocks/summary/index.js +17 -0
- package/dist/server/entities/Person.d.ts +27 -2
- package/dist/server/entities/Person.js +55 -5
- package/dist/server/layouts/BrickLayout.d.ts +290 -0
- package/dist/server/layouts/BrickLayout.js +25 -0
- package/dist/server/layouts/CardLayout.d.ts +291 -0
- package/dist/server/layouts/CardLayout.js +25 -0
- package/dist/server/layouts/FlexWrapLayout.d.ts +290 -0
- package/dist/server/layouts/FlexWrapLayout.js +41 -0
- package/dist/server/layouts/StackLayout.d.ts +290 -0
- package/dist/server/layouts/StackLayout.js +25 -0
- package/dist/server/layouts/grid/GridItem.d.ts +8 -0
- package/dist/server/layouts/grid/GridItem.js +9 -0
- package/dist/server/layouts/grid/GridLayout.d.ts +293 -0
- package/dist/server/layouts/grid/GridLayout.js +25 -0
- package/dist/server/layouts/grid/index.d.ts +2 -0
- package/dist/server/layouts/grid/index.js +18 -0
- package/dist/server/layouts/index.d.ts +5 -0
- package/dist/server/layouts/index.js +21 -0
- package/dist/server/panels/BlockPanel.d.ts +80 -1
- package/dist/server/panels/BlockPanel.js +831 -0
- package/dist/server/panels/ListPanel.d.ts +62 -0
- package/dist/server/panels/ListPanel.js +137 -0
- package/dist/server/panels/MessagePanel.d.ts +69 -5
- package/dist/server/panels/MessagePanel.js +128 -5
- package/dist/server/panels/TestimonialPanel.d.ts +47 -0
- package/dist/server/panels/TestimonialPanel.js +71 -0
- package/dist/server/panels/VisualPanel.d.ts +45 -13
- package/dist/server/panels/VisualPanel.js +75 -16
- package/dist/server/panels/index.d.ts +2 -0
- package/dist/server/panels/index.js +2 -0
- package/dist/server/schema/BlockConfig.d.ts +3 -1
- package/dist/server/schema/BlockConfig.js +2 -1
- package/dist/server/schema/ItemAlignment.d.ts +2 -0
- package/dist/server/schema/ItemPosition.d.ts +1 -0
- package/dist/server/schema/ItemSize.d.ts +2 -1
- package/dist/server/schema/ItemSize.js +2 -1
- package/dist/server/schema/ListPanelLayout.d.ts +34 -0
- package/dist/server/schema/ListPanelLayout.js +24 -0
- package/dist/server/schema/PanelLayout.d.ts +14 -0
- package/dist/server/schema/PanelLayout.js +70 -0
- package/dist/server/schema/SlotVariation.d.ts +9 -0
- package/dist/server/schema/SlotVariation.js +48 -0
- package/dist/server/schema/TextAlignment.d.ts +1 -0
- package/dist/server/schema/index.d.ts +3 -0
- package/dist/server/schema/index.js +3 -0
- package/dist/styles/blocks/Clients.css +0 -1
- package/dist/styles/blocks/Message.css +0 -343
- package/dist/styles/blocks/Outcome.css +13 -50
- package/dist/styles/blocks/Summary.css +15 -0
- package/dist/styles/blocks/Testimonial.css +1 -318
- package/dist/styles/blocks/ValueProp.css +0 -126
- package/dist/styles/blocks/_index.css +1 -0
- package/dist/styles/layouts/BrickLayout.css +43 -0
- package/dist/styles/layouts/CardLayout.css +46 -0
- package/dist/styles/layouts/FlexWrapLayout.css +38 -0
- package/dist/styles/layouts/GridLayout.css +25 -0
- package/dist/styles/layouts/StackLayout.css +46 -0
- package/dist/styles/layouts/_index.css +6 -1
- package/dist/styles/panels/ListPanel.css +3 -0
- package/dist/styles/panels/TestimonialPanel.css +64 -0
- package/dist/styles/panels/_index.css +2 -0
- package/package.json +3 -2
|
@@ -6,6 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.BlockPanel = void 0;
|
|
7
7
|
const funnel_core_1 = require("@nascentdigital/funnel-core");
|
|
8
8
|
const classnames_1 = __importDefault(require("classnames"));
|
|
9
|
+
const schema_1 = require("../schema");
|
|
10
|
+
const ListPanel_1 = require("./ListPanel");
|
|
11
|
+
const MessagePanel_1 = require("./MessagePanel");
|
|
12
|
+
const VisualPanel_1 = require("./VisualPanel");
|
|
9
13
|
// extensions
|
|
10
14
|
var BlockPanel;
|
|
11
15
|
(function (BlockPanel) {
|
|
@@ -53,4 +57,831 @@ var BlockPanel;
|
|
|
53
57
|
});
|
|
54
58
|
}
|
|
55
59
|
BlockPanel.getClassNames = getClassNames;
|
|
60
|
+
// slots
|
|
61
|
+
let Slots;
|
|
62
|
+
(function (Slots) {
|
|
63
|
+
let Items;
|
|
64
|
+
(function (Items) {
|
|
65
|
+
Items.values = ['M', 'V', 'L'];
|
|
66
|
+
function forPanels({ message, visual, list }) {
|
|
67
|
+
return Items.values.slice()
|
|
68
|
+
.filter(item => (item === 'M' && message)
|
|
69
|
+
|| (item === 'V' && visual)
|
|
70
|
+
|| (item === 'L' && list));
|
|
71
|
+
}
|
|
72
|
+
Items.forPanels = forPanels;
|
|
73
|
+
function compute({ panels: { message, visual, list }, layout, variation }) {
|
|
74
|
+
// drop layout options if there's no visual
|
|
75
|
+
if (!visual) {
|
|
76
|
+
return message && list
|
|
77
|
+
// message AND list
|
|
78
|
+
? variation === 'v1'
|
|
79
|
+
? ['M', 'L']
|
|
80
|
+
: ['L', 'M']
|
|
81
|
+
// only message OR list
|
|
82
|
+
: message ? ['M'] : ['L'];
|
|
83
|
+
}
|
|
84
|
+
// or handle case where there's just a visual + message/list
|
|
85
|
+
else if (!message || !list) {
|
|
86
|
+
return message || list
|
|
87
|
+
// visual AND message/list
|
|
88
|
+
? layout === 'nested'
|
|
89
|
+
// layout is nested (message/visual inside a list)
|
|
90
|
+
? message ? ['M'] : ['L']
|
|
91
|
+
// or based on variation
|
|
92
|
+
: message
|
|
93
|
+
// for message + visual
|
|
94
|
+
? variation === 'v1' ? ['M', 'V'] : ['V', 'M']
|
|
95
|
+
// or for visual + list
|
|
96
|
+
: variation === 'v1' ? ['V', 'L'] : ['L', 'V']
|
|
97
|
+
// only visual
|
|
98
|
+
: ['V'];
|
|
99
|
+
}
|
|
100
|
+
// we have everything
|
|
101
|
+
else {
|
|
102
|
+
switch (layout) {
|
|
103
|
+
// nested === 2 slots (nested in visual, so we ignore it)
|
|
104
|
+
case 'nested.h':
|
|
105
|
+
case 'nested.v':
|
|
106
|
+
case 'nested.t':
|
|
107
|
+
case 'nested.b':
|
|
108
|
+
case 'nested.l':
|
|
109
|
+
case 'nested.r':
|
|
110
|
+
return variation === 'v1' ? ['M', 'L'] : ['L', 'M'];
|
|
111
|
+
// otherwise === 3 slots
|
|
112
|
+
default:
|
|
113
|
+
switch (variation) {
|
|
114
|
+
case 'v1':
|
|
115
|
+
return ['M', 'V', 'L'];
|
|
116
|
+
case 'v2':
|
|
117
|
+
return ['M', 'L', 'V'];
|
|
118
|
+
case 'v3':
|
|
119
|
+
return ['V', 'M', 'L'];
|
|
120
|
+
case 'v4':
|
|
121
|
+
return ['V', 'L', 'M'];
|
|
122
|
+
case 'v5':
|
|
123
|
+
return ['L', 'M', 'V'];
|
|
124
|
+
case 'v6':
|
|
125
|
+
return ['L', 'V', 'M'];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
Items.compute = compute;
|
|
131
|
+
})(Items = Slots.Items || (Slots.Items = {}));
|
|
132
|
+
// helpers
|
|
133
|
+
function forLayout(layout) {
|
|
134
|
+
switch (layout) {
|
|
135
|
+
case 'solo':
|
|
136
|
+
case 'nested':
|
|
137
|
+
return 1;
|
|
138
|
+
case 'stack.h':
|
|
139
|
+
case 'stack.v':
|
|
140
|
+
case 'nested.h':
|
|
141
|
+
case 'nested.v':
|
|
142
|
+
case 'nested.t':
|
|
143
|
+
case 'nested.b':
|
|
144
|
+
case 'nested.l':
|
|
145
|
+
case 'nested.r':
|
|
146
|
+
return 2;
|
|
147
|
+
case 'brick.v':
|
|
148
|
+
case 'brick.t':
|
|
149
|
+
case 'brick.b':
|
|
150
|
+
case 'brick.l':
|
|
151
|
+
case 'brick.r':
|
|
152
|
+
return 3;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
Slots.forLayout = forLayout;
|
|
156
|
+
function getFlexDirections({ layout, items: [item1, item2, item3] }) {
|
|
157
|
+
switch (layout) {
|
|
158
|
+
case 'solo':
|
|
159
|
+
return { [item1]: 'x' };
|
|
160
|
+
case 'nested':
|
|
161
|
+
return { [item1]: 'xy' };
|
|
162
|
+
case 'stack.h':
|
|
163
|
+
return {
|
|
164
|
+
[item1]: 'none',
|
|
165
|
+
[item2]: 'none'
|
|
166
|
+
};
|
|
167
|
+
case 'stack.v':
|
|
168
|
+
return {
|
|
169
|
+
[item1]: 'x',
|
|
170
|
+
[item2]: 'x'
|
|
171
|
+
};
|
|
172
|
+
case 'nested.h':
|
|
173
|
+
return {
|
|
174
|
+
[item1]: 'none',
|
|
175
|
+
[item2]: 'none'
|
|
176
|
+
};
|
|
177
|
+
case 'nested.v':
|
|
178
|
+
return {
|
|
179
|
+
[item1]: 'x',
|
|
180
|
+
[item2]: 'x'
|
|
181
|
+
};
|
|
182
|
+
case 'nested.t':
|
|
183
|
+
return {
|
|
184
|
+
[item1]: 'xy',
|
|
185
|
+
[item2]: 'x'
|
|
186
|
+
};
|
|
187
|
+
case 'nested.b':
|
|
188
|
+
return {
|
|
189
|
+
[item1]: 'x',
|
|
190
|
+
[item2]: 'xy'
|
|
191
|
+
};
|
|
192
|
+
case 'nested.l':
|
|
193
|
+
return {
|
|
194
|
+
[item1]: 'xy',
|
|
195
|
+
[item2]: 'none'
|
|
196
|
+
};
|
|
197
|
+
case 'nested.r':
|
|
198
|
+
return {
|
|
199
|
+
[item1]: 'none',
|
|
200
|
+
[item2]: 'xy'
|
|
201
|
+
};
|
|
202
|
+
case 'brick.v':
|
|
203
|
+
return {
|
|
204
|
+
[item1]: 'x',
|
|
205
|
+
[item2]: 'x',
|
|
206
|
+
[item3]: 'x'
|
|
207
|
+
};
|
|
208
|
+
case 'brick.t':
|
|
209
|
+
return {
|
|
210
|
+
[item1]: 'x',
|
|
211
|
+
[item2]: 'none',
|
|
212
|
+
[item3]: 'none'
|
|
213
|
+
};
|
|
214
|
+
case 'brick.b':
|
|
215
|
+
return {
|
|
216
|
+
[item1]: 'none',
|
|
217
|
+
[item2]: 'none',
|
|
218
|
+
[item3]: 'x'
|
|
219
|
+
};
|
|
220
|
+
case 'brick.l':
|
|
221
|
+
return {
|
|
222
|
+
[item1]: 'none',
|
|
223
|
+
[item2]: 'none',
|
|
224
|
+
[item3]: 'none'
|
|
225
|
+
};
|
|
226
|
+
case 'brick.r':
|
|
227
|
+
return {
|
|
228
|
+
[item1]: 'none',
|
|
229
|
+
[item2]: 'none',
|
|
230
|
+
[item3]: 'none'
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
Slots.getFlexDirections = getFlexDirections;
|
|
235
|
+
function contentAlignmentExists(layout) {
|
|
236
|
+
switch (layout) {
|
|
237
|
+
case 'brick.t':
|
|
238
|
+
case 'brick.b':
|
|
239
|
+
case 'brick.r':
|
|
240
|
+
case 'brick.l':
|
|
241
|
+
case 'stack.h':
|
|
242
|
+
case 'nested.h':
|
|
243
|
+
case 'nested.r':
|
|
244
|
+
case 'nested.l':
|
|
245
|
+
return true;
|
|
246
|
+
default:
|
|
247
|
+
return false;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
Slots.contentAlignmentExists = contentAlignmentExists;
|
|
251
|
+
})(Slots = BlockPanel.Slots || (BlockPanel.Slots = {}));
|
|
252
|
+
// config schema
|
|
253
|
+
let GetConfigSchema;
|
|
254
|
+
(function (GetConfigSchema) {
|
|
255
|
+
let Key;
|
|
256
|
+
(function (Key) {
|
|
257
|
+
// helper
|
|
258
|
+
function normalize(key) {
|
|
259
|
+
return typeof key === 'string'
|
|
260
|
+
? { key, name: funnel_core_1.StringUtils.capitalize(key) }
|
|
261
|
+
: key;
|
|
262
|
+
}
|
|
263
|
+
Key.normalize = normalize;
|
|
264
|
+
})(Key = GetConfigSchema.Key || (GetConfigSchema.Key = {}));
|
|
265
|
+
})(GetConfigSchema = BlockPanel.GetConfigSchema || (BlockPanel.GetConfigSchema = {}));
|
|
266
|
+
function getConfigSchema({ extend, messageKey: messageKeyRaw, visualKey: visualKeyRaw, listKey: listKeyRaw }) {
|
|
267
|
+
// throw if there are not enough panels
|
|
268
|
+
const { key: messageKey, name: messageLabel } = messageKeyRaw === undefined
|
|
269
|
+
? {}
|
|
270
|
+
: GetConfigSchema.Key.normalize(messageKeyRaw);
|
|
271
|
+
const { key: visualKey, name: visualLabel } = visualKeyRaw === undefined
|
|
272
|
+
? {}
|
|
273
|
+
: GetConfigSchema.Key.normalize(visualKeyRaw);
|
|
274
|
+
const { key: listKey, name: listLabel } = listKeyRaw === undefined
|
|
275
|
+
? {}
|
|
276
|
+
: GetConfigSchema.Key.normalize(listKeyRaw);
|
|
277
|
+
const panelCount = [messageKey, visualKey, listKey].filter(funnel_core_1.Value.isDefined).length;
|
|
278
|
+
if (panelCount === 0) {
|
|
279
|
+
throw new funnel_core_1.IllegalStateError('[BlockPanel.ts] There needs to be at least one panel');
|
|
280
|
+
}
|
|
281
|
+
// initialize config schema
|
|
282
|
+
const configSchema = Object.assign(Object.assign(Object.assign({}, schema_1.BlockConfig.Presets.ThemeOnly.schema), extend), { layout: schema_1.PanelLayout.schema.optional(), slotVariation: schema_1.SlotVariation.schema });
|
|
283
|
+
// TODO: runtime error for key not available in fields
|
|
284
|
+
// add schema for message
|
|
285
|
+
if (messageKey) {
|
|
286
|
+
const keys = MessagePanel_1.MessagePanel.Config.getKeys(messageKey);
|
|
287
|
+
configSchema[keys.textAlign] = schema_1.TextAlignment.schema
|
|
288
|
+
.rename(`${messageLabel} ${schema_1.TextAlignment.schema.name}`)
|
|
289
|
+
.optional();
|
|
290
|
+
configSchema[keys.width] =
|
|
291
|
+
schema_1.ItemSize.schema
|
|
292
|
+
.rename(`${messageLabel} ${schema_1.ItemSize.schema.name}`)
|
|
293
|
+
.optional();
|
|
294
|
+
configSchema[keys.horizontalAlign] =
|
|
295
|
+
schema_1.ItemAlignment
|
|
296
|
+
.Horizontal.schema.rename(`${messageLabel} ${schema_1.ItemAlignment.Horizontal.schema.name}`)
|
|
297
|
+
.optional();
|
|
298
|
+
configSchema[keys.verticalAlign] = schema_1.ItemAlignment.Vertical.schema.rename(`${messageLabel} ${schema_1.ItemAlignment.Vertical.schema.name}`).optional();
|
|
299
|
+
}
|
|
300
|
+
// add schema for list
|
|
301
|
+
if (listKey) {
|
|
302
|
+
const keys = ListPanel_1.ListPanel.Config.getKeys(listKey);
|
|
303
|
+
configSchema[keys.layout] = schema_1.ListPanelLayout.schema.rename(`${listLabel} ${schema_1.ListPanelLayout.schema.name}`).optional();
|
|
304
|
+
configSchema[keys.width] = schema_1.ItemSize.schema.rename(`${listLabel} ${schema_1.ItemSize.schema.name}`).optional();
|
|
305
|
+
configSchema[keys.horizontalAlign] = schema_1.ItemAlignment
|
|
306
|
+
.Horizontal.schema
|
|
307
|
+
.rename(`${listLabel} ${schema_1.ItemAlignment.Horizontal.schema.name}`)
|
|
308
|
+
.optional();
|
|
309
|
+
configSchema[keys.verticalAlign] = schema_1.ItemAlignment
|
|
310
|
+
.Horizontal.schema
|
|
311
|
+
.rename(`${listLabel} ${schema_1.ItemAlignment.Vertical.schema.name}`)
|
|
312
|
+
.optional();
|
|
313
|
+
}
|
|
314
|
+
// add schema for visual
|
|
315
|
+
if (visualKey) {
|
|
316
|
+
const keys = VisualPanel_1.VisualPanel.Config.getKeys(visualKey);
|
|
317
|
+
configSchema[keys.aspect] = schema_1.AspectRatio.schema
|
|
318
|
+
.rename(`${visualLabel} ${schema_1.AspectRatio.schema.name}`)
|
|
319
|
+
.optional();
|
|
320
|
+
configSchema[keys.anchor] = schema_1.Anchor.schema
|
|
321
|
+
.rename(`${visualLabel} ${schema_1.Anchor.schema.name}`)
|
|
322
|
+
.optional();
|
|
323
|
+
configSchema[keys.width] =
|
|
324
|
+
schema_1.ItemSize.schema
|
|
325
|
+
.rename(`${visualLabel} ${schema_1.ItemSize.schema.name}`)
|
|
326
|
+
.optional();
|
|
327
|
+
configSchema[keys.horizontalAlign] =
|
|
328
|
+
schema_1.ItemAlignment
|
|
329
|
+
.Horizontal.schema.rename(`${visualLabel} ${schema_1.ItemAlignment.Horizontal.schema.name}`)
|
|
330
|
+
.optional();
|
|
331
|
+
}
|
|
332
|
+
// add message vertical alignment if message and visual is available
|
|
333
|
+
// if (messageKey && visualKey) {
|
|
334
|
+
// const keys = MessagePanel.Config.getKeys(messageKey)
|
|
335
|
+
// configSchema[keys.verticalAlign] = ItemAlignment.Vertical.schema.rename(`${messageLabel} ${ItemAlignment.Vertical.schema.name}`).optional()
|
|
336
|
+
// }
|
|
337
|
+
// add list vertical alignment if list and visual is available
|
|
338
|
+
// if (listKey && visualKey) {
|
|
339
|
+
// const keys = ListPanel.Config.getKeys(listKey)
|
|
340
|
+
// configSchema[keys.verticalAlign] = ItemAlignment.Vertical.schema.rename(keys.verticalAlign).optional()
|
|
341
|
+
// }
|
|
342
|
+
// add content alignment if there are more than 2 panels
|
|
343
|
+
if (panelCount > 1) {
|
|
344
|
+
configSchema['contentAlign'] = schema_1.ItemAlignment.Vertical.schema.rename('Content Alignment').optional();
|
|
345
|
+
}
|
|
346
|
+
console.debug('[BlockPanel/getConfigSchema] created schema', configSchema);
|
|
347
|
+
// return
|
|
348
|
+
return configSchema;
|
|
349
|
+
}
|
|
350
|
+
BlockPanel.getConfigSchema = getConfigSchema;
|
|
351
|
+
function getConfig({ args, messageFieldKeys, messageKey, visualKey, listKey }) {
|
|
352
|
+
var _a, _b, _c, _d, _e;
|
|
353
|
+
// throw if there are not enough panels
|
|
354
|
+
const panelCount = [messageKey, visualKey, listKey].filter(funnel_core_1.Value.isDefined).length;
|
|
355
|
+
if (panelCount === 0) {
|
|
356
|
+
throw new funnel_core_1.IllegalStateError('[BlockPanel.ts] There needs to be at least one panel');
|
|
357
|
+
}
|
|
358
|
+
// resolve props
|
|
359
|
+
const configSchema = args.configSchema;
|
|
360
|
+
const config = args.config;
|
|
361
|
+
const fields = args.fields;
|
|
362
|
+
const messageKeys = messageKey
|
|
363
|
+
? MessagePanel_1.MessagePanel.Config.getKeys(messageKey)
|
|
364
|
+
: {};
|
|
365
|
+
const visualKeys = visualKey
|
|
366
|
+
? VisualPanel_1.VisualPanel.Config.getKeys(visualKey)
|
|
367
|
+
: {};
|
|
368
|
+
const listKeys = listKey
|
|
369
|
+
? ListPanel_1.ListPanel.Config.getKeys(listKey)
|
|
370
|
+
: {};
|
|
371
|
+
const allKeys = [
|
|
372
|
+
...Object.values(messageKeys),
|
|
373
|
+
...Object.values(visualKeys),
|
|
374
|
+
...Object.values(listKeys)
|
|
375
|
+
];
|
|
376
|
+
// current config helpers
|
|
377
|
+
const hasMessage = MessagePanel_1.MessagePanel.Fields.exists(fields, messageFieldKeys);
|
|
378
|
+
const visual = visualKey
|
|
379
|
+
? fields[visualKey]
|
|
380
|
+
: undefined;
|
|
381
|
+
const hasVisual = (visual === null || visual === void 0 ? void 0 : visual.value) !== undefined;
|
|
382
|
+
const list = listKey
|
|
383
|
+
? fields[listKey]
|
|
384
|
+
: undefined;
|
|
385
|
+
const hasList = !!((_a = list === null || list === void 0 ? void 0 : list.value) === null || _a === void 0 ? void 0 : _a.length);
|
|
386
|
+
// get layout schema
|
|
387
|
+
const activePanels = { message: hasMessage, visual: hasVisual, list: hasList };
|
|
388
|
+
const layoutSchema = schema_1.PanelLayout.schemaForPanels(activePanels);
|
|
389
|
+
let layout = ((_c = (_b = config.layout) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : 'solo');
|
|
390
|
+
layout = layoutSchema.isValidOption(layout)
|
|
391
|
+
? layout
|
|
392
|
+
: layoutSchema.defaultOption;
|
|
393
|
+
const slotVariationSchema = schema_1.SlotVariation.schemaForLayout(layout);
|
|
394
|
+
let slotVariation = ((_e = (_d = config.slotVariation) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : 'v1');
|
|
395
|
+
slotVariation = slotVariationSchema.isValidOption(slotVariation)
|
|
396
|
+
? slotVariation
|
|
397
|
+
: slotVariationSchema.defaultOption;
|
|
398
|
+
const items = Slots.Items.compute({
|
|
399
|
+
panels: activePanels,
|
|
400
|
+
layout,
|
|
401
|
+
variation: slotVariation
|
|
402
|
+
});
|
|
403
|
+
const flexDirections = Slots.getFlexDirections({ layout, items });
|
|
404
|
+
// extract message config
|
|
405
|
+
let messageConfig = undefined;
|
|
406
|
+
if (messageKey && hasMessage) {
|
|
407
|
+
messageConfig = MessagePanel_1.MessagePanel.getConfig({
|
|
408
|
+
messageKey,
|
|
409
|
+
config: config,
|
|
410
|
+
fields: fields,
|
|
411
|
+
flexDirection: flexDirections.M
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
// extract visual config (if any)
|
|
415
|
+
let visualConfig = undefined;
|
|
416
|
+
if (visualKey && hasVisual) {
|
|
417
|
+
visualConfig = VisualPanel_1.VisualPanel.getConfig({
|
|
418
|
+
visualKey,
|
|
419
|
+
visual,
|
|
420
|
+
config: config,
|
|
421
|
+
flexDirection: flexDirections.V
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
// extract list config (if any)
|
|
425
|
+
let listConfig = undefined;
|
|
426
|
+
if (listKey && hasList) {
|
|
427
|
+
listConfig = ListPanel_1.ListPanel.getConfig({
|
|
428
|
+
listKey,
|
|
429
|
+
config: config,
|
|
430
|
+
flexDirection: flexDirections.L
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
// create new schema (drop content alignment if it's not applicable)
|
|
434
|
+
const updatedConfigSchema = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, Object.entries(configSchema)
|
|
435
|
+
.reduce((configSchema, [key, fieldSchema]) => {
|
|
436
|
+
// add the config back if it's not in the panel config keys
|
|
437
|
+
if (!allKeys.includes(key)) {
|
|
438
|
+
configSchema[key] = fieldSchema;
|
|
439
|
+
}
|
|
440
|
+
// keep reducing
|
|
441
|
+
return configSchema;
|
|
442
|
+
}, {})), messageConfig === null || messageConfig === void 0 ? void 0 : messageConfig.configSchema), visualConfig === null || visualConfig === void 0 ? void 0 : visualConfig.configSchema), listConfig === null || listConfig === void 0 ? void 0 : listConfig.configSchema), { layout: layoutSchema, slotVariation: slotVariationSchema });
|
|
443
|
+
if (!BlockPanel.Slots.contentAlignmentExists(layout)) {
|
|
444
|
+
delete updatedConfigSchema.contentAlign;
|
|
445
|
+
}
|
|
446
|
+
if (panelCount < 2) {
|
|
447
|
+
delete updatedConfigSchema.layout;
|
|
448
|
+
}
|
|
449
|
+
// FIXME: add missing layout config
|
|
450
|
+
// create default config
|
|
451
|
+
const defaultConfig = Object.assign(Object.assign(Object.assign({ theme: funnel_core_1.Schema.EnumField.Value.toData('default'), contentAlign: funnel_core_1.Schema.EnumField.Value.toData('start') }, messageConfig === null || messageConfig === void 0 ? void 0 : messageConfig.defaultConfig), visualConfig === null || visualConfig === void 0 ? void 0 : visualConfig.defaultConfig), listConfig === null || listConfig === void 0 ? void 0 : listConfig.defaultConfig);
|
|
452
|
+
// create new config
|
|
453
|
+
const updatedConfig = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, config), messageConfig === null || messageConfig === void 0 ? void 0 : messageConfig.config), visualConfig === null || visualConfig === void 0 ? void 0 : visualConfig.config), listConfig === null || listConfig === void 0 ? void 0 : listConfig.config), { layout: funnel_core_1.Schema.EnumField.Value.toData(layout), slotVariation: funnel_core_1.Schema.EnumField.Value.toData(slotVariation) });
|
|
454
|
+
// return config
|
|
455
|
+
return {
|
|
456
|
+
updatedConfigSchema: updatedConfigSchema,
|
|
457
|
+
updatedConfig: updatedConfig,
|
|
458
|
+
defaultConfig: defaultConfig
|
|
459
|
+
};
|
|
460
|
+
}
|
|
461
|
+
BlockPanel.getConfig = getConfig;
|
|
462
|
+
function getLayout({ args, messageFieldKeys, messageKey, visualKey, listKey }) {
|
|
463
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
|
|
464
|
+
// throw if there are not enough panels
|
|
465
|
+
const panelCount = [messageKey, visualKey, listKey].filter(funnel_core_1.Value.isDefined).length;
|
|
466
|
+
if (panelCount === 0) {
|
|
467
|
+
throw new funnel_core_1.IllegalStateError('[BlockPanel.ts] There needs to be at least one panel');
|
|
468
|
+
}
|
|
469
|
+
// resolve props
|
|
470
|
+
const config = args.config;
|
|
471
|
+
const fields = args.fields;
|
|
472
|
+
const messageKeys = messageKey
|
|
473
|
+
? MessagePanel_1.MessagePanel.Config.getKeys(messageKey)
|
|
474
|
+
: {};
|
|
475
|
+
const visualKeys = visualKey
|
|
476
|
+
? VisualPanel_1.VisualPanel.Config.getKeys(visualKey)
|
|
477
|
+
: {};
|
|
478
|
+
const listKeys = listKey
|
|
479
|
+
? ListPanel_1.ListPanel.Config.getKeys(listKey)
|
|
480
|
+
: {};
|
|
481
|
+
// current config helpers
|
|
482
|
+
const hasMessage = MessagePanel_1.MessagePanel.Fields.exists(fields, messageFieldKeys);
|
|
483
|
+
const visual = visualKey
|
|
484
|
+
? fields[visualKey]
|
|
485
|
+
: undefined;
|
|
486
|
+
const hasVisual = (visual === null || visual === void 0 ? void 0 : visual.value) !== undefined;
|
|
487
|
+
const list = listKey
|
|
488
|
+
? fields[listKey]
|
|
489
|
+
: undefined;
|
|
490
|
+
const hasList = !!((_a = list === null || list === void 0 ? void 0 : list.value) === null || _a === void 0 ? void 0 : _a.length);
|
|
491
|
+
// get layout schema
|
|
492
|
+
const activePanels = { message: hasMessage, visual: hasVisual, list: hasList };
|
|
493
|
+
const layout = ((_c = (_b = config.layout) === null || _b === void 0 ? void 0 : _b.value) !== null && _c !== void 0 ? _c : 'solo');
|
|
494
|
+
const slotVariation = ((_e = (_d = config.slotVariation) === null || _d === void 0 ? void 0 : _d.value) !== null && _e !== void 0 ? _e : 'v1');
|
|
495
|
+
const items = Slots.Items.compute({
|
|
496
|
+
panels: activePanels,
|
|
497
|
+
layout,
|
|
498
|
+
variation: slotVariation
|
|
499
|
+
});
|
|
500
|
+
const contentAlign = (_g = (_f = config.contentAlign) === null || _f === void 0 ? void 0 : _f.value) !== null && _g !== void 0 ? _g : 'start';
|
|
501
|
+
const messageTextAlign = (_j = (_h = config[messageKeys.textAlign]) === null || _h === void 0 ? void 0 : _h.value) !== null && _j !== void 0 ? _j : 'left';
|
|
502
|
+
const messageWidth = (_l = (_k = config[messageKeys.width]) === null || _k === void 0 ? void 0 : _k.value) !== null && _l !== void 0 ? _l : 'full';
|
|
503
|
+
const messageHorizontalAlign = (_o = (_m = config[messageKeys.horizontalAlign]) === null || _m === void 0 ? void 0 : _m.value) !== null && _o !== void 0 ? _o : 'start';
|
|
504
|
+
const messageVerticalAlign = (_q = (_p = config[messageKeys.verticalAlign]) === null || _p === void 0 ? void 0 : _p.value) !== null && _q !== void 0 ? _q : 'start';
|
|
505
|
+
const visualAspect = (_s = (_r = config[visualKeys.aspect]) === null || _r === void 0 ? void 0 : _r.value) !== null && _s !== void 0 ? _s : 'auto';
|
|
506
|
+
const visualWidth = ((_u = (_t = config[visualKeys.width]) === null || _t === void 0 ? void 0 : _t.value) !== null && _u !== void 0 ? _u : 'full');
|
|
507
|
+
const visualHorizontalAlign = (_w = (_v = config[visualKeys.horizontalAlign]) === null || _v === void 0 ? void 0 : _v.value) !== null && _w !== void 0 ? _w : 'start';
|
|
508
|
+
const isVisualFullBleed = visualWidth === 'fullBleed';
|
|
509
|
+
const listWidth = (_y = (_x = config[listKeys.width]) === null || _x === void 0 ? void 0 : _x.value) !== null && _y !== void 0 ? _y : 'full';
|
|
510
|
+
const listHorizontalAlign = (_0 = (_z = config[listKeys.horizontalAlign]) === null || _z === void 0 ? void 0 : _z.value) !== null && _0 !== void 0 ? _0 : 'start';
|
|
511
|
+
const listVerticalAlign = (_2 = (_1 = config[listKeys.verticalAlign]) === null || _1 === void 0 ? void 0 : _1.value) !== null && _2 !== void 0 ? _2 : 'start';
|
|
512
|
+
// create visual if we have one
|
|
513
|
+
let visualSlot = undefined;
|
|
514
|
+
if (items.includes('V') || schema_1.PanelLayout.isNested(layout)) {
|
|
515
|
+
// language=XML
|
|
516
|
+
visualSlot = (`
|
|
517
|
+
<visual
|
|
518
|
+
xmlns="nd:block"
|
|
519
|
+
aspect="${visualAspect}"
|
|
520
|
+
size="${visualWidth === 'fullBleed' ? 'full' : visualWidth}"
|
|
521
|
+
alignX="${visualHorizontalAlign}"
|
|
522
|
+
fullBleed="${isVisualFullBleed}"
|
|
523
|
+
/>
|
|
524
|
+
`);
|
|
525
|
+
}
|
|
526
|
+
// create slot items
|
|
527
|
+
const slots = items.map(item => {
|
|
528
|
+
switch (item) {
|
|
529
|
+
case 'M': {
|
|
530
|
+
// language=XML
|
|
531
|
+
return (`
|
|
532
|
+
<message
|
|
533
|
+
xmlns="nd:block"
|
|
534
|
+
textAlign="${messageTextAlign}"
|
|
535
|
+
size="${messageWidth}"
|
|
536
|
+
alignX="${messageHorizontalAlign}"
|
|
537
|
+
alignY="${messageVerticalAlign}"
|
|
538
|
+
/>
|
|
539
|
+
`);
|
|
540
|
+
}
|
|
541
|
+
case 'V':
|
|
542
|
+
return visualSlot;
|
|
543
|
+
case 'L': {
|
|
544
|
+
// FIXME: update props from config (lists WILL REQUIRED new props)
|
|
545
|
+
// language=XML
|
|
546
|
+
return (`
|
|
547
|
+
<list
|
|
548
|
+
xmlns="nd:block"
|
|
549
|
+
layout="column"
|
|
550
|
+
itemType="message"
|
|
551
|
+
size="${listWidth}"
|
|
552
|
+
alignX="${listHorizontalAlign}"
|
|
553
|
+
alignY="${listVerticalAlign}"
|
|
554
|
+
itemCount="2"
|
|
555
|
+
/>
|
|
556
|
+
`);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
// build layout
|
|
561
|
+
let blockLayout = '';
|
|
562
|
+
switch (layout) {
|
|
563
|
+
case 'solo':
|
|
564
|
+
// language=XML
|
|
565
|
+
blockLayout = `
|
|
566
|
+
<block xmlns="nd:block" name="Solo">
|
|
567
|
+
<col>
|
|
568
|
+
${slots[0]}
|
|
569
|
+
</col>
|
|
570
|
+
</block>
|
|
571
|
+
`;
|
|
572
|
+
break;
|
|
573
|
+
case 'stack.h': {
|
|
574
|
+
// compute tight
|
|
575
|
+
let tightDesktop = 'none';
|
|
576
|
+
let tightMobile = 'none';
|
|
577
|
+
if (isVisualFullBleed) {
|
|
578
|
+
tightDesktop = 'both';
|
|
579
|
+
tightMobile = items[0] === 'V' ? 'above' : 'below';
|
|
580
|
+
}
|
|
581
|
+
// language=XML
|
|
582
|
+
blockLayout = `
|
|
583
|
+
<block
|
|
584
|
+
xmlns="nd:block"
|
|
585
|
+
name="Horizontal Stack"
|
|
586
|
+
tightDesktop="${tightDesktop}"
|
|
587
|
+
tightMobile="${tightMobile}"
|
|
588
|
+
>
|
|
589
|
+
<row alignY="${contentAlign}">
|
|
590
|
+
${slots[0]}
|
|
591
|
+
${slots[1]}
|
|
592
|
+
</row>
|
|
593
|
+
</block>
|
|
594
|
+
`;
|
|
595
|
+
break;
|
|
596
|
+
}
|
|
597
|
+
case 'stack.v':
|
|
598
|
+
// language=XML
|
|
599
|
+
blockLayout = `
|
|
600
|
+
<block
|
|
601
|
+
xmlns="nd:block" name="Vertical Stack"
|
|
602
|
+
tight="${!isVisualFullBleed ? 'none' : items[0] === 'V' ? 'above' : 'below'}">
|
|
603
|
+
<col>
|
|
604
|
+
${slots[0]}
|
|
605
|
+
${slots[1]}
|
|
606
|
+
</col>
|
|
607
|
+
</block>
|
|
608
|
+
`;
|
|
609
|
+
break;
|
|
610
|
+
case 'nested':
|
|
611
|
+
// language=XML
|
|
612
|
+
blockLayout = `
|
|
613
|
+
<block xmlns="nd:block" name="Nested: Simple" tight="${isVisualFullBleed ? 'both' : 'none'}">
|
|
614
|
+
<stack>
|
|
615
|
+
${visualSlot}
|
|
616
|
+
${slots[0]}
|
|
617
|
+
</stack>
|
|
618
|
+
</block>
|
|
619
|
+
`;
|
|
620
|
+
break;
|
|
621
|
+
case 'nested.h':
|
|
622
|
+
// language=XML
|
|
623
|
+
blockLayout = `
|
|
624
|
+
<block xmlns="nd:block" name="Nested: Horizontal">
|
|
625
|
+
<stack>
|
|
626
|
+
${visualSlot}
|
|
627
|
+
<row alignY="${contentAlign}">
|
|
628
|
+
${slots[0]}
|
|
629
|
+
${slots[1]}
|
|
630
|
+
</row>
|
|
631
|
+
</stack>
|
|
632
|
+
</block>
|
|
633
|
+
`;
|
|
634
|
+
break;
|
|
635
|
+
case 'nested.v':
|
|
636
|
+
// language=XML
|
|
637
|
+
blockLayout = `
|
|
638
|
+
<block xmlns="nd:block" name="Nested: Vertical">
|
|
639
|
+
<stack>
|
|
640
|
+
${visualSlot}
|
|
641
|
+
<col>
|
|
642
|
+
${slots[0]}
|
|
643
|
+
${slots[1]}
|
|
644
|
+
</col>
|
|
645
|
+
</stack>
|
|
646
|
+
</block>
|
|
647
|
+
`;
|
|
648
|
+
break;
|
|
649
|
+
case 'nested.t':
|
|
650
|
+
// language=XML
|
|
651
|
+
blockLayout = `
|
|
652
|
+
<block xmlns="nd:block" name="Nested: Top">
|
|
653
|
+
<col>
|
|
654
|
+
<stack>
|
|
655
|
+
${visualSlot}
|
|
656
|
+
${slots[0]}
|
|
657
|
+
</stack>
|
|
658
|
+
${slots[1]}
|
|
659
|
+
</col>
|
|
660
|
+
</block>
|
|
661
|
+
`;
|
|
662
|
+
break;
|
|
663
|
+
case 'nested.r':
|
|
664
|
+
// language=XML
|
|
665
|
+
blockLayout = `
|
|
666
|
+
<block xmlns="nd:block" name="Nested: Right">
|
|
667
|
+
<row alignY="${contentAlign}">
|
|
668
|
+
${slots[0]}
|
|
669
|
+
<stack>
|
|
670
|
+
${visualSlot}
|
|
671
|
+
${slots[1]}
|
|
672
|
+
</stack>
|
|
673
|
+
</row>
|
|
674
|
+
</block>
|
|
675
|
+
`;
|
|
676
|
+
break;
|
|
677
|
+
case 'nested.b':
|
|
678
|
+
// language=XML
|
|
679
|
+
blockLayout = `
|
|
680
|
+
<block xmlns="nd:block" name="Nested: Bottom">
|
|
681
|
+
<col>
|
|
682
|
+
${slots[0]}
|
|
683
|
+
<stack>
|
|
684
|
+
${visualSlot}
|
|
685
|
+
${slots[1]}
|
|
686
|
+
</stack>
|
|
687
|
+
</col>
|
|
688
|
+
</block>
|
|
689
|
+
`;
|
|
690
|
+
break;
|
|
691
|
+
case 'nested.l':
|
|
692
|
+
// language=XML
|
|
693
|
+
blockLayout = `
|
|
694
|
+
<block xmlns="nd:block" name="Nested: Left">
|
|
695
|
+
<row alignY="${contentAlign}">
|
|
696
|
+
<stack>
|
|
697
|
+
${visualSlot}
|
|
698
|
+
${slots[0]}
|
|
699
|
+
</stack>
|
|
700
|
+
${slots[1]}
|
|
701
|
+
</row>
|
|
702
|
+
</block>
|
|
703
|
+
`;
|
|
704
|
+
break;
|
|
705
|
+
case 'brick.v': {
|
|
706
|
+
// compute tight
|
|
707
|
+
let tight = 'none';
|
|
708
|
+
if (isVisualFullBleed) {
|
|
709
|
+
if (items[0] === 'V') {
|
|
710
|
+
tight = 'above';
|
|
711
|
+
}
|
|
712
|
+
else if (items[2] === 'V') {
|
|
713
|
+
tight = 'below';
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
// language=XML
|
|
717
|
+
blockLayout = `
|
|
718
|
+
<block
|
|
719
|
+
xmlns="nd:block"
|
|
720
|
+
name="Brick: Vertical"
|
|
721
|
+
tight="${tight}"
|
|
722
|
+
>
|
|
723
|
+
<col>
|
|
724
|
+
${slots[0]}
|
|
725
|
+
${slots[1]}
|
|
726
|
+
${slots[2]}
|
|
727
|
+
</col>
|
|
728
|
+
</block>
|
|
729
|
+
`;
|
|
730
|
+
break;
|
|
731
|
+
}
|
|
732
|
+
case 'brick.t': {
|
|
733
|
+
// compute tight
|
|
734
|
+
let tightDesktop = 'none';
|
|
735
|
+
let tightMobile = 'none';
|
|
736
|
+
if (isVisualFullBleed) {
|
|
737
|
+
if (items[0] === 'V') {
|
|
738
|
+
tightDesktop = 'above';
|
|
739
|
+
tightMobile = 'above';
|
|
740
|
+
}
|
|
741
|
+
else if (items[1] === 'V') {
|
|
742
|
+
tightDesktop = 'below';
|
|
743
|
+
tightMobile = 'none';
|
|
744
|
+
}
|
|
745
|
+
else if (items[2] === 'V') {
|
|
746
|
+
tightDesktop = 'below';
|
|
747
|
+
tightMobile = 'below';
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
// language=XML
|
|
751
|
+
blockLayout = `
|
|
752
|
+
<block
|
|
753
|
+
xmlns="nd:block"
|
|
754
|
+
name="Brick: Top"
|
|
755
|
+
tightDesktop="${tightDesktop}"
|
|
756
|
+
tightMobile="${tightMobile}"
|
|
757
|
+
>
|
|
758
|
+
<col>
|
|
759
|
+
${slots[0]}
|
|
760
|
+
<row alignY="${contentAlign}">
|
|
761
|
+
${slots[1]}
|
|
762
|
+
${slots[2]}
|
|
763
|
+
</row>
|
|
764
|
+
</col>
|
|
765
|
+
</block>
|
|
766
|
+
`;
|
|
767
|
+
break;
|
|
768
|
+
}
|
|
769
|
+
case 'brick.r': {
|
|
770
|
+
// compute tight
|
|
771
|
+
let tightDesktop = 'none';
|
|
772
|
+
let tightMobile = 'none';
|
|
773
|
+
if (isVisualFullBleed) {
|
|
774
|
+
if (items[0] === 'V') {
|
|
775
|
+
tightDesktop = 'above';
|
|
776
|
+
tightMobile = 'above';
|
|
777
|
+
}
|
|
778
|
+
else if (items[1] === 'V') {
|
|
779
|
+
tightDesktop = 'both';
|
|
780
|
+
tightMobile = 'below';
|
|
781
|
+
}
|
|
782
|
+
else if (items[2] === 'V') {
|
|
783
|
+
tightDesktop = 'below';
|
|
784
|
+
tightMobile = 'none';
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
// language=XML
|
|
788
|
+
blockLayout = `
|
|
789
|
+
<block
|
|
790
|
+
xmlns="nd:block"
|
|
791
|
+
name="Brick: Right"
|
|
792
|
+
tightDesktop="${tightDesktop}"
|
|
793
|
+
tightMobile="${tightMobile}"
|
|
794
|
+
>
|
|
795
|
+
<row alignY="${contentAlign}">
|
|
796
|
+
<col>
|
|
797
|
+
${slots[0]}
|
|
798
|
+
${slots[2]}
|
|
799
|
+
</col>
|
|
800
|
+
${slots[1]}
|
|
801
|
+
</row>
|
|
802
|
+
</block>
|
|
803
|
+
`;
|
|
804
|
+
break;
|
|
805
|
+
}
|
|
806
|
+
case 'brick.b': {
|
|
807
|
+
// compute tight
|
|
808
|
+
let tightDesktop = 'none';
|
|
809
|
+
let tightMobile = 'none';
|
|
810
|
+
if (isVisualFullBleed) {
|
|
811
|
+
if (items[0] === 'V') {
|
|
812
|
+
tightDesktop = 'above';
|
|
813
|
+
tightMobile = 'above';
|
|
814
|
+
}
|
|
815
|
+
else if (items[1] === 'V') {
|
|
816
|
+
tightDesktop = 'above';
|
|
817
|
+
tightMobile = 'none';
|
|
818
|
+
}
|
|
819
|
+
else if (items[2] === 'V') {
|
|
820
|
+
tightDesktop = 'below';
|
|
821
|
+
tightMobile = 'below';
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
// language=XML
|
|
825
|
+
blockLayout = `
|
|
826
|
+
<block
|
|
827
|
+
xmlns="nd:block"
|
|
828
|
+
name="Brick: Bottom"
|
|
829
|
+
tightDesktop="${tightDesktop}"
|
|
830
|
+
tightMobile="${tightMobile}"
|
|
831
|
+
>
|
|
832
|
+
<col>
|
|
833
|
+
<row alignY="${contentAlign}">
|
|
834
|
+
${slots[0]}
|
|
835
|
+
${slots[1]}
|
|
836
|
+
</row>
|
|
837
|
+
${slots[2]}
|
|
838
|
+
</col>
|
|
839
|
+
</block>
|
|
840
|
+
`;
|
|
841
|
+
break;
|
|
842
|
+
}
|
|
843
|
+
case 'brick.l': {
|
|
844
|
+
// compute tight
|
|
845
|
+
let tightDesktop = 'none';
|
|
846
|
+
let tightMobile = 'none';
|
|
847
|
+
if (isVisualFullBleed) {
|
|
848
|
+
if (items[0] === 'V') {
|
|
849
|
+
tightDesktop = 'both';
|
|
850
|
+
tightMobile = 'above';
|
|
851
|
+
}
|
|
852
|
+
else if (items[1] === 'V') {
|
|
853
|
+
tightDesktop = 'above';
|
|
854
|
+
tightMobile = 'none';
|
|
855
|
+
}
|
|
856
|
+
else if (items[2] === 'V') {
|
|
857
|
+
tightDesktop = 'below';
|
|
858
|
+
tightMobile = 'below';
|
|
859
|
+
}
|
|
860
|
+
}
|
|
861
|
+
// language=XML
|
|
862
|
+
blockLayout = `
|
|
863
|
+
<block
|
|
864
|
+
xmlns="nd:block"
|
|
865
|
+
name="Brick: Left"
|
|
866
|
+
tightDesktop="${tightDesktop}"
|
|
867
|
+
tightMobile="${tightMobile}"
|
|
868
|
+
>
|
|
869
|
+
<row alignY="${contentAlign}">
|
|
870
|
+
${slots[0]}
|
|
871
|
+
<col>
|
|
872
|
+
${slots[1]}
|
|
873
|
+
${slots[2]}
|
|
874
|
+
</col>
|
|
875
|
+
</row>
|
|
876
|
+
</block>
|
|
877
|
+
`;
|
|
878
|
+
break;
|
|
879
|
+
}
|
|
880
|
+
default:
|
|
881
|
+
throw new funnel_core_1.NotImplementedError();
|
|
882
|
+
}
|
|
883
|
+
// return parsed layout
|
|
884
|
+
return funnel_core_1.BlockLayout.parse(blockLayout);
|
|
885
|
+
}
|
|
886
|
+
BlockPanel.getLayout = getLayout;
|
|
56
887
|
})(BlockPanel || (exports.BlockPanel = BlockPanel = {}));
|