@promptbook/templates 0.102.0-12 → 0.102.0-16

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.
@@ -34,6 +34,7 @@ import { CHAT_SAVE_FORMATS } from '../book-components/Chat/save/index';
34
34
  import { jsonSaveFormatDefinition } from '../book-components/Chat/save/json/jsonSaveFormatDefinition';
35
35
  import { mdSaveFormatDefinition } from '../book-components/Chat/save/markdown/mdSaveFormatDefinition';
36
36
  import { pdfSaveFormatDefinition } from '../book-components/Chat/save/pdf/pdfSaveFormatDefinition';
37
+ import { reactSaveFormatDefinition } from '../book-components/Chat/save/react/reactSaveFormatDefinition';
37
38
  import { txtSaveFormatDefinition } from '../book-components/Chat/save/text/txtSaveFormatDefinition';
38
39
  import type { ChatMessage } from '../book-components/Chat/types/ChatMessage';
39
40
  import type { ChatParticipant } from '../book-components/Chat/types/ChatParticipant';
@@ -87,6 +88,7 @@ export { CHAT_SAVE_FORMATS };
87
88
  export { jsonSaveFormatDefinition };
88
89
  export { mdSaveFormatDefinition };
89
90
  export { pdfSaveFormatDefinition };
91
+ export { reactSaveFormatDefinition };
90
92
  export { txtSaveFormatDefinition };
91
93
  export type { ChatMessage };
92
94
  export type { ChatParticipant };
@@ -68,6 +68,7 @@ import { deepClone } from '../utils/serialization/deepClone';
68
68
  import { exportJson } from '../utils/serialization/exportJson';
69
69
  import { isSerializableAsJson } from '../utils/serialization/isSerializableAsJson';
70
70
  import { jsonStringsToJsons } from '../utils/serialization/jsonStringsToJsons';
71
+ import { serializeToPromptbookJavascript } from '../utils/serialization/serializeToPromptbookJavascript';
71
72
  import { difference } from '../utils/sets/difference';
72
73
  import { intersection } from '../utils/sets/intersection';
73
74
  import { union } from '../utils/sets/union';
@@ -152,6 +153,7 @@ export { deepClone };
152
153
  export { exportJson };
153
154
  export { isSerializableAsJson };
154
155
  export { jsonStringsToJsons };
156
+ export { serializeToPromptbookJavascript };
155
157
  export { difference };
156
158
  export { intersection };
157
159
  export { union };
@@ -25,11 +25,15 @@ type ChatMessageItemProps = Pick<ChatProps, 'onMessage' | 'participants'> & {
25
25
  * Enables the feedback (rating) UI for this message bubble.
26
26
  */
27
27
  isFeedbackEnabled?: boolean;
28
+ /**
29
+ * Called when the copy button is pressed.
30
+ */
31
+ onCopy?: () => void;
28
32
  };
29
33
  /**
30
34
  * Renders a single chat message item with avatar, content, buttons, and rating.
31
35
  *
32
36
  * @private internal subcomponent of `<Chat>` component
33
37
  */
34
- export declare const ChatMessageItem: import("react").MemoExoticComponent<({ message, participant, participants, isLastMessage, onMessage, setExpandedMessageId, isExpanded, currentRating, handleRating, mode, isCopyButtonEnabled, isFeedbackEnabled, }: ChatMessageItemProps) => import("react/jsx-runtime").JSX.Element>;
38
+ export declare const ChatMessageItem: import("react").MemoExoticComponent<({ message, participant, participants, isLastMessage, onMessage, setExpandedMessageId, isExpanded, currentRating, handleRating, mode, isCopyButtonEnabled, isFeedbackEnabled, onCopy, }: ChatMessageItemProps) => import("react/jsx-runtime").JSX.Element>;
35
39
  export {};
