@flamingo-stack/openframe-frontend-core 0.0.438 → 0.0.439

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 (121) hide show
  1. package/dist/{chunk-LR6A67KZ.js → chunk-2ELBNZJ3.js} +2 -2
  2. package/dist/{chunk-6R5SZPAQ.cjs → chunk-3WJQL4DN.cjs} +15 -15
  3. package/dist/{chunk-6R5SZPAQ.cjs.map → chunk-3WJQL4DN.cjs.map} +1 -1
  4. package/dist/{chunk-KBFQF4AV.js → chunk-7WM77CSW.js} +2 -2
  5. package/dist/{chunk-B5SGPIJ4.cjs → chunk-AUJXLVXA.cjs} +37 -37
  6. package/dist/{chunk-B5SGPIJ4.cjs.map → chunk-AUJXLVXA.cjs.map} +1 -1
  7. package/dist/{chunk-X66KRL5G.cjs → chunk-C3FH53AP.cjs} +11 -11
  8. package/dist/{chunk-X66KRL5G.cjs.map → chunk-C3FH53AP.cjs.map} +1 -1
  9. package/dist/{chunk-W2PRXXUD.js → chunk-COMBYYQY.js} +2 -2
  10. package/dist/{chunk-RTHOCS3S.js → chunk-EGRZHR7J.js} +2 -2
  11. package/dist/{chunk-D5RTZ2WN.js → chunk-F7YVI54P.js} +4 -4
  12. package/dist/{chunk-5D5SJOLE.js → chunk-G5FALXNO.js} +4 -4
  13. package/dist/{chunk-2DCP2TIF.cjs → chunk-HTVVXVJL.cjs} +1966 -1490
  14. package/dist/chunk-HTVVXVJL.cjs.map +1 -0
  15. package/dist/{chunk-WF7VGEYR.cjs → chunk-IAN7GUIV.cjs} +26 -26
  16. package/dist/{chunk-WF7VGEYR.cjs.map → chunk-IAN7GUIV.cjs.map} +1 -1
  17. package/dist/{chunk-SYTL2VIU.cjs → chunk-M3LD6DNE.cjs} +7 -7
  18. package/dist/{chunk-SYTL2VIU.cjs.map → chunk-M3LD6DNE.cjs.map} +1 -1
  19. package/dist/{chunk-YKP2F2NC.cjs → chunk-M6QGB6DC.cjs} +26 -26
  20. package/dist/{chunk-YKP2F2NC.cjs.map → chunk-M6QGB6DC.cjs.map} +1 -1
  21. package/dist/{chunk-6ETVJ5ON.js → chunk-NQQ4NLUT.js} +6577 -6101
  22. package/dist/chunk-NQQ4NLUT.js.map +1 -0
  23. package/dist/{chunk-A25RPWYF.js → chunk-P7PISHM5.js} +2 -2
  24. package/dist/{chunk-44HNH57W.js → chunk-PBTY7AH5.js} +4 -4
  25. package/dist/{chunk-ZEY7A3MP.js → chunk-PEIR7D25.js} +2 -2
  26. package/dist/{chunk-DTYPYYKD.cjs → chunk-R46QEE3R.cjs} +59 -59
  27. package/dist/{chunk-DTYPYYKD.cjs.map → chunk-R46QEE3R.cjs.map} +1 -1
  28. package/dist/{chunk-H2TQ44VD.cjs → chunk-RQQZF6G6.cjs} +31 -31
  29. package/dist/{chunk-H2TQ44VD.cjs.map → chunk-RQQZF6G6.cjs.map} +1 -1
  30. package/dist/{chunk-CMP56RUC.cjs → chunk-VWGF6IFR.cjs} +62 -62
  31. package/dist/{chunk-CMP56RUC.cjs.map → chunk-VWGF6IFR.cjs.map} +1 -1
  32. package/dist/{chunk-POFDZH2C.js → chunk-WAGTZVQN.js} +4 -4
  33. package/dist/{chunk-XFSDFO6U.js → chunk-WPVBTVI3.js} +2 -2
  34. package/dist/{chunk-VYG2CJFJ.cjs → chunk-WZ6TCAYQ.cjs} +9 -9
  35. package/dist/{chunk-VYG2CJFJ.cjs.map → chunk-WZ6TCAYQ.cjs.map} +1 -1
  36. package/dist/{chunk-PCMDRDYX.cjs → chunk-ZMUFTGL7.cjs} +5 -5
  37. package/dist/{chunk-PCMDRDYX.cjs.map → chunk-ZMUFTGL7.cjs.map} +1 -1
  38. package/dist/components/case-studies/index.cjs +8 -8
  39. package/dist/components/case-studies/index.js +2 -2
  40. package/dist/components/chat/chat-archive-page.d.ts +28 -8
  41. package/dist/components/chat/chat-archive-page.d.ts.map +1 -1
  42. package/dist/components/chat/chat-header-icon-button.d.ts +6 -2
  43. package/dist/components/chat/chat-header-icon-button.d.ts.map +1 -1
  44. package/dist/components/chat/chat-header-search-field.d.ts +25 -0
  45. package/dist/components/chat/chat-header-search-field.d.ts.map +1 -0
  46. package/dist/components/chat/chat-list-empty-state.d.ts +20 -0
  47. package/dist/components/chat/chat-list-empty-state.d.ts.map +1 -0
  48. package/dist/components/chat/chat-panel-header.d.ts +19 -9
  49. package/dist/components/chat/chat-panel-header.d.ts.map +1 -1
  50. package/dist/components/chat/embeddable-chat.d.ts +15 -6
  51. package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
  52. package/dist/components/chat/hooks/use-chat-dialog-manager.d.ts +2 -0
  53. package/dist/components/chat/hooks/use-chat-dialog-manager.d.ts.map +1 -1
  54. package/dist/components/chat/index.cjs +4 -2
  55. package/dist/components/chat/index.cjs.map +1 -1
  56. package/dist/components/chat/index.d.ts +2 -0
  57. package/dist/components/chat/index.d.ts.map +1 -1
  58. package/dist/components/chat/index.js +5 -3
  59. package/dist/components/chat/mingo-chat-history.d.ts +5 -10
  60. package/dist/components/chat/mingo-chat-history.d.ts.map +1 -1
  61. package/dist/components/chat/mingo-history-rail.d.ts +54 -0
  62. package/dist/components/chat/mingo-history-rail.d.ts.map +1 -0
  63. package/dist/components/chat/mingo-welcome.d.ts +6 -25
  64. package/dist/components/chat/mingo-welcome.d.ts.map +1 -1
  65. package/dist/components/contact/index.cjs +3 -3
  66. package/dist/components/contact/index.js +2 -2
  67. package/dist/components/docs/index.cjs +5 -5
  68. package/dist/components/docs/index.js +4 -4
  69. package/dist/components/embeds/index.cjs +3 -3
  70. package/dist/components/embeds/index.js +2 -2
  71. package/dist/components/faq/index.cjs +3 -3
  72. package/dist/components/faq/index.js +2 -2
  73. package/dist/components/features/index.cjs +2 -2
  74. package/dist/components/features/index.js +1 -1
  75. package/dist/components/help-center-pages/index.cjs +20 -20
  76. package/dist/components/help-center-pages/index.js +11 -11
  77. package/dist/components/index.cjs +130 -128
  78. package/dist/components/index.cjs.map +1 -1
  79. package/dist/components/index.js +13 -11
  80. package/dist/components/index.js.map +1 -1
  81. package/dist/components/navigation/index.cjs +2 -2
  82. package/dist/components/navigation/index.js +1 -1
  83. package/dist/components/onboarding-guides/index.cjs +5 -5
  84. package/dist/components/onboarding-guides/index.js +4 -4
  85. package/dist/components/related-content/index.cjs +3 -3
  86. package/dist/components/related-content/index.js +2 -2
  87. package/dist/components/tickets/index.cjs +5 -5
  88. package/dist/components/tickets/index.js +4 -4
  89. package/dist/components/ui/index.cjs +4 -2
  90. package/dist/components/ui/index.cjs.map +1 -1
  91. package/dist/components/ui/index.js +5 -3
  92. package/dist/index.cjs +4 -2
  93. package/dist/index.cjs.map +1 -1
  94. package/dist/index.js +5 -3
  95. package/package.json +1 -1
  96. package/src/components/chat/chat-archive-page.tsx +89 -73
  97. package/src/components/chat/chat-header-icon-button.tsx +12 -5
  98. package/src/components/chat/chat-header-search-field.tsx +144 -0
  99. package/src/components/chat/chat-list-empty-state.tsx +44 -0
  100. package/src/components/chat/chat-panel-header.tsx +76 -29
  101. package/src/components/chat/embeddable-chat.tsx +548 -125
  102. package/src/components/chat/guide-welcome.tsx +4 -4
  103. package/src/components/chat/hooks/use-chat-dialog-manager.ts +59 -5
  104. package/src/components/chat/index.ts +2 -0
  105. package/src/components/chat/mingo-chat-history.tsx +46 -100
  106. package/src/components/chat/mingo-history-rail.tsx +161 -0
  107. package/src/components/chat/mingo-welcome.tsx +17 -98
  108. package/src/stories/MingoWelcome.stories.tsx +2 -11
  109. package/dist/chunk-2DCP2TIF.cjs.map +0 -1
  110. package/dist/chunk-6ETVJ5ON.js.map +0 -1
  111. /package/dist/{chunk-LR6A67KZ.js.map → chunk-2ELBNZJ3.js.map} +0 -0
  112. /package/dist/{chunk-KBFQF4AV.js.map → chunk-7WM77CSW.js.map} +0 -0
  113. /package/dist/{chunk-W2PRXXUD.js.map → chunk-COMBYYQY.js.map} +0 -0
  114. /package/dist/{chunk-RTHOCS3S.js.map → chunk-EGRZHR7J.js.map} +0 -0
  115. /package/dist/{chunk-D5RTZ2WN.js.map → chunk-F7YVI54P.js.map} +0 -0
  116. /package/dist/{chunk-5D5SJOLE.js.map → chunk-G5FALXNO.js.map} +0 -0
  117. /package/dist/{chunk-A25RPWYF.js.map → chunk-P7PISHM5.js.map} +0 -0
  118. /package/dist/{chunk-44HNH57W.js.map → chunk-PBTY7AH5.js.map} +0 -0
  119. /package/dist/{chunk-ZEY7A3MP.js.map → chunk-PEIR7D25.js.map} +0 -0
  120. /package/dist/{chunk-POFDZH2C.js.map → chunk-WAGTZVQN.js.map} +0 -0
  121. /package/dist/{chunk-XFSDFO6U.js.map → chunk-WPVBTVI3.js.map} +0 -0
