@rolder/kit 3.0.0-alpha.8 → 3.0.0-alpha.9

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 (263) hide show
  1. package/dist/ai/ui/conversation/ConversationContext.d.ts +7 -0
  2. package/dist/ai/ui/conversation/ConversationContext.js +8 -0
  3. package/dist/ai/ui/conversation/ConversationProvider.d.ts +2 -0
  4. package/dist/ai/ui/conversation/ConversationProvider.js +14 -0
  5. package/dist/ai/ui/conversation/Empty.d.ts +1 -0
  6. package/dist/ai/ui/conversation/Empty.js +21 -0
  7. package/dist/ai/ui/conversation/File.d.ts +4 -0
  8. package/dist/ai/ui/conversation/File.js +42 -0
  9. package/dist/ai/ui/conversation/FileIcon.d.ts +3 -0
  10. package/dist/ai/ui/conversation/FileIcon.js +225 -0
  11. package/dist/ai/ui/conversation/Loader.d.ts +2 -0
  12. package/dist/ai/ui/conversation/Loader.js +12 -0
  13. package/dist/ai/ui/conversation/Message.d.ts +4 -0
  14. package/dist/ai/ui/conversation/Message.js +25 -0
  15. package/dist/ai/ui/conversation/Root.d.ts +2 -0
  16. package/dist/ai/ui/conversation/Root.js +26 -0
  17. package/dist/ai/ui/conversation/index.d.ts +13 -0
  18. package/dist/ai/ui/conversation/index.js +14 -0
  19. package/{src/ai/ui/conversation/types.ts → dist/ai/ui/conversation/types.d.ts} +4 -5
  20. package/dist/ai/ui/conversation/types.js +0 -0
  21. package/dist/ai/ui/conversation/useChatMessage.d.ts +2 -0
  22. package/dist/ai/ui/conversation/useChatMessage.js +12 -0
  23. package/dist/ai/ui/promptInput/File.d.ts +2 -0
  24. package/dist/ai/ui/promptInput/File.js +117 -0
  25. package/dist/ai/ui/promptInput/FileIcon.d.ts +3 -0
  26. package/dist/ai/ui/promptInput/FileIcon.js +225 -0
  27. package/dist/ai/ui/promptInput/Footer.d.ts +2 -0
  28. package/dist/ai/ui/promptInput/Footer.js +8 -0
  29. package/dist/ai/ui/promptInput/PromptInputContext.d.ts +12 -0
  30. package/dist/ai/ui/promptInput/PromptInputContext.js +8 -0
  31. package/dist/ai/ui/promptInput/PromptInputProvider.d.ts +2 -0
  32. package/dist/ai/ui/promptInput/PromptInputProvider.js +50 -0
  33. package/dist/ai/ui/promptInput/Root.d.ts +3 -0
  34. package/dist/ai/ui/promptInput/Root.js +17 -0
  35. package/dist/ai/ui/promptInput/Submit.d.ts +2 -0
  36. package/dist/ai/ui/promptInput/Submit.js +40 -0
  37. package/dist/ai/ui/promptInput/Textarea.d.ts +2 -0
  38. package/dist/ai/ui/promptInput/Textarea.js +33 -0
  39. package/dist/ai/ui/promptInput/index.d.ts +8 -0
  40. package/dist/ai/ui/promptInput/index.js +13 -0
  41. package/dist/ai/ui/promptInput/types.d.ts +11 -0
  42. package/dist/ai/ui/promptInput/types.js +0 -0
  43. package/dist/ai/utils/convertFileUIPartBlobToDataURL.d.ts +5 -0
  44. package/dist/ai/utils/convertFileUIPartBlobToDataURL.js +21 -0
  45. package/dist/ai/utils/parseAiMessagePart.d.ts +2 -0
  46. package/dist/ai/utils/parseAiMessagePart.js +12 -0
  47. package/dist/app/AppDefaults.d.ts +3 -0
  48. package/dist/app/AppDefaults.js +27 -0
  49. package/dist/app/DefaultApp.d.ts +6 -0
  50. package/dist/app/DefaultApp.js +43 -0
  51. package/dist/app/cookieColorSchemeManager.d.ts +6 -0
  52. package/dist/app/cookieColorSchemeManager.js +46 -0
  53. package/dist/app/defaultRequestMiddlewares.d.ts +4 -0
  54. package/dist/app/defaultRequestMiddlewares.js +24 -0
  55. package/dist/app/defaultTheme.d.ts +141 -0
  56. package/dist/app/defaultTheme.js +24 -0
  57. package/dist/functions/getCookie.d.ts +3 -0
  58. package/dist/functions/getCookie.js +8 -0
  59. package/dist/functions/setCookie.d.ts +10 -0
  60. package/dist/functions/setCookie.js +19 -0
  61. package/dist/functions/setCookies.d.ts +14 -0
  62. package/dist/functions/setCookies.js +13 -0
  63. package/dist/hooks/useMutation.d.ts +4 -0
  64. package/dist/hooks/useMutation.js +8 -0
  65. package/dist/hooks/useMutationWithInvalidate.d.ts +4 -0
  66. package/dist/hooks/useMutationWithInvalidate.js +16 -0
  67. package/{src/index.ts → dist/index.d.ts} +5 -45
  68. package/dist/index.js +26 -0
  69. package/{src → dist}/styles.css +11 -21
  70. package/dist/surreal/connection.d.ts +9 -0
  71. package/dist/surreal/connection.js +49 -0
  72. package/dist/surreal/deafaultCrud.d.ts +2 -0
  73. package/dist/surreal/deafaultCrud.js +18 -0
  74. package/dist/surreal/deserialize.d.ts +17 -0
  75. package/dist/surreal/deserialize.js +46 -0
  76. package/dist/surreal/encryption.d.ts +6 -0
  77. package/dist/surreal/encryption.js +30 -0
  78. package/dist/ui/AnimatedChevron.d.ts +6 -0
  79. package/dist/ui/AnimatedChevron.js +31 -0
  80. package/dist/ui/JsonInput.d.ts +2 -0
  81. package/dist/ui/JsonInput.js +45 -0
  82. package/dist/ui/RouterLink.d.ts +16 -0
  83. package/dist/ui/RouterLink.js +36 -0
  84. package/dist/ui/editor/Content.d.ts +3 -0
  85. package/dist/ui/editor/Content.js +13 -0
  86. package/dist/ui/editor/Provider.d.ts +17 -0
  87. package/dist/ui/editor/Provider.js +80 -0
  88. package/dist/ui/editor/Root.d.ts +2 -0
  89. package/dist/ui/editor/Root.js +18 -0
  90. package/dist/ui/editor/Toolbar.d.ts +5 -0
  91. package/dist/ui/editor/Toolbar.js +156 -0
  92. package/dist/ui/editor/index.d.ts +12 -0
  93. package/dist/ui/editor/index.js +11 -0
  94. package/dist/ui/editor/types.d.ts +7 -0
  95. package/dist/ui/editor/types.js +0 -0
  96. package/dist/ui/error/DefaultError.d.ts +2 -0
  97. package/dist/ui/error/DefaultError.js +62 -0
  98. package/dist/ui/error/DefaultNotFound.d.ts +1 -0
  99. package/dist/ui/error/DefaultNotFound.js +37 -0
  100. package/dist/ui/error/Forbidden.d.ts +1 -0
  101. package/dist/ui/error/Forbidden.js +32 -0
  102. package/dist/ui/error/defaultErrorNotification.d.ts +1 -0
  103. package/dist/ui/error/defaultErrorNotification.js +8 -0
  104. package/dist/ui/error/index.js +5 -0
  105. package/dist/ui/form/blurOnError.d.ts +4 -0
  106. package/dist/ui/form/blurOnError.js +11 -0
  107. package/dist/ui/form/buttons/CancelButton.d.ts +5 -0
  108. package/dist/ui/form/buttons/CancelButton.js +44 -0
  109. package/dist/ui/form/buttons/SubmitButton.d.ts +5 -0
  110. package/dist/ui/form/buttons/SubmitButton.js +47 -0
  111. package/dist/ui/form/buttons/SubscribeActionIcon.d.ts +4 -0
  112. package/dist/ui/form/buttons/SubscribeActionIcon.js +15 -0
  113. package/dist/ui/form/buttons/SubscribeButton.d.ts +5 -0
  114. package/dist/ui/form/buttons/SubscribeButton.js +16 -0
  115. package/dist/ui/form/buttons/index.js +4 -0
  116. package/dist/ui/form/context.d.ts +83 -0
  117. package/dist/ui/form/context.js +26 -0
  118. package/dist/ui/form/fields/JsonField.d.ts +2 -0
  119. package/dist/ui/form/fields/JsonField.js +13 -0
  120. package/dist/ui/form/fields/MultiSelectField.d.ts +2 -0
  121. package/dist/ui/form/fields/MultiSelectField.js +15 -0
  122. package/dist/ui/form/fields/NumberField.d.ts +2 -0
  123. package/dist/ui/form/fields/NumberField.js +15 -0
  124. package/dist/ui/form/fields/PassowrdField.d.ts +2 -0
  125. package/dist/ui/form/fields/PassowrdField.js +18 -0
  126. package/dist/ui/form/fields/SelectField.d.ts +2 -0
  127. package/dist/ui/form/fields/SelectField.js +15 -0
  128. package/dist/ui/form/fields/SwitchField.d.ts +2 -0
  129. package/dist/ui/form/fields/SwitchField.js +15 -0
  130. package/dist/ui/form/fields/TextField.d.ts +2 -0
  131. package/dist/ui/form/fields/TextField.js +15 -0
  132. package/dist/ui/form/fields/TextPassowrdField.d.ts +2 -0
  133. package/dist/ui/form/fields/TextPassowrdField.js +51 -0
  134. package/dist/ui/form/fields/TextareaField.d.ts +2 -0
  135. package/dist/ui/form/fields/TextareaField.js +15 -0
  136. package/dist/ui/form/fields/index.js +9 -0
  137. package/dist/ui/form/fieldsSchema.d.ts +12 -0
  138. package/dist/ui/form/fieldsSchema.js +13 -0
  139. package/dist/ui/form/index.js +4 -0
  140. package/dist/ui/hoverPaper/HoverPaper.d.ts +6 -0
  141. package/dist/ui/hoverPaper/HoverPaper.js +15 -0
  142. package/dist/ui/hoverPaper/index.js +3 -0
  143. package/dist/ui/hoverPaper/usePaperHover.d.ts +4 -0
  144. package/dist/ui/hoverPaper/usePaperHover.js +9 -0
  145. package/dist/ui/saveInput/JsonInput.d.ts +6 -0
  146. package/dist/ui/saveInput/JsonInput.js +34 -0
  147. package/dist/ui/saveInput/NumberInput.d.ts +6 -0
  148. package/dist/ui/saveInput/NumberInput.js +27 -0
  149. package/dist/ui/saveInput/SaveInput.d.ts +36 -0
  150. package/dist/ui/saveInput/SaveInput.js +15 -0
  151. package/dist/ui/saveInput/Select.d.ts +6 -0
  152. package/dist/ui/saveInput/Select.js +27 -0
  153. package/dist/ui/saveInput/Switch.d.ts +6 -0
  154. package/dist/ui/saveInput/Switch.js +30 -0
  155. package/dist/ui/saveInput/TextInput.d.ts +6 -0
  156. package/dist/ui/saveInput/TextInput.js +26 -0
  157. package/dist/ui/saveInput/Textarea.d.ts +6 -0
  158. package/dist/ui/saveInput/Textarea.js +26 -0
  159. package/dist/ui/saveInput/index.js +2 -0
  160. package/{src/ui/scrollArea/ScrollArea.tsx → dist/ui/scrollArea/ScrollArea.d.ts} +10 -41
  161. package/dist/ui/scrollArea/ScrollArea.js +30 -0
  162. package/dist/ui/scrollArea/ScrollAreaButton.d.ts +5 -0
  163. package/dist/ui/scrollArea/ScrollAreaButton.js +51 -0
  164. package/dist/ui/scrollArea/ScrollAreaContent.d.ts +6 -0
  165. package/dist/ui/scrollArea/ScrollAreaContent.js +29 -0
  166. package/{src/ui/scrollArea/context.tsx → dist/ui/scrollArea/context.d.ts} +3 -18
  167. package/dist/ui/scrollArea/context.js +10 -0
  168. package/dist/ui/scrollArea/index.d.ts +3 -0
  169. package/dist/ui/scrollArea/index.js +3 -0
  170. package/dist/ui/scrollArea/types.d.ts +65 -0
  171. package/dist/ui/scrollArea/types.js +0 -0
  172. package/dist/ui/scrollArea/useScrollArea.d.ts +9 -0
  173. package/dist/ui/scrollArea/useScrollArea.js +146 -0
  174. package/package.json +4 -1
  175. package/rslib.config.ts +0 -21
  176. package/src/ai/ui/conversation/ConversationContext.ts +0 -21
  177. package/src/ai/ui/conversation/ConversationProvider.tsx +0 -21
  178. package/src/ai/ui/conversation/Empty.tsx +0 -15
  179. package/src/ai/ui/conversation/File.tsx +0 -40
  180. package/src/ai/ui/conversation/FileIcon.tsx +0 -143
  181. package/src/ai/ui/conversation/Loader.tsx +0 -8
  182. package/src/ai/ui/conversation/Message.tsx +0 -34
  183. package/src/ai/ui/conversation/Root.tsx +0 -24
  184. package/src/ai/ui/conversation/index.ts +0 -16
  185. package/src/ai/ui/conversation/useChatMessage.ts +0 -13
  186. package/src/ai/ui/promptInput/File.tsx +0 -98
  187. package/src/ai/ui/promptInput/FileIcon.tsx +0 -149
  188. package/src/ai/ui/promptInput/Footer.tsx +0 -5
  189. package/src/ai/ui/promptInput/PromptInputContext.ts +0 -24
  190. package/src/ai/ui/promptInput/PromptInputProvider.tsx +0 -54
  191. package/src/ai/ui/promptInput/Root.tsx +0 -29
  192. package/src/ai/ui/promptInput/Submit.tsx +0 -39
  193. package/src/ai/ui/promptInput/Textarea.tsx +0 -39
  194. package/src/ai/ui/promptInput/index.ts +0 -15
  195. package/src/ai/ui/promptInput/types.ts +0 -9
  196. package/src/ai/utils/convertFileUIPartBlobToDataURL.ts +0 -29
  197. package/src/ai/utils/parseAiMessagePart.ts +0 -19
  198. package/src/app/AppDefaults.tsx +0 -21
  199. package/src/app/DefaultApp.tsx +0 -50
  200. package/src/app/cookieColorSchemeManager.ts +0 -70
  201. package/src/app/defaultRequestMiddlewares.ts +0 -22
  202. package/src/app/defaultTheme.ts +0 -22
  203. package/src/functions/getCookie.ts +0 -36
  204. package/src/functions/setCookie.ts +0 -29
  205. package/src/functions/setCookies.ts +0 -24
  206. package/src/hooks/useMutation.ts +0 -14
  207. package/src/hooks/useMutationWithInvalidate.ts +0 -23
  208. package/src/surreal/connection.ts +0 -72
  209. package/src/surreal/deafaultCrud.ts +0 -25
  210. package/src/surreal/deserialize.ts +0 -144
  211. package/src/surreal/encryption.ts +0 -51
  212. package/src/ui/AnimatedChevron.tsx +0 -32
  213. package/src/ui/JsonInput.tsx +0 -52
  214. package/src/ui/RouterLink.tsx +0 -78
  215. package/src/ui/editor/Content.tsx +0 -11
  216. package/src/ui/editor/Provider.tsx +0 -96
  217. package/src/ui/editor/Root.tsx +0 -25
  218. package/src/ui/editor/Toolbar.tsx +0 -92
  219. package/src/ui/editor/index.ts +0 -13
  220. package/src/ui/editor/types.ts +0 -7
  221. package/src/ui/error/DefaultError.tsx +0 -60
  222. package/src/ui/error/DefaultNotFound.tsx +0 -19
  223. package/src/ui/error/Forbidden.tsx +0 -18
  224. package/src/ui/error/defaultErrorNotification.ts +0 -9
  225. package/src/ui/form/blurOnError.ts +0 -21
  226. package/src/ui/form/buttons/CancelButton.tsx +0 -42
  227. package/src/ui/form/buttons/SubmitButton.tsx +0 -43
  228. package/src/ui/form/buttons/SubscribeActionIcon.tsx +0 -18
  229. package/src/ui/form/buttons/SubscribeButton.tsx +0 -17
  230. package/src/ui/form/context.ts +0 -45
  231. package/src/ui/form/fields/JsonField.tsx +0 -16
  232. package/src/ui/form/fields/MultiSelectField.tsx +0 -17
  233. package/src/ui/form/fields/NumberField.tsx +0 -17
  234. package/src/ui/form/fields/PassowrdField.tsx +0 -20
  235. package/src/ui/form/fields/SelectField.tsx +0 -17
  236. package/src/ui/form/fields/SwitchField.tsx +0 -17
  237. package/src/ui/form/fields/TextField.tsx +0 -17
  238. package/src/ui/form/fields/TextPassowrdField.tsx +0 -51
  239. package/src/ui/form/fields/TextareaField.tsx +0 -17
  240. package/src/ui/form/fieldsSchema.ts +0 -24
  241. package/src/ui/hoverPaper/HoverPaper.tsx +0 -17
  242. package/src/ui/hoverPaper/usePaperHover.ts +0 -9
  243. package/src/ui/saveInput/JsonInput.tsx +0 -40
  244. package/src/ui/saveInput/NumberInput.tsx +0 -40
  245. package/src/ui/saveInput/SaveInput.tsx +0 -15
  246. package/src/ui/saveInput/Select.tsx +0 -41
  247. package/src/ui/saveInput/Switch.tsx +0 -46
  248. package/src/ui/saveInput/TextInput.tsx +0 -40
  249. package/src/ui/saveInput/Textarea.tsx +0 -40
  250. package/src/ui/scrollArea/ARCH.md +0 -204
  251. package/src/ui/scrollArea/README.md +0 -369
  252. package/src/ui/scrollArea/ScrollAreaButton.tsx +0 -56
  253. package/src/ui/scrollArea/ScrollAreaContent.tsx +0 -36
  254. package/src/ui/scrollArea/index.ts +0 -10
  255. package/src/ui/scrollArea/types.ts +0 -77
  256. package/src/ui/scrollArea/useScrollArea.ts +0 -227
  257. package/tsconfig.json +0 -14
  258. /package/{src/ui/error/index.ts → dist/ui/error/index.d.ts} +0 -0
  259. /package/{src/ui/form/buttons/index.ts → dist/ui/form/buttons/index.d.ts} +0 -0
  260. /package/{src/ui/form/fields/index.ts → dist/ui/form/fields/index.d.ts} +0 -0
  261. /package/{src/ui/form/index.ts → dist/ui/form/index.d.ts} +0 -0
  262. /package/{src/ui/hoverPaper/index.ts → dist/ui/hoverPaper/index.d.ts} +0 -0
  263. /package/{src/ui/saveInput/index.ts → dist/ui/saveInput/index.d.ts} +0 -0
