@flamingo-stack/openframe-frontend-core 0.0.731 → 0.0.733

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 (149) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-RAHRDJBP.cjs → chunk-3HPB4H4C.cjs} +4 -4
  3. package/dist/{chunk-2UNQJVYN.cjs → chunk-3KGICRH7.cjs} +1457 -1187
  4. package/dist/{chunk-A4HNF4MP.cjs → chunk-3UTPZW36.cjs} +89 -89
  5. package/dist/{chunk-GID62YEN.cjs → chunk-AAFW4STC.cjs} +3 -3
  6. package/dist/{chunk-XDBHGWFH.cjs → chunk-ATMBJBOI.cjs} +16 -16
  7. package/dist/{chunk-YDGBRI3Y.cjs → chunk-AV5533DH.cjs} +15 -15
  8. package/dist/{chunk-BFHLGEJK.cjs → chunk-BP6R5WDW.cjs} +63 -60
  9. package/dist/{chunk-CLILWI6O.cjs → chunk-CJVAA7KL.cjs} +32 -32
  10. package/dist/{chunk-YJFN2W7A.cjs → chunk-DUVOQHQI.cjs} +7 -7
  11. package/dist/{chunk-E3N24573.cjs → chunk-DUXLZPMJ.cjs} +9 -9
  12. package/dist/{chunk-TH4N726A.cjs → chunk-E26I4XH6.cjs} +17 -17
  13. package/dist/{chunk-Y4QRK3CB.cjs → chunk-EMG3T55N.cjs} +7 -7
  14. package/dist/{chunk-JK75ZZP3.cjs → chunk-EQORT7NK.cjs} +59 -59
  15. package/dist/chunk-FCGLSWKR.cjs +417 -0
  16. package/dist/{chunk-MANNIJ42.cjs → chunk-FICJS5OA.cjs} +6 -0
  17. package/dist/{chunk-QP6QS3YU.cjs → chunk-FNRMDDVN.cjs} +48 -50
  18. package/dist/{chunk-KLXHCNDC.cjs → chunk-FTTLBMHU.cjs} +3 -3
  19. package/dist/{chunk-JPZ4Y6X3.cjs → chunk-GB3CHAW7.cjs} +93 -93
  20. package/dist/{chunk-7DUXR4HL.cjs → chunk-GVTDVS5U.cjs} +3 -3
  21. package/dist/{chunk-ZV6473Z4.cjs → chunk-HSWHOCZ3.cjs} +20 -20
  22. package/dist/{chunk-53XZ6MJ5.cjs → chunk-IC4FT3A6.cjs} +28 -28
  23. package/dist/{chunk-6V4GEE55.cjs → chunk-J7JKPTGO.cjs} +12 -12
  24. package/dist/{chunk-FKKUQK4C.cjs → chunk-L4ZNR5V7.cjs} +43 -39
  25. package/dist/{chunk-NYY25425.cjs → chunk-MYBTNOS6.cjs} +2 -2
  26. package/dist/chunk-NTJE6SM6.cjs +28 -0
  27. package/dist/{chunk-RBOIGJYF.cjs → chunk-P3R23TOE.cjs} +35 -35
  28. package/dist/chunk-PX7FY655.cjs +114 -0
  29. package/dist/{chunk-YUXRIR45.cjs → chunk-SA7LDEVJ.cjs} +98 -50
  30. package/dist/{chunk-32ENYVFA.cjs → chunk-TIMCHP4X.cjs} +42 -42
  31. package/dist/{chunk-3SWLL4IM.cjs → chunk-U4T5NLZD.cjs} +8 -8
  32. package/dist/{chunk-HI7EFAFQ.cjs → chunk-XDWY6HAW.cjs} +28 -28
  33. package/dist/{chunk-25H2SZH7.cjs → chunk-XY632BCH.cjs} +4 -4
  34. package/dist/{chunk-HY2KTQSL.cjs → chunk-YIXKH2JO.cjs} +236 -236
  35. package/dist/{chunk-4YPV4OI4.cjs → chunk-ZBNA6TCW.cjs} +82 -82
  36. package/dist/{chunk-HLIJ3U2T.cjs → chunk-ZJNYWNCB.cjs} +23 -21
  37. package/dist/{chunk-HEOD765R.cjs → chunk-ZRYKDN2J.cjs} +32 -379
  38. package/dist/{cloud-tenants-SC4FNAC2.cjs → cloud-tenants-3GOGR3EN.cjs} +22 -22
  39. package/dist/components/agent-identity.d.ts +8 -0
  40. package/dist/components/agent-identity.d.ts.map +1 -1
  41. package/dist/components/agent-identity.js +13 -1
  42. package/dist/components/case-studies/index.cjs +35 -35
  43. package/dist/components/chat/embeddable-chat.d.ts +16 -0
  44. package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
  45. package/dist/components/chat/embeddable-chat.js +5 -2
  46. package/dist/components/chat/index.cjs +16 -16
  47. package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
  48. package/dist/components/chat/utils/icon-library.js +6 -0
  49. package/dist/components/contact/index.cjs +23 -23
  50. package/dist/components/docs/index.cjs +26 -26
  51. package/dist/components/embeds/index.cjs +23 -23
  52. package/dist/components/faq/index.cjs +23 -23
  53. package/dist/components/features/index.cjs +22 -22
  54. package/dist/components/help-center-pages/index.cjs +138 -138
  55. package/dist/components/index.cjs +89 -82
  56. package/dist/components/meeting-scheduler/index.cjs +67 -67
  57. package/dist/components/navigation/index.cjs +25 -25
  58. package/dist/components/onboarding-guides/index.cjs +25 -25
  59. package/dist/components/product-demo/index.cjs +8 -8
  60. package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -1
  61. package/dist/components/product-demo/screens/remote-desktop-picture.js +2 -1
  62. package/dist/components/related-content/index.cjs +10 -10
  63. package/dist/components/tickets/index.cjs +26 -26
  64. package/dist/components/ui/device-wallpaper.d.ts +7 -0
  65. package/dist/components/ui/device-wallpaper.d.ts.map +1 -0
  66. package/dist/components/ui/device-wallpaper.js +5 -0
  67. package/dist/components/ui/feature-list.d.ts +9 -4
  68. package/dist/components/ui/feature-list.d.ts.map +1 -1
  69. package/dist/components/ui/feature-list.js +26 -35
  70. package/dist/components/ui/index.cjs +28 -22
  71. package/dist/components/ui/index.d.ts +3 -1
  72. package/dist/components/ui/index.d.ts.map +1 -1
  73. package/dist/components/ui/index.js +3 -1
  74. package/dist/components/ui/notification-stack.d.ts +33 -0
  75. package/dist/components/ui/notification-stack.d.ts.map +1 -0
  76. package/dist/components/ui/notification-stack.js +78 -0
  77. package/dist/components/ui/numbered-step.d.ts +29 -0
  78. package/dist/components/ui/numbered-step.d.ts.map +1 -0
  79. package/dist/components/ui/numbered-step.js +57 -0
  80. package/dist/components/ui/phone-frame.d.ts +14 -9
  81. package/dist/components/ui/phone-frame.d.ts.map +1 -1
  82. package/dist/components/ui/phone-frame.js +50 -6
  83. package/dist/components/ui/phone-glyphs/lock-camera-glyph.d.ts +5 -0
  84. package/dist/components/ui/phone-glyphs/lock-camera-glyph.d.ts.map +1 -0
  85. package/dist/components/ui/phone-glyphs/lock-camera-glyph.js +14 -0
  86. package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.d.ts +5 -0
  87. package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.d.ts.map +1 -0
  88. package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.js +14 -0
  89. package/dist/components/ui/phone-glyphs/status-bar-glyphs.d.ts +5 -0
  90. package/dist/components/ui/phone-glyphs/status-bar-glyphs.d.ts.map +1 -0
  91. package/dist/components/ui/phone-glyphs/status-bar-glyphs.js +68 -0
  92. package/dist/components/ui/searchable-select.d.ts +29 -3
  93. package/dist/components/ui/searchable-select.d.ts.map +1 -1
  94. package/dist/components/ui/searchable-select.js +101 -45
  95. package/dist/components/ui/snap-carousel.d.ts +5 -8
  96. package/dist/components/ui/snap-carousel.d.ts.map +1 -1
  97. package/dist/components/ui/snap-carousel.js +2 -27
  98. package/dist/components/ui/tab-navigation.d.ts +8 -1
  99. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  100. package/dist/components/ui/tab-navigation.js +30 -20
  101. package/dist/{devices-7MHSJNXS.cjs → devices-POZXTP7X.cjs} +23 -23
  102. package/dist/{embeddable-chat-VPIG3F7E.cjs → embeddable-chat-I3Y5GCCR.cjs} +96 -93
  103. package/dist/hooks/index.cjs +9 -9
  104. package/dist/hooks/ui/use-autoplay.d.ts +50 -13
  105. package/dist/hooks/ui/use-autoplay.d.ts.map +1 -1
  106. package/dist/hooks/ui/use-autoplay.js +76 -13
  107. package/dist/hooks/ui/use-in-view.d.ts +8 -0
  108. package/dist/hooks/ui/use-in-view.d.ts.map +1 -1
  109. package/dist/hooks/ui/use-in-view.js +21 -36
  110. package/dist/hooks/use-agent-identities.d.ts +6 -0
  111. package/dist/hooks/use-agent-identities.d.ts.map +1 -1
  112. package/dist/hooks/use-scenario-player.d.ts +26 -9
  113. package/dist/hooks/use-scenario-player.d.ts.map +1 -1
  114. package/dist/hooks/use-scenario-player.js +12 -9
  115. package/dist/index.cjs +58 -51
  116. package/dist/{knowledge-4DREGSOZ.cjs → knowledge-AP34IMXN.cjs} +23 -23
  117. package/dist/{logs-BWXNT2KP.cjs → logs-CEVMIOPW.cjs} +30 -30
  118. package/dist/{policies-MGFUI23M.cjs → policies-AMBMRCGB.cjs} +26 -26
  119. package/dist/{remote-session-O6QGXV2N.cjs → remote-session-Z4YZFG5E.cjs} +10 -9
  120. package/dist/{software-update-7LF7XEYC.cjs → software-update-Z3MWMSHI.cjs} +26 -26
  121. package/dist/{tickets-board-KNXK747O.cjs → tickets-board-JOSYLOS7.cjs} +13 -13
  122. package/package.json +1 -1
  123. package/src/components/agent-identity.tsx +20 -1
  124. package/src/components/chat/embeddable-chat.tsx +29 -2
  125. package/src/components/chat/utils/icon-library.tsx +7 -0
  126. package/src/components/product-demo/screens/remote-desktop-picture.tsx +2 -1
  127. package/src/components/ui/device-wallpaper.ts +7 -0
  128. package/src/components/ui/feature-list.tsx +24 -30
  129. package/src/components/ui/index.ts +3 -1
  130. package/src/components/ui/notification-stack.tsx +133 -0
  131. package/src/components/ui/numbered-step.tsx +81 -0
  132. package/src/components/ui/phone-frame.tsx +83 -19
  133. package/src/components/ui/phone-glyphs/lock-camera-glyph.tsx +14 -0
  134. package/src/components/ui/phone-glyphs/lock-flashlight-glyph.tsx +14 -0
  135. package/src/components/ui/phone-glyphs/status-bar-glyphs.tsx +45 -0
  136. package/src/components/ui/searchable-select.tsx +124 -32
  137. package/src/components/ui/snap-carousel.tsx +6 -38
  138. package/src/components/ui/tab-navigation.tsx +49 -21
  139. package/src/hooks/ui/use-autoplay.ts +144 -27
  140. package/src/hooks/ui/use-in-view.ts +31 -38
  141. package/src/hooks/use-agent-identities.ts +6 -0
  142. package/src/hooks/use-scenario-player.ts +44 -20
  143. package/dist/chunk-2WXLQ5R5.cjs +0 -99
  144. package/dist/chunk-BE2WAMG5.cjs +0 -54
  145. package/dist/chunk-LCTDHLDL.cjs +0 -43
  146. package/dist/components/ui/playback-toggle.d.ts +0 -24
  147. package/dist/components/ui/playback-toggle.d.ts.map +0 -1
  148. package/dist/components/ui/playback-toggle.js +0 -32
  149. package/src/components/ui/playback-toggle.tsx +0 -53
