@flamingo-stack/openframe-frontend-core 0.0.749 → 0.0.751

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.
Files changed (68) hide show
  1. package/dist/{chunk-45YRDD7W.cjs → chunk-4WNBVNGP.cjs} +13 -13
  2. package/dist/{chunk-SOPVUD2Y.cjs → chunk-53I4YHRT.cjs} +3 -3
  3. package/dist/{chunk-HOEVD6EN.cjs → chunk-5P7WBA2U.cjs} +4 -4
  4. package/dist/{chunk-KRAQEZPB.cjs → chunk-5WC535NJ.cjs} +17 -17
  5. package/dist/{chunk-SGL47BS2.cjs → chunk-77IKUBSH.cjs} +6 -6
  6. package/dist/{chunk-E3KFEOFA.cjs → chunk-CVBHB4OZ.cjs} +4 -4
  7. package/dist/{chunk-CXV7VBSI.cjs → chunk-ESRA7NUI.cjs} +41 -41
  8. package/dist/{chunk-2J2OBP4N.cjs → chunk-H52GKJ36.cjs} +9 -9
  9. package/dist/{chunk-G7SBHMRR.cjs → chunk-KHKPLOU4.cjs} +69 -39
  10. package/dist/{chunk-SECT4H34.cjs → chunk-LIGDPFDM.cjs} +227 -172
  11. package/dist/{chunk-LQT2ITMG.cjs → chunk-MJFTWHV6.cjs} +4 -4
  12. package/dist/{chunk-ZLF55RDR.cjs → chunk-MU7FFN6M.cjs} +34 -34
  13. package/dist/{chunk-OZLIKBKC.cjs → chunk-NOUROZYH.cjs} +13 -13
  14. package/dist/{chunk-GOFEOCQN.cjs → chunk-QOONZMSQ.cjs} +9 -9
  15. package/dist/{chunk-VEVIMDNK.cjs → chunk-RVLQHSID.cjs} +70 -70
  16. package/dist/{chunk-BN6NA5RM.cjs → chunk-SDOCZTST.cjs} +32 -32
  17. package/dist/{chunk-V3UJ6NDR.cjs → chunk-TPH4SRR2.cjs} +6 -6
  18. package/dist/{chunk-4FWURR3W.cjs → chunk-VUWPLQBY.cjs} +2 -2
  19. package/dist/{chunk-WZX26ODJ.cjs → chunk-X4LAMJHD.cjs} +54 -35
  20. package/dist/{cloud-tenants-2MYFHEYY.cjs → cloud-tenants-JDPC2DYF.cjs} +6 -6
  21. package/dist/components/case-studies/index.cjs +16 -16
  22. package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts +7 -5
  23. package/dist/components/chat/hooks/use-jetstream-dialog-subscription.d.ts.map +1 -1
  24. package/dist/components/chat/hooks/use-jetstream-dialog-subscription.js +33 -14
  25. package/dist/components/chat/index.cjs +4 -4
  26. package/dist/components/chat/types/api.types.d.ts +27 -8
  27. package/dist/components/chat/types/api.types.d.ts.map +1 -1
  28. package/dist/components/chat/types/network.types.d.ts +2 -1
  29. package/dist/components/chat/types/network.types.d.ts.map +1 -1
  30. package/dist/components/contact/index.cjs +7 -7
  31. package/dist/components/docs/index.cjs +10 -10
  32. package/dist/components/embeds/index.cjs +7 -7
  33. package/dist/components/faq/index.cjs +8 -8
  34. package/dist/components/features/auth/login-form.d.ts +34 -21
  35. package/dist/components/features/auth/login-form.d.ts.map +1 -1
  36. package/dist/components/features/auth/login-form.js +77 -39
  37. package/dist/components/features/auth/sso-providers.d.ts +7 -1
  38. package/dist/components/features/auth/sso-providers.d.ts.map +1 -1
  39. package/dist/components/features/auth/sso-providers.js +22 -4
  40. package/dist/components/features/index.cjs +6 -6
  41. package/dist/components/help-center-pages/index.cjs +67 -67
  42. package/dist/components/index.cjs +39 -39
  43. package/dist/components/meeting-scheduler/index.cjs +29 -29
  44. package/dist/components/navigation/index.cjs +9 -9
  45. package/dist/components/onboarding-guides/index.cjs +8 -8
  46. package/dist/components/product-demo/index.cjs +7 -7
  47. package/dist/components/tickets/index.cjs +11 -11
  48. package/dist/components/ui/index.cjs +6 -6
  49. package/dist/{devices-FVXAGKVX.cjs → devices-ADQWD37J.cjs} +7 -7
  50. package/dist/{embeddable-chat-SNYQSMS7.cjs → embeddable-chat-7YF2JMPS.cjs} +65 -65
  51. package/dist/hooks/index.cjs +3 -3
  52. package/dist/index.cjs +10 -10
  53. package/dist/{knowledge-ZL3ZHBSL.cjs → knowledge-TNS64EGK.cjs} +7 -7
  54. package/dist/{logs-KQCWDIOB.cjs → logs-754MDDE4.cjs} +14 -14
  55. package/dist/nats/index.cjs +2 -2
  56. package/dist/nats/nats.d.ts +33 -7
  57. package/dist/nats/nats.d.ts.map +1 -1
  58. package/dist/nats/nats.js +41 -11
  59. package/dist/{policies-ARDCZ3CT.cjs → policies-Q23DPIH6.cjs} +10 -10
  60. package/dist/{scripts-ZAMVWCY4.cjs → scripts-DCYLK2RZ.cjs} +11 -11
  61. package/dist/{software-update-6F7BIYS3.cjs → software-update-XCMGUIER.cjs} +9 -9
  62. package/package.json +1 -1
  63. package/src/components/chat/hooks/use-jetstream-dialog-subscription.ts +59 -23
  64. package/src/components/chat/types/api.types.ts +27 -8
  65. package/src/components/chat/types/network.types.ts +2 -1
  66. package/src/components/features/auth/login-form.tsx +121 -64
  67. package/src/components/features/auth/sso-providers.tsx +21 -0
  68. package/src/nats/nats.ts +91 -20
@@ -51,7 +51,7 @@ var _chunkDEY6XXGOcjs = require('./chunk-DEY6XXGO.cjs');
51
51
 
52
52
 
53
53
 
54
- var _chunk4FWURR3Wcjs = require('./chunk-4FWURR3W.cjs');
54
+ var _chunkVUWPLQBYcjs = require('./chunk-VUWPLQBY.cjs');
55
55
 
56
56
 
57
57
 
@@ -109,7 +109,7 @@ var _chunkYUMFVQINcjs = require('./chunk-YUMFVQIN.cjs');
109
109
 
110
110
 
111
111
 
112
- var _chunkWZX26ODJcjs = require('./chunk-WZX26ODJ.cjs');
112
+ var _chunkX4LAMJHDcjs = require('./chunk-X4LAMJHD.cjs');
113
113
 
114
114
 
115
115
 
@@ -131,7 +131,7 @@ var _chunkWZX26ODJcjs = require('./chunk-WZX26ODJ.cjs');
131
131
 
132
132
 
133
133
 
134
- var _chunkV3UJ6NDRcjs = require('./chunk-V3UJ6NDR.cjs');
134
+ var _chunkTPH4SRR2cjs = require('./chunk-TPH4SRR2.cjs');
135
135
 
136
136
 
137
137
 
@@ -664,7 +664,7 @@ function ThemeProvider({ children, ...overrides }) {
664
664
  var useTheme = _nextthemes.useTheme;
665
665
  function useThemeToggle() {
666
666
  const { resolvedTheme, theme, setTheme } = useTheme();
667
- const mounted = _chunkV3UJ6NDRcjs.useIsHydrated.call(void 0, );
667
+ const mounted = _chunkTPH4SRR2cjs.useIsHydrated.call(void 0, );
668
668
  const active = mounted ? resolvedTheme === "light" || theme === "light" ? "light" : "dark" : DEFAULT_THEME;
669
669
  const setOdsTheme = _react.useCallback.call(void 0, (next) => setTheme(next), [setTheme]);
670
670
  const toggle = _react.useCallback.call(void 0, () => setTheme(active === "dark" ? "light" : "dark"), [active, setTheme]);
@@ -2332,7 +2332,7 @@ function InfoCardFooter({ footer }) {
2332
2332
  ] });
2333
2333
  }
