@flamingo-stack/openframe-frontend-core 0.0.503 → 0.0.504

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 (120) hide show
  1. package/dist/{chunk-OAWFYZZT.js → chunk-32J4AXWO.js} +3 -3
  2. package/dist/{chunk-4UNQMYP7.cjs → chunk-5JEL52KB.cjs} +3 -3
  3. package/dist/{chunk-4UNQMYP7.cjs.map → chunk-5JEL52KB.cjs.map} +1 -1
  4. package/dist/{chunk-HR6F6IP4.js → chunk-AFHWEJXM.js} +6 -6
  5. package/dist/{chunk-3T4SMJM5.cjs → chunk-AI7ASU6V.cjs} +93 -93
  6. package/dist/{chunk-3T4SMJM5.cjs.map → chunk-AI7ASU6V.cjs.map} +1 -1
  7. package/dist/{chunk-FFXNRJ5S.cjs → chunk-C6Q3BJDJ.cjs} +2 -2
  8. package/dist/chunk-C6Q3BJDJ.cjs.map +1 -0
  9. package/dist/{chunk-72DF3QTA.cjs → chunk-CQ6O6ER2.cjs} +12 -12
  10. package/dist/{chunk-72DF3QTA.cjs.map → chunk-CQ6O6ER2.cjs.map} +1 -1
  11. package/dist/{chunk-VYEDTVIZ.js → chunk-CSRGIQ2G.js} +3 -3
  12. package/dist/{chunk-7L2RVINX.cjs → chunk-D3VTZBWC.cjs} +32 -32
  13. package/dist/{chunk-7L2RVINX.cjs.map → chunk-D3VTZBWC.cjs.map} +1 -1
  14. package/dist/{chunk-4SR2QHMB.js → chunk-EFBKOCEA.js} +3 -3
  15. package/dist/{chunk-JGXAVNZQ.js → chunk-FW2U6U4P.js} +45 -34
  16. package/dist/{chunk-JGXAVNZQ.js.map → chunk-FW2U6U4P.js.map} +1 -1
  17. package/dist/{chunk-BZF63JXP.js → chunk-GCVAZR52.js} +5 -5
  18. package/dist/{chunk-FTOVZ7O2.js → chunk-HNDHCJV4.js} +6 -6
  19. package/dist/{chunk-UCV4LFUG.cjs → chunk-IZTXVVGY.cjs} +40 -40
  20. package/dist/{chunk-UCV4LFUG.cjs.map → chunk-IZTXVVGY.cjs.map} +1 -1
  21. package/dist/{chunk-XV5SXALY.js → chunk-JCF55O7G.js} +2 -2
  22. package/dist/{chunk-CLQEBWV7.js → chunk-JQDGP4CE.js} +4 -4
  23. package/dist/{chunk-SGWPW2AO.cjs → chunk-KHE3OBHD.cjs} +18 -18
  24. package/dist/{chunk-SGWPW2AO.cjs.map → chunk-KHE3OBHD.cjs.map} +1 -1
  25. package/dist/{chunk-J4T5ZBWG.cjs → chunk-KZSQMZUL.cjs} +19 -19
  26. package/dist/{chunk-J4T5ZBWG.cjs.map → chunk-KZSQMZUL.cjs.map} +1 -1
  27. package/dist/{chunk-VO2ZONMR.js → chunk-MRPFFHBK.js} +3 -3
  28. package/dist/{chunk-JIZJDAXI.cjs → chunk-NNQMA3N6.cjs} +12 -12
  29. package/dist/{chunk-JIZJDAXI.cjs.map → chunk-NNQMA3N6.cjs.map} +1 -1
  30. package/dist/{chunk-AWDHRIL3.cjs → chunk-OK34RZWT.cjs} +73 -73
  31. package/dist/{chunk-AWDHRIL3.cjs.map → chunk-OK34RZWT.cjs.map} +1 -1
  32. package/dist/{chunk-2OXJ6NHI.cjs → chunk-Q6RMV5WK.cjs} +5 -5
  33. package/dist/{chunk-2OXJ6NHI.cjs.map → chunk-Q6RMV5WK.cjs.map} +1 -1
  34. package/dist/{chunk-G43CEISB.js → chunk-QFQBYNQJ.js} +4 -4
  35. package/dist/{chunk-WHJGRRK2.js → chunk-QW7SW5HY.js} +52 -43
  36. package/dist/chunk-QW7SW5HY.js.map +1 -0
  37. package/dist/{chunk-L5CI57RM.cjs → chunk-T3BF6JTQ.cjs} +52 -43
  38. package/dist/chunk-T3BF6JTQ.cjs.map +1 -0
  39. package/dist/{chunk-RR3Z52X5.cjs → chunk-US2F5GJO.cjs} +40 -40
  40. package/dist/{chunk-RR3Z52X5.cjs.map → chunk-US2F5GJO.cjs.map} +1 -1
  41. package/dist/{chunk-5RIHLXEP.cjs → chunk-WXARO2KA.cjs} +33 -33
  42. package/dist/{chunk-5RIHLXEP.cjs.map → chunk-WXARO2KA.cjs.map} +1 -1
  43. package/dist/{chunk-DMXB3VE2.cjs → chunk-X5USQ6UC.cjs} +492 -481
  44. package/dist/chunk-X5USQ6UC.cjs.map +1 -0
  45. package/dist/{chunk-SFJRMBJC.js → chunk-XRGAQM3F.js} +2 -2
  46. package/dist/{chunk-VCPTU4IW.js → chunk-XT4P4JGJ.js} +6 -6
  47. package/dist/{chunk-F7AD5CUU.js → chunk-YKF25XRY.js} +2 -2
  48. package/dist/chunk-YKF25XRY.js.map +1 -0
  49. package/dist/components/case-studies/index.cjs +10 -10
  50. package/dist/components/case-studies/index.js +4 -4
  51. package/dist/components/chat/index.cjs +4 -4
  52. package/dist/components/chat/index.js +3 -3
  53. package/dist/components/contact/index.cjs +5 -5
  54. package/dist/components/contact/index.js +4 -4
  55. package/dist/components/docs/index.cjs +7 -7
  56. package/dist/components/docs/index.js +6 -6
  57. package/dist/components/embeds/index.cjs +5 -5
  58. package/dist/components/embeds/index.js +4 -4
  59. package/dist/components/faq/index.cjs +6 -6
  60. package/dist/components/faq/index.js +5 -5
  61. package/dist/components/features/index.cjs +4 -4
  62. package/dist/components/features/index.js +3 -3
  63. package/dist/components/help-center-pages/index.cjs +23 -23
  64. package/dist/components/help-center-pages/index.js +14 -14
  65. package/dist/components/index.cjs +161 -161
  66. package/dist/components/index.js +12 -12
  67. package/dist/components/navigation/header-button.d.ts.map +1 -1
  68. package/dist/components/navigation/header.d.ts.map +1 -1
  69. package/dist/components/navigation/index.cjs +4 -4
  70. package/dist/components/navigation/index.js +3 -3
  71. package/dist/components/navigation/mingo-ai-button.d.ts.map +1 -1
  72. package/dist/components/navigation/top-navigation.d.ts +5 -1
  73. package/dist/components/navigation/top-navigation.d.ts.map +1 -1
  74. package/dist/components/onboarding-guides/index.cjs +8 -8
  75. package/dist/components/onboarding-guides/index.js +7 -7
  76. package/dist/components/related-content/index.cjs +6 -6
  77. package/dist/components/related-content/index.js +5 -5
  78. package/dist/components/tickets/index.cjs +7 -7
  79. package/dist/components/tickets/index.js +6 -6
  80. package/dist/components/ui/button/button.d.ts +6 -5
  81. package/dist/components/ui/button/button.d.ts.map +1 -1
  82. package/dist/components/ui/file-manager/index.cjs +50 -50
  83. package/dist/components/ui/file-manager/index.js +1 -1
  84. package/dist/components/ui/index.cjs +4 -4
  85. package/dist/components/ui/index.js +3 -3
  86. package/dist/hooks/index.cjs +2 -2
  87. package/dist/hooks/index.js +1 -1
  88. package/dist/hooks/ui/use-header-height.d.ts.map +1 -1
  89. package/dist/index.cjs +4 -4
  90. package/dist/index.js +3 -3
  91. package/package.json +1 -1
  92. package/src/components/features/time-tracker/time-tracker-header-button.tsx +1 -1
  93. package/src/components/navigation/app-header.tsx +10 -10
  94. package/src/components/navigation/header-button.tsx +4 -1
  95. package/src/components/navigation/header-mingo-button.tsx +2 -2
  96. package/src/components/navigation/header-skeleton.tsx +4 -4
  97. package/src/components/navigation/header.tsx +20 -14
  98. package/src/components/navigation/mingo-ai-button.tsx +23 -22
  99. package/src/components/navigation/mobile-burger-menu.tsx +3 -3
  100. package/src/components/navigation/top-navigation.tsx +17 -1
  101. package/src/components/ui/button/button.tsx +165 -133
  102. package/src/hooks/ui/use-header-height.ts +3 -1
  103. package/src/stories/TopNavigation.stories.tsx +20 -1
  104. package/dist/chunk-DMXB3VE2.cjs.map +0 -1
  105. package/dist/chunk-F7AD5CUU.js.map +0 -1
  106. package/dist/chunk-FFXNRJ5S.cjs.map +0 -1
  107. package/dist/chunk-L5CI57RM.cjs.map +0 -1
  108. package/dist/chunk-WHJGRRK2.js.map +0 -1
  109. /package/dist/{chunk-OAWFYZZT.js.map → chunk-32J4AXWO.js.map} +0 -0
  110. /package/dist/{chunk-HR6F6IP4.js.map → chunk-AFHWEJXM.js.map} +0 -0
  111. /package/dist/{chunk-VYEDTVIZ.js.map → chunk-CSRGIQ2G.js.map} +0 -0
  112. /package/dist/{chunk-4SR2QHMB.js.map → chunk-EFBKOCEA.js.map} +0 -0
  113. /package/dist/{chunk-BZF63JXP.js.map → chunk-GCVAZR52.js.map} +0 -0
  114. /package/dist/{chunk-FTOVZ7O2.js.map → chunk-HNDHCJV4.js.map} +0 -0
  115. /package/dist/{chunk-XV5SXALY.js.map → chunk-JCF55O7G.js.map} +0 -0
  116. /package/dist/{chunk-CLQEBWV7.js.map → chunk-JQDGP4CE.js.map} +0 -0
  117. /package/dist/{chunk-VO2ZONMR.js.map → chunk-MRPFFHBK.js.map} +0 -0
  118. /package/dist/{chunk-G43CEISB.js.map → chunk-QFQBYNQJ.js.map} +0 -0
  119. /package/dist/{chunk-SFJRMBJC.js.map → chunk-XRGAQM3F.js.map} +0 -0
  120. /package/dist/{chunk-VCPTU4IW.js.map → chunk-XT4P4JGJ.js.map} +0 -0
