@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,92 +0,0 @@
1
- import { Loader } from '@mantine/core';
2
- import { RichTextEditor } from '@mantine/tiptap';
3
- import type { ReactNode } from 'react';
4
- import { useEditor } from './Provider';
5
-
6
- export const Toolbar = ({
7
- saving,
8
- children,
9
- }: {
10
- saving?: boolean;
11
- children?: ReactNode;
12
- }) => {
13
- const { editor, disabledToolbar } = useEditor();
14
-
15
- return !disabledToolbar ? (
16
- <RichTextEditor.Toolbar sticky>
17
- <RichTextEditor.ControlsGroup>
18
- <RichTextEditor.Bold disabled={!editor?.isEditable} />
19
- <RichTextEditor.Italic disabled={!editor?.isEditable} />
20
- <RichTextEditor.Underline disabled={!editor?.isEditable} />
21
- <RichTextEditor.Strikethrough disabled={!editor?.isEditable} />
22
- <RichTextEditor.ClearFormatting disabled={!editor?.isEditable} />
23
- <RichTextEditor.Highlight disabled={!editor?.isEditable} />
24
- <RichTextEditor.Code disabled={!editor?.isEditable} />
25
- </RichTextEditor.ControlsGroup>
26
-
27
- <RichTextEditor.ControlsGroup>
28
- <RichTextEditor.H1 disabled={!editor?.isEditable} />
29
- <RichTextEditor.H2 disabled={!editor?.isEditable} />
30
- <RichTextEditor.H3 disabled={!editor?.isEditable} />
31
- <RichTextEditor.H4 disabled={!editor?.isEditable} />
32
- </RichTextEditor.ControlsGroup>
33
-
34
- <RichTextEditor.ControlsGroup>
35
- <RichTextEditor.Blockquote disabled={!editor?.isEditable} />
36
- <RichTextEditor.Hr disabled={!editor?.isEditable} />
37
- <RichTextEditor.BulletList disabled={!editor?.isEditable} />
38
- <RichTextEditor.OrderedList disabled={!editor?.isEditable} />
39
- </RichTextEditor.ControlsGroup>
40
-
41
- <RichTextEditor.ControlsGroup>
42
- <RichTextEditor.TaskList disabled={!editor?.isEditable} />
43
- <RichTextEditor.TaskListLift disabled={!editor?.isEditable} />
44
- <RichTextEditor.TaskListSink disabled={!editor?.isEditable} />
45
- </RichTextEditor.ControlsGroup>
46
-
47
- <RichTextEditor.ControlsGroup>
48
- <RichTextEditor.Link disabled={!editor?.isEditable} />
49
- <RichTextEditor.Unlink disabled={!editor?.isEditable} />
50
- </RichTextEditor.ControlsGroup>
51
-
52
- <RichTextEditor.ControlsGroup>
53
- <RichTextEditor.AlignLeft disabled={!editor?.isEditable} />
54
- <RichTextEditor.AlignCenter disabled={!editor?.isEditable} />
55
- <RichTextEditor.AlignJustify disabled={!editor?.isEditable} />
56
- <RichTextEditor.AlignRight disabled={!editor?.isEditable} />
57
- </RichTextEditor.ControlsGroup>
58
-
59
- <RichTextEditor.ControlsGroup>
60
- <RichTextEditor.Undo disabled={!editor?.isEditable} />
61
- <RichTextEditor.Redo disabled={!editor?.isEditable} />
62
- </RichTextEditor.ControlsGroup>
63
-
64
- <RichTextEditor.ControlsGroup ml="auto">
65
- {children}
66
-
67
- <RichTextEditor.Control ml="10px" style={{ cursor: 'default' }}>
68
- {saving ? (
69
- <Loader size={14} />
70
- ) : (
71
- <svg
72
- xmlns="http://www.w3.org/2000/svg"
73
- width="16"
74
- height="16"
75
- viewBox="0 0 16 16"
76
- fill="none"
77
- stroke="currentColor"
78
- strokeWidth="1.5"
79
- strokeLinecap="round"
80
- strokeLinejoin="round"
81
- role="img"
82
- aria-label="Saved"
83
- >
84
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
85
- <path d="M5 12l5 5l10 -10" />
86
- </svg>
87
- )}
88
- </RichTextEditor.Control>
89
- </RichTextEditor.ControlsGroup>
90
- </RichTextEditor.Toolbar>
91
- ) : null;
92
- };
@@ -1,13 +0,0 @@
1
- import { Content } from './Content';
2
- import { Provider } from './Provider';
3
- import { Root } from './Root';
4
- import { Toolbar } from './Toolbar';
5
-
6
- export const Editor = {
7
- Root,
8
- Content,
9
- Toolbar,
10
- Provider,
11
- };
12
-
13
- export { useEditor } from './Provider';
@@ -1,7 +0,0 @@
1
- export interface EditorProps {
2
- children: React.ReactNode;
3
- initialContent?: string;
4
- initialEditable?: boolean;
5
- initialDisabledToolbar?: boolean;
6
- onChange?: (value: string) => void;
7
- }
@@ -1,60 +0,0 @@
1
- import { Button, Group, Stack, Title } from '@mantine/core';
2
- import type { ErrorComponentProps } from '@tanstack/react-router';
3
- import { rootRouteId, useMatch, useRouter } from '@tanstack/react-router';
4
- import { RouterLink } from '../RouterLink';
5
-
6
- export const DefaultError = ({ error }: ErrorComponentProps) => {
7
- const router = useRouter();
8
- const isRoot = useMatch({
9
- strict: false,
10
- select: (state) => state.id === rootRouteId,
11
- });
12
-
13
- return (
14
- <Stack align="center" justify="center" gap={0} ta="center" h="100vh">
15
- <Title textWrap="balance" size={65}>
16
- Произошла ошибка!
17
- </Title>
18
- {error.message && (
19
- <Title
20
- order={3}
21
- ml={4}
22
- textWrap="balance"
23
- c="var(--mantine-color-error)"
24
- >
25
- {error.message}
26
- </Title>
27
- )}
28
-
29
- <Group>
30
- <Button
31
- mt="xl"
32
- size="lg"
33
- variant="light"
34
- onClick={() => {
35
- router.invalidate();
36
- }}
37
- >
38
- Попробовать еще раз
39
- </Button>
40
- {isRoot ? (
41
- <RouterLink.Button to="/" mt="xl" size="lg" radius="md">
42
- На главную
43
- </RouterLink.Button>
44
- ) : (
45
- <Button
46
- mt="xl"
47
- radius="md"
48
- size="lg"
49
- onClick={(e) => {
50
- e.preventDefault();
51
- router.history.back();
52
- }}
53
- >
54
- Назад
55
- </Button>
56
- )}
57
- </Group>
58
- </Stack>
59
- );
60
- };
@@ -1,19 +0,0 @@
1
- import { Stack, Text, Title } from '@mantine/core';
2
- import { RouterLink } from '../RouterLink';
3
-
4
- export const DefaultNotFound = () => (
5
- <Stack align="center" justify="center" gap={0} ta="center" h="100vh">
6
- <Text c="dimmed" fw="bold">
7
- 404
8
- </Text>
9
- <Title textWrap="balance" size={65}>
10
- Страница не найдена
11
- </Title>
12
- <Title order={3} ml={4} textWrap="balance" c="dimmed">
13
- Извините, но здесь нет страницы. Возможно она перемещена.
14
- </Title>
15
- <RouterLink.Button to="/" mt="xl" size="lg" radius="md">
16
- На главную
17
- </RouterLink.Button>
18
- </Stack>
19
- );
@@ -1,18 +0,0 @@
1
- import { Stack, Title } from '@mantine/core';
2
- import { RouterLink } from '../RouterLink';
3
-
4
- export const Forbidden = () => (
5
- <Stack align="center" justify="center" gap={0} ta="center" h="100vh">
6
- <Title textWrap="balance" size={65}>
7
- Доступ запрещен!
8
- </Title>
9
-
10
- <Title order={3} ml={4} textWrap="balance" c="var(--mantine-color-error)">
11
- У вас нет доступа к этой странице
12
- </Title>
13
-
14
- <RouterLink.Button to="/" mt="xl" size="lg" radius="md">
15
- На главную
16
- </RouterLink.Button>
17
- </Stack>
18
- );
@@ -1,9 +0,0 @@
1
- import { notifications } from '@mantine/notifications';
2
-
3
- export const defaultErrorNotification = (error: Error) =>
4
- notifications.show({
5
- title: 'Системная ошибка',
6
- message: error.message,
7
- color: 'red',
8
- autoClose: false,
9
- });
@@ -1,21 +0,0 @@
1
- import type { AnyFormApi } from '@tanstack/react-form';
2
-
3
- export const blurOnError = ({ formApi }: { formApi: AnyFormApi }) => {
4
- const inputNames = Array.from(
5
- new Set(
6
- Object.keys(formApi.state.fieldMeta).filter(
7
- (i) => formApi.state.fieldMeta[i]?.errors.length,
8
- ),
9
- ),
10
- );
11
-
12
- for (const inputName of inputNames) {
13
- const input = document.querySelector(
14
- `#form input[name="${inputName}"]`,
15
- ) as HTMLInputElement | null;
16
- if (input) {
17
- input.focus();
18
- break;
19
- }
20
- }
21
- };
@@ -1,42 +0,0 @@
1
- import { Button, type ButtonProps } from '@mantine/core';
2
- import { useFormContext } from '../context';
3
-
4
- export const CancelButton = (
5
- props: ButtonProps & { label?: string; onClick?: () => void },
6
- ) => {
7
- const form = useFormContext();
8
- return (
9
- <form.Subscribe selector={(state) => state.isSubmitting}>
10
- {(isSubmitting) => (
11
- <Button
12
- type="reset"
13
- size="xs"
14
- variant="light"
15
- leftSection={
16
- <svg
17
- xmlns="http://www.w3.org/2000/svg"
18
- width="16"
19
- height="16"
20
- viewBox="0 0 16 16"
21
- fill="none"
22
- stroke="currentColor"
23
- strokeWidth="2"
24
- strokeLinecap="round"
25
- strokeLinejoin="round"
26
- role="img"
27
- aria-label="Cancel"
28
- >
29
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
30
- <path d="M3 12a9 9 0 1 0 18 0a9 9 0 1 0 -18 0" />
31
- <path d="M18.364 5.636l-12.728 12.728" />
32
- </svg>
33
- }
34
- disabled={isSubmitting}
35
- {...props}
36
- >
37
- {props.label || 'Отмена'}
38
- </Button>
39
- )}
40
- </form.Subscribe>
41
- );
42
- };
@@ -1,43 +0,0 @@
1
- import { Button, type ButtonProps } from '@mantine/core';
2
- import { useFormContext } from '../context';
3
-
4
- export const SubmitButton = (
5
- props: ButtonProps & { label?: string; onClick?: () => void },
6
- ) => {
7
- const form = useFormContext();
8
- return (
9
- <form.Subscribe selector={(state) => state}>
10
- {(state) => (
11
- <Button
12
- type="submit"
13
- size="xs"
14
- leftSection={
15
- <svg
16
- xmlns="http://www.w3.org/2000/svg"
17
- width="20"
18
- height="20"
19
- viewBox="0 0 20 20"
20
- fill="none"
21
- stroke="currentColor"
22
- strokeWidth="2"
23
- strokeLinecap="round"
24
- strokeLinejoin="round"
25
- role="img"
26
- aria-label="Submit"
27
- >
28
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
29
- <path d="M6 4h10l4 4v10a2 2 0 0 1 -2 2h-12a2 2 0 0 1 -2 -2v-12a2 2 0 0 1 2 -2" />
30
- <path d="M10 14a2 2 0 1 0 4 0a2 2 0 1 0 -4 0" />
31
- <path d="M14 4l0 4l-6 0l0 -4" />
32
- </svg>
33
- }
34
- loading={state.isSubmitting}
35
- disabled={!state.isDirty}
36
- {...props}
37
- >
38
- {props.label || 'Сохранить'}
39
- </Button>
40
- )}
41
- </form.Subscribe>
42
- );
43
- };
@@ -1,18 +0,0 @@
1
- import { ActionIcon, type ActionIconProps } from '@mantine/core';
2
- import { useFormContext } from '../context';
3
-
4
- export const SubscribeActionIcon = (
5
- props: ActionIconProps & { onClick?: () => void },
6
- ) => {
7
- const form = useFormContext();
8
-
9
- return (
10
- <form.Subscribe selector={(state) => state.isSubmitting}>
11
- {(isSubmitting) => (
12
- <ActionIcon disabled={isSubmitting} {...props}>
13
- {props.children}
14
- </ActionIcon>
15
- )}
16
- </form.Subscribe>
17
- );
18
- };
@@ -1,17 +0,0 @@
1
- import { Button, type ButtonProps } from '@mantine/core';
2
- import { useFormContext } from '../context';
3
-
4
- export const SubscribeButton = (
5
- props: ButtonProps & { label: string; onClick?: () => void },
6
- ) => {
7
- const form = useFormContext();
8
- return (
9
- <form.Subscribe selector={(state) => state.isSubmitting}>
10
- {(isSubmitting) => (
11
- <Button type="button" disabled={isSubmitting} {...props}>
12
- {props.label}
13
- </Button>
14
- )}
15
- </form.Subscribe>
16
- );
17
- };
@@ -1,45 +0,0 @@
1
- import { createFormHook, createFormHookContexts } from '@tanstack/react-form';
2
- import {
3
- CancelButton,
4
- SubmitButton,
5
- SubscribeActionIcon,
6
- SubscribeButton,
7
- } from './buttons';
8
- import {
9
- JsonField,
10
- MultiSelectField,
11
- NumberField,
12
- PassowrdField,
13
- SelectField,
14
- SwitchField,
15
- TextareaField,
16
- TextField,
17
- TextPassowrdField,
18
- } from './fields';
19
-
20
- const { fieldContext, useFieldContext, formContext, useFormContext } =
21
- createFormHookContexts();
22
-
23
- const { useAppForm, withForm } = createFormHook({
24
- fieldComponents: {
25
- TextField,
26
- NumberField,
27
- TextareaField,
28
- TextPassowrdField,
29
- PassowrdField,
30
- SelectField,
31
- MultiSelectField,
32
- SwitchField,
33
- JsonField,
34
- },
35
- formComponents: {
36
- SubmitButton,
37
- CancelButton,
38
- SubscribeButton,
39
- SubscribeActionIcon,
40
- },
41
- fieldContext,
42
- formContext,
43
- });
44
-
45
- export { useAppForm, useFieldContext, useFormContext, withForm };
@@ -1,16 +0,0 @@
1
- import type { ReactCodeMirrorProps } from '@uiw/react-codemirror';
2
- import { JsonInput } from '../../JsonInput';
3
- import { useFieldContext } from '../context';
4
-
5
- export const JsonField = (props: ReactCodeMirrorProps) => {
6
- const field = useFieldContext<string>();
7
-
8
- return (
9
- <JsonInput
10
- value={field.state.value || ''}
11
- onChange={field.handleChange}
12
- onBlur={field.handleBlur}
13
- {...props}
14
- />
15
- );
16
- };
@@ -1,17 +0,0 @@
1
- import { MultiSelect, type MultiSelectProps } from '@mantine/core';
2
- import { useFieldContext } from '../context';
3
-
4
- export const MultiSelectField = (props: MultiSelectProps) => {
5
- const field = useFieldContext<string[]>();
6
-
7
- return (
8
- <MultiSelect
9
- name={field.name}
10
- value={field.state.value || []}
11
- onChange={field.handleChange}
12
- onBlur={field.handleBlur}
13
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
14
- {...props}
15
- />
16
- );
17
- };
@@ -1,17 +0,0 @@
1
- import { NumberInput, type NumberInputProps } from '@mantine/core';
2
- import { useFieldContext } from '../context';
3
-
4
- export const NumberField = (props: NumberInputProps) => {
5
- const field = useFieldContext<string | number>();
6
-
7
- return (
8
- <NumberInput
9
- name={field.name}
10
- value={field.state.value || ''}
11
- onChange={(v) => field.handleChange(v)}
12
- onBlur={field.handleBlur}
13
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
14
- {...props}
15
- />
16
- );
17
- };
@@ -1,20 +0,0 @@
1
- import { PasswordInput, type PasswordInputProps } from '@mantine/core';
2
- import { useFieldContext } from '../context';
3
-
4
- export const PassowrdField = (props: PasswordInputProps) => {
5
- const field = useFieldContext<string>();
6
-
7
- return (
8
- <PasswordInput
9
- size="lg"
10
- label="Пароль"
11
- placeholder="Введите пароль"
12
- name={field.name}
13
- value={field.state.value || ''}
14
- onChange={(e) => field.handleChange(e.target.value)}
15
- onBlur={field.handleBlur}
16
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
17
- {...props}
18
- />
19
- );
20
- };
@@ -1,17 +0,0 @@
1
- import { Select, type SelectProps } from '@mantine/core';
2
- import { useFieldContext } from '../context';
3
-
4
- export const SelectField = (props: SelectProps) => {
5
- const field = useFieldContext<string | null>();
6
-
7
- return (
8
- <Select
9
- name={field.name}
10
- value={field.state.value}
11
- onChange={field.handleChange}
12
- onBlur={field.handleBlur}
13
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
14
- {...props}
15
- />
16
- );
17
- };
@@ -1,17 +0,0 @@
1
- import { Switch, type SwitchProps } from '@mantine/core';
2
- import { useFieldContext } from '../context';
3
-
4
- export const SwitchField = (props: SwitchProps) => {
5
- const field = useFieldContext<boolean>();
6
-
7
- return (
8
- <Switch
9
- name={field.name}
10
- checked={field.state.value}
11
- onChange={(e) => field.handleChange(e.currentTarget.checked)}
12
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
13
- w="fit-content"
14
- {...props}
15
- />
16
- );
17
- };
@@ -1,17 +0,0 @@
1
- import { TextInput, type TextInputProps } from '@mantine/core';
2
- import { useFieldContext } from '../context';
3
-
4
- export const TextField = (props: TextInputProps) => {
5
- const field = useFieldContext<string>();
6
-
7
- return (
8
- <TextInput
9
- name={field.name}
10
- value={field.state.value || ''}
11
- onChange={(e) => field.handleChange(e.target.value)}
12
- onBlur={field.handleBlur}
13
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
14
- {...props}
15
- />
16
- );
17
- };
@@ -1,51 +0,0 @@
1
- import { ActionIcon, TextInput, type TextInputProps } from '@mantine/core';
2
- import generatePassword from 'omgopass';
3
- import { useFieldContext } from '../context';
4
-
5
- export const TextPassowrdField = (props: TextInputProps) => {
6
- const field = useFieldContext<string>();
7
-
8
- return (
9
- <TextInput
10
- label="Пароль"
11
- placeholder="Введите пароль"
12
- rightSection={
13
- <ActionIcon
14
- variant="light"
15
- onClick={() =>
16
- field.setValue(
17
- generatePassword({
18
- minSyllableLength: 2,
19
- maxSyllableLength: 2,
20
- }),
21
- )
22
- }
23
- >
24
- <svg
25
- xmlns="http://www.w3.org/2000/svg"
26
- width="16"
27
- height="16"
28
- viewBox="0 0 16 16"
29
- fill="none"
30
- stroke="currentColor"
31
- strokeWidth="2"
32
- strokeLinecap="round"
33
- strokeLinejoin="round"
34
- role="img"
35
- aria-label="Refresh"
36
- >
37
- <path stroke="none" d="M0 0h24v24H0z" fill="none" />
38
- <path d="M20 11a8.1 8.1 0 0 0 -15.5 -2m-.5 -4v4h4" />
39
- <path d="M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4" />
40
- </svg>
41
- </ActionIcon>
42
- }
43
- name={field.name}
44
- value={field.state.value || ''}
45
- onChange={(e) => field.handleChange(e.target.value)}
46
- onBlur={field.handleBlur}
47
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
48
- {...props}
49
- />
50
- );
51
- };
@@ -1,17 +0,0 @@
1
- import { Textarea, type TextareaProps } from '@mantine/core';
2
- import { useFieldContext } from '../context';
3
-
4
- export const TextareaField = (props: TextareaProps) => {
5
- const field = useFieldContext<string>();
6
-
7
- return (
8
- <Textarea
9
- name={field.name}
10
- value={field.state.value || ''}
11
- onChange={(e) => field.handleChange(e.target.value)}
12
- onBlur={field.handleBlur}
13
- error={field.state.meta.errors.map((error) => error.message).join(', ')}
14
- {...props}
15
- />
16
- );
17
- };
@@ -1,24 +0,0 @@
1
- import z from 'zod/v4';
2
-
3
- export const fieldsSchema = {
4
- id: z.string().min(1, 'ID не может быть пустым'),
5
- str: z.string().min(1, 'Значение не может быть пустым'),
6
- strArr: z.array(z.string().min(1, 'Значение не может быть пустым')),
7
- strMin3: z.string().min(3, 'Должно содержать не менее 3 символов'),
8
- select: z.string().min(1, 'Выберите значение'),
9
- email: z.email('Неверный формат email'),
10
- username: z
11
- .string()
12
- .min(3, 'Должен быть не менее 3 символов')
13
- .max(24, 'Должен быть не более 24 символов'),
14
- password: z
15
- .string('Пароль не может быть пустым')
16
- .min(8, 'Пароль должен содержать не менее 8 символов'),
17
- kebab: z
18
- .string()
19
- .min(3, 'Минимум 3 символа')
20
- .regex(
21
- /^[a-z0-9]+(-[a-z0-9]+)*$/,
22
- 'Должен быть в формате kebab-case (только строчные буквы, цифры и дефисы)',
23
- ),
24
- };
@@ -1,17 +0,0 @@
1
- import { type ElementProps, Paper, type PaperProps } from '@mantine/core';
2
- import { forwardRef } from 'react';
3
-
4
- interface Props extends PaperProps, ElementProps<'div', keyof PaperProps> {
5
- disabled?: boolean;
6
- }
7
-
8
- export const HoverPaper = forwardRef<HTMLDivElement, Props>(
9
- ({ disabled, classNames, ...props }: Props, ref) => (
10
- <Paper
11
- ref={ref}
12
- classNames={{ root: 'rolder-hover-paper-root', ...classNames }}
13
- mod={{ disabled }}
14
- {...props}
15
- />
16
- ),
17
- );
@@ -1,9 +0,0 @@
1
- import { useHover } from '@mantine/hooks';
2
-
3
- export const usePaperHover = (): {
4
- paperHovered: boolean;
5
- paperRef: (node: HTMLDivElement | null) => void;
6
- } => {
7
- const { hovered: paperHovered, ref: paperRef } = useHover<HTMLDivElement>();
8
- return { paperHovered, paperRef };
9
- };