@@ -1,149 +0,0 @@
1
- export const FileIcon = ({ mimeType }: { mimeType: string }) => {
2
- switch (true) {
3
- case mimeType.includes('image/'):
4
- return (
5
- <svg
6
- xmlns="http://www.w3.org/2000/svg"
7
- width="24"
8
- height="24"
9
- viewBox="0 0 24 24"
10
- fill="none"
11
- stroke="var(--mantine-color-dimmed)"
12
- strokeWidth="1.5"
13
- strokeLinecap="round"
14
- strokeLinejoin="round"
15
- role="img"
16
- aria-label="Image"
17
- >
18
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
19
- <path d="M15 8h.01" />
20
- <path d="M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12" />
21
- <path d="M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5" />
22
- <path d="M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3" />
23
- </svg>
24
- );
25
- case mimeType.includes('application/pdf'):
26
- return (
27
- <svg
28
- xmlns="http://www.w3.org/2000/svg"
29
- width="24"
30
- height="24"
31
- viewBox="0 0 24 24"
32
- fill="none"
33
- stroke="var(--mantine-color-dimmed)"
34
- strokeWidth="1.5"
35
- strokeLinecap="round"
36
- strokeLinejoin="round"
37
- role="img"
38
- aria-label="FilePdf"
39
- >
40
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
41
- <path d="M14 3v4a1 1 0 0 0 1 1h4" />
42
- <path d="M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4" />
43
- <path d="M5 18h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6" />
44
- <path d="M17 18h2" />
45
- <path d="M20 15h-3v6" />
46
- <path d="M11 15v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1" />
47
- </svg>
48
- );
49
- case mimeType.includes(
50
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
51
- ):
52
- return (
53
- <svg
54
- xmlns="http://www.w3.org/2000/svg"
55
- width="24"
56
- height="24"
57
- viewBox="0 0 24 24"
58
- fill="none"
59
- stroke="var(--mantine-color-dimmed)"
60
- strokeWidth="1.5"
61
- strokeLinecap="round"
62
- strokeLinejoin="round"
63
- role="img"
64
- aria-label="FileDoc"
65
- >
66
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
67
- <path d="M14 3v4a1 1 0 0 0 1 1h4" />
68
- <path d="M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4" />
69
- <path d="M5 15v6h1a2 2 0 0 0 2 -2v-2a2 2 0 0 0 -2 -2h-1" />
70
- <path d="M20 16.5a1.5 1.5 0 0 0 -3 0v3a1.5 1.5 0 0 0 3 0" />
71
- <path d="M12.5 15a1.5 1.5 0 0 1 1.5 1.5v3a1.5 1.5 0 0 1 -3 0v-3a1.5 1.5 0 0 1 1.5 -1.5" />
72
- </svg>
73
- );
74
- case mimeType.includes(
75
- 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
76
- ):
77
- return (
78
- <svg
79
- xmlns="http://www.w3.org/2000/svg"
80
- width="24"
81
- height="24"
82
- viewBox="0 0 24 24"
83
- fill="none"
84
- stroke="var(--mantine-color-dimmed)"
85
- strokeWidth="1.5"
86
- strokeLinecap="round"
87
- strokeLinejoin="round"
88
- role="img"
89
- aria-label="FileXls"
90
- >
91
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
92
- <path d="M14 3v4a1 1 0 0 0 1 1h4" />
93
- <path d="M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4" />
94
- <path d="M4 15l4 6" />
95
- <path d="M4 21l4 -6" />
96
- <path d="M17 20.25c0 .414 .336 .75 .75 .75h1.25a1 1 0 0 0 1 -1v-1a1 1 0 0 0 -1 -1h-1a1 1 0 0 1 -1 -1v-1a1 1 0 0 1 1 -1h1.25a.75 .75 0 0 1 .75 .75" />
97
- <path d="M11 15v6h3" />
98
- </svg>
99
- );
100
- case mimeType.includes(
101
- 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
102
- ):
103
- return (
104
- <svg
105
- xmlns="http://www.w3.org/2000/svg"
106
- width="24"
107
- height="24"
108
- viewBox="0 0 24 24"
109
- fill="none"
110
- stroke="var(--mantine-color-dimmed)"
111
- strokeWidth="1.5"
112
- strokeLinecap="round"
113
- strokeLinejoin="round"
114
- role="img"
115
- aria-label="FilePpt"
116
- >
117
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
118
- <path d="M14 3v4a1 1 0 0 0 1 1h4" />
119
- <path d="M14 3v4a1 1 0 0 0 1 1h4" />
120
- <path d="M5 18h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6" />
121
- <path d="M11 18h1.5a1.5 1.5 0 0 0 0 -3h-1.5v6" />
122
- <path d="M16.5 15h3" />
123
- <path d="M18 15v6" />
124
- <path d="M5 12v-7a2 2 0 0 1 2 -2h7l5 5v4" />
125
- </svg>
126
- );
127
- default:
128
- return (
129
- <svg
130
- xmlns="http://www.w3.org/2000/svg"
131
- width="24"
132
- height="24"
133
- viewBox="0 0 24 24"
134
- fill="none"
135
- stroke="var(--mantine-color-dimmed)"
136
- strokeWidth="1.5"
137
- strokeLinecap="round"
138
- strokeLinejoin="round"
139
- role="img"
140
- aria-label="File"
141
- >
142
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
143
- <path d="M15 3v4a1 1 0 0 0 1 1h4" />
144
- <path d="M18 17h-7a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h4l5 5v7a2 2 0 0 1 -2 2" />
145
- <path d="M16 17v2a2 2 0 0 1 -2 2h-7a2 2 0 0 1 -2 -2v-10a2 2 0 0 1 2 -2h2" />
146
- </svg>
147
- );
148
- }
149
- };
@@ -1,5 +0,0 @@
1
- import { Group, type GroupProps } from '@mantine/core';
2
-
3
- export const Footer = (props: GroupProps) => (
4
- <Group justify="space-between" p="xs" {...props} />
5
- );
@@ -1,24 +0,0 @@
1
- import { createContext, useContext } from 'react';
2
-
3
- export interface PromptInputContext {
4
- text: string;
5
- setText: (text: string) => void;
6
- file?: File;
7
- setFile: (file?: File) => void;
8
- onSubmit: () => void;
9
- submiting: boolean;
10
- uploading: boolean;
11
- accept?: string;
12
- }
13
-
14
- export const PromptInputContext = createContext<PromptInputContext | null>(
15
- null,
16
- );
17
-
18
- export const usePromptInput = () => {
19
- const context = useContext(PromptInputContext);
20
- if (!context) {
21
- throw new Error('usePromptInput must be used within a PromptInputProvider');
22
- }
23
- return context;
24
- };
@@ -1,54 +0,0 @@
1
- import { useState } from 'react';
2
- import { PromptInputContext } from './PromptInputContext';
3
- import type { PromptInputProps } from './types';
4
-
5
- export const Provider = ({
6
- children,
7
- onSubmit,
8
- submiting,
9
- uploading,
10
- accept = ['text', 'image', 'pdf'],
11
- }: PromptInputProps) => {
12
- const [text, setText] = useState('');
13
- const [file, setFile] = useState<File | undefined>();
14
-
15
- const value: PromptInputContext = {
16
- text,
17
- setText,
18
- file,
19
- setFile,
20
- onSubmit: () => {
21
- if (text.trim()) {
22
- onSubmit({ text: text.trim(), file });
23
- setText('');
24
- setFile(undefined);
25
- }
26
- },
27
- submiting,
28
- uploading,
29
- accept: accept
30
- .map((type) => {
31
- switch (type) {
32
- case 'text':
33
- return 'text/plain';
34
- case 'image':
35
- return 'image/*';
36
- case 'pdf':
37
- return 'application/pdf';
38
- case 'excel':
39
- return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
40
- case 'word':
41
- return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
42
- default:
43
- return type;
44
- }
45
- })
46
- .join(','),
47
- };
48
-
49
- return (
50
- <PromptInputContext.Provider value={value}>
51
- {children}
52
- </PromptInputContext.Provider>
53
- );
54
- };
@@ -1,29 +0,0 @@
1
- import { Paper, type PaperProps } from '@mantine/core';
2
- import clsx from 'clsx';
3
- import { Provider } from './PromptInputProvider';
4
- import type { PromptInputProps } from './types';
5
-
6
- export const Root = ({
7
- className,
8
- onSubmit,
9
- submiting,
10
- uploading,
11
- accept,
12
- ...props
13
- }: PaperProps & PromptInputProps) => {
14
- return (
15
- <Provider
16
- onSubmit={onSubmit}
17
- submiting={submiting}
18
- uploading={uploading}
19
- accept={accept}
20
- >
21
- <Paper
22
- radius="md"
23
- withBorder
24
- className={clsx('rolder-prompt-input-root', className)}
25
- {...props}
26
- />
27
- </Provider>
28
- );
29
- };
@@ -1,39 +0,0 @@
1
- import { ActionIcon, type ActionIconProps } from '@mantine/core';
2
- import { usePromptInput } from './PromptInputContext';
3
-
4
- export const Submit = ({ children, ...props }: ActionIconProps) => {
5
- const Icon = (
6
- <svg
7
- xmlns="http://www.w3.org/2000/svg"
8
- width="24"
9
- height="24"
10
- viewBox="0 0 24 24"
11
- fill="none"
12
- stroke="currentColor"
13
- strokeWidth="1.5"
14
- strokeLinecap="round"
15
- strokeLinejoin="round"
16
- role="img"
17
- aria-label="Submit"
18
- >
19
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
20
- <path d="M9 20v-8h-3.586a1 1 0 0 1 -.707 -1.707l6.586 -6.586a1 1 0 0 1 1.414 0l6.586 6.586a1 1 0 0 1 -.707 1.707h-3.586v8a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1" />
21
- </svg>
22
- );
23
-
24
- const { onSubmit, submiting, uploading } = usePromptInput();
25
-
26
- return (
27
- <ActionIcon
28
- aria-label="Submit"
29
- variant="light"
30
- size="lg"
31
- onClick={onSubmit}
32
- disabled={uploading}
33
- loading={submiting}
34
- {...props}
35
- >
36
- {children ?? Icon}
37
- </ActionIcon>
38
- );
39
- };
@@ -1,39 +0,0 @@
1
- import { Textarea as MantineTextarea, type TextareaProps } from '@mantine/core';
2
- import { type KeyboardEventHandler, useState } from 'react';
3
- import { usePromptInput } from './PromptInputContext';
4
-
5
- export const Textarea = (props: TextareaProps) => {
6
- const { text, setText, onSubmit, submiting, uploading } = usePromptInput();
7
- const [isComposing, setIsComposing] = useState(false);
8
-
9
- const handleKeyDown: KeyboardEventHandler<HTMLTextAreaElement> = (e) => {
10
- if (e.key === 'Enter') {
11
- if (isComposing || e.nativeEvent.isComposing) {
12
- return;
13
- }
14
- if (e.shiftKey) {
15
- return;
16
- }
17
- e.preventDefault();
18
-
19
- onSubmit();
20
- }
21
- };
22
-
23
- return (
24
- <MantineTextarea
25
- w="100%"
26
- size="md"
27
- rows={3}
28
- classNames={{ input: 'rolder-prompt-input-textarea' }}
29
- placeholder="Напишите сообщение"
30
- onCompositionEnd={() => setIsComposing(false)}
31
- onCompositionStart={() => setIsComposing(true)}
32
- onKeyDown={handleKeyDown}
33
- value={text}
34
- onChange={(e) => setText(e.target.value)}
35
- disabled={submiting || uploading}
36
- {...props}
37
- />
38
- );
39
- };
@@ -1,15 +0,0 @@
1
- import { File } from './File';
2
- import { Footer } from './Footer';
3
- import { Root } from './Root';
4
- import { Submit } from './Submit';
5
- import { Textarea } from './Textarea';
6
-
7
- export type { Accept, PromptInputProps } from './types';
8
-
9
- export const PromptInput = {
10
- Root,
11
- Textarea,
12
- Footer,
13
- Submit,
14
- File,
15
- };
@@ -1,9 +0,0 @@
1
- export type Accept = 'text' | 'image' | 'pdf' | 'excel' | 'word';
2
-
3
- export interface PromptInputProps {
4
- children: React.ReactNode;
5
- onSubmit: ({ text, file }: { text: string; file?: File }) => void;
6
- submiting: boolean;
7
- uploading: boolean;
8
- accept?: Accept[];
9
- }
@@ -1,29 +0,0 @@
1
- import type { FileUIPart } from 'ai';
2
-
3
- /**
4
- * Converts a blob URL to a data URL
5
- */
6
- async function blobToDataURL(blobUrl: string): Promise<string> {
7
- const response = await fetch(blobUrl);
8
- const blob = await response.blob();
9
-
10
- return new Promise((resolve, reject) => {
11
- const reader = new FileReader();
12
- reader.onload = () => resolve(reader.result as string);
13
- reader.onerror = reject;
14
- reader.readAsDataURL(blob);
15
- });
16
- }
17
-
18
- /**
19
- * Converts FileUIPart array with blob URLs to data URLs
20
- */
21
- export async function convertFileUIPartBlobToDataURL(
22
- file: FileUIPart,
23
- ): Promise<FileUIPart> {
24
- if (file.url.startsWith('blob:')) {
25
- const dataUrl = await blobToDataURL(file.url);
26
- return { ...file, url: dataUrl };
27
- }
28
- return file;
29
- }
@@ -1,19 +0,0 @@
1
- import { parsePartialJson, type TextUIPart } from 'ai';
2
-
3
- export const parseAiMessagePart = async <T extends TextUIPart>(
4
- part: T,
5
- ): Promise<T> => {
6
- if (!part.text.startsWith('{')) {
7
- return part;
8
- }
9
-
10
- try {
11
- // parsePartialJson возвращает промис с результатом
12
- // biome-ignore lint/suspicious/noExplicitAny: <parsePartialJson>
13
- const result = (await parsePartialJson(part.text)) as any;
14
- return result?.value || part;
15
- } catch (error) {
16
- console.error('Error parsing partial JSON:', error);
17
- return part; // Fallback к исходному тексту
18
- }
19
- };
@@ -1,21 +0,0 @@
1
- import { useComputedColorScheme } from '@mantine/core';
2
- import { useEffect } from 'react';
3
- import { setCookies } from '../functions/setCookies';
4
-
5
- export const AppDefaults = ({
6
- saveColorScheme,
7
- }: {
8
- saveColorScheme: boolean;
9
- }) => {
10
- const colorScheme = useComputedColorScheme();
11
-
12
- useEffect(() => {
13
- const tz = Intl.DateTimeFormat().resolvedOptions().timeZone;
14
- const cookies = [{ name: 'tz', value: tz, expires: 365 }];
15
- if (saveColorScheme)
16
- cookies.push({ name: 'colorScheme', value: colorScheme, expires: 365 });
17
- setCookies(cookies);
18
- }, [colorScheme, saveColorScheme]);
19
-
20
- return null;
21
- };
@@ -1,50 +0,0 @@
1
- import {
2
- ColorSchemeScript,
3
- MantineProvider,
4
- type MantineProviderProps,
5
- } from '@mantine/core';
6
- import { HeadContent, Scripts } from '@tanstack/react-router';
7
- import { getCookie } from '../functions/getCookie';
8
- import { AppDefaults } from './AppDefaults';
9
- import { cookieColorSchemeManager } from './cookieColorSchemeManager';
10
- import { defaultTheme } from './defaultTheme';
11
-
12
- interface Props extends MantineProviderProps {
13
- saveColorScheme?: boolean;
14
- }
15
-
16
- const colorSchemeManager = cookieColorSchemeManager();
17
-
18
- export const DefaultApp = ({
19
- children,
20
- saveColorScheme = true,
21
- defaultColorScheme = 'auto',
22
- ...props
23
- }: Props) => {
24
- const colorScheme = saveColorScheme
25
- ? getCookie('colorScheme', defaultColorScheme)
26
- : defaultColorScheme;
27
-
28
- return (
29
- <html lang="ru" suppressHydrationWarning>
30
- <head>
31
- <HeadContent />
32
- <ColorSchemeScript defaultColorScheme={colorScheme} />
33
- </head>
34
- <body>
35
- <MantineProvider
36
- defaultColorScheme={colorScheme}
37
- theme={defaultTheme}
38
- colorSchemeManager={colorSchemeManager}
39
- {...props}
40
- >
41
- <AppDefaults saveColorScheme={saveColorScheme} />
42
-
43
- {children}
44
- </MantineProvider>
45
-
46
- <Scripts />
47
- </body>
48
- </html>
49
- );
50
- };
@@ -1,70 +0,0 @@
1
- import {
2
- isMantineColorScheme,
3
- type MantineColorScheme,
4
- type MantineColorSchemeManager,
5
- } from '@mantine/core';
6
- import { atom } from 'nanostores';
7
- import { setCookie } from '../functions/setCookie';
8
-
9
- export interface CookieColorSchemeManager {
10
- /** Название куки, `colorScheme` по умолчанию */
11
- key?: string;
12
- }
13
-
14
- const $colorScheme = atom<MantineColorScheme | undefined>();
15
- let unsubscribeSystemTheme: (() => void) | undefined;
16
-
17
- export const cookieColorSchemeManager = ({
18
- key = 'colorScheme',
19
- }: CookieColorSchemeManager = {}): MantineColorSchemeManager => {
20
- return {
21
- get: (defaultValue) => {
22
- try {
23
- return $colorScheme.get() || defaultValue;
24
- } catch {
25
- return defaultValue;
26
- }
27
- },
28
-
29
- set: (value) => {
30
- try {
31
- setCookie(key, value);
32
- $colorScheme.set(value);
33
- } catch (error) {
34
- console.warn(
35
- '[cookieColorSchemeManager] Ошибка при сохранении цветовой схемы в куки.',
36
- error,
37
- );
38
- }
39
- },
40
-
41
- subscribe: (onUpdate) => {
42
- $colorScheme.listen((newValue) => {
43
- if (isMantineColorScheme(newValue)) {
44
- setCookie(key, newValue);
45
- onUpdate(newValue);
46
- }
47
- });
48
-
49
- // Listener на системную тему
50
- const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
51
- const handleSystemThemeChange = () => onUpdate('auto');
52
- mediaQuery.addEventListener('change', handleSystemThemeChange);
53
- unsubscribeSystemTheme = () =>
54
- mediaQuery.removeEventListener('change', handleSystemThemeChange);
55
- },
56
-
57
- unsubscribe: () => {
58
- $colorScheme.off();
59
- if (unsubscribeSystemTheme) {
60
- unsubscribeSystemTheme();
61
- unsubscribeSystemTheme = undefined;
62
- }
63
- },
64
-
65
- clear: () => {
66
- setCookie(key);
67
- $colorScheme.set(undefined);
68
- },
69
- };
70
- };
@@ -1,22 +0,0 @@
1
- import { createMiddleware } from '@tanstack/react-start';
2
- import {
3
- getCookie,
4
- getRequestHeader,
5
- setCookie,
6
- } from '@tanstack/react-start/server';
7
-
8
- const locale = createMiddleware().server(async ({ next }) => {
9
- const header = getRequestHeader('accept-language');
10
- const headerLocale = header?.split(',')[0] || 'ru-RU';
11
- const cookieLocale = getCookie('locale');
12
- const cookieTz = getCookie('tz');
13
-
14
- const locale = cookieLocale || headerLocale;
15
- const timeZone = cookieTz || 'UTC';
16
-
17
- setCookie('locale', locale, { path: '/', maxAge: 60 * 60 * 24 * 365 });
18
-
19
- return next({ context: { locale, timeZone } });
20
- });
21
-
22
- export const defaultRequestMiddlewares = [locale];
@@ -1,22 +0,0 @@
1
- import { createTheme, Modal } from '@mantine/core';
2
-
3
- export const defaultTheme = createTheme({
4
- components: {
5
- Modal: Modal.extend({
6
- defaultProps: {
7
- centered: true,
8
- padding: 'lg',
9
- },
10
- }),
11
- ModalTitle: Modal.Title.extend({
12
- defaultProps: { pr: 24 },
13
- }),
14
- ModalCloseButton: Modal.CloseButton.extend({
15
- defaultProps: {
16
- pos: 'absolute',
17
- top: 4,
18
- right: 4,
19
- },
20
- }),
21
- },
22
- });
@@ -1,36 +0,0 @@
1
- import { createIsomorphicFn } from '@tanstack/react-start';
2
- import { getCookie as getServerCookie } from '@tanstack/react-start/server';
3
- import Cookies from 'js-cookie';
4
-
5
- const getCookieImpl = createIsomorphicFn()
6
- .server(
7
- (name: string, defaultValue?: string) =>
8
- getServerCookie(name) || defaultValue,
9
- )
10
- .client(
11
- (name: string, defaultValue?: string) => Cookies.get(name) || defaultValue,
12
- );
13
-
14
- // Перегрузки функций для правильной типизации
15
- export function getCookie<T extends string>(name: string, defaultValue: T): T;
16
- export function getCookie(name: string, defaultValue: string): string;
17
- export function getCookie(
18
- name: string,
19
- defaultValue?: undefined,
20
- ): string | undefined;
21
-
22
- /**
23
- * Изоморфная функция для получения значения куки.
24
- * На клиенте использует библиотеку js-cookie для работы с куками.
25
- * На сервере использует функции getCookie и setCookie из tanstack start.
26
- *
27
- * @param {string} name - Имя куки
28
- * @param {string} [defaultValue] - Значение по умолчанию. Если value указан, создается новая кука с этим значением.
29
- * @returns {string | undefined} Значение куки из хранилища, либо значение по умолчанию (если кука не существует), либо undefined (если кука не существует и value не передан)
30
- */
31
- export function getCookie(
32
- name: string,
33
- defaultValue?: string,
34
- ): string | undefined {
35
- return getCookieImpl(name, defaultValue);
36
- }
@@ -1,29 +0,0 @@
1
- import { createIsomorphicFn } from '@tanstack/react-start';
2
- import {
3
- deleteCookie,
4
- setCookie as setServerCookie,
5
- } from '@tanstack/react-start/server';
6
- import Cookies from 'js-cookie';
7
-
8
- /**
9
- * Изоморфная функция для установки значения куки.
10
- * На клиенте использует библиотеку js-cookie для работы с куками.
11
- * На сервере использует функции getCookie и setCookie из tanstack start.
12
- *
13
- * @param {string} name - Имя куки
14
- * @param {string} value - Значение куки, если не указано, кука будет удалена
15
- * @param {number} [expires=7] - Количество дней до истечения срока действия куки (по умолчанию 7 дней)
16
- */
17
- export const setCookie = createIsomorphicFn()
18
- .server((name: string, value?: string, expires?: number) => {
19
- const expiresDate = new Date();
20
- expiresDate.setDate(expiresDate.getDate() + (expires || 7));
21
- if (value) setServerCookie(name, value, { expires: expiresDate });
22
- else deleteCookie(name);
23
- })
24
- .client((name: string, value?: string, expires?: number) => {
25
- const expiresDate = new Date();
26
- expiresDate.setDate(expiresDate.getDate() + (expires || 7));
27
- if (value) Cookies.set(name, value, { expires: expiresDate });
28
- else Cookies.remove(name);
29
- });