@flamingo-stack/openframe-frontend-core 0.0.741 → 0.0.743
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-SFY4UYPY.cjs → chunk-4A6OF4HI.cjs} +44 -44
- package/dist/{chunk-VA7OMDZO.cjs → chunk-4FWURR3W.cjs} +50 -50
- package/dist/{chunk-WBANGORJ.cjs → chunk-4N7KGOBS.cjs} +3 -3
- package/dist/{chunk-PQ2M7P2U.cjs → chunk-5TCIRWHL.cjs} +9 -9
- package/dist/{chunk-FQN6STIM.cjs → chunk-6XCQXGQA.cjs} +20 -20
- package/dist/{chunk-BV5WZVOP.cjs → chunk-7YDF3QBN.cjs} +258 -257
- package/dist/{chunk-7ZFCR7UY.cjs → chunk-ABLUMGCI.cjs} +3 -3
- package/dist/{chunk-PX7FY655.cjs → chunk-ASMNNSUQ.cjs} +3 -3
- package/dist/{chunk-CWRVTQUO.cjs → chunk-BM6JZRVD.cjs} +101 -101
- package/dist/{chunk-LZ6NOVXX.cjs → chunk-BNTELSHZ.cjs} +103 -103
- package/dist/{chunk-SA7LDEVJ.cjs → chunk-CSJO7ZGN.cjs} +3 -3
- package/dist/{chunk-VOX4E6AX.cjs → chunk-DGFDBPO7.cjs} +7 -5
- package/dist/{chunk-KLI4OSRA.cjs → chunk-GAGNKWOC.cjs} +2 -2
- package/dist/{chunk-QEUGYHFB.cjs → chunk-IRWJKVVZ.cjs} +20 -20
- package/dist/{chunk-YRE3O65E.cjs → chunk-JGZEHBBD.cjs} +12 -12
- package/dist/{chunk-FICJS5OA.cjs → chunk-KTPR66EE.cjs} +4 -4
- package/dist/{chunk-YXKB5WRE.cjs → chunk-LJ46XYYP.cjs} +60 -48
- package/dist/{chunk-AAFW4STC.cjs → chunk-LU7TD6QS.cjs} +5 -5
- package/dist/{chunk-JFS6TZDX.cjs → chunk-MLZKPDPZ.cjs} +64 -64
- package/dist/{chunk-EKGL5K5K.cjs → chunk-MT7ELGCV.cjs} +17 -17
- package/dist/{chunk-HYBMADYO.cjs → chunk-NGUJVM6O.cjs} +22 -22
- package/dist/{chunk-3HPB4H4C.cjs → chunk-NTGIQP7O.cjs} +7 -7
- package/dist/{chunk-GABDE3FM.cjs → chunk-OWGLRE74.cjs} +19 -19
- package/dist/{chunk-IFS4AH77.cjs → chunk-QYLIHZKZ.cjs} +10 -10
- package/dist/{chunk-GVTDVS5U.cjs → chunk-R34JD6NP.cjs} +3 -3
- package/dist/{chunk-YQ37ZCD2.cjs → chunk-SQHTX5XP.cjs} +16 -16
- package/dist/{chunk-XJ36TEGE.cjs → chunk-TKASH5YC.cjs} +47 -47
- package/dist/{chunk-DSVNFRY5.cjs → chunk-U2O5YQRP.cjs} +38 -38
- package/dist/{chunk-5SVOGLNK.cjs → chunk-UL6ZZSL4.cjs} +6 -6
- package/dist/{chunk-O67V3HJR.cjs → chunk-URVIPSAJ.cjs} +24 -24
- package/dist/{chunk-GSWQZX23.cjs → chunk-UY6A6TEY.cjs} +2 -2
- package/dist/{chunk-DUVOQHQI.cjs → chunk-W2RM764D.cjs} +7 -7
- package/dist/{chunk-IK2RJUEA.cjs → chunk-WCY35GB5.cjs} +845 -810
- package/dist/{chunk-NTJE6SM6.cjs → chunk-WI2OTGKC.cjs} +2 -2
- package/dist/{chunk-ITPEFCQ2.cjs → chunk-XJO5ZHO6.cjs} +32 -32
- package/dist/{chunk-I6UE6YVM.cjs → chunk-Y2FN3E32.cjs} +6 -6
- package/dist/{chunk-4XL4YEZM.cjs → chunk-YDFKFLDQ.cjs} +8 -8
- package/dist/{chunk-HF7Z2E4W.cjs → chunk-YIOWV7LS.cjs} +2 -2
- package/dist/{chunk-B3XBJCOD.cjs → chunk-YJRMCFX3.cjs} +7 -7
- package/dist/{chunk-ZYOS7LVQ.cjs → chunk-YWMUZLU2.cjs} +89 -89
- package/dist/{chunk-ZJPDGVA6.cjs → chunk-ZP5DFF3Q.cjs} +28 -28
- package/dist/{cloud-tenants-MVJK52I2.cjs → cloud-tenants-DZC3ACG6.cjs} +24 -24
- package/dist/components/case-studies/index.cjs +37 -37
- package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -1
- package/dist/components/chat/entity-cards/onboarding-guide-card.js +22 -12
- package/dist/components/chat/index.cjs +17 -17
- package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
- package/dist/components/chat/tool-execution-display.js +5 -4
- package/dist/components/contact/index.cjs +25 -25
- package/dist/components/docs/index.cjs +28 -28
- package/dist/components/embeds/index.cjs +25 -25
- package/dist/components/faq/index.cjs +26 -26
- package/dist/components/features/index.cjs +24 -24
- package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts +1 -1
- package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts.map +1 -1
- package/dist/components/features/scripts/schedule-form/schedule-interval-input.js +15 -13
- package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts.map +1 -1
- package/dist/components/features/scripts/schedule-form/schedule-offline-fields.js +9 -7
- package/dist/components/help-center-pages/index.cjs +144 -144
- package/dist/components/index.cjs +87 -85
- package/dist/components/meeting-scheduler/booking-form.d.ts +11 -1
- package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/booking-form.js +15 -3
- package/dist/components/meeting-scheduler/index.cjs +452 -158
- package/dist/components/meeting-scheduler/index.d.ts +16 -1
- package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/index.js +157 -5
- package/dist/components/meeting-scheduler/modal-header.d.ts +27 -0
- package/dist/components/meeting-scheduler/modal-header.d.ts.map +1 -0
- package/dist/components/meeting-scheduler/modal-header.js +104 -0
- package/dist/components/meeting-scheduler/slot-picker.d.ts +13 -2
- package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
- package/dist/components/meeting-scheduler/slot-picker.js +112 -73
- package/dist/components/navigation/index.cjs +27 -27
- package/dist/components/onboarding-guides/index.cjs +27 -27
- package/dist/components/product-demo/index.cjs +9 -9
- package/dist/components/related-content/index.cjs +12 -12
- package/dist/components/shared/product-release/product-release-card.d.ts.map +1 -1
- package/dist/components/shared/product-release/product-release-card.js +2 -0
- package/dist/components/tickets/index.cjs +30 -30
- package/dist/components/ui/index.cjs +26 -24
- package/dist/components/ui/radio-group.d.ts +6 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -1
- package/dist/components/ui/radio-group.js +65 -58
- package/dist/components/ui/tab-navigation.d.ts +19 -1
- package/dist/components/ui/tab-navigation.d.ts.map +1 -1
- package/dist/components/ui/tab-navigation.js +32 -8
- package/dist/{devices-W3S7Q2PG.cjs → devices-MFGE2JQV.cjs} +25 -25
- package/dist/{embeddable-chat-6JKKFQEB.cjs → embeddable-chat-7ZEGCDVF.cjs} +92 -92
- package/dist/hooks/index.cjs +10 -10
- package/dist/index.cjs +32 -30
- package/dist/{knowledge-AIYQ4FC3.cjs → knowledge-7VPS2ZBU.cjs} +25 -25
- package/dist/{logs-7SHJ2ARE.cjs → logs-M3QPAUH7.cjs} +32 -32
- package/dist/{policies-EIZJ5SUP.cjs → policies-UAVE6X62.cjs} +28 -28
- package/dist/{remote-session-BZMNE6D2.cjs → remote-session-N4PJB5FW.cjs} +10 -10
- package/dist/{scripts-J2FWC7E4.cjs → scripts-EDQ3IQKW.cjs} +31 -31
- package/dist/{software-update-QAMNASVF.cjs → software-update-B2MZVNPK.cjs} +28 -28
- package/dist/{tickets-board-CEDHD3KB.cjs → tickets-board-O753S4ZB.cjs} +14 -14
- package/dist/utils/embed-authed-fetch.d.ts +33 -0
- package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
- package/dist/utils/embed-authed-fetch.js +3 -1
- package/dist/utils/index.cjs +3 -1
- package/dist/{video-file-player-ZH2ILAPO.cjs → video-file-player-QZ3YOLHO.cjs} +2 -2
- package/package.json +1 -1
- package/src/components/chat/entity-cards/onboarding-guide-card.tsx +8 -1
- package/src/components/chat/tool-execution-display.tsx +21 -10
- package/src/components/features/scripts/schedule-form/schedule-interval-input.tsx +20 -13
- package/src/components/features/scripts/schedule-form/schedule-offline-fields.tsx +9 -5
- package/src/components/meeting-scheduler/booking-form.tsx +29 -3
- package/src/components/meeting-scheduler/index.tsx +224 -3
- package/src/components/meeting-scheduler/modal-header.tsx +145 -0
- package/src/components/meeting-scheduler/slot-picker.tsx +72 -8
- package/src/components/shared/product-release/product-release-card.tsx +2 -0
- package/src/components/ui/radio-group.tsx +51 -36
- package/src/components/ui/tab-navigation.tsx +54 -5
- package/src/utils/embed-authed-fetch.ts +42 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
|
|
4
4
|
import { forwardRef } from "react";
|
|
5
5
|
import { cn } from "../../utils/cn.js";
|
|
@@ -53,6 +53,66 @@ const RadioGroupBlock = forwardRef(
|
|
|
53
53
|
const itemId = `${props.name ?? "radio-block"}-${option.value}`;
|
|
54
54
|
const isDisabled = disabled || option.disabled;
|
|
55
55
|
const isLast = index === options.length - 1;
|
|
56
|
+
const hasFooter = option.footer != null;
|
|
57
|
+
const row = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
58
|
+
/* @__PURE__ */ jsx(
|
|
59
|
+
RadioGroupPrimitive.Item,
|
|
60
|
+
{
|
|
61
|
+
id: itemId,
|
|
62
|
+
value: option.value,
|
|
63
|
+
disabled: isDisabled,
|
|
64
|
+
className: cn(
|
|
65
|
+
"h-6 w-6 shrink-0 rounded-full border-2 bg-ods-card",
|
|
66
|
+
error ? "border-ods-error" : "border-[var(--color-border-strong)]",
|
|
67
|
+
"transition-colors duration-150",
|
|
68
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-2 focus-visible:ring-offset-ods-card",
|
|
69
|
+
// Disabled: the EMPTY dot dims with the text; a selected one
|
|
70
|
+
// keeps its accent so "on but locked" stays readable.
|
|
71
|
+
"disabled:cursor-not-allowed",
|
|
72
|
+
"disabled:data-[state=unchecked]:border-ods-border disabled:data-[state=unchecked]:bg-ods-bg",
|
|
73
|
+
"data-[state=checked]:border-ods-accent"
|
|
74
|
+
),
|
|
75
|
+
children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "block h-1/2 w-1/2 rounded-full bg-ods-accent" }) })
|
|
76
|
+
}
|
|
77
|
+
),
|
|
78
|
+
/* @__PURE__ */ jsxs(
|
|
79
|
+
"div",
|
|
80
|
+
{
|
|
81
|
+
className: cn(
|
|
82
|
+
"flex min-w-0 flex-1 flex-col justify-center",
|
|
83
|
+
// Direct children only — these are the two component-owned
|
|
84
|
+
// wrappers. `option.label` / `option.description` are
|
|
85
|
+
// ReactNode, so a descendant rule would repaint content the
|
|
86
|
+
// caller styled itself.
|
|
87
|
+
isDisabled && "[&>span]:text-ods-text-disabled"
|
|
88
|
+
),
|
|
89
|
+
children: [
|
|
90
|
+
/* @__PURE__ */ jsx(
|
|
91
|
+
"span",
|
|
92
|
+
{
|
|
93
|
+
className: cn(
|
|
94
|
+
"font-[family-name:var(--font-h4-family)] text-[length:var(--font-size-h4-body)] font-[number:var(--font-h4-weight)] leading-[24px]",
|
|
95
|
+
"select-none truncate text-ods-text-primary"
|
|
96
|
+
),
|
|
97
|
+
title: typeof option.label === "string" ? option.label : void 0,
|
|
98
|
+
children: option.label
|
|
99
|
+
}
|
|
100
|
+
),
|
|
101
|
+
option.description && /* @__PURE__ */ jsx(
|
|
102
|
+
"span",
|
|
103
|
+
{
|
|
104
|
+
className: cn(
|
|
105
|
+
"font-[family-name:var(--font-h6-family)] text-[length:var(--font-size-h6-caption)] font-[number:var(--font-h6-weight)] leading-[20px]",
|
|
106
|
+
"select-none text-ods-text-secondary"
|
|
107
|
+
),
|
|
108
|
+
children: option.description
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
]
|
|
112
|
+
}
|
|
113
|
+
),
|
|
114
|
+
option.trailing && /* @__PURE__ */ jsx("div", { className: "ml-auto flex shrink-0 items-center", children: option.trailing })
|
|
115
|
+
] });
|
|
56
116
|
return /* @__PURE__ */ jsxs(
|
|
57
117
|
"label",
|
|
58
118
|
{
|
|
@@ -83,66 +143,13 @@ const RadioGroupBlock = forwardRef(
|
|
|
83
143
|
// `Tag`'s label is a span too, and it went invisible against
|
|
84
144
|
// its own fill.
|
|
85
145
|
isDisabled && "bg-ods-bg",
|
|
146
|
+
// With a footer the option stacks: its row, then the footer.
|
|
147
|
+
hasFooter && "flex-col items-stretch gap-[var(--spacing-system-sf)]",
|
|
86
148
|
itemClassName
|
|
87
149
|
),
|
|
88
150
|
children: [
|
|
89
|
-
/* @__PURE__ */ jsx(
|
|
90
|
-
|
|
91
|
-
{
|
|
92
|
-
id: itemId,
|
|
93
|
-
value: option.value,
|
|
94
|
-
disabled: isDisabled,
|
|
95
|
-
className: cn(
|
|
96
|
-
"h-6 w-6 shrink-0 rounded-full border-2 bg-ods-card",
|
|
97
|
-
error ? "border-ods-error" : "border-[var(--color-border-strong)]",
|
|
98
|
-
"transition-colors duration-150",
|
|
99
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ods-accent focus-visible:ring-offset-2 focus-visible:ring-offset-ods-card",
|
|
100
|
-
// Disabled: the EMPTY dot dims with the text; a selected one
|
|
101
|
-
// keeps its accent so "on but locked" stays readable.
|
|
102
|
-
"disabled:cursor-not-allowed",
|
|
103
|
-
"disabled:data-[state=unchecked]:border-ods-border disabled:data-[state=unchecked]:bg-ods-bg",
|
|
104
|
-
"data-[state=checked]:border-ods-accent"
|
|
105
|
-
),
|
|
106
|
-
children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsx("span", { className: "block h-1/2 w-1/2 rounded-full bg-ods-accent" }) })
|
|
107
|
-
}
|
|
108
|
-
),
|
|
109
|
-
/* @__PURE__ */ jsxs(
|
|
110
|
-
"div",
|
|
111
|
-
{
|
|
112
|
-
className: cn(
|
|
113
|
-
"flex min-w-0 flex-1 flex-col justify-center",
|
|
114
|
-
// Direct children only — these are the two component-owned
|
|
115
|
-
// wrappers. `option.label` / `option.description` are
|
|
116
|
-
// ReactNode, so a descendant rule would repaint content the
|
|
117
|
-
// caller styled itself.
|
|
118
|
-
isDisabled && "[&>span]:text-ods-text-disabled"
|
|
119
|
-
),
|
|
120
|
-
children: [
|
|
121
|
-
/* @__PURE__ */ jsx(
|
|
122
|
-
"span",
|
|
123
|
-
{
|
|
124
|
-
className: cn(
|
|
125
|
-
"font-[family-name:var(--font-h4-family)] text-[length:var(--font-size-h4-body)] font-[number:var(--font-h4-weight)] leading-[24px]",
|
|
126
|
-
"select-none truncate text-ods-text-primary"
|
|
127
|
-
),
|
|
128
|
-
title: typeof option.label === "string" ? option.label : void 0,
|
|
129
|
-
children: option.label
|
|
130
|
-
}
|
|
131
|
-
),
|
|
132
|
-
option.description && /* @__PURE__ */ jsx(
|
|
133
|
-
"span",
|
|
134
|
-
{
|
|
135
|
-
className: cn(
|
|
136
|
-
"font-[family-name:var(--font-h6-family)] text-[length:var(--font-size-h6-caption)] font-[number:var(--font-h6-weight)] leading-[20px]",
|
|
137
|
-
"select-none text-ods-text-secondary"
|
|
138
|
-
),
|
|
139
|
-
children: option.description
|
|
140
|
-
}
|
|
141
|
-
)
|
|
142
|
-
]
|
|
143
|
-
}
|
|
144
|
-
),
|
|
145
|
-
option.trailing && /* @__PURE__ */ jsx("div", { className: "ml-auto flex shrink-0 items-center", children: option.trailing })
|
|
151
|
+
hasFooter ? /* @__PURE__ */ jsx("div", { className: "flex w-full items-center gap-[var(--spacing-system-sf)]", children: row }) : row,
|
|
152
|
+
option.footer
|
|
146
153
|
]
|
|
147
154
|
},
|
|
148
155
|
option.value
|
|
@@ -53,6 +53,22 @@ export interface TabItem {
|
|
|
53
53
|
*/
|
|
54
54
|
accent?: string;
|
|
55
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* How a strip marks its tabs.
|
|
58
|
+
*
|
|
59
|
+
* - `default`: the tabs touch, and the open tab is marked by the underline alone.
|
|
60
|
+
* - `admin`: the product admin's tab bar. A gap between tabs, and the open and the
|
|
61
|
+
* hovered tab carry an accent fade above the underline.
|
|
62
|
+
*/
|
|
63
|
+
export type TabNavigationVariant = 'default' | 'admin';
|
|
64
|
+
/**
|
|
65
|
+
* Sets the variant of every `TabNavigation` below it that does not pass its own
|
|
66
|
+
* `variant`. An app whose tab bars all share one look mounts it once in its layout.
|
|
67
|
+
*/
|
|
68
|
+
export declare function TabNavigationVariantProvider({ variant, children, }: {
|
|
69
|
+
variant: TabNavigationVariant;
|
|
70
|
+
children: React.ReactNode;
|
|
71
|
+
}): React.JSX.Element;
|
|
56
72
|
export interface TabNavigationUrlSyncOptions {
|
|
57
73
|
paramName?: string;
|
|
58
74
|
replaceState?: boolean;
|
|
@@ -78,6 +94,8 @@ interface TabNavigationProps {
|
|
|
78
94
|
tabAlign?: 'center' | 'start';
|
|
79
95
|
/** How long the underline takes to reach a new `TabItem.progress` value. Default 200. */
|
|
80
96
|
progressTransitionMs?: number;
|
|
97
|
+
/** How the strip marks its tabs. Omitted: the nearest `TabNavigationVariantProvider`'s, else `default`. */
|
|
98
|
+
variant?: TabNavigationVariant;
|
|
81
99
|
urlSync?: boolean | TabNavigationUrlSyncOptions;
|
|
82
100
|
defaultTab?: string;
|
|
83
101
|
/**
|
|
@@ -91,7 +109,7 @@ interface TabNavigationProps {
|
|
|
91
109
|
isStale: boolean;
|
|
92
110
|
}) => React.ReactNode;
|
|
93
111
|
}
|
|
94
|
-
export declare function TabNavigation({ activeTab: controlledActiveTab, onTabChange: controlledOnTabChange, tabs, className, shadowClassName, showRightGradient, showLeftGradient, stretchTabs, tabAlign, progressTransitionMs, urlSync, defaultTab, children, }: TabNavigationProps): React.JSX.Element;
|
|
112
|
+
export declare function TabNavigation({ activeTab: controlledActiveTab, onTabChange: controlledOnTabChange, tabs, className, shadowClassName, showRightGradient, showLeftGradient, stretchTabs, tabAlign, progressTransitionMs, variant: variantProp, urlSync, defaultTab, children, }: TabNavigationProps): React.JSX.Element;
|
|
95
113
|
export declare const getTabById: (tabs: TabItem[], tabId: string) => TabItem | undefined;
|
|
96
114
|
export declare const getTabComponent: (tabs: TabItem[], tabId: string) => TabItem["component"] | null;
|
|
97
115
|
export {};
|
|
@@ -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;
|
|
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;AAkB/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;;;;;;GAMG;AACH,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC;AAIvD;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,EAC3C,OAAO,EACP,QAAQ,GACT,EAAE;IACD,OAAO,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,qBAEA;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;IAC9B,2GAA2G;IAC3G,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAG/B,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;AAmbD,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,OAAO,EAAE,WAAW,EACpB,OAAe,EACf,UAAU,EACV,QAAQ,GACT,EAAE,kBAAkB,qBAqLpB;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,6 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import {
|
|
4
|
+
createContext,
|
|
5
|
+
useContext,
|
|
4
6
|
useState,
|
|
5
7
|
useEffect,
|
|
6
8
|
useLayoutEffect,
|
|
@@ -14,6 +16,13 @@ import {
|
|
|
14
16
|
import { useSearchParams, useRouter, usePathname } from "../../embed-shims/next-navigation.js";
|
|
15
17
|
import { cn } from "../../utils/cn.js";
|
|
16
18
|
import { Tag } from "./tag.js";
|
|
19
|
+
const TabNavigationVariantContext = createContext("default");
|
|
20
|
+
function TabNavigationVariantProvider({
|
|
21
|
+
variant,
|
|
22
|
+
children
|
|
23
|
+
}) {
|
|
24
|
+
return /* @__PURE__ */ jsx(TabNavigationVariantContext.Provider, { value: variant, children });
|
|
25
|
+
}
|
|
17
26
|
const HIDDEN_INDICATOR = { left: 0, width: 0 };
|
|
18
27
|
const StatusDot = ({ indicator, className }) => /* @__PURE__ */ jsx(
|
|
19
28
|
"div",
|
|
@@ -37,8 +46,10 @@ const TabBar = memo(function TabBarImpl({
|
|
|
37
46
|
showRightGradient,
|
|
38
47
|
stretchTabs,
|
|
39
48
|
tabAlign,
|
|
40
|
-
progressTransitionMs
|
|
49
|
+
progressTransitionMs,
|
|
50
|
+
variant
|
|
41
51
|
}) {
|
|
52
|
+
const isAdmin = variant === "admin";
|
|
42
53
|
const scrollRef = useRef(null);
|
|
43
54
|
const activeTabRef = useRef(null);
|
|
44
55
|
const isFirstActiveScrollRef = useRef(true);
|
|
@@ -168,7 +179,10 @@ const TabBar = memo(function TabBarImpl({
|
|
|
168
179
|
"div",
|
|
169
180
|
{
|
|
170
181
|
ref: scrollRef,
|
|
171
|
-
className:
|
|
182
|
+
className: cn(
|
|
183
|
+
"scrollbar-hide relative flex h-full items-center justify-start overflow-x-auto overflow-y-hidden",
|
|
184
|
+
isAdmin && "gap-[var(--spacing-system-xxs)]"
|
|
185
|
+
),
|
|
172
186
|
children: [
|
|
173
187
|
tabs.map((tab) => {
|
|
174
188
|
const isActive = activeTab === tab.id;
|
|
@@ -188,11 +202,16 @@ const TabBar = memo(function TabBarImpl({
|
|
|
188
202
|
// `outline-none` above drops the browser's own focus ring, so
|
|
189
203
|
// put one back or the strip is un-navigable by keyboard — you
|
|
190
204
|
// can tab through it with nothing to show where you are. Inset,
|
|
191
|
-
// so it stays within the button
|
|
205
|
+
// so it stays within the button and never overlaps a neighbour.
|
|
192
206
|
"focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ods-focus",
|
|
193
207
|
stretchTabs && "flex-1",
|
|
194
|
-
tab.avatar && "gap-[var(--spacing-system-xsf)]"
|
|
195
|
-
//
|
|
208
|
+
tab.avatar && "gap-[var(--spacing-system-xsf)]",
|
|
209
|
+
// `default`: the open tab is marked by the underline alone, no surface
|
|
210
|
+
// of its own. `admin`: the open and the hovered tab carry an accent
|
|
211
|
+
// fade. ODS colour vars hold hex values, so Tailwind alpha modifiers
|
|
212
|
+
// (to-ods-accent/10) silently produce no CSS; color-mix() accepts
|
|
213
|
+
// hex, so the 10%-alpha stop is derived from the token.
|
|
214
|
+
isAdmin && (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)]")
|
|
196
215
|
),
|
|
197
216
|
children: [
|
|
198
217
|
tab.avatar ? /* @__PURE__ */ jsxs("div", { className: "relative flex shrink-0 items-center justify-center", children: [
|
|
@@ -204,7 +223,7 @@ const TabBar = memo(function TabBarImpl({
|
|
|
204
223
|
{
|
|
205
224
|
className: cn(
|
|
206
225
|
"h-4 w-4 transition-colors content-md:h-6 content-md:w-6",
|
|
207
|
-
isActive ? !tab.accent && "text-ods-accent" : "text-ods-text-secondary group-hover:text-ods-text-primary"
|
|
226
|
+
isActive ? !tab.accent && "text-ods-accent" : cn("text-ods-text-secondary", !isAdmin && "group-hover:text-ods-text-primary")
|
|
208
227
|
),
|
|
209
228
|
style: isActive && tab.accent ? { color: tab.accent } : void 0
|
|
210
229
|
}
|
|
@@ -221,7 +240,7 @@ const TabBar = memo(function TabBarImpl({
|
|
|
221
240
|
{
|
|
222
241
|
className: cn(
|
|
223
242
|
"whitespace-nowrap transition-colors text-h4",
|
|
224
|
-
isActive ? "text-ods-text-primary" : "text-ods-text-secondary group-hover:text-ods-text-primary"
|
|
243
|
+
isActive ? "text-ods-text-primary" : cn("text-ods-text-secondary", !isAdmin && "group-hover:text-ods-text-primary")
|
|
225
244
|
),
|
|
226
245
|
children: tab.label
|
|
227
246
|
}
|
|
@@ -304,10 +323,13 @@ function TabNavigation({
|
|
|
304
323
|
stretchTabs = false,
|
|
305
324
|
tabAlign = "center",
|
|
306
325
|
progressTransitionMs = 200,
|
|
326
|
+
variant: variantProp,
|
|
307
327
|
urlSync = false,
|
|
308
328
|
defaultTab,
|
|
309
329
|
children
|
|
310
330
|
}) {
|
|
331
|
+
const providedVariant = useContext(TabNavigationVariantContext);
|
|
332
|
+
const variant = variantProp ?? providedVariant;
|
|
311
333
|
const router = useRouter();
|
|
312
334
|
const pathname = usePathname();
|
|
313
335
|
const searchParams = useSearchParams();
|
|
@@ -380,7 +402,8 @@ function TabNavigation({
|
|
|
380
402
|
showRightGradient,
|
|
381
403
|
stretchTabs,
|
|
382
404
|
tabAlign,
|
|
383
|
-
progressTransitionMs
|
|
405
|
+
progressTransitionMs,
|
|
406
|
+
variant
|
|
384
407
|
}
|
|
385
408
|
),
|
|
386
409
|
children && children(deferredActiveTab, { isStale })
|
|
@@ -393,6 +416,7 @@ const getTabComponent = (tabs, tabId) => {
|
|
|
393
416
|
};
|
|
394
417
|
export {
|
|
395
418
|
TabNavigation,
|
|
419
|
+
TabNavigationVariantProvider,
|
|
396
420
|
getTabById,
|
|
397
421
|
getTabComponent
|
|
398
422
|
};
|
|
@@ -11,24 +11,24 @@ require('./chunk-DKOLQPE7.cjs');
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
require('./chunk-
|
|
16
|
-
require('./chunk-
|
|
17
|
-
require('./chunk-
|
|
14
|
+
var _chunkWCY35GB5cjs = require('./chunk-WCY35GB5.cjs');
|
|
15
|
+
require('./chunk-URVIPSAJ.cjs');
|
|
16
|
+
require('./chunk-NTGIQP7O.cjs');
|
|
17
|
+
require('./chunk-U2O5YQRP.cjs');
|
|
18
18
|
require('./chunk-HQQE74RO.cjs');
|
|
19
19
|
require('./chunk-DEY6XXGO.cjs');
|
|
20
|
-
require('./chunk-
|
|
21
|
-
require('./chunk-
|
|
20
|
+
require('./chunk-4FWURR3W.cjs');
|
|
21
|
+
require('./chunk-LU7TD6QS.cjs');
|
|
22
22
|
require('./chunk-24I6RFVU.cjs');
|
|
23
23
|
require('./chunk-A6P6DHEZ.cjs');
|
|
24
24
|
require('./chunk-MZ4KBSH7.cjs');
|
|
25
|
-
require('./chunk-
|
|
25
|
+
require('./chunk-GAGNKWOC.cjs');
|
|
26
26
|
require('./chunk-YUMFVQIN.cjs');
|
|
27
|
-
require('./chunk-
|
|
28
|
-
require('./chunk-
|
|
29
|
-
require('./chunk-
|
|
27
|
+
require('./chunk-BM6JZRVD.cjs');
|
|
28
|
+
require('./chunk-7YDF3QBN.cjs');
|
|
29
|
+
require('./chunk-OWGLRE74.cjs');
|
|
30
30
|
require('./chunk-3RFQPQ7Z.cjs');
|
|
31
|
-
require('./chunk-
|
|
31
|
+
require('./chunk-5TCIRWHL.cjs');
|
|
32
32
|
require('./chunk-B27QEHYR.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-W2RM764D.cjs');
|
|
1822
|
+
require('./chunk-CSJO7ZGN.cjs');
|
|
1823
|
+
require('./chunk-WI2OTGKC.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-JGZEHBBD.cjs');
|
|
1830
|
+
require('./chunk-LJ46XYYP.cjs');
|
|
1831
|
+
require('./chunk-QYLIHZKZ.cjs');
|
|
1832
1832
|
require('./chunk-63N4FN5V.cjs');
|
|
1833
|
-
require('./chunk-
|
|
1834
|
-
require('./chunk-
|
|
1833
|
+
require('./chunk-UY6A6TEY.cjs');
|
|
1834
|
+
require('./chunk-ABLUMGCI.cjs');
|
|
1835
1835
|
require('./chunk-S5C3OZCO.cjs');
|
|
1836
1836
|
require('./chunk-32ASZMTV.cjs');
|
|
1837
1837
|
require('./chunk-OOYBIS7D.cjs');
|
|
@@ -1841,11 +1841,11 @@ require('./chunk-ORO54HDF.cjs');
|
|
|
1841
1841
|
require('./chunk-RUHKTWGB.cjs');
|
|
1842
1842
|
require('./chunk-BLH2SFOO.cjs');
|
|
1843
1843
|
require('./chunk-I5MSCD57.cjs');
|
|
1844
|
-
require('./chunk-
|
|
1844
|
+
require('./chunk-ASMNNSUQ.cjs');
|
|
1845
1845
|
require('./chunk-CW3ML76U.cjs');
|
|
1846
|
-
require('./chunk-
|
|
1847
|
-
require('./chunk-
|
|
1848
|
-
require('./chunk-
|
|
1846
|
+
require('./chunk-R34JD6NP.cjs');
|
|
1847
|
+
require('./chunk-KTPR66EE.cjs');
|
|
1848
|
+
require('./chunk-DGFDBPO7.cjs');
|
|
1849
1849
|
require('./chunk-HOTM4UM6.cjs');
|
|
1850
1850
|
require('./chunk-UJ7AXHRZ.cjs');
|
|
1851
1851
|
require('./chunk-HTRILBJD.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 = { ..._chunkWCY35GB5cjs.IDLE_DEVICES_TOOLBAR, searchValue: _chunk7AM3AFM4cjs.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 = _chunkSTEJZPIOcjs.useProductDemoCast.call(void 0, );
|
|
1873
1873
|
const fixture = _react.useMemo.call(void 0, () => _chunk7AM3AFM4cjs.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
|
+
_chunkWCY35GB5cjs.DevicesPanelView,
|
|
1876
1876
|
{
|
|
1877
1877
|
className: "p-[var(--spacing-system-l)]",
|
|
1878
1878
|
headerSlot: NO_HEADER,
|