@dreamtree-org/landing-kit 0.9.0 → 0.10.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/MIGRATION.md +16 -0
- package/PLATFORM-API.md +17 -13
- package/README.md +41 -1
- package/ai-skills/landing-kit.md +7 -6
- package/auth.css +57 -0
- package/auth.d.ts +2 -2
- package/dist/auth.cjs +143 -38
- package/dist/auth.js +139 -34
- package/dist/index.cjs +605 -540
- package/dist/index.js +573 -508
- package/dist/platform.cjs +1208 -408
- package/dist/platform.js +1209 -409
- package/index.d.ts +25 -0
- package/package.json +3 -2
- package/platform.d.ts +37 -3
- package/styles.css +57 -0
package/dist/index.cjs
CHANGED
|
@@ -58,6 +58,7 @@ __export(index_exports, {
|
|
|
58
58
|
Wrap: () => Wrap,
|
|
59
59
|
brandStyle: () => brandStyle,
|
|
60
60
|
brands: () => brands,
|
|
61
|
+
buildSsoUrl: () => buildSsoUrl,
|
|
61
62
|
createDemoIsland: () => createDemoIsland,
|
|
62
63
|
fetchDemoAccounts: () => fetchDemoAccounts,
|
|
63
64
|
getBrand: () => getBrand,
|
|
@@ -76,10 +77,10 @@ __export(index_exports, {
|
|
|
76
77
|
module.exports = __toCommonJS(index_exports);
|
|
77
78
|
|
|
78
79
|
// src/LandingPage.jsx
|
|
79
|
-
var
|
|
80
|
+
var import_react8 = require("react");
|
|
80
81
|
|
|
81
82
|
// src/AuthShell.jsx
|
|
82
|
-
var
|
|
83
|
+
var import_react5 = require("react");
|
|
83
84
|
|
|
84
85
|
// src/DemoAccounts.jsx
|
|
85
86
|
var import_react = require("react");
|
|
@@ -165,13 +166,121 @@ function DemoAccounts({ load, onSelect, className = "" }) {
|
|
|
165
166
|
] });
|
|
166
167
|
}
|
|
167
168
|
|
|
168
|
-
// src/
|
|
169
|
+
// src/DreamtreeSso.jsx
|
|
170
|
+
var import_react3 = require("react");
|
|
171
|
+
|
|
172
|
+
// src/sso.js
|
|
173
|
+
function decodeKey(part) {
|
|
174
|
+
const key = part.split("=")[0];
|
|
175
|
+
try {
|
|
176
|
+
return decodeURIComponent(key.replace(/\+/g, " "));
|
|
177
|
+
} catch {
|
|
178
|
+
return key;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function buildSsoUrl(startUrl, { returnTo, companySlug } = {}) {
|
|
182
|
+
const raw = String(startUrl != null ? startUrl : "");
|
|
183
|
+
const hashAt = raw.indexOf("#");
|
|
184
|
+
const hash = hashAt === -1 ? "" : raw.slice(hashAt);
|
|
185
|
+
const beforeHash = hashAt === -1 ? raw : raw.slice(0, hashAt);
|
|
186
|
+
const queryAt = beforeHash.indexOf("?");
|
|
187
|
+
const path = queryAt === -1 ? beforeHash : beforeHash.slice(0, queryAt);
|
|
188
|
+
const query = queryAt === -1 ? "" : beforeHash.slice(queryAt + 1);
|
|
189
|
+
const add = [
|
|
190
|
+
["return_to", returnTo],
|
|
191
|
+
["dt_company", companySlug]
|
|
192
|
+
].filter(([, v]) => v != null && v !== "");
|
|
193
|
+
const replaced = new Set(add.map(([k]) => k));
|
|
194
|
+
const params = query.split("&").filter((p) => p && !replaced.has(decodeKey(p))).concat(add.map(([k, v]) => `${k}=${encodeURIComponent(String(v))}`));
|
|
195
|
+
return `${path}${params.length ? `?${params.join("&")}` : ""}${hash}`;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// src/icons.jsx
|
|
169
199
|
var import_react2 = require("react");
|
|
200
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
201
|
+
var base = {
|
|
202
|
+
viewBox: "0 0 24 24",
|
|
203
|
+
fill: "none",
|
|
204
|
+
stroke: "currentColor",
|
|
205
|
+
strokeWidth: 2,
|
|
206
|
+
strokeLinecap: "round",
|
|
207
|
+
strokeLinejoin: "round",
|
|
208
|
+
"aria-hidden": "true",
|
|
209
|
+
focusable: "false"
|
|
210
|
+
};
|
|
211
|
+
var make = (paths) => function Icon({ size = 16, className = "dt-lp-icon" }) {
|
|
212
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("svg", { ...base, width: size, height: size, className, children: paths });
|
|
213
|
+
};
|
|
214
|
+
var ArrowRight = make(/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M5 12h14M13 6l6 6-6 6" }));
|
|
215
|
+
var ChevronRight = make(/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "m9 6 6 6-6 6" }));
|
|
216
|
+
var Check = make(/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M20 6 9 17l-5-5" }));
|
|
217
|
+
var Help = make(
|
|
218
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
219
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
220
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3M12 17h.01" })
|
|
221
|
+
] })
|
|
222
|
+
);
|
|
223
|
+
var Alert = make(
|
|
224
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
225
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z" }),
|
|
226
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M12 9v4M12 17h.01" })
|
|
227
|
+
] })
|
|
228
|
+
);
|
|
229
|
+
var MenuIcon = make(/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M4 6h16M4 12h16M4 18h16" }));
|
|
230
|
+
var Close = make(/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M18 6 6 18M6 6l12 12" }));
|
|
231
|
+
var Calendar = make(
|
|
232
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_jsx_runtime2.Fragment, { children: [
|
|
233
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
234
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("path", { d: "M16 2v4M8 2v4M3 10h18m-12 6 2 2 4-4" })
|
|
235
|
+
] })
|
|
236
|
+
);
|
|
237
|
+
function renderIcon(icon, size = 20, className = "dt-lp-icon") {
|
|
238
|
+
if (!icon) return null;
|
|
239
|
+
if ((0, import_react2.isValidElement)(icon)) return icon;
|
|
240
|
+
return (0, import_react2.createElement)(icon, { size, "aria-hidden": true, className, strokeWidth: 1.8 });
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// src/DreamtreeSso.jsx
|
|
244
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
245
|
+
var DEFAULT_SSO_LABEL = "Continue with Dreamtree";
|
|
246
|
+
function DreamtreeSso({ provider, children }) {
|
|
247
|
+
const { startUrl, mode, label = DEFAULT_SSO_LABEL, companySlug, returnTo } = provider;
|
|
248
|
+
const isSso = mode === "sso";
|
|
249
|
+
const autoRedirect = isSso && provider.autoRedirect !== false;
|
|
250
|
+
const href = buildSsoUrl(startUrl, { returnTo, companySlug });
|
|
251
|
+
const redirected = (0, import_react3.useRef)(false);
|
|
252
|
+
(0, import_react3.useEffect)(() => {
|
|
253
|
+
if (!autoRedirect || redirected.current) return;
|
|
254
|
+
redirected.current = true;
|
|
255
|
+
window.location.assign(href);
|
|
256
|
+
}, [autoRedirect, href]);
|
|
257
|
+
const button = /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("a", { className: "dt-auth-sso-btn", href, children: [
|
|
258
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: label }),
|
|
259
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ArrowRight, { size: 16, className: "dt-auth-sso-icon" })
|
|
260
|
+
] });
|
|
261
|
+
if (isSso) {
|
|
262
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "dt-auth-sso dt-auth-sso--only", children: [
|
|
263
|
+
autoRedirect ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("p", { className: "dt-auth-sso-status", role: "status", "aria-live": "polite", children: [
|
|
264
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "dt-auth-sso-spinner", "aria-hidden": "true" }),
|
|
265
|
+
"Redirecting to Dreamtree ID\u2026"
|
|
266
|
+
] }) : null,
|
|
267
|
+
button
|
|
268
|
+
] });
|
|
269
|
+
}
|
|
270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(import_jsx_runtime3.Fragment, { children: [
|
|
271
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "dt-auth-sso", children: button }),
|
|
272
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "dt-auth-or", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { children: "or" }) }),
|
|
273
|
+
children
|
|
274
|
+
] });
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// src/useTapReveal.js
|
|
278
|
+
var import_react4 = require("react");
|
|
170
279
|
function useTapReveal({ taps = 4, windowMs = 1500 } = {}) {
|
|
171
|
-
const [revealed, setRevealed] = (0,
|
|
172
|
-
const count = (0,
|
|
173
|
-
const last = (0,
|
|
174
|
-
const onClick = (0,
|
|
280
|
+
const [revealed, setRevealed] = (0, import_react4.useState)(false);
|
|
281
|
+
const count = (0, import_react4.useRef)(0);
|
|
282
|
+
const last = (0, import_react4.useRef)(0);
|
|
283
|
+
const onClick = (0, import_react4.useCallback)(() => {
|
|
175
284
|
if (revealed) return;
|
|
176
285
|
const now = Date.now();
|
|
177
286
|
count.current = now - last.current <= windowMs ? count.current + 1 : 1;
|
|
@@ -182,7 +291,7 @@ function useTapReveal({ taps = 4, windowMs = 1500 } = {}) {
|
|
|
182
291
|
}
|
|
183
292
|
|
|
184
293
|
// src/AuthShell.jsx
|
|
185
|
-
var
|
|
294
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
186
295
|
var DEFAULT_LEGAL = [
|
|
187
296
|
{ label: "Privacy Policy", href: "/privacy" },
|
|
188
297
|
{ label: "Terms", href: "/terms" },
|
|
@@ -190,10 +299,10 @@ var DEFAULT_LEGAL = [
|
|
|
190
299
|
];
|
|
191
300
|
function BrandMark({ brand, size }) {
|
|
192
301
|
if (brand.logoSrc) {
|
|
193
|
-
return /* @__PURE__ */ (0,
|
|
302
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("img", { className: "dt-auth-mark-img", src: brand.logoSrc, alt: "", width: size, height: size });
|
|
194
303
|
}
|
|
195
|
-
if (brand.mark) return /* @__PURE__ */ (0,
|
|
196
|
-
return /* @__PURE__ */ (0,
|
|
304
|
+
if (brand.mark) return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "dt-auth-mark-node", children: brand.mark });
|
|
305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "dt-auth-monogram", style: { width: size, height: size }, "aria-hidden": "true", children: brand.name.charAt(0) });
|
|
197
306
|
}
|
|
198
307
|
function brandStyle(brand) {
|
|
199
308
|
return {
|
|
@@ -212,52 +321,53 @@ function AuthShell({
|
|
|
212
321
|
legalLinks = DEFAULT_LEGAL,
|
|
213
322
|
linkComponent: LinkComponent,
|
|
214
323
|
className = "",
|
|
215
|
-
demoAccounts
|
|
324
|
+
demoAccounts,
|
|
325
|
+
ssoProvider
|
|
216
326
|
}) {
|
|
217
327
|
var _a, _b;
|
|
218
|
-
const headingId = (0,
|
|
328
|
+
const headingId = (0, import_react5.useId)();
|
|
219
329
|
const { revealed, tapProps } = useTapReveal({ taps: (_a = demoAccounts == null ? void 0 : demoAccounts.taps) != null ? _a : 4 });
|
|
220
330
|
const isPlatform = variant === "platform";
|
|
221
331
|
const headline = isPlatform ? brand.platformHeadline || "Platform administration" : brand.headline;
|
|
222
332
|
const pitch = isPlatform ? brand.platformPitch || `Super administrator console for ${brand.name}. Every action here is audited.` : brand.pitch;
|
|
223
|
-
const renderLink = (l) => LinkComponent ? /* @__PURE__ */ (0,
|
|
224
|
-
return /* @__PURE__ */ (0,
|
|
333
|
+
const renderLink = (l) => LinkComponent ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(LinkComponent, { to: l.href, href: l.href, className: "dt-auth-legal-link", children: l.label }, l.href) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("a", { href: l.href, className: "dt-auth-legal-link", children: l.label }, l.href);
|
|
334
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
225
335
|
"div",
|
|
226
336
|
{
|
|
227
337
|
className: `dt-auth ${isPlatform ? "dt-auth--platform" : ""} ${className}`,
|
|
228
338
|
style: brandStyle(brand),
|
|
229
339
|
"data-product": brand.id,
|
|
230
340
|
children: [
|
|
231
|
-
/* @__PURE__ */ (0,
|
|
232
|
-
/* @__PURE__ */ (0,
|
|
233
|
-
/* @__PURE__ */ (0,
|
|
234
|
-
/* @__PURE__ */ (0,
|
|
235
|
-
isPlatform ? /* @__PURE__ */ (0,
|
|
341
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("aside", { className: "dt-auth-panel", children: [
|
|
342
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("a", { href: "/", className: "dt-auth-brand", children: [
|
|
343
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BrandMark, { brand, size: 28 }),
|
|
344
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "dt-auth-brand-name", children: brand.name }),
|
|
345
|
+
isPlatform ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "dt-auth-badge", children: "Platform" }) : null
|
|
236
346
|
] }),
|
|
237
|
-
/* @__PURE__ */ (0,
|
|
238
|
-
/* @__PURE__ */ (0,
|
|
239
|
-
pitch ? /* @__PURE__ */ (0,
|
|
240
|
-
!isPlatform && ((_b = brand.points) == null ? void 0 : _b.length) ? /* @__PURE__ */ (0,
|
|
347
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dt-auth-pitch", children: [
|
|
348
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h2", { children: headline }),
|
|
349
|
+
pitch ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: pitch }) : null,
|
|
350
|
+
!isPlatform && ((_b = brand.points) == null ? void 0 : _b.length) ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("ul", { children: brand.points.map((p) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("li", { children: p }, p)) }) : null
|
|
241
351
|
] }),
|
|
242
|
-
/* @__PURE__ */ (0,
|
|
352
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { className: "dt-auth-panel-foot", children: brand.category || "by Dreamtree-Org" })
|
|
243
353
|
] }),
|
|
244
|
-
/* @__PURE__ */ (0,
|
|
245
|
-
/* @__PURE__ */ (0,
|
|
246
|
-
/* @__PURE__ */ (0,
|
|
247
|
-
/* @__PURE__ */ (0,
|
|
248
|
-
isPlatform ? /* @__PURE__ */ (0,
|
|
354
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("main", { className: "dt-auth-main", children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("div", { className: "dt-auth-column", children: [
|
|
355
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("a", { href: "/", className: "dt-auth-brand dt-auth-brand--mobile", children: [
|
|
356
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(BrandMark, { brand, size: 24 }),
|
|
357
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "dt-auth-brand-name", children: brand.name }),
|
|
358
|
+
isPlatform ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { className: "dt-auth-badge", children: "Platform" }) : null
|
|
249
359
|
] }),
|
|
250
|
-
/* @__PURE__ */ (0,
|
|
251
|
-
/* @__PURE__ */ (0,
|
|
252
|
-
/* @__PURE__ */ (0,
|
|
253
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
360
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("section", { className: "dt-auth-card", "aria-labelledby": headingId, children: [
|
|
361
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("header", { className: "dt-auth-head", children: [
|
|
362
|
+
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("h1", { id: headingId, ...demoAccounts ? tapProps : {}, children: title2 }),
|
|
363
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("p", { children: subtitle }) : null
|
|
254
364
|
] }),
|
|
255
|
-
children,
|
|
256
|
-
demoAccounts && revealed ? /* @__PURE__ */ (0,
|
|
365
|
+
ssoProvider ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DreamtreeSso, { provider: ssoProvider, children }) : children,
|
|
366
|
+
demoAccounts && revealed && (ssoProvider == null ? void 0 : ssoProvider.mode) !== "sso" ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(DemoAccounts, { load: demoAccounts.load, onSelect: demoAccounts.onSelect }) : null
|
|
257
367
|
] }),
|
|
258
|
-
footer ? /* @__PURE__ */ (0,
|
|
259
|
-
(legalLinks == null ? void 0 : legalLinks.length) ? /* @__PURE__ */ (0,
|
|
260
|
-
i > 0 ? /* @__PURE__ */ (0,
|
|
368
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { className: "dt-auth-footer", children: footer }) : null,
|
|
369
|
+
(legalLinks == null ? void 0 : legalLinks.length) ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("nav", { className: "dt-auth-legal", "aria-label": "Legal", children: legalLinks.map((l, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("span", { className: "dt-auth-legal-item", children: [
|
|
370
|
+
i > 0 ? /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("span", { "aria-hidden": "true", children: "\xB7" }) : null,
|
|
261
371
|
renderLink(l)
|
|
262
372
|
] }, l.href)) }) : null
|
|
263
373
|
] }) })
|
|
@@ -267,11 +377,11 @@ function AuthShell({
|
|
|
267
377
|
}
|
|
268
378
|
|
|
269
379
|
// src/context.jsx
|
|
270
|
-
var
|
|
271
|
-
var
|
|
272
|
-
var LandingContext = (0,
|
|
380
|
+
var import_react6 = require("react");
|
|
381
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
382
|
+
var LandingContext = (0, import_react6.createContext)({ brand: null, linkComponent: null, onBookDemo: null, home: true });
|
|
273
383
|
var LandingProvider = LandingContext.Provider;
|
|
274
|
-
var useLanding = () => (0,
|
|
384
|
+
var useLanding = () => (0, import_react6.useContext)(LandingContext);
|
|
275
385
|
function resolveHref(href, home) {
|
|
276
386
|
if (!href) return href;
|
|
277
387
|
return !home && href.startsWith("#") ? `/${href}` : href;
|
|
@@ -281,95 +391,50 @@ function SmartLink({ href, children, className, reload, ...rest }) {
|
|
|
281
391
|
const to = resolveHref(href, home);
|
|
282
392
|
const internal = to && to.startsWith("/") && !to.startsWith("//") && !to.includes("#");
|
|
283
393
|
if (Link && internal && !reload) {
|
|
284
|
-
return /* @__PURE__ */ (0,
|
|
394
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Link, { to, href: to, className, ...rest, children });
|
|
285
395
|
}
|
|
286
|
-
return /* @__PURE__ */ (0,
|
|
396
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("a", { href: to, className, ...rest, children });
|
|
287
397
|
}
|
|
288
398
|
|
|
289
399
|
// src/Header.jsx
|
|
290
|
-
var
|
|
291
|
-
|
|
292
|
-
// src/icons.jsx
|
|
293
|
-
var import_react5 = require("react");
|
|
294
|
-
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
295
|
-
var base = {
|
|
296
|
-
viewBox: "0 0 24 24",
|
|
297
|
-
fill: "none",
|
|
298
|
-
stroke: "currentColor",
|
|
299
|
-
strokeWidth: 2,
|
|
300
|
-
strokeLinecap: "round",
|
|
301
|
-
strokeLinejoin: "round",
|
|
302
|
-
"aria-hidden": "true",
|
|
303
|
-
focusable: "false"
|
|
304
|
-
};
|
|
305
|
-
var make = (paths) => function Icon({ size = 16, className = "dt-lp-icon" }) {
|
|
306
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { ...base, width: size, height: size, className, children: paths });
|
|
307
|
-
};
|
|
308
|
-
var ArrowRight = make(/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M5 12h14M13 6l6 6-6 6" }));
|
|
309
|
-
var ChevronRight = make(/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "m9 6 6 6-6 6" }));
|
|
310
|
-
var Check = make(/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M20 6 9 17l-5-5" }));
|
|
311
|
-
var Help = make(
|
|
312
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
313
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
314
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M9.1 9a3 3 0 0 1 5.8 1c0 2-3 3-3 3M12 17h.01" })
|
|
315
|
-
] })
|
|
316
|
-
);
|
|
317
|
-
var Alert = make(
|
|
318
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
319
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z" }),
|
|
320
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M12 9v4M12 17h.01" })
|
|
321
|
-
] })
|
|
322
|
-
);
|
|
323
|
-
var MenuIcon = make(/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M4 6h16M4 12h16M4 18h16" }));
|
|
324
|
-
var Close = make(/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M18 6 6 18M6 6l12 12" }));
|
|
325
|
-
var Calendar = make(
|
|
326
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(import_jsx_runtime4.Fragment, { children: [
|
|
327
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("rect", { x: "3", y: "4", width: "18", height: "18", rx: "2" }),
|
|
328
|
-
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M16 2v4M8 2v4M3 10h18m-12 6 2 2 4-4" })
|
|
329
|
-
] })
|
|
330
|
-
);
|
|
331
|
-
function renderIcon(icon, size = 20, className = "dt-lp-icon") {
|
|
332
|
-
if (!icon) return null;
|
|
333
|
-
if ((0, import_react5.isValidElement)(icon)) return icon;
|
|
334
|
-
return (0, import_react5.createElement)(icon, { size, "aria-hidden": true, className, strokeWidth: 1.8 });
|
|
335
|
-
}
|
|
400
|
+
var import_react7 = require("react");
|
|
336
401
|
|
|
337
402
|
// src/Brand.jsx
|
|
338
|
-
var
|
|
403
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
339
404
|
function BrandMark2({ brand, size = 36 }) {
|
|
340
405
|
if (brand.logoSrc) {
|
|
341
|
-
return /* @__PURE__ */ (0,
|
|
406
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("img", { className: "dt-lp-mark-img", src: brand.logoSrc, alt: "", width: size, height: size });
|
|
342
407
|
}
|
|
343
|
-
if (brand.mark) return /* @__PURE__ */ (0,
|
|
344
|
-
return /* @__PURE__ */ (0,
|
|
408
|
+
if (brand.mark) return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dt-lp-mark-node", "aria-hidden": "true", children: brand.mark });
|
|
409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dt-lp-monogram", style: { width: size, height: size }, "aria-hidden": "true", children: brand.name.charAt(0) });
|
|
345
410
|
}
|
|
346
411
|
function Wordmark({ name }) {
|
|
347
412
|
const m = /^(.+?)(Pro)$/.exec(name);
|
|
348
|
-
if (!m) return /* @__PURE__ */ (0,
|
|
349
|
-
return /* @__PURE__ */ (0,
|
|
413
|
+
if (!m) return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dt-lp-wordmark", children: name });
|
|
414
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "dt-lp-wordmark", children: [
|
|
350
415
|
m[1],
|
|
351
|
-
/* @__PURE__ */ (0,
|
|
416
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dt-lp-wordmark-hi", children: m[2] })
|
|
352
417
|
] });
|
|
353
418
|
}
|
|
354
419
|
function BrandLockup({ brand: own2, byline = "by Dreamtree-Org", href = "/" }) {
|
|
355
420
|
const ctx = useLanding();
|
|
356
421
|
const brand = own2 || ctx.brand;
|
|
357
422
|
if (!brand) return null;
|
|
358
|
-
return /* @__PURE__ */ (0,
|
|
359
|
-
/* @__PURE__ */ (0,
|
|
360
|
-
/* @__PURE__ */ (0,
|
|
361
|
-
/* @__PURE__ */ (0,
|
|
362
|
-
byline ? /* @__PURE__ */ (0,
|
|
423
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("a", { href, className: "dt-lp-brand", "aria-label": `${brand.name}${byline ? ` ${byline}` : ""}, home`, children: [
|
|
424
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(BrandMark2, { brand }),
|
|
425
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("span", { className: "dt-lp-brand-text", "aria-hidden": "true", children: [
|
|
426
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Wordmark, { name: brand.name }),
|
|
427
|
+
byline ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "dt-lp-byline", children: byline }) : null
|
|
363
428
|
] })
|
|
364
429
|
] });
|
|
365
430
|
}
|
|
366
431
|
|
|
367
432
|
// src/BookDemoButton.jsx
|
|
368
|
-
var
|
|
433
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
369
434
|
function BookDemoButton({ size = "md", variant = "primary", className = "", children = "Book a demo", onClick }) {
|
|
370
435
|
const { onBookDemo } = useLanding();
|
|
371
436
|
const handler = onClick || (onBookDemo ? (e) => onBookDemo(e.currentTarget) : void 0);
|
|
372
|
-
return /* @__PURE__ */ (0,
|
|
437
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
373
438
|
"button",
|
|
374
439
|
{
|
|
375
440
|
type: "button",
|
|
@@ -383,61 +448,61 @@ function BookDemoButton({ size = "md", variant = "primary", className = "", chil
|
|
|
383
448
|
}
|
|
384
449
|
|
|
385
450
|
// src/Section.jsx
|
|
386
|
-
var
|
|
451
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
387
452
|
function Wrap({ className = "", narrow, children }) {
|
|
388
|
-
return /* @__PURE__ */ (0,
|
|
453
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: `dt-lp-wrap${narrow ? " dt-lp-wrap--narrow" : ""} ${className}`.trim(), children });
|
|
389
454
|
}
|
|
390
455
|
function Eyebrow({ children, className = "" }) {
|
|
391
456
|
if (!children) return null;
|
|
392
|
-
return /* @__PURE__ */ (0,
|
|
457
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: `dt-lp-eyebrow ${className}`.trim(), children });
|
|
393
458
|
}
|
|
394
459
|
function SectionIntro({ id, eyebrow, title: title2, body, align = "start", children }) {
|
|
395
|
-
return /* @__PURE__ */ (0,
|
|
396
|
-
/* @__PURE__ */ (0,
|
|
397
|
-
/* @__PURE__ */ (0,
|
|
398
|
-
body ? /* @__PURE__ */ (0,
|
|
460
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("div", { className: `dt-lp-intro dt-lp-intro--${align}`, children: [
|
|
461
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Eyebrow, { children: eyebrow }),
|
|
462
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("h2", { id, className: "dt-lp-h2", children: title2 }),
|
|
463
|
+
body ? /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("p", { className: "dt-lp-lead", children: body }) : null,
|
|
399
464
|
children
|
|
400
465
|
] });
|
|
401
466
|
}
|
|
402
467
|
function Section({ id, labelledBy, tone: tone2 = "plain", className = "", children, narrow }) {
|
|
403
|
-
return /* @__PURE__ */ (0,
|
|
468
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("section", { id, "aria-labelledby": labelledBy, className: `dt-lp-section dt-lp-tone--${tone2} ${className}`.trim(), children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Wrap, { narrow, children }) });
|
|
404
469
|
}
|
|
405
470
|
function TextLink({ href, children, className = "", ...rest }) {
|
|
406
|
-
return /* @__PURE__ */ (0,
|
|
471
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(SmartLink, { href, className: `dt-lp-textlink ${className}`.trim(), ...rest, children: [
|
|
407
472
|
children,
|
|
408
473
|
" ",
|
|
409
|
-
/* @__PURE__ */ (0,
|
|
474
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArrowRight, {})
|
|
410
475
|
] });
|
|
411
476
|
}
|
|
412
477
|
function Cta({ cta, className = "" }) {
|
|
413
478
|
if (!cta) return null;
|
|
414
479
|
if (Array.isArray(cta)) {
|
|
415
480
|
if (!cta.length) return null;
|
|
416
|
-
return /* @__PURE__ */ (0,
|
|
481
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: `dt-lp-ctas ${className}`.trim(), children: cta.map((c2, i) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Cta, { cta: c2 }, i)) });
|
|
417
482
|
}
|
|
418
483
|
const c = typeof cta === "string" ? { label: cta, demo: true } : cta;
|
|
419
|
-
if (c.href && !c.demo) return /* @__PURE__ */ (0,
|
|
420
|
-
return /* @__PURE__ */ (0,
|
|
484
|
+
if (c.href && !c.demo) return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TextLink, { href: c.href, className, children: c.label });
|
|
485
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(BookDemoButton, { size: "lg", className, children: [
|
|
421
486
|
c.label,
|
|
422
487
|
" ",
|
|
423
|
-
/* @__PURE__ */ (0,
|
|
488
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(ArrowRight, {})
|
|
424
489
|
] });
|
|
425
490
|
}
|
|
426
491
|
|
|
427
492
|
// src/Header.jsx
|
|
428
|
-
var
|
|
493
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
429
494
|
function Header({ nav = [], login = { label: "Log in", href: "/login" }, cta = "Book a demo", brand }) {
|
|
430
495
|
const { home } = useLanding();
|
|
431
|
-
const [open, setOpen] = (0,
|
|
496
|
+
const [open, setOpen] = (0, import_react7.useState)(false);
|
|
432
497
|
const items = login ? [...nav, login] : nav;
|
|
433
|
-
return /* @__PURE__ */ (0,
|
|
434
|
-
/* @__PURE__ */ (0,
|
|
435
|
-
/* @__PURE__ */ (0,
|
|
436
|
-
nav.length ? /* @__PURE__ */ (0,
|
|
437
|
-
/* @__PURE__ */ (0,
|
|
438
|
-
login ? /* @__PURE__ */ (0,
|
|
439
|
-
cta ? /* @__PURE__ */ (0,
|
|
440
|
-
items.length ? /* @__PURE__ */ (0,
|
|
498
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("header", { className: "dt-lp-header", children: [
|
|
499
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(Wrap, { className: "dt-lp-header-bar", children: [
|
|
500
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(BrandLockup, { brand }),
|
|
501
|
+
nav.length ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("nav", { "aria-label": "Primary", className: "dt-lp-nav", children: nav.map((n) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SmartLink, { href: n.href, className: "dt-lp-nav-link", children: n.label }, n.href)) }) : null,
|
|
502
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "dt-lp-header-actions", children: [
|
|
503
|
+
login ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SmartLink, { href: login.href, className: "dt-lp-nav-link dt-lp-login", reload: true, children: login.label }) : null,
|
|
504
|
+
cta ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(BookDemoButton, { size: "sm", children: cta }) : null,
|
|
505
|
+
items.length ? /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
|
441
506
|
"button",
|
|
442
507
|
{
|
|
443
508
|
type: "button",
|
|
@@ -448,29 +513,29 @@ function Header({ nav = [], login = { label: "Log in", href: "/login" }, cta = "
|
|
|
448
513
|
"data-menu-toggle": "",
|
|
449
514
|
onClick: () => setOpen((o) => !o),
|
|
450
515
|
children: [
|
|
451
|
-
/* @__PURE__ */ (0,
|
|
452
|
-
/* @__PURE__ */ (0,
|
|
516
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "dt-lp-menu-open", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(MenuIcon, { size: 20 }) }),
|
|
517
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "dt-lp-menu-close", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Close, { size: 20 }) })
|
|
453
518
|
]
|
|
454
519
|
}
|
|
455
520
|
) : null
|
|
456
521
|
] })
|
|
457
522
|
] }),
|
|
458
|
-
items.length ? /* @__PURE__ */ (0,
|
|
523
|
+
items.length ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("nav", { id: "mobile-nav", "aria-label": "Mobile", className: "dt-lp-mobile-nav", hidden: !open, onClick: (e) => {
|
|
459
524
|
var _a, _b;
|
|
460
525
|
return ((_b = (_a = e.target).closest) == null ? void 0 : _b.call(_a, "a")) && setOpen(false);
|
|
461
|
-
}, children: /* @__PURE__ */ (0,
|
|
526
|
+
}, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Wrap, { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("ul", { children: items.map((n) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(SmartLink, { href: n.href, reload: n === login, children: n.label }) }, n.href)) }) }) }) : null
|
|
462
527
|
] });
|
|
463
528
|
}
|
|
464
529
|
|
|
465
530
|
// src/DreamtreeFooter.jsx
|
|
466
|
-
var
|
|
531
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
467
532
|
function DreamtreeMark({ size = 28 }) {
|
|
468
|
-
return /* @__PURE__ */ (0,
|
|
469
|
-
/* @__PURE__ */ (0,
|
|
470
|
-
/* @__PURE__ */ (0,
|
|
471
|
-
/* @__PURE__ */ (0,
|
|
533
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "dt-lp-org", role: "img", "aria-label": "Dreamtree-Org", children: [
|
|
534
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("svg", { viewBox: "0 0 48.35 48.35", width: size, height: size, "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("g", { fill: "none", strokeWidth: "4", strokeLinecap: "round", strokeLinejoin: "round", stroke: "#0f766e", children: [
|
|
535
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M23.01,44.02c-9.02.03-16.36-7.27-16.39-16.29-.02-7.98,5.72-14.81,13.59-16.16,13.31-2.57,16.81-3.78,21.48-9.57,2.33,4.67,4.67,9.76,4.67,18.67,0,12.84-11.16,23.34-23.34,23.34Z" }),
|
|
536
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M2,46.35c0-7,4.32-12.51,11.86-14.01,5.65-1.12,11.49-4.67,13.82-7" })
|
|
472
537
|
] }) }),
|
|
473
|
-
/* @__PURE__ */ (0,
|
|
538
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { "aria-hidden": "true", className: "dt-lp-org-name", children: "Dreamtree-Org" })
|
|
474
539
|
] });
|
|
475
540
|
}
|
|
476
541
|
function DreamtreeFooter({
|
|
@@ -484,27 +549,27 @@ function DreamtreeFooter({
|
|
|
484
549
|
}) {
|
|
485
550
|
const ctx = useLanding();
|
|
486
551
|
const brand = own2 || ctx.brand;
|
|
487
|
-
return /* @__PURE__ */ (0,
|
|
488
|
-
/* @__PURE__ */ (0,
|
|
489
|
-
/* @__PURE__ */ (0,
|
|
490
|
-
/* @__PURE__ */ (0,
|
|
491
|
-
blurb ? /* @__PURE__ */ (0,
|
|
552
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("footer", { className: "dt-lp-footer", children: [
|
|
553
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Wrap, { className: `dt-lp-footer-grid dt-lp-footer-grid--${Math.min(columns.length, 3)}`, children: [
|
|
554
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "dt-lp-footer-about", children: [
|
|
555
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DreamtreeMark, {}),
|
|
556
|
+
blurb ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { children: blurb }) : null
|
|
492
557
|
] }),
|
|
493
|
-
columns.map((col) => /* @__PURE__ */ (0,
|
|
494
|
-
/* @__PURE__ */ (0,
|
|
495
|
-
/* @__PURE__ */ (0,
|
|
558
|
+
columns.map((col) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("nav", { "aria-label": col.label || col.title, className: "dt-lp-footer-col", children: [
|
|
559
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "dt-lp-footer-title", children: col.title }),
|
|
560
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("ul", { className: col.links.length > 5 && col.compact !== false ? "dt-lp-footer-links" : "dt-lp-footer-links dt-lp-footer-links--one", children: col.links.map((l) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SmartLink, { href: l.href, reload: l.reload, children: l.label }) }, l.href)) })
|
|
496
561
|
] }, col.title))
|
|
497
562
|
] }),
|
|
498
|
-
/* @__PURE__ */ (0,
|
|
499
|
-
/* @__PURE__ */ (0,
|
|
563
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "dt-lp-footer-bar", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(Wrap, { className: "dt-lp-footer-bar-inner", children: [
|
|
564
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("p", { children: [
|
|
500
565
|
"\xA9 ",
|
|
501
566
|
year,
|
|
502
567
|
" ",
|
|
503
568
|
org,
|
|
504
569
|
". All rights reserved."
|
|
505
570
|
] }),
|
|
506
|
-
legal.length ? /* @__PURE__ */ (0,
|
|
507
|
-
brand && tagline ? /* @__PURE__ */ (0,
|
|
571
|
+
legal.length ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("nav", { "aria-label": "Legal", className: "dt-lp-footer-legal", children: legal.map((l) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(SmartLink, { href: l.href, children: l.label }, l.href)) }) : null,
|
|
572
|
+
brand && tagline ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("p", { children: [
|
|
508
573
|
brand.name,
|
|
509
574
|
": ",
|
|
510
575
|
tagline
|
|
@@ -514,7 +579,7 @@ function DreamtreeFooter({
|
|
|
514
579
|
}
|
|
515
580
|
|
|
516
581
|
// src/MarketingLayout.jsx
|
|
517
|
-
var
|
|
582
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
518
583
|
function MarketingLayout({
|
|
519
584
|
brand,
|
|
520
585
|
nav = [],
|
|
@@ -530,16 +595,16 @@ function MarketingLayout({
|
|
|
530
595
|
if (!brand || !brand.name) {
|
|
531
596
|
throw new Error(`landing-kit: "brand" is missing. Pass getBrand('<product>') from @dreamtree-org/auth-kit, or your own { id, name, primary }.`);
|
|
532
597
|
}
|
|
533
|
-
return /* @__PURE__ */ (0,
|
|
534
|
-
/* @__PURE__ */ (0,
|
|
535
|
-
/* @__PURE__ */ (0,
|
|
536
|
-
/* @__PURE__ */ (0,
|
|
537
|
-
footer === false ? null : /* @__PURE__ */ (0,
|
|
598
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LandingProvider, { value: { brand, linkComponent, onBookDemo, home }, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: `dt-landing ${className}`.trim(), style: brandStyle(brand), "data-product": brand.id, children: [
|
|
599
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("a", { href: "#main", className: "dt-lp-skip", children: "Skip to content" }),
|
|
600
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Header, { nav, ...login !== void 0 ? { login } : {}, ...cta !== void 0 ? { cta } : {} }),
|
|
601
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("main", { id: "main", children }),
|
|
602
|
+
footer === false ? null : /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DreamtreeFooter, { ...footer || {} })
|
|
538
603
|
] }) });
|
|
539
604
|
}
|
|
540
605
|
|
|
541
606
|
// src/Hero.jsx
|
|
542
|
-
var
|
|
607
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
543
608
|
function Hero({
|
|
544
609
|
eyebrow,
|
|
545
610
|
title: title2,
|
|
@@ -554,169 +619,169 @@ function Hero({
|
|
|
554
619
|
backdrop
|
|
555
620
|
}) {
|
|
556
621
|
const [first, hi] = Array.isArray(title2) ? title2 : [title2, null];
|
|
557
|
-
return /* @__PURE__ */ (0,
|
|
558
|
-
/* @__PURE__ */ (0,
|
|
559
|
-
backdrop ? /* @__PURE__ */ (0,
|
|
560
|
-
/* @__PURE__ */ (0,
|
|
561
|
-
/* @__PURE__ */ (0,
|
|
562
|
-
/* @__PURE__ */ (0,
|
|
622
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("section", { id, "aria-labelledby": "hero-title", className: `dt-lp-hero${overlap ? " dt-lp-hero--overlap" : ""}`, children: [
|
|
623
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "dt-lp-hero-glow", "aria-hidden": "true" }),
|
|
624
|
+
backdrop ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: "dt-lp-hero-backdrop", "aria-hidden": "true", children: backdrop }) : null,
|
|
625
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(Wrap, { className: "dt-lp-hero-inner", children: [
|
|
626
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Eyebrow, { children: eyebrow }),
|
|
627
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("h1", { id: "hero-title", className: "dt-lp-h1", children: [
|
|
563
628
|
first,
|
|
564
|
-
hi ? /* @__PURE__ */ (0,
|
|
629
|
+
hi ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_jsx_runtime12.Fragment, { children: [
|
|
565
630
|
" ",
|
|
566
|
-
/* @__PURE__ */ (0,
|
|
631
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "dt-lp-h1-hi", children: hi })
|
|
567
632
|
] }) : null
|
|
568
633
|
] }),
|
|
569
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
570
|
-
lead ? /* @__PURE__ */ (0,
|
|
571
|
-
/* @__PURE__ */ (0,
|
|
572
|
-
cta ? /* @__PURE__ */ (0,
|
|
573
|
-
secondary ? /* @__PURE__ */ (0,
|
|
634
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "dt-lp-hero-subtitle", children: subtitle }) : null,
|
|
635
|
+
lead ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("p", { className: "dt-lp-hero-lead", children: lead }) : null,
|
|
636
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "dt-lp-actions", children: [
|
|
637
|
+
cta ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(BookDemoButton, { size: "lg", children: cta }) : null,
|
|
638
|
+
secondary ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(TextLink, { href: secondary.href, children: secondary.label }) : null
|
|
574
639
|
] }),
|
|
575
|
-
(chips == null ? void 0 : chips.length) ? /* @__PURE__ */ (0,
|
|
640
|
+
(chips == null ? void 0 : chips.length) ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("ul", { className: "dt-lp-chips", "aria-label": chipsLabel, children: chips.map((c) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("li", { children: c }, c)) }) : null
|
|
576
641
|
] })
|
|
577
642
|
] });
|
|
578
643
|
}
|
|
579
644
|
|
|
580
645
|
// src/FeatureSection.jsx
|
|
581
|
-
var
|
|
646
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
582
647
|
var asItem = (x) => typeof x === "string" ? { title: x } : x;
|
|
583
648
|
function Items({ items, kind }) {
|
|
584
|
-
return /* @__PURE__ */ (0,
|
|
585
|
-
f.icon ? /* @__PURE__ */ (0,
|
|
586
|
-
/* @__PURE__ */ (0,
|
|
587
|
-
f.label ? /* @__PURE__ */ (0,
|
|
588
|
-
/* @__PURE__ */ (0,
|
|
589
|
-
f.body ? /* @__PURE__ */ (0,
|
|
649
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: `dt-lp-grid dt-lp-grid--${kind}`, children: items.map(asItem).map((f) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("li", { className: `dt-lp-card dt-lp-card--${kind}`, children: [
|
|
650
|
+
f.icon ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "dt-lp-icon-tile", children: renderIcon(f.icon, 20) }) : null,
|
|
651
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "dt-lp-card-text", children: [
|
|
652
|
+
f.label ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "dt-lp-kicker", children: f.label }) : null,
|
|
653
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h3", { className: "dt-lp-h3", children: f.href ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SmartLink, { href: f.href, children: f.title }) : f.title }),
|
|
654
|
+
f.body ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { children: f.body }) : null
|
|
590
655
|
] })
|
|
591
656
|
] }, f.title)) });
|
|
592
657
|
}
|
|
593
658
|
function Checklist({ items, icon: Icon = Check, tone: tone2 = "good", labelledBy }) {
|
|
594
|
-
return /* @__PURE__ */ (0,
|
|
595
|
-
/* @__PURE__ */ (0,
|
|
596
|
-
/* @__PURE__ */ (0,
|
|
659
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: `dt-lp-checklist dt-lp-checklist--${tone2}`, "aria-labelledby": labelledBy, children: items.map((x) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("li", { children: [
|
|
660
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { size: 18 }),
|
|
661
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: x })
|
|
597
662
|
] }, x)) });
|
|
598
663
|
}
|
|
599
664
|
function InlineItems({ items }) {
|
|
600
665
|
if (!(items == null ? void 0 : items.length)) return null;
|
|
601
|
-
return /* @__PURE__ */ (0,
|
|
666
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "dt-lp-inline-items", children: items.map(asItem).map((f) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("li", { children: [
|
|
602
667
|
f.icon ? renderIcon(f.icon, 22) : null,
|
|
603
|
-
/* @__PURE__ */ (0,
|
|
604
|
-
/* @__PURE__ */ (0,
|
|
605
|
-
f.body ? /* @__PURE__ */ (0,
|
|
668
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { children: [
|
|
669
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "dt-lp-inline-title", children: f.title }),
|
|
670
|
+
f.body ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "dt-lp-inline-body", children: f.body }) : null
|
|
606
671
|
] })
|
|
607
672
|
] }, f.title)) });
|
|
608
673
|
}
|
|
609
674
|
function Media({ children }) {
|
|
610
|
-
return /* @__PURE__ */ (0,
|
|
675
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "dt-lp-media", children });
|
|
611
676
|
}
|
|
612
677
|
function Pair({ className, reverse, text, side }) {
|
|
613
|
-
return /* @__PURE__ */ (0,
|
|
678
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: `${className}${reverse ? " dt-lp-pair--reverse" : ""}`, children: [
|
|
614
679
|
reverse ? side : text,
|
|
615
680
|
reverse ? text : side
|
|
616
681
|
] });
|
|
617
682
|
}
|
|
618
683
|
function Chips({ items, label, className = "" }) {
|
|
619
684
|
if (!(items == null ? void 0 : items.length)) return null;
|
|
620
|
-
return /* @__PURE__ */ (0,
|
|
685
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: `dt-lp-chips dt-lp-chips--start ${className}`.trim(), "aria-label": label, children: items.map((c) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: c }, c)) });
|
|
621
686
|
}
|
|
622
687
|
function FeatureSection(props) {
|
|
623
688
|
const { id, variant = "cards", tone: tone2, eyebrow, title: title2, body, items = [], cta, footnote, media, reverse, bullets } = props;
|
|
624
689
|
const hid2 = `${id || variant}-title`;
|
|
625
690
|
const defaultTone = { highlight: "dark", split: "tinted", compare: "muted" }[variant] || "plain";
|
|
626
|
-
const shell = (children, extra = {}) => /* @__PURE__ */ (0,
|
|
691
|
+
const shell = (children, extra = {}) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Section, { id, labelledBy: hid2, tone: tone2 || defaultTone, className: `dt-lp-feature dt-lp-feature--${variant}`, ...extra, children });
|
|
627
692
|
switch (variant) {
|
|
628
693
|
case "split":
|
|
629
694
|
return shell(
|
|
630
|
-
/* @__PURE__ */ (0,
|
|
695
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
631
696
|
Pair,
|
|
632
697
|
{
|
|
633
698
|
className: "dt-lp-split",
|
|
634
699
|
reverse,
|
|
635
|
-
text: /* @__PURE__ */ (0,
|
|
636
|
-
media ? /* @__PURE__ */ (0,
|
|
637
|
-
(bullets == null ? void 0 : bullets.length) ? /* @__PURE__ */ (0,
|
|
638
|
-
/* @__PURE__ */ (0,
|
|
700
|
+
text: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SectionIntro, { id: hid2, eyebrow, title: title2, body, children: [
|
|
701
|
+
media ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(InlineItems, { items }) : null,
|
|
702
|
+
(bullets == null ? void 0 : bullets.length) ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Checklist, { items: bullets }) : null,
|
|
703
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Cta, { cta, className: "dt-lp-mt" })
|
|
639
704
|
] }, "text"),
|
|
640
|
-
side: media ? /* @__PURE__ */ (0,
|
|
705
|
+
side: media ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Media, { children: media }, "side") : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Items, { items, kind: "split" }, "side")
|
|
641
706
|
}
|
|
642
707
|
)
|
|
643
708
|
);
|
|
644
709
|
case "list":
|
|
645
710
|
return shell(
|
|
646
|
-
/* @__PURE__ */ (0,
|
|
647
|
-
/* @__PURE__ */ (0,
|
|
648
|
-
/* @__PURE__ */ (0,
|
|
649
|
-
/* @__PURE__ */ (0,
|
|
711
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
712
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body, align: "center" }),
|
|
713
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Items, { items, kind: "list" }),
|
|
714
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Cta, { cta, className: "dt-lp-mt" })
|
|
650
715
|
] })
|
|
651
716
|
);
|
|
652
717
|
case "intro": {
|
|
653
718
|
const { subtitle, detail, note, glance = [], glanceTitle = "At a glance", link: link2 } = props;
|
|
654
719
|
return shell(
|
|
655
|
-
/* @__PURE__ */ (0,
|
|
656
|
-
/* @__PURE__ */ (0,
|
|
657
|
-
/* @__PURE__ */ (0,
|
|
658
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
659
|
-
detail ? /* @__PURE__ */ (0,
|
|
660
|
-
note ? /* @__PURE__ */ (0,
|
|
661
|
-
/* @__PURE__ */ (0,
|
|
720
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "dt-lp-intro-grid", children: [
|
|
721
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { children: [
|
|
722
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body }),
|
|
723
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h3", { className: "dt-lp-h3 dt-lp-h3--lg", children: subtitle }) : null,
|
|
724
|
+
detail ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "dt-lp-body", children: detail }) : null,
|
|
725
|
+
note ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "dt-lp-note", children: note }) : null,
|
|
726
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Cta, { cta, className: "dt-lp-mt" })
|
|
662
727
|
] }),
|
|
663
|
-
glance.length ? /* @__PURE__ */ (0,
|
|
664
|
-
/* @__PURE__ */ (0,
|
|
665
|
-
/* @__PURE__ */ (0,
|
|
666
|
-
props.glanceNote ? /* @__PURE__ */ (0,
|
|
667
|
-
link2 ? /* @__PURE__ */ (0,
|
|
728
|
+
glance.length ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("aside", { className: "dt-lp-glance", "aria-labelledby": `${hid2}-glance`, children: [
|
|
729
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { id: `${hid2}-glance`, className: "dt-lp-eyebrow", children: glanceTitle }),
|
|
730
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Checklist, { items: glance }),
|
|
731
|
+
props.glanceNote ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "dt-lp-note", children: props.glanceNote }) : null,
|
|
732
|
+
link2 ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TextLink, { href: link2.href, className: "dt-lp-mt", children: link2.label }) : null
|
|
668
733
|
] }) : null
|
|
669
734
|
] })
|
|
670
735
|
);
|
|
671
736
|
}
|
|
672
737
|
case "highlight": {
|
|
673
738
|
const { note, noteLabel = "Important:" } = props;
|
|
674
|
-
const text = /* @__PURE__ */ (0,
|
|
675
|
-
/* @__PURE__ */ (0,
|
|
676
|
-
/* @__PURE__ */ (0,
|
|
677
|
-
body ? /* @__PURE__ */ (0,
|
|
678
|
-
note ? /* @__PURE__ */ (0,
|
|
679
|
-
/* @__PURE__ */ (0,
|
|
680
|
-
/* @__PURE__ */ (0,
|
|
681
|
-
/* @__PURE__ */ (0,
|
|
739
|
+
const text = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "dt-lp-intro", children: [
|
|
740
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Eyebrow, { children: eyebrow }),
|
|
741
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h2", { id: hid2, className: "dt-lp-h2", children: title2 }),
|
|
742
|
+
body ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "dt-lp-lead", children: body }) : null,
|
|
743
|
+
note ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("p", { className: "dt-lp-callout", children: [
|
|
744
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Alert, { size: 20 }),
|
|
745
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { children: [
|
|
746
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("strong", { children: noteLabel }),
|
|
682
747
|
" ",
|
|
683
748
|
note
|
|
684
749
|
] })
|
|
685
750
|
] }) : null,
|
|
686
|
-
media ? /* @__PURE__ */ (0,
|
|
687
|
-
/* @__PURE__ */ (0,
|
|
751
|
+
media ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(InlineItems, { items }) : null,
|
|
752
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Cta, { cta, className: "dt-lp-mt" })
|
|
688
753
|
] }, "text");
|
|
689
|
-
const side = media ? /* @__PURE__ */ (0,
|
|
754
|
+
const side = media ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Media, { children: media }, "side") : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "dt-lp-grid dt-lp-grid--chips", children: items.map(asItem).map((f) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("li", { className: "dt-lp-chip-card", children: [
|
|
690
755
|
renderIcon(f.icon, 22),
|
|
691
|
-
/* @__PURE__ */ (0,
|
|
756
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: f.title })
|
|
692
757
|
] }, f.title)) }, "side");
|
|
693
|
-
return shell(/* @__PURE__ */ (0,
|
|
758
|
+
return shell(/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Pair, { className: "dt-lp-split dt-lp-split--wide", reverse, text, side }));
|
|
694
759
|
}
|
|
695
760
|
case "band": {
|
|
696
761
|
const { examples, examplesLabel = "Examples" } = props;
|
|
697
|
-
const text = /* @__PURE__ */ (0,
|
|
698
|
-
/* @__PURE__ */ (0,
|
|
699
|
-
/* @__PURE__ */ (0,
|
|
700
|
-
media ? /* @__PURE__ */ (0,
|
|
701
|
-
/* @__PURE__ */ (0,
|
|
762
|
+
const text = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { children: [
|
|
763
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body }),
|
|
764
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Chips, { items: examples, label: examplesLabel, className: "dt-lp-mt" }),
|
|
765
|
+
media ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(InlineItems, { items }) : null,
|
|
766
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Cta, { cta, className: "dt-lp-mt" })
|
|
702
767
|
] }, "text");
|
|
703
|
-
const side = media ? /* @__PURE__ */ (0,
|
|
768
|
+
const side = media ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Media, { children: media }, "side") : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "dt-lp-band-list", children: items.map(asItem).map((f) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("li", { children: [
|
|
704
769
|
renderIcon(f.icon, 22),
|
|
705
|
-
/* @__PURE__ */ (0,
|
|
770
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { children: f.title })
|
|
706
771
|
] }, f.title)) }, "side");
|
|
707
|
-
return shell(/* @__PURE__ */ (0,
|
|
772
|
+
return shell(/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Pair, { className: "dt-lp-band", reverse, text, side }));
|
|
708
773
|
}
|
|
709
774
|
case "compare": {
|
|
710
775
|
const { columns = [] } = props;
|
|
711
776
|
return shell(
|
|
712
|
-
/* @__PURE__ */ (0,
|
|
713
|
-
/* @__PURE__ */ (0,
|
|
714
|
-
/* @__PURE__ */ (0,
|
|
777
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
778
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body }),
|
|
779
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: "dt-lp-compare", children: columns.map((col, i) => {
|
|
715
780
|
const cid = `${id || "compare"}-${i + 1}`;
|
|
716
781
|
const tone3 = col.tone || (i === 0 ? "good" : "check");
|
|
717
|
-
return /* @__PURE__ */ (0,
|
|
718
|
-
/* @__PURE__ */ (0,
|
|
719
|
-
/* @__PURE__ */ (0,
|
|
782
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "dt-lp-card dt-lp-card--compare", children: [
|
|
783
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h3", { id: cid, className: "dt-lp-h3 dt-lp-h3--lg", children: col.title }),
|
|
784
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Checklist, { items: col.items, tone: tone3, icon: tone3 === "good" ? Check : Help, labelledBy: cid })
|
|
720
785
|
] }, cid);
|
|
721
786
|
}) })
|
|
722
787
|
] })
|
|
@@ -724,124 +789,124 @@ function FeatureSection(props) {
|
|
|
724
789
|
}
|
|
725
790
|
case "links":
|
|
726
791
|
return shell(
|
|
727
|
-
/* @__PURE__ */ (0,
|
|
728
|
-
/* @__PURE__ */ (0,
|
|
729
|
-
/* @__PURE__ */ (0,
|
|
730
|
-
/* @__PURE__ */ (0,
|
|
792
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
793
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body }),
|
|
794
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("ul", { className: "dt-lp-grid dt-lp-grid--links", children: items.map((s) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(SmartLink, { href: s.href, className: "dt-lp-linkcard", children: [
|
|
795
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { className: "dt-lp-linkcard-title", children: [
|
|
731
796
|
s.title,
|
|
732
797
|
" ",
|
|
733
|
-
/* @__PURE__ */ (0,
|
|
798
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(ArrowRight, {})
|
|
734
799
|
] }),
|
|
735
|
-
s.body ? /* @__PURE__ */ (0,
|
|
800
|
+
s.body ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "dt-lp-linkcard-body", children: s.body }) : null
|
|
736
801
|
] }) }, s.href)) })
|
|
737
802
|
] })
|
|
738
803
|
);
|
|
739
804
|
case "detail": {
|
|
740
805
|
return shell(
|
|
741
|
-
/* @__PURE__ */ (0,
|
|
742
|
-
/* @__PURE__ */ (0,
|
|
743
|
-
/* @__PURE__ */ (0,
|
|
744
|
-
body ? /* @__PURE__ */ (0,
|
|
745
|
-
(bullets == null ? void 0 : bullets.length) ? /* @__PURE__ */ (0,
|
|
806
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "dt-lp-detail", children: [
|
|
807
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)("h2", { id: hid2, className: "dt-lp-h2", children: title2 }),
|
|
808
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { children: [
|
|
809
|
+
body ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "dt-lp-body", children: body }) : null,
|
|
810
|
+
(bullets == null ? void 0 : bullets.length) ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Checklist, { items: bullets }) : null
|
|
746
811
|
] })
|
|
747
812
|
] })
|
|
748
813
|
);
|
|
749
814
|
}
|
|
750
815
|
default:
|
|
751
816
|
return shell(
|
|
752
|
-
/* @__PURE__ */ (0,
|
|
753
|
-
/* @__PURE__ */ (0,
|
|
754
|
-
/* @__PURE__ */ (0,
|
|
755
|
-
footnote ? /* @__PURE__ */ (0,
|
|
756
|
-
/* @__PURE__ */ (0,
|
|
817
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
|
|
818
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body }),
|
|
819
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Items, { items, kind: "cards" }),
|
|
820
|
+
footnote ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("p", { className: "dt-lp-footnote", children: footnote }) : null,
|
|
821
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Cta, { cta, className: "dt-lp-mt" })
|
|
757
822
|
] })
|
|
758
823
|
);
|
|
759
824
|
}
|
|
760
825
|
}
|
|
761
826
|
|
|
762
827
|
// src/Audiences.jsx
|
|
763
|
-
var
|
|
828
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
764
829
|
function Audiences({ id = "audiences", eyebrow, title: title2, body, items = [], linkLabel = "See how it works", tone: tone2 = "muted" }) {
|
|
765
830
|
const hid2 = `${id}-title`;
|
|
766
|
-
return /* @__PURE__ */ (0,
|
|
767
|
-
/* @__PURE__ */ (0,
|
|
768
|
-
/* @__PURE__ */ (0,
|
|
831
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(Section, { id, labelledBy: hid2, tone: tone2, className: "dt-lp-audiences", children: [
|
|
832
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body, align: "center" }),
|
|
833
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: `dt-lp-grid dt-lp-grid--audiences dt-lp-grid--n${Math.min(items.length, 4)}`, children: items.map((a, i) => {
|
|
769
834
|
var _a;
|
|
770
835
|
const aid = a.id || `${id}-${i + 1}`;
|
|
771
|
-
return /* @__PURE__ */ (0,
|
|
772
|
-
a.icon ? /* @__PURE__ */ (0,
|
|
773
|
-
/* @__PURE__ */ (0,
|
|
774
|
-
/* @__PURE__ */ (0,
|
|
775
|
-
a.keyword ? /* @__PURE__ */ (0,
|
|
776
|
-
/* @__PURE__ */ (0,
|
|
777
|
-
/* @__PURE__ */ (0,
|
|
836
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("article", { id: aid, "aria-labelledby": `${aid}-title`, className: "dt-lp-card dt-lp-card--audience", children: [
|
|
837
|
+
a.icon ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "dt-lp-audience-icon", children: renderIcon(a.icon, 30) }) : null,
|
|
838
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: a.media ? "dt-lp-audience-head" : void 0, children: [
|
|
839
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { children: [
|
|
840
|
+
a.keyword ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "dt-lp-kicker", children: a.keyword }) : null,
|
|
841
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("h3", { id: `${aid}-title`, className: "dt-lp-h3 dt-lp-h3--lg", children: a.title }),
|
|
842
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: a.media || a.features ? void 0 : "dt-lp-grow", children: a.body })
|
|
778
843
|
] }),
|
|
779
|
-
a.media ? /* @__PURE__ */ (0,
|
|
844
|
+
a.media ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "dt-lp-audience-media", "aria-hidden": "true", children: a.media }) : null
|
|
780
845
|
] }),
|
|
781
|
-
((_a = a.features) == null ? void 0 : _a.length) ? /* @__PURE__ */ (0,
|
|
846
|
+
((_a = a.features) == null ? void 0 : _a.length) ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("ul", { className: "dt-lp-audience-features dt-lp-grow", children: a.features.map((f) => {
|
|
782
847
|
const it = typeof f === "string" ? { title: f } : f;
|
|
783
|
-
return /* @__PURE__ */ (0,
|
|
848
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("li", { children: [
|
|
784
849
|
it.icon ? renderIcon(it.icon, 22) : null,
|
|
785
|
-
/* @__PURE__ */ (0,
|
|
850
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { children: it.title })
|
|
786
851
|
] }, it.title);
|
|
787
852
|
}) }) : null,
|
|
788
|
-
a.href ? /* @__PURE__ */ (0,
|
|
853
|
+
a.href ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(TextLink, { href: a.href, "aria-label": `${a.keyword || a.title}: ${(a.linkLabel || linkLabel).toLowerCase()}`, children: a.linkLabel || linkLabel }) : null
|
|
789
854
|
] }, aid);
|
|
790
855
|
}) })
|
|
791
856
|
] });
|
|
792
857
|
}
|
|
793
858
|
|
|
794
859
|
// src/HowItWorks.jsx
|
|
795
|
-
var
|
|
860
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
796
861
|
function HowItWorks({ id = "how-it-works", eyebrow, title: title2, body, steps, items, tone: tone2 = "plain", cta }) {
|
|
797
862
|
const list = steps || items || [];
|
|
798
863
|
const hid2 = `${id}-title`;
|
|
799
|
-
return /* @__PURE__ */ (0,
|
|
800
|
-
/* @__PURE__ */ (0,
|
|
801
|
-
/* @__PURE__ */ (0,
|
|
802
|
-
/* @__PURE__ */ (0,
|
|
803
|
-
/* @__PURE__ */ (0,
|
|
804
|
-
/* @__PURE__ */ (0,
|
|
864
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Section, { id, labelledBy: hid2, tone: tone2, className: "dt-lp-steps", children: [
|
|
865
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body }),
|
|
866
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("ol", { className: "dt-lp-grid dt-lp-grid--steps", children: list.map((st, i) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("li", { className: "dt-lp-card", children: [
|
|
867
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "dt-lp-step-num", "aria-hidden": "true", children: i + 1 }),
|
|
868
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("h3", { className: "dt-lp-h3", children: st.name || st.title }),
|
|
869
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { children: st.text || st.body })
|
|
805
870
|
] }, st.name || st.title)) }),
|
|
806
|
-
/* @__PURE__ */ (0,
|
|
871
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Cta, { cta, className: "dt-lp-mt" })
|
|
807
872
|
] });
|
|
808
873
|
}
|
|
809
874
|
|
|
810
875
|
// src/Faq.jsx
|
|
811
|
-
var
|
|
876
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
812
877
|
function Faq({ id = "faq", eyebrow, title: title2 = "Frequently asked questions", intro: intro2, items = [], openFirst = true, tone: tone2 = "muted" }) {
|
|
813
878
|
const hid2 = `${id}-title`;
|
|
814
|
-
return /* @__PURE__ */ (0,
|
|
815
|
-
/* @__PURE__ */ (0,
|
|
816
|
-
/* @__PURE__ */ (0,
|
|
817
|
-
/* @__PURE__ */ (0,
|
|
818
|
-
/* @__PURE__ */ (0,
|
|
819
|
-
/* @__PURE__ */ (0,
|
|
879
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Section, { id, labelledBy: hid2, tone: tone2, narrow: true, className: "dt-lp-faq", children: [
|
|
880
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(SectionIntro, { id: hid2, eyebrow, title: title2, body: intro2, align: "center" }),
|
|
881
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "dt-lp-faq-list", children: items.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("details", { className: "dt-lp-faq-item", open: openFirst && i === 0, children: [
|
|
882
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("summary", { children: [
|
|
883
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("h3", { className: "dt-lp-h3", children: f.q }),
|
|
884
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(ChevronRight, { size: 18, className: "dt-lp-icon dt-lp-faq-chevron" })
|
|
820
885
|
] }),
|
|
821
|
-
/* @__PURE__ */ (0,
|
|
886
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("p", { children: f.a })
|
|
822
887
|
] }, f.q)) })
|
|
823
888
|
] });
|
|
824
889
|
}
|
|
825
890
|
|
|
826
891
|
// src/DemoCta.jsx
|
|
827
|
-
var
|
|
892
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
828
893
|
function DemoCta({ id = "demo", eyebrow, title: title2, body, label = "Book a demo", chips, chipsLabel = "Business types", note, link: link2 }) {
|
|
829
|
-
return /* @__PURE__ */ (0,
|
|
830
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
831
|
-
/* @__PURE__ */ (0,
|
|
832
|
-
body ? /* @__PURE__ */ (0,
|
|
833
|
-
/* @__PURE__ */ (0,
|
|
834
|
-
(chips == null ? void 0 : chips.length) ? /* @__PURE__ */ (0,
|
|
835
|
-
note ? /* @__PURE__ */ (0,
|
|
836
|
-
note.title ? /* @__PURE__ */ (0,
|
|
837
|
-
note.body ? /* @__PURE__ */ (0,
|
|
894
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("section", { id, "aria-labelledby": `${id}-title`, className: "dt-lp-section dt-lp-cta", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Wrap, { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "dt-lp-cta-panel", children: [
|
|
895
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "dt-lp-eyebrow dt-lp-eyebrow--inverse", children: eyebrow }) : null,
|
|
896
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h2", { id: `${id}-title`, className: "dt-lp-h2 dt-lp-h2--cta", children: title2 }),
|
|
897
|
+
body ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "dt-lp-cta-body", children: body }) : null,
|
|
898
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(BookDemoButton, { size: "lg", variant: "inverse", children: label }),
|
|
899
|
+
(chips == null ? void 0 : chips.length) ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("ul", { className: "dt-lp-chips dt-lp-chips--inverse", "aria-label": chipsLabel, children: chips.map((k) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("li", { children: k }, k)) }) : null,
|
|
900
|
+
note ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "dt-lp-cta-note", children: [
|
|
901
|
+
note.title ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { className: "dt-lp-h3", children: note.title }) : null,
|
|
902
|
+
note.body ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: note.body }) : null
|
|
838
903
|
] }) : null,
|
|
839
|
-
link2 ? /* @__PURE__ */ (0,
|
|
904
|
+
link2 ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "dt-lp-cta-link", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(SmartLink, { href: link2.href, reload: link2.reload, children: link2.label }) }) : null
|
|
840
905
|
] }) }) });
|
|
841
906
|
}
|
|
842
907
|
|
|
843
908
|
// src/LandingPage.jsx
|
|
844
|
-
var
|
|
909
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
845
910
|
var BLOCKS = { audiences: Audiences, steps: HowItWorks, faq: Faq, cta: DemoCta };
|
|
846
911
|
var TAIL = ["audiences", "steps", "faq", "cta"];
|
|
847
912
|
function LandingPage({ brand, content, preview = null, slots = {}, linkComponent, onBookDemo, home = true, className }) {
|
|
@@ -854,23 +919,23 @@ function LandingPage({ brand, content, preview = null, slots = {}, linkComponent
|
|
|
854
919
|
const render = (s, i) => {
|
|
855
920
|
var _a;
|
|
856
921
|
if (!s) return null;
|
|
857
|
-
if ((0,
|
|
858
|
-
if (s.use === "preview") return preview ? /* @__PURE__ */ (0,
|
|
922
|
+
if ((0, import_react8.isValidElement)(s)) return (0, import_react8.cloneElement)(s, { key: (_a = s.key) != null ? _a : `el-${i}` });
|
|
923
|
+
if (s.use === "preview") return preview ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { children: preview }, "preview") : null;
|
|
859
924
|
if (s.use) {
|
|
860
925
|
if (slots && Object.prototype.hasOwnProperty.call(slots, s.use)) {
|
|
861
926
|
const node = slots[s.use];
|
|
862
|
-
return node ? /* @__PURE__ */ (0,
|
|
927
|
+
return node ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react8.Fragment, { children: node }, `slot-${s.use}`) : null;
|
|
863
928
|
}
|
|
864
929
|
const Block = BLOCKS[s.use];
|
|
865
930
|
if (!Block) {
|
|
866
931
|
const known = ["preview", ...TAIL, ...Object.keys(slots || {})].join(", ");
|
|
867
932
|
throw new Error(`landing-kit: unknown section use "${s.use}" (known: ${known}). Pass custom sections as <LandingPage slots={{ ${s.use}: <YourSection /> }} />.`);
|
|
868
933
|
}
|
|
869
|
-
return content[s.use] ? /* @__PURE__ */ (0,
|
|
934
|
+
return content[s.use] ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Block, { ...content[s.use] }, s.use) : null;
|
|
870
935
|
}
|
|
871
|
-
return /* @__PURE__ */ (0,
|
|
936
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(FeatureSection, { ...s }, s.id || `section-${i}`);
|
|
872
937
|
};
|
|
873
|
-
return /* @__PURE__ */ (0,
|
|
938
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
874
939
|
MarketingLayout,
|
|
875
940
|
{
|
|
876
941
|
brand,
|
|
@@ -883,12 +948,12 @@ function LandingPage({ brand, content, preview = null, slots = {}, linkComponent
|
|
|
883
948
|
onBookDemo,
|
|
884
949
|
className,
|
|
885
950
|
children: [
|
|
886
|
-
/* @__PURE__ */ (0,
|
|
951
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Hero, { ...hero, overlap: !!preview && !previewInline }),
|
|
887
952
|
preview && !previewInline ? preview : null,
|
|
888
953
|
sections.map(render),
|
|
889
954
|
TAIL.filter((k) => !used.has(k) && content[k]).map((k) => {
|
|
890
955
|
const Block = BLOCKS[k];
|
|
891
|
-
return /* @__PURE__ */ (0,
|
|
956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Block, { ...content[k] }, k);
|
|
892
957
|
})
|
|
893
958
|
]
|
|
894
959
|
}
|
|
@@ -896,7 +961,7 @@ function LandingPage({ brand, content, preview = null, slots = {}, linkComponent
|
|
|
896
961
|
}
|
|
897
962
|
|
|
898
963
|
// src/PreviewFrame.jsx
|
|
899
|
-
var
|
|
964
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
900
965
|
function PreviewFrame({
|
|
901
966
|
id = "product",
|
|
902
967
|
heading: heading2,
|
|
@@ -908,25 +973,25 @@ function PreviewFrame({
|
|
|
908
973
|
}) {
|
|
909
974
|
const ctx = useLanding();
|
|
910
975
|
const brand = own2 || ctx.brand;
|
|
911
|
-
return /* @__PURE__ */ (0,
|
|
912
|
-
/* @__PURE__ */ (0,
|
|
913
|
-
/* @__PURE__ */ (0,
|
|
914
|
-
/* @__PURE__ */ (0,
|
|
915
|
-
/* @__PURE__ */ (0,
|
|
916
|
-
brand ? /* @__PURE__ */ (0,
|
|
917
|
-
meta ? /* @__PURE__ */ (0,
|
|
976
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("section", { id, "aria-labelledby": `${id}-title`, className: "dt-lp-preview", children: [
|
|
977
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("h2", { id: `${id}-title`, className: "dt-lp-sr-only", children: heading2 || `${brand ? brand.name : "Product"} overview` }),
|
|
978
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Wrap, { children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("figure", { className: "dt-lp-preview-frame", children: [
|
|
979
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "dt-lp-preview-bar", children: [
|
|
980
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "dt-lp-preview-title", children: [
|
|
981
|
+
brand ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Wordmark, { name: brand.name }) : null,
|
|
982
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "dt-lp-preview-meta", children: meta }) : null
|
|
918
983
|
] }),
|
|
919
|
-
badge ? /* @__PURE__ */ (0,
|
|
984
|
+
badge ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "dt-lp-preview-badge", children: badge }) : null
|
|
920
985
|
] }),
|
|
921
|
-
/* @__PURE__ */ (0,
|
|
922
|
-
caption ? /* @__PURE__ */ (0,
|
|
986
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "dt-lp-preview-body", children }),
|
|
987
|
+
caption ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("figcaption", { className: "dt-lp-sr-only", children: caption }) : null
|
|
923
988
|
] }) })
|
|
924
989
|
] });
|
|
925
990
|
}
|
|
926
991
|
|
|
927
992
|
// src/DemoDialog.jsx
|
|
928
|
-
var
|
|
929
|
-
var
|
|
993
|
+
var import_react9 = require("react");
|
|
994
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
930
995
|
var DEFAULT_DEMO_FIELDS = [
|
|
931
996
|
{ name: "name", label: "Your name", required: true, maxLength: 120, autoComplete: "name" },
|
|
932
997
|
{ name: "phone", label: "Mobile", type: "tel", required: true, maxLength: 20, autoComplete: "tel", inputMode: "tel" },
|
|
@@ -948,14 +1013,14 @@ function Field({ f, value, onChange, error }) {
|
|
|
948
1013
|
};
|
|
949
1014
|
let control;
|
|
950
1015
|
if (f.type === "select") {
|
|
951
|
-
control = /* @__PURE__ */ (0,
|
|
952
|
-
/* @__PURE__ */ (0,
|
|
953
|
-
(f.options || []).map((o) => /* @__PURE__ */ (0,
|
|
1016
|
+
control = /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("select", { ...common, children: [
|
|
1017
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("option", { value: "", children: f.placeholder || "Choose one" }),
|
|
1018
|
+
(f.options || []).map((o) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("option", { value: o.value, children: o.label }, o.value))
|
|
954
1019
|
] });
|
|
955
1020
|
} else if (f.type === "textarea") {
|
|
956
|
-
control = /* @__PURE__ */ (0,
|
|
1021
|
+
control = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("textarea", { ...common, rows: f.rows || 3, maxLength: f.maxLength });
|
|
957
1022
|
} else {
|
|
958
|
-
control = /* @__PURE__ */ (0,
|
|
1023
|
+
control = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
959
1024
|
"input",
|
|
960
1025
|
{
|
|
961
1026
|
...common,
|
|
@@ -968,13 +1033,13 @@ function Field({ f, value, onChange, error }) {
|
|
|
968
1033
|
}
|
|
969
1034
|
);
|
|
970
1035
|
}
|
|
971
|
-
return /* @__PURE__ */ (0,
|
|
972
|
-
/* @__PURE__ */ (0,
|
|
1036
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("label", { htmlFor: id, className: `dt-lp-field${f.wide || f.type === "textarea" ? " dt-lp-field--wide" : ""}`, children: [
|
|
1037
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { children: [
|
|
973
1038
|
f.label,
|
|
974
1039
|
f.required ? " *" : ""
|
|
975
1040
|
] }),
|
|
976
1041
|
control,
|
|
977
|
-
error ? /* @__PURE__ */ (0,
|
|
1042
|
+
error ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { id: errId, className: "dt-lp-field-error", children: error }) : null
|
|
978
1043
|
] });
|
|
979
1044
|
}
|
|
980
1045
|
function DemoDialog({
|
|
@@ -994,16 +1059,16 @@ function DemoDialog({
|
|
|
994
1059
|
successMessage,
|
|
995
1060
|
validate
|
|
996
1061
|
}) {
|
|
997
|
-
const ref = (0,
|
|
998
|
-
const [form, setForm] = (0,
|
|
999
|
-
const [website, setWebsite] = (0,
|
|
1000
|
-
const [consent, setConsent] = (0,
|
|
1001
|
-
const [busy, setBusy] = (0,
|
|
1002
|
-
const [err, setErr] = (0,
|
|
1003
|
-
const [fieldErrors, setFieldErrors] = (0,
|
|
1004
|
-
const [sent, setSent] = (0,
|
|
1062
|
+
const ref = (0, import_react9.useRef)(null);
|
|
1063
|
+
const [form, setForm] = (0, import_react9.useState)(() => initial(fields2));
|
|
1064
|
+
const [website, setWebsite] = (0, import_react9.useState)("");
|
|
1065
|
+
const [consent, setConsent] = (0, import_react9.useState)(false);
|
|
1066
|
+
const [busy, setBusy] = (0, import_react9.useState)(false);
|
|
1067
|
+
const [err, setErr] = (0, import_react9.useState)("");
|
|
1068
|
+
const [fieldErrors, setFieldErrors] = (0, import_react9.useState)({});
|
|
1069
|
+
const [sent, setSent] = (0, import_react9.useState)(false);
|
|
1005
1070
|
const name = brand ? brand.name : "a";
|
|
1006
|
-
(0,
|
|
1071
|
+
(0, import_react9.useEffect)(() => {
|
|
1007
1072
|
const dlg = ref.current;
|
|
1008
1073
|
if (open && dlg && !dlg.open && typeof dlg.showModal === "function") dlg.showModal();
|
|
1009
1074
|
}, [open]);
|
|
@@ -1038,7 +1103,7 @@ function DemoDialog({
|
|
|
1038
1103
|
};
|
|
1039
1104
|
const first = String(form.name || "").trim().split(/\s+/)[0] || "there";
|
|
1040
1105
|
const thanks = typeof successMessage === "function" ? successMessage(form) : successMessage || `Thanks, ${first}. We have your request. Someone from the ${name} team will call you within one working day to fix a time.`;
|
|
1041
|
-
return /* @__PURE__ */ (0,
|
|
1106
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
1042
1107
|
"dialog",
|
|
1043
1108
|
{
|
|
1044
1109
|
ref,
|
|
@@ -1051,33 +1116,33 @@ function DemoDialog({
|
|
|
1051
1116
|
onClose();
|
|
1052
1117
|
},
|
|
1053
1118
|
children: [
|
|
1054
|
-
/* @__PURE__ */ (0,
|
|
1055
|
-
/* @__PURE__ */ (0,
|
|
1056
|
-
/* @__PURE__ */ (0,
|
|
1119
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "dt-lp-dialog-head", children: [
|
|
1120
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("h2", { id: "dt-demo-title", children: sent ? "Thank you" : title2 || `Book a ${name} demo` }),
|
|
1121
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { type: "button", className: "dt-lp-dialog-x", onClick: onClose, "aria-label": "Close", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Close, { size: 18 }) })
|
|
1057
1122
|
] }),
|
|
1058
|
-
/* @__PURE__ */ (0,
|
|
1059
|
-
/* @__PURE__ */ (0,
|
|
1060
|
-
/* @__PURE__ */ (0,
|
|
1061
|
-
] }) : /* @__PURE__ */ (0,
|
|
1062
|
-
intro2 ? /* @__PURE__ */ (0,
|
|
1063
|
-
err ? /* @__PURE__ */ (0,
|
|
1064
|
-
/* @__PURE__ */ (0,
|
|
1065
|
-
/* @__PURE__ */ (0,
|
|
1123
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "dt-lp-dialog-body", children: sent ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { className: "dt-lp-stack", children: [
|
|
1124
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { role: "status", children: thanks }),
|
|
1125
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("button", { type: "button", className: "dt-lp-btn dt-lp-btn--outline dt-lp-btn--md", onClick: onClose, children: "Close" })
|
|
1126
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("form", { className: "dt-lp-stack", onSubmit: submit, noValidate: true, children: [
|
|
1127
|
+
intro2 ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { className: "dt-lp-muted", children: intro2 }) : null,
|
|
1128
|
+
err ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("p", { role: "alert", className: "dt-lp-error", children: err }) : null,
|
|
1129
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "dt-lp-fields", children: fields2.map((f) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Field, { f, value: form[f.name], onChange: set(f.name), error: fieldErrors[f.name] }, f.name)) }),
|
|
1130
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { "aria-hidden": "true", className: "dt-lp-honeypot", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("label", { children: [
|
|
1066
1131
|
"Website",
|
|
1067
|
-
/* @__PURE__ */ (0,
|
|
1132
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("input", { type: "text", name: "website", tabIndex: -1, autoComplete: "off", value: website, onChange: (e) => setWebsite(e.target.value) })
|
|
1068
1133
|
] }) }),
|
|
1069
|
-
/* @__PURE__ */ (0,
|
|
1070
|
-
/* @__PURE__ */ (0,
|
|
1071
|
-
/* @__PURE__ */ (0,
|
|
1134
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("label", { className: "dt-lp-consent", children: [
|
|
1135
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("input", { type: "checkbox", checked: consent, onChange: (e) => setConsent(e.target.checked) }),
|
|
1136
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: consentText || `I agree that ${fiduciary} may call, message or email me about this demo.` })
|
|
1072
1137
|
] }),
|
|
1073
|
-
privacyHref ? /* @__PURE__ */ (0,
|
|
1138
|
+
privacyHref ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("p", { className: "dt-lp-fineprint", children: [
|
|
1074
1139
|
"Used only to arrange your demo. See the ",
|
|
1075
|
-
/* @__PURE__ */ (0,
|
|
1140
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("a", { href: privacyHref, children: "privacy policy" }),
|
|
1076
1141
|
policyVersion ? ` (v${policyVersion})` : "",
|
|
1077
1142
|
"."
|
|
1078
1143
|
] }) : null,
|
|
1079
|
-
/* @__PURE__ */ (0,
|
|
1080
|
-
/* @__PURE__ */ (0,
|
|
1144
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("button", { type: "submit", className: "dt-lp-btn dt-lp-btn--primary dt-lp-btn--md", disabled: !ready || busy, "aria-busy": busy ? "true" : void 0, children: [
|
|
1145
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Calendar, { size: 16 }),
|
|
1081
1146
|
busy ? "Sending\u2026" : submitLabel
|
|
1082
1147
|
] })
|
|
1083
1148
|
] }) })
|
|
@@ -1087,33 +1152,33 @@ function DemoDialog({
|
|
|
1087
1152
|
}
|
|
1088
1153
|
|
|
1089
1154
|
// src/PageHero.jsx
|
|
1090
|
-
var
|
|
1155
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1091
1156
|
function Breadcrumbs({ items = [] }) {
|
|
1092
1157
|
if (!items.length) return null;
|
|
1093
|
-
return /* @__PURE__ */ (0,
|
|
1158
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("nav", { "aria-label": "Breadcrumb", className: "dt-lp-crumbs", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("ol", { children: items.map((c, i) => {
|
|
1094
1159
|
const last = i === items.length - 1;
|
|
1095
|
-
return /* @__PURE__ */ (0,
|
|
1096
|
-
i > 0 ? /* @__PURE__ */ (0,
|
|
1097
|
-
last || !c.href ? /* @__PURE__ */ (0,
|
|
1160
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("li", { children: [
|
|
1161
|
+
i > 0 ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(ChevronRight, { size: 14 }) : null,
|
|
1162
|
+
last || !c.href ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { "aria-current": last ? "page" : void 0, children: c.label }) : /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(SmartLink, { href: c.href, children: c.label })
|
|
1098
1163
|
] }, `${c.label}-${i}`);
|
|
1099
1164
|
}) }) });
|
|
1100
1165
|
}
|
|
1101
1166
|
function PageHero({ breadcrumbs, eyebrow, title: title2, lead, cta = "Book a demo", secondary }) {
|
|
1102
|
-
return /* @__PURE__ */ (0,
|
|
1103
|
-
/* @__PURE__ */ (0,
|
|
1104
|
-
/* @__PURE__ */ (0,
|
|
1105
|
-
/* @__PURE__ */ (0,
|
|
1106
|
-
lead ? /* @__PURE__ */ (0,
|
|
1107
|
-
/* @__PURE__ */ (0,
|
|
1108
|
-
cta ? /* @__PURE__ */ (0,
|
|
1109
|
-
secondary ? /* @__PURE__ */ (0,
|
|
1167
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("section", { "aria-labelledby": "hero-title", className: "dt-lp-hero dt-lp-hero--page", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(Wrap, { className: "dt-lp-hero-inner dt-lp-hero-inner--start", children: [
|
|
1168
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Breadcrumbs, { items: breadcrumbs }),
|
|
1169
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Eyebrow, { className: "dt-lp-mt-lg", children: eyebrow }),
|
|
1170
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("h1", { id: "hero-title", className: "dt-lp-h1 dt-lp-h1--page", children: title2 }),
|
|
1171
|
+
lead ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { id: "answer", className: "dt-lp-hero-lead", children: lead }) : null,
|
|
1172
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { className: "dt-lp-actions dt-lp-actions--start", children: [
|
|
1173
|
+
cta ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(BookDemoButton, { size: "lg", children: cta }) : null,
|
|
1174
|
+
secondary ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(TextLink, { href: secondary.href, children: secondary.label }) : null
|
|
1110
1175
|
] })
|
|
1111
1176
|
] }) });
|
|
1112
1177
|
}
|
|
1113
1178
|
|
|
1114
1179
|
// src/island.jsx
|
|
1115
1180
|
var import_client = require("react-dom/client");
|
|
1116
|
-
var
|
|
1181
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1117
1182
|
function createDemoIsland(props) {
|
|
1118
1183
|
let root;
|
|
1119
1184
|
let returnTo = null;
|
|
@@ -1132,7 +1197,7 @@ function createDemoIsland(props) {
|
|
|
1132
1197
|
root = (0, import_client.createRoot)(host);
|
|
1133
1198
|
}
|
|
1134
1199
|
const p = typeof props === "function" ? props() : props;
|
|
1135
|
-
root.render(/* @__PURE__ */ (0,
|
|
1200
|
+
root.render(/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(DemoDialog, { ...p, onClose: close }, Date.now()));
|
|
1136
1201
|
},
|
|
1137
1202
|
close
|
|
1138
1203
|
};
|
|
@@ -1291,7 +1356,7 @@ function toLandingBrand(file, copy = {}) {
|
|
|
1291
1356
|
}
|
|
1292
1357
|
|
|
1293
1358
|
// src/tenant/TenantPage.jsx
|
|
1294
|
-
var
|
|
1359
|
+
var import_react12 = require("react");
|
|
1295
1360
|
|
|
1296
1361
|
// src/schema/sections.js
|
|
1297
1362
|
var ICON_NAMES = [
|
|
@@ -1937,10 +2002,10 @@ function themeVars(input) {
|
|
|
1937
2002
|
}
|
|
1938
2003
|
|
|
1939
2004
|
// src/tenant/HeroSlider.jsx
|
|
1940
|
-
var
|
|
2005
|
+
var import_react10 = require("react");
|
|
1941
2006
|
|
|
1942
2007
|
// src/tenant/icons.jsx
|
|
1943
|
-
var
|
|
2008
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1944
2009
|
var base2 = {
|
|
1945
2010
|
viewBox: "0 0 24 24",
|
|
1946
2011
|
fill: "none",
|
|
@@ -1952,88 +2017,88 @@ var base2 = {
|
|
|
1952
2017
|
focusable: "false"
|
|
1953
2018
|
};
|
|
1954
2019
|
var PATHS = {
|
|
1955
|
-
"shield-check": /* @__PURE__ */ (0,
|
|
1956
|
-
/* @__PURE__ */ (0,
|
|
1957
|
-
/* @__PURE__ */ (0,
|
|
2020
|
+
"shield-check": /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2021
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10Z" }),
|
|
2022
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "m9 12 2 2 4-4" })
|
|
1958
2023
|
] }),
|
|
1959
|
-
"badge-check": /* @__PURE__ */ (0,
|
|
1960
|
-
/* @__PURE__ */ (0,
|
|
1961
|
-
/* @__PURE__ */ (0,
|
|
2024
|
+
"badge-check": /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2025
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z" }),
|
|
2026
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "m9 12 2 2 4-4" })
|
|
1962
2027
|
] }),
|
|
1963
|
-
truck: /* @__PURE__ */ (0,
|
|
1964
|
-
/* @__PURE__ */ (0,
|
|
1965
|
-
/* @__PURE__ */ (0,
|
|
1966
|
-
/* @__PURE__ */ (0,
|
|
1967
|
-
/* @__PURE__ */ (0,
|
|
1968
|
-
/* @__PURE__ */ (0,
|
|
2028
|
+
truck: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2029
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M14 18V6a2 2 0 0 0-2-2H4a2 2 0 0 0-2 2v11a1 1 0 0 0 1 1h2" }),
|
|
2030
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M15 18H9" }),
|
|
2031
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M19 18h2a1 1 0 0 0 1-1v-3.65a1 1 0 0 0-.22-.62L18.3 9.38a1 1 0 0 0-.78-.38H14" }),
|
|
2032
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { cx: "17", cy: "18", r: "2" }),
|
|
2033
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { cx: "7", cy: "18", r: "2" })
|
|
1969
2034
|
] }),
|
|
1970
|
-
wrench: /* @__PURE__ */ (0,
|
|
1971
|
-
refresh: /* @__PURE__ */ (0,
|
|
1972
|
-
/* @__PURE__ */ (0,
|
|
1973
|
-
/* @__PURE__ */ (0,
|
|
1974
|
-
/* @__PURE__ */ (0,
|
|
1975
|
-
/* @__PURE__ */ (0,
|
|
2035
|
+
wrench: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z" }),
|
|
2036
|
+
refresh: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2037
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M3 12a9 9 0 0 1 15-6.7L21 8" }),
|
|
2038
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M21 3v5h-5" }),
|
|
2039
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M21 12a9 9 0 0 1-15 6.7L3 16" }),
|
|
2040
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M8 16H3v5" })
|
|
1976
2041
|
] }),
|
|
1977
|
-
battery: /* @__PURE__ */ (0,
|
|
1978
|
-
/* @__PURE__ */ (0,
|
|
1979
|
-
/* @__PURE__ */ (0,
|
|
2042
|
+
battery: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2043
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("rect", { x: "2", y: "7", width: "16", height: "10", rx: "2" }),
|
|
2044
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M22 11v2M6 11v2M10 11v2" })
|
|
1980
2045
|
] }),
|
|
1981
|
-
cpu: /* @__PURE__ */ (0,
|
|
1982
|
-
/* @__PURE__ */ (0,
|
|
1983
|
-
/* @__PURE__ */ (0,
|
|
1984
|
-
/* @__PURE__ */ (0,
|
|
2046
|
+
cpu: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2047
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("rect", { x: "4", y: "4", width: "16", height: "16", rx: "2" }),
|
|
2048
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("rect", { x: "9", y: "9", width: "6", height: "6" }),
|
|
2049
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M15 2v2M15 20v2M2 15h2M2 9h2M20 15h2M20 9h2M9 2v2M9 20v2" })
|
|
1985
2050
|
] }),
|
|
1986
|
-
laptop: /* @__PURE__ */ (0,
|
|
1987
|
-
star: /* @__PURE__ */ (0,
|
|
1988
|
-
headset: /* @__PURE__ */ (0,
|
|
1989
|
-
rupee: /* @__PURE__ */ (0,
|
|
1990
|
-
award: /* @__PURE__ */ (0,
|
|
1991
|
-
/* @__PURE__ */ (0,
|
|
1992
|
-
/* @__PURE__ */ (0,
|
|
2051
|
+
laptop: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M20 16V7a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v9m16 0H4m16 0 1.28 2.55a1 1 0 0 1-.9 1.45H3.62a1 1 0 0 1-.9-1.45L4 16" }),
|
|
2052
|
+
star: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" }),
|
|
2053
|
+
headset: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M3 14h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a9 9 0 0 1 18 0v7a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3" }),
|
|
2054
|
+
rupee: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M6 3h12M6 8h12M6 13l8.5 8M6 13h3M9 13c6.67 0 6.67-10 0-10" }),
|
|
2055
|
+
award: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2056
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { cx: "12", cy: "8", r: "6" }),
|
|
2057
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M15.48 12.89 17 22l-5-3-5 3 1.52-9.11" })
|
|
1993
2058
|
] }),
|
|
1994
|
-
clock: /* @__PURE__ */ (0,
|
|
1995
|
-
/* @__PURE__ */ (0,
|
|
1996
|
-
/* @__PURE__ */ (0,
|
|
2059
|
+
clock: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2060
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
|
|
2061
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M12 6v6l4 2" })
|
|
1997
2062
|
] }),
|
|
1998
|
-
"map-pin": /* @__PURE__ */ (0,
|
|
1999
|
-
/* @__PURE__ */ (0,
|
|
2000
|
-
/* @__PURE__ */ (0,
|
|
2063
|
+
"map-pin": /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2064
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M20 10c0 6-8 12-8 12s-8-6-8-12a8 8 0 0 1 16 0Z" }),
|
|
2065
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { cx: "12", cy: "10", r: "3" })
|
|
2001
2066
|
] }),
|
|
2002
|
-
phone: /* @__PURE__ */ (0,
|
|
2003
|
-
check: /* @__PURE__ */ (0,
|
|
2004
|
-
sparkles: /* @__PURE__ */ (0,
|
|
2005
|
-
/* @__PURE__ */ (0,
|
|
2006
|
-
/* @__PURE__ */ (0,
|
|
2067
|
+
phone: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" }),
|
|
2068
|
+
check: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M20 6 9 17l-5-5" }),
|
|
2069
|
+
sparkles: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2070
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M12 3l1.9 5.1L19 10l-5.1 1.9L12 17l-1.9-5.1L5 10l5.1-1.9L12 3z" }),
|
|
2071
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M5 3v4M3 5h4M19 17v4M17 19h4" })
|
|
2007
2072
|
] }),
|
|
2008
|
-
tag: /* @__PURE__ */ (0,
|
|
2009
|
-
/* @__PURE__ */ (0,
|
|
2010
|
-
/* @__PURE__ */ (0,
|
|
2073
|
+
tag: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2074
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M12.59 2.59A2 2 0 0 0 11.17 2H4a2 2 0 0 0-2 2v7.17a2 2 0 0 0 .59 1.42l8.7 8.7a2.43 2.43 0 0 0 3.42 0l6.58-6.58a2.43 2.43 0 0 0 0-3.42z" }),
|
|
2075
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { cx: "7.5", cy: "7.5", r: "1.5" })
|
|
2011
2076
|
] }),
|
|
2012
|
-
gift: /* @__PURE__ */ (0,
|
|
2013
|
-
/* @__PURE__ */ (0,
|
|
2014
|
-
/* @__PURE__ */ (0,
|
|
2015
|
-
/* @__PURE__ */ (0,
|
|
2077
|
+
gift: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_jsx_runtime23.Fragment, { children: [
|
|
2078
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("rect", { x: "3", y: "8", width: "18", height: "4", rx: "1" }),
|
|
2079
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M12 8v13M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7" }),
|
|
2080
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M7.5 8a2.5 2.5 0 0 1 0-5C10 3 12 8 12 8s2-5 4.5-5a2.5 2.5 0 0 1 0 5" })
|
|
2016
2081
|
] }),
|
|
2017
|
-
heart: /* @__PURE__ */ (0,
|
|
2082
|
+
heart: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z" }),
|
|
2018
2083
|
// Controls (not offered to content).
|
|
2019
|
-
"chevron-left": /* @__PURE__ */ (0,
|
|
2020
|
-
"chevron-right": /* @__PURE__ */ (0,
|
|
2021
|
-
pause: /* @__PURE__ */ (0,
|
|
2022
|
-
play: /* @__PURE__ */ (0,
|
|
2084
|
+
"chevron-left": /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "m15 18-6-6 6-6" }),
|
|
2085
|
+
"chevron-right": /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "m9 18 6-6-6-6" }),
|
|
2086
|
+
pause: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M8 5v14M16 5v14" }),
|
|
2087
|
+
play: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "M7 4.5v15l12-7.5-12-7.5Z" })
|
|
2023
2088
|
};
|
|
2024
2089
|
function NamedIcon({ name, size = 20, className = "dt-lp-icon" }) {
|
|
2025
2090
|
const paths = PATHS[name];
|
|
2026
2091
|
if (!paths) return null;
|
|
2027
|
-
return /* @__PURE__ */ (0,
|
|
2092
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("svg", { ...base2, width: size, height: size, className, children: paths });
|
|
2028
2093
|
}
|
|
2029
2094
|
|
|
2030
2095
|
// src/tenant/HeroSlider.jsx
|
|
2031
|
-
var
|
|
2096
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
2032
2097
|
var reducedMotion = () => typeof window !== "undefined" && window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
2033
2098
|
function Slide({ slide, index, count, active, headingTag: H, media, eager }) {
|
|
2034
2099
|
const wide = media(slide.image, "wide");
|
|
2035
2100
|
const narrow = media(slide.mobile_image, "narrow");
|
|
2036
|
-
return /* @__PURE__ */ (0,
|
|
2101
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
2037
2102
|
"div",
|
|
2038
2103
|
{
|
|
2039
2104
|
className: `dt-lp-slide dt-lp-slide--${slide.align} dt-lp-slide--overlay-${wide || narrow ? slide.overlay : "none"}${wide || narrow ? " dt-lp-slide--image" : ""}`,
|
|
@@ -2043,15 +2108,15 @@ function Slide({ slide, index, count, active, headingTag: H, media, eager }) {
|
|
|
2043
2108
|
"aria-hidden": active ? void 0 : "true",
|
|
2044
2109
|
"data-active": active ? "" : void 0,
|
|
2045
2110
|
children: [
|
|
2046
|
-
wide || narrow ? /* @__PURE__ */ (0,
|
|
2047
|
-
narrow && wide ? /* @__PURE__ */ (0,
|
|
2048
|
-
/* @__PURE__ */ (0,
|
|
2111
|
+
wide || narrow ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("picture", { className: "dt-lp-slide-media", children: [
|
|
2112
|
+
narrow && wide ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("source", { media: "(max-width: 640px)", srcSet: narrow }) : null,
|
|
2113
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("img", { src: wide || narrow, alt: slide.image && slide.image.alt || "", loading: eager ? "eager" : "lazy", decoding: "async" })
|
|
2049
2114
|
] }) : null,
|
|
2050
|
-
/* @__PURE__ */ (0,
|
|
2051
|
-
slide.eyebrow ? /* @__PURE__ */ (0,
|
|
2052
|
-
/* @__PURE__ */ (0,
|
|
2053
|
-
slide.text ? /* @__PURE__ */ (0,
|
|
2054
|
-
slide.cta_label && slide.cta_href ? /* @__PURE__ */ (0,
|
|
2115
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "dt-lp-wrap dt-lp-slide-body", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "dt-lp-slide-copy", children: [
|
|
2116
|
+
slide.eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "dt-lp-eyebrow dt-lp-slide-eyebrow", children: slide.eyebrow }) : null,
|
|
2117
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(H, { className: "dt-lp-slide-heading", children: slide.heading }),
|
|
2118
|
+
slide.text ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "dt-lp-slide-text", children: slide.text }) : null,
|
|
2119
|
+
slide.cta_label && slide.cta_href ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(SmartLink, { href: slide.cta_href, className: "dt-lp-btn dt-lp-btn--lg dt-lp-btn--primary dt-lp-slide-cta", tabIndex: active ? void 0 : -1, children: slide.cta_label }) : null
|
|
2055
2120
|
] }) })
|
|
2056
2121
|
]
|
|
2057
2122
|
}
|
|
@@ -2059,20 +2124,20 @@ function Slide({ slide, index, count, active, headingTag: H, media, eager }) {
|
|
|
2059
2124
|
}
|
|
2060
2125
|
function HeroSlider({ id, slides = [], height = "standard", autoplay = true, interval = "6", first = false, media }) {
|
|
2061
2126
|
const count = slides.length;
|
|
2062
|
-
const [index, setIndex] = (0,
|
|
2063
|
-
const [playing, setPlaying] = (0,
|
|
2064
|
-
const [hold, setHold] = (0,
|
|
2065
|
-
const touch = (0,
|
|
2066
|
-
const go = (0,
|
|
2067
|
-
(0,
|
|
2127
|
+
const [index, setIndex] = (0, import_react10.useState)(0);
|
|
2128
|
+
const [playing, setPlaying] = (0, import_react10.useState)(false);
|
|
2129
|
+
const [hold, setHold] = (0, import_react10.useState)(false);
|
|
2130
|
+
const touch = (0, import_react10.useRef)(null);
|
|
2131
|
+
const go = (0, import_react10.useCallback)((i) => setIndex((i % count + count) % count), [count]);
|
|
2132
|
+
(0, import_react10.useEffect)(() => {
|
|
2068
2133
|
setPlaying(Boolean(autoplay) && count > 1 && !reducedMotion());
|
|
2069
2134
|
}, [autoplay, count]);
|
|
2070
|
-
(0,
|
|
2135
|
+
(0, import_react10.useEffect)(() => {
|
|
2071
2136
|
if (!playing || hold || count < 2) return void 0;
|
|
2072
2137
|
const t = setTimeout(() => go(index + 1), Math.max(3, Number(interval) || 6) * 1e3);
|
|
2073
2138
|
return () => clearTimeout(t);
|
|
2074
2139
|
}, [playing, hold, index, interval, count, go]);
|
|
2075
|
-
(0,
|
|
2140
|
+
(0, import_react10.useEffect)(() => {
|
|
2076
2141
|
if (index >= count) setIndex(0);
|
|
2077
2142
|
}, [count, index]);
|
|
2078
2143
|
if (!count) return null;
|
|
@@ -2095,7 +2160,7 @@ function HeroSlider({ id, slides = [], height = "standard", autoplay = true, int
|
|
|
2095
2160
|
touch.current = null;
|
|
2096
2161
|
if (Math.abs(dx) > 40) go(index + (dx < 0 ? 1 : -1));
|
|
2097
2162
|
};
|
|
2098
|
-
return /* @__PURE__ */ (0,
|
|
2163
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
|
|
2099
2164
|
"section",
|
|
2100
2165
|
{
|
|
2101
2166
|
id,
|
|
@@ -2110,12 +2175,12 @@ function HeroSlider({ id, slides = [], height = "standard", autoplay = true, int
|
|
|
2110
2175
|
onTouchStart,
|
|
2111
2176
|
onTouchEnd,
|
|
2112
2177
|
children: [
|
|
2113
|
-
/* @__PURE__ */ (0,
|
|
2114
|
-
count > 1 ? /* @__PURE__ */ (0,
|
|
2115
|
-
/* @__PURE__ */ (0,
|
|
2116
|
-
/* @__PURE__ */ (0,
|
|
2117
|
-
/* @__PURE__ */ (0,
|
|
2118
|
-
autoplay ? /* @__PURE__ */ (0,
|
|
2178
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "dt-lp-slides", "aria-live": playing && !hold ? "off" : "polite", children: slides.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Slide, { slide: s, index: i, count, active: i === index, eager: i === 0, headingTag: first && i === 0 ? "h1" : "h2", media }, i)) }),
|
|
2179
|
+
count > 1 ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "dt-lp-slider-controls", children: [
|
|
2180
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { type: "button", className: "dt-lp-slider-btn", "aria-label": "Previous slide", onClick: () => go(index - 1), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(NamedIcon, { name: "chevron-left", size: 20 }) }),
|
|
2181
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "dt-lp-slider-dots", children: slides.map((s, i) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { type: "button", className: "dt-lp-slider-dot", "aria-label": `Go to slide ${i + 1}`, "aria-current": i === index ? "true" : void 0, onClick: () => go(i) }, i)) }),
|
|
2182
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { type: "button", className: "dt-lp-slider-btn", "aria-label": "Next slide", onClick: () => go(index + 1), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(NamedIcon, { name: "chevron-right", size: 20 }) }),
|
|
2183
|
+
autoplay ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("button", { type: "button", className: "dt-lp-slider-btn", "aria-label": playing ? "Pause slides" : "Play slides", onClick: () => setPlaying((p) => !p), children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(NamedIcon, { name: playing ? "pause" : "play", size: 18 }) }) : null
|
|
2119
2184
|
] }) : null
|
|
2120
2185
|
]
|
|
2121
2186
|
}
|
|
@@ -2123,70 +2188,70 @@ function HeroSlider({ id, slides = [], height = "standard", autoplay = true, int
|
|
|
2123
2188
|
}
|
|
2124
2189
|
|
|
2125
2190
|
// src/tenant/blocks.jsx
|
|
2126
|
-
var
|
|
2127
|
-
var
|
|
2191
|
+
var import_react11 = require("react");
|
|
2192
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
2128
2193
|
var hid = (id) => `${id}-title`;
|
|
2129
|
-
var Heading = ({ id, title: title2, intro: intro2, align = "center" }) => title2 ? /* @__PURE__ */ (0,
|
|
2194
|
+
var Heading = ({ id, title: title2, intro: intro2, align = "center" }) => title2 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SectionIntro, { id: hid(id), title: title2, body: intro2, align }) : null;
|
|
2130
2195
|
function SlotSection({ id, title: title2, intro: intro2, tone: tone2, slot, ...props }) {
|
|
2131
2196
|
const body = typeof slot === "function" ? slot({ title: title2, intro: intro2, ...props }) : slot;
|
|
2132
2197
|
if (!body) return null;
|
|
2133
|
-
return /* @__PURE__ */ (0,
|
|
2134
|
-
/* @__PURE__ */ (0,
|
|
2135
|
-
/* @__PURE__ */ (0,
|
|
2198
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: title2 ? hid(id) : void 0, tone: tone2, className: "dt-lp-slot", children: [
|
|
2199
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Heading, { id, title: title2, intro: intro2, align: "start" }),
|
|
2200
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "dt-lp-slot-body", children: body })
|
|
2136
2201
|
] });
|
|
2137
2202
|
}
|
|
2138
2203
|
function PromoBanner({ id, eyebrow, heading: heading2, text, cta_label: label, cta_href: href, image, style = "brand", media }) {
|
|
2139
2204
|
const src = media(image, "wide");
|
|
2140
|
-
return /* @__PURE__ */ (0,
|
|
2141
|
-
/* @__PURE__ */ (0,
|
|
2142
|
-
eyebrow ? /* @__PURE__ */ (0,
|
|
2143
|
-
/* @__PURE__ */ (0,
|
|
2144
|
-
text ? /* @__PURE__ */ (0,
|
|
2145
|
-
label && href ? /* @__PURE__ */ (0,
|
|
2205
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("section", { id, "aria-labelledby": hid(id), className: "dt-lp-section dt-lp-promo-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "dt-lp-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: `dt-lp-promo dt-lp-promo--${style}${src ? " dt-lp-promo--image" : ""}`, children: [
|
|
2206
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "dt-lp-promo-copy", children: [
|
|
2207
|
+
eyebrow ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "dt-lp-eyebrow dt-lp-eyebrow--inverse", children: eyebrow }) : null,
|
|
2208
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { id: hid(id), className: "dt-lp-h2 dt-lp-promo-heading", children: heading2 }),
|
|
2209
|
+
text ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "dt-lp-promo-text", children: text }) : null,
|
|
2210
|
+
label && href ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SmartLink, { href, className: "dt-lp-btn dt-lp-btn--lg dt-lp-btn--inverse", children: label }) : null
|
|
2146
2211
|
] }),
|
|
2147
|
-
src ? /* @__PURE__ */ (0,
|
|
2212
|
+
src ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { className: "dt-lp-promo-img", src, alt: image.alt || "", loading: "lazy", decoding: "async" }) : null
|
|
2148
2213
|
] }) }) });
|
|
2149
2214
|
}
|
|
2150
2215
|
function TrustBadges({ id, title: title2, intro: intro2, items = [], tone: tone2 }) {
|
|
2151
|
-
return /* @__PURE__ */ (0,
|
|
2152
|
-
/* @__PURE__ */ (0,
|
|
2153
|
-
/* @__PURE__ */ (0,
|
|
2154
|
-
/* @__PURE__ */ (0,
|
|
2155
|
-
/* @__PURE__ */ (0,
|
|
2156
|
-
/* @__PURE__ */ (0,
|
|
2157
|
-
it.text ? /* @__PURE__ */ (0,
|
|
2216
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: title2 ? hid(id) : void 0, tone: tone2, children: [
|
|
2217
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Heading, { id, title: title2, intro: intro2 }),
|
|
2218
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "dt-lp-tgrid dt-lp-tgrid--4", children: items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("li", { className: "dt-lp-card dt-lp-tcard", children: [
|
|
2219
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "dt-lp-icon-tile", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(NamedIcon, { name: it.icon, size: 22 }) }),
|
|
2220
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "dt-lp-card-text", children: [
|
|
2221
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h3", { className: "dt-lp-h3", children: it.title }),
|
|
2222
|
+
it.text ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { children: it.text }) : null
|
|
2158
2223
|
] })
|
|
2159
2224
|
] }, i)) })
|
|
2160
2225
|
] });
|
|
2161
2226
|
}
|
|
2162
2227
|
function CtaCards({ id, title: title2, items = [], tone: tone2 }) {
|
|
2163
|
-
return /* @__PURE__ */ (0,
|
|
2164
|
-
/* @__PURE__ */ (0,
|
|
2165
|
-
/* @__PURE__ */ (0,
|
|
2166
|
-
/* @__PURE__ */ (0,
|
|
2167
|
-
/* @__PURE__ */ (0,
|
|
2168
|
-
/* @__PURE__ */ (0,
|
|
2169
|
-
it.text ? /* @__PURE__ */ (0,
|
|
2170
|
-
it.cta_label ? /* @__PURE__ */ (0,
|
|
2228
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: title2 ? hid(id) : void 0, tone: tone2, children: [
|
|
2229
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Heading, { id, title: title2 }),
|
|
2230
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: `dt-lp-tgrid dt-lp-tgrid--${Math.min(items.length, 4) || 1}`, children: items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(SmartLink, { href: it.cta_href, className: "dt-lp-card dt-lp-tcard dt-lp-ctacard", children: [
|
|
2231
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "dt-lp-icon-tile", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(NamedIcon, { name: it.icon, size: 22 }) }),
|
|
2232
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "dt-lp-card-text", children: [
|
|
2233
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h3", { className: "dt-lp-h3", children: it.title }),
|
|
2234
|
+
it.text ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { children: it.text }) : null,
|
|
2235
|
+
it.cta_label ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "dt-lp-textlink", children: [
|
|
2171
2236
|
it.cta_label,
|
|
2172
2237
|
" ",
|
|
2173
|
-
/* @__PURE__ */ (0,
|
|
2238
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(NamedIcon, { name: "chevron-right", size: 16 })
|
|
2174
2239
|
] }) : null
|
|
2175
2240
|
] })
|
|
2176
2241
|
] }) }, i)) })
|
|
2177
2242
|
] });
|
|
2178
2243
|
}
|
|
2179
2244
|
function Testimonials({ id, title: title2, items = [], tone: tone2 }) {
|
|
2180
|
-
return /* @__PURE__ */ (0,
|
|
2181
|
-
/* @__PURE__ */ (0,
|
|
2182
|
-
/* @__PURE__ */ (0,
|
|
2245
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: title2 ? hid(id) : void 0, tone: tone2, children: [
|
|
2246
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Heading, { id, title: title2 }),
|
|
2247
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "dt-lp-tgrid dt-lp-tgrid--3", children: items.map((it, i) => {
|
|
2183
2248
|
const stars = Math.max(1, Math.min(5, Number(it.rating) || 5));
|
|
2184
|
-
return /* @__PURE__ */ (0,
|
|
2185
|
-
/* @__PURE__ */ (0,
|
|
2186
|
-
/* @__PURE__ */ (0,
|
|
2187
|
-
/* @__PURE__ */ (0,
|
|
2188
|
-
/* @__PURE__ */ (0,
|
|
2189
|
-
it.detail ? /* @__PURE__ */ (0,
|
|
2249
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("li", { className: "dt-lp-card dt-lp-quote", children: [
|
|
2250
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "dt-lp-stars", "aria-label": `${stars} out of 5 stars`, children: Array.from({ length: 5 }, (_, s) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { "aria-hidden": "true", className: s < stars ? "dt-lp-star dt-lp-star--on" : "dt-lp-star", children: "\u2605" }, s)) }),
|
|
2251
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("blockquote", { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { children: it.quote }) }),
|
|
2252
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("p", { className: "dt-lp-quote-by", children: [
|
|
2253
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("strong", { children: it.name }),
|
|
2254
|
+
it.detail ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { children: [
|
|
2190
2255
|
" \xB7 ",
|
|
2191
2256
|
it.detail
|
|
2192
2257
|
] }) : null
|
|
@@ -2196,36 +2261,36 @@ function Testimonials({ id, title: title2, items = [], tone: tone2 }) {
|
|
|
2196
2261
|
] });
|
|
2197
2262
|
}
|
|
2198
2263
|
function FaqSection({ id, title: title2, intro: intro2, items = [], tone: tone2 }) {
|
|
2199
|
-
return /* @__PURE__ */ (0,
|
|
2264
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Faq, { id, title: title2, intro: intro2, items, tone: tone2, openFirst: true });
|
|
2200
2265
|
}
|
|
2201
2266
|
function RichText({ id, title: title2, html, width = "narrow", tone: tone2 }) {
|
|
2202
|
-
return /* @__PURE__ */ (0,
|
|
2203
|
-
title2 ? /* @__PURE__ */ (0,
|
|
2204
|
-
/* @__PURE__ */ (0,
|
|
2267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: title2 ? hid(id) : void 0, tone: tone2, narrow: width === "narrow", children: [
|
|
2268
|
+
title2 ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("h2", { id: hid(id), className: "dt-lp-h2", children: title2 }) : null,
|
|
2269
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "dt-lp-prose", dangerouslySetInnerHTML: { __html: sanitizeRichText(html) } })
|
|
2205
2270
|
] });
|
|
2206
2271
|
}
|
|
2207
2272
|
function UspStrip({ id, items = [], tone: tone2 = "tinted" }) {
|
|
2208
|
-
return /* @__PURE__ */ (0,
|
|
2209
|
-
/* @__PURE__ */ (0,
|
|
2210
|
-
/* @__PURE__ */ (0,
|
|
2211
|
-
/* @__PURE__ */ (0,
|
|
2212
|
-
it.text ? /* @__PURE__ */ (0,
|
|
2273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("section", { id, "aria-label": "Highlights", className: `dt-lp-usp dt-lp-tone--${tone2}`, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "dt-lp-wrap", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "dt-lp-usp-list", children: items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("li", { className: "dt-lp-usp-item", children: [
|
|
2274
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(NamedIcon, { name: it.icon, size: 20, className: "dt-lp-icon dt-lp-usp-icon" }),
|
|
2275
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { children: [
|
|
2276
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("strong", { children: it.title }),
|
|
2277
|
+
it.text ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "dt-lp-usp-text", children: it.text }) : null
|
|
2213
2278
|
] })
|
|
2214
2279
|
] }, i)) }) }) });
|
|
2215
2280
|
}
|
|
2216
2281
|
function BrandStrip({ id, title: title2, items = [], tone: tone2, media }) {
|
|
2217
|
-
return /* @__PURE__ */ (0,
|
|
2218
|
-
/* @__PURE__ */ (0,
|
|
2219
|
-
/* @__PURE__ */ (0,
|
|
2282
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: title2 ? hid(id) : void 0, tone: tone2, className: "dt-lp-brands", children: [
|
|
2283
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Heading, { id, title: title2 }),
|
|
2284
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: "dt-lp-brand-list", children: items.map((it, i) => {
|
|
2220
2285
|
const src = media(it.logo, "logo");
|
|
2221
|
-
return /* @__PURE__ */ (0,
|
|
2286
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { className: "dt-lp-brand-item", children: src ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { src, alt: it.name, loading: "lazy", decoding: "async" }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: it.name }) }, i);
|
|
2222
2287
|
}) })
|
|
2223
2288
|
] });
|
|
2224
2289
|
}
|
|
2225
2290
|
function Newsletter({ id, title: title2, text, button_label: button, consent_text: consentText, success_text: success, tone: tone2, onSubscribe }) {
|
|
2226
|
-
const [email, setEmail] = (0,
|
|
2227
|
-
const [consent, setConsent] = (0,
|
|
2228
|
-
const [state, setState] = (0,
|
|
2291
|
+
const [email, setEmail] = (0, import_react11.useState)("");
|
|
2292
|
+
const [consent, setConsent] = (0, import_react11.useState)(false);
|
|
2293
|
+
const [state, setState] = (0, import_react11.useState)({ status: "idle", message: "" });
|
|
2229
2294
|
const submit = async (e) => {
|
|
2230
2295
|
e.preventDefault();
|
|
2231
2296
|
if (!onSubscribe) return;
|
|
@@ -2237,36 +2302,36 @@ function Newsletter({ id, title: title2, text, button_label: button, consent_tex
|
|
|
2237
2302
|
setState({ status: "error", message: err && err.message || "Could not subscribe. Please try again." });
|
|
2238
2303
|
}
|
|
2239
2304
|
};
|
|
2240
|
-
return /* @__PURE__ */ (0,
|
|
2241
|
-
/* @__PURE__ */ (0,
|
|
2242
|
-
state.status === "done" ? /* @__PURE__ */ (0,
|
|
2243
|
-
/* @__PURE__ */ (0,
|
|
2244
|
-
/* @__PURE__ */ (0,
|
|
2245
|
-
/* @__PURE__ */ (0,
|
|
2246
|
-
/* @__PURE__ */ (0,
|
|
2305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: hid(id), tone: tone2, narrow: true, children: [
|
|
2306
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(SectionIntro, { id: hid(id), title: title2, body: text, align: "center" }),
|
|
2307
|
+
state.status === "done" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "dt-lp-news-done", role: "status", children: state.message }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("form", { className: "dt-lp-news", onSubmit: submit, children: [
|
|
2308
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "dt-lp-news-row", children: [
|
|
2309
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("label", { className: "dt-lp-sr", htmlFor: `${id}-email`, children: "Email" }),
|
|
2310
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("input", { id: `${id}-email`, type: "email", required: true, autoComplete: "email", placeholder: "you@example.com", value: email, onChange: (e) => setEmail(e.target.value), className: "dt-lp-input" }),
|
|
2311
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("button", { type: "submit", className: "dt-lp-btn dt-lp-btn--md dt-lp-btn--primary", disabled: !consent || state.status === "busy", "aria-busy": state.status === "busy" ? "true" : void 0, children: button })
|
|
2247
2312
|
] }),
|
|
2248
|
-
/* @__PURE__ */ (0,
|
|
2249
|
-
/* @__PURE__ */ (0,
|
|
2250
|
-
/* @__PURE__ */ (0,
|
|
2313
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("label", { className: "dt-lp-news-consent", children: [
|
|
2314
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("input", { type: "checkbox", checked: consent, onChange: (e) => setConsent(e.target.checked), required: true }),
|
|
2315
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { children: consentText })
|
|
2251
2316
|
] }),
|
|
2252
|
-
state.status === "error" ? /* @__PURE__ */ (0,
|
|
2317
|
+
state.status === "error" ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "dt-lp-news-error", role: "alert", children: state.message }) : null
|
|
2253
2318
|
] })
|
|
2254
2319
|
] });
|
|
2255
2320
|
}
|
|
2256
2321
|
function Gallery({ id, title: title2, items = [], columns = "3", tone: tone2, media }) {
|
|
2257
2322
|
const shown = items.map((it) => ({ ...it, src: media(it.image, "gallery") })).filter((it) => it.src);
|
|
2258
2323
|
if (!shown.length) return null;
|
|
2259
|
-
return /* @__PURE__ */ (0,
|
|
2260
|
-
/* @__PURE__ */ (0,
|
|
2261
|
-
/* @__PURE__ */ (0,
|
|
2262
|
-
/* @__PURE__ */ (0,
|
|
2263
|
-
it.caption ? /* @__PURE__ */ (0,
|
|
2324
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(Section, { id, labelledBy: title2 ? hid(id) : void 0, tone: tone2, children: [
|
|
2325
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Heading, { id, title: title2 }),
|
|
2326
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("ul", { className: `dt-lp-gallery dt-lp-gallery--${columns}`, children: shown.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("li", { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("figure", { children: [
|
|
2327
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("img", { src: it.src, alt: it.image.alt || it.caption || "", loading: "lazy", decoding: "async" }),
|
|
2328
|
+
it.caption ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("figcaption", { children: it.caption }) : null
|
|
2264
2329
|
] }) }, i)) })
|
|
2265
2330
|
] });
|
|
2266
2331
|
}
|
|
2267
2332
|
|
|
2268
2333
|
// src/tenant/TenantPage.jsx
|
|
2269
|
-
var
|
|
2334
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2270
2335
|
var TENANT_BLOCKS = {
|
|
2271
2336
|
hero_slider: HeroSlider,
|
|
2272
2337
|
featured: SlotSection,
|
|
@@ -2282,7 +2347,7 @@ var TENANT_BLOCKS = {
|
|
|
2282
2347
|
newsletter: Newsletter,
|
|
2283
2348
|
gallery: Gallery
|
|
2284
2349
|
};
|
|
2285
|
-
var SectionBoundary = class extends
|
|
2350
|
+
var SectionBoundary = class extends import_react12.Component {
|
|
2286
2351
|
constructor(props) {
|
|
2287
2352
|
super(props);
|
|
2288
2353
|
this.state = { failed: false };
|
|
@@ -2306,20 +2371,20 @@ function TenantPage({
|
|
|
2306
2371
|
className = "",
|
|
2307
2372
|
headingStart = 1
|
|
2308
2373
|
}) {
|
|
2309
|
-
const doc = (0,
|
|
2310
|
-
const vars = (0,
|
|
2311
|
-
const ctx = (0,
|
|
2374
|
+
const doc = (0, import_react12.useMemo)(() => validatePage(page).page, [page]);
|
|
2375
|
+
const vars = (0, import_react12.useMemo)(() => themeVars(theme), [theme]);
|
|
2376
|
+
const ctx = (0, import_react12.useMemo)(() => ({ brand: { id: "tenant", name: storeName, primary: vars.theme.primary }, linkComponent, onBookDemo: null, home: true }), [storeName, vars.theme.primary, linkComponent]);
|
|
2312
2377
|
const media = (ref, variant) => ref && ref.media_id != null ? resolveMedia(ref, variant) : null;
|
|
2313
2378
|
const visible = doc.sections.filter((s) => s.enabled && TENANT_BLOCKS[s.type]);
|
|
2314
|
-
return /* @__PURE__ */ (0,
|
|
2379
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(LandingProvider, { value: ctx, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: `dt-landing dt-lp-tenant ${className}`.trim(), style: vars.style, "data-theme": vars.theme.mode === "auto" ? void 0 : vars.theme.mode, children: visible.map((s, i) => {
|
|
2315
2380
|
const Block = TENANT_BLOCKS[s.type];
|
|
2316
|
-
return /* @__PURE__ */ (0,
|
|
2381
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(SectionBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Block, { ...s.props, id: `s-${s.id}`, first: i === 0 && headingStart === 1, media, slot: slots[s.type], onSubscribe }) }, s.id);
|
|
2317
2382
|
}) }) });
|
|
2318
2383
|
}
|
|
2319
2384
|
|
|
2320
2385
|
// src/tenant/TemplateRegion.jsx
|
|
2321
|
-
var
|
|
2322
|
-
var
|
|
2386
|
+
var import_react13 = require("react");
|
|
2387
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
2323
2388
|
var noMedia2 = () => null;
|
|
2324
2389
|
function TemplateRegion({
|
|
2325
2390
|
blocks = [],
|
|
@@ -2330,17 +2395,17 @@ function TemplateRegion({
|
|
|
2330
2395
|
storeName = "",
|
|
2331
2396
|
className = ""
|
|
2332
2397
|
}) {
|
|
2333
|
-
const vars = (0,
|
|
2334
|
-
const ctx = (0,
|
|
2398
|
+
const vars = (0, import_react13.useMemo)(() => themeVars(theme), [theme]);
|
|
2399
|
+
const ctx = (0, import_react13.useMemo)(() => ({ brand: { id: "tenant", name: storeName, primary: vars.theme.primary }, linkComponent, onBookDemo: null, home: false }), [storeName, vars.theme.primary, linkComponent]);
|
|
2335
2400
|
const media = (ref, variant) => ref && ref.media_id != null ? resolveMedia(ref, variant) : null;
|
|
2336
|
-
return /* @__PURE__ */ (0,
|
|
2401
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react13.Fragment, { children: blocks.filter((b) => b && b.enabled !== false).map((b) => {
|
|
2337
2402
|
const Slot = slots[b.type];
|
|
2338
2403
|
if (Slot) {
|
|
2339
|
-
return /* @__PURE__ */ (0,
|
|
2404
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SectionBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Slot, { block: b, props: b.props || {} }) }, b.id);
|
|
2340
2405
|
}
|
|
2341
2406
|
const Block = TENANT_BLOCKS[b.type];
|
|
2342
2407
|
if (!Block || Block === TENANT_BLOCKS.featured) return null;
|
|
2343
|
-
return /* @__PURE__ */ (0,
|
|
2408
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(SectionBoundary, { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(LandingProvider, { value: ctx, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: `dt-landing dt-lp-tenant dt-lp-region ${className}`.trim(), style: vars.style, "data-block": b.type, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Block, { ...b.props, id: `b-${b.id}`, first: false, media, slot: null, onSubscribe: null }) }) }) }, b.id);
|
|
2344
2409
|
}) });
|
|
2345
2410
|
}
|
|
2346
2411
|
|