@saltcorn/markup 0.6.2-beta.2 → 0.6.2
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/builder.d.ts +18 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +57 -0
- package/dist/builder.js.map +1 -0
- package/dist/emergency_layout.d.ts +6 -0
- package/dist/emergency_layout.d.ts.map +1 -0
- package/dist/emergency_layout.js +38 -0
- package/dist/emergency_layout.js.map +1 -0
- package/dist/form.d.ts +12 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +372 -0
- package/dist/form.js.map +1 -0
- package/dist/helpers.d.ts +58 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +169 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +22 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +338 -0
- package/dist/layout.js.map +1 -0
- package/dist/layout_utils.d.ts +21 -0
- package/dist/layout_utils.d.ts.map +1 -0
- package/dist/layout_utils.js +272 -0
- package/dist/layout_utils.js.map +1 -0
- package/dist/mktag.d.ts +12 -0
- package/dist/mktag.d.ts.map +1 -0
- package/dist/mktag.js +100 -0
- package/dist/mktag.js.map +1 -0
- package/dist/table.d.ts +22 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +51 -0
- package/dist/table.js.map +1 -0
- package/dist/tabs.d.ts +7 -0
- package/dist/tabs.d.ts.map +1 -0
- package/dist/tabs.js +34 -0
- package/dist/tabs.js.map +1 -0
- package/dist/tags.d.ts +17 -0
- package/dist/tags.d.ts.map +1 -0
- package/dist/tags.js +71 -0
- package/dist/tags.js.map +1 -0
- package/dist/tsconfig.ref.tsbuildinfo +1 -0
- package/package.json +25 -6
- package/builder.js +0 -101
- package/emergency_layout.js +0 -54
- package/form.js +0 -603
- package/form.test.js +0 -98
- package/helpers.js +0 -268
- package/index.js +0 -226
- package/layout.js +0 -590
- package/layout.test.js +0 -39
- package/layout_utils.js +0 -394
- package/markup.test.js +0 -104
- package/mktag.js +0 -105
- package/table.js +0 -115
- package/tabs.js +0 -54
- package/tags.js +0 -56
package/dist/layout.js
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
const tags = require("./tags");
|
|
3
|
+
const { div, a, span, text, img, p, h1, h2, h3, h4, h5, h6, label, ul, button, li, i, genericElement, } = tags;
|
|
4
|
+
const { alert, breadcrumbs } = require("./layout_utils");
|
|
5
|
+
const helpers = require("./helpers");
|
|
6
|
+
const { search_bar } = helpers;
|
|
7
|
+
/**
|
|
8
|
+
* @param {any|any[]} [alerts]
|
|
9
|
+
* @returns {boolean}
|
|
10
|
+
*/
|
|
11
|
+
const couldHaveAlerts = (alerts) => alerts || Array.isArray(alerts);
|
|
12
|
+
/**
|
|
13
|
+
* @param {string|any} body
|
|
14
|
+
* @param {object[]} [alerts]
|
|
15
|
+
* @returns {object}
|
|
16
|
+
*/
|
|
17
|
+
const makeSegments = (body, alerts) => {
|
|
18
|
+
const alertsSegments = couldHaveAlerts(alerts)
|
|
19
|
+
? [
|
|
20
|
+
{
|
|
21
|
+
type: "blank",
|
|
22
|
+
contents: div({ id: "alerts-area" }, (alerts || []).map((a) => alert(a.type, a.msg))),
|
|
23
|
+
},
|
|
24
|
+
]
|
|
25
|
+
: [];
|
|
26
|
+
if (typeof body === "string")
|
|
27
|
+
return {
|
|
28
|
+
above: [...alertsSegments, { type: "blank", contents: body }],
|
|
29
|
+
};
|
|
30
|
+
else if (body.above) {
|
|
31
|
+
if (couldHaveAlerts(alerts))
|
|
32
|
+
body.above.unshift(alertsSegments[0]);
|
|
33
|
+
return body;
|
|
34
|
+
}
|
|
35
|
+
else
|
|
36
|
+
return { above: [...alertsSegments, body] };
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
*
|
|
40
|
+
* @param {any} segment
|
|
41
|
+
* @param {string} inner
|
|
42
|
+
* @returns {div|span|string}
|
|
43
|
+
*/
|
|
44
|
+
const applyTextStyle = (segment, inner) => {
|
|
45
|
+
let style = segment.font ? { fontFamily: segment.font } : {};
|
|
46
|
+
switch (segment.textStyle) {
|
|
47
|
+
case "h1":
|
|
48
|
+
return h1(style, inner);
|
|
49
|
+
case "h2":
|
|
50
|
+
return h2(style, inner);
|
|
51
|
+
case "h3":
|
|
52
|
+
return h3(style, inner);
|
|
53
|
+
case "h4":
|
|
54
|
+
return h4(style, inner);
|
|
55
|
+
case "h5":
|
|
56
|
+
return h5(style, inner);
|
|
57
|
+
case "h6":
|
|
58
|
+
return h6(style, inner);
|
|
59
|
+
default:
|
|
60
|
+
return segment.block
|
|
61
|
+
? div({ class: segment.textStyle || "", style }, inner)
|
|
62
|
+
: segment.textStyle || segment.font
|
|
63
|
+
? span({ class: segment.textStyle || "", style }, inner)
|
|
64
|
+
: inner;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* @param {object} opts
|
|
69
|
+
* @param {object[]} opts.contents
|
|
70
|
+
* @param {string[]} opts.titles
|
|
71
|
+
* @param {string} opts.tabsStyle
|
|
72
|
+
* @param {*} opts.ntabs
|
|
73
|
+
* @param {independent} boolean
|
|
74
|
+
* @param {function} go
|
|
75
|
+
* @returns {ul_div}
|
|
76
|
+
*/
|
|
77
|
+
const renderTabs = ({ contents, titles, tabsStyle, ntabs, independent }, go) => {
|
|
78
|
+
const rndid = `tab${Math.floor(Math.random() * 16777215).toString(16)}`;
|
|
79
|
+
if (tabsStyle === "Accordion")
|
|
80
|
+
return div({ class: "accordion", id: `${rndid}top` }, contents.map((t, ix) => div({ class: "card" }, div({ class: "card-header", id: `${rndid}head${ix}` }, h2({ class: "mb-0" }, button({
|
|
81
|
+
class: "btn btn-link btn-block text-left",
|
|
82
|
+
type: "button",
|
|
83
|
+
"data-toggle": "collapse",
|
|
84
|
+
"data-target": `#${rndid}tab${ix}`,
|
|
85
|
+
"aria-expanded": ix === 0 ? "true" : "false",
|
|
86
|
+
"aria-controls": `${rndid}tab${ix}`,
|
|
87
|
+
}, titles[ix]))), div({
|
|
88
|
+
class: ["collapse", ix === 0 && "show"],
|
|
89
|
+
id: `${rndid}tab${ix}`,
|
|
90
|
+
"aria-labelledby": `${rndid}head${ix}`,
|
|
91
|
+
"data-parent": independent ? undefined : `#${rndid}top`,
|
|
92
|
+
}, div({ class: "card-body" }, go(t, false, ix))))));
|
|
93
|
+
else
|
|
94
|
+
return (ul({
|
|
95
|
+
role: "tablist",
|
|
96
|
+
id: `${rndid}`,
|
|
97
|
+
class: `nav ${tabsStyle === "Tabs" ? "nav-tabs" : "nav-pills"}`,
|
|
98
|
+
}, contents.map((t, ix) => li({ class: "nav-item", role: "presentation" }, a({
|
|
99
|
+
class: ["nav-link", ix === 0 && "active"],
|
|
100
|
+
id: `${rndid}link${ix}`,
|
|
101
|
+
"data-toggle": "tab",
|
|
102
|
+
href: `#${rndid}tab${ix}`,
|
|
103
|
+
role: "tab",
|
|
104
|
+
"aria-controls": `${rndid}tab${ix}`,
|
|
105
|
+
"aria-selected": ix === 0 ? "true" : "false",
|
|
106
|
+
}, titles[ix])))) +
|
|
107
|
+
div({ class: "tab-content", id: `${rndid}content` }, contents.map((t, ix) => div({
|
|
108
|
+
class: ["tab-pane fade", ix === 0 && "show active"],
|
|
109
|
+
role: "tabpanel",
|
|
110
|
+
id: `${rndid}tab${ix}`,
|
|
111
|
+
"aria-labelledby": `${rndid}link${ix}`,
|
|
112
|
+
}, go(t, false, ix)))));
|
|
113
|
+
};
|
|
114
|
+
/**
|
|
115
|
+
* @param {object} opts
|
|
116
|
+
* @param {object} opts.blockDispatch
|
|
117
|
+
* @param {object|string} opts.layout
|
|
118
|
+
* @param {object} [opts.role]
|
|
119
|
+
* @param {object[]} [opts.alerts]
|
|
120
|
+
* @param {boolean} opts.is_owner
|
|
121
|
+
* @returns {string}
|
|
122
|
+
*/
|
|
123
|
+
const render = ({ blockDispatch, layout, role, alerts, is_owner, }) => {
|
|
124
|
+
//console.log(JSON.stringify(layout, null, 2));
|
|
125
|
+
function wrap(segment, isTop, ix, inner) {
|
|
126
|
+
const iconTag = segment.icon ? i({ class: segment.icon }) + " " : "";
|
|
127
|
+
if (isTop && blockDispatch && blockDispatch.wrapTop)
|
|
128
|
+
return blockDispatch.wrapTop(segment, ix, inner);
|
|
129
|
+
else
|
|
130
|
+
return segment.labelFor
|
|
131
|
+
? label({ for: `input${text(segment.labelFor)}` }, applyTextStyle(segment, iconTag + inner))
|
|
132
|
+
: applyTextStyle(segment, iconTag + inner);
|
|
133
|
+
}
|
|
134
|
+
function go(segment, isTop, ix) {
|
|
135
|
+
if (!segment)
|
|
136
|
+
return "";
|
|
137
|
+
if (typeof segment === "object" &&
|
|
138
|
+
Object.keys(segment).length === 0 &&
|
|
139
|
+
segment.constructor === Object)
|
|
140
|
+
return "";
|
|
141
|
+
if (typeof segment === "string")
|
|
142
|
+
return wrap(segment, isTop, ix, segment);
|
|
143
|
+
if (Array.isArray(segment))
|
|
144
|
+
return wrap(segment, isTop, ix, segment.map((s, jx) => go(s, isTop, jx + ix)).join(""));
|
|
145
|
+
if (segment.minRole && role > segment.minRole)
|
|
146
|
+
return "";
|
|
147
|
+
if (segment.type && blockDispatch && blockDispatch[segment.type]) {
|
|
148
|
+
return wrap(segment, isTop, ix, blockDispatch[segment.type](segment, go));
|
|
149
|
+
}
|
|
150
|
+
if (segment.type === "blank") {
|
|
151
|
+
return wrap(segment, isTop, ix, segment.contents || "");
|
|
152
|
+
}
|
|
153
|
+
if (segment.type === "breadcrumbs") {
|
|
154
|
+
return wrap(segment, isTop, ix, breadcrumbs(segment.crumbs || [], segment.right));
|
|
155
|
+
}
|
|
156
|
+
if (segment.type === "view") {
|
|
157
|
+
return wrap(segment, isTop, ix, segment.contents || "");
|
|
158
|
+
}
|
|
159
|
+
if (segment.type === "pageHeader") {
|
|
160
|
+
return wrap(segment, isTop, ix, h1(segment.title) + p(segment.blurb || ""));
|
|
161
|
+
}
|
|
162
|
+
if (segment.type === "image") {
|
|
163
|
+
const srctype = segment.srctype || "File";
|
|
164
|
+
return wrap(segment, isTop, ix, img({
|
|
165
|
+
class: "w-100",
|
|
166
|
+
alt: segment.alt,
|
|
167
|
+
src: srctype === "File" ? `/files/serve/${segment.fileid}` : segment.url,
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
if (segment.type === "link") {
|
|
171
|
+
let style = segment.link_style === "btn btn-custom-color"
|
|
172
|
+
? `background-color: ${segment.link_bgcol || "#000000"};border-color: ${segment.link_bordercol || "#000000"}; color: ${segment.link_textcol || "#000000"}`
|
|
173
|
+
: null;
|
|
174
|
+
return wrap(segment, isTop, ix, a({
|
|
175
|
+
href: segment.url,
|
|
176
|
+
class: [segment.link_style || "", segment.link_size || ""],
|
|
177
|
+
target: segment.target_blank ? "_blank" : false,
|
|
178
|
+
rel: segment.nofollow ? "nofollow" : false,
|
|
179
|
+
style,
|
|
180
|
+
}, segment.link_icon ? i({ class: segment.link_icon }) + " " : "", segment.text));
|
|
181
|
+
}
|
|
182
|
+
if (segment.type === "card")
|
|
183
|
+
return wrap(segment, isTop, ix, div({
|
|
184
|
+
class: [
|
|
185
|
+
"card mt-4",
|
|
186
|
+
segment.shadow === false ? false : "shadow",
|
|
187
|
+
segment.class,
|
|
188
|
+
segment.url && "with-link",
|
|
189
|
+
],
|
|
190
|
+
onclick: segment.url ? `location.href='${segment.url}'` : false,
|
|
191
|
+
style: segment.style,
|
|
192
|
+
}, segment.title &&
|
|
193
|
+
div({ class: "card-header" }, typeof segment.title === "string"
|
|
194
|
+
? h6({ class: "m-0 font-weight-bold text-primary" }, segment.title)
|
|
195
|
+
: segment.title), segment.tabContents &&
|
|
196
|
+
div({ class: "card-header" }, ul({ class: "nav nav-tabs card-header-tabs" }, Object.keys(segment.tabContents).map((title, ix) => li({ class: "nav-item" }, a({
|
|
197
|
+
class: ["nav-link", ix === 0 && "active"],
|
|
198
|
+
href: `#tab-${title}`,
|
|
199
|
+
"data-toggle": "tab",
|
|
200
|
+
role: "tab",
|
|
201
|
+
}, title))))) +
|
|
202
|
+
div({
|
|
203
|
+
class: [
|
|
204
|
+
"card-body",
|
|
205
|
+
segment.bodyClass,
|
|
206
|
+
segment.noPadding && "p-0",
|
|
207
|
+
],
|
|
208
|
+
}, div({ class: "tab-content", id: "myTabContent" }, Object.entries(segment.tabContents).map(([title, contents], ix) => div({
|
|
209
|
+
class: ["tab-pane", ix == 0 && "show active"],
|
|
210
|
+
id: `tab-${title}`,
|
|
211
|
+
}, contents)))), segment.contents &&
|
|
212
|
+
div({
|
|
213
|
+
class: [
|
|
214
|
+
"card-body",
|
|
215
|
+
segment.bodyClass,
|
|
216
|
+
segment.noPadding && "p-0",
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
// @ts-ignore
|
|
220
|
+
go(segment.contents)),
|
|
221
|
+
// @ts-ignore
|
|
222
|
+
segment.footer && div({ class: "card-footer" }, go(segment.footer))));
|
|
223
|
+
if (segment.type === "tabs")
|
|
224
|
+
return wrap(segment, isTop, ix, renderTabs(segment, go));
|
|
225
|
+
if (segment.type === "container") {
|
|
226
|
+
const { bgFileId, bgType, bgColor, vAlign, hAlign, block, display, imageSize, borderWidth, borderStyle, setTextColor, textColor, showForRole, hide, customClass, customCSS, minScreenWidth, maxScreenWidth, showIfFormulaInputs, show_for_owner, borderDirection, borderRadius, borderRadiusUnit, borderColor, url, hoverColor, gradStartColor, gradEndColor, gradDirection, fullPageWidth, overflow, rotate, style, htmlElement, } = segment;
|
|
227
|
+
if (hide)
|
|
228
|
+
return "";
|
|
229
|
+
if (showForRole &&
|
|
230
|
+
showForRole[role] === false &&
|
|
231
|
+
!(show_for_owner && is_owner))
|
|
232
|
+
return "";
|
|
233
|
+
const renderBg = true;
|
|
234
|
+
const sizeProp = (segKey, cssNm, unit) => typeof segment[segKey] === "undefined"
|
|
235
|
+
? ""
|
|
236
|
+
: `${cssNm}: ${segment[segKey]}${unit || segment[segKey + "Unit"] || "px"};`;
|
|
237
|
+
const ppCustomCSS = (s) => s ? s.split("\n").join("") + ";" : "";
|
|
238
|
+
const baseDisplayClass = block === false ? "inline-block" : display ? display : "block";
|
|
239
|
+
let displayClass = minScreenWidth
|
|
240
|
+
? `d-none d-${minScreenWidth}-${baseDisplayClass}`
|
|
241
|
+
: baseDisplayClass === "block"
|
|
242
|
+
? false // no need
|
|
243
|
+
: `d-${baseDisplayClass}`;
|
|
244
|
+
if (maxScreenWidth)
|
|
245
|
+
displayClass = `${displayClass} d-${maxScreenWidth}-none`;
|
|
246
|
+
const allZero = (xs) => xs.every((x) => +x === 0);
|
|
247
|
+
const ppBox = (what) => !segment[what] || allZero(segment[what])
|
|
248
|
+
? ""
|
|
249
|
+
: `${what}: ${segment[what].map((p) => p + "px").join(" ")};`;
|
|
250
|
+
let flexStyles = "";
|
|
251
|
+
Object.keys(style || {}).forEach((k) => {
|
|
252
|
+
flexStyles += `${k}:${style[k]};`;
|
|
253
|
+
});
|
|
254
|
+
return wrap(segment, isTop, ix, genericElement(htmlElement || "div", {
|
|
255
|
+
class: [
|
|
256
|
+
customClass || false,
|
|
257
|
+
hAlign && `text-${hAlign}`,
|
|
258
|
+
vAlign === "middle" && "d-flex align-items-center",
|
|
259
|
+
vAlign === "bottom" && "d-flex align-items-end",
|
|
260
|
+
vAlign === "middle" &&
|
|
261
|
+
hAlign === "center" &&
|
|
262
|
+
"justify-content-center",
|
|
263
|
+
displayClass,
|
|
264
|
+
url && "with-link",
|
|
265
|
+
hoverColor && `hover-${hoverColor}`,
|
|
266
|
+
fullPageWidth && "full-page-width",
|
|
267
|
+
],
|
|
268
|
+
onclick: segment.url ? `location.href='${segment.url}'` : false,
|
|
269
|
+
style: `${flexStyles}${ppCustomCSS(customCSS || "")}${sizeProp("minHeight", "min-height")}${sizeProp("height", "height")}${sizeProp("width", "width")}${sizeProp("widthPct", "width", "%")}border${borderDirection ? `-${borderDirection}` : ""}: ${borderWidth || 0}px ${borderStyle} ${borderColor || "black"};${sizeProp("borderRadius", "border-radius")}${ppBox("padding")}${ppBox("margin")}${overflow && overflow !== "visible"
|
|
270
|
+
? ` overflow: ${overflow};`
|
|
271
|
+
: ""} ${renderBg && bgType === "Image" && bgFileId && +bgFileId
|
|
272
|
+
? `background-image: url('/files/serve/${bgFileId}'); background-size: ${imageSize === "repeat" ? "auto" : imageSize || "contain"}; background-repeat: ${imageSize === "repeat" ? "repeat" : "no-repeat"};`
|
|
273
|
+
: ""} ${renderBg && bgType === "Color"
|
|
274
|
+
? `background-color: ${bgColor};`
|
|
275
|
+
: ""} ${renderBg && bgType === "Gradient"
|
|
276
|
+
? `background-image: linear-gradient(${gradDirection || 0}deg, ${gradStartColor}, ${gradEndColor});`
|
|
277
|
+
: ""} ${setTextColor ? `color: ${textColor};` : ""}${rotate ? `transform: rotate(${rotate}deg);` : ""}`,
|
|
278
|
+
...(showIfFormulaInputs
|
|
279
|
+
? {
|
|
280
|
+
"data-show-if": `showIfFormulaInputs(e, '${showIfFormulaInputs}')`,
|
|
281
|
+
}
|
|
282
|
+
: {}),
|
|
283
|
+
}, renderBg &&
|
|
284
|
+
bgType === "Image" &&
|
|
285
|
+
bgFileId &&
|
|
286
|
+
+bgFileId &&
|
|
287
|
+
div({ style: "display:none" }, img({
|
|
288
|
+
height: "1",
|
|
289
|
+
width: "1",
|
|
290
|
+
alt: "",
|
|
291
|
+
src: `/files/serve/${bgFileId}`,
|
|
292
|
+
})),
|
|
293
|
+
// @ts-ignore
|
|
294
|
+
go(segment.contents)));
|
|
295
|
+
}
|
|
296
|
+
if (segment.type === "line_break") {
|
|
297
|
+
return "<br />";
|
|
298
|
+
}
|
|
299
|
+
if (segment.type === "search_bar") {
|
|
300
|
+
return `<form action="/search" method="get">${search_bar("q", "", {
|
|
301
|
+
has_dropdown: segment.has_dropdown,
|
|
302
|
+
// @ts-ignore
|
|
303
|
+
contents: go(segment.contents),
|
|
304
|
+
})}</form>`;
|
|
305
|
+
}
|
|
306
|
+
if (segment.above) {
|
|
307
|
+
return segment.above
|
|
308
|
+
.map((s, ix) => go(s, isTop, ix))
|
|
309
|
+
.join("");
|
|
310
|
+
}
|
|
311
|
+
else if (segment.besides) {
|
|
312
|
+
const defwidth = Math.round(12 / segment.besides.length);
|
|
313
|
+
const cardDeck = segment.besides.every((s) => s && s.type === "card") &&
|
|
314
|
+
(!segment.widths || segment.widths.every((w) => w === defwidth));
|
|
315
|
+
let markup;
|
|
316
|
+
if (cardDeck)
|
|
317
|
+
markup = div({ class: "card-deck" }, segment.besides.map((t, ixb) => go(t, false, ixb)));
|
|
318
|
+
else
|
|
319
|
+
markup = div({ class: "row w-100" }, segment.besides.map((t, ixb) => div({
|
|
320
|
+
class: segment.widths === false
|
|
321
|
+
? ""
|
|
322
|
+
: `col-${segment.breakpoint
|
|
323
|
+
? segment.breakpoint + "-"
|
|
324
|
+
: segment.breakpoints && segment.breakpoints[ixb]
|
|
325
|
+
? segment.breakpoints[ixb] + "-"
|
|
326
|
+
: ""}${segment.widths ? segment.widths[ixb] : defwidth}${segment.aligns ? " text-" + segment.aligns[ixb] : ""}`,
|
|
327
|
+
}, go(t, false, ixb))));
|
|
328
|
+
return isTop ? wrap(segment, isTop, ix, markup) : markup;
|
|
329
|
+
}
|
|
330
|
+
else
|
|
331
|
+
throw new Error("unknown layout segment" + JSON.stringify(segment));
|
|
332
|
+
}
|
|
333
|
+
return go(makeSegments(layout, alerts), true, 0);
|
|
334
|
+
};
|
|
335
|
+
// declaration merging
|
|
336
|
+
const LayoutExports = render;
|
|
337
|
+
module.exports = LayoutExports;
|
|
338
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../layout.ts"],"names":[],"mappings":";AAAA,+BAAgC;AAChC,MAAM,EACJ,GAAG,EACH,CAAC,EACD,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,CAAC,EACD,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,KAAK,EACL,EAAE,EACF,MAAM,EACN,EAAE,EACF,CAAC,EACD,cAAc,GACf,GAAG,IAAI,CAAC;AACT,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAEzD,qCAAsC;AACtC,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;AAG/B;;;GAGG;AACH,MAAM,eAAe,GAAG,CAAC,MAAoB,EAAW,EAAE,CACxD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAElC;;;;GAIG;AACH,MAAM,YAAY,GAAG,CAAC,IAAkB,EAAE,MAAa,EAAO,EAAE;IAC9D,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC;QAC5C,CAAC,CAAC;YACE;gBACE,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,GAAG,CACX,EAAE,EAAE,EAAE,aAAa,EAAE,EACrB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CACrD;aACF;SACF;QACH,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,OAAO,IAAI,KAAK,QAAQ;QAC1B,OAAO;YACL,KAAK,EAAE,CAAC,GAAG,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC9D,CAAC;SACC,IAAI,IAAI,CAAC,KAAK,EAAE;QACnB,IAAI,eAAe,CAAC,MAAM,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC;KACb;;QAAM,OAAO,EAAE,KAAK,EAAE,CAAC,GAAG,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;AACrD,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,cAAc,GAAG,CAAC,OAAY,EAAE,KAAa,EAAU,EAAE;IAC7D,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7D,QAAQ,OAAO,CAAC,SAAS,EAAE;QACzB,KAAK,IAAI;YACP,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,KAAK,IAAI;YACP,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,KAAK,IAAI;YACP,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,KAAK,IAAI;YACP,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,KAAK,IAAI;YACP,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,KAAK,IAAI;YACP,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B;YACE,OAAO,OAAO,CAAC,KAAK;gBAClB,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC;gBACvD,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,IAAI;oBACnC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC;oBACxD,CAAC,CAAC,KAAK,CAAC;KACb;AACH,CAAC,CAAC;AAcF;;;;;;;;;GASG;AACH,MAAM,UAAU,GAAG,CACjB,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAkB,EACnE,EAAqD,EACrD,EAAE;IACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACxE,IAAI,SAAS,KAAK,WAAW;QAC3B,OAAO,GAAG,CACR,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,EAAE,EACzC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CACrB,GAAG,CACD,EAAE,KAAK,EAAE,MAAM,EAAE,EACjB,GAAG,CACD,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,KAAK,OAAO,EAAE,EAAE,EAAE,EACjD,EAAE,CACA,EAAE,KAAK,EAAE,MAAM,EAAE,EACjB,MAAM,CACJ;YACE,KAAK,EAAE,kCAAkC;YACzC,IAAI,EAAE,QAAQ;YACd,aAAa,EAAE,UAAU;YACzB,aAAa,EAAE,IAAI,KAAK,MAAM,EAAE,EAAE;YAClC,eAAe,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YAC5C,eAAe,EAAE,GAAG,KAAK,MAAM,EAAE,EAAE;SACpC,EACD,MAAM,CAAC,EAAE,CAAC,CACX,CACF,CACF,EACD,GAAG,CACD;YACE,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC;YACvC,EAAE,EAAE,GAAG,KAAK,MAAM,EAAE,EAAE;YACtB,iBAAiB,EAAE,GAAG,KAAK,OAAO,EAAE,EAAE;YACtC,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK;SACxD,EACD,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAC9C,CACF,CACF,CACF,CAAC;;QAEF,OAAO,CACL,EAAE,CACA;YACE,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,GAAG,KAAK,EAAE;YACd,KAAK,EAAE,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE;SAChE,EACD,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CACrB,EAAE,CACA,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,EAC3C,CAAC,CACC;YACE,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC;YACzC,EAAE,EAAE,GAAG,KAAK,OAAO,EAAE,EAAE;YACvB,aAAa,EAAE,KAAK;YACpB,IAAI,EAAE,IAAI,KAAK,MAAM,EAAE,EAAE;YACzB,IAAI,EAAE,KAAK;YACX,eAAe,EAAE,GAAG,KAAK,MAAM,EAAE,EAAE;YACnC,eAAe,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;SAC7C,EACD,MAAM,CAAC,EAAE,CAAC,CACX,CACF,CACF,CACF;YACD,GAAG,CACD,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,KAAK,SAAS,EAAE,EAC/C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CACrB,GAAG,CACD;gBACE,KAAK,EAAE,CAAC,eAAe,EAAE,EAAE,KAAK,CAAC,IAAI,aAAa,CAAC;gBACnD,IAAI,EAAE,UAAU;gBAChB,EAAE,EAAE,GAAG,KAAK,MAAM,EAAE,EAAE;gBACtB,iBAAiB,EAAE,GAAG,KAAK,OAAO,EAAE,EAAE;aACvC,EACD,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CACjB,CACF,CACF,CACF,CAAC;AACN,CAAC,CAAC;AAcF;;;;;;;;GAQG;AACH,MAAM,MAAM,GAAG,CAAC,EACd,aAAa,EACb,MAAM,EACN,IAAI,EACJ,MAAM,EACN,QAAQ,GACG,EAAU,EAAE;IACvB,+CAA+C;IAC/C,SAAS,IAAI,CAAC,OAAY,EAAE,KAAc,EAAE,EAAO,EAAE,KAAa;QAChE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,IAAI,KAAK,IAAI,aAAa,IAAI,aAAa,CAAC,OAAO;YACjD,OAAO,aAAa,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;;YAEjD,OAAO,OAAO,CAAC,QAAQ;gBACrB,CAAC,CAAC,KAAK,CACH,EAAE,GAAG,EAAE,QAAQ,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,EACzC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,CACzC;gBACH,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,SAAS,EAAE,CAAC,OAAY,EAAE,KAAc,EAAE,EAAO;QAC/C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACxB,IACE,OAAO,OAAO,KAAK,QAAQ;YAC3B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;YACjC,OAAO,CAAC,WAAW,KAAK,MAAM;YAE9B,OAAO,EAAE,CAAC;QACZ,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;YACxB,OAAO,IAAI,CACT,OAAO,EACP,KAAK,EACL,EAAE,EACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CACvD,CAAC;QACJ,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,GAAG,OAAO,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QACzD,IAAI,OAAO,CAAC,IAAI,IAAI,aAAa,IAAI,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YAChE,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;SAC3E;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAC5B,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SACzD;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,EAAE;YAClC,OAAO,IAAI,CACT,OAAO,EACP,KAAK,EACL,EAAE,EACF,WAAW,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CACjD,CAAC;SACH;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YAC3B,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;SACzD;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE;YACjC,OAAO,IAAI,CACT,OAAO,EACP,KAAK,EACL,EAAE,EACF,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAC3C,CAAC;SACH;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE;YAC5B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC;YAC1C,OAAO,IAAI,CACT,OAAO,EACP,KAAK,EACL,EAAE,EACF,GAAG,CAAC;gBACF,KAAK,EAAE,OAAO;gBACd,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EACD,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG;aACtE,CAAC,CACH,CAAC;SACH;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE;YAC3B,IAAI,KAAK,GACP,OAAO,CAAC,UAAU,KAAK,sBAAsB;gBAC3C,CAAC,CAAC,qBACE,OAAO,CAAC,UAAU,IAAI,SACxB,kBAAkB,OAAO,CAAC,cAAc,IAAI,SAAS,YACnD,OAAO,CAAC,YAAY,IAAI,SAC1B,EAAE;gBACJ,CAAC,CAAC,IAAI,CAAC;YACX,OAAO,IAAI,CACT,OAAO,EACP,KAAK,EACL,EAAE,EACF,CAAC,CACC;gBACE,IAAI,EAAE,OAAO,CAAC,GAAG;gBACjB,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;gBAC1D,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;gBAC/C,GAAG,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK;gBAC1C,KAAK;aACN,EACD,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EACnE,OAAO,CAAC,IAAI,CACb,CACF,CAAC;SACH;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YACzB,OAAO,IAAI,CACT,OAAO,EACP,KAAK,EACL,EAAE,EACF,GAAG,CACD;gBACE,KAAK,EAAE;oBACL,WAAW;oBACX,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ;oBAC3C,OAAO,CAAC,KAAK;oBACb,OAAO,CAAC,GAAG,IAAI,WAAW;iBAC3B;gBACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;gBAC/D,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,EACD,OAAO,CAAC,KAAK;gBACX,GAAG,CACD,EAAE,KAAK,EAAE,aAAa,EAAE,EACxB,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;oBAC/B,CAAC,CAAC,EAAE,CACA,EAAE,KAAK,EAAE,mCAAmC,EAAE,EAC9C,OAAO,CAAC,KAAK,CACd;oBACH,CAAC,CAAC,OAAO,CAAC,KAAK,CAClB,EACH,OAAO,CAAC,WAAW;gBACjB,GAAG,CACD,EAAE,KAAK,EAAE,aAAa,EAAE,EACxB,EAAE,CACA,EAAE,KAAK,EAAE,+BAA+B,EAAE,EAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CACjD,EAAE,CACA,EAAE,KAAK,EAAE,UAAU,EAAE,EACrB,CAAC,CACC;oBACE,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,KAAK,CAAC,IAAI,QAAQ,CAAC;oBACzC,IAAI,EAAE,QAAQ,KAAK,EAAE;oBACrB,aAAa,EAAE,KAAK;oBACpB,IAAI,EAAE,KAAK;iBACZ,EACD,KAAK,CACN,CACF,CACF,CACF,CACF;oBACC,GAAG,CACD;wBACE,KAAK,EAAE;4BACL,WAAW;4BACX,OAAO,CAAC,SAAS;4BACjB,OAAO,CAAC,SAAS,IAAI,KAAK;yBAC3B;qBACF,EACD,GAAG,CACD,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,cAAc,EAAE,EAC5C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,CACrC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,CACxB,GAAG,CACD;wBACE,KAAK,EAAE,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,IAAI,aAAa,CAAC;wBAC7C,EAAE,EAAE,OAAO,KAAK,EAAE;qBACnB,EACD,QAAQ,CACT,CACJ,CACF,CACF,EACL,OAAO,CAAC,QAAQ;gBACd,GAAG,CACD;oBACE,KAAK,EAAE;wBACL,WAAW;wBACX,OAAO,CAAC,SAAS;wBACjB,OAAO,CAAC,SAAS,IAAI,KAAK;qBAC3B;iBACF;gBACD,aAAa;gBACb,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CACrB;YACH,aAAa;YACb,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CACpE,CACF,CAAC;QACJ,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;YACzB,OAAO,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,EAAE;YAChC,MAAM,EACJ,QAAQ,EACR,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,OAAO,EACP,SAAS,EACT,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,WAAW,EACX,IAAI,EACJ,WAAW,EACX,SAAS,EACT,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,GAAG,EACH,UAAU,EACV,cAAc,EACd,YAAY,EACZ,aAAa,EACb,aAAa,EACb,QAAQ,EACR,MAAM,EACN,KAAK,EACL,WAAW,GACZ,GAAG,OAAO,CAAC;YACZ,IAAI,IAAI;gBAAE,OAAO,EAAE,CAAC;YACpB,IACE,WAAW;gBACX,WAAW,CAAC,IAAI,CAAC,KAAK,KAAK;gBAC3B,CAAC,CAAC,cAAc,IAAI,QAAQ,CAAC;gBAE7B,OAAO,EAAE,CAAC;YACZ,MAAM,QAAQ,GAAG,IAAI,CAAC;YACtB,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAE,KAAa,EAAE,IAAa,EAAE,EAAE,CAChE,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,WAAW;gBACpC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,GAC1B,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,IACtC,GAAG,CAAC;YACV,MAAM,WAAW,GAAG,CAAC,CAAU,EAAE,EAAE,CACjC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,MAAM,gBAAgB,GACpB,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;YACjE,IAAI,YAAY,GAAG,cAAc;gBAC/B,CAAC,CAAC,YAAY,cAAc,IAAI,gBAAgB,EAAE;gBAClD,CAAC,CAAC,gBAAgB,KAAK,OAAO;oBAC9B,CAAC,CAAC,KAAK,CAAC,UAAU;oBAClB,CAAC,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAC5B,IAAI,cAAc;gBAChB,YAAY,GAAG,GAAG,YAAY,MAAM,cAAc,OAAO,CAAC;YAC5D,MAAM,OAAO,GAAG,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE,CAC7B,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACtC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAC1E,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gBACrC,UAAU,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CACT,OAAO,EACP,KAAK,EACL,EAAE,EACF,cAAc,CACZ,WAAW,IAAI,KAAK,EACpB;gBACE,KAAK,EAAE;oBACL,WAAW,IAAI,KAAK;oBACpB,MAAM,IAAI,QAAQ,MAAM,EAAE;oBAC1B,MAAM,KAAK,QAAQ,IAAI,2BAA2B;oBAClD,MAAM,KAAK,QAAQ,IAAI,wBAAwB;oBAC/C,MAAM,KAAK,QAAQ;wBACjB,MAAM,KAAK,QAAQ;wBACnB,wBAAwB;oBAC1B,YAAY;oBACZ,GAAG,IAAI,WAAW;oBAClB,UAAU,IAAI,SAAS,UAAU,EAAE;oBACnC,aAAa,IAAI,iBAAiB;iBACnC;gBACD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,kBAAkB,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK;gBAE/D,KAAK,EAAE,GAAG,UAAU,GAAG,WAAW,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,QAAQ,CAC5D,WAAW,EACX,YAAY,CACb,GAAG,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CACzC,OAAO,EACP,OAAO,CACR,GAAG,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,CAAC,SACpC,eAAe,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,EAC5C,KAAK,WAAW,IAAI,CAAC,MAAM,WAAW,IACpC,WAAW,IAAI,OACjB,IAAI,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,GAAG,KAAK,CACnD,SAAS,CACV,GAAG,KAAK,CAAC,QAAQ,CAAC,GACjB,QAAQ,IAAI,QAAQ,KAAK,SAAS;oBAChC,CAAC,CAAC,cAAc,QAAQ,GAAG;oBAC3B,CAAC,CAAC,EACN,IACE,QAAQ,IAAI,MAAM,KAAK,OAAO,IAAI,QAAQ,IAAI,CAAC,QAAQ;oBACrD,CAAC,CAAC,uCAAuC,QAAQ,wBAC7C,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,SACjD,wBACE,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WACtC,GAAG;oBACL,CAAC,CAAC,EACN,IACE,QAAQ,IAAI,MAAM,KAAK,OAAO;oBAC5B,CAAC,CAAC,qBAAqB,OAAO,GAAG;oBACjC,CAAC,CAAC,EACN,IACE,QAAQ,IAAI,MAAM,KAAK,UAAU;oBAC/B,CAAC,CAAC,qCACE,aAAa,IAAI,CACnB,QAAQ,cAAc,KAAK,YAAY,IAAI;oBAC7C,CAAC,CAAC,EACN,IAAI,YAAY,CAAC,CAAC,CAAC,UAAU,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,GAC5C,MAAM,CAAC,CAAC,CAAC,qBAAqB,MAAM,OAAO,CAAC,CAAC,CAAC,EAChD,EAAE;gBACF,GAAG,CAAC,mBAAmB;oBACrB,CAAC,CAAC;wBACE,cAAc,EAAE,2BAA2B,mBAAmB,IAAI;qBACnE;oBACH,CAAC,CAAC,EAAE,CAAC;aACR,EACD,QAAQ;gBACN,MAAM,KAAK,OAAO;gBAClB,QAAQ;gBACR,CAAC,QAAQ;gBACT,GAAG,CACD,EAAE,KAAK,EAAE,cAAc,EAAE,EACzB,GAAG,CAAC;oBACF,MAAM,EAAE,GAAG;oBACX,KAAK,EAAE,GAAG;oBACV,GAAG,EAAE,EAAE;oBACP,GAAG,EAAE,gBAAgB,QAAQ,EAAE;iBAChC,CAAC,CACH;YACH,aAAa;YACb,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CACrB,CACF,CAAC;SACH;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE;YACjC,OAAO,QAAQ,CAAC;SACjB;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE;YACjC,OAAO,uCAAuC,UAAU,CAAC,GAAG,EAAE,EAAE,EAAE;gBAChE,YAAY,EAAE,OAAO,CAAC,YAAY;gBAClC,aAAa;gBACb,QAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;aAC/B,CAAC,SAAS,CAAC;SACb;QACD,IAAI,OAAO,CAAC,KAAK,EAAE;YACjB,OAAO,OAAO,CAAC,KAAK;iBACjB,GAAG,CAAC,CAAC,CAAM,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;iBAC7C,IAAI,CAAC,EAAE,CAAC,CAAC;SACb;aAAM,IAAI,OAAO,CAAC,OAAO,EAAE;YAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACzD,MAAM,QAAQ,GACZ,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC;gBACzD,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC;YACxE,IAAI,MAAM,CAAC;YACX,IAAI,QAAQ;gBACV,MAAM,GAAG,GAAG,CACV,EAAE,KAAK,EAAE,WAAW,EAAE,EACtB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,GAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAChE,CAAC;;gBAEF,MAAM,GAAG,GAAG,CACV,EAAE,KAAK,EAAE,WAAW,EAAE,EACtB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,GAAW,EAAE,EAAE,CAC1C,GAAG,CACD;oBACE,KAAK,EACH,OAAO,CAAC,MAAM,KAAK,KAAK;wBACtB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,OACE,OAAO,CAAC,UAAU;4BAChB,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,GAAG;4BAC1B,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;gCACjD,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,GAAG;gCAChC,CAAC,CAAC,EACN,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAChD,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACpD,EAAE;iBACT,EACD,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,CAClB,CACF,CACF,CAAC;YACJ,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SAC1D;;YAAM,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC,CAAC;AAEF,sBAAsB;AACtB,MAAM,aAAa,GAAG,MAAM,CAAC;AAC7B,iBAAS,aAAa,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @category saltcorn-markup
|
|
3
|
+
* @module layout_utils
|
|
4
|
+
*/
|
|
5
|
+
declare type LeftNavBarOpts = {
|
|
6
|
+
name: string;
|
|
7
|
+
logo: string;
|
|
8
|
+
};
|
|
9
|
+
declare const _default: {
|
|
10
|
+
navbar: (brand: LeftNavBarOpts, sections: any[], currentUrl: string, opts?: any) => string;
|
|
11
|
+
alert: (type: string, s: string) => string;
|
|
12
|
+
logit: (x: any, s: any) => any;
|
|
13
|
+
navbarSolidOnScroll: string;
|
|
14
|
+
breadcrumbs: (crumbs: any[], right: any) => string;
|
|
15
|
+
headersInHead: (headers: any[]) => string;
|
|
16
|
+
headersInBody: (headers: any[]) => string;
|
|
17
|
+
cardHeaderTabs: (tabList: any) => string;
|
|
18
|
+
mobileBottomNavBar: (currentUrl: string, sections: any[], cls?: string, clsLink?: string) => string;
|
|
19
|
+
};
|
|
20
|
+
export = _default;
|
|
21
|
+
//# sourceMappingURL=layout_utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout_utils.d.ts","sourceRoot":"","sources":["../layout_utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqOH,aAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;;;;;;;;;;;;AAqOF,kBAUE"}
|
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @category saltcorn-markup
|
|
4
|
+
* @module layout_utils
|
|
5
|
+
*/
|
|
6
|
+
const tags = require("./tags");
|
|
7
|
+
const { ul, li, ol, a, span, hr, div, text, img, button, nav, script, domReady, footer, i, small, br, form, input, } = tags;
|
|
8
|
+
/**
|
|
9
|
+
* @param {string} item
|
|
10
|
+
* @returns {string}
|
|
11
|
+
*/
|
|
12
|
+
const labelToId = (item) => text(item.replace(" ", ""));
|
|
13
|
+
/**
|
|
14
|
+
* @param {string} currentUrl
|
|
15
|
+
* @param {object} item
|
|
16
|
+
* @returns {boolean}
|
|
17
|
+
*/
|
|
18
|
+
const active = (currentUrl, item) => (item.link && currentUrl.startsWith(item.link)) ||
|
|
19
|
+
(item.subitems &&
|
|
20
|
+
item.subitems.some((si) => si.link && currentUrl.startsWith(si.link)));
|
|
21
|
+
/**
|
|
22
|
+
* @param {object[]} [sections]
|
|
23
|
+
* @returns {object[]}
|
|
24
|
+
*/
|
|
25
|
+
const innerSections = (sections) => {
|
|
26
|
+
var items = new Array();
|
|
27
|
+
(sections || []).forEach((section) => {
|
|
28
|
+
(section.items || []).forEach((item) => {
|
|
29
|
+
items.push(item);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
return items;
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* @param {object} opts
|
|
36
|
+
* @param {string} opts.label
|
|
37
|
+
* @param {object[]} opts.subitems
|
|
38
|
+
* @param {string} [opts.icon]
|
|
39
|
+
* @param {boolean} opts.isUser
|
|
40
|
+
* @returns {li}
|
|
41
|
+
*/
|
|
42
|
+
const navSubitems = ({ label, subitems, icon, isUser, }) => li({ class: "nav-item dropdown" }, a({
|
|
43
|
+
class: "nav-link dropdown-toggle",
|
|
44
|
+
href: "#",
|
|
45
|
+
id: `dropdown${labelToId(label)}`,
|
|
46
|
+
role: "button",
|
|
47
|
+
"data-toggle": "dropdown",
|
|
48
|
+
"aria-haspopup": "true",
|
|
49
|
+
"aria-expanded": "false",
|
|
50
|
+
}, icon ? i({ class: `fa-fw mr-05 ${icon}` }) : "", label), div({
|
|
51
|
+
class: ["dropdown-menu", isUser && "dropdown-menu-right"],
|
|
52
|
+
"aria-labelledby": `dropdown${labelToId(label)}`,
|
|
53
|
+
}, subitems.map((si) => a({ class: ["dropdown-item", si.style || ""], href: si.link }, si.icon ? i({ class: `fa-fw mr-05 ${si.icon}` }) : "", si.label))));
|
|
54
|
+
/**
|
|
55
|
+
* @param {string} currentUrl
|
|
56
|
+
* @param {object[]} sections
|
|
57
|
+
* @returns {div}
|
|
58
|
+
*/
|
|
59
|
+
const rightNavBar = (currentUrl, sections) => div({ class: "collapse navbar-collapse", id: "navbarResponsive" }, ul({ class: "navbar-nav ml-auto my-2 my-lg-0" }, innerSections(sections).map((s) => s.location === "Mobile Bottom"
|
|
60
|
+
? ""
|
|
61
|
+
: s.subitems
|
|
62
|
+
? navSubitems(s)
|
|
63
|
+
: s.link
|
|
64
|
+
? li({
|
|
65
|
+
class: ["nav-item", active(currentUrl, s) && "active"],
|
|
66
|
+
}, a({
|
|
67
|
+
class: ["nav-link js-scroll-trigger", s.style || ""],
|
|
68
|
+
href: text(s.link),
|
|
69
|
+
}, s.icon ? i({ class: `fa-fw mr-05 ${s.icon}` }) : "", text(s.label)))
|
|
70
|
+
: s.type === "Search"
|
|
71
|
+
? li(form({
|
|
72
|
+
action: "/search",
|
|
73
|
+
class: "menusearch",
|
|
74
|
+
method: "get",
|
|
75
|
+
}, div({ class: "input-group search-bar" }, input({
|
|
76
|
+
type: "search",
|
|
77
|
+
class: "form-control search-bar pl-2 hasbl",
|
|
78
|
+
placeholder: s.label,
|
|
79
|
+
id: "inputq",
|
|
80
|
+
name: "q",
|
|
81
|
+
"aria-label": "Search",
|
|
82
|
+
"aria-describedby": "button-search-submit",
|
|
83
|
+
}), div({ class: "input-group-append" }, button({
|
|
84
|
+
class: "btn btn-outline-secondary search-bar",
|
|
85
|
+
type: "submit",
|
|
86
|
+
}, i({ class: "fas fa-search" }))))))
|
|
87
|
+
: "")));
|
|
88
|
+
/**
|
|
89
|
+
* @param {object[]} sections
|
|
90
|
+
* @returns {boolean}
|
|
91
|
+
*/
|
|
92
|
+
const hasMobileItems = (sections) => innerSections(sections).some((s) => s.location === "Mobile Bottom");
|
|
93
|
+
/**
|
|
94
|
+
* @param {string} currentUrl
|
|
95
|
+
* @param {object[]} sections
|
|
96
|
+
* @param {string} [cls = ""]
|
|
97
|
+
* @param {string} [clsLink = ""]
|
|
98
|
+
* @returns {footer|string}
|
|
99
|
+
*/
|
|
100
|
+
const mobileBottomNavBar = (currentUrl, sections, cls = "", clsLink = "") => hasMobileItems(sections)
|
|
101
|
+
? footer({
|
|
102
|
+
class: "bs-mobile-nav-footer d-flex justify-content-around d-sm-flex d-md-none " +
|
|
103
|
+
cls,
|
|
104
|
+
}, innerSections(sections).map((s) => s.location !== "Mobile Bottom"
|
|
105
|
+
? ""
|
|
106
|
+
: //: s.subitems
|
|
107
|
+
//? navSubitems(s)
|
|
108
|
+
s.link
|
|
109
|
+
? div({
|
|
110
|
+
class: [
|
|
111
|
+
"mt-2 text-center",
|
|
112
|
+
active(currentUrl, s) ? "active" : "opacity-50",
|
|
113
|
+
],
|
|
114
|
+
}, a({
|
|
115
|
+
class: [s.style || "", clsLink],
|
|
116
|
+
href: text(s.link),
|
|
117
|
+
}, s.icon ? i({ class: `fa-lg ${s.icon}` }) : "", br(), small(text(s.label))))
|
|
118
|
+
: ""))
|
|
119
|
+
: "";
|
|
120
|
+
/**
|
|
121
|
+
* @param {object} opts
|
|
122
|
+
* @param {string} opts.name
|
|
123
|
+
* @param {string} opts.logo
|
|
124
|
+
* @returns {string[]}
|
|
125
|
+
*/
|
|
126
|
+
const leftNavBar = ({ name, logo }) => [
|
|
127
|
+
a({ class: "navbar-brand js-scroll-trigger", href: "/" }, logo &&
|
|
128
|
+
img({
|
|
129
|
+
src: logo,
|
|
130
|
+
width: "30",
|
|
131
|
+
height: "30",
|
|
132
|
+
class: "mx-1 d-inline-block align-top",
|
|
133
|
+
alt: "Logo",
|
|
134
|
+
loading: "lazy",
|
|
135
|
+
}), name),
|
|
136
|
+
button({
|
|
137
|
+
class: "navbar-toggler navbar-toggler-right",
|
|
138
|
+
type: "button",
|
|
139
|
+
"data-toggle": "collapse",
|
|
140
|
+
"data-target": "#navbarResponsive",
|
|
141
|
+
"aria-controls": "navbarResponsive",
|
|
142
|
+
"aria-expanded": "false",
|
|
143
|
+
"aria-label": "Toggle navigation",
|
|
144
|
+
}, span({ class: "navbar-toggler-icon" })),
|
|
145
|
+
];
|
|
146
|
+
/**
|
|
147
|
+
* @param {object} brand
|
|
148
|
+
* @param {object[]} sections
|
|
149
|
+
* @param {string} currentUrl
|
|
150
|
+
* @param {object} opts
|
|
151
|
+
* @param {boolean} [opts.fixedTop = true]
|
|
152
|
+
* @returns {string}
|
|
153
|
+
*/
|
|
154
|
+
const navbar = (brand, sections, currentUrl, opts = { fixedTop: true }) => nav({
|
|
155
|
+
class: `navbar navbar-expand-md ${opts.class || ""} ${opts.colorscheme ? opts.colorscheme.toLowerCase() : "navbar-light"} ${opts.fixedTop ? "fixed-top" : ""}`,
|
|
156
|
+
id: "mainNav",
|
|
157
|
+
}, div({ class: opts.fluid ? "container-fluid" : "container" }, leftNavBar(brand), rightNavBar(currentUrl, sections)));
|
|
158
|
+
/**
|
|
159
|
+
* @param {string} type
|
|
160
|
+
* @param {string} s
|
|
161
|
+
* @returns {string}
|
|
162
|
+
*/
|
|
163
|
+
const alert = (type, s) => {
|
|
164
|
+
//console.log("alert", type, s,s.length)
|
|
165
|
+
const realtype = type === "error" ? "danger" : type;
|
|
166
|
+
return s && s.length > 0
|
|
167
|
+
? `<div class="alert alert-${realtype} alert-dismissible fade show" role="alert">
|
|
168
|
+
${text(s)}
|
|
169
|
+
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
|
|
170
|
+
<span aria-hidden="true">×</span>
|
|
171
|
+
</button>
|
|
172
|
+
</div>`
|
|
173
|
+
: "";
|
|
174
|
+
};
|
|
175
|
+
/**
|
|
176
|
+
* @type {string}
|
|
177
|
+
*/
|
|
178
|
+
const navbarSolidOnScroll = script(domReady(`$(window).scroll(function () {
|
|
179
|
+
if ($(window).scrollTop() >= 10) {
|
|
180
|
+
$('.navbar').css('background','white');
|
|
181
|
+
} else {
|
|
182
|
+
$('.navbar').css('background','transparent');
|
|
183
|
+
}
|
|
184
|
+
});`));
|
|
185
|
+
/**
|
|
186
|
+
* @param {object} x
|
|
187
|
+
* @param {object} s
|
|
188
|
+
* @returns {object}
|
|
189
|
+
*/
|
|
190
|
+
const logit = (x, s) => {
|
|
191
|
+
if (s)
|
|
192
|
+
console.log(s, x);
|
|
193
|
+
else
|
|
194
|
+
console.log(x);
|
|
195
|
+
return x;
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* @param {number} len
|
|
199
|
+
* @returns {function}
|
|
200
|
+
*/
|
|
201
|
+
const standardBreadcrumbItem = (len) => ({ href, text }, ix) => li({
|
|
202
|
+
class: ["breadcrumb-item", ix == len - 1 && "active"],
|
|
203
|
+
"aria-current": ix == len - 1 && "page",
|
|
204
|
+
}, href ? a({ href }, text) : text);
|
|
205
|
+
/**
|
|
206
|
+
* @param {object} opts
|
|
207
|
+
* @param {Workflow} opts.workflow
|
|
208
|
+
* @param {object} opts.step
|
|
209
|
+
* @returns {string}
|
|
210
|
+
*/
|
|
211
|
+
const workflowBreadcrumbItem = ({ workflow, step, }) => workflow.steps
|
|
212
|
+
.map((wfstep, ix) => li({
|
|
213
|
+
class: [
|
|
214
|
+
"breadcrumb-item breadcrumb-workflow",
|
|
215
|
+
step.currentStep - 1 === ix && "active-step font-weight-bold",
|
|
216
|
+
],
|
|
217
|
+
}, span(wfstep.name)))
|
|
218
|
+
.join("");
|
|
219
|
+
/**
|
|
220
|
+
* @param {object[]} crumbs
|
|
221
|
+
* @returns {string}
|
|
222
|
+
*/
|
|
223
|
+
const breadcrumbs = (crumbs, right) => nav({ "aria-label": "breadcrumb" }, ol({ class: "breadcrumb" }, crumbs.map((c, ix) => c.workflow
|
|
224
|
+
? workflowBreadcrumbItem(c)
|
|
225
|
+
: standardBreadcrumbItem(crumbs.length)(c, ix)), right ? li({ class: "ml-auto" }, right) : ""));
|
|
226
|
+
/**
|
|
227
|
+
* @param {object[]} headers
|
|
228
|
+
* @returns {string}
|
|
229
|
+
*/
|
|
230
|
+
const headersInHead = (headers) => headers
|
|
231
|
+
.filter((h) => h.css)
|
|
232
|
+
.map((h) => `<link href="${h.css}" rel="stylesheet">`)
|
|
233
|
+
.join("") +
|
|
234
|
+
headers
|
|
235
|
+
.filter((h) => h.style)
|
|
236
|
+
.map((h) => `<style>${h.style}</style>`)
|
|
237
|
+
.join("") +
|
|
238
|
+
headers
|
|
239
|
+
.filter((h) => h.headerTag)
|
|
240
|
+
.map((h) => h.headerTag)
|
|
241
|
+
.join("");
|
|
242
|
+
/**
|
|
243
|
+
* @param {object[]} headers
|
|
244
|
+
* @returns {string}
|
|
245
|
+
*/
|
|
246
|
+
const headersInBody = (headers) => headers
|
|
247
|
+
.filter((h) => h.script)
|
|
248
|
+
.map((h) => `<script src="${h.script}" ${h.integrity
|
|
249
|
+
? `integrity="${h.integrity}" crossorigin="anonymous"`
|
|
250
|
+
: ""}></script>`)
|
|
251
|
+
.join("") +
|
|
252
|
+
headers
|
|
253
|
+
.filter((h) => h.scriptBody)
|
|
254
|
+
.map((h) => `<script>${h.scriptBody}</script>`)
|
|
255
|
+
.join("");
|
|
256
|
+
/**
|
|
257
|
+
* @param {object[]} tabList
|
|
258
|
+
* @returns {ul}
|
|
259
|
+
*/
|
|
260
|
+
const cardHeaderTabs = (tabList) => ul({ class: "nav nav-tabs card-header-tabs" }, tabList.map(({ href, label, active, }) => li({ class: "nav-item" }, a({ class: ["nav-link", active && "active"], href }, label))));
|
|
261
|
+
module.exports = {
|
|
262
|
+
navbar,
|
|
263
|
+
alert,
|
|
264
|
+
logit,
|
|
265
|
+
navbarSolidOnScroll,
|
|
266
|
+
breadcrumbs,
|
|
267
|
+
headersInHead,
|
|
268
|
+
headersInBody,
|
|
269
|
+
cardHeaderTabs,
|
|
270
|
+
mobileBottomNavBar,
|
|
271
|
+
};
|
|
272
|
+
//# sourceMappingURL=layout_utils.js.map
|