@@ -6,7 +6,6 @@ import { useInView } from "../../hooks/ui/use-in-view.js";
6
6
  import { cn } from "../../utils/cn.js";
7
7
  import { Chevron02LeftIcon } from "../icons-v2-generated/arrows/chevron-02-left-icon.js";
8
8
  import { Chevron02RightIcon } from "../icons-v2-generated/arrows/chevron-02-right-icon.js";
9
- import { PlaybackToggle } from "./playback-toggle.js";
10
9
  const SNAP_CAROUSEL_CONTROLS_CLASS = "mt-3 flex items-center gap-2";
11
10
  function SnapCarouselControlsSkeleton({ className }) {
12
11
  return /* @__PURE__ */ jsx("div", { "aria-hidden": true, className: cn(SNAP_CAROUSEL_CONTROLS_CLASS, "h-11", className) });
@@ -32,8 +31,6 @@ function SnapCarousel({
32
31
  getKey,
33
32
  label,
34
33
  autoAdvanceMs = 5e3,
35
- playLabel,
36
- pauseLabel,
37
34
  slideClassName = "basis-[300px]",
38
35
  prevLabel = "Previous",
39
36
  nextLabel = "Next",
@@ -42,7 +39,6 @@ function SnapCarousel({
42
39
  }) {
43
40
  const trackRef = useRef(null);
44
41
  const [index, setIndex] = useState(0);
45
- const [pressed, setPressed] = useState(false);
46
42
  const { ref: viewRef, inView } = useInView({ threshold: 0.5 });
47
43
  const auto = useAutoplay(inView);
48
44
  const count = items.length;
@@ -73,20 +69,8 @@ function SnapCarousel({
73
69
  if (!track || step === 0) return;
74
70
  setIndex(Math.min(count - 1, Math.round(track.scrollLeft / step)));
75
71
  }, [count, slideStep]);
76
- useEffect(() => {
77
- if (!pressed) return void 0;
78
- const release = () => setPressed(false);
79
- window.addEventListener("pointerup", release);
80
- window.addEventListener("pointercancel", release);
81
- window.addEventListener("blur", release);
82
- return () => {
83
- window.removeEventListener("pointerup", release);
84
- window.removeEventListener("pointercancel", release);
85
- window.removeEventListener("blur", release);
86
- };
87
- }, [pressed]);
88
72
  const canAutoAdvance = autoAdvanceMs > 0 && count > 1;
89
- const playing = auto.playing && canAutoAdvance && !pressed;
73
+ const playing = auto.playing && canAutoAdvance;
90
74
  useEffect(() => {
91
75
  if (!playing) return void 0;
92
76
  const timer = setTimeout(() => goTo(index >= count - 1 ? 0 : index + 1), autoAdvanceMs);
@@ -100,7 +84,7 @@ function SnapCarousel({
100
84
  [viewRef]
101
85
  );
102
86
  if (count === 0) return null;
103
- return /* @__PURE__ */ jsxs("div", { className, onPointerDown: () => setPressed(true), children: [
87
+ return /* @__PURE__ */ jsxs("div", { className, ...auto.holdProps, children: [
104
88
  /* @__PURE__ */ jsx(
105
89
  "div",
106
90
  {
@@ -151,15 +135,6 @@ function SnapCarousel({
151
135
  ]
152
136
  }
153
137
  ),
154
- canAutoAdvance && !auto.reducedMotion && /* @__PURE__ */ jsx(
155
- PlaybackToggle,
156
- {
157
- paused: auto.paused,
158
- onChange: auto.setPaused,
159
- playLabel,
160
- pauseLabel
161
- }
162
- ),
163
138
  /* @__PURE__ */ jsx(
164
139
  "button",
165
140
  {
@@ -41,10 +41,17 @@ export interface TabItem {
41
41
  /**
42
42
  * 0..1. Set on the ACTIVE tab, the underline stops being a selection marker
43
43
  * and becomes a progress line: its width is this fraction of the tab, and it
44
- * moves there linearly over `progressTransitionMs`. A timed, auto-advancing
44
+ * moves there linearly over `progressTransitionMs`. Start it above 0 (the
45
+ * first step of N is 1/N): at 0 the open tab has no underline at all. A timed, auto-advancing
45
46
  * strip (a looping demo) uses it; `0` snaps back with no animation.
46
47
  */
47
48
  progress?: number;
49
+ /**
50
+ * The tab's own colour (a CSS colour, such as the hex an agent's identity
51
+ * stores): its underline and its icon take it while the tab is open. Omitted,
52
+ * they are the platform's accent.
53
+ */
54
+ accent?: string;
48
55
  }
49
56
  export interface TabNavigationUrlSyncOptions {
50
57
  paramName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"tab-navigation.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tab-navigation.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,kBAAkB;IAE1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;iFAC6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC9B,yFAAyF;IACzF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,OAAO,CAAC,EAAE,OAAO,GAAG,2BAA2B,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;CAChF;AA8YD,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,qBAAqB,EAClC,IAAI,EACJ,SAAS,EACT,eAAe,EACf,iBAAyB,EACzB,gBAAwB,EACxB,WAAmB,EACnB,QAAmB,EACnB,oBAA0B,EAC1B,OAAe,EACf,UAAU,EACV,QAAQ,GACT,EAAE,kBAAkB,qBAkLpB;AAGD,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,EAAE,EAAE,OAAO,MAAM,KAAG,OAAO,GAAG,SAA+C,CAAC;AAGtH,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,EAAE,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC,GAAG,IAGvF,CAAC"}
1
+ {"version":3,"file":"tab-navigation.d.ts","sourceRoot":"","sources":["../../../src/components/ui/tab-navigation.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,oFAAoF;IACpF,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAC5C;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,kBAAkB;IAE1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kFAAkF;IAClF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;iFAC6E;IAC7E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC9B,yFAAyF;IACzF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAG9B,OAAO,CAAC,EAAE,OAAO,GAAG,2BAA2B,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,KAAK,CAAC,SAAS,CAAC;CAChF;AAmaD,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EAAE,mBAAmB,EAC9B,WAAW,EAAE,qBAAqB,EAClC,IAAI,EACJ,SAAS,EACT,eAAe,EACf,iBAAyB,EACzB,gBAAwB,EACxB,WAAmB,EACnB,QAAmB,EACnB,oBAA0B,EAC1B,OAAe,EACf,UAAU,EACV,QAAQ,GACT,EAAE,kBAAkB,qBAkLpB;AAGD,eAAO,MAAM,UAAU,GAAI,MAAM,OAAO,EAAE,EAAE,OAAO,MAAM,KAAG,OAAO,GAAG,SAA+C,CAAC;AAGtH,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,EAAE,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,WAAW,CAAC,GAAG,IAGvF,CAAC"}
@@ -130,7 +130,23 @@ const TabBar = memo(function TabBarImpl({
130
130
  const isPlaced = indicator.width > 0;
131
131
  const activeProgress = tabs.find((tab) => tab.id === activeTab)?.progress;
132
132
  const hasProgress = typeof activeProgress === "number";
133
- const progress = hasProgress ? Math.max(0, Math.min(1, activeProgress)) : 1;
133
+ const target = hasProgress ? Math.max(0, Math.min(1, activeProgress)) : 1;
134
+ const [run, setRun] = useState({ tab: null, progress: 0 });
135
+ const startsOver = hasProgress && (run.tab !== activeTab || target < run.progress);
136
+ if (hasProgress && !startsOver && run.progress !== target) setRun({ tab: activeTab, progress: target });
137
+ useEffect(() => {
138
+ if (!startsOver) return void 0;
139
+ let second = 0;
140
+ const first = requestAnimationFrame(() => {
141
+ second = requestAnimationFrame(() => setRun({ tab: activeTab, progress: target }));
142
+ });
143
+ return () => {
144
+ cancelAnimationFrame(first);
145
+ cancelAnimationFrame(second);
146
+ };
147
+ }, [startsOver, activeTab, target]);
148
+ const progress = startsOver ? 0 : target;
149
+ const activeAccent = tabs.find((tab) => tab.id === activeTab)?.accent;
134
150
  const indicatorStyle = {
135
151
  width: `${indicator.width * progress}px`,
136
152
  transform: `translateX(${indicator.left}px)`,
@@ -152,7 +168,7 @@ const TabBar = memo(function TabBarImpl({
152
168
  "div",
153
169
  {
154
170
  ref: scrollRef,
155
- className: "scrollbar-hide relative flex h-full items-center justify-start gap-[var(--spacing-system-xxs)] overflow-x-auto overflow-y-hidden",
171
+ className: "scrollbar-hide relative flex h-full items-center justify-start overflow-x-auto overflow-y-hidden",
156
172
  children: [
157
173
  tabs.map((tab) => {
158
174
  const isActive = activeTab === tab.id;
@@ -164,26 +180,19 @@ const TabBar = memo(function TabBarImpl({
164
180
  onClick: () => onTabChange(tab.id),
165
181
  "aria-label": tab.badge ? `${tab.label} (${tab.badge})` : void 0,
166
182
  className: cn(
167
- "relative flex shrink-0 cursor-pointer items-center gap-[var(--spacing-system-xxs)] p-[var(--spacing-system-m)]",
183
+ "group relative flex shrink-0 cursor-pointer items-center gap-[var(--spacing-system-xxs)] p-[var(--spacing-system-m)]",
168
184
  tabAlign === "start" ? "justify-start text-left" : "justify-center",
169
185
  // Named rather than `transition-all`: the only thing that moves
170
- // here is colour. `all` also made the browser re-check every
171
- // property each frame, including the background GRADIENT — which
172
- // never animated anyway, since the inactive state has no
173
- // background-image to interpolate from.
186
+ // here is colour.
174
187
  "border-none bg-transparent outline-none transition-colors duration-200",
175
188
  // `outline-none` above drops the browser's own focus ring, so
176
189
  // put one back or the strip is un-navigable by keyboard — you
177
190
  // can tab through it with nothing to show where you are. Inset,
178
- // so it stays within the button instead of overlapping the tab
179
- // sitting 4px away.
191
+ // so it stays within the button: the tabs touch.
180
192
  "focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-focus",
181
193
  stretchTabs && "flex-1",
182
- tab.avatar && "gap-[var(--spacing-system-xsf)]",
183
- // Known limitation: ODS color vars hold hex values, so Tailwind
184
- // alpha modifiers (to-ods-accent/10) silently produce no CSS.
185
- // color-mix() accepts hex, so we derive the 10%-alpha stop from the token.
186
- isActive ? "bg-gradient-to-b from-transparent to-[color-mix(in_srgb,var(--color-accent-primary)_10%,transparent)]" : "hover:bg-gradient-to-b hover:from-transparent hover:to-[color-mix(in_srgb,var(--color-accent-primary)_10%,transparent)]"
194
+ tab.avatar && "gap-[var(--spacing-system-xsf)]"
195
+ // The open tab is marked by the underline alone: no surface of its own.
187
196
  ),
188
197
  children: [
189
198
  tab.avatar ? /* @__PURE__ */ jsxs("div", { className: "relative flex shrink-0 items-center justify-center", children: [
@@ -195,8 +204,9 @@ const TabBar = memo(function TabBarImpl({
195
204
  {
196
205
  className: cn(
197
206
  "h-4 w-4 transition-colors content-md:h-6 content-md:w-6",
198
- isActive ? "text-ods-accent" : "text-ods-text-secondary"
199
- )
207
+ isActive ? !tab.accent && "text-ods-accent" : "text-ods-text-secondary group-hover:text-ods-text-primary"
208
+ ),
209
+ style: isActive && tab.accent ? { color: tab.accent } : void 0
200
210
  }
201
211
  ),
202
212
  tab.indicator && /* @__PURE__ */ jsx(StatusDot, { indicator: tab.indicator, className: "absolute right-0 top-[-3px]" })
@@ -211,7 +221,7 @@ const TabBar = memo(function TabBarImpl({
211
221
  {
212
222
  className: cn(
213
223
  "whitespace-nowrap transition-colors text-h4",
214
- isActive ? "text-ods-text-primary" : "text-ods-text-secondary"
224
+ isActive ? "text-ods-text-primary" : "text-ods-text-secondary group-hover:text-ods-text-primary"
215
225
  ),
216
226
  children: tab.label
217
227
  }
@@ -252,11 +262,11 @@ const TabBar = memo(function TabBarImpl({
252
262
  "aria-hidden": true,
253
263
  "data-testid": "tab-navigation-underline",
254
264
  className: cn(
255
- "pointer-events-none absolute bottom-0 left-0 bg-ods-accent motion-reduce:transition-none",
256
- hasProgress ? "h-0.5" : "h-1",
265
+ "pointer-events-none absolute bottom-0 left-0 h-1 motion-reduce:transition-none",
266
+ !activeAccent && "bg-ods-accent",
257
267
  !hasProgress && shouldAnimateIndicator && "transition-[transform,width,opacity] duration-200 ease-out"
258
268
  ),
259
- style: indicatorStyle
269
+ style: activeAccent ? { ...indicatorStyle, backgroundColor: activeAccent } : indicatorStyle
260
270
  }
261
271
  )
262
272
  ]
@@ -11,24 +11,24 @@ require('./chunk-KHXZFLIN.cjs');
11
11
 
12
12
 
13
13
 
14
- var _chunk2UNQJVYNcjs = require('./chunk-2UNQJVYN.cjs');
15
- require('./chunk-HLIJ3U2T.cjs');
16
- require('./chunk-RAHRDJBP.cjs');
17
- require('./chunk-FKKUQK4C.cjs');
14
+ var _chunk3KGICRH7cjs = require('./chunk-3KGICRH7.cjs');
15
+ require('./chunk-ZJNYWNCB.cjs');
16
+ require('./chunk-3HPB4H4C.cjs');
17
+ require('./chunk-L4ZNR5V7.cjs');
18
18
  require('./chunk-HQQE74RO.cjs');
19
19
  require('./chunk-DEY6XXGO.cjs');
20
- require('./chunk-BFHLGEJK.cjs');
21
- require('./chunk-GID62YEN.cjs');
20
+ require('./chunk-BP6R5WDW.cjs');
21
+ require('./chunk-AAFW4STC.cjs');
22
22
  require('./chunk-24I6RFVU.cjs');
23
23
  require('./chunk-A6P6DHEZ.cjs');
24
24
  require('./chunk-MZ4KBSH7.cjs');
25
25
  require('./chunk-OXJ57643.cjs');
26
26
  require('./chunk-YUMFVQIN.cjs');
27
- require('./chunk-A4HNF4MP.cjs');
28
- require('./chunk-HY2KTQSL.cjs');
29
- require('./chunk-HEOD765R.cjs');
27
+ require('./chunk-3UTPZW36.cjs');
28
+ require('./chunk-YIXKH2JO.cjs');
29
+ require('./chunk-ZRYKDN2J.cjs');
30
30
  require('./chunk-HZJRERJW.cjs');
31
- require('./chunk-E3N24573.cjs');
31
+ require('./chunk-DUXLZPMJ.cjs');
32
32
  require('./chunk-MJGX357L.cjs');
33
33
  require('./chunk-ZOZR3QI2.cjs');
34
34
  require('./chunk-OMV5S5PI.cjs');
@@ -1818,20 +1818,20 @@ require('./chunk-LMBYZITR.cjs');
1818
1818
  require('./chunk-TMVC7S2R.cjs');
1819
1819
  require('./chunk-IYHH5EIO.cjs');
1820
1820
  require('./chunk-XIBCMGBW.cjs');
1821
- require('./chunk-YJFN2W7A.cjs');
1822
- require('./chunk-YUXRIR45.cjs');
1823
- require('./chunk-2WXLQ5R5.cjs');
1821
+ require('./chunk-DUVOQHQI.cjs');
1822
+ require('./chunk-SA7LDEVJ.cjs');
1823
+ require('./chunk-NTJE6SM6.cjs');
1824
1824
  require('./chunk-JKX2C3I2.cjs');
1825
1825
  require('./chunk-7DNL734S.cjs');
1826
1826
  require('./chunk-WWUSFOJ7.cjs');
1827
1827
  require('./chunk-SKI6NKOE.cjs');
1828
1828
  require('./chunk-EWPR7662.cjs');
1829
- require('./chunk-6V4GEE55.cjs');
1830
- require('./chunk-RBOIGJYF.cjs');
1831
- require('./chunk-BE2WAMG5.cjs');
1829
+ require('./chunk-J7JKPTGO.cjs');
1830
+ require('./chunk-P3R23TOE.cjs');
1831
+ require('./chunk-FCGLSWKR.cjs');
1832
1832
  require('./chunk-YADG5Q7C.cjs');
1833
- require('./chunk-NYY25425.cjs');
1834
- require('./chunk-KLXHCNDC.cjs');
1833
+ require('./chunk-MYBTNOS6.cjs');
1834
+ require('./chunk-FTTLBMHU.cjs');
1835
1835
  require('./chunk-S5C3OZCO.cjs');
1836
1836
  require('./chunk-32ASZMTV.cjs');
1837
1837
  require('./chunk-OOYBIS7D.cjs');
@@ -1841,10 +1841,10 @@ require('./chunk-ORO54HDF.cjs');
1841
1841
  require('./chunk-RUHKTWGB.cjs');
1842
1842
  require('./chunk-BLH2SFOO.cjs');
1843
1843
  require('./chunk-EAY6ZUES.cjs');
1844
- require('./chunk-LCTDHLDL.cjs');
1844
+ require('./chunk-PX7FY655.cjs');
1845
1845
  require('./chunk-CW3ML76U.cjs');
1846
- require('./chunk-7DUXR4HL.cjs');
1847
- require('./chunk-MANNIJ42.cjs');
1846
+ require('./chunk-GVTDVS5U.cjs');
1847
+ require('./chunk-FICJS5OA.cjs');
1848
1848
  require('./chunk-VOX4E6AX.cjs');
1849
1849
  require('./chunk-UR4K2NSL.cjs');
1850
1850
  require('./chunk-UJ7AXHRZ.cjs');
@@ -1865,14 +1865,14 @@ require('./chunk-3ATAYP36.cjs');
1865
1865
  // src/components/product-demo/screens/devices.tsx
1866
1866
  var _react = require('react');
1867
1867
  var _jsxruntime = require('react/jsx-runtime');
1868
- var TOOLBAR = { ..._chunk2UNQJVYNcjs.IDLE_DEVICES_TOOLBAR, searchValue: _chunkWFPCCBOMcjs.DEVICES_SEARCH_QUERY };
1868
+ var TOOLBAR = { ..._chunk3KGICRH7cjs.IDLE_DEVICES_TOOLBAR, searchValue: _chunkWFPCCBOMcjs.DEVICES_SEARCH_QUERY };
1869
1869
  var NO_HEADER = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {});
1870
1870
  var HIDDEN_WHEN_COMPACT = ["organization"];
1871
1871
  function DevicesScreen({ compact = false }) {
1872
1872
  const cast = _chunkII4QMH26cjs.useProductDemoCast.call(void 0, );
1873
1873
  const fixture = _react.useMemo.call(void 0, () => _chunkWFPCCBOMcjs.buildWindowsDevicesFixture.call(void 0, cast), [cast]);
1874
1874
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
1875
- _chunk2UNQJVYNcjs.DevicesPanelView,
1875
+ _chunk3KGICRH7cjs.DevicesPanelView,
1876
1876
  {
1877
1877
  className: "p-[var(--spacing-system-l)]",
1878
1878
  headerSlot: NO_HEADER,