@promptbook/vercel 0.103.0-3 → 0.103.0-31

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.
Files changed (89) hide show
  1. package/README.md +6 -207
  2. package/esm/index.es.js +23 -5
  3. package/esm/index.es.js.map +1 -1
  4. package/esm/typings/src/_packages/browser.index.d.ts +6 -0
  5. package/esm/typings/src/_packages/cli.index.d.ts +4 -0
  6. package/esm/typings/src/_packages/components.index.d.ts +12 -8
  7. package/esm/typings/src/_packages/core.index.d.ts +10 -0
  8. package/esm/typings/src/_packages/types.index.d.ts +10 -0
  9. package/esm/typings/src/_packages/wizard.index.d.ts +4 -0
  10. package/esm/typings/src/book-2.0/agent-source/padBook.d.ts +16 -0
  11. package/esm/typings/src/book-components/BookEditor/BookEditor.d.ts +76 -15
  12. package/esm/typings/src/book-components/BookEditor/BookEditorActionbar.d.ts +14 -0
  13. package/esm/typings/src/book-components/BookEditor/BookEditorMonaco.d.ts +5 -0
  14. package/esm/typings/src/book-components/Chat/MarkdownContent/MarkdownContent.d.ts +15 -0
  15. package/esm/typings/src/book-components/Chat/MockedChat/MockedChat.d.ts +5 -0
  16. package/esm/typings/src/book-components/Qr/BrandedQrCode.d.ts +18 -0
  17. package/esm/typings/src/book-components/Qr/GenericQrCode.d.ts +10 -0
  18. package/esm/typings/src/book-components/Qr/PromptbookQrCode.d.ts +18 -0
  19. package/esm/typings/src/book-components/Qr/useQrCode.d.ts +15 -0
  20. package/esm/typings/src/book-components/_common/Dropdown/Dropdown.d.ts +15 -0
  21. package/esm/typings/src/book-components/_common/Modal/Modal.d.ts +4 -1
  22. package/esm/typings/src/book-components/_common/react-utils/classNames.d.ts +1 -1
  23. package/esm/typings/src/book-components/icons/AboutIcon.d.ts +9 -0
  24. package/esm/typings/src/book-components/icons/CloseIcon.d.ts +4 -8
  25. package/esm/typings/src/book-components/icons/DownloadIcon.d.ts +9 -0
  26. package/esm/typings/src/book-components/icons/ExitFullscreenIcon.d.ts +7 -0
  27. package/esm/typings/src/book-components/icons/FullscreenIcon.d.ts +7 -0
  28. package/esm/typings/src/book-components/icons/MenuIcon.d.ts +12 -0
  29. package/esm/typings/src/cli/cli-commands/_boilerplate.d.ts +2 -1
  30. package/esm/typings/src/cli/cli-commands/about.d.ts +3 -1
  31. package/esm/typings/src/cli/cli-commands/hello.d.ts +2 -1
  32. package/esm/typings/src/cli/cli-commands/list-models.d.ts +2 -1
  33. package/esm/typings/src/cli/cli-commands/list-scrapers.d.ts +2 -1
  34. package/esm/typings/src/cli/cli-commands/login.d.ts +2 -1
  35. package/esm/typings/src/cli/cli-commands/make.d.ts +2 -1
  36. package/esm/typings/src/cli/cli-commands/prettify.d.ts +2 -1
  37. package/esm/typings/src/cli/cli-commands/run.d.ts +2 -1
  38. package/esm/typings/src/cli/cli-commands/start-server.d.ts +3 -1
  39. package/esm/typings/src/cli/cli-commands/test-command.d.ts +2 -1
  40. package/esm/typings/src/cli/common/$addGlobalOptionsToCommand.d.ts +2 -1
  41. package/esm/typings/src/commands/_common/types/CommandParser.d.ts +4 -5
  42. package/esm/typings/src/config.d.ts +14 -1
  43. package/esm/typings/src/execution/utils/usage-constants.d.ts +4 -124
  44. package/esm/typings/src/high-level-abstractions/_common/HighLevelAbstraction.d.ts +2 -1
  45. package/esm/typings/src/llm-providers/_common/register/$registeredLlmToolsMessage.d.ts +2 -1
  46. package/esm/typings/src/remote-server/startRemoteServer.d.ts +1 -0
  47. package/esm/typings/src/scrapers/_boilerplate/createBoilerplateScraper.d.ts +1 -12
  48. package/esm/typings/src/scrapers/_boilerplate/register-metadata.d.ts +1 -9
  49. package/esm/typings/src/scrapers/document/createDocumentScraper.d.ts +1 -12
  50. package/esm/typings/src/scrapers/document/register-metadata.d.ts +1 -9
  51. package/esm/typings/src/scrapers/document-legacy/createLegacyDocumentScraper.d.ts +1 -12
  52. package/esm/typings/src/scrapers/document-legacy/register-metadata.d.ts +1 -9
  53. package/esm/typings/src/scrapers/markdown/createMarkdownScraper.d.ts +1 -12
  54. package/esm/typings/src/scrapers/markdown/register-metadata.d.ts +1 -9
  55. package/esm/typings/src/scrapers/markitdown/createMarkitdownScraper.d.ts +1 -12
  56. package/esm/typings/src/scrapers/markitdown/register-metadata.d.ts +1 -9
  57. package/esm/typings/src/scrapers/pdf/createPdfScraper.d.ts +1 -12
  58. package/esm/typings/src/scrapers/pdf/register-metadata.d.ts +1 -9
  59. package/esm/typings/src/scrapers/website/createWebsiteScraper.d.ts +1 -12
  60. package/esm/typings/src/scrapers/website/register-metadata.d.ts +1 -9
  61. package/esm/typings/src/storage/env-storage/$EnvStorage.d.ts +2 -1
  62. package/esm/typings/src/transpilers/_common/BookTranspiler.d.ts +19 -0
  63. package/esm/typings/src/transpilers/_common/BookTranspilerDefinition.d.ts +37 -0
  64. package/esm/typings/src/transpilers/_common/BookTranspilerOptions.d.ts +19 -0
  65. package/esm/typings/src/transpilers/_common/register/$bookTranspilersRegister.d.ts +15 -0
  66. package/esm/typings/src/transpilers/langchain/LangchainTranspiler.d.ts +7 -0
  67. package/esm/typings/src/transpilers/langchain/register.d.ts +15 -0
  68. package/esm/typings/src/transpilers/openai/OpenAiSdkTranspiler.d.ts +13 -0
  69. package/esm/typings/src/transpilers/openai/register.d.ts +15 -0
  70. package/esm/typings/src/types/typeAliases.d.ts +1 -1
  71. package/esm/typings/src/utils/execCommand/$execCommand.d.ts +2 -1
  72. package/esm/typings/src/utils/execCommand/$execCommands.d.ts +2 -1
  73. package/esm/typings/src/utils/files/$induceBookDownload.d.ts +13 -0
  74. package/esm/typings/src/utils/files/$induceFileDownload.d.ts +13 -0
  75. package/esm/typings/src/utils/files/ObjectUrl.d.ts +46 -0
  76. package/esm/typings/src/utils/misc/aboutPromptbookInformation.d.ts +21 -0
  77. package/esm/typings/src/utils/misc/injectCssModuleIntoShadowRoot.d.ts +1 -0
  78. package/esm/typings/src/utils/misc/xAboutPromptbookInformation.d.ts +13 -0
  79. package/esm/typings/src/utils/organization/$side_effect.d.ts +7 -0
  80. package/esm/typings/src/utils/serialization/$deepFreeze.d.ts +2 -1
  81. package/esm/typings/src/version.d.ts +1 -1
  82. package/package.json +3 -3
  83. package/umd/index.umd.js +23 -5
  84. package/umd/index.umd.js.map +1 -1
  85. package/esm/typings/src/book-components/BookEditor/BookEditorInner.d.ts +0 -5
  86. package/esm/typings/src/book-components/BookEditor/BookEditorWrapper.d.ts +0 -6
  87. package/esm/typings/src/book-components/BookEditor/config.d.ts +0 -10
  88. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.d.ts +0 -21
  89. package/esm/typings/src/book-components/Chat/utils/renderMarkdown.test.d.ts +0 -1
