@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.
- package/dist/build/export-map.json +1 -1
- package/dist/{chunk-RAHRDJBP.cjs → chunk-3HPB4H4C.cjs} +4 -4
- package/dist/{chunk-2UNQJVYN.cjs → chunk-3KGICRH7.cjs} +1457 -1187
- package/dist/{chunk-A4HNF4MP.cjs → chunk-3UTPZW36.cjs} +89 -89
- package/dist/{chunk-GID62YEN.cjs → chunk-AAFW4STC.cjs} +3 -3
- package/dist/{chunk-XDBHGWFH.cjs → chunk-ATMBJBOI.cjs} +16 -16
- package/dist/{chunk-YDGBRI3Y.cjs → chunk-AV5533DH.cjs} +15 -15
- package/dist/{chunk-BFHLGEJK.cjs → chunk-BP6R5WDW.cjs} +63 -60
- package/dist/{chunk-CLILWI6O.cjs → chunk-CJVAA7KL.cjs} +32 -32
- package/dist/{chunk-YJFN2W7A.cjs → chunk-DUVOQHQI.cjs} +7 -7
- package/dist/{chunk-E3N24573.cjs → chunk-DUXLZPMJ.cjs} +9 -9
- package/dist/{chunk-TH4N726A.cjs → chunk-E26I4XH6.cjs} +17 -17
- package/dist/{chunk-Y4QRK3CB.cjs → chunk-EMG3T55N.cjs} +7 -7
- package/dist/{chunk-JK75ZZP3.cjs → chunk-EQORT7NK.cjs} +59 -59
- package/dist/chunk-FCGLSWKR.cjs +417 -0
- package/dist/{chunk-MANNIJ42.cjs → chunk-FICJS5OA.cjs} +6 -0
- package/dist/{chunk-QP6QS3YU.cjs → chunk-FNRMDDVN.cjs} +48 -50
- package/dist/{chunk-KLXHCNDC.cjs → chunk-FTTLBMHU.cjs} +3 -3
- package/dist/{chunk-JPZ4Y6X3.cjs → chunk-GB3CHAW7.cjs} +93 -93
- package/dist/{chunk-7DUXR4HL.cjs → chunk-GVTDVS5U.cjs} +3 -3
- package/dist/{chunk-ZV6473Z4.cjs → chunk-HSWHOCZ3.cjs} +20 -20
- package/dist/{chunk-53XZ6MJ5.cjs → chunk-IC4FT3A6.cjs} +28 -28
- package/dist/{chunk-6V4GEE55.cjs → chunk-J7JKPTGO.cjs} +12 -12
- package/dist/{chunk-FKKUQK4C.cjs → chunk-L4ZNR5V7.cjs} +43 -39
- package/dist/{chunk-NYY25425.cjs → chunk-MYBTNOS6.cjs} +2 -2
- package/dist/chunk-NTJE6SM6.cjs +28 -0
- package/dist/{chunk-RBOIGJYF.cjs → chunk-P3R23TOE.cjs} +35 -35
- package/dist/chunk-PX7FY655.cjs +114 -0
- package/dist/{chunk-YUXRIR45.cjs → chunk-SA7LDEVJ.cjs} +98 -50
- package/dist/{chunk-32ENYVFA.cjs → chunk-TIMCHP4X.cjs} +42 -42
- package/dist/{chunk-3SWLL4IM.cjs → chunk-U4T5NLZD.cjs} +8 -8
- package/dist/{chunk-HI7EFAFQ.cjs → chunk-XDWY6HAW.cjs} +28 -28
- package/dist/{chunk-25H2SZH7.cjs → chunk-XY632BCH.cjs} +4 -4
- package/dist/{chunk-HY2KTQSL.cjs → chunk-YIXKH2JO.cjs} +236 -236
- package/dist/{chunk-4YPV4OI4.cjs → chunk-ZBNA6TCW.cjs} +82 -82
- package/dist/{chunk-HLIJ3U2T.cjs → chunk-ZJNYWNCB.cjs} +23 -21
- package/dist/{chunk-HEOD765R.cjs → chunk-ZRYKDN2J.cjs} +32 -379
- package/dist/{cloud-tenants-SC4FNAC2.cjs → cloud-tenants-3GOGR3EN.cjs} +22 -22
- package/dist/components/agent-identity.d.ts +8 -0
- package/dist/components/agent-identity.d.ts.map +1 -1
- package/dist/components/agent-identity.js +13 -1
- package/dist/components/case-studies/index.cjs +35 -35
- package/dist/components/chat/embeddable-chat.d.ts +16 -0
- package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
- package/dist/components/chat/embeddable-chat.js +5 -2
- package/dist/components/chat/index.cjs +16 -16
- package/dist/components/chat/utils/icon-library.d.ts.map +1 -1
- package/dist/components/chat/utils/icon-library.js +6 -0
- package/dist/components/contact/index.cjs +23 -23
- package/dist/components/docs/index.cjs +26 -26
- package/dist/components/embeds/index.cjs +23 -23
- package/dist/components/faq/index.cjs +23 -23
- package/dist/components/features/index.cjs +22 -22
- package/dist/components/help-center-pages/index.cjs +138 -138
- package/dist/components/index.cjs +89 -82
- package/dist/components/meeting-scheduler/index.cjs +67 -67
- package/dist/components/navigation/index.cjs +25 -25
- package/dist/components/onboarding-guides/index.cjs +25 -25
- package/dist/components/product-demo/index.cjs +8 -8
- package/dist/components/product-demo/screens/remote-desktop-picture.d.ts.map +1 -1
- package/dist/components/product-demo/screens/remote-desktop-picture.js +2 -1
- package/dist/components/related-content/index.cjs +10 -10
- package/dist/components/tickets/index.cjs +26 -26
- package/dist/components/ui/device-wallpaper.d.ts +7 -0
- package/dist/components/ui/device-wallpaper.d.ts.map +1 -0
- package/dist/components/ui/device-wallpaper.js +5 -0
- package/dist/components/ui/feature-list.d.ts +9 -4
- package/dist/components/ui/feature-list.d.ts.map +1 -1
- package/dist/components/ui/feature-list.js +26 -35
- package/dist/components/ui/index.cjs +28 -22
- package/dist/components/ui/index.d.ts +3 -1
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +3 -1
- package/dist/components/ui/notification-stack.d.ts +33 -0
- package/dist/components/ui/notification-stack.d.ts.map +1 -0
- package/dist/components/ui/notification-stack.js +78 -0
- package/dist/components/ui/numbered-step.d.ts +29 -0
- package/dist/components/ui/numbered-step.d.ts.map +1 -0
- package/dist/components/ui/numbered-step.js +57 -0
- package/dist/components/ui/phone-frame.d.ts +14 -9
- package/dist/components/ui/phone-frame.d.ts.map +1 -1
- package/dist/components/ui/phone-frame.js +50 -6
- package/dist/components/ui/phone-glyphs/lock-camera-glyph.d.ts +5 -0
- package/dist/components/ui/phone-glyphs/lock-camera-glyph.d.ts.map +1 -0
- package/dist/components/ui/phone-glyphs/lock-camera-glyph.js +14 -0
- package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.d.ts +5 -0
- package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.d.ts.map +1 -0
- package/dist/components/ui/phone-glyphs/lock-flashlight-glyph.js +14 -0
- package/dist/components/ui/phone-glyphs/status-bar-glyphs.d.ts +5 -0
- package/dist/components/ui/phone-glyphs/status-bar-glyphs.d.ts.map +1 -0
- package/dist/components/ui/phone-glyphs/status-bar-glyphs.js +68 -0
- package/dist/components/ui/searchable-select.d.ts +29 -3
- package/dist/components/ui/searchable-select.d.ts.map +1 -1
- package/dist/components/ui/searchable-select.js +101 -45
- package/dist/components/ui/snap-carousel.d.ts +5 -8
- package/dist/components/ui/snap-carousel.d.ts.map +1 -1
- package/dist/components/ui/snap-carousel.js +2 -27
- package/dist/components/ui/tab-navigation.d.ts +8 -1
- package/dist/components/ui/tab-navigation.d.ts.map +1 -1
- package/dist/components/ui/tab-navigation.js +30 -20
- package/dist/{devices-7MHSJNXS.cjs → devices-POZXTP7X.cjs} +23 -23
- package/dist/{embeddable-chat-VPIG3F7E.cjs → embeddable-chat-I3Y5GCCR.cjs} +96 -93
- package/dist/hooks/index.cjs +9 -9
- package/dist/hooks/ui/use-autoplay.d.ts +50 -13
- package/dist/hooks/ui/use-autoplay.d.ts.map +1 -1
- package/dist/hooks/ui/use-autoplay.js +76 -13
- package/dist/hooks/ui/use-in-view.d.ts +8 -0
- package/dist/hooks/ui/use-in-view.d.ts.map +1 -1
- package/dist/hooks/ui/use-in-view.js +21 -36
- package/dist/hooks/use-agent-identities.d.ts +6 -0
- package/dist/hooks/use-agent-identities.d.ts.map +1 -1
- package/dist/hooks/use-scenario-player.d.ts +26 -9
- package/dist/hooks/use-scenario-player.d.ts.map +1 -1
- package/dist/hooks/use-scenario-player.js +12 -9
- package/dist/index.cjs +58 -51
- package/dist/{knowledge-4DREGSOZ.cjs → knowledge-AP34IMXN.cjs} +23 -23
- package/dist/{logs-BWXNT2KP.cjs → logs-CEVMIOPW.cjs} +30 -30
- package/dist/{policies-MGFUI23M.cjs → policies-AMBMRCGB.cjs} +26 -26
- package/dist/{remote-session-O6QGXV2N.cjs → remote-session-Z4YZFG5E.cjs} +10 -9
- package/dist/{software-update-7LF7XEYC.cjs → software-update-Z3MWMSHI.cjs} +26 -26
- package/dist/{tickets-board-KNXK747O.cjs → tickets-board-JOSYLOS7.cjs} +13 -13
- package/package.json +1 -1
- package/src/components/agent-identity.tsx +20 -1
- package/src/components/chat/embeddable-chat.tsx +29 -2
- package/src/components/chat/utils/icon-library.tsx +7 -0
- package/src/components/product-demo/screens/remote-desktop-picture.tsx +2 -1
- package/src/components/ui/device-wallpaper.ts +7 -0
- package/src/components/ui/feature-list.tsx +24 -30
- package/src/components/ui/index.ts +3 -1
- package/src/components/ui/notification-stack.tsx +133 -0
- package/src/components/ui/numbered-step.tsx +81 -0
- package/src/components/ui/phone-frame.tsx +83 -19
- package/src/components/ui/phone-glyphs/lock-camera-glyph.tsx +14 -0
- package/src/components/ui/phone-glyphs/lock-flashlight-glyph.tsx +14 -0
- package/src/components/ui/phone-glyphs/status-bar-glyphs.tsx +45 -0
- package/src/components/ui/searchable-select.tsx +124 -32
- package/src/components/ui/snap-carousel.tsx +6 -38
- package/src/components/ui/tab-navigation.tsx +49 -21
- package/src/hooks/ui/use-autoplay.ts +144 -27
- package/src/hooks/ui/use-in-view.ts +31 -38
- package/src/hooks/use-agent-identities.ts +6 -0
- package/src/hooks/use-scenario-player.ts +44 -20
- package/dist/chunk-2WXLQ5R5.cjs +0 -99
- package/dist/chunk-BE2WAMG5.cjs +0 -54
- package/dist/chunk-LCTDHLDL.cjs +0 -43
- package/dist/components/ui/playback-toggle.d.ts +0 -24
- package/dist/components/ui/playback-toggle.d.ts.map +0 -1
- package/dist/components/ui/playback-toggle.js +0 -32
- 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
|
|
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,
|
|
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`.
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
//
|
|
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
|
|
256
|
-
|
|
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
|
|
15
|
-
require('./chunk-
|
|
16
|
-
require('./chunk-
|
|
17
|
-
require('./chunk-
|
|
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-
|
|
21
|
-
require('./chunk-
|
|
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-
|
|
28
|
-
require('./chunk-
|
|
29
|
-
require('./chunk-
|
|
27
|
+
require('./chunk-3UTPZW36.cjs');
|
|
28
|
+
require('./chunk-YIXKH2JO.cjs');
|
|
29
|
+
require('./chunk-ZRYKDN2J.cjs');
|
|
30
30
|
require('./chunk-HZJRERJW.cjs');
|
|
31
|
-
require('./chunk-
|
|
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-
|
|
1822
|
-
require('./chunk-
|
|
1823
|
-
require('./chunk-
|
|
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-
|
|
1830
|
-
require('./chunk-
|
|
1831
|
-
require('./chunk-
|
|
1829
|
+
require('./chunk-J7JKPTGO.cjs');
|
|
1830
|
+
require('./chunk-P3R23TOE.cjs');
|
|
1831
|
+
require('./chunk-FCGLSWKR.cjs');
|
|
1832
1832
|
require('./chunk-YADG5Q7C.cjs');
|
|
1833
|
-
require('./chunk-
|
|
1834
|
-
require('./chunk-
|
|
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-
|
|
1844
|
+
require('./chunk-PX7FY655.cjs');
|
|
1845
1845
|
require('./chunk-CW3ML76U.cjs');
|
|
1846
|
-
require('./chunk-
|
|
1847
|
-
require('./chunk-
|
|
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 = { ...
|
|
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
|
-
|
|
1875
|
+
_chunk3KGICRH7cjs.DevicesPanelView,
|
|
1876
1876
|
{
|
|
1877
1877
|
className: "p-[var(--spacing-system-l)]",
|
|
1878
1878
|
headerSlot: NO_HEADER,
|