@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.
Files changed (117) hide show
  1. package/dist/build/export-map.json +1 -1
  2. package/dist/{chunk-SFY4UYPY.cjs → chunk-4A6OF4HI.cjs} +44 -44
  3. package/dist/{chunk-VA7OMDZO.cjs → chunk-4FWURR3W.cjs} +50 -50
  4. package/dist/{chunk-WBANGORJ.cjs → chunk-4N7KGOBS.cjs} +3 -3
  5. package/dist/{chunk-PQ2M7P2U.cjs → chunk-5TCIRWHL.cjs} +9 -9
  6. package/dist/{chunk-FQN6STIM.cjs → chunk-6XCQXGQA.cjs} +20 -20
  7. package/dist/{chunk-BV5WZVOP.cjs → chunk-7YDF3QBN.cjs} +258 -257
  8. package/dist/{chunk-7ZFCR7UY.cjs → chunk-ABLUMGCI.cjs} +3 -3
  9. package/dist/{chunk-PX7FY655.cjs → chunk-ASMNNSUQ.cjs} +3 -3
  10. package/dist/{chunk-CWRVTQUO.cjs → chunk-BM6JZRVD.cjs} +101 -101
  11. package/dist/{chunk-LZ6NOVXX.cjs → chunk-BNTELSHZ.cjs} +103 -103
  12. package/dist/{chunk-SA7LDEVJ.cjs → chunk-CSJO7ZGN.cjs} +3 -3
  13. package/dist/{chunk-VOX4E6AX.cjs → chunk-DGFDBPO7.cjs} +7 -5
  14. package/dist/{chunk-KLI4OSRA.cjs → chunk-GAGNKWOC.cjs} +2 -2
  15. package/dist/{chunk-QEUGYHFB.cjs → chunk-IRWJKVVZ.cjs} +20 -20
  16. package/dist/{chunk-YRE3O65E.cjs → chunk-JGZEHBBD.cjs} +12 -12
  17. package/dist/{chunk-FICJS5OA.cjs → chunk-KTPR66EE.cjs} +4 -4
  18. package/dist/{chunk-YXKB5WRE.cjs → chunk-LJ46XYYP.cjs} +60 -48
  19. package/dist/{chunk-AAFW4STC.cjs → chunk-LU7TD6QS.cjs} +5 -5
  20. package/dist/{chunk-JFS6TZDX.cjs → chunk-MLZKPDPZ.cjs} +64 -64
  21. package/dist/{chunk-EKGL5K5K.cjs → chunk-MT7ELGCV.cjs} +17 -17
  22. package/dist/{chunk-HYBMADYO.cjs → chunk-NGUJVM6O.cjs} +22 -22
  23. package/dist/{chunk-3HPB4H4C.cjs → chunk-NTGIQP7O.cjs} +7 -7
  24. package/dist/{chunk-GABDE3FM.cjs → chunk-OWGLRE74.cjs} +19 -19
  25. package/dist/{chunk-IFS4AH77.cjs → chunk-QYLIHZKZ.cjs} +10 -10
  26. package/dist/{chunk-GVTDVS5U.cjs → chunk-R34JD6NP.cjs} +3 -3
  27. package/dist/{chunk-YQ37ZCD2.cjs → chunk-SQHTX5XP.cjs} +16 -16
  28. package/dist/{chunk-XJ36TEGE.cjs → chunk-TKASH5YC.cjs} +47 -47
  29. package/dist/{chunk-DSVNFRY5.cjs → chunk-U2O5YQRP.cjs} +38 -38
  30. package/dist/{chunk-5SVOGLNK.cjs → chunk-UL6ZZSL4.cjs} +6 -6
  31. package/dist/{chunk-O67V3HJR.cjs → chunk-URVIPSAJ.cjs} +24 -24
  32. package/dist/{chunk-GSWQZX23.cjs → chunk-UY6A6TEY.cjs} +2 -2
  33. package/dist/{chunk-DUVOQHQI.cjs → chunk-W2RM764D.cjs} +7 -7
  34. package/dist/{chunk-IK2RJUEA.cjs → chunk-WCY35GB5.cjs} +845 -810
  35. package/dist/{chunk-NTJE6SM6.cjs → chunk-WI2OTGKC.cjs} +2 -2
  36. package/dist/{chunk-ITPEFCQ2.cjs → chunk-XJO5ZHO6.cjs} +32 -32
  37. package/dist/{chunk-I6UE6YVM.cjs → chunk-Y2FN3E32.cjs} +6 -6
  38. package/dist/{chunk-4XL4YEZM.cjs → chunk-YDFKFLDQ.cjs} +8 -8
  39. package/dist/{chunk-HF7Z2E4W.cjs → chunk-YIOWV7LS.cjs} +2 -2
  40. package/dist/{chunk-B3XBJCOD.cjs → chunk-YJRMCFX3.cjs} +7 -7
  41. package/dist/{chunk-ZYOS7LVQ.cjs → chunk-YWMUZLU2.cjs} +89 -89
  42. package/dist/{chunk-ZJPDGVA6.cjs → chunk-ZP5DFF3Q.cjs} +28 -28
  43. package/dist/{cloud-tenants-MVJK52I2.cjs → cloud-tenants-DZC3ACG6.cjs} +24 -24
  44. package/dist/components/case-studies/index.cjs +37 -37
  45. package/dist/components/chat/entity-cards/onboarding-guide-card.d.ts.map +1 -1
  46. package/dist/components/chat/entity-cards/onboarding-guide-card.js +22 -12
  47. package/dist/components/chat/index.cjs +17 -17
  48. package/dist/components/chat/tool-execution-display.d.ts.map +1 -1
  49. package/dist/components/chat/tool-execution-display.js +5 -4
  50. package/dist/components/contact/index.cjs +25 -25
  51. package/dist/components/docs/index.cjs +28 -28
  52. package/dist/components/embeds/index.cjs +25 -25
  53. package/dist/components/faq/index.cjs +26 -26
  54. package/dist/components/features/index.cjs +24 -24
  55. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts +1 -1
  56. package/dist/components/features/scripts/schedule-form/schedule-interval-input.d.ts.map +1 -1
  57. package/dist/components/features/scripts/schedule-form/schedule-interval-input.js +15 -13
  58. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.d.ts.map +1 -1
  59. package/dist/components/features/scripts/schedule-form/schedule-offline-fields.js +9 -7
  60. package/dist/components/help-center-pages/index.cjs +144 -144
  61. package/dist/components/index.cjs +87 -85
  62. package/dist/components/meeting-scheduler/booking-form.d.ts +11 -1
  63. package/dist/components/meeting-scheduler/booking-form.d.ts.map +1 -1
  64. package/dist/components/meeting-scheduler/booking-form.js +15 -3
  65. package/dist/components/meeting-scheduler/index.cjs +452 -158
  66. package/dist/components/meeting-scheduler/index.d.ts +16 -1
  67. package/dist/components/meeting-scheduler/index.d.ts.map +1 -1
  68. package/dist/components/meeting-scheduler/index.js +157 -5
  69. package/dist/components/meeting-scheduler/modal-header.d.ts +27 -0
  70. package/dist/components/meeting-scheduler/modal-header.d.ts.map +1 -0
  71. package/dist/components/meeting-scheduler/modal-header.js +104 -0
  72. package/dist/components/meeting-scheduler/slot-picker.d.ts +13 -2
  73. package/dist/components/meeting-scheduler/slot-picker.d.ts.map +1 -1
  74. package/dist/components/meeting-scheduler/slot-picker.js +112 -73
  75. package/dist/components/navigation/index.cjs +27 -27
  76. package/dist/components/onboarding-guides/index.cjs +27 -27
  77. package/dist/components/product-demo/index.cjs +9 -9
  78. package/dist/components/related-content/index.cjs +12 -12
  79. package/dist/components/shared/product-release/product-release-card.d.ts.map +1 -1
  80. package/dist/components/shared/product-release/product-release-card.js +2 -0
  81. package/dist/components/tickets/index.cjs +30 -30
  82. package/dist/components/ui/index.cjs +26 -24
  83. package/dist/components/ui/radio-group.d.ts +6 -0
  84. package/dist/components/ui/radio-group.d.ts.map +1 -1
  85. package/dist/components/ui/radio-group.js +65 -58
  86. package/dist/components/ui/tab-navigation.d.ts +19 -1
  87. package/dist/components/ui/tab-navigation.d.ts.map +1 -1
  88. package/dist/components/ui/tab-navigation.js +32 -8
  89. package/dist/{devices-W3S7Q2PG.cjs → devices-MFGE2JQV.cjs} +25 -25
  90. package/dist/{embeddable-chat-6JKKFQEB.cjs → embeddable-chat-7ZEGCDVF.cjs} +92 -92
  91. package/dist/hooks/index.cjs +10 -10
  92. package/dist/index.cjs +32 -30
  93. package/dist/{knowledge-AIYQ4FC3.cjs → knowledge-7VPS2ZBU.cjs} +25 -25
  94. package/dist/{logs-7SHJ2ARE.cjs → logs-M3QPAUH7.cjs} +32 -32
  95. package/dist/{policies-EIZJ5SUP.cjs → policies-UAVE6X62.cjs} +28 -28
  96. package/dist/{remote-session-BZMNE6D2.cjs → remote-session-N4PJB5FW.cjs} +10 -10
  97. package/dist/{scripts-J2FWC7E4.cjs → scripts-EDQ3IQKW.cjs} +31 -31
  98. package/dist/{software-update-QAMNASVF.cjs → software-update-B2MZVNPK.cjs} +28 -28
  99. package/dist/{tickets-board-CEDHD3KB.cjs → tickets-board-O753S4ZB.cjs} +14 -14
  100. package/dist/utils/embed-authed-fetch.d.ts +33 -0
  101. package/dist/utils/embed-authed-fetch.d.ts.map +1 -1
  102. package/dist/utils/embed-authed-fetch.js +3 -1
  103. package/dist/utils/index.cjs +3 -1
  104. package/dist/{video-file-player-ZH2ILAPO.cjs → video-file-player-QZ3YOLHO.cjs} +2 -2
  105. package/package.json +1 -1
  106. package/src/components/chat/entity-cards/onboarding-guide-card.tsx +8 -1
  107. package/src/components/chat/tool-execution-display.tsx +21 -10
  108. package/src/components/features/scripts/schedule-form/schedule-interval-input.tsx +20 -13
  109. package/src/components/features/scripts/schedule-form/schedule-offline-fields.tsx +9 -5
  110. package/src/components/meeting-scheduler/booking-form.tsx +29 -3
  111. package/src/components/meeting-scheduler/index.tsx +224 -3
  112. package/src/components/meeting-scheduler/modal-header.tsx +145 -0
  113. package/src/components/meeting-scheduler/slot-picker.tsx +72 -8
  114. package/src/components/shared/product-release/product-release-card.tsx +2 -0
  115. package/src/components/ui/radio-group.tsx +51 -36
  116. package/src/components/ui/tab-navigation.tsx +54 -5
  117. 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