@@ -1,4 +1,5 @@
1
1
  import type { PromptbookStorage } from '../_common/PromptbookStorage';
2
+ import { $side_effect } from '../../utils/organization/$side_effect';
2
3
  /**
3
4
  * Stores data in .env variables
4
5
  *
@@ -29,7 +30,7 @@ export declare class $EnvStorage<TItem> implements PromptbookStorage<TItem> {
29
30
  /**
30
31
  * Sets the value of the pair identified by key to value, creating a new key/value pair if none existed for key previously.
31
32
  */
32
- setItem(key: string, value: TItem): Promise<void>;
33
+ setItem(key: string, value: TItem): Promise<$side_effect>;
33
34
  /**
34
35
  * Removes the key/value pair with the given key from the list associated with the object, if a key/value pair with the given key exists.
35
36
  */
@@ -0,0 +1,19 @@
1
+ import type { BookTranspilerOptions } from './BookTranspilerOptions';
2
+ /**
3
+ * Transpiler takes a book and transpiles it into another format.
4
+ */
5
+ export type BookTranspiler =
6
+ /**
7
+ * Transpiles a book.
8
+ *
9
+ * @param book book to transpile
10
+ * @param options additional options for the transpiler
11
+ * @returns transpiled book
12
+ */
13
+ (book: string, options: BookTranspilerOptions) => Promise<string>;
14
+ /**
15
+ * TODO: [🧠] Should there be a BookTranspiler class or just a function?
16
+ * Maybe a class with a constructor that takes ExecutionTools.
17
+ * Then the instance would be a function.
18
+ * @see LlmExecutionTools
19
+ */
@@ -0,0 +1,37 @@
1
+ import type { ExecutionTools } from '../../execution/ExecutionTools';
2
+ import type { string_name, string_title } from '../../types/typeAliases';
3
+ import type { Registered } from '../../utils/misc/$Register';
4
+ import type { BookTranspiler } from './BookTranspiler';
5
+ /**
6
+ * Definition of a book transpiler.
7
+ *
8
+ * @see https://github.com/webgptorg/promptbook/issues/249
9
+ */
10
+ export type BookTranspilerDefinition = Registered & {
11
+ /**
12
+ * The name of the transpiler.
13
+ * It is used to identify the transpiler in the register.
14
+ *
15
+ * @example 'python-langchain'
16
+ */
17
+ readonly name: string_name;
18
+ /**
19
+ * The title of the transpiler.
20
+ * It is used to display the transpiler in the UI.
21
+ *
22
+ * @example 'Python Langchain'
23
+ */
24
+ readonly title: string_title;
25
+ /**
26
+ * The factory function to create a transpiler instance.
27
+ * It can be async.
28
+ *
29
+ * @param tools the execution tools that can be used by the transpiler
30
+ * @returns the transpiler instance
31
+ */
32
+ readonly new: (tools: ExecutionTools) => BookTranspiler | Promise<BookTranspiler>;
33
+ };
34
+ /**
35
+ * TODO: [🧠] What other information should be in the public profile of the transpiler?
36
+ * - input format, output format, version, description, icon, etc.
37
+ */
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Options for the BookTranspiler.
3
+ *
4
+ * @see https://github.com/webgptorg/promptbook/issues/249
5
+ */
6
+ export type BookTranspilerOptions = {
7
+ /**
8
+ * If true, the transpiler will log verbose information to the console.
9
+ *
10
+ * @default false
11
+ */
12
+ readonly isVerbose?: boolean;
13
+ /**
14
+ * If true, the transpiler will include comments in the output.
15
+ *
16
+ * @default true
17
+ */
18
+ readonly shouldIncludeComments?: boolean;
19
+ };
@@ -0,0 +1,15 @@
1
+ import { $Register } from '../../../utils/misc/$Register';
2
+ import type { BookTranspilerDefinition } from '../BookTranspilerDefinition';
3
+ /**
4
+ * Register for book transpilers.
5
+ *
6
+ * Note: `$` is used to indicate that this interacts with the global scope
7
+ * @singleton Only one instance of each register is created per build, but there can be more instances across different builds or environments.
8
+ * @see https://github.com/webgptorg/promptbook/issues/249
9
+ *
10
+ * @public exported from `@promptbook/core`
11
+ */
12
+ export declare const $bookTranspilersRegister: $Register<BookTranspilerDefinition>;
13
+ /**
14
+ * TODO: [®] DRY Register logic
15
+ */
@@ -0,0 +1,7 @@
1
+ import type { BookTranspilerDefinition } from '../_common/BookTranspilerDefinition';
2
+ /**
3
+ * Transpiler to Python code using LangChain library.
4
+ *
5
+ * @private TODO: !!!! Which package should export this?
6
+ */
7
+ export declare const LangchainTranspiler: BookTranspilerDefinition;
@@ -0,0 +1,15 @@
1
+ import { Registration } from '../../_packages/types.index';
2
+ /**
3
+ * Registration of LLM provider
4
+ *
5
+ * Warning: This is not useful for the end user, it is just a side effect of the mechanism that handles all available LLM tools
6
+ *
7
+ * @public exported from `@promptbook/wizard`
8
+ * @public exported from `@promptbook/cli`
9
+ *
10
+ * TODO: !!!! Which package should export this?
11
+ */
12
+ export declare const _LangchainTranspilerRegistration: Registration;
13
+ /**
14
+ * Note: [💞] Ignore a discrepancy between file name and entity name
15
+ */
@@ -0,0 +1,13 @@
1
+ import type { BookTranspilerDefinition } from '../_common/BookTranspilerDefinition';
2
+ /**
3
+ * Transpiler to Javascript code using OpenAI SDK.
4
+ *
5
+ * @private TODO: !!!! Which package should export this?
6
+ */
7
+ export declare const OpenAiSdkTranspiler: BookTranspilerDefinition;
8
+ /**
9
+ * TODO: [🧠] What should be the scope of the transpiled code?
10
+ * - Just a single function?
11
+ * - A class?
12
+ * - A whole package?
13
+ */
@@ -0,0 +1,15 @@
1
+ import { Registration } from '../../_packages/types.index';
2
+ /**
3
+ * Registration of LLM provider
4
+ *
5
+ * Warning: This is not useful for the end user, it is just a side effect of the mechanism that handles all available LLM tools
6
+ *
7
+ * @public exported from `@promptbook/wizard`
8
+ * @public exported from `@promptbook/cli`
9
+ *
10
+ * TODO: !!!! Which package should export this?
11
+ */
12
+ export declare const _OpenAiSdkTranspilerRegistration: Registration;
13
+ /**
14
+ * Note: [💞] Ignore a discrepancy between file name and entity name
15
+ */
@@ -323,7 +323,7 @@ export type string_css_property = string;
323
323
  *
