@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.
- package/dist/ai/ui/conversation/ConversationContext.d.ts +7 -0
- package/dist/ai/ui/conversation/ConversationContext.js +8 -0
- package/dist/ai/ui/conversation/ConversationProvider.d.ts +2 -0
- package/dist/ai/ui/conversation/ConversationProvider.js +14 -0
- package/dist/ai/ui/conversation/Empty.d.ts +1 -0
- package/dist/ai/ui/conversation/Empty.js +21 -0
- package/dist/ai/ui/conversation/File.d.ts +4 -0
- package/dist/ai/ui/conversation/File.js +42 -0
- package/dist/ai/ui/conversation/FileIcon.d.ts +3 -0
- package/dist/ai/ui/conversation/FileIcon.js +225 -0
- package/dist/ai/ui/conversation/Loader.d.ts +2 -0
- package/dist/ai/ui/conversation/Loader.js +12 -0
- package/dist/ai/ui/conversation/Message.d.ts +4 -0
- package/dist/ai/ui/conversation/Message.js +25 -0
- package/dist/ai/ui/conversation/Root.d.ts +2 -0
- package/dist/ai/ui/conversation/Root.js +26 -0
- package/dist/ai/ui/conversation/index.d.ts +13 -0
- package/dist/ai/ui/conversation/index.js +14 -0
- package/{src/ai/ui/conversation/types.ts → dist/ai/ui/conversation/types.d.ts} +4 -5
- package/dist/ai/ui/conversation/types.js +0 -0
- package/dist/ai/ui/conversation/useChatMessage.d.ts +2 -0
- package/dist/ai/ui/conversation/useChatMessage.js +12 -0
- package/dist/ai/ui/promptInput/File.d.ts +2 -0
- package/dist/ai/ui/promptInput/File.js +117 -0
- package/dist/ai/ui/promptInput/FileIcon.d.ts +3 -0
- package/dist/ai/ui/promptInput/FileIcon.js +225 -0
- package/dist/ai/ui/promptInput/Footer.d.ts +2 -0
- package/dist/ai/ui/promptInput/Footer.js +8 -0
- package/dist/ai/ui/promptInput/PromptInputContext.d.ts +12 -0
- package/dist/ai/ui/promptInput/PromptInputContext.js +8 -0
- package/dist/ai/ui/promptInput/PromptInputProvider.d.ts +2 -0
- package/dist/ai/ui/promptInput/PromptInputProvider.js +50 -0
- package/dist/ai/ui/promptInput/Root.d.ts +3 -0
- package/dist/ai/ui/promptInput/Root.js +17 -0
- package/dist/ai/ui/promptInput/Submit.d.ts +2 -0
- package/dist/ai/ui/promptInput/Submit.js +40 -0
- package/dist/ai/ui/promptInput/Textarea.d.ts +2 -0
- package/dist/ai/ui/promptInput/Textarea.js +33 -0
- package/dist/ai/ui/promptInput/index.d.ts +8 -0
- package/dist/ai/ui/promptInput/index.js +13 -0
- package/dist/ai/ui/promptInput/types.d.ts +11 -0
- package/dist/ai/ui/promptInput/types.js +0 -0
- package/dist/ai/utils/convertFileUIPartBlobToDataURL.d.ts +5 -0
- package/dist/ai/utils/convertFileUIPartBlobToDataURL.js +21 -0
- package/dist/ai/utils/parseAiMessagePart.d.ts +2 -0
- package/dist/ai/utils/parseAiMessagePart.js +12 -0
- package/dist/app/AppDefaults.d.ts +3 -0
- package/dist/app/AppDefaults.js +27 -0
- package/dist/app/DefaultApp.d.ts +6 -0
- package/dist/app/DefaultApp.js +43 -0
- package/dist/app/cookieColorSchemeManager.d.ts +6 -0
- package/dist/app/cookieColorSchemeManager.js +46 -0
- package/dist/app/defaultRequestMiddlewares.d.ts +4 -0
- package/dist/app/defaultRequestMiddlewares.js +24 -0
- package/dist/app/defaultTheme.d.ts +141 -0
- package/dist/app/defaultTheme.js +24 -0
- package/dist/functions/getCookie.d.ts +3 -0
- package/dist/functions/getCookie.js +8 -0
- package/dist/functions/setCookie.d.ts +10 -0
- package/dist/functions/setCookie.js +19 -0
- package/dist/functions/setCookies.d.ts +14 -0
- package/dist/functions/setCookies.js +13 -0
- package/dist/hooks/useMutation.d.ts +4 -0
- package/dist/hooks/useMutation.js +8 -0
- package/dist/hooks/useMutationWithInvalidate.d.ts +4 -0
- package/dist/hooks/useMutationWithInvalidate.js +16 -0
- package/{src/index.ts → dist/index.d.ts} +5 -45
- package/dist/index.js +26 -0
- package/{src → dist}/styles.css +11 -21
- package/dist/surreal/connection.d.ts +9 -0
- package/dist/surreal/connection.js +49 -0
- package/dist/surreal/deafaultCrud.d.ts +2 -0
- package/dist/surreal/deafaultCrud.js +18 -0
- package/dist/surreal/deserialize.d.ts +17 -0
- package/dist/surreal/deserialize.js +46 -0
- package/dist/surreal/encryption.d.ts +6 -0
- package/dist/surreal/encryption.js +30 -0
- package/dist/ui/AnimatedChevron.d.ts +6 -0
- package/dist/ui/AnimatedChevron.js +31 -0
- package/dist/ui/JsonInput.d.ts +2 -0
- package/dist/ui/JsonInput.js +45 -0
- package/dist/ui/RouterLink.d.ts +16 -0
- package/dist/ui/RouterLink.js +36 -0
- package/dist/ui/editor/Content.d.ts +3 -0
- package/dist/ui/editor/Content.js +13 -0
- package/dist/ui/editor/Provider.d.ts +17 -0
- package/dist/ui/editor/Provider.js +80 -0
- package/dist/ui/editor/Root.d.ts +2 -0
- package/dist/ui/editor/Root.js +18 -0
- package/dist/ui/editor/Toolbar.d.ts +5 -0
- package/dist/ui/editor/Toolbar.js +156 -0
- package/dist/ui/editor/index.d.ts +12 -0
- package/dist/ui/editor/index.js +11 -0
- package/dist/ui/editor/types.d.ts +7 -0
- package/dist/ui/editor/types.js +0 -0
- package/dist/ui/error/DefaultError.d.ts +2 -0
- package/dist/ui/error/DefaultError.js +62 -0
- package/dist/ui/error/DefaultNotFound.d.ts +1 -0
- package/dist/ui/error/DefaultNotFound.js +37 -0
- package/dist/ui/error/Forbidden.d.ts +1 -0
- package/dist/ui/error/Forbidden.js +32 -0
- package/dist/ui/error/defaultErrorNotification.d.ts +1 -0
- package/dist/ui/error/defaultErrorNotification.js +8 -0
- package/dist/ui/error/index.js +5 -0
- package/dist/ui/form/blurOnError.d.ts +4 -0
- package/dist/ui/form/blurOnError.js +11 -0
- package/dist/ui/form/buttons/CancelButton.d.ts +5 -0
- package/dist/ui/form/buttons/CancelButton.js +44 -0
- package/dist/ui/form/buttons/SubmitButton.d.ts +5 -0
- package/dist/ui/form/buttons/SubmitButton.js +47 -0
- package/dist/ui/form/buttons/SubscribeActionIcon.d.ts +4 -0
- package/dist/ui/form/buttons/SubscribeActionIcon.js +15 -0
- package/dist/ui/form/buttons/SubscribeButton.d.ts +5 -0
- package/dist/ui/form/buttons/SubscribeButton.js +16 -0
- package/dist/ui/form/buttons/index.js +4 -0
- package/dist/ui/form/context.d.ts +83 -0
- package/dist/ui/form/context.js +26 -0
- package/dist/ui/form/fields/JsonField.d.ts +2 -0
- package/dist/ui/form/fields/JsonField.js +13 -0
- package/dist/ui/form/fields/MultiSelectField.d.ts +2 -0
- package/dist/ui/form/fields/MultiSelectField.js +15 -0
- package/dist/ui/form/fields/NumberField.d.ts +2 -0
- package/dist/ui/form/fields/NumberField.js +15 -0
- package/dist/ui/form/fields/PassowrdField.d.ts +2 -0
- package/dist/ui/form/fields/PassowrdField.js +18 -0
- package/dist/ui/form/fields/SelectField.d.ts +2 -0
- package/dist/ui/form/fields/SelectField.js +15 -0
- package/dist/ui/form/fields/SwitchField.d.ts +2 -0
- package/dist/ui/form/fields/SwitchField.js +15 -0
- package/dist/ui/form/fields/TextField.d.ts +2 -0
- package/dist/ui/form/fields/TextField.js +15 -0
- package/dist/ui/form/fields/TextPassowrdField.d.ts +2 -0
- package/dist/ui/form/fields/TextPassowrdField.js +51 -0
- package/dist/ui/form/fields/TextareaField.d.ts +2 -0
- package/dist/ui/form/fields/TextareaField.js +15 -0
- package/dist/ui/form/fields/index.js +9 -0
- package/dist/ui/form/fieldsSchema.d.ts +12 -0
- package/dist/ui/form/fieldsSchema.js +13 -0
- package/dist/ui/form/index.js +4 -0
- package/dist/ui/hoverPaper/HoverPaper.d.ts +6 -0
- package/dist/ui/hoverPaper/HoverPaper.js +15 -0
- package/dist/ui/hoverPaper/index.js +3 -0
- package/dist/ui/hoverPaper/usePaperHover.d.ts +4 -0
- package/dist/ui/hoverPaper/usePaperHover.js +9 -0
- package/dist/ui/saveInput/JsonInput.d.ts +6 -0
- package/dist/ui/saveInput/JsonInput.js +34 -0
- package/dist/ui/saveInput/NumberInput.d.ts +6 -0
- package/dist/ui/saveInput/NumberInput.js +27 -0
- package/dist/ui/saveInput/SaveInput.d.ts +36 -0
- package/dist/ui/saveInput/SaveInput.js +15 -0
- package/dist/ui/saveInput/Select.d.ts +6 -0
- package/dist/ui/saveInput/Select.js +27 -0
- package/dist/ui/saveInput/Switch.d.ts +6 -0
- package/dist/ui/saveInput/Switch.js +30 -0
- package/dist/ui/saveInput/TextInput.d.ts +6 -0
- package/dist/ui/saveInput/TextInput.js +26 -0
- package/dist/ui/saveInput/Textarea.d.ts +6 -0
- package/dist/ui/saveInput/Textarea.js +26 -0
- package/dist/ui/saveInput/index.js +2 -0
- package/{src/ui/scrollArea/ScrollArea.tsx → dist/ui/scrollArea/ScrollArea.d.ts} +10 -41
- package/dist/ui/scrollArea/ScrollArea.js +30 -0
- package/dist/ui/scrollArea/ScrollAreaButton.d.ts +5 -0
- package/dist/ui/scrollArea/ScrollAreaButton.js +51 -0
- package/dist/ui/scrollArea/ScrollAreaContent.d.ts +6 -0
- package/dist/ui/scrollArea/ScrollAreaContent.js +29 -0
- package/{src/ui/scrollArea/context.tsx → dist/ui/scrollArea/context.d.ts} +3 -18
- package/dist/ui/scrollArea/context.js +10 -0
- package/dist/ui/scrollArea/index.d.ts +3 -0
- package/dist/ui/scrollArea/index.js +3 -0
- package/dist/ui/scrollArea/types.d.ts +65 -0
- package/dist/ui/scrollArea/types.js +0 -0
- package/dist/ui/scrollArea/useScrollArea.d.ts +9 -0
- package/dist/ui/scrollArea/useScrollArea.js +146 -0
- package/package.json +4 -1
- package/rslib.config.ts +0 -21
- package/src/ai/ui/conversation/ConversationContext.ts +0 -21
- package/src/ai/ui/conversation/ConversationProvider.tsx +0 -21
- package/src/ai/ui/conversation/Empty.tsx +0 -15
- package/src/ai/ui/conversation/File.tsx +0 -40
- package/src/ai/ui/conversation/FileIcon.tsx +0 -143
- package/src/ai/ui/conversation/Loader.tsx +0 -8
- package/src/ai/ui/conversation/Message.tsx +0 -34
- package/src/ai/ui/conversation/Root.tsx +0 -24
- package/src/ai/ui/conversation/index.ts +0 -16
- package/src/ai/ui/conversation/useChatMessage.ts +0 -13
- package/src/ai/ui/promptInput/File.tsx +0 -98
- package/src/ai/ui/promptInput/FileIcon.tsx +0 -149
- package/src/ai/ui/promptInput/Footer.tsx +0 -5
- package/src/ai/ui/promptInput/PromptInputContext.ts +0 -24
- package/src/ai/ui/promptInput/PromptInputProvider.tsx +0 -54
- package/src/ai/ui/promptInput/Root.tsx +0 -29
- package/src/ai/ui/promptInput/Submit.tsx +0 -39
- package/src/ai/ui/promptInput/Textarea.tsx +0 -39
- package/src/ai/ui/promptInput/index.ts +0 -15
- package/src/ai/ui/promptInput/types.ts +0 -9
- package/src/ai/utils/convertFileUIPartBlobToDataURL.ts +0 -29
- package/src/ai/utils/parseAiMessagePart.ts +0 -19
- package/src/app/AppDefaults.tsx +0 -21
- package/src/app/DefaultApp.tsx +0 -50
- package/src/app/cookieColorSchemeManager.ts +0 -70
- package/src/app/defaultRequestMiddlewares.ts +0 -22
- package/src/app/defaultTheme.ts +0 -22
- package/src/functions/getCookie.ts +0 -36
- package/src/functions/setCookie.ts +0 -29
- package/src/functions/setCookies.ts +0 -24
- package/src/hooks/useMutation.ts +0 -14
- package/src/hooks/useMutationWithInvalidate.ts +0 -23
- package/src/surreal/connection.ts +0 -72
- package/src/surreal/deafaultCrud.ts +0 -25
- package/src/surreal/deserialize.ts +0 -144
- package/src/surreal/encryption.ts +0 -51
- package/src/ui/AnimatedChevron.tsx +0 -32
- package/src/ui/JsonInput.tsx +0 -52
- package/src/ui/RouterLink.tsx +0 -78
- package/src/ui/editor/Content.tsx +0 -11
- package/src/ui/editor/Provider.tsx +0 -96
- package/src/ui/editor/Root.tsx +0 -25
- package/src/ui/editor/Toolbar.tsx +0 -92
- package/src/ui/editor/index.ts +0 -13
- package/src/ui/editor/types.ts +0 -7
- package/src/ui/error/DefaultError.tsx +0 -60
- package/src/ui/error/DefaultNotFound.tsx +0 -19
- package/src/ui/error/Forbidden.tsx +0 -18
- package/src/ui/error/defaultErrorNotification.ts +0 -9
- package/src/ui/form/blurOnError.ts +0 -21
- package/src/ui/form/buttons/CancelButton.tsx +0 -42
- package/src/ui/form/buttons/SubmitButton.tsx +0 -43
- package/src/ui/form/buttons/SubscribeActionIcon.tsx +0 -18
- package/src/ui/form/buttons/SubscribeButton.tsx +0 -17
- package/src/ui/form/context.ts +0 -45
- package/src/ui/form/fields/JsonField.tsx +0 -16
- package/src/ui/form/fields/MultiSelectField.tsx +0 -17
- package/src/ui/form/fields/NumberField.tsx +0 -17
- package/src/ui/form/fields/PassowrdField.tsx +0 -20
- package/src/ui/form/fields/SelectField.tsx +0 -17
- package/src/ui/form/fields/SwitchField.tsx +0 -17
- package/src/ui/form/fields/TextField.tsx +0 -17
- package/src/ui/form/fields/TextPassowrdField.tsx +0 -51
- package/src/ui/form/fields/TextareaField.tsx +0 -17
- package/src/ui/form/fieldsSchema.ts +0 -24
- package/src/ui/hoverPaper/HoverPaper.tsx +0 -17
- package/src/ui/hoverPaper/usePaperHover.ts +0 -9
- package/src/ui/saveInput/JsonInput.tsx +0 -40
- package/src/ui/saveInput/NumberInput.tsx +0 -40
- package/src/ui/saveInput/SaveInput.tsx +0 -15
- package/src/ui/saveInput/Select.tsx +0 -41
- package/src/ui/saveInput/Switch.tsx +0 -46
- package/src/ui/saveInput/TextInput.tsx +0 -40
- package/src/ui/saveInput/Textarea.tsx +0 -40
- package/src/ui/scrollArea/ARCH.md +0 -204
- package/src/ui/scrollArea/README.md +0 -369
- package/src/ui/scrollArea/ScrollAreaButton.tsx +0 -56
- package/src/ui/scrollArea/ScrollAreaContent.tsx +0 -36
- package/src/ui/scrollArea/index.ts +0 -10
- package/src/ui/scrollArea/types.ts +0 -77
- package/src/ui/scrollArea/useScrollArea.ts +0 -227
- package/tsconfig.json +0 -14
- /package/{src/ui/error/index.ts → dist/ui/error/index.d.ts} +0 -0
- /package/{src/ui/form/buttons/index.ts → dist/ui/form/buttons/index.d.ts} +0 -0
- /package/{src/ui/form/fields/index.ts → dist/ui/form/fields/index.d.ts} +0 -0
- /package/{src/ui/form/index.ts → dist/ui/form/index.d.ts} +0 -0
- /package/{src/ui/hoverPaper/index.ts → dist/ui/hoverPaper/index.d.ts} +0 -0
- /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,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
|
-
};
|
package/src/app/AppDefaults.tsx
DELETED
|
@@ -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
|
-
};
|
package/src/app/DefaultApp.tsx
DELETED
|
@@ -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];
|
package/src/app/defaultTheme.ts
DELETED
|
@@ -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
|
-
});
|