@@ -12,6 +12,10 @@ export type ChatProps = {
12
12
  * If provided, renders the [Use this template] button.
13
13
  */
14
14
  onUseTemplate?(): void;
15
+ /**
16
+ * The title of the chat
17
+ */
18
+ readonly title: string;
15
19
  /**
16
20
  * Messages to render - they are rendered as they are
17
21
  */
@@ -1,13 +1,51 @@
1
+ import type { Promisable } from 'type-fest';
1
2
  import type { string_file_extension, string_mime_type } from '../../../../types/typeAliases';
2
3
  import type { ChatMessage } from '../../types/ChatMessage';
4
+ import { ChatParticipant } from '../../types/ChatParticipant';
3
5
  /**
4
6
  * Plugin contract for chat export formatNames
7
+ *
5
8
  * @public exported from `@promptbook/components`
6
9
  */
7
10
  export type ChatSaveFormatDefinition = {
8
- formatName: string_file_extension | string_mime_type | string;
9
- label: string;
10
- getContent: (messages: ChatMessage[]) => string;
11
- mimeType: string;
12
- fileExtension: string;
11
+ /**
12
+ * A unique name for the format (e.g. 'json', 'txt', 'md', 'html', 'pdf', etc.)
13
+ */
14
+ readonly formatName: string_file_extension | string_mime_type | string;
15
+ /**
16
+ * A human-readable label for the format (e.g. 'JSON', 'Plain Text', 'Markdown', 'HTML', 'PDF', etc.) shown in UI
17
+ */
18
+ readonly label: string;
19
+ /**
20
+ * MIME type (e.g. 'application/json', 'text/plain', 'text/markdown', 'text/html', 'application/pdf', etc.)
21
+ */
22
+ readonly mimeType: string;
23
+ /**
24
+ * File extension without leading dot (e.g. 'json', 'txt', 'md', 'html', 'pdf', etc.)
25
+ */
26
+ readonly fileExtension: string;
27
+ /**
28
+ * The function that generates the content of the file to be saved
29
+ */
30
+ getContent(chatExportData: ChatExportData): Promisable<string>;
13
31
  };
32
+ /**
33
+ * Plugin contract for the data passed to `ChatSaveFormatDefinition.getContent()`
34
+ *
35
+ * @public exported from `@promptbook/components`
36
+ */
37
+ type ChatExportData = {
38
+ /**
39
+ * The title of the chat (used for file naming, etc.)
40
+ */
41
+ readonly title: string;
42
+ /**
43
+ * The chat messages to be exported
44
+ */
45
+ readonly messages: ReadonlyArray<ChatMessage>;
46
+ /**
47
+ * The participants in the chat
48
+ */
49
+ readonly participants: ReadonlyArray<ChatParticipant>;
50
+ };
51
+ export {};
@@ -5,8 +5,12 @@
5
5
  */
6
6
  export declare const htmlSaveFormatDefinition: {
7
7
  readonly formatName: "html";
8
- readonly label: "HTML";
9
- readonly getContent: (messages: import("../../types/ChatMessage").ChatMessage[]) => string;
8
+ readonly label: "Html";
9
+ readonly getContent: ({ messages }: {
10
+ readonly title: string;
11
+ readonly messages: readonly import("../../types/ChatMessage").ChatMessage[];
12
+ readonly participants: readonly import("../../types/ChatParticipant").ChatParticipant[];
13
+ }) => string;
10
14
  readonly mimeType: "text/html";
11
15
  readonly fileExtension: "html";
12
16
  };
@@ -5,32 +5,62 @@
5
5
  */
6
6
  export declare const CHAT_SAVE_FORMATS: readonly [{
7
7
  readonly formatName: "json";
8
- readonly label: "JSON (full)";
9
- readonly getContent: (messages: import("../types/ChatMessage").ChatMessage[]) => string;
8
+ readonly label: "Json";
9
+ readonly getContent: ({ messages }: {
10
+ readonly title: string;
11
+ readonly messages: readonly import("../types/ChatMessage").ChatMessage[];
12
+ readonly participants: readonly import("../types/ChatParticipant").ChatParticipant[];
13
+ }) => string;
10
14
  readonly mimeType: "application/json";
11
15
  readonly fileExtension: "json";
12
16
  }, {
13
17
  readonly formatName: "txt";
14
18
  readonly label: "Plain Text";
15
- readonly getContent: (messages: import("../types/ChatMessage").ChatMessage[]) => string;
19
+ readonly getContent: ({ messages }: {
20
+ readonly title: string;
21
+ readonly messages: readonly import("../types/ChatMessage").ChatMessage[];
22
+ readonly participants: readonly import("../types/ChatParticipant").ChatParticipant[];
23
+ }) => string;
16
24
  readonly mimeType: "text/plain";
17
25
  readonly fileExtension: "txt";
18
26
  }, {
19
27
  readonly formatName: "md";
20
28
  readonly label: "Markdown";
21
- readonly getContent: (messages: import("../types/ChatMessage").ChatMessage[]) => string;
29
+ readonly getContent: ({ messages }: {
30
+ readonly title: string;
31
+ readonly messages: readonly import("../types/ChatMessage").ChatMessage[];
32
+ readonly participants: readonly import("../types/ChatParticipant").ChatParticipant[];
33
+ }) => string;
22
34
  readonly mimeType: "text/markdown";
23
35
  readonly fileExtension: "md";
24
36
  }, {
25
37
  readonly formatName: "html";
26
- readonly label: "HTML";
27
- readonly getContent: (messages: import("../types/ChatMessage").ChatMessage[]) => string;
38
+ readonly label: "Html";
39
+ readonly getContent: ({ messages }: {
40
+ readonly title: string;
41
+ readonly messages: readonly import("../types/ChatMessage").ChatMessage[];
42
+ readonly participants: readonly import("../types/ChatParticipant").ChatParticipant[];
43
+ }) => string;
28
44
  readonly mimeType: "text/html";
29
45
  readonly fileExtension: "html";
46
+ }, {
47
+ readonly formatName: "jsx";
48
+ readonly label: "React";
49
+ readonly getContent: (chatExportData: {
50
+ readonly title: string;
51
+ readonly messages: readonly import("../types/ChatMessage").ChatMessage[];
52
+ readonly participants: readonly import("../types/ChatParticipant").ChatParticipant[];
53
+ }) => string;
54
+ readonly mimeType: "application/javascript";
55
+ readonly fileExtension: "jsx";
30
56
  }, {
31
57
  readonly formatName: "pdf";
32
- readonly label: "PDF";
33
- readonly getContent: (messages: import("../types/ChatMessage").ChatMessage[]) => string;
58
+ readonly label: "Pdf";
59
+ readonly getContent: (chatExportData: {
60
+ readonly title: string;
61
+ readonly messages: readonly import("../types/ChatMessage").ChatMessage[];
62
+ readonly participants: readonly import("../types/ChatParticipant").ChatParticipant[];
63
+ }) => Promise<string>;
34
64
  readonly mimeType: "application/pdf";
35
65
  readonly fileExtension: "pdf";
36
66
  }];
@@ -5,8 +5,12 @@
5
5
  */
6
6
  export declare const jsonSaveFormatDefinition: {
7
7
  readonly formatName: "json";
8
- readonly label: "JSON (full)";
9
- readonly getContent: (messages: import("../../types/ChatMessage").ChatMessage[]) => string;
8
+ readonly label: "Json";
9
+ readonly getContent: ({ messages }: {
10
+ readonly title: string;
11
+ readonly messages: readonly import("../../types/ChatMessage").ChatMessage[];
12
+ readonly participants: readonly import("../../types/ChatParticipant").ChatParticipant[];
13
+ }) => string;
10
14
  readonly mimeType: "application/json";
11
15
  readonly fileExtension: "json";
12
16
  };
@@ -6,7 +6,11 @@
6
6
  export declare const mdSaveFormatDefinition: {
7
7
  readonly formatName: "md";
8
8
  readonly label: "Markdown";
9
- readonly getContent: (messages: import("../../types/ChatMessage").ChatMessage[]) => string;
9
+ readonly getContent: ({ messages }: {
10
+ readonly title: string;
11
+ readonly messages: readonly import("../../types/ChatMessage").ChatMessage[];
12
+ readonly participants: readonly import("../../types/ChatParticipant").ChatParticipant[];
13
+ }) => string;
10
14
  readonly mimeType: "text/markdown";
11
15
  readonly fileExtension: "md";
12
16
  };
@@ -5,8 +5,12 @@
5
5
  */
6
6
  export declare const pdfSaveFormatDefinition: {
7
7
  readonly formatName: "pdf";
8
- readonly label: "PDF";
9
- readonly getContent: (messages: import("../../types/ChatMessage").ChatMessage[]) => string;
8
+ readonly label: "Pdf";
9
+ readonly getContent: (chatExportData: {
10
+ readonly title: string;
11
+ readonly messages: readonly import("../../types/ChatMessage").ChatMessage[];
12
+ readonly participants: readonly import("../../types/ChatParticipant").ChatParticipant[];
13
+ }) => Promise<string>;
10
14
  readonly mimeType: "application/pdf";
11
15
  readonly fileExtension: "pdf";
12
16
  };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * React <jsx/> export plugin (full metadata)
3
+ *
4
+ * @public exported from `@promptbook/components`
5
+ */
6
+ export declare const reactSaveFormatDefinition: {
7
+ readonly formatName: "jsx";
8
+ readonly label: "React";
9
+ readonly getContent: (chatExportData: {
10
+ readonly title: string;
11
+ readonly messages: readonly import("../../types/ChatMessage").ChatMessage[];
12
+ readonly participants: readonly import("../../types/ChatParticipant").ChatParticipant[];
13
+ }) => string;
14
+ readonly mimeType: "application/javascript";
15
+ readonly fileExtension: "jsx";
16
+ };
@@ -6,7 +6,11 @@
6
6
  export declare const txtSaveFormatDefinition: {
7
7
  readonly formatName: "txt";
8
8
  readonly label: "Plain Text";
9
- readonly getContent: (messages: import("../../types/ChatMessage").ChatMessage[]) => string;
9
+ readonly getContent: ({ messages }: {
10
+ readonly title: string;
11
+ readonly messages: readonly import("../../types/ChatMessage").ChatMessage[];
12
+ readonly participants: readonly import("../../types/ChatParticipant").ChatParticipant[];
13
+ }) => string;
10
14
  readonly mimeType: "text/plain";
11
15
  readonly fileExtension: "txt";
12
16
  };
@@ -111,6 +111,13 @@ export declare class Color {
111
111
  * @return {value is WithTake<Color>} Returns true if the value is a valid Color object, false otherwise.
112
112
  */
113
113
  static isColor(value: unknown): value is WithTake<Color>;
114
+ /**
115
+ * Checks if the given value is a valid hex color string
116
+ *
117
+ * @param value - value to check
118
+ * @returns true if the value is a valid hex color string (e.g., `#009edd`, `#fff`, etc.)
119
+ */
120
+ static isHexColorString(value: unknown): value is string_color;
114
121
  /**
115
122
  * Creates new Color object
116
123
  *
@@ -0,0 +1,22 @@
1
+ import { string_javascript } from '../../types/typeAliases';
2
+ import { TODO_any } from '../organization/TODO_any';
3
+ type SerializeToPromptbookJavascriptReturn = {
4
+ /**
5
+ * Array of import statements required for the `value` to work
6
+ */
7
+ readonly imports: ReadonlyArray<string_javascript>;
8
+ /**
9
+ * The serialized value as a string of JavaScript code
10
+ */
11
+ readonly value: string_javascript;
12
+ };
13
+ /**
14
+ * Function `serializeToPromptbookJavascript` will serialize a value to a javascript representation using `@promptbook/*` entities where possible.
15
+ *
16
+ * @public exported from `@promptbook/utils`
17
+ */
18
+ export declare function serializeToPromptbookJavascript(value: TODO_any): SerializeToPromptbookJavascriptReturn;
19
+ export {};
20
+ /**
21
+ * TODO: Dynamic indentation passable through options in a second argument
22
+ */
@@ -15,7 +15,7 @@ export declare const BOOK_LANGUAGE_VERSION: string_semantic_version;
15
15
  export declare const PROMPTBOOK_ENGINE_VERSION: string_promptbook_version;
16
16
  /**
17
17
  * Represents the version string of the Promptbook engine.
18
- * It follows semantic versioning (e.g., `0.102.0-11`).
18
+ * It follows semantic versioning (e.g., `0.102.0-15`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/templates",
3
- "version": "0.102.0-12",
3
+ "version": "0.102.0-16",
4
4
  "description": "Promptbook: Run AI apps in plain human language across multiple models and platforms",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -95,7 +95,7 @@
95
95
  "module": "./esm/index.es.js",
96
96
  "typings": "./esm/typings/src/_packages/templates.index.d.ts",
97
97
  "peerDependencies": {
98
- "@promptbook/core": "0.102.0-12"
98
+ "@promptbook/core": "0.102.0-16"
99
99
  },
100
100
  "dependencies": {
101
101
  "spacetrim": "0.11.59"