- RadioGroupPrimitive.Item,
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;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"}
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: "scrollbar-hide relative flex h-full items-center justify-start overflow-x-auto overflow-y-hidden",
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: the tabs touch.
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
- // The open tab is marked by the underline alone: no surface of its own.
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 _chunkIK2RJUEAcjs = require('./chunk-IK2RJUEA.cjs');
15
- require('./chunk-O67V3HJR.cjs');
16
- require('./chunk-3HPB4H4C.cjs');
17
- require('./chunk-DSVNFRY5.cjs');
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-VA7OMDZO.cjs');
21
- require('./chunk-AAFW4STC.cjs');
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-KLI4OSRA.cjs');
25
+ require('./chunk-GAGNKWOC.cjs');
26
26
  require('./chunk-YUMFVQIN.cjs');
27
- require('./chunk-CWRVTQUO.cjs');
28
- require('./chunk-BV5WZVOP.cjs');
29
- require('./chunk-GABDE3FM.cjs');
27
+ require('./chunk-BM6JZRVD.cjs');
28
+ require('./chunk-7YDF3QBN.cjs');
29
+ require('./chunk-OWGLRE74.cjs');
30
30
  require('./chunk-3RFQPQ7Z.cjs');
31
- require('./chunk-PQ2M7P2U.cjs');
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-DUVOQHQI.cjs');
1822
- require('./chunk-SA7LDEVJ.cjs');
1823
- require('./chunk-NTJE6SM6.cjs');
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-YRE3O65E.cjs');
1830
- require('./chunk-YXKB5WRE.cjs');
1831
- require('./chunk-IFS4AH77.cjs');
1829
+ require('./chunk-JGZEHBBD.cjs');
1830
+ require('./chunk-LJ46XYYP.cjs');
1831
+ require('./chunk-QYLIHZKZ.cjs');
1832
1832
  require('./chunk-63N4FN5V.cjs');
1833
- require('./chunk-GSWQZX23.cjs');
1834
- require('./chunk-7ZFCR7UY.cjs');
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-PX7FY655.cjs');
1844
+ require('./chunk-ASMNNSUQ.cjs');
1845
1845
  require('./chunk-CW3ML76U.cjs');
1846
- require('./chunk-GVTDVS5U.cjs');
1847
- require('./chunk-FICJS5OA.cjs');
1848
- require('./chunk-VOX4E6AX.cjs');
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 = { ..._chunkIK2RJUEAcjs.IDLE_DEVICES_TOOLBAR, searchValue: _chunk7AM3AFM4cjs.DEVICES_SEARCH_QUERY };
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
- _chunkIK2RJUEAcjs.DevicesPanelView,
1875
+ _chunkWCY35GB5cjs.DevicesPanelView,
1876
1876
  {
1877
1877
  className: "p-[var(--spacing-system-l)]",
1878
1878
  headerSlot: NO_HEADER,