@nomosui/react 0.6.0 → 0.8.0
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/SKILL.md +30 -3
- package/dist/index.js +1547 -756
- package/dist/mcp/bin.js +1404 -823
- package/dist/types/components/composer/composer.d.ts +27 -0
- package/dist/types/components/composer/manifest.d.ts +6 -0
- package/dist/types/components/conversation/conversation.d.ts +20 -0
- package/dist/types/components/conversation/manifest.d.ts +6 -0
- package/dist/types/components/field/field.d.ts +18 -2
- package/dist/types/components/input/input.d.ts +2 -1
- package/dist/types/components/message/manifest.d.ts +6 -0
- package/dist/types/components/message/message.d.ts +26 -0
- package/dist/types/components/textarea/textarea.d.ts +5 -2
- package/dist/types/components/timeline/timeline.d.ts +15 -1
- package/dist/types/components/typing-indicator/manifest.d.ts +6 -0
- package/dist/types/components/typing-indicator/typing-indicator.d.ts +12 -0
- package/dist/types/composites/index.d.ts +19 -0
- package/dist/types/features/chat/index.d.ts +3 -0
- package/dist/types/features/chat/types.d.ts +94 -0
- package/dist/types/features/chat/use-chat-thread.d.ts +30 -0
- package/dist/types/index.d.ts +17 -0
- package/package.json +2 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Le composeur d'un message (ADR 0032) : une zone de saisie qui grandit, `Entrée` envoie,
|
|
3
|
+
* `Maj+Entrée` passe à la ligne, et la garde IME protège les compositions en cours. Le
|
|
4
|
+
* cœur est **piloté par props** (valeur + `onChange`), comme un contrôle de formulaire : il
|
|
5
|
+
* ne possède aucun état (ADR 0015). Les libellés viennent de l'app.
|
|
6
|
+
*/
|
|
7
|
+
export type ComposerProps = {
|
|
8
|
+
/** La valeur courante, possédée par l'app. */
|
|
9
|
+
value: string;
|
|
10
|
+
/** Appelé à chaque frappe avec la nouvelle valeur. */
|
|
11
|
+
onChange?: (value: string) => void;
|
|
12
|
+
/** Appelé sur `Entrée` ou au clic sur l'action d'envoi. */
|
|
13
|
+
onSubmit?: () => void;
|
|
14
|
+
/** Appelé au clic sur l'action d'arrêt, quand une réponse est en cours. */
|
|
15
|
+
onStop?: () => void;
|
|
16
|
+
/** Une réponse est en cours : l'action devient « arrêter ». */
|
|
17
|
+
busy?: boolean;
|
|
18
|
+
/** Le texte indicatif de la zone de saisie. */
|
|
19
|
+
placeholder: string;
|
|
20
|
+
/** Le libellé accessible de l'action d'envoi. */
|
|
21
|
+
sendLabel: string;
|
|
22
|
+
/** Le libellé accessible de l'action d'arrêt. */
|
|
23
|
+
stopLabel: string;
|
|
24
|
+
/** Les classes de l'appelant, fusionnées après celles du cœur. */
|
|
25
|
+
className?: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function Composer({ value, onChange, onSubmit, onStop, busy, placeholder, sendLabel, stopLabel, className, }: ComposerProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ComponentManifest } from '../../catalogue/contract';
|
|
2
|
+
/**
|
|
3
|
+
* Le manifeste du composeur (ADR 0005, 0032). Contrôlé par props, sans état : l'app
|
|
4
|
+
* possède la valeur, le cœur la mise en forme et la garde clavier.
|
|
5
|
+
*/
|
|
6
|
+
export declare const composerManifest: ComponentManifest;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* La fenêtre d'une conversation (ADR 0032) : une région `log` vivante, ancrée en bas.
|
|
4
|
+
* Le cœur possède le défilement (rester au bas quand un message arrive, revenir au bas à
|
|
5
|
+
* la demande) ; l'app fournit le contenu et l'état vide. Aucune hauteur propre : l'app la
|
|
6
|
+
* pose par `className`.
|
|
7
|
+
*/
|
|
8
|
+
export type ConversationProps = {
|
|
9
|
+
/** Les messages, fournis par l'app. */
|
|
10
|
+
children?: ReactNode;
|
|
11
|
+
/** Ce qu'on montre tant qu'il n'y a rien, injecté par l'app. */
|
|
12
|
+
empty?: ReactNode;
|
|
13
|
+
/** Le nom accessible de la région de conversation. */
|
|
14
|
+
label?: string;
|
|
15
|
+
/** Le libellé du bouton « revenir en bas » ; absent, le bouton n'apparaît pas. */
|
|
16
|
+
scrollToBottomLabel?: string;
|
|
17
|
+
/** Les classes de l'appelant, fusionnées après celles du cœur. */
|
|
18
|
+
className?: string;
|
|
19
|
+
};
|
|
20
|
+
export declare function Conversation({ children, empty, label, scrollToBottomLabel, className, }: ConversationProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ComponentManifest } from '../../catalogue/contract';
|
|
2
|
+
/**
|
|
3
|
+
* Le manifeste de la fenêtre de conversation (ADR 0005, 0032). Le cœur possède le
|
|
4
|
+
* défilement et la région `log` ; l'app le contenu, l'état vide et la hauteur.
|
|
5
|
+
*/
|
|
6
|
+
export declare const conversationManifest: ComponentManifest;
|
|
@@ -1,8 +1,24 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Les attributs que `Field` pose sur son contrôle : `aria-describedby` vers l'aide ou
|
|
4
|
+
* l'erreur, `aria-invalid` en erreur. Le contrôle les consomme : la valeur du `Field`
|
|
5
|
+
* l'emporte sur celle de l'appelant pour `aria-invalid`, et l'appelant garde son propre
|
|
6
|
+
* `aria-describedby`, tenu à côté de celui du `Field`.
|
|
7
|
+
*/
|
|
8
|
+
export type FieldControlAria = {
|
|
9
|
+
'aria-describedby'?: string;
|
|
10
|
+
'aria-invalid'?: boolean;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Ce que le contrôle d'un `Field` reçoit : vide hors d'un `Field`, donc un contrôle
|
|
14
|
+
* reste testable seul, sans provider (ADR 0015).
|
|
15
|
+
*/
|
|
16
|
+
export declare function useFieldControl(): FieldControlAria;
|
|
2
17
|
/**
|
|
3
18
|
* L'emplacement d'un champ : le libellé, le contrôle (fourni par l'appelant) et, dessous,
|
|
4
19
|
* soit le message d'erreur, soit l'aide. **Aucun moteur** : l'app décide de l'état, de la
|
|
5
|
-
* validation et du texte (ADR 0015). Le cœur ne fait que disposer
|
|
20
|
+
* validation et du texte (ADR 0015). Le cœur ne fait que disposer — mais il porte
|
|
21
|
+
* l'association ARIA entre le contrôle et son message.
|
|
6
22
|
*/
|
|
7
23
|
export type FieldProps = {
|
|
8
24
|
label?: ReactNode;
|
|
@@ -2,5 +2,6 @@ import type { ComponentProps } from 'react';
|
|
|
2
2
|
/**
|
|
3
3
|
* Le champ de saisie du cœur : un `<input>` stylé par les tokens. Il n'impose aucune
|
|
4
4
|
* validation ni aucun état d'app — l'appelant passe ses props HTML et ses classes.
|
|
5
|
+
* Dans un `Field`, il exprime l'erreur (`aria-invalid`, `aria-describedby`).
|
|
5
6
|
*/
|
|
6
|
-
export declare function Input({ className, type, ...props }: ComponentProps<'input'>): import("react").JSX.Element;
|
|
7
|
+
export declare function Input({ className, type, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, ...props }: ComponentProps<'input'>): import("react").JSX.Element;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ComponentManifest } from '../../catalogue/contract';
|
|
2
|
+
/**
|
|
3
|
+
* Le manifeste du message (ADR 0005, 0032). Le cœur possède le placement et le ton ;
|
|
4
|
+
* le contenu arrive en **parts**, et `renderPart` laisse l'app décider du rendu.
|
|
5
|
+
*/
|
|
6
|
+
export declare const messageManifest: ComponentManifest;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { ChatPart, ChatRole } from '../../features/chat/types';
|
|
3
|
+
/**
|
|
4
|
+
* Un message d'une conversation (ADR 0032) : un rôle, une suite ordonnée de **parts**, et
|
|
5
|
+
* des emplacements injectés (avatar, actions, horodatage). Le placement (aligné à droite
|
|
6
|
+
* pour l'utilisateur, à gauche sinon) et le ton viennent du cœur ; le **contenu** vient
|
|
7
|
+
* de l'app, part par part. `renderPart` prime sur le rendu par défaut : markdown,
|
|
8
|
+
* coloration, artefact métier restent côté app (ADR 0002).
|
|
9
|
+
*/
|
|
10
|
+
export type MessageProps = {
|
|
11
|
+
/** Qui parle : décide de l'alignement et du ton. */
|
|
12
|
+
role: ChatRole;
|
|
13
|
+
/** Les fragments de contenu, dans l'ordre. */
|
|
14
|
+
parts: ChatPart[];
|
|
15
|
+
/** Le rendu d'une part, fourni par l'app ; absent, le cœur rend un défaut neutre. */
|
|
16
|
+
renderPart?: (part: ChatPart) => ReactNode;
|
|
17
|
+
/** L'avatar, injecté par l'app. */
|
|
18
|
+
avatar?: ReactNode;
|
|
19
|
+
/** Les actions du message (copier, réessayer), injectées par l'app. */
|
|
20
|
+
actions?: ReactNode;
|
|
21
|
+
/** L'horodatage déjà formaté, injecté par l'app. */
|
|
22
|
+
timestamp?: ReactNode;
|
|
23
|
+
/** Les classes de l'appelant, fusionnées après celles du cœur. */
|
|
24
|
+
className?: string;
|
|
25
|
+
};
|
|
26
|
+
export declare function Message({ role, parts, renderPart, avatar, actions, timestamp, className, }: MessageProps): import("react").JSX.Element;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
import type { ComponentProps } from 'react';
|
|
2
|
-
/**
|
|
3
|
-
|
|
2
|
+
/**
|
|
3
|
+
* Un champ de saisie multiligne, stylé par les tokens. Rien d'autre que les props HTML —
|
|
4
|
+
* plus, dans un `Field`, l'association ARIA avec le message d'erreur ou d'aide.
|
|
5
|
+
*/
|
|
6
|
+
export declare function Textarea({ className, 'aria-describedby': ariaDescribedBy, 'aria-invalid': ariaInvalid, ...props }: ComponentProps<'textarea'>): import("react").JSX.Element;
|
|
@@ -4,16 +4,30 @@ import type { HTMLAttributes } from 'react';
|
|
|
4
4
|
* Présentation seule — l'ordre, le format de `at` et le texte viennent de l'appelant.
|
|
5
5
|
* Aucune donnée d'app, aucun état.
|
|
6
6
|
*/
|
|
7
|
-
|
|
7
|
+
type TimelineItemBase = {
|
|
8
8
|
id: string;
|
|
9
9
|
/** La date/l'heure déjà formatée, fournie par l'appelant. */
|
|
10
10
|
at: string;
|
|
11
11
|
label: string;
|
|
12
12
|
detail?: string;
|
|
13
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* L'état du point est une **intention** (`done` par défaut, `past` grisé), comme le
|
|
16
|
+
* `tone` d'`Alert` — pas une couleur. La couleur seule ne suffit pas (WCAG) : un point
|
|
17
|
+
* `past` porte obligatoirement `stateLabel`, le texte accessible fourni par l'app (le
|
|
18
|
+
* cœur n'a pas d'i18n).
|
|
19
|
+
*/
|
|
20
|
+
export type TimelineItem = TimelineItemBase & ({
|
|
21
|
+
state?: 'done';
|
|
22
|
+
stateLabel?: string;
|
|
23
|
+
} | {
|
|
24
|
+
state: 'past';
|
|
25
|
+
stateLabel: string;
|
|
26
|
+
});
|
|
14
27
|
export type TimelineProps = HTMLAttributes<HTMLOListElement> & {
|
|
15
28
|
items: TimelineItem[];
|
|
16
29
|
/** Le nom accessible de la frise ; le cœur n'a pas d'i18n. */
|
|
17
30
|
ariaLabel?: string;
|
|
18
31
|
};
|
|
19
32
|
export declare function Timeline({ items, ariaLabel, className, ...props }: TimelineProps): import("react").JSX.Element;
|
|
33
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ComponentManifest } from '../../catalogue/contract';
|
|
2
|
+
/**
|
|
3
|
+
* Le manifeste de l'indicateur de frappe (ADR 0005). Une brique de présentation seule :
|
|
4
|
+
* le libellé vient de l'app, le cœur ne porte aucun mot.
|
|
5
|
+
*/
|
|
6
|
+
export declare const typingIndicatorManifest: ComponentManifest;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* L'indicateur de frappe : trois points qui attendent la réponse de l'assistant. Le
|
|
3
|
+
* libellé est injecté (l'app le traduit) et porté par une région `status` vivante — le
|
|
4
|
+
* cœur n'invente aucun mot (ADR 0015, 0032).
|
|
5
|
+
*/
|
|
6
|
+
export type TypingIndicatorProps = {
|
|
7
|
+
/** Le texte accessible annoncé par le lecteur d'écran. */
|
|
8
|
+
label: string;
|
|
9
|
+
/** Les classes de l'appelant, fusionnées après celles du cœur. */
|
|
10
|
+
className?: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function TypingIndicator({ label, className }: TypingIndicatorProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ReactElement } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Les **scènes composites** (ADR 0019) : plusieurs briques du catalogue assemblées en une
|
|
4
|
+
* vue qui a du sens pour un agent — un formulaire complet, une carte de statut. Elles ne
|
|
5
|
+
* sont pas au catalogue des composants : ce sont des **rendus**, servis comme vues MCP
|
|
6
|
+
* Apps (`ui://nomos/composite/<nom>`) et exposés sur la surface publique JS (ADR 0031).
|
|
7
|
+
* Aucune n'écrit ni ne possède d'état, et leurs défauts sont neutres : la copie se
|
|
8
|
+
* **injecte par props** (ADR 0002).
|
|
9
|
+
*/
|
|
10
|
+
export type Composite = {
|
|
11
|
+
name: string;
|
|
12
|
+
title: string;
|
|
13
|
+
summary: string;
|
|
14
|
+
/** Rend la scène pour des données propres à la scène (ADR 0023) ; sans données, son rendu par défaut. */
|
|
15
|
+
render: (props?: Record<string, unknown>) => ReactElement;
|
|
16
|
+
};
|
|
17
|
+
export declare const composites: Composite[];
|
|
18
|
+
export declare const compositeNames: string[];
|
|
19
|
+
export declare function findComposite(name: string): Composite;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { useChatThread } from './use-chat-thread';
|
|
2
|
+
export type { ChatThread, UseChatThreadOptions } from './use-chat-thread';
|
|
3
|
+
export type { ChatDelta, ChatLabels, ChatMessage, ChatMessageStatus, ChatPart, ChatRole, ChatSendInput, ChatStatus, ChatTransport, } from './types';
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Le contrat d'une conversation, côté cœur (ADR 0032).
|
|
3
|
+
*
|
|
4
|
+
* Le cœur **structure** la conversation et possède sa machine à états ; il ne possède
|
|
5
|
+
* ni le transport, ni l'appel au modèle, ni la persistance, ni l'erreur (ADR 0018).
|
|
6
|
+
* L'app injecte un `ChatTransport` — une seule fonction `send` — et le cœur l'ignore :
|
|
7
|
+
* une edge function, un pipeline, un mock local sont la même couture.
|
|
8
|
+
*
|
|
9
|
+
* Un message porte des **parts**, pas une chaîne : un signal structuré (« le brouillon
|
|
10
|
+
* est prêt », un artefact d'extraction, un résultat d'outil) est une part de premier
|
|
11
|
+
* ordre que la surface rend, jamais un sentinelle pêchée dans la prose.
|
|
12
|
+
*/
|
|
13
|
+
/** Qui parle. `tool` porte le résultat d'un outil, pas un tour de conversation. */
|
|
14
|
+
export type ChatRole = 'user' | 'assistant' | 'system' | 'tool';
|
|
15
|
+
/** Un fragment de contenu d'un message. */
|
|
16
|
+
export type ChatPart = {
|
|
17
|
+
type: 'text';
|
|
18
|
+
text: string;
|
|
19
|
+
} | {
|
|
20
|
+
type: 'reasoning';
|
|
21
|
+
text: string;
|
|
22
|
+
state?: 'streaming' | 'done';
|
|
23
|
+
} | {
|
|
24
|
+
type: 'tool';
|
|
25
|
+
name: string;
|
|
26
|
+
state: 'pending' | 'running' | 'success' | 'error';
|
|
27
|
+
input?: unknown;
|
|
28
|
+
output?: unknown;
|
|
29
|
+
/** Le libellé affiché ; absent, l'app décide quoi montrer du `name`. */
|
|
30
|
+
label?: string;
|
|
31
|
+
} | {
|
|
32
|
+
type: 'data';
|
|
33
|
+
name: string;
|
|
34
|
+
payload: unknown;
|
|
35
|
+
};
|
|
36
|
+
/** L'état d'un message : `streaming` tant que des deltas arrivent, `done` sinon. */
|
|
37
|
+
export type ChatMessageStatus = 'streaming' | 'done' | 'error';
|
|
38
|
+
/** Un message : un rôle et une suite ordonnée de parts, jamais une chaîne seule. */
|
|
39
|
+
export type ChatMessage = {
|
|
40
|
+
id: string;
|
|
41
|
+
role: ChatRole;
|
|
42
|
+
parts: ChatPart[];
|
|
43
|
+
status?: ChatMessageStatus;
|
|
44
|
+
/** Format l'app : ISO ou epoch, le cœur ne l'interprète pas (il ne l'affiche pas). */
|
|
45
|
+
createdAt?: string | number;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Un incrément de réponse. Le transport est **streaming-ready** (ADR 0032) : un
|
|
49
|
+
* transport par requête/réponse rend un unique `message`, un transport qui streame
|
|
50
|
+
* rend des `text-delta` et des `part` que le contrôleur assemble.
|
|
51
|
+
*/
|
|
52
|
+
export type ChatDelta = {
|
|
53
|
+
kind: 'text-delta';
|
|
54
|
+
text: string;
|
|
55
|
+
} | {
|
|
56
|
+
kind: 'part';
|
|
57
|
+
part: ChatPart;
|
|
58
|
+
} | {
|
|
59
|
+
kind: 'message';
|
|
60
|
+
message: ChatMessage;
|
|
61
|
+
} | {
|
|
62
|
+
kind: 'error';
|
|
63
|
+
error: string;
|
|
64
|
+
};
|
|
65
|
+
/** Ce qu'un envoi reçoit : le texte de l'utilisateur et le signal d'annulation. */
|
|
66
|
+
export type ChatSendInput = {
|
|
67
|
+
text: string;
|
|
68
|
+
signal: AbortSignal;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* La couture unique que l'app fournit. `send` rend un flux de deltas **ou** un message
|
|
72
|
+
* complet ; le contrôleur normalise les deux. Le cœur n'appelle jamais de modèle, ne
|
|
73
|
+
* connaît aucun endpoint et ne voit aucune erreur réseau (ADR 0018).
|
|
74
|
+
*/
|
|
75
|
+
export type ChatTransport = {
|
|
76
|
+
send: (input: ChatSendInput) => AsyncIterable<ChatDelta> | Promise<ChatMessage>;
|
|
77
|
+
};
|
|
78
|
+
/** L'état de la conversation, du point de vue de la surface. */
|
|
79
|
+
export type ChatStatus = 'idle' | 'submitted' | 'streaming' | 'error';
|
|
80
|
+
/**
|
|
81
|
+
* Les libellés et textes accessibles, tous injectés par l'app : le cœur n'invente aucun
|
|
82
|
+
* mot (ADR 0015). `roleNames` nomme les rôles pour les lecteurs d'écran.
|
|
83
|
+
*/
|
|
84
|
+
export type ChatLabels = {
|
|
85
|
+
composerPlaceholder: string;
|
|
86
|
+
send: string;
|
|
87
|
+
stop: string;
|
|
88
|
+
retry: string;
|
|
89
|
+
regenerate: string;
|
|
90
|
+
empty: string;
|
|
91
|
+
scrollToBottom: string;
|
|
92
|
+
typing: string;
|
|
93
|
+
roleNames?: Partial<Record<ChatRole, string>>;
|
|
94
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ChatMessage, ChatStatus, ChatTransport } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* Le contrôleur d'un fil de conversation : l'analogue de `FacetedDataTable` pour le chat
|
|
4
|
+
* (ADR 0032). Il possède la **machine à états** — ajout optimiste du tour utilisateur,
|
|
5
|
+
* assemblage des deltas, annulation, réessai, erreur — et **rien du transport** : l'app
|
|
6
|
+
* injecte un `ChatTransport`, le cœur l'ignore (ADR 0018).
|
|
7
|
+
*
|
|
8
|
+
* Sans dépendance, testable seul : le transport d'un test est une fonction asynchrone.
|
|
9
|
+
*/
|
|
10
|
+
export type UseChatThreadOptions = {
|
|
11
|
+
transport: ChatTransport;
|
|
12
|
+
/** Les messages déjà connus (reprise d'un fil côté serveur, par exemple). */
|
|
13
|
+
initialMessages?: ChatMessage[];
|
|
14
|
+
};
|
|
15
|
+
export type ChatThread = {
|
|
16
|
+
messages: ChatMessage[];
|
|
17
|
+
status: ChatStatus;
|
|
18
|
+
error: string | null;
|
|
19
|
+
/** Envoie le tour de l'utilisateur et assemble la réponse. Ignore un texte vide. */
|
|
20
|
+
send: (text: string) => void;
|
|
21
|
+
/** Annule la réponse en cours ; la part déjà reçue reste. */
|
|
22
|
+
stop: () => void;
|
|
23
|
+
/** Relance le dernier tour de l'utilisateur (après une erreur). */
|
|
24
|
+
retry: () => void;
|
|
25
|
+
/** Relance le dernier tour de l'utilisateur en écartant la réponse précédente. */
|
|
26
|
+
regenerate: () => void;
|
|
27
|
+
/** Remplace le fil entier (reprise, navigation entre conversations). */
|
|
28
|
+
replace: (messages: ChatMessage[]) => void;
|
|
29
|
+
};
|
|
30
|
+
export declare function useChatThread({ transport, initialMessages, }: UseChatThreadOptions): ChatThread;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -134,6 +134,9 @@ export type { ToastProps } from './components/toast/toast';
|
|
|
134
134
|
export { toastManifest } from './components/toast/manifest';
|
|
135
135
|
export { ToastProvider, useToast } from './features/toast';
|
|
136
136
|
export type { ToastApi, ToastOptions } from './features/toast';
|
|
137
|
+
export { useChatThread } from './features/chat';
|
|
138
|
+
export type { ChatThread, UseChatThreadOptions } from './features/chat';
|
|
139
|
+
export type { ChatDelta, ChatLabels, ChatMessage, ChatMessageStatus, ChatPart, ChatRole, ChatSendInput, ChatStatus, ChatTransport, } from './features/chat';
|
|
137
140
|
export { SelectionTree, Tree } from './components/tree/tree';
|
|
138
141
|
export type { SelectionTreeProps, TreeProps, TreeNode } from './components/tree/tree';
|
|
139
142
|
export { treeManifest } from './components/tree/manifest';
|
|
@@ -149,10 +152,24 @@ export { ratingManifest } from './components/rating/manifest';
|
|
|
149
152
|
export { Timeline } from './components/timeline/timeline';
|
|
150
153
|
export type { TimelineItem, TimelineProps } from './components/timeline/timeline';
|
|
151
154
|
export { timelineManifest } from './components/timeline/manifest';
|
|
155
|
+
export { Conversation } from './components/conversation/conversation';
|
|
156
|
+
export type { ConversationProps } from './components/conversation/conversation';
|
|
157
|
+
export { conversationManifest } from './components/conversation/manifest';
|
|
158
|
+
export { Message } from './components/message/message';
|
|
159
|
+
export type { MessageProps } from './components/message/message';
|
|
160
|
+
export { messageManifest } from './components/message/manifest';
|
|
161
|
+
export { Composer } from './components/composer/composer';
|
|
162
|
+
export type { ComposerProps } from './components/composer/composer';
|
|
163
|
+
export { composerManifest } from './components/composer/manifest';
|
|
164
|
+
export { TypingIndicator } from './components/typing-indicator/typing-indicator';
|
|
165
|
+
export type { TypingIndicatorProps } from './components/typing-indicator/typing-indicator';
|
|
166
|
+
export { typingIndicatorManifest } from './components/typing-indicator/manifest';
|
|
152
167
|
export { catalogue, componentNames, findComponent, validateCatalogue } from './catalogue/registry';
|
|
153
168
|
export type { CatalogueEntry } from './catalogue/registry';
|
|
154
169
|
export { componentManifestSchema } from './catalogue/contract';
|
|
155
170
|
export type { ComponentManifest, ComponentProp, ComponentUsage, ComponentVariant, } from './catalogue/contract';
|
|
171
|
+
export { composites, compositeNames, findComposite } from './composites';
|
|
172
|
+
export type { Composite } from './composites';
|
|
156
173
|
export { cn } from './lib/cn';
|
|
157
174
|
export { TONES, toneClasses } from './lib/tone';
|
|
158
175
|
export type { Tone } from './lib/tone';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nomosui/react",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.8.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "An app-agnostic design system, built in public: a core of tokens and components exposed to humans and agents.",
|
|
7
7
|
"repository": {
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
"build:package": "node scripts/build-package.mjs",
|
|
52
52
|
"prepublishOnly": "npm run build:package",
|
|
53
53
|
"smoke:consumer": "node scripts/smoke-consumer.mjs",
|
|
54
|
+
"dev:preview": "NOMOS_LOCAL=1 npm --prefix site run dev -- --port 5177 --open /chat.html",
|
|
54
55
|
"changeset": "changeset",
|
|
55
56
|
"release": "changeset publish"
|
|
56
57
|
},
|