2334
2334
  function InfoCardValueRow({ label, value, showLabel, copyable, icon, copyAriaLabel }) {
2335
- const { copy, copied } = _chunk4FWURR3Wcjs.useCopyToClipboard.call(void 0, );
2335
+ const { copy, copied } = _chunkVUWPLQBYcjs.useCopyToClipboard.call(void 0, );
2336
2336
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex h-6 w-full items-center gap-[var(--spacing-system-xs)] self-stretch", children: [
2337
2337
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "whitespace-nowrap text-ods-text-primary text-h4", children: showLabel ? label : "" }),
2338
2338
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-px flex-1 bg-ods-divider" }),
@@ -4360,7 +4360,7 @@ function AdminFormDrawer({
4360
4360
  "form",
4361
4361
  {
4362
4362
  id: formId,
4363
- ..._chunkWZX26ODJcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4363
+ ..._chunkX4LAMJHDcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4364
4364
  className: "flex flex-col gap-[var(--spacing-system-lf)]",
4365
4365
  onSubmit: (e) => {
4366
4366
  e.preventDefault();
@@ -4467,7 +4467,7 @@ function AdminFormModal({
4467
4467
  "form",
4468
4468
  {
4469
4469
  id: formId,
4470
- ..._chunkWZX26ODJcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4470
+ ..._chunkX4LAMJHDcjs.HUBSPOT_DO_NOT_COLLECT_FORM_PROPS,
4471
4471
  className: "flex min-h-0 flex-1 flex-col",
4472
4472
  onSubmit: (e) => {
4473
4473
  e.preventDefault();
@@ -5780,7 +5780,7 @@ function EmbedViewerFrame({
5780
5780
  const controllerRef = _react.useRef.call(void 0, null);
5781
5781
  _react.useEffect.call(void 0, () => {
5782
5782
  if (!fullscreenControl) return void 0;
5783
- const controller = new (0, _chunkWZX26ODJcjs.FullscreenSwitchController)({
5783
+ const controller = new (0, _chunkX4LAMJHDcjs.FullscreenSwitchController)({
5784
5784
  target: () => frameRef.current,
5785
5785
  onFullscreenChange: setIsFullscreen
5786
5786
  });
@@ -5874,7 +5874,7 @@ var KIND_HEADING = {
5874
5874
  design: "Claude Design"
5875
5875
  };
5876
5876
  function ClaudeEmbed({ url, kind = "artifact", title, height, loading = "lazy" }) {
5877
- const { src: mirrorSrc, status } = _chunk4FWURR3Wcjs.useClaudeMirrorSrc.call(void 0, url);
5877
+ const { src: mirrorSrc, status } = _chunkVUWPLQBYcjs.useClaudeMirrorSrc.call(void 0, url);
5878
5878
  const isProbing = status === "probing";
5879
5879
  const embedUrl = isProbing ? null : _nullishCoalesce(mirrorSrc, () => ( _chunkW2RM764Dcjs.toClaudeEmbedUrl.call(void 0, url)));
5880
5880
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -6977,7 +6977,7 @@ var formatTimeAgo = (timestamp) => {
6977
6977
  return `${Math.floor(diffSeconds / 86400)}d ago`;
6978
6978
  };
6979
6979
  function RedditEmbedClient({ url, maxWidth = 700, rel }) {
6980
- const postLinkRel = _chunkV3UJ6NDRcjs.renderedLinkRel.call(void 0, rel, true);
6980
+ const postLinkRel = _chunkTPH4SRR2cjs.renderedLinkRel.call(void 0, rel, true);
6981
6981
  const { redditProxyUrl } = useRichMarkdownRuntime();
6982
6982
  const [redditData, setRedditData] = _react.useState.call(void 0, null);
6983
6983
  const [loading, setLoading] = _react.useState.call(void 0, true);
@@ -7309,7 +7309,7 @@ var UserIcon3 = () => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "svg", { wid
7309
7309
  ] });
7310
7310
  var XIcon = () => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2TEMEXDTcjs.XLogoIcon, { className: "h-5 w-5", color: "currentColor" });
7311
7311
  function TwitterEmbedClient({ url, tweetId, maxWidth = 700, rel }) {
7312
- const postLinkRel = _chunkV3UJ6NDRcjs.renderedLinkRel.call(void 0, rel, true);
7312
+ const postLinkRel = _chunkTPH4SRR2cjs.renderedLinkRel.call(void 0, rel, true);
7313
7313
  const { twitterProxyUrl } = useRichMarkdownRuntime();
7314
7314
  const [tweetData, setTweetData] = _react.useState.call(void 0, null);
7315
7315
  const [fetchLoading, setLoading] = _react.useState.call(void 0, true);
@@ -7511,7 +7511,7 @@ function buildRichEmbedOverrides({
7511
7511
  ogEndpointPath,
7512
7512
  textSizes
7513
7513
  }) {
7514
- const standard = _chunkV3UJ6NDRcjs.buildStandardLeafRenderers.call(void 0, { textSizes });
7514
+ const standard = _chunkTPH4SRR2cjs.buildStandardLeafRenderers.call(void 0, { textSizes });
7515
7515
  return {
7516
7516
  // Fence-language embeds (```youtube-embed etc.); everything else
7517
7517
  // (mermaid, highlighted blocks, inline code) falls through to `standard`.
@@ -7647,13 +7647,13 @@ function buildRichEmbedOverrides({
7647
7647
  // rich-markdown runtime (Supabase optimization on the hub, identity
7648
7648
  // elsewhere). Guard against empty `![]()`.
7649
7649
  img: ({ src, alt }) => {
7650
- if (!_chunkV3UJ6NDRcjs.hasRenderableSrc.call(void 0, src)) return null;
7650
+ if (!_chunkTPH4SRR2cjs.hasRenderableSrc.call(void 0, src)) return null;
7651
7651
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, MarkdownImage, { src: src.trim(), alt });
7652
7652
  },
7653
7653
  // Raw <video> tags in stored content (blog publisher injection) route
7654
7654
  // to the <Video> SSOT (MuxPlayer) so HLS manifests play everywhere.
7655
7655
  video: ({ src, poster, className }) => {
7656
- if (!_chunkV3UJ6NDRcjs.hasRenderableSrc.call(void 0, src)) return null;
7656
+ if (!_chunkTPH4SRR2cjs.hasRenderableSrc.call(void 0, src)) return null;
7657
7657
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `overflow-hidden ${className || "my-8 w-full rounded-lg"}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "aspect-video w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkOFO75R2Ocjs.Video, { kind: "file", url: src.trim(), poster: typeof poster === "string" ? poster : void 0 }) }) });
7658
7658
  }
7659
7659
  };
@@ -7762,7 +7762,7 @@ var processShortcodes = (content) => {
7762
7762
  try {
7763
7763
  const urlObj = new URL(url);
7764
7764
  const hostname = urlObj.hostname.toLowerCase();
7765
- const hostIs = (domain) => _chunkWZX26ODJcjs.hostMatches.call(void 0, hostname, domain);
7765
+ const hostIs = (domain) => _chunkX4LAMJHDcjs.hostMatches.call(void 0, hostname, domain);
7766
7766
  const isYouTubeVideo = hostIs("youtube.com") && urlObj.searchParams.has("v") || hostIs("youtu.be");
7767
7767
  if (isYouTubeVideo || hostIs("reddit.com") || hostIs("twitter.com") || hostIs("x.com") || hostIs("figma.com")) {
7768
7768
  return match;
@@ -7837,13 +7837,13 @@ var RichMarkdownInner = ({
7837
7837
  },
7838
7838
  [resolveLinkEndpointUrl, resolveSource]
7839
7839
  );
7840
- const textSizes = _react.useMemo.call(void 0, () => _chunkV3UJ6NDRcjs.resolveTextSizeConfig.call(void 0, "article"), []);
7840
+ const textSizes = _react.useMemo.call(void 0, () => _chunkTPH4SRR2cjs.resolveTextSizeConfig.call(void 0, "article"), []);
7841
7841
  const componentOverrides = _react.useMemo.call(void 0,
7842
7842
  () => buildRichEmbedOverrides({ ogApiBaseUrl, ogEndpointPath, textSizes }),
7843
7843
  [ogApiBaseUrl, ogEndpointPath, textSizes]
7844
7844
  );
7845
7845
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
7846
- _chunkV3UJ6NDRcjs.MarkdownEngine,
7846
+ _chunkTPH4SRR2cjs.MarkdownEngine,
7847
7847
  {
7848
7848
  content,
7849
7849
  className,
@@ -7865,7 +7865,7 @@ var RichMarkdownRendererImpl = ({
7865
7865
  className = "",
7866
7866
  sectionIds,
7867
7867
  onInternalLinkClick,
7868
- brokenLinks = _chunkV3UJ6NDRcjs.NO_BROKEN_LINKS,
7868
+ brokenLinks = _chunkTPH4SRR2cjs.NO_BROKEN_LINKS,
7869
7869
  currentPath,
7870
7870
  resolveSource = "openframe-docs",
7871
7871
  resolveLinkEndpointUrl = "/api/docs/resolve-link",
@@ -8833,7 +8833,7 @@ function FilterModal({
8833
8833
  const dateDefaultSort = _nullishCoalesce(_optionalChain([dateFilter, 'optionalAccess', _147 => _147.defaultSort]), () => ( "desc"));
8834
8834
  const [draftDateSort, setDraftDateSort] = _react.useState.call(void 0, _nullishCoalesce(_optionalChain([dateFilter, 'optionalAccess', _148 => _148.sort]), () => ( dateDefaultSort)));
8835
8835
  const [draftDateRange, setDraftDateRange] = _react.useState.call(void 0, _optionalChain([dateFilter, 'optionalAccess', _149 => _149.range]));
8836
- const { scrollRef, fadeTop, fadeBottom, update: updateFade } = _chunkV3UJ6NDRcjs.useScrollFade.call(void 0, );
8836
+ const { scrollRef, fadeTop, fadeBottom, update: updateFade } = _chunkTPH4SRR2cjs.useScrollFade.call(void 0, );
8837
8837
  const seedKey = `${JSON.stringify(currentFilters)}|${JSON.stringify(_nullishCoalesce(selectedTags, () => ( [])))}`;
8838
8838
  const seedSourceRef = _react.useRef.call(void 0, { currentFilters, selectedTags, dateFilter, dateDefaultSort });
8839
8839
  _react.useEffect.call(void 0, () => {
@@ -8979,8 +8979,8 @@ function FilterModal({
8979
8979
  ] })
8980
8980
  }
8981
8981
  ),
8982
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkV3UJ6NDRcjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop }),
8983
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkV3UJ6NDRcjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom })
8982
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPH4SRR2cjs.ScrollFadeOverlay, { edge: "top", visible: fadeTop }),
8983
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPH4SRR2cjs.ScrollFadeOverlay, { edge: "bottom", visible: fadeBottom })
8984
8984
  ] })
8985
8985
  }
8986
8986
  ),
@@ -9459,7 +9459,7 @@ var BenefitCardGrid = ({ children, className = "", columns = 2 }) => {
9459
9459
 
9460
9460
 
9461
9461
  function PlatformBrowseButton({ item }) {
9462
- const linkProps = _chunkV3UJ6NDRcjs.useNavLinkViaRuntime.call(void 0, { href: item.link, targetPlatform: item.targetPlatform });
9462
+ const linkProps = _chunkTPH4SRR2cjs.useNavLinkViaRuntime.call(void 0, { href: item.link, targetPlatform: item.targetPlatform });
9463
9463
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunk2QMBXGMQcjs.Button, { variant: "outline", linkProps, rightIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ExternalLink, { className: "h-4 w-4" }), children: [
9464
9464
  "Browse ",
9465
9465
  item.buttonText
@@ -9926,10 +9926,10 @@ var OSTypeBadge = ({
9926
9926
  if (!osType) {
9927
9927
  return labelOnly ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "text-ods-text-secondary", className), children: "Unknown" }) : null;
9928
9928
  }
9929
- const normalized = _chunkWZX26ODJcjs.normalizeOSType.call(void 0, osType);
9929
+ const normalized = _chunkX4LAMJHDcjs.normalizeOSType.call(void 0, osType);
9930
9930
  if (!normalized && !labelOnly) return null;
9931
- const label = _chunkWZX26ODJcjs.getOSLabel.call(void 0, osType);
9932
- const IconComponent = _chunkWZX26ODJcjs.getOSIcon.call(void 0, osType);
9931
+ const label = _chunkX4LAMJHDcjs.getOSLabel.call(void 0, osType);
9932
+ const IconComponent = _chunkX4LAMJHDcjs.getOSIcon.call(void 0, osType);
9933
9933
  if (iconOnly && IconComponent) {
9934
9934
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, IconComponent, { className: _chunk3ATAYP36cjs.cn.call(void 0, iconSize, "text-ods-text-secondary", className) });
9935
9935
  }
@@ -10170,7 +10170,7 @@ function ComplianceLogo({
10170
10170
  fallback = null,
10171
10171
  className
10172
10172
  }) {
10173
- const standard = _chunkWZX26ODJcjs.complianceStandardForName.call(void 0, ...names);
10173
+ const standard = _chunkX4LAMJHDcjs.complianceStandardForName.call(void 0, ...names);
10174
10174
  if (!standard) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, { children: fallback });
10175
10175
  const Official = standard.logo ? COMPLIANCE_LOGOS[standard.logo] : null;
10176
10176
  return Official ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -10913,7 +10913,7 @@ function ServiceCard({ title, subtitle, icon, tag, rows, className }) {
10913
10913
  }
10914
10914
  function ServiceCardRowItem({ row }) {
10915
10915
  const [revealed, setRevealed] = _react.useState.call(void 0, false);
10916
- const { copy, copied } = _chunk4FWURR3Wcjs.useCopyToClipboard.call(void 0, );
10916
+ const { copy, copied } = _chunkVUWPLQBYcjs.useCopyToClipboard.call(void 0, );
10917
10917
  const { ref: valueRef, isTruncated: valueTruncated } = _chunkKTPR66EEcjs.useIsTruncated.call(void 0, row.value);
10918
10918
  const actions = _react.useMemo.call(void 0,
10919
10919
  () => ({ copy: true, open: !!row.href, reveal: !!row.isSecret, ...row.actions }),
@@ -11787,7 +11787,7 @@ function TableHeader({
11787
11787
  onFilterChange
11788
11788
  }
11789
11789
  ),
11790
- column.hint ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZX26ODJcjs.InfoHint, { label: column.label, children: column.hint }) : null
11790
+ column.hint ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX4LAMJHDcjs.InfoHint, { label: column.label, children: column.hint }) : null
11791
11791
  ] })
11792
11792
  ) : (
11793
11793
  /* Non-filterable column — regular label with optional sort */
@@ -11813,7 +11813,7 @@ function TableHeader({
11813
11813
  hint exists, so a hint-less header keeps its DOM. */
11814
11814
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex min-w-0 items-start gap-[var(--spacing-system-xxs)]", children: [
11815
11815
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: TABLE_HEADER_LABEL_CLASS, children: column.label }),
11816
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZX26ODJcjs.InfoHint, { label: column.label, children: column.hint })
11816
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX4LAMJHDcjs.InfoHint, { label: column.label, children: column.hint })
11817
11817
  ] })
11818
11818
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: TABLE_HEADER_LABEL_CLASS, children: column.label }),
11819
11819
  getSortIcon(column)
@@ -13162,7 +13162,7 @@ function HeaderCell({ header, sort, onSortChange }) {
13162
13162
  // child of the cell.
13163
13163
  _optionalChain([meta, 'optionalAccess', _235 => _235.hint]) ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-start gap-[var(--spacing-system-xxs)]", children: [
13164
13164
  filterTrigger,
13165
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZX26ODJcjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
13165
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX4LAMJHDcjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
13166
13166
  ] }) : filterTrigger
13167
13167
  ) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
13168
13168
  "div",
@@ -13187,7 +13187,7 @@ function HeaderCell({ header, sort, onSortChange }) {
13187
13187
  // centred on the row.
13188
13188
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex min-w-0 items-start gap-[var(--spacing-system-xxs)]", children: [
13189
13189
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderLabel, { header }),
13190
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZX26ODJcjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
13190
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX4LAMJHDcjs.InfoHint, { label: resolveHeaderLabel(header), children: meta.hint })
13191
13191
  ] })
13192
13192
  ) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, HeaderLabel, { header }),
13193
13193
  canSort && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, SortIcon, { sorted: sortDir })
@@ -13407,7 +13407,7 @@ function PhoneInput({
13407
13407
  placeholder = "Phone Number (optional)",
13408
13408
  onKeyDown
13409
13409
  }) {
13410
- const { priority, others } = _react.useMemo.call(void 0, () => _chunkWZX26ODJcjs.getCountryPhoneData.call(void 0, ), []);
13410
+ const { priority, others } = _react.useMemo.call(void 0, () => _chunkX4LAMJHDcjs.getCountryPhoneData.call(void 0, ), []);
13411
13411
  const selectedCountry = _react.useMemo.call(void 0,
13412
13412
  () => [...priority, ...others].find((c) => c.code === countryCode),
13413
13413
  [countryCode, priority, others]
@@ -13422,7 +13422,7 @@ function PhoneInput({
13422
13422
  _optionalChain([onValidationChange, 'optionalCall', _248 => _248(false)]);
13423
13423
  return;
13424
13424
  }
13425
- const invalid = !_chunkWZX26ODJcjs.validatePhoneNumber.call(void 0, phone, countryCode);
13425
+ const invalid = !_chunkX4LAMJHDcjs.validatePhoneNumber.call(void 0, phone, countryCode);
13426
13426
  setIsInvalid(invalid);
13427
13427
  _optionalChain([onValidationChange, 'optionalCall', _249 => _249(invalid)]);
13428
13428
  },
@@ -14281,7 +14281,7 @@ function MarkdownLinkDialog({ isOpen, initial, editing, onSubmit, onRemove, onCl
14281
14281
  ),
14282
14282
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-xsf)]", children: [
14283
14283
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
14284
- _chunkV3UJ6NDRcjs.TabSelector,
14284
+ _chunkTPH4SRR2cjs.TabSelector,
14285
14285
  {
14286
14286
  label: "Search engines",
14287
14287
  value: choice,
@@ -14338,7 +14338,7 @@ function useMarkdownLinkCommand() {
14338
14338
  buttonProps: { "aria-label": "Add or edit a link (ctrl + l)", title: "Add or edit a link (ctrl + l)" },
14339
14339
  icon: command.icon,
14340
14340
  execute: (state, api) => {
14341
- const existing = _chunkV3UJ6NDRcjs.findMarkdownLinkAt.call(void 0, state.text, state.selection.start, state.selection.end);
14341
+ const existing = _chunkTPH4SRR2cjs.findMarkdownLinkAt.call(void 0, state.text, state.selection.start, state.selection.end);
14342
14342
  setPending(
14343
14343
  existing ? {
14344
14344
  api,
@@ -14369,7 +14369,7 @@ function useMarkdownLinkCommand() {
14369
14369
  initial: _nullishCoalesce(_optionalChain([pending, 'optionalAccess', _306 => _306.initial]), () => ( EMPTY_LINK)),
14370
14370
  editing: _nullishCoalesce(_optionalChain([pending, 'optionalAccess', _307 => _307.editing]), () => ( false)),
14371
14371
  onSubmit: (link) => {
14372
- if (pending) write(pending, _chunkV3UJ6NDRcjs.formatMarkdownLink.call(void 0, link));
14372
+ if (pending) write(pending, _chunkTPH4SRR2cjs.formatMarkdownLink.call(void 0, link));
14373
14373
  },
14374
14374
  onRemove: () => {
14375
14375
  if (pending) write(pending, pending.initial.text);
@@ -15680,7 +15680,7 @@ var SKELETON_COLUMNS = 6;
15680
15680
  function TestResultsSkeleton({
15681
15681
  region = true
15682
15682
  } = {}) {
15683
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUGCRLRCTcjs.LoadingRegion, { label: "Loading the test results", announce: region, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkV3UJ6NDRcjs.ScrollShadow, { axis: "horizontal", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-max min-w-full flex-col", children: [
15683
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkUGCRLRCTcjs.LoadingRegion, { label: "Loading the test results", announce: region, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPH4SRR2cjs.ScrollShadow, { axis: "horizontal", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-max min-w-full flex-col", children: [
15684
15684
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)]", children: Array.from({ length: SKELETON_COLUMNS }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-12 w-[160px] shrink-0 items-center", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2YXOD2KLcjs.UnifiedSkeleton, { className: "h-4 w-3/4 rounded-sm" }) }, `skeleton-header-${i}`)) }),
15685
15685
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "overflow-hidden rounded-[6px] border border-ods-border bg-ods-card", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex h-[66px] items-center gap-[var(--spacing-system-mf)] px-[var(--spacing-system-mf)] content-md:h-[78px]", children: Array.from({ length: SKELETON_COLUMNS }).map((_, i) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "w-[160px] shrink-0", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2YXOD2KLcjs.UnifiedSkeleton, { className: "h-5 w-3/4 rounded-sm" }) }, `skeleton-cell-${i}`)) }) })
15686
15686
  ] }) }) });
@@ -15715,13 +15715,13 @@ function TestResultsTable({ rows, loading }) {
15715
15715
  if (loading) {
15716
15716
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TestResultsSkeleton, {});
15717
15717
  }
15718
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkV3UJ6NDRcjs.ScrollShadow, { axis: "horizontal", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: { minWidth: Math.max(1, columnKeys.length) * RESULT_COLUMN_MIN_WIDTH }, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DataTable, { table, children: [
15718
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPH4SRR2cjs.ScrollShadow, { axis: "horizontal", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { style: { minWidth: Math.max(1, columnKeys.length) * RESULT_COLUMN_MIN_WIDTH }, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, DataTable, { table, children: [
15719
15719
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.Header, { className: "flex flex-col" }),
15720
15720
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, DataTable.Body, { loading: false })
15721
15721
  ] }) }) });
15722
15722
  }
15723
15723
  function TestRunErrorBanner({ error, className }) {
15724
- const { copy } = _chunk4FWURR3Wcjs.useCopyToClipboard.call(void 0, { successDescription: "Error message copied to clipboard" });
15724
+ const { copy } = _chunkVUWPLQBYcjs.useCopyToClipboard.call(void 0, { successDescription: "Error message copied to clipboard" });
15725
15725
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
15726
15726
  "div",
15727
15727
  {
@@ -16198,7 +16198,7 @@ function TicketInfoSection({
16198
16198
  expanded && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
16199
16199
  createdAt && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "grid grid-cols-2 items-center gap-4 border-b border-ods-border bg-ods-bg px-4 py-3", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, InfoCell, { value: createdAt, label: "Created" }) }),
16200
16200
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-col gap-4 border-b border-ods-border bg-ods-bg p-4", children: [
16201
- description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkV3UJ6NDRcjs.SimpleMarkdownRenderer, { content: description }),
16201
+ description && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPH4SRR2cjs.SimpleMarkdownRenderer, { content: description }),
16202
16202
  attachments && attachments.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketDetailSection, { label: "Attachments", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketAttachmentsList, { attachments }) }),
16203
16203
  tags && tags.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketDetailSection, { label: "Tags", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex min-w-0 flex-wrap gap-2", children: tags.map((tag) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJHQNUWFMcjs.Tag, { label: tag, variant: "outline", className: "max-w-full" }, tag)) }) }),
16204
16204
  (notes || onAddNote) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TicketDetailSection, { label: "Notes", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -16658,7 +16658,7 @@ function PhotoWall({ images, columns = 2, speed = 24, fadeColor, className, load
16658
16658
  gap: COLUMN_GAP_PX
16659
16659
  };
16660
16660
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { ref: rootRef, "aria-hidden": "true", className: _chunk3ATAYP36cjs.cn.call(void 0, "grid overflow-hidden", className), style: gridStyle, children: columnsToDraw ? columnsToDraw.map((column, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
16661
- _chunkV3UJ6NDRcjs.MarqueeWall,
16661
+ _chunkTPH4SRR2cjs.MarqueeWall,
16662
16662
  {
16663
16663
  axis: "y",
16664
16664
  reverse: index % 2 === 1,
@@ -17070,7 +17070,7 @@ var TRIAL_TERM_ICONS = {
17070
17070
  };
17071
17071
  var DEFAULT_TRIAL_TERMS = ["cancel", "length", "noContract"];
17072
17072
  function trialBenefits(trialDays, terms = DEFAULT_TRIAL_TERMS) {
17073
- const labels = _chunkWZX26ODJcjs.trialLabels.call(void 0, trialDays);
17073
+ const labels = _chunkX4LAMJHDcjs.trialLabels.call(void 0, trialDays);
17074
17074
  return terms.flatMap((term) => {
17075
17075
  const label = labels[term];
17076
17076
  return label ? [{ icon: TRIAL_TERM_ICONS[term], label }] : [];
@@ -17310,7 +17310,7 @@ function SnapCarousel({
17310
17310
  }, [count, slideStep]);
17311
17311
  const canAutoAdvance = autoAdvanceMs > 0 && count > 1;
17312
17312
  const playing = auto.playing && canAutoAdvance;
17313
- const ranMs = _chunk4FWURR3Wcjs.useResumableTimeout.call(void 0, {
17313
+ const ranMs = _chunkVUWPLQBYcjs.useResumableTimeout.call(void 0, {
17314
17314
  running: playing,
17315
17315
  durationMs: autoAdvanceMs,
17316
17316
  resetKey: index,
@@ -17671,10 +17671,10 @@ function AccountDetailsFields({
17671
17671
  onKeyDown,
17672
17672
  layout = "stacked"
17673
17673
  }) {
17674
- const firstNameErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _365 => _365.firstName]), firstName);
17675
- const lastNameErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _366 => _366.lastName]), lastName);
17676
- const passwordErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _367 => _367.password]), password);
17677
- const confirmErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _368 => _368.confirmPassword]), confirmPassword);
17674
+ const firstNameErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _365 => _365.firstName]), firstName);
17675
+ const lastNameErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _366 => _366.lastName]), lastName);
17676
+ const passwordErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _367 => _367.password]), password);
17677
+ const confirmErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _368 => _368.confirmPassword]), confirmPassword);
17678
17678
  const names = [
17679
17679
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17680
17680
  _chunkHTRILBJDcjs.Input,
@@ -17908,12 +17908,13 @@ function SsoProviderButtons({
17908
17908
  onSsoClick,
17909
17909
  actionLabel = "Continue with",
17910
17910
  disabled = false,
17911
- enabledProviders
17911
+ enabledProviders,
17912
+ tag
17912
17913
  }) {
17913
17914
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex flex-col gap-[var(--spacing-system-l)]", children: providers.map((provider) => {
17914
17915
  const meta = PROVIDER_META[provider];
17915
17916
  const Icon = meta.Icon;
17916
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17917
+ return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
17917
17918
  _chunk2QMBXGMQcjs.Button,
17918
17919
  {
17919
17920
  type: "button",
@@ -17923,7 +17924,23 @@ function SsoProviderButtons({
17923
17924
  className: "disabled:bg-ods-bg",
17924
17925
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Icon, { className: "h-5 w-5" }),
17925
17926
  onClick: () => _optionalChain([onSsoClick, 'optionalCall', _369 => _369(provider)]),
17926
- children: `${actionLabel} ${meta.name}`
17927
+ children: [
17928
+ `${actionLabel} ${meta.name}`,
17929
+ tag && // A child, not `rightIcon`: the Button lays its children out through a `contents` span,
17930
+ // so the badge is a flex item of the button itself and can give up width (`min-w-0`)
17931
+ // where a long organization name would otherwise push the label out of a phone-width
17932
+ // button. `block` over its inline-flex, because an ellipsis only renders on a block box.
17933
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
17934
+ _chunkOFO75R2Ocjs.StatusBadge,
17935
+ {
17936
+ text: tag,
17937
+ variant: "button",
17938
+ singleLine: true,
17939
+ title: tag,
17940
+ className: "block min-w-0 max-w-32 truncate"
17941
+ }
17942
+ )
17943
+ ]
17927
17944
  },
17928
17945
  provider
17929
17946
  );
@@ -18104,9 +18121,9 @@ function CreateOrganizationForm({
18104
18121
  }) {
18105
18122
  const hasSso = !!ssoProviders && ssoProviders.length > 0;
18106
18123
  const fieldsDisabled = disabled || loading;
18107
- const emailErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _370 => _370.email]), _nullishCoalesce(email, () => ( "")));
18108
- const orgNameErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _371 => _371.organizationName]), organizationName);
18109
- const domainErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _372 => _372.domain]), domain);
18124
+ const emailErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _370 => _370.email]), _nullishCoalesce(email, () => ( "")));
18125
+ const orgNameErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _371 => _371.organizationName]), organizationName);
18126
+ const domainErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _372 => _372.domain]), domain);
18110
18127
  const handleKeyDown = (event) => {
18111
18128
  if (event.key === "Enter" && !fieldsDisabled && !submitDisabled) {
18112
18129
  onSubmit();
@@ -18296,6 +18313,7 @@ function LegalLinks({ termsUrl, privacyPolicyUrl }) {
18296
18313
 
18297
18314
  // src/components/features/auth/login-form.tsx
18298
18315
 
18316
+ var ENTER_ANIMATION = "animate-in fade-in-0 slide-in-from-top-1 duration-200 ease-out motion-reduce:animate-none";
18299
18317
  function LoginForm({
18300
18318
  email,
18301
18319
  onEmailChange,
@@ -18304,17 +18322,18 @@ function LoginForm({
18304
18322
  disabled = false,
18305
18323
  errors,
18306
18324
  emailStatus,
18325
+ notice,
18307
18326
  ssoProviders,
18308
18327
  onSsoClick,
18309
18328
  ssoDisabled = false,
18310
18329
  ssoEnabledProviders,
18311
18330
  ssoActionLabel = "Continue with",
18312
- dividerLabel = "or continue with OpenFrame SSO",
18313
- customSsoProviders,
18314
- noCustomSsoLabel = "No additional SSO configurations for this domain",
18331
+ dividerLabel = "or continue with",
18332
+ tenantMethods,
18315
18333
  onSubmitClick,
18316
18334
  submitLabel = "Continue",
18317
18335
  submitDisabled = false,
18336
+ onEmailEnter,
18318
18337
  title = "Login to OpenFrame",
18319
18338
  subtitle = "Enter your email to access your organization.",
18320
18339
  termsUrl,
@@ -18322,10 +18341,15 @@ function LoginForm({
18322
18341
  className
18323
18342
  }) {
18324
18343
  const fieldDisabled = disabled || loading;
18325
- const emailErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _379 => _379.email]), email);
18344
+ const providersDisabled = fieldDisabled || ssoDisabled;
18345
+ const emailErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _379 => _379.email]), email);
18326
18346
  const handleKeyDown = (event) => {
18327
- if (event.key !== "Enter" || fieldDisabled || submitDisabled) return;
18328
- _optionalChain([onSubmitClick, 'optionalCall', _380 => _380()]);
18347
+ if (event.key !== "Enter" || event.repeat || fieldDisabled) return;
18348
+ if (onSubmitClick) {
18349
+ if (!submitDisabled) onSubmitClick();
18350
+ return;
18351
+ }
18352
+ _optionalChain([onEmailEnter, 'optionalCall', _380 => _380()]);
18329
18353
  };
18330
18354
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
18331
18355
  "div",
@@ -18339,17 +18363,6 @@ function LoginForm({
18339
18363
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "h1", { className: "tracking-[-0.64px] text-ods-text-primary text-h2", children: _chunkOFO75R2Ocjs.accentSentenceMarks.call(void 0, title) }),
18340
18364
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-text-secondary text-h4", children: subtitle })
18341
18365
  ] }),
18342
- ssoProviders.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18343
- SsoProviderButtons,
18344
- {
18345
- providers: ssoProviders,
18346
- onSsoClick,
18347
- actionLabel: ssoActionLabel,
18348
- disabled: disabled || loading || ssoDisabled,
18349
- enabledProviders: ssoEnabledProviders
18350
- }
18351
- ),
18352
- ssoProviders.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LabeledDivider, { label: dividerLabel }),
18353
18366
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18354
18367
  _chunkHTRILBJDcjs.Input,
18355
18368
  {
@@ -18365,30 +18378,22 @@ function LoginForm({
18365
18378
  onKeyDown: handleKeyDown
18366
18379
  }
18367
18380
  ),
18368
- customSsoProviders && (customSsoProviders.length > 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18369
- SsoProviderButtons,
18381
+ notice && // Tokens are the design's: soft-grey surface, grey text and icon, the bold-body step, a 24px
18382
+ // icon, and 12/16 for the inset and the gap.
18383
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
18384
+ "div",
18370
18385
  {
18371
- providers: customSsoProviders,
18372
- onSsoClick,
18373
- actionLabel: ssoActionLabel,
18374
- disabled: disabled || loading
18386
+ role: "status",
18387
+ className: _chunk3ATAYP36cjs.cn.call(void 0,
18388
+ "flex min-h-11 w-full items-center gap-[var(--spacing-system-m)] rounded-md bg-ods-bg-surface px-[var(--spacing-system-s)] py-[var(--spacing-system-s)] text-ods-text-secondary text-h3 md:min-h-12",
18389
+ ENTER_ANIMATION
18390
+ ),
18391
+ children: [
18392
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7AAW6L5Ucjs.AlertTriangleIcon, { className: "h-6 w-6 shrink-0" }),
18393
+ notice
18394
+ ]
18375
18395
  }
18376
- ) : (
18377
- // Same footprint as the button it stands in for, so nothing shifts when a tenant does
18378
- // have options. Tokens are the design's: soft-grey surface, grey text and icon, the
18379
- // bold-body step, a 24px icon, and 12/16 for the inset and the gap.
18380
- /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
18381
- "div",
18382
- {
18383
- role: "status",
18384
- className: "flex min-h-11 w-full items-center gap-[var(--spacing-system-m)] rounded-md bg-ods-bg-surface px-[var(--spacing-system-s)] py-[var(--spacing-system-s)] text-ods-text-secondary text-h3 md:min-h-12",
18385
- children: [
18386
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk7AAW6L5Ucjs.AlertTriangleIcon, { className: "h-6 w-6 shrink-0" }),
18387
- noCustomSsoLabel
18388
- ]
18389
- }
18390
- )
18391
- )),
18396
+ ),
18392
18397
  onSubmitClick && // Full width on a phone, half the row and right-aligned from `md` up, matching the design.
18393
18398
  // The spacer, rather than a width on the button, keeps it flush with the fields' right edge.
18394
18399
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-[var(--spacing-system-l)]", children: [
@@ -18407,6 +18412,56 @@ function LoginForm({
18407
18412
  }
18408
18413
  )
18409
18414
  ] }),
18415
+ (tenantMethods || ssoProviders.length > 0) && // One block, so an organization's methods replace the generic set as a whole: the key mounts
18416
+ // it anew when they arrive, and every row of it eases in, not only the rows that are new.
18417
+ // Going back to the generic set swaps without a transition, as the prototype does.
18418
+ /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
18419
+ "div",
18420
+ {
18421
+ role: "group",
18422
+ "aria-label": "Sign-in methods",
18423
+ className: _chunk3ATAYP36cjs.cn.call(void 0, "flex flex-col gap-[var(--spacing-system-l)]", tenantMethods && ENTER_ANIMATION),
18424
+ children: [
18425
+ tenantMethods && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
18426
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LabeledDivider, { label: `Sign-in methods for ${tenantMethods.name || "your organization"}` }),
18427
+ tenantMethods.openframe && // Not configured with anyone's credentials, so it carries no tag.
18428
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18429
+ SsoProviderButtons,
18430
+ {
18431
+ providers: ["openframe"],
18432
+ onSsoClick,
18433
+ actionLabel: ssoActionLabel,
18434
+ disabled: providersDisabled
18435
+ }
18436
+ ),
18437
+ tenantMethods.providers.length > 0 && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18438
+ SsoProviderButtons,
18439
+ {
18440
+ providers: tenantMethods.providers,
18441
+ onSsoClick,
18442
+ actionLabel: ssoActionLabel,
18443
+ disabled: providersDisabled,
18444
+ tag: tenantMethods.name
18445
+ }
18446
+ )
18447
+ ] }),
18448
+ ssoProviders.length > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
18449
+ (!tenantMethods || tenantMethods.openframe || tenantMethods.providers.length > 0) && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LabeledDivider, { label: dividerLabel }),
18450
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
18451
+ SsoProviderButtons,
18452
+ {
18453
+ providers: ssoProviders,
18454
+ onSsoClick,
18455
+ actionLabel: ssoActionLabel,
18456
+ disabled: providersDisabled,
18457
+ enabledProviders: ssoEnabledProviders
18458
+ }
18459
+ )
18460
+ ] })
18461
+ ]
18462
+ },
18463
+ tenantMethods ? `tenant:${_nullishCoalesce(tenantMethods.name, () => ( ""))}` : "generic"
18464
+ ),
18410
18465
  termsUrl && privacyPolicyUrl && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, LegalLinks, { termsUrl, privacyPolicyUrl })
18411
18466
  ]
18412
18467
  }
@@ -18464,8 +18519,8 @@ function OpenFrameSsoLoginForm({
18464
18519
  className
18465
18520
  }) {
18466
18521
  const fieldsDisabled = disabled || loading;
18467
- const emailErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _383 => _383.email]), email);
18468
- const passwordErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _384 => _384.password]), password);
18522
+ const emailErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _383 => _383.email]), email);
18523
+ const passwordErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _384 => _384.password]), password);
18469
18524
  const handleKeyDown = (event) => {
18470
18525
  if (event.key === "Enter" && !fieldsDisabled && !submitDisabled) {
18471
18526
  onSubmit();
@@ -18570,7 +18625,7 @@ function OpenFrameSsoSignUpForm({
18570
18625
  className
18571
18626
  }) {
18572
18627
  const fieldsDisabled = disabled || loading;
18573
- const emailErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _385 => _385.email]), email);
18628
+ const emailErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _385 => _385.email]), email);
18574
18629
  const handleKeyDown = (event) => {
18575
18630
  if (event.key === "Enter" && !fieldsDisabled && !submitDisabled) {
18576
18631
  onSubmit();
@@ -18675,8 +18730,8 @@ function PasswordResetForm({
18675
18730
  className
18676
18731
  }) {
18677
18732
  const fieldsDisabled = disabled || loading;
18678
- const passwordErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _386 => _386.password]), password);
18679
- const confirmErr = _chunk4FWURR3Wcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _387 => _387.confirmPassword]), confirmPassword);
18733
+ const passwordErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _386 => _386.password]), password);
18734
+ const confirmErr = _chunkVUWPLQBYcjs.useDeferredError.call(void 0, _optionalChain([errors, 'optionalAccess', _387 => _387.confirmPassword]), confirmPassword);
18680
18735
  const handleKeyDown = (event) => {
18681
18736
  if (event.key === "Enter" && !fieldsDisabled && !submitDisabled) {
18682
18737
  onSubmit();
@@ -22211,14 +22266,14 @@ var MODEL_TOKEN_RATES_COPY = {
22211
22266
  empty: "No token rates are in effect right now."
22212
22267
  };
22213
22268
  function providerMark(providerType, stated, className) {
22214
- const Mark = _chunkKTPR66EEcjs.findIcon.call(void 0, _chunkWZX26ODJcjs.aiProvider.call(void 0, providerType, { icon: stated }).icon);
22269
+ const Mark = _chunkKTPR66EEcjs.findIcon.call(void 0, _chunkX4LAMJHDcjs.aiProvider.call(void 0, providerType, { icon: stated }).icon);
22215
22270
  return Mark ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, Mark, { className }) : void 0;
22216
22271
  }
22217
22272
  var PAD_X = "px-[var(--spacing-system-s)]";
22218
22273
  var ROW = "flex items-center gap-[var(--spacing-system-s)]";
22219
22274
  var NUMBER_CELL = "w-16 shrink-0 whitespace-nowrap text-right tabular-nums";
22220
22275
  function useProviderGroup(rates) {
22221
- const groups = _chunkWZX26ODJcjs.groupTokenRatesByProvider.call(void 0, rates);
22276
+ const groups = _chunkX4LAMJHDcjs.groupTokenRatesByProvider.call(void 0, rates);
22222
22277
  const [picked, setPicked] = _react.useState.call(void 0, null);
22223
22278
  return { groups, group: _nullishCoalesce(groups.find((candidate) => candidate.providerType === picked), () => ( groups[0])), setPicked };
22224
22279
  }
@@ -22229,7 +22284,7 @@ function ProviderTabs({
22229
22284
  className
22230
22285
  }) {
22231
22286
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
22232
- _chunkV3UJ6NDRcjs.TabSelector,
22287
+ _chunkTPH4SRR2cjs.TabSelector,
22233
22288
  {
22234
22289
  variant: "secondary",
22235
22290
  scrollable: true,
@@ -22237,7 +22292,7 @@ function ProviderTabs({
22237
22292
  onValueChange,
22238
22293
  items: groups.map((candidate) => ({
22239
22294
  id: candidate.providerType,
22240
- label: _chunkWZX26ODJcjs.tokenRateProviderLabel.call(void 0, candidate.providerType, _optionalChain([candidate, 'access', _443 => _443.rates, 'access', _444 => _444[0], 'optionalAccess', _445 => _445.providerLabel])),
22295
+ label: _chunkX4LAMJHDcjs.tokenRateProviderLabel.call(void 0, candidate.providerType, _optionalChain([candidate, 'access', _443 => _443.rates, 'access', _444 => _444[0], 'optionalAccess', _445 => _445.providerLabel])),
22241
22296
  icon: providerMark(candidate.providerType, _optionalChain([candidate, 'access', _446 => _446.rates, 'access', _447 => _447[0], 'optionalAccess', _448 => _448.providerIcon]), "size-full")
22242
22297
  })),
22243
22298
  className
@@ -22338,8 +22393,8 @@ function ModelTokenRatesTable({ rates }) {
22338
22393
  className: _chunk3ATAYP36cjs.cn.call(void 0, ROW, PAD_X, "py-[var(--spacing-system-xxs)] text-ods-text-primary text-h6"),
22339
22394
  children: [
22340
22395
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "rowheader", className: "min-w-0 flex-1 truncate", children: rate.displayName || rate.modelName }),
22341
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkWZX26ODJcjs.formatTokenRate.call(void 0, rate.inputTokenRate) }),
22342
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkWZX26ODJcjs.formatTokenRate.call(void 0, rate.outputTokenRate) })
22396
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkX4LAMJHDcjs.formatTokenRate.call(void 0, rate.inputTokenRate) }),
22397
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { role: "cell", className: NUMBER_CELL, children: _chunkX4LAMJHDcjs.formatTokenRate.call(void 0, rate.outputTokenRate) })
22343
22398
  ]
22344
22399
  },
22345
22400
  rate.modelName
@@ -22405,7 +22460,7 @@ function modelOption(rate) {
22405
22460
  return {
22406
22461
  label: rate.displayName || rate.modelName,
22407
22462
  value: rate.modelName,
22408
- description: _chunkWZX26ODJcjs.tokenRateProviderLabel.call(void 0, rate.providerType, rate.providerLabel),
22463
+ description: _chunkX4LAMJHDcjs.tokenRateProviderLabel.call(void 0, rate.providerType, rate.providerLabel),
22409
22464
  icon: providerMark(rate.providerType, rate.providerIcon, "size-full text-ods-text-secondary")
22410
22465
  };
22411
22466
  }
@@ -22459,8 +22514,8 @@ function ModelTokenExchange({
22459
22514
  const [chosen, setChosen] = _react.useState.call(void 0, null);
22460
22515
  const balance = _nullishCoalesce(_nullishCoalesce(_nullishCoalesce(chosen, () => ( defaultAmount)), () => ( _optionalChain([tokenPrice, 'optionalAccess', _449 => _449.tokens]))), () => ( MODEL_TOKEN_EXCHANGE_BALANCE));
22461
22516
  const max = Math.max(amountRange.max, balance, ...presets.map((preset) => preset.tokens));
22462
- const tokens = _chunkWZX26ODJcjs.formatTokenAmount.call(void 0, balance);
22463
- const cost = _chunkWZX26ODJcjs.tokenCost.call(void 0, balance, tokenPrice);
22517
+ const tokens = _chunkX4LAMJHDcjs.formatTokenAmount.call(void 0, balance);
22518
+ const cost = _chunkX4LAMJHDcjs.tokenCost.call(void 0, balance, tokenPrice);
22464
22519
  const balancePrice = cost === null ? null : _chunkJHQNUWFMcjs.formatPrice.call(void 0, cost);
22465
22520
  const model = rate ? rate.displayName || rate.modelName : "";
22466
22521
  const options = models.map(modelOption);
@@ -22502,7 +22557,7 @@ function ModelTokenExchange({
22502
22557
  variant: preset.tokens === balance ? "accent" : "outline",
22503
22558
  size: "small",
22504
22559
  onClick: () => setChosen(preset.tokens),
22505
- children: copy.buy.preset(_chunkWZX26ODJcjs.formatTokenAmount.call(void 0, preset.tokens), preset.label)
22560
+ children: copy.buy.preset(_chunkX4LAMJHDcjs.formatTokenAmount.call(void 0, preset.tokens), preset.label)
22506
22561
  },
22507
22562
  preset.label
22508
22563
  )) })
@@ -22521,7 +22576,7 @@ function ModelTokenExchange({
22521
22576
  const stated = _nullishCoalesce(models.find((option) => option.providerType === providerType), () => ( (_optionalChain([rate, 'optionalAccess', _450 => _450.providerType]) === providerType ? rate : null)));
22522
22577
  return {
22523
22578
  id: providerType,
22524
- name: _chunkWZX26ODJcjs.tokenRateProviderLabel.call(void 0, providerType, _optionalChain([stated, 'optionalAccess', _451 => _451.providerLabel])),
22579
+ name: _chunkX4LAMJHDcjs.tokenRateProviderLabel.call(void 0, providerType, _optionalChain([stated, 'optionalAccess', _451 => _451.providerLabel])),
22525
22580
  icon: providerMark(providerType, _optionalChain([stated, 'optionalAccess', _452 => _452.providerIcon]), "size-8 text-ods-text-secondary")
22526
22581
  };
22527
22582
  }),
@@ -22559,7 +22614,7 @@ function ModelTokenExchange({
22559
22614
  {
22560
22615
  size: "plain",
22561
22616
  loading,
22562
- figure: _chunkWZX26ODJcjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _457 => _457.inputTokenRate])),
22617
+ figure: _chunkX4LAMJHDcjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _457 => _457.inputTokenRate])),
22563
22618
  words: copy.charge.input
22564
22619
  }
22565
22620
  ),
@@ -22568,7 +22623,7 @@ function ModelTokenExchange({
22568
22623
  {
22569
22624
  size: "plain",
22570
22625
  loading,
22571
- figure: _chunkWZX26ODJcjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _458 => _458.outputTokenRate])),
22626
+ figure: _chunkX4LAMJHDcjs.formatTokenRate.call(void 0, _optionalChain([rate, 'optionalAccess', _458 => _458.outputTokenRate])),
22572
22627
  words: copy.charge.output
22573
22628
  }
22574
22629
  )
@@ -22580,9 +22635,9 @@ function ModelTokenExchange({
22580
22635
  className: "mt-auto flex flex-col rounded-md border border-ods-accent bg-ods-bg p-[var(--spacing-system-mf)]",
22581
22636
  children: [
22582
22637
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[2lh] text-ods-text-secondary text-h4", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2YXOD2KLcjs.UnifiedSkeleton, { as: "span", "aria-hidden": true, className: _chunk3ATAYP36cjs.cn.call(void 0, FIGURE_SKELETON_CLASS, "w-full max-w-xs") }) : copy.charge.so(_nullishCoalesce(balancePrice, () => ( copy.buy.tokens(tokens))), model) }),
22583
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] whitespace-nowrap tabular-nums text-ods-text-primary text-h1", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2YXOD2KLcjs.UnifiedSkeleton, { as: "span", "aria-hidden": true, className: _chunk3ATAYP36cjs.cn.call(void 0, FIGURE_SKELETON_CLASS, "w-40") }) : _chunkWZX26ODJcjs.formatTokenAmount.call(void 0, _chunkWZX26ODJcjs.tokensForBalance.call(void 0, balance, rate.inputTokenRate)) }),
22638
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] whitespace-nowrap tabular-nums text-ods-text-primary text-h1", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2YXOD2KLcjs.UnifiedSkeleton, { as: "span", "aria-hidden": true, className: _chunk3ATAYP36cjs.cn.call(void 0, FIGURE_SKELETON_CLASS, "w-40") }) : _chunkX4LAMJHDcjs.formatTokenAmount.call(void 0, _chunkX4LAMJHDcjs.tokensForBalance.call(void 0, balance, rate.inputTokenRate)) }),
22584
22639
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] text-ods-text-primary text-h3", children: copy.charge.read }),
22585
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] text-ods-text-secondary text-h4", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2YXOD2KLcjs.UnifiedSkeleton, { as: "span", "aria-hidden": true, className: _chunk3ATAYP36cjs.cn.call(void 0, FIGURE_SKELETON_CLASS, "w-48") }) : copy.charge.orWritten(_chunkWZX26ODJcjs.formatTokenAmount.call(void 0, _chunkWZX26ODJcjs.tokensForBalance.call(void 0, balance, rate.outputTokenRate))) })
22640
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "min-h-[1lh] text-ods-text-secondary text-h4", children: loading || !rate ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk2YXOD2KLcjs.UnifiedSkeleton, { as: "span", "aria-hidden": true, className: _chunk3ATAYP36cjs.cn.call(void 0, FIGURE_SKELETON_CLASS, "w-48") }) : copy.charge.orWritten(_chunkX4LAMJHDcjs.formatTokenAmount.call(void 0, _chunkX4LAMJHDcjs.tokensForBalance.call(void 0, balance, rate.outputTokenRate))) })
22586
22641
  ]
22587
22642
  }
22588
22643
  )
@@ -23080,14 +23135,14 @@ var ConfidenceBadge = ({
23080
23135
  size = "sm",
23081
23136
  className
23082
23137
  }) => {
23083
- const level = _chunkWZX26ODJcjs.getConfidenceLevel.call(void 0, confidence);
23138
+ const level = _chunkX4LAMJHDcjs.getConfidenceLevel.call(void 0, confidence);
23084
23139
  if (level === "none") {
23085
23140
  return null;
23086
23141
  }
23087
- const label = _chunkWZX26ODJcjs.getConfidenceLabel.call(void 0, confidence);
23088
- const borderClass = _chunkWZX26ODJcjs.getConfidenceBorderClass.call(void 0, confidence);
23089
- const textClass = _chunkWZX26ODJcjs.getConfidenceTextClass.call(void 0, confidence);
23090
- const bgClass = _chunkWZX26ODJcjs.getConfidenceBgClass.call(void 0, confidence);
23142
+ const label = _chunkX4LAMJHDcjs.getConfidenceLabel.call(void 0, confidence);
23143
+ const borderClass = _chunkX4LAMJHDcjs.getConfidenceBorderClass.call(void 0, confidence);
23144
+ const textClass = _chunkX4LAMJHDcjs.getConfidenceTextClass.call(void 0, confidence);
23145
+ const bgClass = _chunkX4LAMJHDcjs.getConfidenceBgClass.call(void 0, confidence);
23091
23146
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
23092
23147
  "span",
23093
23148
  {
@@ -23138,9 +23193,9 @@ function SEOEditorPreview({
23138
23193
  const [isUploading, setIsUploading] = _react.useState.call(void 0, false);
23139
23194
  const [fileInputRef, setFileInputRef] = _react.useState.call(void 0, null);
23140
23195
  const seoTitleLength = (seoTitle || "").length;
23141
- const seoTitleTooLong = seoTitleLength > _chunkWZX26ODJcjs.SEO_TITLE_MAX_LENGTH;
23196
+ const seoTitleTooLong = seoTitleLength > _chunkX4LAMJHDcjs.SEO_TITLE_MAX_LENGTH;
23142
23197
  const seoDescriptionLength = (seoDescription || "").length;
23143
- const seoDescriptionTooLong = seoDescriptionLength > _chunkWZX26ODJcjs.SEO_DESCRIPTION_MAX_LENGTH;
23198
+ const seoDescriptionTooLong = seoDescriptionLength > _chunkX4LAMJHDcjs.SEO_DESCRIPTION_MAX_LENGTH;
23144
23199
  const displayTitle = seoTitle.trim() || title || "Untitled";
23145
23200
  const displayDescription = seoDescription.trim() || summary || "No description";
23146
23201
  const hasOgImage = ogImageUrl.trim();
@@ -23165,10 +23220,10 @@ function SEOEditorPreview({
23165
23220
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 content-lg:grid-cols-2", children: [
23166
23221
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
23167
23222
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23168
- _chunkWZX26ODJcjs.Field,
23223
+ _chunkX4LAMJHDcjs.Field,
23169
23224
  {
23170
23225
  label: "SEO Title",
23171
- error: seoTitleTooLong ? `Too long: search engines may truncate this title (keep it under ${_chunkWZX26ODJcjs.SEO_TITLE_MAX_LENGTH})` : null,
23226
+ error: seoTitleTooLong ? `Too long: search engines may truncate this title (keep it under ${_chunkX4LAMJHDcjs.SEO_TITLE_MAX_LENGTH})` : null,
23172
23227
  labelExtras: aiConfidenceSeoTitle !== void 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
23173
23228
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AIGeneratedBadge, {}),
23174
23229
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ConfidenceBadge, { confidence: aiConfidenceSeoTitle, showLabel: true, showPercentage: true, size: "sm" })
@@ -23183,7 +23238,7 @@ function SEOEditorPreview({
23183
23238
  children: [
23184
23239
  seoTitleLength,
23185
23240
  "/",
23186
- _chunkWZX26ODJcjs.SEO_TITLE_MAX_LENGTH
23241
+ _chunkX4LAMJHDcjs.SEO_TITLE_MAX_LENGTH
23187
23242
  ]
23188
23243
  }
23189
23244
  ),
@@ -23194,7 +23249,7 @@ function SEOEditorPreview({
23194
23249
  value: seoTitle || "",
23195
23250
  onChange: (e) => onSeoTitleChange(e.target.value),
23196
23251
  disabled,
23197
- maxLength: _chunkWZX26ODJcjs.SEO_TITLE_MAX_LENGTH,
23252
+ maxLength: _chunkX4LAMJHDcjs.SEO_TITLE_MAX_LENGTH,
23198
23253
  invalid: seoTitleTooLong,
23199
23254
  placeholder: "Enter SEO meta title...",
23200
23255
  className: "border-ods-border bg-ods-bg text-ods-text-primary"
@@ -23205,7 +23260,7 @@ function SEOEditorPreview({
23205
23260
  !seoTitle && title && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-ods-accent text-h6", children: "Auto-populated from title" })
23206
23261
  ] }),
23207
23262
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23208
- _chunkWZX26ODJcjs.Field,
23263
+ _chunkX4LAMJHDcjs.Field,
23209
23264
  {
23210
23265
  label: "SEO Keywords",
23211
23266
  labelExtras: aiConfidenceSeoKeywords !== void 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
@@ -23237,10 +23292,10 @@ function SEOEditorPreview({
23237
23292
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-1 gap-4 content-lg:grid-cols-2", children: [
23238
23293
  /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "space-y-2", children: [
23239
23294
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
23240
- _chunkWZX26ODJcjs.Field,
23295
+ _chunkX4LAMJHDcjs.Field,
23241
23296
  {
23242
23297
  label: "SEO Description",
23243
- error: seoDescriptionTooLong ? `Too long: search engines may truncate this description (keep it under ${_chunkWZX26ODJcjs.SEO_DESCRIPTION_MAX_LENGTH})` : null,
23298
+ error: seoDescriptionTooLong ? `Too long: search engines may truncate this description (keep it under ${_chunkX4LAMJHDcjs.SEO_DESCRIPTION_MAX_LENGTH})` : null,
23244
23299
  labelExtras: aiConfidenceSeoDescription !== void 0 ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
23245
23300
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, AIGeneratedBadge, {}),
23246
23301
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
@@ -23263,7 +23318,7 @@ function SEOEditorPreview({
23263
23318
  children: [
23264
23319
  seoDescriptionLength,
23265
23320
  "/",
23266
- _chunkWZX26ODJcjs.SEO_DESCRIPTION_MAX_LENGTH
23321
+ _chunkX4LAMJHDcjs.SEO_DESCRIPTION_MAX_LENGTH
23267
23322
  ]
23268
23323
  }
23269
23324
  ),
@@ -23274,7 +23329,7 @@ function SEOEditorPreview({
23274
23329
  value: seoDescription || "",
23275
23330
  onChange: (e) => onSeoDescriptionChange(e.target.value),
23276
23331
  disabled,
23277
- maxLength: _chunkWZX26ODJcjs.SEO_DESCRIPTION_MAX_LENGTH,
23332
+ maxLength: _chunkX4LAMJHDcjs.SEO_DESCRIPTION_MAX_LENGTH,
23278
23333
  invalid: seoDescriptionTooLong,
23279
23334
  placeholder: "Enter SEO meta description...",
23280
23335
  className: _chunk3ATAYP36cjs.cn.call(void 0, "resize-none border-ods-border bg-ods-bg text-ods-text-primary", SEO_MEDIA_BOX_HEIGHT)
@@ -23427,7 +23482,7 @@ function socialIcon(platform) {
23427
23482
  return _nullishCoalesce(_chunkKTPR66EEcjs.iconOf.call(void 0, SOCIAL_ICONS[platform]), () => ( void 0));
23428
23483
  }
23429
23484
  function renderSocialIcon(platform) {
23430
- const key = _nullishCoalesce(_chunkWZX26ODJcjs.normalizeSocialPlatform.call(void 0, platform), () => ( "website"));
23485
+ const key = _nullishCoalesce(_chunkX4LAMJHDcjs.normalizeSocialPlatform.call(void 0, platform), () => ( "website"));
23431
23486
  const icon = _nullishCoalesce(socialIcon(key), () => ( socialIcon("website")));
23432
23487
  return icon ? _react.createElement.call(void 0, icon, { className: "h-5 w-5" }) : null;
23433
23488
  }
@@ -23510,7 +23565,7 @@ function SocialLinksManager({
23510
23565
  };
23511
23566
  const getIcon = (link, platform) => {
23512
23567
  const iconKey = _optionalChain([platform, 'optionalAccess', _468 => _468.icon_name]) || link.platform;
23513
- const key = _chunkWZX26ODJcjs.normalizeSocialPlatform.call(void 0, iconKey);
23568
+ const key = _chunkX4LAMJHDcjs.normalizeSocialPlatform.call(void 0, iconKey);
23514
23569
  if (!key) return null;
23515
23570
  const icon = socialIcon(key);
23516
23571
  return icon ? _react.createElement.call(void 0, icon, { className: "h-5 w-5 text-ods-text-secondary" }) : null;
@@ -23920,7 +23975,7 @@ function VideoBitesDisplay({
23920
23975
  filterPublished = true,
23921
23976
  showTitle = true
23922
23977
  }) {
23923
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkV3UJ6NDRcjs.VideoBitesStrip, { bites, title, filterPublished, showTitle });
23978
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTPH4SRR2cjs.VideoBitesStrip, { bites, title, filterPublished, showTitle });
23924
23979
  }
23925
23980
 
23926
23981
  // src/components/features/walkthrough-video.tsx
@@ -23948,7 +24003,7 @@ function WalkthroughVideo({
23948
24003
  onOpenChange,
23949
24004
  defaultOpen,
23950
24005
  defaultOpenPaused,
23951
- deepLinkParam = _chunkWZX26ODJcjs.WALKTHROUGH_OPEN_QUERY_PARAM,
24006
+ deepLinkParam = _chunkX4LAMJHDcjs.WALKTHROUGH_OPEN_QUERY_PARAM,
23952
24007
  autoPlayCard = false,
23953
24008
  label = "Play Demo Video",
23954
24009
  placement,
@@ -23964,7 +24019,7 @@ function WalkthroughVideo({
23964
24019
  }) {
23965
24020
  const inline = placement === "inline";
23966
24021
  const dismissEnabled = dismissal !== false;
23967
- const storageKey = dismissEnabled && dismissal.storageKey || _chunkWZX26ODJcjs.WALKTHROUGH_VIDEO_DISMISS_KEY;
24022
+ const storageKey = dismissEnabled && dismissal.storageKey || _chunkX4LAMJHDcjs.WALKTHROUGH_VIDEO_DISMISS_KEY;
23968
24023
  const dismissalId = _optionalChain([video, 'optionalAccess', _474 => _474.id]) != null ? String(video.id) : "dismissed";
23969
24024
  const [mounted, setMounted] = _react.useState.call(void 0, false);
23970
24025
  const [dismissed, setDismissed] = _react.useState.call(void 0, false);
@@ -23976,7 +24031,7 @@ function WalkthroughVideo({
23976
24031
  let delayElapsed = false;
23977
24032
  let interacted = inline;
23978
24033
  const reveal = () => {
23979
- if (dismissEnabled && _chunkWZX26ODJcjs.isWalkthroughDismissed.call(void 0, storageKey, dismissalId)) {
24034
+ if (dismissEnabled && _chunkX4LAMJHDcjs.isWalkthroughDismissed.call(void 0, storageKey, dismissalId)) {
23980
24035
  setDismissed(true);
23981
24036
  return;
23982
24037
  }
@@ -24013,7 +24068,7 @@ function WalkthroughVideo({
24013
24068
  if (idleHandle !== null && typeof cic === "function") cic(idleHandle);
24014
24069
  };
24015
24070
  }, [appearDelayMs, dismissEnabled, storageKey, dismissalId, hasVideo, videoId, inline]);
24016
- const hydrated = _chunkV3UJ6NDRcjs.useIsHydrated.call(void 0, );
24071
+ const hydrated = _chunkTPH4SRR2cjs.useIsHydrated.call(void 0, );
24017
24072
  const previewSuppressed = _react.useMemo.call(void 0, () => {
24018
24073
  if (!hydrated) return false;
24019
24074
  try {
@@ -24263,7 +24318,7 @@ function WalkthroughVideo({
24263
24318
  (e) => {
24264
24319
  e.stopPropagation();
24265
24320
  pausePreviewNow();
24266
- if (dismissEnabled) _chunkWZX26ODJcjs.dismissWalkthrough.call(void 0, storageKey, dismissalId);
24321
+ if (dismissEnabled) _chunkX4LAMJHDcjs.dismissWalkthrough.call(void 0, storageKey, dismissalId);
24267
24322
  setDismissed(true);
24268
24323
  },
24269
24324
  [dismissEnabled, storageKey, dismissalId, pausePreviewNow]
@@ -24436,7 +24491,7 @@ function WalkthroughVideo({
24436
24491
  `card-${embedUrlKey}`
24437
24492
  ) }),
24438
24493
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
24439
- _chunkV3UJ6NDRcjs.CardHitLayer,
24494
+ _chunkTPH4SRR2cjs.CardHitLayer,
24440
24495
  {
24441
24496
  label: video.title ? `${label}: ${video.title}` : label,
24442
24497
  onPointerDown: pausePreviewNow,
@@ -24602,7 +24657,7 @@ function InlineWalkthroughVideo(props) {
24602
24657
  var _reactquery = require('@tanstack/react-query');
24603
24658
  function useWalkthroughVideo(opts) {
24604
24659
  const { endpoint, initialData, enabled = true, transformCaptionsUrl } = opts;
24605
- const captions = _chunkV3UJ6NDRcjs.useCaptions.call(void 0, );
24660
+ const captions = _chunkTPH4SRR2cjs.useCaptions.call(void 0, );
24606
24661
  const query = _reactquery.useQuery.call(void 0, {
24607
24662
  queryKey: ["walkthrough-video", endpoint],
24608
24663
  enabled,
@@ -25351,7 +25406,7 @@ function HighlightConfigSection({
25351
25406
  disabled = false,
25352
25407
  className = ""
25353
25408
  }) {
25354
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `space-y-3 rounded-lg border border-ods-border bg-ods-card p-4 ${className}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZX26ODJcjs.Field, { label: "Target Duration", children: (f) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25409
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: `space-y-3 rounded-lg border border-ods-border bg-ods-card p-4 ${className}`, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex items-center gap-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "flex-1", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX4LAMJHDcjs.Field, { label: "Target Duration", children: (f) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
25355
25410
  _chunkALPRQ3ZXcjs.Select,
25356
25411
  {
25357
25412
  value: targetDurationSeconds.toString(),
@@ -25452,7 +25507,7 @@ var AIStatusIndicator = ({
25452
25507
  }) => {
25453
25508
  const config = statusConfig[status];
25454
25509
  const displayText = message || config.label;
25455
- const confidenceLabel = showConfidence && confidence !== void 0 ? `${_chunkWZX26ODJcjs.getConfidenceLabel.call(void 0, confidence)} (${confidence}%)` : null;
25510
+ const confidenceLabel = showConfidence && confidence !== void 0 ? `${_chunkX4LAMJHDcjs.getConfidenceLabel.call(void 0, confidence)} (${confidence}%)` : null;
25456
25511
  return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk3ATAYP36cjs.cn.call(void 0, "inline-flex items-center gap-2 rounded-lg px-3 py-1.5", config.bgColor, className), children: [
25457
25512
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
25458
25513
  _chunkUNFCRSYIcjs.SparklesIcon,
@@ -25460,7 +25515,7 @@ var AIStatusIndicator = ({
25460
25515
  size: 16,
25461
25516
  className: _chunk3ATAYP36cjs.cn.call(void 0,
25462
25517
  status === "loading" && "animate-pulse",
25463
- confidence !== void 0 && status === "success" ? _chunkWZX26ODJcjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25518
+ confidence !== void 0 && status === "success" ? _chunkX4LAMJHDcjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25464
25519
  )
25465
25520
  }
25466
25521
  ),
@@ -25469,7 +25524,7 @@ var AIStatusIndicator = ({
25469
25524
  {
25470
25525
  className: _chunk3ATAYP36cjs.cn.call(void 0,
25471
25526
  "text-h6",
25472
- confidence !== void 0 && status === "success" ? _chunkWZX26ODJcjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25527
+ confidence !== void 0 && status === "success" ? _chunkX4LAMJHDcjs.getConfidenceTextClass.call(void 0, confidence) : config.color
25473
25528
  ),
25474
25529
  children: displayText
25475
25530
  }
@@ -25479,8 +25534,8 @@ var AIStatusIndicator = ({
25479
25534
  {
25480
25535
  className: _chunk3ATAYP36cjs.cn.call(void 0,
25481
25536
  "rounded-full border px-2 py-0.5 text-h6",
25482
- _chunkWZX26ODJcjs.getConfidenceBorderClass.call(void 0, confidence),
25483
- _chunkWZX26ODJcjs.getConfidenceTextClass.call(void 0, confidence)
25537
+ _chunkX4LAMJHDcjs.getConfidenceBorderClass.call(void 0, confidence),
25538
+ _chunkX4LAMJHDcjs.getConfidenceTextClass.call(void 0, confidence)
25484
25539
  ),
25485
25540
  children: confidenceLabel
25486
25541
  }
@@ -26376,7 +26431,7 @@ function PoliciesTable({
26376
26431
  cell: ({ row }) => row.original.href ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
26377
26432
  _chunk2QMBXGMQcjs.Button,
26378
26433
  {
26379
- onClick: _chunkWZX26ODJcjs.openInNewTab.call(void 0, row.original.href),
26434
+ onClick: _chunkX4LAMJHDcjs.openInNewTab.call(void 0, row.original.href),
26380
26435
  variant: "outline",
26381
26436
  size: "icon",
26382
26437
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -26702,7 +26757,7 @@ function TenantsTableView({
26702
26757
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
26703
26758
  _chunk2QMBXGMQcjs.Button,
26704
26759
  {
26705
- onClick: _chunkWZX26ODJcjs.openInNewTab.call(void 0, getHref(row.original)),
26760
+ onClick: _chunkX4LAMJHDcjs.openInNewTab.call(void 0, getHref(row.original)),
26706
26761
  variant: "outline",
26707
26762
  size: "icon",
26708
26763
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -26780,13 +26835,13 @@ function WaitlistForm({
26780
26835
  const [email, setEmail] = _react.useState.call(void 0, defaultEmail);
26781
26836
  const [phone, setPhone] = _react.useState.call(void 0, defaultPhone);
26782
26837
  const [countryCode, setCountryCode] = _react.useState.call(void 0, "US");
26783
- const { toast } = _chunk4FWURR3Wcjs.useToast.call(void 0, );
26784
- const { honeypotInputProps, getSignals, resetSignals } = _chunk4FWURR3Wcjs.useHumanitySignals.call(void 0, );
26838
+ const { toast } = _chunkVUWPLQBYcjs.useToast.call(void 0, );
26839
+ const { honeypotInputProps, getSignals, resetSignals } = _chunkVUWPLQBYcjs.useHumanitySignals.call(void 0, );
26785
26840
  const [smsConsent, setSmsConsent] = _react.useState.call(void 0, false);
26786
- const isClient = _chunkV3UJ6NDRcjs.useIsHydrated.call(void 0, );
26841
+ const isClient = _chunkTPH4SRR2cjs.useIsHydrated.call(void 0, );
26787
26842
  const [isPhoneInvalid, setIsPhoneInvalid] = _react.useState.call(void 0, false);
26788
26843
  const [showConsentError, setShowConsentError] = _react.useState.call(void 0, false);
26789
- const rescue = _chunk4FWURR3Wcjs.useFormRescue.call(void 0, {
26844
+ const rescue = _chunkVUWPLQBYcjs.useFormRescue.call(void 0, {
26790
26845
  form: rescueForm,
26791
26846
  // The phone is reported as filled only; its value never leaves the form early.
26792
26847
  fieldNames: ["email", "phone"],
@@ -26798,7 +26853,7 @@ function WaitlistForm({
26798
26853
  _react.useEffect.call(void 0, () => {
26799
26854
  rescue.track({ email, phone }, null);
26800
26855
  }, [email, phone, rescue]);
26801
- const isMailDomainGeneric = _chunkWZX26ODJcjs.hasGenericEmailDomain.call(void 0, email);
26856
+ const isMailDomainGeneric = _chunkX4LAMJHDcjs.hasGenericEmailDomain.call(void 0, email);
26802
26857
  const [syncedDefaultEmail, setSyncedDefaultEmail] = _react.useState.call(void 0, defaultEmail);
26803
26858
  if (syncedDefaultEmail !== defaultEmail) {
26804
26859
  setSyncedDefaultEmail(defaultEmail);
@@ -26832,7 +26887,7 @@ function WaitlistForm({
26832
26887
  setShowConsentError(true);
26833
26888
  return;
26834
26889
  }
26835
- const finalPhone = phone ? _chunkWZX26ODJcjs.formatPhoneE164.call(void 0, phone, countryCode) : void 0;
26890
+ const finalPhone = phone ? _chunkX4LAMJHDcjs.formatPhoneE164.call(void 0, phone, countryCode) : void 0;
26836
26891
  try {
26837
26892
  await onRegister(email, finalPhone, getSignals(), rescue.submitFields());
26838
26893
  rescue.complete();
@@ -27555,7 +27610,7 @@ var typeColorByVariant = {
27555
27610
  error: "text-ods-error"
27556
27611
  };
27557
27612
  var progressColorByVariant2 = {
27558
- ..._chunk4FWURR3Wcjs.progressColorByVariant,
27613
+ ..._chunkVUWPLQBYcjs.progressColorByVariant,
27559
27614
  default: "bg-ods-accent",
27560
27615
  info: "bg-ods-accent"
27561
27616
  };
@@ -27632,7 +27687,7 @@ function NotificationTile({
27632
27687
  height: 16,
27633
27688
  unoptimized: true
27634
27689
  }
27635
- ) : _nullishCoalesce(icon, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "size-1.5 rounded-full", _chunk4FWURR3Wcjs.dotColorByVariant[accentVariant]) }))) }),
27690
+ ) : _nullishCoalesce(icon, () => ( /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunk3ATAYP36cjs.cn.call(void 0, "size-1.5 rounded-full", _chunkVUWPLQBYcjs.dotColorByVariant[accentVariant]) }))) }),
27636
27691
  type ? lockscreen ? (
27637
27692
  // A phone names the sender in plain words and never cuts them.
27638
27693
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "min-w-0 flex-1 break-words text-ods-text-secondary text-h6", children: type })
@@ -27940,7 +27995,7 @@ function ShowNotificationsToggleRow({ checked, onChange }) {
27940
27995
  ] });
27941
27996
  }
27942
27997
  function DesktopNotificationsToggleRow({ checked, onChange }) {
27943
- const { supported, permission, request } = _chunk4FWURR3Wcjs.useNotificationPermission.call(void 0, );
27998
+ const { supported, permission, request } = _chunkVUWPLQBYcjs.useNotificationPermission.call(void 0, );
27944
27999
  if (!supported) return null;
27945
28000
  const blocked = permission === "denied";
27946
28001
  const handleChange = async (value) => {
@@ -28948,7 +29003,7 @@ function getDeviceStatusConfig(status) {
28948
29003
  }
28949
29004
  }
28950
29005
  function getDeviceOperatingSystem(osType) {
28951
- return _chunkWZX26ODJcjs.getOSPlatformId.call(void 0, osType);
29006
+ return _chunkX4LAMJHDcjs.getOSPlatformId.call(void 0, osType);
28952
29007
  }
28953
29008
 
28954
29009
  // src/components/features/devices/device-statuses.ts
@@ -30270,7 +30325,7 @@ function DevicesList({
30270
30325
  const handleClearAll = _react.useCallback.call(void 0, () => patch({ search: "", tags: [] }), [patch]);
30271
30326
  const narrowed = isNarrowed(narrowing);
30272
30327
  const isEmptyState = !isLoading && !isPending && !narrowed && devices.length === 0;
30273
- const { toolbarRef, containerStyle, stickyHeaderOffset: measuredOffset } = _chunk4FWURR3Wcjs.useStickyToolbar.call(void 0, );
30328
+ const { toolbarRef, containerStyle, stickyHeaderOffset: measuredOffset } = _chunkVUWPLQBYcjs.useStickyToolbar.call(void 0, );
30274
30329
  const headerOffset = _nullishCoalesce(stickyHeaderOffset, () => ( (stickyToolbar ? measuredOffset : void 0)));
30275
30330
  const actionsColumn = _react.useMemo.call(void 0, () => rowActions ? getDeviceActionsColumn(rowActions) : void 0, [rowActions]);
30276
30331
  return (
@@ -30503,7 +30558,7 @@ function DevicesPanelView({
30503
30558
  actionsVariant: "icon-buttons",
30504
30559
  className,
30505
30560
  selector: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
30506
- _chunkV3UJ6NDRcjs.TabSelector,
30561
+ _chunkTPH4SRR2cjs.TabSelector,
30507
30562
  {
30508
30563
  value: viewMode,
30509
30564
  onValueChange: (value) => _optionalChain([onViewModeChange, 'optionalCall', _655 => _655(value)]),
@@ -31019,10 +31074,10 @@ var ToolBadge = ({
31019
31074
  className,
31020
31075
  iconClassName
31021
31076
  }) => {
31022
- const text = _nullishCoalesce(label, () => ( (toolType ? _chunkWZX26ODJcjs.getToolLabel.call(void 0, toolType) : "")));
31077
+ const text = _nullishCoalesce(label, () => ( (toolType ? _chunkX4LAMJHDcjs.getToolLabel.call(void 0, toolType) : "")));
31023
31078
  const mark = _nullishCoalesce(icon, () => ( (toolType ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWI2OTGKCcjs.ToolIcon, { toolType, className: iconClassName, size: 16 }) : null)));
31024
31079
  const linked = (node, linkClassName) => href && targetPlatform ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31025
- _chunkV3UJ6NDRcjs.NavLinkAnchorViaRuntime,
31080
+ _chunkTPH4SRR2cjs.NavLinkAnchorViaRuntime,
31026
31081
  {
31027
31082
  href,
31028
31083
  targetPlatform,
@@ -31129,7 +31184,7 @@ function LogsTableView({
31129
31184
  cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31130
31185
  ToolBadge,
31131
31186
  {
31132
- toolType: _chunkWZX26ODJcjs.normalizeToolTypeWithFallback.call(void 0, row.original.source.toolType),
31187
+ toolType: _chunkX4LAMJHDcjs.normalizeToolTypeWithFallback.call(void 0, row.original.source.toolType),
31133
31188
  iconClassName: "h-4 w-4 content-md:h-6 content-md:w-6"
31134
31189
  }
31135
31190
  ),
@@ -31141,7 +31196,7 @@ function LogsTableView({
31141
31196
  filter: {
31142
31197
  options: _nullishCoalesce(_optionalChain([facets, 'optionalAccess', _663 => _663.toolTypes, 'access', _664 => _664.map, 'call', _665 => _665((toolType) => ({
31143
31198
  id: toolType,
31144
- label: _chunkWZX26ODJcjs.toToolLabel.call(void 0, toolType),
31199
+ label: _chunkX4LAMJHDcjs.toToolLabel.call(void 0, toolType),
31145
31200
  value: toolType
31146
31201
  }))]), () => ( []))
31147
31202
  }
@@ -31199,7 +31254,7 @@ function LogsTableView({
31199
31254
  cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31200
31255
  _chunk2QMBXGMQcjs.Button,
31201
31256
  {
31202
- onClick: getLogHref ? _chunkWZX26ODJcjs.openInNewTab.call(void 0, getLogHref(row.original)) : void 0,
31257
+ onClick: getLogHref ? _chunkX4LAMJHDcjs.openInNewTab.call(void 0, getLogHref(row.original)) : void 0,
31203
31258
  variant: "outline",
31204
31259
  size: "icon",
31205
31260
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -31574,7 +31629,7 @@ function OpenInNewTabCell({ href }) {
31574
31629
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
31575
31630
  _chunk2QMBXGMQcjs.Button,
31576
31631
  {
31577
- onClick: _chunkWZX26ODJcjs.openInNewTab.call(void 0, href),
31632
+ onClick: _chunkX4LAMJHDcjs.openInNewTab.call(void 0, href),
31578
31633
  variant: "outline",
31579
31634
  size: "icon",
31580
31635
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -31723,9 +31778,9 @@ function ScriptSchedulesTable({
31723
31778
 
31724
31779
  // src/components/features/scripts/shell-types.ts
31725
31780
  var SCRIPT_SHELL_TYPES = [
31726
- { id: _chunkWZX26ODJcjs.ShellTypeValues.POWERSHELL, label: "PowerShell", value: "powershell", icon: _chunkMCQY746Mcjs.PowershellLogoGreyIcon },
31727
- { id: _chunkWZX26ODJcjs.ShellTypeValues.CMD, label: "CMD", value: "cmd", icon: _chunkNIVJEJSGcjs.TerminalSquareIcon },
31728
- { id: _chunkWZX26ODJcjs.ShellTypeValues.BASH, label: "Bash", value: "bash", icon: _chunkTRUW6DDAcjs.TerminalIcon }
31781
+ { id: _chunkX4LAMJHDcjs.ShellTypeValues.POWERSHELL, label: "PowerShell", value: "powershell", icon: _chunkMCQY746Mcjs.PowershellLogoGreyIcon },
31782
+ { id: _chunkX4LAMJHDcjs.ShellTypeValues.CMD, label: "CMD", value: "cmd", icon: _chunkNIVJEJSGcjs.TerminalSquareIcon },
31783
+ { id: _chunkX4LAMJHDcjs.ShellTypeValues.BASH, label: "Bash", value: "bash", icon: _chunkTRUW6DDAcjs.TerminalIcon }
31729
31784
  ];
31730
31785
  function scriptShellType(value) {
31731
31786
  return SCRIPT_SHELL_TYPES.find((shell) => shell.value === value);
@@ -33158,7 +33213,7 @@ function ScheduleFormFields({
33158
33213
  disabled = false,
33159
33214
  renderScriptSearch,
33160
33215
  timeReferenceGate = "off",
33161
- platforms = _chunkWZX26ODJcjs.OS_PLATFORMS,
33216
+ platforms = _chunkX4LAMJHDcjs.OS_PLATFORMS,
33162
33217
  comingSoonPlatforms = [],
33163
33218
  getTimeSlots,
33164
33219
  nameLayout = "stacked",
@@ -33304,7 +33359,7 @@ function ScheduleFormFields({
33304
33359
  // src/components/features/scripts/schedule-form/schedule-script-search-field.tsx
33305
33360
 
33306
33361
  function ScriptPlatformIcons({ platforms }) {
33307
- return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "inline-flex shrink-0 items-center gap-0.5", children: _chunkWZX26ODJcjs.OS_PLATFORMS.filter((p) => platforms.includes(p.id)).map((p) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, p.icon, { className: "h-3.5 w-3.5 text-ods-text-secondary opacity-60" }, p.id)) });
33362
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "inline-flex shrink-0 items-center gap-0.5", children: _chunkX4LAMJHDcjs.OS_PLATFORMS.filter((p) => platforms.includes(p.id)).map((p) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, p.icon, { className: "h-3.5 w-3.5 text-ods-text-secondary opacity-60" }, p.id)) });
33308
33363
  }
33309
33364
  function ScheduleScriptSearchField({
33310
33365
  scriptId,
@@ -33377,7 +33432,7 @@ function getKnowledgeBaseOpenColumn(getHref) {
33377
33432
  cell: ({ row }) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-no-row-click": true, className: "pointer-events-auto flex items-center justify-end", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33378
33433
  _chunk2QMBXGMQcjs.Button,
33379
33434
  {
33380
- onClick: _chunkWZX26ODJcjs.openInNewTab.call(void 0, getHref(row.original)),
33435
+ onClick: _chunkX4LAMJHDcjs.openInNewTab.call(void 0, getHref(row.original)),
33381
33436
  variant: "outline",
33382
33437
  size: "icon",
33383
33438
  leftIcon: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkANTDIQKKcjs.ArrowRightUpIcon, { className: "h-5 w-5" }),
@@ -33625,13 +33680,13 @@ function ConversationCard({
33625
33680
  ),
33626
33681
  style: tint,
33627
33682
  children: [
33628
- /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWZX26ODJcjs.ChatTurn, { avatar: requester.avatar, name: requester.name, meta: requester.meta, time: requester.time, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "m-0 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
33683
+ /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkX4LAMJHDcjs.ChatTurn, { avatar: requester.avatar, name: requester.name, meta: requester.meta, time: requester.time, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "p", { className: "m-0 line-clamp-2 min-h-[2lh] text-ods-text-primary text-h3", title: request, children: [
33629
33684
  "\u201C",
33630
33685
  request,
33631
33686
  "\u201D"
33632
33687
  ] }) }),
33633
33688
  /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
33634
- _chunkWZX26ODJcjs.ChatTurn,
33689
+ _chunkX4LAMJHDcjs.ChatTurn,
33635
33690
  {
33636
33691
  avatar: responder.avatar,
33637
33692
  name: responder.name,