@@ -135,11 +135,12 @@ export function Header({ config, platform }: HeaderProps) {
135
135
  [item.id]: !prev[item.id],
136
136
  }));
137
137
  }}
138
- size="small-legacy"
138
+ size="default"
139
+ font="regular"
139
140
  className={cn(
140
- // Top-level nav links: h3 bold per the ODS top-navigation spec
141
- // (Figma 2797-5978); dropdown children stay on the h6 step.
142
- 'text-h3 font-bold tracking-[-0.36px]',
141
+ // Top-level nav links: the default-size button with the h4
142
+ // (DM Sans 500) `font="regular"` label Figma 133-740, added
143
+ // for navigation; dropdown children stay on the h6 step.
143
144
  item.isActive && 'bg-ods-bg-hover', // Active items get subtle gray background
144
145
  isOpen && 'bg-ods-bg-hover', // Open dropdowns get gray background
145
146
  item.className,
@@ -227,9 +228,9 @@ export function Header({ config, platform }: HeaderProps) {
227
228
  onClick={item.onClick} // Only for non-navigation actions
228
229
  leftIcon={item.icon}
229
230
  rightIcon={item.badge}
230
- size="small-legacy"
231
+ size="default"
232
+ font="regular"
231
233
  className={cn(
232
- 'text-h3 font-bold tracking-[-0.36px]',
233
234
  'hover:bg-ods-bg-hover focus:bg-ods-bg-hover',
234
235
  'whitespace-nowrap',
235
236
  'text-ods-text-primary', // All items use primary text color
@@ -251,9 +252,9 @@ export function Header({ config, platform }: HeaderProps) {
251
252
  onClick={item.onClick}
252
253
  leftIcon={item.icon}
253
254
  rightIcon={item.badge}
254
- size="small-legacy"
255
+ size="default"
256
+ font="regular"
255
257
  className={cn(
256
- 'text-h3 font-bold tracking-[-0.36px]',
257
258
  'hover:bg-ods-bg-hover focus:bg-ods-bg-hover',
258
259
  'whitespace-nowrap',
259
260
  'text-ods-text-primary', // All items use primary text color
@@ -301,15 +302,16 @@ export function Header({ config, platform }: HeaderProps) {
301
302
  style={config.style}
302
303
  backgroundClassName={config.backgroundColor}
303
304
  centerBreakpoint="lg"
305
+ size="big"
304
306
  leading={
305
307
  <>
306
308
  {/* Length-guarded: platform configs often pass `left: []`, and an
307
309
  empty array is truthy — without the guard the cell would render
308
310
  as a bare divider + padding. */}
311
+ {/* No padding on the wrapper: leading cells (HeaderButton-based
312
+ admin toggles) size themselves to the bar's square cell. */}
309
313
  {!!config.actions?.left?.length && (
310
- <div className="flex h-full items-center border-r border-ods-border px-[var(--spacing-system-xs)]">
311
- {config.actions.left}
312
- </div>
314
+ <div className="flex h-full items-center border-r border-ods-border">{config.actions.left}</div>
313
315
  )}
314
316
  {/* Mobile/tablet menu toggle — a leading cell per the ODS spec
315
317
  (banded with the nav breakpoint `lg` so the desktop nav and the
@@ -328,8 +330,8 @@ export function Header({ config, platform }: HeaderProps) {
328
330
  aria-controls={config.mobile?.isOpen ? MOBILE_NAV_PANEL_ID : undefined}
329
331
  icon={
330
332
  config.mobile?.isOpen
331
- ? config.mobile?.closeIcon || <XmarkIcon className="w-4 h-4 md:w-6 md:h-6" />
332
- : config.mobile?.menuIcon || <Menu01Icon className="w-4 h-4 md:w-6 md:h-6" />
333
+ ? config.mobile?.closeIcon || <XmarkIcon className="w-6 h-6" />
334
+ : config.mobile?.menuIcon || <Menu01Icon className="w-6 h-6" />
333
335
  }
334
336
  />
335
337
  )}
@@ -340,7 +342,11 @@ export function Header({ config, platform }: HeaderProps) {
340
342
  {config.logo.element}
341
343
  </Link>
342
344
  }
343
- logoClassName={hasLeftCells ? 'lg:pl-[var(--spacing-system-l)]' : undefined}
345
+ // Logo inset for the hub sites: 12px on mobile (the shell's base p-m),
346
+ // 16px on tablet (mf token; the shell default is pl-l = 24px there),
347
+ // desktop unchanged — pl-xxl, collapsed to pl-l when an always-visible
348
+ // leading cell sits before the logo.
349
+ logoClassName={cn('md:pl-[var(--spacing-system-mf)]', hasLeftCells && 'lg:pl-[var(--spacing-system-l)]')}
344
350
  center={
345
351
  hasNav ? (
346
352
  <nav
@@ -1,20 +1,20 @@
1
- 'use client'
1
+ 'use client';
2
2
 
3
- import React from 'react'
4
- import { MingoIcon } from '../icons'
5
- import { cn } from '../../utils'
3
+ import React from 'react';
4
+ import { cn } from '../../utils';
5
+ import { MingoIcon } from '../icons';
6
6
 
7
7
  export interface MingoAiButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
8
- source?: string
8
+ source?: string;
9
9
  /** The platform's Mingo identity glyph — pass the SAME server-configured
10
10
  * icon the chat panel renders (host-side: `EntityIcon` fed by the admin
11
11
  * `assistantIcon`), so the launcher and the panel can never diverge.
12
12
  * Falls back to the packaged Mingo mark when the server has none. */
13
- icon?: React.ReactNode
13
+ icon?: React.ReactNode;
14
14
  /** The launcher's wordmark + aria-label — pass the server-configured
15
15
  * assistant name (same `assistantName` the chat panel shows) so the
16
16
  * launcher never hardcodes an identity the admin has renamed. */
17
- label?: string
17
+ label?: string;
18
18
  }
19
19
 
20
20
  /**
@@ -32,7 +32,7 @@ export interface MingoAiButtonProps extends React.ButtonHTMLAttributes<HTMLButto
32
32
  * icon-only collapse that `Button` cannot express (same precedent as
33
33
  * `header-mingo-button.tsx`).
34
34
  */
35
- const MINGO_ACCENT = 'var(--ods-flamingo-cyan-base)'
35
+ const MINGO_ACCENT = 'var(--ods-flamingo-cyan-base)';
36
36
 
37
37
  export function MingoAiButton({ source, icon, label = 'Mingo AI', className, onClick, ...props }: MingoAiButtonProps) {
38
38
  return (
@@ -40,12 +40,12 @@ export function MingoAiButton({ source, icon, label = 'Mingo AI', className, onC
40
40
  {...props}
41
41
  type="button"
42
42
  aria-label={label}
43
- onClick={(e) => {
43
+ onClick={e => {
44
44
  // Coalesce to '' so a source-less mount still matches EmbeddableChat's
45
45
  // own `runtime.source ?? ''` comparison (undefined !== '' would make
46
46
  // the panel silently ignore the event).
47
- window.dispatchEvent(new CustomEvent('ask-ai:open', { detail: { source: source ?? '' } }))
48
- onClick?.(e)
47
+ window.dispatchEvent(new CustomEvent('ask-ai:open', { detail: { source: source ?? '' } }));
48
+ onClick?.(e);
49
49
  }}
50
50
  className={cn(
51
51
  // Unified ODS top-navigation cell (Figma 2797-6808 desktop /
@@ -58,11 +58,11 @@ export function MingoAiButton({ source, icon, label = 'Mingo AI', className, onC
58
58
  className,
59
59
  )}
60
60
  >
61
- {/* Inner box = 1:1 twin of the header CTA's `size="small"` Button
62
- geometry (rounded-md, h-6 md:h-8) so the animated ring traces
63
- exactly where a normal small-button border would sit inside the
64
- 48/56px cell. */}
65
- <span className="relative flex h-6 items-center gap-[var(--spacing-system-xsf)] rounded-md px-[var(--spacing-system-xsf)] md:h-8">
61
+ {/* Inner box = 1:1 twin of the DEFAULT-size Button geometry (rounded-md,
62
+ h-11 md:h-12, px-m) the same footprint as the header's "Try for
63
+ Free" CTA so the animated ring traces exactly where a full button
64
+ border would sit inside the 72px bar. */}
65
+ <span className="relative flex h-11 items-center gap-[var(--spacing-system-xsf)] rounded-md px-[var(--spacing-system-m)] md:h-12">
66
66
  {/* AI edge light (Apple-Intelligence-style): a rotating accent-
67
67
  gradient arc clipped to a 3px ring on the box outline via CSS
68
68
  mask (.mingo-edge-frame) — NO opaque cover, so the launcher
@@ -92,13 +92,14 @@ export function MingoAiButton({ source, icon, label = 'Mingo AI', className, onC
92
92
  />
93
93
  )}
94
94
  {/* Wordmark collapses below md — the mobile cell is icon-only per
95
- spec. `text-code` (sentence-case mono caption, matching the small
96
- CTA next to it) by product decision — the Figma wordmark is h3
97
- bold; flagged for the designer. */}
98
- <span className="relative hidden whitespace-nowrap text-code text-ods-text-primary md:inline">{label}</span>
95
+ spec. h3 bold, matching the default-size CTA label next to it
96
+ (Figma 2936-6825). */}
97
+ {/* Bare `text-h3` the exact composite the default-size Button label
98
+ uses (bold 700 and -0.02em tracking are built into the utility). */}
99
+ <span className="relative hidden whitespace-nowrap text-h3 text-ods-text-primary md:inline">{label}</span>
99
100
  </span>
100
101
  </button>
101
- )
102
+ );
102
103
  }
103
104
 
104
- export default MingoAiButton
105
+ export default MingoAiButton;
@@ -9,8 +9,8 @@ import { Logout02Icon, PenEditIcon, UserSearchIcon } from '../icons-v2-generated
9
9
  import { Button, SquareAvatar } from '../ui'
10
10
  import { OVERLAY_BACKDROP_CLASS } from '../ui/drawer'
11
11
 
12
- // Header height constant (h-12 = 48px)
13
- const HEADER_HEIGHT = 48
12
+ // Header height constant — the unified top-navigation `small` bar (56px on all screens)
13
+ const HEADER_HEIGHT = 56
14
14
 
15
15
  export interface MobileBurgerMenuProps {
16
16
  /** Whether the menu is open */
@@ -188,7 +188,7 @@ export const MobileBurgerMenu = React.memo(function MobileBurgerMenu({
188
188
  fallback={user.userName}
189
189
  size="lg"
190
190
  variant="round"
191
- className="w-12 h-12 shrink-0"
191
+ className="w-14 h-14 shrink-0"
192
192
  />
193
193
 
194
194
  {/* User Info */}
@@ -5,6 +5,17 @@ import { cn } from '../../utils/cn';
5
5
 
6
6
  export type TopNavigationCenterBreakpoint = 'md' | 'lg';
7
7
 
8
+ export type TopNavigationSize = 'small' | 'big';
9
+
10
+ // Bar height + square-cell width per size (Figma 2797-5978 `size` axis).
11
+ // Heights are FIXED across breakpoints. `--top-nav-cell` is consumed by
12
+ // `HeaderButton` (and any custom cell) so cell widths follow the size without
13
+ // each cell knowing about it.
14
+ const SIZE_CLASSES: Record<TopNavigationSize, string> = {
15
+ small: 'h-14 [--top-nav-cell:3.5rem]',
16
+ big: 'h-[72px] [--top-nav-cell:4.5rem]',
17
+ };
18
+
8
19
  // Literal class maps — Tailwind's scanner needs the full class strings.
9
20
  const CENTER_VISIBILITY: Record<TopNavigationCenterBreakpoint, string> = {
10
21
  md: 'hidden md:flex',
@@ -52,6 +63,9 @@ export interface TopNavigationProps extends React.HTMLAttributes<HTMLElement> {
52
63
  backgroundClassName?: string;
53
64
  /** Top border on mobile (the ODS spec bar shows it below md). Default true. */
54
65
  mobileTopBorder?: boolean;
66
+ /** Bar size (Figma 2797-5978 `size` axis): `small` = 56px (console),
67
+ * `big` = 72px (marketing/hub sites). Fixed across breakpoints. */
68
+ size?: TopNavigationSize;
55
69
  }
56
70
 
57
71
  const hasContent = (node: React.ReactNode): boolean => node !== null && node !== undefined && node !== false;
@@ -80,6 +94,7 @@ export function TopNavigation({
80
94
  sideActions,
81
95
  backgroundClassName,
82
96
  mobileTopBorder = true,
97
+ size = 'small',
83
98
  className,
84
99
  children,
85
100
  ...props
@@ -87,7 +102,8 @@ export function TopNavigation({
87
102
  return (
88
103
  <header
89
104
  className={cn(
90
- 'flex h-12 w-full items-center border-b border-ods-border md:h-14',
105
+ 'flex w-full items-center border-b border-ods-border',
106
+ SIZE_CLASSES[size],
91
107
  mobileTopBorder && 'border-t md:border-t-0',
92
108
  backgroundClassName ?? 'bg-ods-card',
93
109
  className,