@@ -10,10 +10,6 @@ import { Button } from '../ui/button'
10
10
  import { ScrollFadeOverlay, useScrollFade } from '../ui/scroll-fade'
11
11
  import { XmarkIcon } from '../icons-v2-generated/signs-and-symbols/xmark-icon'
12
12
  import {
13
- Rocket01Icon,
14
- BracketCurlyIcon,
15
- SearchIcon,
16
- LayersIcon,
17
13
  CompassIcon,
18
14
  Arrow01DownIcon,
19
15
  AlertCircleIcon,
@@ -24,17 +20,6 @@ import {
24
20
  // Types
25
21
  // =============================================================================
26
22
 
27
- /** A single capability cell in the 2-up feature grid. */
28
- export interface MingoFeatureCard {
29
- /** Stable React key. */
30
- id: string
31
- /** Leading 16×16 icon (monochrome `ods-text-secondary`). */
32
- icon?: React.ReactNode
33
- /** Caption text. Line breaks (`\n`) are honoured (`whitespace-pre-line`)
34
- * so the two-line wrap stays fixed regardless of panel width. */
35
- text: React.ReactNode
36
- }
37
-
38
23
  /** "New to OpenFrame?" one-time notification config. `null` hides the card. */
39
24
  export interface MingoWelcomePromo {
40
25
  title: React.ReactNode
@@ -57,14 +42,10 @@ export interface MingoQuickAction {
57
42
  }
58
43
 
59
44
  export interface MingoWelcomeProps {
60
- /** First name woven into the greeting. Empty/undefined → no-name variant. */
61
- userName?: string
62
- /** Greeting heading. Defaults to `Hey{, name}, I'm Mingo`. */
45
+ /** Greeting heading. Defaults to `Hey, I'm Mingo`. */
63
46
  title?: React.ReactNode
64
47
  /** Greeting sub-line under the heading. */
65
48
  subtitle?: React.ReactNode
66
- /** 2-up capability grid. Defaults to the four OpenFrame highlights. */
67
- featureCards?: ReadonlyArray<MingoFeatureCard>
68
49
  /** One-time "New to OpenFrame?" notification below the grid. `null` hides
69
50
  * it; omitting falls back to the OpenFrame default (only rendered when
70
51
  * `onStartGuideChat` is wired, i.e. Guide mode exists to advertise). */
@@ -102,10 +83,6 @@ export interface MingoWelcomeProps {
102
83
  loadError?: boolean
103
84
  /** Retry handler for the `loadError` state. */
104
85
  onRetry?: () => void
105
- /** Whether the dialog history has a search bar — when true, the loading
106
- * skeleton includes a search-bar placeholder so it matches the loaded
107
- * layout. Ignored once `dialogHistory` is provided. */
108
- historySearchable?: boolean
109
86
  /** When provided, renders the "Start Guide Chat" chip (the only wired
110
87
  * action — switches the host chat to Guide mode) and enables the default
111
88
  * promo notification. When omitted, both are suppressed. */
@@ -121,29 +98,6 @@ export interface MingoWelcomeProps {
121
98
  const DEFAULT_SUBTITLE =
122
99
  'Ready to help with your technical tasks. What can I do for you?'
123
100
 
124
- const DEFAULT_FEATURE_CARDS: ReadonlyArray<MingoFeatureCard> = [
125
- {
126
- id: 'answers',
127
- icon: <Rocket01Icon size={16} />,
128
- text: 'Get instant answers about\ndevices, tickets, and clients',
129
- },
130
- {
131
- id: 'scripts',
132
- icon: <BracketCurlyIcon size={16} />,
133
- text: 'Run scripts and queries\nthrough natural language',
134
- },
135
- {
136
- id: 'summarize',
137
- icon: <SearchIcon size={16} />,
138
- text: 'Summarize long ticket\nthreads or activity history',
139
- },
140
- {
141
- id: 'delegate',
142
- icon: <LayersIcon size={16} />,
143
- text: 'Delegate tasks, let Mingo\nwork in the background',
144
- },
145
- ]
146
-
147
101
  const DEFAULT_PROMO: MingoWelcomePromo = {
148
102
  title: 'New to OpenFrame?',
149
103
  description: 'Start a Guide Chat to learn how it works and how to set it up.',
@@ -156,13 +110,12 @@ const DEFAULT_PROMO_STORAGE_KEY = 'mingo-welcome:promo-dismissed'
156
110
  // =============================================================================
157
111
 
158
112
  /**
159
- * MingoWelcome — Figma node `7532:222444`.
113
+ * MingoWelcome — Figma node `113:69208`.
160
114
  *
161
115
  * Default (Mingo-mode) chat empty state: a vertically-centred greeting that
162
- * grows to fill available height, then a pinned stack of a 2-up capability
163
- * grid, an optional one-time "New to OpenFrame?" notification, and a
164
- * quick-action chip row. The Guide-mode empty state keeps the slash-command
165
- * onboarding list.
116
+ * grows to fill available height, then a pinned stack of an optional one-time
117
+ * "New to OpenFrame?" notification and a quick-action chip row. The Guide-mode
118
+ * empty state keeps the slash-command onboarding list.
166
119
  *
167
120
  * Content is configurable (props) with OpenFrame defaults so the kit stays
168
121
  * platform-agnostic. The "Start Guide Chat" chip is the only wired action —
@@ -171,10 +124,8 @@ const DEFAULT_PROMO_STORAGE_KEY = 'mingo-welcome:promo-dismissed'
171
124
  * storage so it shows only until the user closes it once.
172
125
  */
173
126
  export function MingoWelcome({
174
- userName,
175
127
  title,
176
128
  subtitle = DEFAULT_SUBTITLE,
177
- featureCards = DEFAULT_FEATURE_CARDS,
178
129
  promo,
179
130
  promoStorageKey = DEFAULT_PROMO_STORAGE_KEY,
180
131
  promoStorage = 'local',
@@ -186,12 +137,12 @@ export function MingoWelcome({
186
137
  isLoadingHistory = false,
187
138
  loadError = false,
188
139
  onRetry,
189
- historySearchable = false,
190
140
  onStartGuideChat,
191
141
  className,
192
142
  }: MingoWelcomeProps) {
193
- const heading =
194
- title ?? (userName ? `Hey ${userName}, I'm Mingo` : "Hey, I'm Mingo")
143
+ // Greeting never weaves the user's name in — always the plain "Hey, I'm
144
+ // Mingo" (design node 113:69208). A host `title` override still wins.
145
+ const heading = title ?? "Hey, I'm Mingo"
195
146
 
196
147
  // `promo` omitted → fall back to the OpenFrame default, but only when guide
197
148
  // mode exists to advertise (otherwise the notification points nowhere).
@@ -236,10 +187,6 @@ export function MingoWelcome({
236
187
  // only while content is hidden in that direction).
237
188
  const { scrollRef, fadeTop, fadeBottom, update: updateScrollFade } = useScrollFade<HTMLDivElement>()
238
189
 
239
- const cellCount = featureCards.length
240
- // Last row's first index — used to drop the bottom divider on the final row.
241
- const lastRowStart = cellCount - ((cellCount % 2) || 2)
242
-
243
190
  // While we don't yet know whether the user is new or returning (first page
244
191
  // loading, or it errored with nothing cached), suppress the pinned region —
245
192
  // the "New to OpenFrame?" promo + quick-action chips. Showing them over the
@@ -284,7 +231,7 @@ export function MingoWelcome({
284
231
  )}
285
232
  </div>
286
233
  ) : isLoadingHistory ? (
287
- <MingoChatHistorySkeleton searchable={historySearchable} />
234
+ <MingoChatHistorySkeleton />
288
235
  ) : (
289
236
  <>
290
237
  {/* Scrollable region — only the greeting + grid scroll; the notification
@@ -309,46 +256,18 @@ export function MingoWelcome({
309
256
  eyesColor="var(--ods-flamingo-cyan-base)"
310
257
  cornerColor="var(--ods-flamingo-cyan-base)"
311
258
  />
312
- <div className="flex w-full flex-col gap-1">
313
- <p className="text-h4 text-ods-text-primary">{heading}</p>
314
- <p className="text-h6 text-ods-text-secondary">{subtitle}</p>
259
+ <div className="flex w-full flex-col gap-[var(--spacing-system-l)]">
260
+ <p className="text-h2 text-ods-text-primary">{heading}</p>
261
+ <p className="text-h4 text-ods-text-secondary">{subtitle}</p>
315
262
  </div>
316
263
  </div>
317
-
318
- {/* 2-up capability grid. `shrink-0` keeps every cell at its natural
319
- height so the bottom row is never clipped (the root scrolls instead).
320
- Cells share the lighter `ods-card` surface; 1px `ods-border` dividers
321
- (right on the left column, bottom on every row but the last) draw the
322
- inner cross. Captions use explicit `\n` breaks (`whitespace-pre-line`)
323
- so the two-line wrap is fixed and never reflows with panel width. */}
324
- {cellCount > 0 && (
325
- <div className="grid shrink-0 grid-cols-2 overflow-hidden rounded-md border border-ods-border bg-ods-card">
326
- {featureCards.map((card, i) => (
327
- <div
328
- key={card.id}
329
- className={cn(
330
- 'flex flex-col items-center justify-center gap-[var(--spacing-system-m)] p-[var(--spacing-system-m)] text-center',
331
- i % 2 === 0 && 'border-r border-ods-border',
332
- i < lastRowStart && 'border-b border-ods-border',
333
- )}
334
- >
335
- {card.icon ? (
336
- <span className="flex size-4 shrink-0 items-center justify-center text-ods-text-primary">
337
- {card.icon}
338
- </span>
339
- ) : null}
340
- <p className="text-h4 text-ods-text-secondary whitespace-pre-line">
341
- {card.text}
342
- </p>
343
- </div>
344
- ))}
345
- </div>
346
- )}
347
264
  </div>
348
265
 
349
- {/* Edge scroll-fades — visible only when content is hidden beyond them. */}
350
- <ScrollFadeOverlay edge="top" visible={fadeTop} color="var(--color-bg-card)" className="h-12" />
351
- <ScrollFadeOverlay edge="bottom" visible={fadeBottom} color="var(--color-bg-card)" className="h-12" />
266
+ {/* Edge scroll-fades — visible only when content is hidden beyond them.
267
+ Fade into the panel's dark `ods-bg` surface (the default color), matching
268
+ the black Mingo welcome background (node 113:69208). */}
269
+ <ScrollFadeOverlay edge="top" visible={fadeTop} className="h-12" />
270
+ <ScrollFadeOverlay edge="bottom" visible={fadeBottom} className="h-12" />
352
271
  </div>
353
272
  </>
354
273
  ))}
@@ -26,14 +26,13 @@ const meta: Meta<typeof MingoWelcome> = {
26
26
  docs: {
27
27
  description: {
28
28
  component:
29
- 'Figma node `7532:222444`. Default (Mingo-mode) chat empty state — a vertically-centred greeting, a 2-up capability grid, an optional "New to OpenFrame?" Guide-chat promo, and a quick-action chip row. Content is configurable with OpenFrame defaults; the only wired action is "Start Guide Chat" (`onStartGuideChat`).',
29
+ 'Figma node `113:69208`. Default (Mingo-mode) chat empty state — a vertically-centred greeting, an optional "New to OpenFrame?" Guide-chat promo, and a quick-action chip row. Content is configurable with OpenFrame defaults; the only wired action is "Start Guide Chat" (`onStartGuideChat`).',
30
30
  },
31
31
  },
32
32
  },
33
33
  argTypes: {
34
34
  title: { control: false },
35
35
  subtitle: { control: false },
36
- featureCards: { control: false },
37
36
  promo: { control: false },
38
37
  quickActions: { control: false },
39
38
  onStartGuideChat: { control: false },
@@ -61,14 +60,6 @@ export const Default: Story = {
61
60
  },
62
61
  }
63
62
 
64
- /** Greeting personalised with a first name. */
65
- export const WithUserName: Story = {
66
- args: {
67
- userName: 'Grace',
68
- onStartGuideChat: () => console.log('switch to guide mode'),
69
- },
70
- }
71
-
72
63
  /** Guide mode not configured → the promo card and "Start Guide Chat" chip are
73
64
  * suppressed (no dead-end CTA). */
74
65
  export const WithoutGuide: Story = {
@@ -100,7 +91,7 @@ export const ReturningUser: Story = {
100
91
  },
101
92
  }
102
93
 
103
- /** Wide panel (e.g. in-layout / desktop) — the grid columns read roomy. */
94
+ /** Wide panel (e.g. in-layout / desktop). */
104
95
  export const Wide: Story = {
105
96
  args: {
106
97
  onStartGuideChat: () => console.log('switch to guide mode'),