324
324
  * For example `13px`
325
325
  */
326
- export type string_css_value = string;
326
+ export type string_css_value = string | number;
327
327
  /**
328
328
  * Semantic helper
329
329
  *
@@ -1,3 +1,4 @@
1
+ import { $side_effect } from '../organization/$side_effect';
1
2
  import type { ExecCommandOptions } from './ExecCommandOptions';
2
3
  /**
3
4
  * Run one command in a shell
@@ -10,7 +11,7 @@ import type { ExecCommandOptions } from './ExecCommandOptions';
10
11
  *
11
12
  * @public exported from `@promptbook/node`
12
13
  */
13
- export declare function $execCommand(options: ExecCommandOptions): Promise<string>;
14
+ export declare function $execCommand(options: ExecCommandOptions): Promise<$side_effect & string>;
14
15
  /**
15
16
  * Note: [🟢] Code in this file should never be never released in packages that could be imported into browser environment
16
17
  */
@@ -1,3 +1,4 @@
1
+ import { $side_effect } from '../organization/$side_effect';
1
2
  /**
2
3
  * Run multiple commands in a shell in sequence
3
4
  *
@@ -8,7 +9,7 @@
8
9
  *
9
10
  * @public exported from `@promptbook/node`
10
11
  */
11
- export declare function $execCommands({ commands, cwd, crashOnError, }: {
12
+ export declare function $execCommands({ commands, cwd, crashOnError, }: $side_effect & {
12
13
  readonly commands: string[];
13
14
  readonly cwd: string;
14
15
  readonly crashOnError?: boolean;
@@ -0,0 +1,13 @@
1
+ import { string_book } from '../../_packages/types.index';
2
+ import { $side_effect } from '../organization/$side_effect';
3
+ /**
4
+ * Download a Book in a browser
5
+ *
6
+ * Note: `$` is used to indicate that this function is not a pure function - its purpose is to cause a side effect (download a file)
7
+ *
8
+ * @public exported from `@promptbook/browser`
9
+ */
10
+ export declare function $induceBookDownload(book: string_book): Promise<$side_effect>;
11
+ /**
12
+ * Note: [🔵] Code in this file should never be published outside of `@promptbook/browser`
13
+ */
@@ -0,0 +1,13 @@
1
+ import { string_url } from '../../types/typeAliases';
2
+ import { $side_effect } from '../organization/$side_effect';
3
+ /**
4
+ * Download a File in a browser
5
+ *
6
+ * Note: `$` is used to indicate that this function is not a pure function - its purpose is to cause a side effect (download a file)
7
+ *
8
+ * @public exported from `@promptbook/browser`
9
+ */
10
+ export declare function $induceFileDownload(fileOrBlobOrUrl: File | Blob | URL | string_url): Promise<$side_effect>;
11
+ /**
12
+ * Note: [🔵] Code in this file should never be published outside of `@promptbook/browser`
13
+ */
@@ -0,0 +1,46 @@
1
+ import { IDestroyable, Registration } from 'destroyable';
2
+ import { string_mime_type, string_url } from '../../types/typeAliases';
3
+ /**
4
+ * Converts Blob, File or MediaSource to url using URL.createObjectURL
5
+ *
6
+ * @public exported from `@promptbook/browser`
7
+ */
8
+ export declare class ObjectUrl extends Registration implements IDestroyable {
9
+ readonly src: string_url;
10
+ private constructor();
11
+ /**
12
+ * Creates ObjectUrl from multiple input types
13
+ * Note: DO NOT forget to call destroy() when you are done with it
14
+ */
15
+ static from(source: Blob | File | MediaSource | string, mimeType: string_mime_type): ObjectUrl;
16
+ /**
17
+ * Creates ObjectUrl from string
18
+ * Note: DO NOT forget to call destroy() when you are done with it
19
+ */
20
+ static fromString(source: string, mimeType: string_mime_type): ObjectUrl;
21
+ /**
22
+ * Creates ObjectUrl
23
+ * DO NOT forget to call destroy() when you are done with it
24
+ */
25
+ static fromBlob(source: Blob | File | MediaSource): ObjectUrl;
26
+ /**
27
+ * Creates ObjectUrl:
28
+ * 1) With functionality for Blobs, Files or MediaSources
29
+ * 2) Just a wrapper for string urls
30
+ *
31
+ * DO NOT forget to call destroy() when you are done with it
32
+ */
33
+ static fromBlobOrUrl(source: Blob | File | MediaSource | URL | string_url): ObjectUrl;
34
+ /**
35
+ * Gets object url as string
36
+ * @alias src
37
+ */
38
+ get href(): string_url;
39
+ /**
40
+ * Gets object url as URL object
41
+ */
42
+ get url(): URL;
43
+ }
44
+ /**
45
+ * Note: [🔵] Code in this file should never be published outside of `@promptbook/browser`
46
+ */
@@ -0,0 +1,21 @@
1
+ import type { string_markdown } from '../../types/typeAliases';
2
+ export type AboutPromptbookInformationOptions = {
3
+ /**
4
+ * Include information about available servers
5
+ *
6
+ * @default true
7
+ */
8
+ isServersInfoIncluded?: boolean;
9
+ };
10
+ /**
11
+ * Provide information about Promptbook, engine version, book language version, servers, ...
12
+ *
13
+ * @param options Which information to include
14
+ * @returns Information about Promptbook in markdown format
15
+ *
16
+ * @public exported from `@promptbook/core`
17
+ */
18
+ export declare function aboutPromptbookInformation(options?: AboutPromptbookInformationOptions): string_markdown;
19
+ /**
20
+ * TODO: [🗽] Unite branding and make single place for it
21
+ */
@@ -16,5 +16,6 @@ export type InjectCssModuleIntoShadowRootOptions = {
16
16
  *
17
17
  * @public exported from `@promptbook/components`
18
18
  * <- TODO: [🧠] Make `@promptbook/components-utils`
19
+ * @deprecated This was used for BookEditor shadow DOM support, which is no longer needed
19
20
  */
20
21
  export declare function injectCssModuleIntoShadowRoot(options: InjectCssModuleIntoShadowRootOptions): void;
@@ -0,0 +1,13 @@
1
+ import type { AboutPromptbookInformationOptions } from './aboutPromptbookInformation';
2
+ type AboutPromptbookInformationProps = AboutPromptbookInformationOptions;
3
+ /**
4
+ * Provide information about Promptbook, engine version, book language version, servers, ...
5
+ *
6
+ * @public exported from `@promptbook/components`
7
+ */
8
+ export declare function AboutPromptbookInformation(props: AboutPromptbookInformationProps): import("react/jsx-runtime").JSX.Element;
9
+ export {};
10
+ /**
11
+ * TODO: !!! Remove "x" from filename
12
+ * TODO: [🗽] Unite branding and make single place for it
13
+ */
@@ -0,0 +1,7 @@
1
+ import { really_any } from './really_any';
2
+ /**
3
+ * Organizational helper to mark a function that produces side effects
4
+ *
5
+ * @private within the repository
6
+ */
7
+ export type $side_effect = void | really_any;
@@ -1,4 +1,5 @@
1
1
  import type { ReadonlyDeep } from 'type-fest';
2
+ import { $side_effect } from '../organization/$side_effect';
2
3
  /**
3
4
  * Freezes the given object and all its nested objects recursively
4
5
  *
@@ -8,7 +9,7 @@ import type { ReadonlyDeep } from 'type-fest';
8
9
  * @returns The same object as the input, but deeply frozen
9
10
  * @public exported from `@promptbook/utils`
10
11
  */
11
- export declare function $deepFreeze<TObject>(objectValue: TObject): ReadonlyDeep<TObject>;
12
+ export declare function $deepFreeze<TObject>(objectValue: TObject): ReadonlyDeep<$side_effect & TObject>;
12
13
  /**
13
14
  * TODO: [🧠] Is there a way how to meaningfully test this utility
14
15
  */
@@ -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.103.0-2`).
18
+ * It follows semantic versioning (e.g., `0.103.0-30`).
19
19
  *
20
20
  * @generated
21
21
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promptbook/vercel",
3
- "version": "0.103.0-3",
3
+ "version": "0.103.0-31",
4
4
  "description": "Promptbook: Turn your company's scattered knowledge into AI ready books",
5
5
  "private": false,
6
6
  "sideEffects": false,
@@ -94,11 +94,11 @@
94
94
  "module": "./esm/index.es.js",
95
95
  "typings": "./esm/typings/src/_packages/vercel.index.d.ts",
96
96
  "peerDependencies": {
97
- "@promptbook/core": "0.103.0-3"
97
+ "@promptbook/core": "0.103.0-31"
98
98
  },
99
99
  "dependencies": {
100
100
  "colors": "1.4.0",
101
101
  "crypto": "1.0.1",
102
- "spacetrim": "0.11.59"
102
+ "spacetrim": "0.11.60"
103
103
  }
104
104
  }
package/umd/index.umd.js CHANGED
@@ -23,7 +23,7 @@
23
23
  * @generated
24
24
  * @see https://github.com/webgptorg/promptbook
25
25
  */
26
- const PROMPTBOOK_ENGINE_VERSION = '0.103.0-3';
26
+ const PROMPTBOOK_ENGINE_VERSION = '0.103.0-31';
27
27
  /**
28
28
  * TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
29
29
  * Note: [💞] Ignore a discrepancy between file name and entity name
@@ -107,10 +107,13 @@
107
107
  * @public exported from `@promptbook/utils`
108
108
  */
109
109
  function countLines(text) {
110
+ if (text === '') {
111
+ return 0;
112
+ }
110
113
  text = text.replace('\r\n', '\n');
111
114
  text = text.replace('\r', '\n');
112
115
  const lines = text.split('\n');
113
- return lines.reduce((count, line) => count + Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 0);
116
+ return lines.reduce((count, line) => count + Math.max(Math.ceil(line.length / CHARACTERS_PER_STANDARD_LINE), 1), 0);
114
117
  }
115
118
  /**
116
119
  * TODO: [🥴] Implement counting in formats - like JSON, CSV, XML,...
@@ -1509,15 +1512,30 @@
1509
1512
  * @public exported from `@promptbook/core`
1510
1513
  */
1511
1514
  const PROMPTBOOK_COLOR = Color.fromHex('#79EAFD');
1512
- // <- TODO: [🧠] Using `Color` here increases the package size approx 3kb, maybe remove it
1515
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1516
+ /**
1517
+ * Colors for syntax highlighting in the `<BookEditor/>`
1518
+ *
1519
+ * TODO: [🗽] Unite branding and make single place for it
1520
+ *
1521
+ * @public exported from `@promptbook/core`
1522
+ */
1523
+ ({
1524
+ TITLE: Color.fromHex('#244EA8'),
1525
+ LINE: Color.fromHex('#eeeeee'),
1526
+ COMMITMENT: Color.fromHex('#DA0F78'),
1527
+ PARAMETER: Color.fromHex('#8e44ad'),
1528
+ });
1529
+ // <- TODO: [🧠][🈵] Using `Color` here increases the package size approx 3kb, maybe remove it
1513
1530
  /**
1514
- * Dark color of the Promptbook
1531
+ * Chat color of the Promptbook (in chat)
1515
1532
  *
1516
1533
  * TODO: [🗽] Unite branding and make single place for it
1517
1534
  *
1518
1535
  * @public exported from `@promptbook/core`
1519
1536
  */
1520
1537
  PROMPTBOOK_COLOR.then(lighten(0.1)).then(saturate(0.9)).then(grayscale(0.9));
1538
+ // <- TODO: [🧠][🈵] Using `Color` and `lighten`, `saturate`,... here increases the package size approx 3kb, maybe remove it
1521
1539
  /**
1522
1540
  * Color of the user (in chat)
1523
1541
  *
@@ -2215,7 +2233,7 @@
2215
2233
  let promptMessages;
2216
2234
  if ('thread' in prompt && Array.isArray(prompt.thread)) {
2217
2235
  promptMessages = prompt.thread.map((msg) => ({
2218
- role: msg.role === 'assistant' ? 'assistant' : (msg.role === 'system' ? 'system' : 'user'),
2236
+ role: msg.role === 'assistant' ? 'assistant' : msg.role === 'system' ? 'system' : 'user',
2219
2237
  content: [
2220
2238
  {
2221
2239
  type: 'text',