@flamingo-stack/openframe-frontend-core 0.0.219 → 0.0.220-snapshot.20260602172647
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-F3FO2ZZZ.cjs → chunk-4PBV66HQ.cjs} +7 -7
- package/dist/{chunk-F3FO2ZZZ.cjs.map → chunk-4PBV66HQ.cjs.map} +1 -1
- package/dist/{chunk-EDW2NVRV.js → chunk-4WZOFD46.js} +37 -37
- package/dist/{chunk-EDW2NVRV.js.map → chunk-4WZOFD46.js.map} +1 -1
- package/dist/{chunk-YX3YQNC4.cjs → chunk-73YDB6AT.cjs} +13 -13
- package/dist/{chunk-YX3YQNC4.cjs.map → chunk-73YDB6AT.cjs.map} +1 -1
- package/dist/{chunk-MPHDM2VZ.cjs → chunk-7TQNW2AM.cjs} +30 -30
- package/dist/{chunk-MPHDM2VZ.cjs.map → chunk-7TQNW2AM.cjs.map} +1 -1
- package/dist/{chunk-65CPJ4SX.cjs → chunk-C6ASEPZL.cjs} +30 -30
- package/dist/{chunk-65CPJ4SX.cjs.map → chunk-C6ASEPZL.cjs.map} +1 -1
- package/dist/{chunk-DRPECAXO.js → chunk-CPIX5AAR.js} +2 -2
- package/dist/{chunk-SRA2QYK6.js → chunk-E2AWBQEU.js} +4 -4
- package/dist/{chunk-SZXKKEUH.cjs → chunk-E6B4B7GM.cjs} +46 -30
- package/dist/chunk-E6B4B7GM.cjs.map +1 -0
- package/dist/{chunk-XG7DFRJL.js → chunk-FOOQFRJR.js} +3 -3
- package/dist/{chunk-A3PL6ZCF.js → chunk-IS4IZC7N.js} +6388 -5128
- package/dist/chunk-IS4IZC7N.js.map +1 -0
- package/dist/{chunk-ZGBXHK26.cjs → chunk-JMGSJHFP.cjs} +12 -12
- package/dist/{chunk-ZGBXHK26.cjs.map → chunk-JMGSJHFP.cjs.map} +1 -1
- package/dist/{chunk-SL3RGBPX.cjs → chunk-QNYH3WUU.cjs} +9 -9
- package/dist/{chunk-SL3RGBPX.cjs.map → chunk-QNYH3WUU.cjs.map} +1 -1
- package/dist/{chunk-24Q2WLIU.js → chunk-QYRV6MKX.js} +2 -2
- package/dist/{chunk-ZII7TNVA.js → chunk-SRCEVQYA.js} +3 -3
- package/dist/{chunk-Y3MXGCOW.js → chunk-YZDUOUMB.js} +46 -30
- package/dist/chunk-YZDUOUMB.js.map +1 -0
- package/dist/{chunk-7UZLRI7W.cjs → chunk-ZAGQXSAP.cjs} +3292 -2032
- package/dist/chunk-ZAGQXSAP.cjs.map +1 -0
- package/dist/components/chat/chat-archive-page.d.ts +25 -0
- package/dist/components/chat/chat-archive-page.d.ts.map +1 -0
- package/dist/components/chat/chat-composer.d.ts +29 -0
- package/dist/components/chat/chat-composer.d.ts.map +1 -0
- package/dist/components/chat/chat-header-icon-button.d.ts +14 -0
- package/dist/components/chat/chat-header-icon-button.d.ts.map +1 -0
- package/dist/components/chat/chat-panel-header.d.ts +32 -0
- package/dist/components/chat/chat-panel-header.d.ts.map +1 -0
- package/dist/components/chat/embeddable-chat.d.ts +18 -0
- package/dist/components/chat/embeddable-chat.d.ts.map +1 -1
- package/dist/components/chat/guide-mode-banner.d.ts +16 -0
- package/dist/components/chat/guide-mode-banner.d.ts.map +1 -0
- package/dist/components/chat/guide-welcome.d.ts +42 -0
- package/dist/components/chat/guide-welcome.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-chat-dialog-manager.d.ts +58 -0
- package/dist/components/chat/hooks/use-chat-dialog-manager.d.ts.map +1 -0
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts +26 -1
- package/dist/components/chat/hooks/use-nats-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-sse-chat-adapter.d.ts.map +1 -1
- package/dist/components/chat/hooks/use-unified-chat.d.ts.map +1 -1
- package/dist/components/chat/index.cjs +29 -5
- package/dist/components/chat/index.cjs.map +1 -1
- package/dist/components/chat/index.d.ts +9 -0
- package/dist/components/chat/index.d.ts.map +1 -1
- package/dist/components/chat/index.js +28 -4
- package/dist/components/chat/mingo-chat-history.d.ts +37 -0
- package/dist/components/chat/mingo-chat-history.d.ts.map +1 -0
- package/dist/components/chat/mingo-chat-modals.d.ts +50 -0
- package/dist/components/chat/mingo-chat-modals.d.ts.map +1 -0
- package/dist/components/chat/mingo-onboarding-card.d.ts.map +1 -1
- package/dist/components/chat/mingo-welcome.d.ts +78 -0
- package/dist/components/chat/mingo-welcome.d.ts.map +1 -0
- package/dist/components/chat/types/unified-chat-state.types.d.ts +6 -0
- package/dist/components/chat/types/unified-chat-state.types.d.ts.map +1 -1
- package/dist/components/contact/index.cjs +6 -6
- package/dist/components/contact/index.js +5 -5
- package/dist/components/features/index.cjs +5 -5
- package/dist/components/features/index.js +4 -4
- package/dist/components/icons-v2-generated/brand-logos/fleet-mdm-logo-grey-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/brand-logos/fleet-mdm-logo-icon.d.ts.map +1 -1
- package/dist/components/icons-v2-generated/index.cjs +2 -2
- package/dist/components/icons-v2-generated/index.js +1 -1
- package/dist/components/index.cjs +128 -104
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.js +31 -7
- package/dist/components/index.js.map +1 -1
- package/dist/components/layout/page-heading.d.ts +7 -6
- package/dist/components/layout/page-heading.d.ts.map +1 -1
- package/dist/components/navigation/app-layout-drawer.d.ts.map +1 -1
- package/dist/components/navigation/header-mingo-button.d.ts +4 -2
- package/dist/components/navigation/header-mingo-button.d.ts.map +1 -1
- package/dist/components/navigation/index.cjs +5 -5
- package/dist/components/navigation/index.js +4 -4
- package/dist/components/onboarding-guides/index.cjs +28 -28
- package/dist/components/onboarding-guides/index.js +6 -6
- package/dist/components/tickets/index.cjs +88 -88
- package/dist/components/tickets/index.js +7 -7
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/components/ui/file-manager/index.cjs +50 -50
- package/dist/components/ui/file-manager/index.js +1 -1
- package/dist/components/ui/index.cjs +29 -5
- package/dist/components/ui/index.cjs.map +1 -1
- package/dist/components/ui/index.js +28 -4
- package/dist/components/ui/modal-v2.d.ts.map +1 -1
- package/dist/components/ui/more-actions-menu.d.ts +8 -1
- package/dist/components/ui/more-actions-menu.d.ts.map +1 -1
- package/dist/components/ui/portal-container.d.ts +21 -0
- package/dist/components/ui/portal-container.d.ts.map +1 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -1
- package/dist/hooks/index.cjs +3 -3
- package/dist/hooks/index.js +2 -2
- package/dist/index.cjs +29 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +28 -4
- package/package.json +1 -1
- package/src/components/chat/chat-archive-page.tsx +93 -0
- package/src/components/chat/chat-composer.tsx +99 -0
- package/src/components/chat/chat-header-icon-button.tsx +36 -0
- package/src/components/chat/chat-panel-header.tsx +114 -0
- package/src/components/chat/embeddable-chat.tsx +388 -311
- package/src/components/chat/guide-mode-banner.tsx +75 -0
- package/src/components/chat/guide-welcome.tsx +199 -0
- package/src/components/chat/hooks/use-chat-dialog-manager.ts +227 -0
- package/src/components/chat/hooks/use-nats-chat-adapter.ts +85 -0
- package/src/components/chat/hooks/use-sse-chat-adapter.ts +8 -0
- package/src/components/chat/hooks/use-unified-chat.ts +12 -0
- package/src/components/chat/index.ts +9 -0
- package/src/components/chat/mingo-chat-history.tsx +308 -0
- package/src/components/chat/mingo-chat-modals.tsx +223 -0
- package/src/components/chat/mingo-onboarding-card.tsx +5 -8
- package/src/components/chat/mingo-welcome.tsx +396 -0
- package/src/components/chat/types/unified-chat-state.types.ts +8 -0
- package/src/components/icons-v2/brand-logos/fleet-mdm-logo-grey.svg +6 -6
- package/src/components/icons-v2/brand-logos/fleet-mdm-logo.svg +6 -6
- package/src/components/icons-v2-generated/brand-logos/fleet-mdm-logo-grey-icon.tsx +2 -22
- package/src/components/icons-v2-generated/brand-logos/fleet-mdm-logo-icon.tsx +22 -2
- package/src/components/layout/page-heading.tsx +13 -7
- package/src/components/navigation/app-header.tsx +12 -12
- package/src/components/navigation/app-layout-drawer.tsx +25 -15
- package/src/components/navigation/header-mingo-button.tsx +22 -7
- package/src/components/ui/dropdown-menu.tsx +9 -3
- package/src/components/ui/modal-v2.tsx +33 -3
- package/src/components/ui/more-actions-menu.tsx +15 -2
- package/src/components/ui/portal-container.tsx +28 -0
- package/src/components/ui/tooltip.tsx +9 -3
- package/src/stories/AppLayoutSidebar.stories.tsx +184 -0
- package/src/stories/EmbeddableChat.stories.tsx +114 -0
- package/src/stories/GuideWelcome.stories.tsx +124 -0
- package/src/stories/MingoChatModals.stories.tsx +82 -0
- package/src/stories/MingoWelcome.stories.tsx +119 -0
- package/dist/chunk-7UZLRI7W.cjs.map +0 -1
- package/dist/chunk-A3PL6ZCF.js.map +0 -1
- package/dist/chunk-SZXKKEUH.cjs.map +0 -1
- package/dist/chunk-Y3MXGCOW.js.map +0 -1
- /package/dist/{chunk-DRPECAXO.js.map → chunk-CPIX5AAR.js.map} +0 -0
- /package/dist/{chunk-SRA2QYK6.js.map → chunk-E2AWBQEU.js.map} +0 -0
- /package/dist/{chunk-XG7DFRJL.js.map → chunk-FOOQFRJR.js.map} +0 -0
- /package/dist/{chunk-24Q2WLIU.js.map → chunk-QYRV6MKX.js.map} +0 -0
- /package/dist/{chunk-ZII7TNVA.js.map → chunk-SRCEVQYA.js.map} +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/nextjs-vite'
|
|
2
|
+
import { GuideWelcome } from '../components/chat/guide-welcome'
|
|
3
|
+
import { GuideModeBanner } from '../components/chat/guide-mode-banner'
|
|
4
|
+
import { MingoOnboardingCard } from '../components/chat/mingo-onboarding-card'
|
|
5
|
+
import {
|
|
6
|
+
Rocket01Icon,
|
|
7
|
+
CompassIcon,
|
|
8
|
+
NewspaperIcon,
|
|
9
|
+
} from '../components/icons-v2-generated'
|
|
10
|
+
|
|
11
|
+
const ACTIONS = [
|
|
12
|
+
{ id: 'recent', label: 'Recent', onClick: () => console.log('recent') },
|
|
13
|
+
{ id: 'search', label: 'Search', onClick: () => console.log('search') },
|
|
14
|
+
{ id: 'find', label: 'Find', onClick: () => console.log('find') },
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
// Quick actions are caller-provided (GuideWelcome ships no defaults); these
|
|
18
|
+
// demonstrate the inline chips + the "⋯" overflow menu.
|
|
19
|
+
const SAMPLE_QUICK_ACTIONS = [
|
|
20
|
+
{ id: 'how-to-start', label: 'How to start' },
|
|
21
|
+
{ id: 'connect-device', label: 'Connect device' },
|
|
22
|
+
{ id: 'find-device', label: 'Find device' },
|
|
23
|
+
{ id: 'remote-connection', label: 'Remote connection' },
|
|
24
|
+
{ id: 'run-scripts', label: 'Run scripts' },
|
|
25
|
+
{ id: 'device-software', label: 'Device software' },
|
|
26
|
+
{ id: 'bulk-update', label: 'Bulk update' },
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
const SAMPLE_LIST = (
|
|
30
|
+
<div className="shrink-0 overflow-hidden rounded-md border border-ods-border">
|
|
31
|
+
<MingoOnboardingCard
|
|
32
|
+
icon={<Rocket01Icon size={16} />}
|
|
33
|
+
title="Product Releases"
|
|
34
|
+
slashCommand="/release-notes"
|
|
35
|
+
description="OpenFrame version releases, changelogs, and update notes"
|
|
36
|
+
actions={ACTIONS}
|
|
37
|
+
/>
|
|
38
|
+
<MingoOnboardingCard
|
|
39
|
+
icon={<NewspaperIcon size={16} />}
|
|
40
|
+
title="Blog Posts"
|
|
41
|
+
slashCommand="/blogs"
|
|
42
|
+
description="Latest articles, guides, and announcements from the blog"
|
|
43
|
+
actions={ACTIONS}
|
|
44
|
+
/>
|
|
45
|
+
<MingoOnboardingCard
|
|
46
|
+
icon={<CompassIcon size={16} />}
|
|
47
|
+
title="Onboarding Guides"
|
|
48
|
+
slashCommand="/getting-started"
|
|
49
|
+
description="Step-by-step guides to get started with OpenFrame"
|
|
50
|
+
actions={ACTIONS}
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
const meta: Meta<typeof GuideWelcome> = {
|
|
56
|
+
title: 'Chat/GuideWelcome',
|
|
57
|
+
component: GuideWelcome,
|
|
58
|
+
parameters: {
|
|
59
|
+
layout: 'centered',
|
|
60
|
+
docs: {
|
|
61
|
+
description: {
|
|
62
|
+
component:
|
|
63
|
+
'Figma node `7532:328214`. Guide-mode chat empty state — a guide-mode banner, a centred greeting sharing one scroll region with the slash-command onboarding list, and a pinned quick-action chip row (overflowing to a "⋯" menu). Content is configurable with OpenFrame defaults.',
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
argTypes: {
|
|
68
|
+
title: { control: 'text' },
|
|
69
|
+
subtitle: { control: 'text' },
|
|
70
|
+
quickActions: { control: false },
|
|
71
|
+
onQuickAction: { control: false },
|
|
72
|
+
children: { control: false },
|
|
73
|
+
},
|
|
74
|
+
decorators: [
|
|
75
|
+
(Story) => (
|
|
76
|
+
// Mimic the narrow drawer panel: dark `ods-bg` surface (the guide content
|
|
77
|
+
// background), banner pinned at the top.
|
|
78
|
+
<div className="flex h-[760px] w-[440px] flex-col overflow-hidden rounded-md border border-ods-border bg-ods-bg">
|
|
79
|
+
<GuideModeBanner />
|
|
80
|
+
<div className="flex flex-1 min-h-0 flex-col p-4">
|
|
81
|
+
<Story />
|
|
82
|
+
</div>
|
|
83
|
+
</div>
|
|
84
|
+
),
|
|
85
|
+
],
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export default meta
|
|
89
|
+
type Story = StoryObj<typeof GuideWelcome>
|
|
90
|
+
|
|
91
|
+
/** Full guide-mode empty state with the slash-command list and quick actions. */
|
|
92
|
+
export const Default: Story = {
|
|
93
|
+
args: {
|
|
94
|
+
quickActions: SAMPLE_QUICK_ACTIONS,
|
|
95
|
+
onQuickAction: (a) => console.log('quick action', a.id),
|
|
96
|
+
children: SAMPLE_LIST,
|
|
97
|
+
},
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** No slash commands available yet — greeting + quick actions only. */
|
|
101
|
+
export const NoCommands: Story = {
|
|
102
|
+
args: {
|
|
103
|
+
quickActions: SAMPLE_QUICK_ACTIONS,
|
|
104
|
+
onQuickAction: (a) => console.log('quick action', a.id),
|
|
105
|
+
},
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/** No quick actions supplied (the default) — the chip row is omitted entirely. */
|
|
109
|
+
export const NoQuickActions: Story = {
|
|
110
|
+
args: {
|
|
111
|
+
children: SAMPLE_LIST,
|
|
112
|
+
},
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Custom greeting copy. */
|
|
116
|
+
export const CustomCopy: Story = {
|
|
117
|
+
args: {
|
|
118
|
+
title: 'Ask the Guide',
|
|
119
|
+
subtitle: 'A temporary session for exploring docs and tickets.',
|
|
120
|
+
quickActions: SAMPLE_QUICK_ACTIONS,
|
|
121
|
+
onQuickAction: (a) => console.log('quick action', a.id),
|
|
122
|
+
children: SAMPLE_LIST,
|
|
123
|
+
},
|
|
124
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/nextjs-vite'
|
|
2
|
+
import * as React from 'react'
|
|
3
|
+
import {
|
|
4
|
+
RenameChatModal,
|
|
5
|
+
ArchiveChatModal,
|
|
6
|
+
} from '../components/chat/mingo-chat-modals'
|
|
7
|
+
|
|
8
|
+
const meta: Meta = {
|
|
9
|
+
title: 'Chat/MingoChatModals',
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: 'fullscreen',
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component:
|
|
15
|
+
'Rename Chat (Figma `7592:225962`) and Archive Chat (Figma `7592:226181`) modals, triggered from the chat header `⋯` and the dialog-history row menus. Built on `ModalV2` (Azeret Mono title, p-40 / gap-24, in-house overlay).',
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
decorators: [
|
|
20
|
+
(Story) => (
|
|
21
|
+
<div className="min-h-[100dvh] bg-ods-bg">
|
|
22
|
+
<Story />
|
|
23
|
+
</div>
|
|
24
|
+
),
|
|
25
|
+
],
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export default meta
|
|
29
|
+
type Story = StoryObj
|
|
30
|
+
|
|
31
|
+
/** Rename Chat — input seeded with the current name, Cancel + Save. */
|
|
32
|
+
export const Rename: Story = {
|
|
33
|
+
render: () => {
|
|
34
|
+
const [open, setOpen] = React.useState(true)
|
|
35
|
+
return (
|
|
36
|
+
<>
|
|
37
|
+
<button
|
|
38
|
+
type="button"
|
|
39
|
+
className="m-8 rounded-md bg-ods-accent px-4 py-2 text-h3 text-ods-text-on-accent"
|
|
40
|
+
onClick={() => setOpen(true)}
|
|
41
|
+
>
|
|
42
|
+
Open Rename modal
|
|
43
|
+
</button>
|
|
44
|
+
<RenameChatModal
|
|
45
|
+
isOpen={open}
|
|
46
|
+
initialName="Troubleshooting Exchange Online connection issues"
|
|
47
|
+
onClose={() => setOpen(false)}
|
|
48
|
+
onSave={(name) => {
|
|
49
|
+
console.log('save', name)
|
|
50
|
+
setOpen(false)
|
|
51
|
+
}}
|
|
52
|
+
/>
|
|
53
|
+
</>
|
|
54
|
+
)
|
|
55
|
+
},
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/** Archive Chat — confirmation with a destructive red action. */
|
|
59
|
+
export const Archive: Story = {
|
|
60
|
+
render: () => {
|
|
61
|
+
const [open, setOpen] = React.useState(true)
|
|
62
|
+
return (
|
|
63
|
+
<>
|
|
64
|
+
<button
|
|
65
|
+
type="button"
|
|
66
|
+
className="m-8 rounded-md bg-ods-accent px-4 py-2 text-h3 text-ods-text-on-accent"
|
|
67
|
+
onClick={() => setOpen(true)}
|
|
68
|
+
>
|
|
69
|
+
Open Archive modal
|
|
70
|
+
</button>
|
|
71
|
+
<ArchiveChatModal
|
|
72
|
+
isOpen={open}
|
|
73
|
+
onClose={() => setOpen(false)}
|
|
74
|
+
onConfirm={() => {
|
|
75
|
+
console.log('archive confirmed')
|
|
76
|
+
setOpen(false)
|
|
77
|
+
}}
|
|
78
|
+
/>
|
|
79
|
+
</>
|
|
80
|
+
)
|
|
81
|
+
},
|
|
82
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/nextjs-vite'
|
|
2
|
+
import { MingoWelcome } from '../components/chat/mingo-welcome'
|
|
3
|
+
import { MingoChatHistory } from '../components/chat/mingo-chat-history'
|
|
4
|
+
|
|
5
|
+
const SAMPLE_HISTORY = (
|
|
6
|
+
<MingoChatHistory
|
|
7
|
+
dialogs={[
|
|
8
|
+
{ id: 'd1', title: 'PowerShell script for bulk user creation', unreadMessagesCount: 1 },
|
|
9
|
+
{ id: 'd2', title: 'Setting up automated backup verification', unreadMessagesCount: 1 },
|
|
10
|
+
{ id: 'd3', title: 'Network segmentation best practices for client' },
|
|
11
|
+
{ id: 'd4', title: 'Creating GPO for software deployment' },
|
|
12
|
+
{ id: 'd5', title: 'WSUS patching strategy optimization' },
|
|
13
|
+
{ id: 'd6', title: 'Analyzing unusual network traffic patterns' },
|
|
14
|
+
]}
|
|
15
|
+
onSelectDialog={(id) => console.log('select', id)}
|
|
16
|
+
onRequestRename={(d) => console.log('request rename', d.id)}
|
|
17
|
+
onRequestArchive={(d) => console.log('request archive', d.id)}
|
|
18
|
+
/>
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
const meta: Meta<typeof MingoWelcome> = {
|
|
22
|
+
title: 'Chat/MingoWelcome',
|
|
23
|
+
component: MingoWelcome,
|
|
24
|
+
parameters: {
|
|
25
|
+
layout: 'centered',
|
|
26
|
+
docs: {
|
|
27
|
+
description: {
|
|
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`).',
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
argTypes: {
|
|
34
|
+
title: { control: false },
|
|
35
|
+
subtitle: { control: false },
|
|
36
|
+
featureCards: { control: false },
|
|
37
|
+
promo: { control: false },
|
|
38
|
+
quickActions: { control: false },
|
|
39
|
+
onStartGuideChat: { control: false },
|
|
40
|
+
hasExistingChats: { control: 'boolean' },
|
|
41
|
+
},
|
|
42
|
+
decorators: [
|
|
43
|
+
(Story) => (
|
|
44
|
+
// Mimic the narrow drawer panel the empty state lives in: fixed height so
|
|
45
|
+
// the greeting's `flex-1` centring and the pinned grid/chips read
|
|
46
|
+
// correctly.
|
|
47
|
+
<div className="flex h-[760px] w-[440px] flex-col overflow-hidden rounded-md border border-ods-border bg-ods-bg px-5 py-4">
|
|
48
|
+
<Story />
|
|
49
|
+
</div>
|
|
50
|
+
),
|
|
51
|
+
],
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export default meta
|
|
55
|
+
type Story = StoryObj<typeof MingoWelcome>
|
|
56
|
+
|
|
57
|
+
/** Full default state with the Guide CTA wired (promo card + yellow chip). */
|
|
58
|
+
export const Default: Story = {
|
|
59
|
+
args: {
|
|
60
|
+
onStartGuideChat: () => console.log('switch to guide mode'),
|
|
61
|
+
},
|
|
62
|
+
}
|
|
63
|
+
|
|
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
|
+
/** Guide mode not configured → the promo card and "Start Guide Chat" chip are
|
|
73
|
+
* suppressed (no dead-end CTA). */
|
|
74
|
+
export const WithoutGuide: Story = {
|
|
75
|
+
args: {},
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/** Extra quick-action chips appended after the built-in Guide chip. */
|
|
79
|
+
export const WithQuickActions: Story = {
|
|
80
|
+
args: {
|
|
81
|
+
onStartGuideChat: () => console.log('switch to guide mode'),
|
|
82
|
+
quickActions: [
|
|
83
|
+
{ id: 'weekly', label: 'Weekly Log Summary' },
|
|
84
|
+
{ id: 'more', label: '…' },
|
|
85
|
+
],
|
|
86
|
+
},
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/** Returning user (`hasExistingChats`) — the "New to OpenFrame?" notification
|
|
90
|
+
* is hidden and the "Start Guide Chat" chip drops to the muted outline style. */
|
|
91
|
+
export const ReturningUser: Story = {
|
|
92
|
+
args: {
|
|
93
|
+
onStartGuideChat: () => console.log('switch to guide mode'),
|
|
94
|
+
hasExistingChats: true,
|
|
95
|
+
dialogHistory: SAMPLE_HISTORY,
|
|
96
|
+
quickActions: [
|
|
97
|
+
{ id: 'weekly', label: 'Weekly Log Summary' },
|
|
98
|
+
{ id: 'more', label: '…' },
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** Wide panel (e.g. in-layout / desktop) — the grid columns read roomy. */
|
|
104
|
+
export const Wide: Story = {
|
|
105
|
+
args: {
|
|
106
|
+
onStartGuideChat: () => console.log('switch to guide mode'),
|
|
107
|
+
quickActions: [
|
|
108
|
+
{ id: 'weekly', label: 'Weekly Log Summary' },
|
|
109
|
+
{ id: 'more', label: '…' },
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
decorators: [
|
|
113
|
+
(Story) => (
|
|
114
|
+
<div className="flex h-[760px] w-[960px] flex-col overflow-hidden rounded-md border border-ods-border bg-ods-bg px-5 py-4">
|
|
115
|
+
<Story />
|
|
116
|
+
</div>
|
|
117
|
+
),
|
|
118
|
+
],
|
|
119
|
+
}
|