@octaviaflow/core 3.1.0-beta.70 → 3.1.0-beta.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/marketing.js CHANGED
@@ -258,6 +258,10 @@ function BetaAccessForm({
258
258
  teamSizes,
259
259
  plans,
260
260
  defaultPlan,
261
+ useCases,
262
+ showDetails = false,
263
+ detailsLabel = "Anything else we should know?",
264
+ detailsPlaceholder = "Current stack, timelines, must-have connectors\u2026",
261
265
  submitLabel = "Request access \u2192",
262
266
  footnote = "NO CREDIT CARD \xB7 SSO & SELF-HOSTING AVAILABLE",
263
267
  onSubmit,
@@ -272,7 +276,9 @@ function BetaAccessForm({
272
276
  name: "",
273
277
  company: "",
274
278
  teamSize: "",
275
- plan: defaultPlan ?? ""
279
+ plan: defaultPlan ?? "",
280
+ useCase: "",
281
+ details: ""
276
282
  });
277
283
  const [phase, setPhase] = useState("idle");
278
284
  const [error, setError] = useState(null);
@@ -291,6 +297,10 @@ function BetaAccessForm({
291
297
  setError("Please select your team size.");
292
298
  return;
293
299
  }
300
+ if (fields === "full" && useCases?.length && !values.useCase) {
301
+ setError("Please select your primary use case.");
302
+ return;
303
+ }
294
304
  setError(null);
295
305
  setPhase("submitting");
296
306
  try {
@@ -414,6 +424,43 @@ function BetaAccessForm({
414
424
  }
415
425
  )
416
426
  ] }),
427
+ fields === "full" && useCases && useCases.length > 0 && /* @__PURE__ */ jsxs3("div", { className: "ods-mkt-access__field", children: [
428
+ /* @__PURE__ */ jsx3("span", { className: "ods-mkt-access__label", id: `${uid}-usecase-label`, children: "Primary use case" }),
429
+ /* @__PURE__ */ jsx3(
430
+ Select,
431
+ {
432
+ "aria-labelledby": `${uid}-usecase-label`,
433
+ placeholder: "Select a use case\u2026",
434
+ options: useCases.map((useCase) => ({ value: useCase, label: useCase })),
435
+ value: values.useCase ?? "",
436
+ onChange: (useCase) => setValues((v) => ({ ...v, useCase })),
437
+ disabled: busy
438
+ }
439
+ )
440
+ ] }),
441
+ fields === "full" && showDetails && /* @__PURE__ */ jsxs3("div", { className: "ods-mkt-access__field ods-mkt-access__field--wide", children: [
442
+ /* @__PURE__ */ jsx3(
443
+ "label",
444
+ {
445
+ className: "ods-mkt-access__label",
446
+ id: `${uid}-details-label`,
447
+ htmlFor: `${uid}-details`,
448
+ children: detailsLabel
449
+ }
450
+ ),
451
+ /* @__PURE__ */ jsx3(
452
+ Textarea,
453
+ {
454
+ id: `${uid}-details`,
455
+ "aria-labelledby": `${uid}-details-label`,
456
+ placeholder: detailsPlaceholder,
457
+ rows: 3,
458
+ value: values.details ?? "",
459
+ onChange: (e) => setValues((v) => ({ ...v, details: e.target.value })),
460
+ disabled: busy
461
+ }
462
+ )
463
+ ] }),
417
464
  /* @__PURE__ */ jsx3(
418
465
  Button,
419
466
  {
@@ -1193,7 +1240,24 @@ function MarketingHero({
1193
1240
  }
1194
1241
 
1195
1242
  // src/marketing/components/MarketingNav/MarketingNav.tsx
1243
+ import { useState as useState4 } from "react";
1196
1244
  import { Fragment as Fragment3, jsx as jsx16, jsxs as jsxs15 } from "react/jsx-runtime";
1245
+ function BurgerGlyph({ open }) {
1246
+ return /* @__PURE__ */ jsx16(
1247
+ "svg",
1248
+ {
1249
+ viewBox: "0 0 24 24",
1250
+ width: "20",
1251
+ height: "20",
1252
+ fill: "none",
1253
+ stroke: "currentColor",
1254
+ strokeWidth: "2",
1255
+ strokeLinecap: "round",
1256
+ "aria-hidden": "true",
1257
+ children: open ? /* @__PURE__ */ jsx16("path", { d: "M6 6l12 12M18 6 6 18" }) : /* @__PURE__ */ jsx16("path", { d: "M4 7h16M4 12h16M4 17h16" })
1258
+ }
1259
+ );
1260
+ }
1197
1261
  function MarketingNav({
1198
1262
  brand,
1199
1263
  brandHref = "/",
@@ -1203,6 +1267,7 @@ function MarketingNav({
1203
1267
  className,
1204
1268
  ...rest
1205
1269
  }) {
1270
+ const [mobileOpen, setMobileOpen] = useState4(false);
1206
1271
  return /* @__PURE__ */ jsxs15("header", { ...rest, className: cn("ods-mkt-nav", sticky && "ods-mkt-nav--sticky", className), children: [
1207
1272
  /* @__PURE__ */ jsx16("a", { className: "ods-mkt-nav__brand", href: brandHref, children: brand ?? /* @__PURE__ */ jsxs15(Fragment3, { children: [
1208
1273
  /* @__PURE__ */ jsx16(BrandMark, {}),
@@ -1218,7 +1283,35 @@ function MarketingNav({
1218
1283
  },
1219
1284
  link.href
1220
1285
  )) }),
1221
- actions && /* @__PURE__ */ jsx16("div", { className: "ods-mkt-nav__actions", children: actions })
1286
+ actions && /* @__PURE__ */ jsx16("div", { className: "ods-mkt-nav__actions", children: actions }),
1287
+ (links.length > 0 || actions) && /* @__PURE__ */ jsx16(
1288
+ "button",
1289
+ {
1290
+ type: "button",
1291
+ className: "ods-mkt-nav__toggle",
1292
+ "aria-expanded": mobileOpen,
1293
+ "aria-label": "Toggle menu",
1294
+ onClick: () => setMobileOpen((open) => !open),
1295
+ children: /* @__PURE__ */ jsx16(BurgerGlyph, { open: mobileOpen })
1296
+ }
1297
+ ),
1298
+ mobileOpen && /* @__PURE__ */ jsxs15("nav", { className: "ods-mkt-nav__mobile", "aria-label": "Main", children: [
1299
+ links.map((link) => /* @__PURE__ */ jsx16(
1300
+ "a",
1301
+ {
1302
+ href: link.href,
1303
+ className: cn(
1304
+ "ods-mkt-nav__mobile-link",
1305
+ link.active && "ods-mkt-nav__mobile-link--active"
1306
+ ),
1307
+ "aria-current": link.active ? "page" : void 0,
1308
+ onClick: () => setMobileOpen(false),
1309
+ children: link.label
1310
+ },
1311
+ link.href
1312
+ )),
1313
+ actions && /* @__PURE__ */ jsx16("div", { className: "ods-mkt-nav__mobile-actions", children: actions })
1314
+ ] })
1222
1315
  ] });
1223
1316
  }
1224
1317
 
@@ -1404,11 +1497,11 @@ import {
1404
1497
  useEffect as useEffect2,
1405
1498
  useMemo as useMemo2,
1406
1499
  useRef as useRef2,
1407
- useState as useState6
1500
+ useState as useState7
1408
1501
  } from "react";
1409
1502
 
1410
1503
  // src/marketing/components/WorkflowShowcase/ShowcaseScene.tsx
1411
- import { useEffect, useRef, useState as useState4 } from "react";
1504
+ import { useEffect, useRef, useState as useState5 } from "react";
1412
1505
  import { jsx as jsx22, jsxs as jsxs20 } from "react/jsx-runtime";
1413
1506
  function slots(n) {
1414
1507
  return Array.from({ length: n }, (_, i) => 208 + (i - (n - 1) / 2) * 80);
@@ -1481,7 +1574,7 @@ function ShowcaseScene({
1481
1574
  caption,
1482
1575
  onCoreClick
1483
1576
  }) {
1484
- const [pulse, setPulse] = useState4(false);
1577
+ const [pulse, setPulse] = useState5(false);
1485
1578
  const pulseTimer = useRef(null);
1486
1579
  useEffect(
1487
1580
  () => () => {
@@ -1714,7 +1807,7 @@ function ShowcaseScene({
1714
1807
 
1715
1808
  // src/marketing/components/WorkflowShowcase/ShowcaseSignup.tsx
1716
1809
  import { AnimatePresence, motion as motion2, useReducedMotion as useReducedMotion3 } from "framer-motion";
1717
- import { useId as useId3, useState as useState5 } from "react";
1810
+ import { useId as useId3, useState as useState6 } from "react";
1718
1811
  import { FocusScope } from "react-aria";
1719
1812
  import { jsx as jsx23, jsxs as jsxs21 } from "react/jsx-runtime";
1720
1813
  var OVERLAY_MOTION = {
@@ -1736,7 +1829,7 @@ function ShowcaseSignup({
1736
1829
  const reducedMotion = useReducedMotion3();
1737
1830
  const titleId = useId3();
1738
1831
  const subtitleId = useId3();
1739
- const [values, setValues] = useState5({
1832
+ const [values, setValues] = useState6({
1740
1833
  name: "",
1741
1834
  email: "",
1742
1835
  company: "",
@@ -1954,21 +2047,21 @@ function WorkflowShowcase({
1954
2047
  }) {
1955
2048
  const reducedMotion = useReducedMotion4();
1956
2049
  const rotationActive = rotatePrompts && !defaultPrompt && examples.length > 0;
1957
- const [prompt, setPrompt] = useState6(
2050
+ const [prompt, setPrompt] = useState7(
1958
2051
  defaultPrompt || (rotationActive ? examples[0]?.prompt ?? "" : "")
1959
2052
  );
1960
- const [engagedWithPrompt, setEngagedWithPrompt] = useState6(false);
1961
- const [promptHovered, setPromptHovered] = useState6(false);
1962
- const [promptFocused, setPromptFocused] = useState6(false);
2053
+ const [engagedWithPrompt, setEngagedWithPrompt] = useState7(false);
2054
+ const [promptHovered, setPromptHovered] = useState7(false);
2055
+ const [promptFocused, setPromptFocused] = useState7(false);
1963
2056
  const rotateIdx = useRef2(0);
1964
- const [selected, setSelected] = useState6([]);
1965
- const [phase, setPhase] = useState6("idle");
1966
- const [shown, setShown] = useState6(0);
1967
- const [status, setStatus] = useState6("");
1968
- const [pickerOpen, setPickerOpen] = useState6(false);
1969
- const [schedIdx, setSchedIdx] = useState6(0);
1970
- const [swap, setSwap] = useState6(null);
1971
- const [signupError, setSignupError] = useState6(null);
2057
+ const [selected, setSelected] = useState7([]);
2058
+ const [phase, setPhase] = useState7("idle");
2059
+ const [shown, setShown] = useState7(0);
2060
+ const [status, setStatus] = useState7("");
2061
+ const [pickerOpen, setPickerOpen] = useState7(false);
2062
+ const [schedIdx, setSchedIdx] = useState7(0);
2063
+ const [swap, setSwap] = useState7(null);
2064
+ const [signupError, setSignupError] = useState7(null);
1972
2065
  const signupReturnPhase = useRef2("done");
1973
2066
  const cardRef = useRef2(null);
1974
2067
  const timers = useRef2([]);
@@ -2009,7 +2102,7 @@ function WorkflowShowcase({
2009
2102
  const manualSchedule = schedules[schedIdx];
2010
2103
  const scheduleShown = inferredSchedule ?? (manualSchedule === "AUTO" ? "HOURLY" : manualSchedule);
2011
2104
  const triggers = WORKFLOW_SHOWCASE_TRIGGERS;
2012
- const [triggerIdx, setTriggerIdx] = useState6(0);
2105
+ const [triggerIdx, setTriggerIdx] = useState7(0);
2013
2106
  const manualTrigger = triggers[triggerIdx];
2014
2107
  const cadenceShown = manualTrigger === "SCHEDULE" ? scheduleShown : manualTrigger;
2015
2108
  useEffect2(() => {