@flamingo-stack/openframe-frontend-core 0.0.341 → 0.0.342-snapshot.20260630065631
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/{chunk-D2ETTYT2.cjs → chunk-27SVN4Z2.cjs} +26 -26
- package/dist/{chunk-D2ETTYT2.cjs.map → chunk-27SVN4Z2.cjs.map} +1 -1
- package/dist/{chunk-KT4KY6OF.js → chunk-3Y3LZ5IR.js} +4 -4
- package/dist/{chunk-4I46HAN5.js → chunk-4GVJ7WW6.js} +4 -4
- package/dist/{chunk-KE2QKKCN.js → chunk-5U6457XI.js} +2 -2
- package/dist/{chunk-QCREN5A5.cjs → chunk-6GNQY3PG.cjs} +56 -56
- package/dist/{chunk-QCREN5A5.cjs.map → chunk-6GNQY3PG.cjs.map} +1 -1
- package/dist/{chunk-Y2WHQSF6.js → chunk-74C4EFJE.js} +2 -2
- package/dist/{chunk-N3GFEIWF.js → chunk-7EUFJBIA.js} +2 -2
- package/dist/{chunk-R3MVYKEL.cjs → chunk-7HE7VIZP.cjs} +62 -62
- package/dist/{chunk-R3MVYKEL.cjs.map → chunk-7HE7VIZP.cjs.map} +1 -1
- package/dist/{chunk-CUQGK4AD.js → chunk-DBE7RART.js} +2 -2
- package/dist/{chunk-GCYEJLOQ.js → chunk-DGJT6GWA.js} +2 -2
- package/dist/{chunk-NIIN3UH4.cjs → chunk-DJ24O2BR.cjs} +37 -37
- package/dist/{chunk-NIIN3UH4.cjs.map → chunk-DJ24O2BR.cjs.map} +1 -1
- package/dist/{chunk-AZ3DTQU5.js → chunk-DOSYUPZS.js} +67 -40
- package/dist/chunk-DOSYUPZS.js.map +1 -0
- package/dist/{chunk-CJB4NUD6.cjs → chunk-DQU4MFQI.cjs} +7 -7
- package/dist/{chunk-CJB4NUD6.cjs.map → chunk-DQU4MFQI.cjs.map} +1 -1
- package/dist/{chunk-I4BWBQXX.cjs → chunk-FNJKJV5T.cjs} +31 -31
- package/dist/{chunk-I4BWBQXX.cjs.map → chunk-FNJKJV5T.cjs.map} +1 -1
- package/dist/{chunk-QYF6LEDF.js → chunk-IANIU6SO.js} +2 -2
- package/dist/{chunk-BYAXSMET.cjs → chunk-JYIFLOAQ.cjs} +15 -15
- package/dist/{chunk-BYAXSMET.cjs.map → chunk-JYIFLOAQ.cjs.map} +1 -1
- package/dist/{chunk-I3CNFZOY.cjs → chunk-OWMOMMEC.cjs} +67 -40
- package/dist/chunk-OWMOMMEC.cjs.map +1 -0
- package/dist/{chunk-A37AW6CD.cjs → chunk-Q6Y6FETD.cjs} +5 -5
- package/dist/{chunk-A37AW6CD.cjs.map → chunk-Q6Y6FETD.cjs.map} +1 -1
- package/dist/{chunk-2GROEWOK.js → chunk-TTRL5L5B.js} +4 -4
- package/dist/{chunk-OLR534KB.js → chunk-VYWPGALC.js} +2 -2
- package/dist/{chunk-OGTHMZIL.cjs → chunk-XLNSQ5ER.cjs} +9 -9
- package/dist/{chunk-OGTHMZIL.cjs.map → chunk-XLNSQ5ER.cjs.map} +1 -1
- package/dist/{chunk-LANAE7MY.cjs → chunk-XTR3DBCO.cjs} +12 -12
- package/dist/{chunk-LANAE7MY.cjs.map → chunk-XTR3DBCO.cjs.map} +1 -1
- package/dist/{chunk-EPVDWAVJ.js → chunk-YECKAUHG.js} +4 -4
- package/dist/{chunk-EYPZ2XLX.cjs → chunk-ZJNSS6KV.cjs} +25 -25
- package/dist/{chunk-EYPZ2XLX.cjs.map → chunk-ZJNSS6KV.cjs.map} +1 -1
- package/dist/components/case-studies/index.cjs +8 -8
- package/dist/components/case-studies/index.js +2 -2
- package/dist/components/chat/chat-composer.d.ts +4 -1
- package/dist/components/chat/chat-composer.d.ts.map +1 -1
- package/dist/components/chat/chat-input.d.ts.map +1 -1
- package/dist/components/chat/chat-quick-action-row.d.ts +6 -1
- package/dist/components/chat/chat-quick-action-row.d.ts.map +1 -1
- package/dist/components/chat/guide-welcome.d.ts +5 -5
- package/dist/components/chat/guide-welcome.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +2 -2
- package/dist/components/chat/index.js +1 -1
- package/dist/components/chat/types/component.types.d.ts +6 -0
- package/dist/components/chat/types/component.types.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +3 -3
- package/dist/components/contact/index.js +2 -2
- package/dist/components/docs/index.cjs +5 -5
- package/dist/components/docs/index.js +4 -4
- package/dist/components/embeds/index.cjs +3 -3
- package/dist/components/embeds/index.js +2 -2
- package/dist/components/faq/index.cjs +3 -3
- package/dist/components/faq/index.js +2 -2
- package/dist/components/features/index.cjs +2 -2
- package/dist/components/features/index.js +1 -1
- package/dist/components/help-center-pages/index.cjs +20 -20
- package/dist/components/help-center-pages/index.js +11 -11
- package/dist/components/index.cjs +121 -121
- package/dist/components/index.js +9 -9
- package/dist/components/navigation/index.cjs +2 -2
- package/dist/components/navigation/index.js +1 -1
- package/dist/components/onboarding-guides/index.cjs +5 -5
- package/dist/components/onboarding-guides/index.js +4 -4
- package/dist/components/related-content/index.cjs +3 -3
- package/dist/components/related-content/index.js +2 -2
- package/dist/components/tickets/index.cjs +5 -5
- package/dist/components/tickets/index.js +4 -4
- package/dist/components/ui/dashboard-info-card.d.ts +10 -6
- package/dist/components/ui/dashboard-info-card.d.ts.map +1 -1
- package/dist/components/ui/index.cjs +2 -2
- package/dist/components/ui/index.js +1 -1
- package/dist/index.cjs +2 -2
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/components/chat/chat-composer.tsx +5 -0
- package/src/components/chat/chat-input.tsx +39 -1
- package/src/components/chat/chat-quick-action-row.tsx +20 -0
- package/src/components/chat/embeddable-chat.tsx +21 -23
- package/src/components/chat/guide-welcome.tsx +21 -11
- package/src/components/chat/types/component.types.ts +6 -0
- package/src/components/ui/dashboard-info-card.tsx +41 -19
- package/src/stories/DashboardInfoCard.stories.tsx +7 -7
- package/dist/chunk-AZ3DTQU5.js.map +0 -1
- package/dist/chunk-I3CNFZOY.cjs.map +0 -1
- /package/dist/{chunk-KT4KY6OF.js.map → chunk-3Y3LZ5IR.js.map} +0 -0
- /package/dist/{chunk-4I46HAN5.js.map → chunk-4GVJ7WW6.js.map} +0 -0
- /package/dist/{chunk-KE2QKKCN.js.map → chunk-5U6457XI.js.map} +0 -0
- /package/dist/{chunk-Y2WHQSF6.js.map → chunk-74C4EFJE.js.map} +0 -0
- /package/dist/{chunk-N3GFEIWF.js.map → chunk-7EUFJBIA.js.map} +0 -0
- /package/dist/{chunk-CUQGK4AD.js.map → chunk-DBE7RART.js.map} +0 -0
- /package/dist/{chunk-GCYEJLOQ.js.map → chunk-DGJT6GWA.js.map} +0 -0
- /package/dist/{chunk-QYF6LEDF.js.map → chunk-IANIU6SO.js.map} +0 -0
- /package/dist/{chunk-2GROEWOK.js.map → chunk-TTRL5L5B.js.map} +0 -0
- /package/dist/{chunk-OLR534KB.js.map → chunk-VYWPGALC.js.map} +0 -0
- /package/dist/{chunk-EPVDWAVJ.js.map → chunk-YECKAUHG.js.map} +0 -0
|
@@ -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.
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
*
|
|
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
|
|
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
|
|
109
|
-
//
|
|
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
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
-
*
|
|
22
|
-
*
|
|
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 =
|
|
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,
|
|
49
|
-
* the Figma
|
|
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:
|
|
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
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
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,
|
|
323
|
+
* `progressSize={{ base: 24, md: 56 }}` for the responsive switch.
|
|
324
324
|
*/
|
|
325
325
|
export const ProgressSizeComparison: Story = {
|
|
326
326
|
render: () => (
|