@vinaverse/react-native 0.1.0-alpha.3 → 0.1.0-alpha.4

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/index.d.cts CHANGED
@@ -1,70 +1,10 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ComponentType, ReactElement, RefObject } from 'react';
3
- import { HeldCard, CardItem, Question, MessageItem, TimelineItem, SystemItem, ProposalOutcome, ConversationStore } from '@vinaverse/client/conversation';
2
+ import { ComponentType, ReactElement, ReactNode, RefObject } from 'react';
3
+ import { CardItem, MessageItem, Welcome as Welcome$1, TimelineItem, HeldCard, Question, SystemItem, ProposalOutcome, ConversationStore } from '@vinaverse/client/conversation';
4
4
  import { CopyOverrides } from '@vinaverse/react';
5
5
  import { ImageProps, StyleProp, ViewStyle } from 'react-native';
6
6
  import { ColorScheme, Colors, font, space, radius, motion, size } from '@vinaverse/tokens';
7
7
 
8
- declare function CardFrame(props: {
9
- readonly label: string;
10
- readonly restored?: boolean;
11
- readonly children?: ReactNode;
12
- readonly testID?: string;
13
- }): react.JSX.Element;
14
-
15
- interface CardProps {
16
- readonly card: HeldCard;
17
- /** A proposal being decided: draw its buttons busy. */
18
- readonly busy: boolean;
19
- /** Restored after a restart: draw it as it was, taking no answer or action. */
20
- readonly restored: boolean;
21
- /** The kit's own renderer for this kind, to wrap rather than rewrite. */
22
- readonly Default: ComponentType<Omit<CardProps, 'Default'>>;
23
- }
24
-
25
- /** The kit's own renderer for a kind. */
26
- declare function defaultCard(kind: string): ComponentType<Omit<CardProps, 'Default'>>;
27
- declare const CardView: react.NamedExoticComponent<{
28
- readonly item: CardItem;
29
- }>;
30
-
31
- declare function InfoCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
32
-
33
- declare function NextStepCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
34
-
35
- /** A field's value as text, by its type (`text`, `list`, `time_range`, `address`, `money_cents`). */
36
- declare function fieldText(type: string, value: unknown, locale: string | undefined, timeZone: string | undefined): string;
37
- declare function ProposalCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
38
-
39
- declare function QuestionCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
40
- /** A recorded answer, in words. */
41
- declare function answerText(question: Question, locale: string | undefined, otherLabel: string): string | null;
42
-
43
- declare function TimeSlotsCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
44
-
45
- declare const ActivityLine: react.NamedExoticComponent<object>;
46
-
47
- declare const Avatar: react.NamedExoticComponent<{
48
- readonly name: string;
49
- readonly uri: string | null;
50
- readonly person?: boolean;
51
- }>;
52
-
53
- interface ButtonProps {
54
- readonly label: string;
55
- readonly onPress: () => void;
56
- readonly variant?: 'primary' | 'secondary' | 'text';
57
- readonly disabled?: boolean;
58
- readonly busy?: boolean;
59
- /** A role other than a button: `radio` and `checkbox` for choices. */
60
- readonly role?: 'button' | 'radio' | 'checkbox' | 'link';
61
- readonly selected?: boolean;
62
- readonly hint?: string;
63
- readonly children?: ReactNode;
64
- readonly testID?: string;
65
- }
66
- declare const Button: react.NamedExoticComponent<ButtonProps>;
67
-
68
8
  interface HeaderProps {
69
9
  readonly name: string;
70
10
  readonly avatarUrl: string | null;
@@ -87,6 +27,14 @@ interface ComposerProps {
87
27
  }
88
28
  interface EmptyStateProps {
89
29
  readonly agentName: string;
30
+ /** The tenant's greeting and chips for the session's mode (`Session.welcome`), or null. */
31
+ readonly welcome: Welcome$1 | null;
32
+ /** Sends a chip's `message` as the person's own text. */
33
+ readonly onChip: (message: string) => void;
34
+ }
35
+ /** `components.CardGroup`: the cards one turn drew together with `group.layout: carousel`, in order. */
36
+ interface CardGroupProps {
37
+ readonly items: readonly CardItem[];
90
38
  }
91
39
  /** The props the kit gives its list: FlashList's, so FlashList or LegendList take them as they are. */
92
40
  interface ListProps {
@@ -132,6 +80,78 @@ interface FailureAction {
132
80
  readonly onPress: (state: FailureState) => void;
133
81
  }
134
82
 
83
+ declare function CardCarousel(props: CardGroupProps): react.JSX.Element;
84
+
85
+ declare function CardFrame(props: {
86
+ readonly label: string;
87
+ readonly restored?: boolean;
88
+ readonly children?: ReactNode;
89
+ readonly testID?: string;
90
+ }): react.JSX.Element;
91
+ /** A rating in millionths as the locale writes it, one decimal: 4.8, or 4,8 in Spanish and Portuguese. */
92
+ declare function ratingText(valuePpm: number, locale: string | undefined): string;
93
+
94
+ interface CardProps {
95
+ readonly card: HeldCard;
96
+ /** A proposal being decided: draw its buttons busy. */
97
+ readonly busy: boolean;
98
+ /** Restored after a restart: draw it as it was, taking no answer or action. */
99
+ readonly restored: boolean;
100
+ /** The kit's own renderer for this kind, to wrap rather than rewrite. */
101
+ readonly Default: ComponentType<Omit<CardProps, 'Default'>>;
102
+ }
103
+
104
+ /** The kit's own renderer for a kind. */
105
+ declare function defaultCard(kind: string): ComponentType<Omit<CardProps, 'Default'>>;
106
+ declare const CardView: react.NamedExoticComponent<{
107
+ readonly item: CardItem;
108
+ }>;
109
+
110
+ declare function InfoCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
111
+ /** A card's actions: a link that passes the deep-link rule opens the tenant's page, any other goes to the session. */
112
+ declare function CardActions(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
113
+
114
+ declare function LinksCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
115
+
116
+ declare function ListingCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
117
+ /** The first letters of the first two words: "Bell's Barber Lounge" is "BB". */
118
+ declare function monogram(title: string): string;
119
+
120
+ declare function NextStepCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
121
+
122
+ /** A field's value as text, by its type (`text`, `list`, `time_range`, `address`, `money_cents`). */
123
+ declare function fieldText(type: string, value: unknown, locale: string | undefined, timeZone: string | undefined): string;
124
+ declare function ProposalCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
125
+
126
+ declare function QuestionCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
127
+ /** A recorded answer, in words. */
128
+ declare function answerText(question: Question, locale: string | undefined, otherLabel: string): string | null;
129
+
130
+ declare function TimeSlotsCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
131
+
132
+ declare const ActivityLine: react.NamedExoticComponent<object>;
133
+
134
+ declare const Avatar: react.NamedExoticComponent<{
135
+ readonly name: string;
136
+ readonly uri: string | null;
137
+ readonly person?: boolean;
138
+ }>;
139
+
140
+ interface ButtonProps {
141
+ readonly label: string;
142
+ readonly onPress: () => void;
143
+ readonly variant?: 'primary' | 'secondary' | 'text';
144
+ readonly disabled?: boolean;
145
+ readonly busy?: boolean;
146
+ /** A role other than a button: `radio` and `checkbox` for choices. */
147
+ readonly role?: 'button' | 'radio' | 'checkbox' | 'link';
148
+ readonly selected?: boolean;
149
+ readonly hint?: string;
150
+ readonly children?: ReactNode;
151
+ readonly testID?: string;
152
+ }
153
+ declare const Button: react.NamedExoticComponent<ButtonProps>;
154
+
135
155
  declare function DefaultHeader(props: Omit<HeaderProps, 'Default'>): react.JSX.Element;
136
156
  declare const ChatHeader: react.NamedExoticComponent<object>;
137
157
 
@@ -163,9 +183,22 @@ declare const StreamingBubble: react.NamedExoticComponent<{
163
183
 
164
184
  /** Rows of one kind recycle together. */
165
185
  declare function itemType(item: TimelineItem): string;
186
+ /**
187
+ * Runs of two or more consecutive cards with one carousel group (`group.layout: carousel`, the same `group.id`): by
188
+ * the first card's key, and the keys of the cards the run draws after it. A run equal to the previous one is the
189
+ * same array, so its row does not render again.
190
+ */
191
+ declare function carousels(items: readonly TimelineItem[], previous: ReadonlyMap<string, readonly CardItem[]>): {
192
+ runs: Map<string, readonly CardItem[]>;
193
+ inside: Set<string>;
194
+ };
166
195
  declare const Row: react.NamedExoticComponent<{
167
196
  readonly item: TimelineItem;
168
197
  readonly showAuthor: boolean;
198
+ /** The carousel this card starts (`components.CardGroup`). */
199
+ readonly run?: readonly CardItem[] | undefined;
200
+ /** A card a carousel earlier in the list draws. */
201
+ readonly inside?: boolean;
169
202
  }>;
170
203
  declare const MessageList: react.NamedExoticComponent<object>;
171
204
 
@@ -191,7 +224,10 @@ interface ChatHandlers {
191
224
  * happened (`confirmed`, `declined`, `failed`, or `expired` when it had expired). The kit reports it to the session.
192
225
  */
193
226
  readonly onProposal?: (card: HeldCard, decision: ProposalDecision) => Promise<ProposalOutcome>;
194
- /** Open a card's link in your app (it already passed the deep-link rule); route by the page it names. */
227
+ /**
228
+ * Open a card's link in your app: a deep link that already passed the deep-link rule (route by the page it names),
229
+ * or a `links` card's https page (your in-app browser; without this handler the system opens it).
230
+ */
195
231
  readonly onOpenLink?: (link: string, card: HeldCard) => void;
196
232
  /** A card action without a link (`show_times`, …): sent to the session; this tells your app too. */
197
233
  readonly onCardAction?: (card: HeldCard, action: string) => void;
@@ -220,6 +256,11 @@ interface ChatSlots {
220
256
  readonly Error?: ComponentType<FailureProps>;
221
257
  /** No session to talk to: replaces the "Couldn't connect." banner. */
222
258
  readonly Unavailable?: ComponentType<FailureProps>;
259
+ /**
260
+ * Draws a turn's cards that ask for a carousel (`group.layout: carousel`) in one row: the kit's `CardCarousel`, or
261
+ * yours. Without it they draw one under another. Opt-in, so an app that never draws a carousel does not ship one.
262
+ */
263
+ readonly CardGroup?: ComponentType<CardGroupProps>;
223
264
  /** Card renderers by kind (`professional`, `proposal`, …). */
224
265
  readonly cards?: Readonly<Partial<Record<string, ComponentType<CardProps>>>>;
225
266
  }
@@ -300,6 +341,11 @@ declare function VinaverseChatProvider(props: Omit<VinaverseChatProps, 'hideHead
300
341
  }): ReactNode;
301
342
  declare function VinaverseChat(props: VinaverseChatProps): ReactNode;
302
343
 
344
+ declare const Welcome: react.NamedExoticComponent<{
345
+ readonly welcome: Welcome$1;
346
+ readonly onChip: (message: string) => void;
347
+ }>;
348
+
303
349
  /** The part of the conversation store the adapter drives. */
304
350
  interface LifecycleTarget {
305
351
  setForeground(foreground: boolean): void;
@@ -311,4 +357,4 @@ declare function useReducedMotion(): boolean;
311
357
  /** Reads a line to a screen reader, without moving focus. */
312
358
  declare function announce(text: string): void;
313
359
 
314
- export { ActivityLine, Avatar, Button, type ButtonProps, CardFrame, type CardProps, CardView, type ChatHandlers, ChatHeader, ChatSkeleton, type ChatSlots, type ColorSchemeSetting, Composer, type ComposerProps, DefaultBubble, DefaultComposer, DefaultHeader, DefaultTurnFailed, DefaultUnavailable, DisclosureBar, type EmptyStateProps, type FailureAction, FailureActionButton, type FailureProps, type FailureState, type HeaderProps, InfoCard, type LifecycleTarget, type ListProps, MessageBubble, type MessageBubbleProps, MessageList, NextStepCard, ProposalCard, type ProposalDecision, QuestionCard, Row, StatusBanner, StreamingBubble, SystemRow, type Theme, type ThemeOverrides, ThemeProvider, TimeSlotsCard, VinaverseChat, type VinaverseChatProps, VinaverseChatProvider, announce, answerText, createTheme, defaultCard, fieldText, itemType, themeProblems, useChat, useNativeLifecycle, useReducedMotion, useTheme };
360
+ export { ActivityLine, Avatar, Button, type ButtonProps, CardActions, CardCarousel, CardFrame, type CardGroupProps, type CardProps, CardView, type ChatHandlers, ChatHeader, ChatSkeleton, type ChatSlots, type ColorSchemeSetting, Composer, type ComposerProps, DefaultBubble, DefaultComposer, DefaultHeader, DefaultTurnFailed, DefaultUnavailable, DisclosureBar, type EmptyStateProps, type FailureAction, FailureActionButton, type FailureProps, type FailureState, type HeaderProps, InfoCard, type LifecycleTarget, LinksCard, type ListProps, ListingCard, MessageBubble, type MessageBubbleProps, MessageList, NextStepCard, ProposalCard, type ProposalDecision, QuestionCard, Row, StatusBanner, StreamingBubble, SystemRow, type Theme, type ThemeOverrides, ThemeProvider, TimeSlotsCard, VinaverseChat, type VinaverseChatProps, VinaverseChatProvider, Welcome, announce, answerText, carousels, createTheme, defaultCard, fieldText, itemType, monogram, ratingText, themeProblems, useChat, useNativeLifecycle, useReducedMotion, useTheme };
package/dist/index.d.ts CHANGED
@@ -1,70 +1,10 @@
1
1
  import * as react from 'react';
2
- import { ReactNode, ComponentType, ReactElement, RefObject } from 'react';
3
- import { HeldCard, CardItem, Question, MessageItem, TimelineItem, SystemItem, ProposalOutcome, ConversationStore } from '@vinaverse/client/conversation';
2
+ import { ComponentType, ReactElement, ReactNode, RefObject } from 'react';
3
+ import { CardItem, MessageItem, Welcome as Welcome$1, TimelineItem, HeldCard, Question, SystemItem, ProposalOutcome, ConversationStore } from '@vinaverse/client/conversation';
4
4
  import { CopyOverrides } from '@vinaverse/react';
5
5
  import { ImageProps, StyleProp, ViewStyle } from 'react-native';
6
6
  import { ColorScheme, Colors, font, space, radius, motion, size } from '@vinaverse/tokens';
7
7
 
8
- declare function CardFrame(props: {
9
- readonly label: string;
10
- readonly restored?: boolean;
11
- readonly children?: ReactNode;
12
- readonly testID?: string;
13
- }): react.JSX.Element;
14
-
15
- interface CardProps {
16
- readonly card: HeldCard;
17
- /** A proposal being decided: draw its buttons busy. */
18
- readonly busy: boolean;
19
- /** Restored after a restart: draw it as it was, taking no answer or action. */
20
- readonly restored: boolean;
21
- /** The kit's own renderer for this kind, to wrap rather than rewrite. */
22
- readonly Default: ComponentType<Omit<CardProps, 'Default'>>;
23
- }
24
-
25
- /** The kit's own renderer for a kind. */
26
- declare function defaultCard(kind: string): ComponentType<Omit<CardProps, 'Default'>>;
27
- declare const CardView: react.NamedExoticComponent<{
28
- readonly item: CardItem;
29
- }>;
30
-
31
- declare function InfoCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
32
-
33
- declare function NextStepCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
34
-
35
- /** A field's value as text, by its type (`text`, `list`, `time_range`, `address`, `money_cents`). */
36
- declare function fieldText(type: string, value: unknown, locale: string | undefined, timeZone: string | undefined): string;
37
- declare function ProposalCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
38
-
39
- declare function QuestionCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
40
- /** A recorded answer, in words. */
41
- declare function answerText(question: Question, locale: string | undefined, otherLabel: string): string | null;
42
-
43
- declare function TimeSlotsCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
44
-
45
- declare const ActivityLine: react.NamedExoticComponent<object>;
46
-
47
- declare const Avatar: react.NamedExoticComponent<{
48
- readonly name: string;
49
- readonly uri: string | null;
50
- readonly person?: boolean;
51
- }>;
52
-
53
- interface ButtonProps {
54
- readonly label: string;
55
- readonly onPress: () => void;
56
- readonly variant?: 'primary' | 'secondary' | 'text';
57
- readonly disabled?: boolean;
58
- readonly busy?: boolean;
59
- /** A role other than a button: `radio` and `checkbox` for choices. */
60
- readonly role?: 'button' | 'radio' | 'checkbox' | 'link';
61
- readonly selected?: boolean;
62
- readonly hint?: string;
63
- readonly children?: ReactNode;
64
- readonly testID?: string;
65
- }
66
- declare const Button: react.NamedExoticComponent<ButtonProps>;
67
-
68
8
  interface HeaderProps {
69
9
  readonly name: string;
70
10
  readonly avatarUrl: string | null;
@@ -87,6 +27,14 @@ interface ComposerProps {
87
27
  }
88
28
  interface EmptyStateProps {
89
29
  readonly agentName: string;
30
+ /** The tenant's greeting and chips for the session's mode (`Session.welcome`), or null. */
31
+ readonly welcome: Welcome$1 | null;
32
+ /** Sends a chip's `message` as the person's own text. */
33
+ readonly onChip: (message: string) => void;
34
+ }
35
+ /** `components.CardGroup`: the cards one turn drew together with `group.layout: carousel`, in order. */
36
+ interface CardGroupProps {
37
+ readonly items: readonly CardItem[];
90
38
  }
91
39
  /** The props the kit gives its list: FlashList's, so FlashList or LegendList take them as they are. */
92
40
  interface ListProps {
@@ -132,6 +80,78 @@ interface FailureAction {
132
80
  readonly onPress: (state: FailureState) => void;
133
81
  }
134
82
 
83
+ declare function CardCarousel(props: CardGroupProps): react.JSX.Element;
84
+
85
+ declare function CardFrame(props: {
86
+ readonly label: string;
87
+ readonly restored?: boolean;
88
+ readonly children?: ReactNode;
89
+ readonly testID?: string;
90
+ }): react.JSX.Element;
91
+ /** A rating in millionths as the locale writes it, one decimal: 4.8, or 4,8 in Spanish and Portuguese. */
92
+ declare function ratingText(valuePpm: number, locale: string | undefined): string;
93
+
94
+ interface CardProps {
95
+ readonly card: HeldCard;
96
+ /** A proposal being decided: draw its buttons busy. */
97
+ readonly busy: boolean;
98
+ /** Restored after a restart: draw it as it was, taking no answer or action. */
99
+ readonly restored: boolean;
100
+ /** The kit's own renderer for this kind, to wrap rather than rewrite. */
101
+ readonly Default: ComponentType<Omit<CardProps, 'Default'>>;
102
+ }
103
+
104
+ /** The kit's own renderer for a kind. */
105
+ declare function defaultCard(kind: string): ComponentType<Omit<CardProps, 'Default'>>;
106
+ declare const CardView: react.NamedExoticComponent<{
107
+ readonly item: CardItem;
108
+ }>;
109
+
110
+ declare function InfoCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
111
+ /** A card's actions: a link that passes the deep-link rule opens the tenant's page, any other goes to the session. */
112
+ declare function CardActions(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
113
+
114
+ declare function LinksCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
115
+
116
+ declare function ListingCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
117
+ /** The first letters of the first two words: "Bell's Barber Lounge" is "BB". */
118
+ declare function monogram(title: string): string;
119
+
120
+ declare function NextStepCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
121
+
122
+ /** A field's value as text, by its type (`text`, `list`, `time_range`, `address`, `money_cents`). */
123
+ declare function fieldText(type: string, value: unknown, locale: string | undefined, timeZone: string | undefined): string;
124
+ declare function ProposalCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
125
+
126
+ declare function QuestionCard(props: Omit<CardProps, 'Default'>): react.JSX.Element | null;
127
+ /** A recorded answer, in words. */
128
+ declare function answerText(question: Question, locale: string | undefined, otherLabel: string): string | null;
129
+
130
+ declare function TimeSlotsCard(props: Omit<CardProps, 'Default'>): react.JSX.Element;
131
+
132
+ declare const ActivityLine: react.NamedExoticComponent<object>;
133
+
134
+ declare const Avatar: react.NamedExoticComponent<{
135
+ readonly name: string;
136
+ readonly uri: string | null;
137
+ readonly person?: boolean;
138
+ }>;
139
+
140
+ interface ButtonProps {
141
+ readonly label: string;
142
+ readonly onPress: () => void;
143
+ readonly variant?: 'primary' | 'secondary' | 'text';
144
+ readonly disabled?: boolean;
145
+ readonly busy?: boolean;
146
+ /** A role other than a button: `radio` and `checkbox` for choices. */
147
+ readonly role?: 'button' | 'radio' | 'checkbox' | 'link';
148
+ readonly selected?: boolean;
149
+ readonly hint?: string;
150
+ readonly children?: ReactNode;
151
+ readonly testID?: string;
152
+ }
153
+ declare const Button: react.NamedExoticComponent<ButtonProps>;
154
+
135
155
  declare function DefaultHeader(props: Omit<HeaderProps, 'Default'>): react.JSX.Element;
136
156
  declare const ChatHeader: react.NamedExoticComponent<object>;
137
157
 
@@ -163,9 +183,22 @@ declare const StreamingBubble: react.NamedExoticComponent<{
163
183
 
164
184
  /** Rows of one kind recycle together. */
165
185
  declare function itemType(item: TimelineItem): string;
186
+ /**
187
+ * Runs of two or more consecutive cards with one carousel group (`group.layout: carousel`, the same `group.id`): by
188
+ * the first card's key, and the keys of the cards the run draws after it. A run equal to the previous one is the
189
+ * same array, so its row does not render again.
190
+ */
191
+ declare function carousels(items: readonly TimelineItem[], previous: ReadonlyMap<string, readonly CardItem[]>): {
192
+ runs: Map<string, readonly CardItem[]>;
193
+ inside: Set<string>;
194
+ };
166
195
  declare const Row: react.NamedExoticComponent<{
167
196
  readonly item: TimelineItem;
168
197
  readonly showAuthor: boolean;
198
+ /** The carousel this card starts (`components.CardGroup`). */
199
+ readonly run?: readonly CardItem[] | undefined;
200
+ /** A card a carousel earlier in the list draws. */
201
+ readonly inside?: boolean;
169
202
  }>;
170
203
  declare const MessageList: react.NamedExoticComponent<object>;
171
204
 
@@ -191,7 +224,10 @@ interface ChatHandlers {
191
224
  * happened (`confirmed`, `declined`, `failed`, or `expired` when it had expired). The kit reports it to the session.
192
225
  */
193
226
  readonly onProposal?: (card: HeldCard, decision: ProposalDecision) => Promise<ProposalOutcome>;
194
- /** Open a card's link in your app (it already passed the deep-link rule); route by the page it names. */
227
+ /**
228
+ * Open a card's link in your app: a deep link that already passed the deep-link rule (route by the page it names),
229
+ * or a `links` card's https page (your in-app browser; without this handler the system opens it).
230
+ */
195
231
  readonly onOpenLink?: (link: string, card: HeldCard) => void;
196
232
  /** A card action without a link (`show_times`, …): sent to the session; this tells your app too. */
197
233
  readonly onCardAction?: (card: HeldCard, action: string) => void;
@@ -220,6 +256,11 @@ interface ChatSlots {
220
256
  readonly Error?: ComponentType<FailureProps>;
221
257
  /** No session to talk to: replaces the "Couldn't connect." banner. */
222
258
  readonly Unavailable?: ComponentType<FailureProps>;
259
+ /**
260
+ * Draws a turn's cards that ask for a carousel (`group.layout: carousel`) in one row: the kit's `CardCarousel`, or
261
+ * yours. Without it they draw one under another. Opt-in, so an app that never draws a carousel does not ship one.
262
+ */
263
+ readonly CardGroup?: ComponentType<CardGroupProps>;
223
264
  /** Card renderers by kind (`professional`, `proposal`, …). */
224
265
  readonly cards?: Readonly<Partial<Record<string, ComponentType<CardProps>>>>;
225
266
  }
@@ -300,6 +341,11 @@ declare function VinaverseChatProvider(props: Omit<VinaverseChatProps, 'hideHead
300
341
  }): ReactNode;
301
342
  declare function VinaverseChat(props: VinaverseChatProps): ReactNode;
302
343
 
344
+ declare const Welcome: react.NamedExoticComponent<{
345
+ readonly welcome: Welcome$1;
346
+ readonly onChip: (message: string) => void;
347
+ }>;
348
+
303
349
  /** The part of the conversation store the adapter drives. */
304
350
  interface LifecycleTarget {
305
351
  setForeground(foreground: boolean): void;
@@ -311,4 +357,4 @@ declare function useReducedMotion(): boolean;
311
357
  /** Reads a line to a screen reader, without moving focus. */
312
358
  declare function announce(text: string): void;
313
359
 
314
- export { ActivityLine, Avatar, Button, type ButtonProps, CardFrame, type CardProps, CardView, type ChatHandlers, ChatHeader, ChatSkeleton, type ChatSlots, type ColorSchemeSetting, Composer, type ComposerProps, DefaultBubble, DefaultComposer, DefaultHeader, DefaultTurnFailed, DefaultUnavailable, DisclosureBar, type EmptyStateProps, type FailureAction, FailureActionButton, type FailureProps, type FailureState, type HeaderProps, InfoCard, type LifecycleTarget, type ListProps, MessageBubble, type MessageBubbleProps, MessageList, NextStepCard, ProposalCard, type ProposalDecision, QuestionCard, Row, StatusBanner, StreamingBubble, SystemRow, type Theme, type ThemeOverrides, ThemeProvider, TimeSlotsCard, VinaverseChat, type VinaverseChatProps, VinaverseChatProvider, announce, answerText, createTheme, defaultCard, fieldText, itemType, themeProblems, useChat, useNativeLifecycle, useReducedMotion, useTheme };
360
+ export { ActivityLine, Avatar, Button, type ButtonProps, CardActions, CardCarousel, CardFrame, type CardGroupProps, type CardProps, CardView, type ChatHandlers, ChatHeader, ChatSkeleton, type ChatSlots, type ColorSchemeSetting, Composer, type ComposerProps, DefaultBubble, DefaultComposer, DefaultHeader, DefaultTurnFailed, DefaultUnavailable, DisclosureBar, type EmptyStateProps, type FailureAction, FailureActionButton, type FailureProps, type FailureState, type HeaderProps, InfoCard, type LifecycleTarget, LinksCard, type ListProps, ListingCard, MessageBubble, type MessageBubbleProps, MessageList, NextStepCard, ProposalCard, type ProposalDecision, QuestionCard, Row, StatusBanner, StreamingBubble, SystemRow, type Theme, type ThemeOverrides, ThemeProvider, TimeSlotsCard, VinaverseChat, type VinaverseChatProps, VinaverseChatProvider, Welcome, announce, answerText, carousels, createTheme, defaultCard, fieldText, itemType, monogram, ratingText, themeProblems, useChat, useNativeLifecycle, useReducedMotion, useTheme };