@flamingo-stack/openframe-frontend-core 0.0.341 → 0.0.342-snapshot.20260630085305

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 (101) hide show
  1. package/dist/{chunk-CJB4NUD6.cjs → chunk-23ZA3NAS.cjs} +7 -7
  2. package/dist/{chunk-CJB4NUD6.cjs.map → chunk-23ZA3NAS.cjs.map} +1 -1
  3. package/dist/{chunk-EYPZ2XLX.cjs → chunk-2W5ELSDO.cjs} +25 -25
  4. package/dist/{chunk-EYPZ2XLX.cjs.map → chunk-2W5ELSDO.cjs.map} +1 -1
  5. package/dist/{chunk-QCREN5A5.cjs → chunk-4S2J4RIC.cjs} +56 -56
  6. package/dist/{chunk-QCREN5A5.cjs.map → chunk-4S2J4RIC.cjs.map} +1 -1
  7. package/dist/{chunk-A37AW6CD.cjs → chunk-AAMCLU3A.cjs} +5 -5
  8. package/dist/{chunk-A37AW6CD.cjs.map → chunk-AAMCLU3A.cjs.map} +1 -1
  9. package/dist/{chunk-NIIN3UH4.cjs → chunk-AJE4JAPA.cjs} +37 -37
  10. package/dist/{chunk-NIIN3UH4.cjs.map → chunk-AJE4JAPA.cjs.map} +1 -1
  11. package/dist/{chunk-D2ETTYT2.cjs → chunk-DRHMR4RS.cjs} +26 -26
  12. package/dist/{chunk-D2ETTYT2.cjs.map → chunk-DRHMR4RS.cjs.map} +1 -1
  13. package/dist/{chunk-OLR534KB.js → chunk-EY5JK2PV.js} +2 -2
  14. package/dist/{chunk-CUQGK4AD.js → chunk-HI7OGVSK.js} +2 -2
  15. package/dist/{chunk-EPVDWAVJ.js → chunk-HYHUDGT5.js} +4 -4
  16. package/dist/{chunk-I3CNFZOY.cjs → chunk-IXVWSZC6.cjs} +68 -42
  17. package/dist/chunk-IXVWSZC6.cjs.map +1 -0
  18. package/dist/{chunk-KT4KY6OF.js → chunk-J6Z4BKMD.js} +4 -4
  19. package/dist/{chunk-AZ3DTQU5.js → chunk-JIJVIIQB.js} +68 -42
  20. package/dist/chunk-JIJVIIQB.js.map +1 -0
  21. package/dist/{chunk-R3MVYKEL.cjs → chunk-L7JVTLPO.cjs} +62 -62
  22. package/dist/{chunk-R3MVYKEL.cjs.map → chunk-L7JVTLPO.cjs.map} +1 -1
  23. package/dist/{chunk-I4BWBQXX.cjs → chunk-MIRRHOMH.cjs} +31 -31
  24. package/dist/{chunk-I4BWBQXX.cjs.map → chunk-MIRRHOMH.cjs.map} +1 -1
  25. package/dist/{chunk-OGTHMZIL.cjs → chunk-OCDAIFAI.cjs} +9 -9
  26. package/dist/{chunk-OGTHMZIL.cjs.map → chunk-OCDAIFAI.cjs.map} +1 -1
  27. package/dist/{chunk-N3GFEIWF.js → chunk-OJNZ5XJR.js} +2 -2
  28. package/dist/{chunk-Y2WHQSF6.js → chunk-PSOX77C2.js} +2 -2
  29. package/dist/{chunk-GCYEJLOQ.js → chunk-PYEHGR3B.js} +2 -2
  30. package/dist/{chunk-KE2QKKCN.js → chunk-RGVXRRJF.js} +2 -2
  31. package/dist/{chunk-LANAE7MY.cjs → chunk-TGC77CVV.cjs} +12 -12
  32. package/dist/{chunk-LANAE7MY.cjs.map → chunk-TGC77CVV.cjs.map} +1 -1
  33. package/dist/{chunk-QYF6LEDF.js → chunk-VIHF6VQ6.js} +2 -2
  34. package/dist/{chunk-2GROEWOK.js → chunk-VP7CNMFM.js} +4 -4
  35. package/dist/{chunk-4I46HAN5.js → chunk-YJJCUCPH.js} +4 -4
  36. package/dist/{chunk-BYAXSMET.cjs → chunk-ZERQ5VF3.cjs} +15 -15
  37. package/dist/{chunk-BYAXSMET.cjs.map → chunk-ZERQ5VF3.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-composer.d.ts +4 -1
  41. package/dist/components/chat/chat-composer.d.ts.map +1 -1
  42. package/dist/components/chat/chat-input.d.ts.map +1 -1
  43. package/dist/components/chat/chat-quick-action-row.d.ts +6 -1
  44. package/dist/components/chat/chat-quick-action-row.d.ts.map +1 -1
  45. package/dist/components/chat/guide-welcome.d.ts +5 -5
  46. package/dist/components/chat/guide-welcome.d.ts.map +1 -1
  47. package/dist/components/chat/index.cjs +2 -2
  48. package/dist/components/chat/index.js +1 -1
  49. package/dist/components/chat/types/component.types.d.ts +6 -0
  50. package/dist/components/chat/types/component.types.d.ts.map +1 -1
  51. package/dist/components/contact/index.cjs +3 -3
  52. package/dist/components/contact/index.js +2 -2
  53. package/dist/components/docs/index.cjs +5 -5
  54. package/dist/components/docs/index.js +4 -4
  55. package/dist/components/embeds/index.cjs +3 -3
  56. package/dist/components/embeds/index.js +2 -2
  57. package/dist/components/faq/index.cjs +3 -3
  58. package/dist/components/faq/index.js +2 -2
  59. package/dist/components/features/index.cjs +2 -2
  60. package/dist/components/features/index.js +1 -1
  61. package/dist/components/help-center-pages/index.cjs +20 -20
  62. package/dist/components/help-center-pages/index.js +11 -11
  63. package/dist/components/index.cjs +121 -121
  64. package/dist/components/index.js +9 -9
  65. package/dist/components/navigation/index.cjs +2 -2
  66. package/dist/components/navigation/index.js +1 -1
  67. package/dist/components/onboarding-guides/index.cjs +5 -5
  68. package/dist/components/onboarding-guides/index.js +4 -4
  69. package/dist/components/related-content/index.cjs +3 -3
  70. package/dist/components/related-content/index.js +2 -2
  71. package/dist/components/tickets/index.cjs +5 -5
  72. package/dist/components/tickets/index.js +4 -4
  73. package/dist/components/ui/dashboard-info-card.d.ts +10 -6
  74. package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
  75. package/dist/components/ui/index.cjs +2 -2
  76. package/dist/components/ui/index.js +1 -1
  77. package/dist/index.cjs +2 -2
  78. package/dist/index.js +1 -1
  79. package/package.json +1 -1
  80. package/src/components/chat/approval-batch-message.tsx +2 -2
  81. package/src/components/chat/chat-composer.tsx +5 -0
  82. package/src/components/chat/chat-input.tsx +39 -1
  83. package/src/components/chat/chat-quick-action-row.tsx +20 -0
  84. package/src/components/chat/embeddable-chat.tsx +21 -23
  85. package/src/components/chat/guide-welcome.tsx +21 -11
  86. package/src/components/chat/types/component.types.ts +6 -0
  87. package/src/components/ui/dashboard-info-card.tsx +41 -19
  88. package/src/stories/DashboardInfoCard.stories.tsx +7 -7
  89. package/dist/chunk-AZ3DTQU5.js.map +0 -1
  90. package/dist/chunk-I3CNFZOY.cjs.map +0 -1
  91. /package/dist/{chunk-OLR534KB.js.map → chunk-EY5JK2PV.js.map} +0 -0
  92. /package/dist/{chunk-CUQGK4AD.js.map → chunk-HI7OGVSK.js.map} +0 -0
  93. /package/dist/{chunk-EPVDWAVJ.js.map → chunk-HYHUDGT5.js.map} +0 -0
  94. /package/dist/{chunk-KT4KY6OF.js.map → chunk-J6Z4BKMD.js.map} +0 -0
  95. /package/dist/{chunk-N3GFEIWF.js.map → chunk-OJNZ5XJR.js.map} +0 -0
  96. /package/dist/{chunk-Y2WHQSF6.js.map → chunk-PSOX77C2.js.map} +0 -0
  97. /package/dist/{chunk-GCYEJLOQ.js.map → chunk-PYEHGR3B.js.map} +0 -0
  98. /package/dist/{chunk-KE2QKKCN.js.map → chunk-RGVXRRJF.js.map} +0 -0
  99. /package/dist/{chunk-QYF6LEDF.js.map → chunk-VIHF6VQ6.js.map} +0 -0
  100. /package/dist/{chunk-2GROEWOK.js.map → chunk-VP7CNMFM.js.map} +0 -0
  101. /package/dist/{chunk-4I46HAN5.js.map → chunk-YJJCUCPH.js.map} +0 -0
@@ -790,10 +790,11 @@ function EmbeddableChatInner({
790
790
 
791
791
  // Imperative handle to the chat input.
792
792
  const chatInputRef = useRef<ChatInputRef | null>(null)
793
- // Saved composer draft while a quick-action chip is hovered/focused (its full
794
- // prompt is previewed in the composer); restored on hover-end. `null` = not
795
- // currently previewing.
796
- const quickActionDraftRef = useRef<string | null>(null)
793
+ // Full prompt of the currently hovered/focused quick-action chip, previewed
794
+ // as ghost text in the empty composer (`ChatInput.previewText`) declarative
795
+ // + non-destructive: it never writes the editor value, so it can't clobber a
796
+ // draft. `null` = not previewing.
797
+ const [quickActionPreview, setQuickActionPreview] = useState<string | null>(null)
797
798
 
798
799
  // The slash-command registry (Guide onboarding cards) is loaded via
799
800
  // react-query below, after `activeMode` is resolved — gated on Guide mode and
@@ -1400,6 +1401,12 @@ function EmbeddableChatInner({
1400
1401
  // Guide-mode empty state (no open conversation) — drives the "Mingo Guide"
1401
1402
  // header, the guide banner, and the GuideWelcome content branch.
1402
1403
  const isGuideEmpty = !hasConversation && activeMode === 'guide'
1404
+ // Quick-action chips only exist in the guide empty state. If it goes away
1405
+ // (a message is sent, or the mode switches) while a chip is still hovered,
1406
+ // drop the in-flight preview so it can't leak into the next composer state.
1407
+ useEffect(() => {
1408
+ if (!isGuideEmpty) setQuickActionPreview(null)
1409
+ }, [isGuideEmpty])
1403
1410
  // The guide-empty back-chevron returns to Mingo — only offer it when Mingo
1404
1411
  // mode actually exists to return to (guide is normally entered from Mingo).
1405
1412
  const guideCanReturnToMingo = isGuideEmpty && hasMingoMode
@@ -1691,27 +1698,17 @@ function EmbeddableChatInner({
1691
1698
  }
1692
1699
  // Quick-action chips SEND the prompt immediately on click.
1693
1700
  onQuickAction={(action) => {
1694
- // Clear any hover-preview text first so nothing lingers
1695
- // in the composer after the message is sent.
1696
- quickActionDraftRef.current = null
1697
- chatInputRef.current?.setValue('')
1701
+ setQuickActionPreview(null)
1698
1702
  handleSend(action.prompt ?? action.label)
1699
1703
  }}
1700
- // Hover/focus PREVIEWS the action's full prompt in the
1701
- // composer (the label chip is short; this reveals what will
1702
- // be sent). Leaving restores whatever the user had typed.
1703
- onQuickActionHover={(action) => {
1704
- if (quickActionDraftRef.current === null) {
1705
- quickActionDraftRef.current = chatInputRef.current?.getValue() ?? ''
1706
- }
1707
- chatInputRef.current?.setValue(action.prompt ?? action.label)
1708
- }}
1709
- onQuickActionHoverEnd={() => {
1710
- if (quickActionDraftRef.current !== null) {
1711
- chatInputRef.current?.setValue(quickActionDraftRef.current)
1712
- quickActionDraftRef.current = null
1713
- }
1714
- }}
1704
+ // Hover/focus PREVIEWS the action's full prompt as ghost text
1705
+ // in the empty composer (the chip label is short; this reveals
1706
+ // what will be sent). Declarative + non-destructive see
1707
+ // `quickActionPreview` / `ChatInput.previewText`.
1708
+ onQuickActionHover={(action) =>
1709
+ setQuickActionPreview(action.prompt ?? action.label)
1710
+ }
1711
+ onQuickActionHoverEnd={() => setQuickActionPreview(null)}
1715
1712
  >
1716
1713
  {/* Figma node 7363:205938 — single-column slash-command
1717
1714
  list. No own scroll (GuideWelcome's region scrolls); the
@@ -1779,6 +1776,7 @@ function EmbeddableChatInner({
1779
1776
  }
1780
1777
  autoFocus={autoFocusInput}
1781
1778
  slashCommands={slashCommandsProp}
1779
+ previewText={quickActionPreview ?? undefined}
1782
1780
  showAttachmentButton={attachmentsEnabled && activeMode === 'guide'}
1783
1781
  attachmentsCount={stagedAttachments.length}
1784
1782
  onAddFiles={addAttachmentFiles}
@@ -32,12 +32,12 @@ export interface GuideWelcomeProps {
32
32
  * `subtitle` is present. */
33
33
  subtitleLoading?: boolean
34
34
  /** Quick-action chips — caller-provided; there are no built-in defaults, so
35
- * the chip row is omitted entirely unless the host supplies actions. The row
36
- * is a single line: as many chips as fit render inline and the rest collapse
37
- * under a trailing "⋯" overflow menu (width-measured by `ChatQuickActionRow`,
38
- * so the inline count adapts to the available width — no fixed cap). */
35
+ * the chip row is omitted entirely unless the host supplies actions. ALL
36
+ * chips render in a wrapping row (no "⋯" overflow collapse) so every action
37
+ * is directly hoverable hover/focus previews the action's full `prompt` in
38
+ * the composer; click sends it. */
39
39
  quickActions?: ReadonlyArray<GuideQuickAction>
40
- /** Fired when a quick-action chip (inline or menu) is activated. */
40
+ /** Fired when a quick-action chip is activated (click). */
41
41
  onQuickAction?: (action: GuideQuickAction) => void
42
42
  /** Pointer/keyboard focus enters a quick-action chip — e.g. preview the
43
43
  * action's full `prompt` in the composer input. */
@@ -105,8 +105,9 @@ export function GuideWelcome({
105
105
  return () => ro.disconnect()
106
106
  }, [updateScrollFade])
107
107
 
108
- // Map to the shared width-measured chip row's shape. As many chips as fit on
109
- // ONE line render inline; the rest collapse under the trailing "⋯" menu.
108
+ // Map to the shared `ChatQuickActionRow` chip shape. In `wrap` mode every chip
109
+ // renders (no overflow), and `onHoverStart`/`onHoverEnd` drive the composer
110
+ // prompt preview.
110
111
  const chipItems = React.useMemo(
111
112
  () =>
112
113
  quickActions.map((action) => ({
@@ -197,10 +198,19 @@ export function GuideWelcome({
197
198
  />
198
199
  </div>
199
200
 
200
- {/* Pinned quick-action chips always visible above the composer.
201
- Single line: as many chips as fit render inline, the rest collapse
202
- into the trailing "⋯" menu (width-measured by `ChatQuickActionRow`). */}
203
- {quickActions.length > 0 && <ChatQuickActionRow chips={chipItems} />}
201
+ {/* Pinned quick-action chips above the composer the shared
202
+ `ChatQuickActionRow` in `wrap` mode: ALL chips render (no "⋯" overflow
203
+ collapse) so every action is directly hoverable; hover/focus previews
204
+ the action's full prompt in the composer, click sends it. Capped height
205
+ + internal scroll so a long (host/admin-driven) list can't grow the
206
+ pinned area without bound and squeeze the composer on short screens. */}
207
+ {quickActions.length > 0 && (
208
+ <ChatQuickActionRow
209
+ wrap
210
+ chips={chipItems}
211
+ className="max-h-28 overflow-y-auto scrollbar-thin scrollbar-track-transparent scrollbar-thumb-ods-border/30"
212
+ />
213
+ )}
204
214
  </div>
205
215
  )
206
216
  }
@@ -399,6 +399,12 @@ export interface ChatInputProps extends Omit<TextareaHTMLAttributes<HTMLTextArea
399
399
  /** Suppress the textarea's own border/bg/radius — an outer card draws it
400
400
  * instead (composer context-chip layout). Forwarded to `Textarea.hideBorder`. */
401
401
  hideBorder?: boolean
402
+ /** Ephemeral, non-destructive preview text shown over the editor — e.g.
403
+ * previewing a hovered quick-action's full prompt before the user commits it.
404
+ * Purely declarative: it NEVER touches the editor's real value. While set, it
405
+ * visually replaces the editor (even an in-progress draft); clearing it
406
+ * (undefined) restores whatever the user had — empty or typed — verbatim. */
407
+ previewText?: string
402
408
  }
403
409
 
404
410
  export interface ChatInputRef {
@@ -17,11 +17,15 @@ import { Tag } from './tag'
17
17
  export type DashboardInfoCardPercentageDisplay = 'auto' | 'plain' | 'tag'
18
18
 
19
19
  /**
20
- * Size of the progress ring in px. A single number applies at all breakpoints;
21
- * `{ base, lg }` renders a `base`-sized ring below the `lg` breakpoint (e.g.
22
- * mobile) and an `lg`-sized ring from `lg` up.
20
+ * Size of the progress ring in px. A single number applies at all breakpoints.
21
+ * The responsive form sets `base` (mobile) plus optional `md` / `lg` overrides
22
+ * that take effect from the Tailwind `md` (768px) / `lg` (1024px) breakpoints
23
+ * up — e.g. `{ base: 24, md: 56 }` is 24px on mobile and 56px on tablet and
24
+ * desktop, while `{ base: 24, lg: 56 }` keeps the smaller ring through tablet.
23
25
  */
24
- export type DashboardInfoCardProgressSize = number | { base: number; lg: number }
26
+ export type DashboardInfoCardProgressSize =
27
+ | number
28
+ | { base: number; md?: number; lg?: number }
25
29
 
26
30
  export interface DashboardInfoCardProps {
27
31
  title?: string
@@ -45,8 +49,9 @@ export interface DashboardInfoCardProps {
45
49
  /**
46
50
  * Size of the circular progress ring. Defaults to `CircularProgress`'s own
47
51
  * default (56px) at all breakpoints. Pass a number for a fixed size, or
48
- * `{ base, lg }` for a responsive ring (e.g. `{ base: 24, lg: 56 }` to match
49
- * the Figma mobile spec). Stroke width scales proportionally with the size.
52
+ * `{ base, md?, lg? }` for a responsive ring (e.g. `{ base: 24, md: 56 }` for
53
+ * the Figma spec 24px on mobile, 56px on tablet and desktop). Stroke width
54
+ * scales proportionally with the size.
50
55
  */
51
56
  progressSize?: DashboardInfoCardProgressSize
52
57
  className?: string
@@ -129,21 +134,38 @@ export function DashboardInfoCard({
129
134
  return <CircularProgress {...common} size={progressSize} strokeWidth={strokeFor(progressSize)} />
130
135
  }
131
136
 
132
- // Responsive: smaller ring below `lg`, larger from `lg` up.
137
+ // Responsive: `base` (mobile) plus optional `md` / `lg` overrides. Each ring
138
+ // is toggled with Tailwind display utilities so only one shows per breakpoint.
139
+ // NOTE: the class names must stay static string literals — Tailwind's JIT
140
+ // scanner can't see dynamically-built names (e.g. `${bp}:hidden`).
141
+ const { base, md, lg } = progressSize
142
+
143
+ const rings: Array<{ key: string; size: number; className: string }> = []
144
+ if (md !== undefined && lg !== undefined) {
145
+ rings.push({ key: 'base', size: base, className: 'md:hidden' })
146
+ rings.push({ key: 'md', size: md, className: 'hidden md:block lg:hidden' })
147
+ rings.push({ key: 'lg', size: lg, className: 'hidden lg:block' })
148
+ } else if (md !== undefined) {
149
+ rings.push({ key: 'base', size: base, className: 'md:hidden' })
150
+ rings.push({ key: 'md', size: md, className: 'hidden md:block' })
151
+ } else if (lg !== undefined) {
152
+ rings.push({ key: 'base', size: base, className: 'lg:hidden' })
153
+ rings.push({ key: 'lg', size: lg, className: 'hidden lg:block' })
154
+ } else {
155
+ rings.push({ key: 'base', size: base, className: '' })
156
+ }
157
+
133
158
  return (
134
159
  <>
135
- <CircularProgress
136
- {...common}
137
- size={progressSize.base}
138
- strokeWidth={strokeFor(progressSize.base)}
139
- className="lg:hidden"
140
- />
141
- <CircularProgress
142
- {...common}
143
- size={progressSize.lg}
144
- strokeWidth={strokeFor(progressSize.lg)}
145
- className="hidden lg:block"
146
- />
160
+ {rings.map(ring => (
161
+ <CircularProgress
162
+ key={ring.key}
163
+ {...common}
164
+ size={ring.size}
165
+ strokeWidth={strokeFor(ring.size)}
166
+ className={ring.className}
167
+ />
168
+ ))}
147
169
  </>
148
170
  )
149
171
  }
@@ -30,7 +30,7 @@ const meta = {
30
30
  },
31
31
  progressSize: {
32
32
  control: { type: 'number' },
33
- description: 'Ring diameter in px (number), or `{ base, lg }` for a responsive ring. Default 56.',
33
+ description: 'Ring diameter in px (number), or `{ base, md?, lg? }` for a responsive ring. Default 56.',
34
34
  },
35
35
  href: { control: 'text', description: 'Navigation URL — renders as a Next.js Link with pointer cursor' },
36
36
  tooltip: { control: 'text', description: 'Tooltip content for the question-mark icon' },
@@ -276,7 +276,7 @@ export const DeviceStatusesOverview: Story = {
276
276
  showProgress
277
277
  progressVariant="success"
278
278
  percentageDisplay="plain"
279
- progressSize={{ base: 24, lg: 56 }}
279
+ progressSize={{ base: 24, md: 56 }}
280
280
  />
281
281
  <DashboardInfoCard
282
282
  title="Offline Devices"
@@ -285,7 +285,7 @@ export const DeviceStatusesOverview: Story = {
285
285
  showProgress
286
286
  progressVariant="error"
287
287
  percentageDisplay="plain"
288
- progressSize={{ base: 24, lg: 56 }}
288
+ progressSize={{ base: 24, md: 56 }}
289
289
  />
290
290
  <DashboardInfoCard
291
291
  title="Pending Devices"
@@ -294,7 +294,7 @@ export const DeviceStatusesOverview: Story = {
294
294
  showProgress
295
295
  progressVariant="warning"
296
296
  percentageDisplay="plain"
297
- progressSize={{ base: 24, lg: 56 }}
297
+ progressSize={{ base: 24, md: 56 }}
298
298
  />
299
299
  <DashboardInfoCard
300
300
  title="Archived Devices"
@@ -303,7 +303,7 @@ export const DeviceStatusesOverview: Story = {
303
303
  showProgress
304
304
  progressVariant="info"
305
305
  percentageDisplay="plain"
306
- progressSize={{ base: 24, lg: 56 }}
306
+ progressSize={{ base: 24, md: 56 }}
307
307
  />
308
308
  </div>
309
309
  ),
@@ -311,7 +311,7 @@ export const DeviceStatusesOverview: Story = {
311
311
  docs: {
312
312
  description: {
313
313
  story:
314
- 'Matches the Figma "Devices Overview" — green/red/amber/grey rings with neutral percentages via `percentageDisplay="plain"`, and a responsive ring (`progressSize={{ base: 24, lg: 56 }}`) that is 24px on mobile and 56px from the `lg` breakpoint up.',
314
+ 'Matches the Figma "Devices Overview" — green/red/amber/grey rings with neutral percentages via `percentageDisplay="plain"`, and a responsive ring (`progressSize={{ base: 24, md: 56 }}`) that is 24px on mobile and 56px on tablet and desktop (from the `md` breakpoint up).',
315
315
  },
316
316
  },
317
317
  },
@@ -320,7 +320,7 @@ export const DeviceStatusesOverview: Story = {
320
320
  /**
321
321
  * `progressSize` controls the ring diameter (stroke scales with it). Left: the
322
322
  * 24px mobile spec. Right: the 56px desktop default. In production pass
323
- * `progressSize={{ base: 24, lg: 56 }}` for the responsive switch.
323
+ * `progressSize={{ base: 24, md: 56 }}` for the responsive switch.
324
324
  */
325
325
  export const ProgressSizeComparison: Story = {
326
326
  render: () => (