@rkosafo/cai.components 0.0.78 → 0.0.79
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/README.md +8 -8
- package/dist/baseEditor/index.svelte +32 -32
- package/dist/builders/filters/FilterBuilder.svelte +641 -641
- package/dist/forms/FormCheckbox/FormCheckbox.svelte +53 -53
- package/dist/forms/FormClEditor/ClEdito.svelte +68 -68
- package/dist/forms/FormDatepicker/FormDatepicker.svelte +159 -159
- package/dist/forms/FormFileUpload/FormFileUplad.svelte +134 -134
- package/dist/forms/FormInput/FormInput.svelte +87 -87
- package/dist/forms/FormRadio/FormRadio.svelte +53 -53
- package/dist/forms/FormSelect/FormSelect.svelte +88 -88
- package/dist/forms/FormTextarea/FormTextarea.svelte +78 -78
- package/dist/forms/button-toggle/ButtonToggle.svelte +119 -119
- package/dist/forms/button-toggle/CheckIcon.svelte +28 -28
- package/dist/forms/checkbox/Checkbox.svelte +82 -82
- package/dist/forms/checkbox/CheckboxButton.svelte +92 -92
- package/dist/forms/datepicker/Datepicker.svelte +707 -707
- package/dist/forms/form/Form.svelte +69 -69
- package/dist/forms/input/Input.svelte +363 -363
- package/dist/forms/label/Label.svelte +38 -38
- package/dist/forms/radio/Radio.svelte +48 -48
- package/dist/forms/radio/RadioButton.svelte +22 -22
- package/dist/forms/select/Select.svelte +56 -56
- package/dist/forms/textarea/Textarea.svelte +165 -165
- package/dist/forms/toggle/Toggle.svelte +70 -70
- package/dist/layout/Chat/CategorySelector.svelte +52 -52
- package/dist/layout/Chat/ChatEntry.svelte +246 -246
- package/dist/layout/Chat/ChatEntrySkeleton.svelte +81 -81
- package/dist/layout/Chat/ChatHeader.svelte +172 -172
- package/dist/layout/Chat/ChatInput.svelte +207 -207
- package/dist/layout/Chat/DraggableWindow.svelte +230 -230
- package/dist/layout/Chat/PreviewPage.svelte +182 -182
- package/dist/layout/Chat/RichText.svelte +216 -216
- package/dist/layout/ComponentCanvas/Canvas.svelte +40 -40
- package/dist/layout/ComponentCanvas/ComponentRenderer.svelte +85 -85
- package/dist/layout/TF/Content/Content.svelte +21 -21
- package/dist/layout/TF/Header/Header.svelte +166 -166
- package/dist/layout/TF/Sidebar/Sidebar.svelte +148 -148
- package/dist/layout/TF/Wrapper/Wrapper.svelte +17 -17
- package/dist/layout/mailing/MailPaginator.svelte +36 -36
- package/dist/layout/mailing/MailSidebar.svelte +39 -39
- package/dist/layout/mailing/MailToolBar.svelte +174 -174
- package/dist/layout/mailing/MailingContent.svelte +10 -10
- package/dist/layout/mailing/MailingHeader.svelte +55 -55
- package/dist/layout/mailing/MailingMessageCard.svelte +112 -112
- package/dist/layout/mailing/MailingMessageViewer.svelte +87 -87
- package/dist/layout/mailing/MailingModule.svelte +448 -448
- package/dist/styles/docs.css +615 -615
- package/dist/styles/tf-layout.css +185 -185
- package/dist/themes/ThemeProvider.svelte +20 -20
- package/dist/types/index.d.ts +2 -0
- package/dist/typography/heading/Heading.svelte +35 -35
- package/dist/ui/accordion/Accordion.svelte +49 -49
- package/dist/ui/accordion/AccordionItem.svelte +173 -173
- package/dist/ui/alert/Alert.svelte +83 -83
- package/dist/ui/alertDialog/AlertDialog.svelte +40 -40
- package/dist/ui/avatar/Avatar.svelte +77 -77
- package/dist/ui/box/Box.svelte +28 -28
- package/dist/ui/breadcrumb/Breadcrumb.svelte +39 -39
- package/dist/ui/buttons/ActionButton.svelte +234 -234
- package/dist/ui/buttons/Button.svelte +102 -102
- package/dist/ui/buttons/GradientButton.svelte +59 -59
- package/dist/ui/datatable/Datatable.svelte +525 -525
- package/dist/ui/drawer/Drawer.svelte +300 -300
- package/dist/ui/dropdown/Dropdown.svelte +36 -36
- package/dist/ui/dropdown/DropdownDivider.svelte +11 -11
- package/dist/ui/dropdown/DropdownGroup.svelte +14 -14
- package/dist/ui/dropdown/DropdownHeader.svelte +14 -14
- package/dist/ui/dropdown/DropdownItem.svelte +52 -52
- package/dist/ui/footer/Footer.svelte +15 -15
- package/dist/ui/footer/FooterBrand.svelte +37 -37
- package/dist/ui/footer/FooterCopyright.svelte +45 -45
- package/dist/ui/footer/FooterIcon.svelte +22 -22
- package/dist/ui/footer/FooterLink.svelte +33 -33
- package/dist/ui/footer/FooterLinkGroup.svelte +13 -13
- package/dist/ui/icons/IconifyIcon.svelte +7 -7
- package/dist/ui/indicator/Indicator.svelte +42 -42
- package/dist/ui/modal/Modal.svelte +265 -265
- package/dist/ui/notificationList/NotificationList.svelte +123 -123
- package/dist/ui/pageLoader/PageLoader.svelte +14 -14
- package/dist/ui/paginate/Paginate.svelte +96 -96
- package/dist/ui/speedDial/SpeedDial.svelte +77 -77
- package/dist/ui/speedDial/SpeedDialButton.svelte +75 -75
- package/dist/ui/speedDial/SpeedDialTrigger.svelte +79 -79
- package/dist/ui/tab/Tab.svelte +93 -67
- package/dist/ui/table/Table.svelte +396 -396
- package/dist/ui/tableLoader/TableLoader.svelte +24 -24
- package/dist/ui/toast/Toast.svelte +337 -337
- package/dist/ui/toast/Toast.svelte.d.ts +10 -10
- package/dist/ui/toolbar/Toolbar.svelte +59 -59
- package/dist/ui/toolbar/ToolbarButton.svelte +56 -56
- package/dist/ui/toolbar/ToolbarGroup.svelte +43 -43
- package/dist/ui/tooltip/Tooltip.svelte +51 -51
- package/dist/utils/Popper.svelte +257 -257
- package/dist/utils/closeButton/CloseButton.svelte +88 -88
- package/dist/utils/index.d.ts +2 -2
- package/dist/utils/index.js +3 -3
- package/dist/utils/singleSelection.svelte.js +48 -48
- package/dist/youtube/index.svelte +12 -12
- package/package.json +1 -1
|
@@ -1,207 +1,207 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { fade, fly } from 'svelte/transition';
|
|
3
|
-
import type {
|
|
4
|
-
ChatInputMessage,
|
|
5
|
-
ChatInputProps,
|
|
6
|
-
IMentionableItem,
|
|
7
|
-
PreviewPageSrc
|
|
8
|
-
} from './types.js';
|
|
9
|
-
import { IconifyIcon } from '../../ui/icons/index.js';
|
|
10
|
-
import RichText from './RichText.svelte';
|
|
11
|
-
import PreviewPage from './PreviewPage.svelte';
|
|
12
|
-
import { clickOutsideAction } from '../../index.js';
|
|
13
|
-
|
|
14
|
-
let {
|
|
15
|
-
hideLoad = true,
|
|
16
|
-
clearMessage = false,
|
|
17
|
-
slashCommands = [],
|
|
18
|
-
mentionableItems = [],
|
|
19
|
-
onMessage,
|
|
20
|
-
previewPageTitle = 'Preview Attachment',
|
|
21
|
-
onSlash,
|
|
22
|
-
class: className = ''
|
|
23
|
-
}: ChatInputProps = $props();
|
|
24
|
-
|
|
25
|
-
let message = $state<ChatInputMessage>({
|
|
26
|
-
content: '',
|
|
27
|
-
contentType: 'text',
|
|
28
|
-
files: [],
|
|
29
|
-
mentions: []
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
let mentions = $state<IMentionableItem[]>([]);
|
|
33
|
-
|
|
34
|
-
let imageInput = $state<PreviewPageSrc>({
|
|
35
|
-
name: '',
|
|
36
|
-
content: '',
|
|
37
|
-
file: ''
|
|
38
|
-
});
|
|
39
|
-
let filesToSend = $state<any[]>([]);
|
|
40
|
-
let showImage = $state(false);
|
|
41
|
-
let open = $state(false);
|
|
42
|
-
let showFiles = $state(false);
|
|
43
|
-
let openDropDown = $state(false);
|
|
44
|
-
|
|
45
|
-
function loadFile(e: any) {
|
|
46
|
-
let image = e.target.files[0];
|
|
47
|
-
let reader = new FileReader();
|
|
48
|
-
reader.readAsDataURL(image);
|
|
49
|
-
|
|
50
|
-
reader.onload = (e: any) => {
|
|
51
|
-
const x = { name: image.name, content: e.target.result, file: image };
|
|
52
|
-
imageInput = x;
|
|
53
|
-
};
|
|
54
|
-
showImage = true;
|
|
55
|
-
open = false;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function onEmoji(event: any) {
|
|
59
|
-
message.content += event.detail;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function sendImage( detail : PreviewPageSrc) {
|
|
63
|
-
const { file } = detail;
|
|
64
|
-
filesToSend = [file, ...filesToSend];
|
|
65
|
-
imageInput = {
|
|
66
|
-
name: '',
|
|
67
|
-
content: '',
|
|
68
|
-
file: ''
|
|
69
|
-
};
|
|
70
|
-
showImage = false;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function sendMessage() {
|
|
74
|
-
if (message.content.length > 0) {
|
|
75
|
-
message = { ...message, files: filesToSend, mentions };
|
|
76
|
-
onMessage?.(message);
|
|
77
|
-
message = { content: '', contentType: 'text', files: [], mentions: [] };
|
|
78
|
-
filesToSend = [];
|
|
79
|
-
return;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function handleMention(event: any) {
|
|
84
|
-
const { detail } = event;
|
|
85
|
-
if (mentions.some((mention) => mention.id === detail.id)) {
|
|
86
|
-
mentions = mentions.filter((mention) => mention.id !== detail.id);
|
|
87
|
-
} else {
|
|
88
|
-
mentions = [...mentions, detail];
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// console.log({ mentions, message: message.content });
|
|
92
|
-
}
|
|
93
|
-
</script>
|
|
94
|
-
|
|
95
|
-
<div class="flex flex-col gap-2">
|
|
96
|
-
{#if showFiles}
|
|
97
|
-
{#each filesToSend as file, index}
|
|
98
|
-
<ul class="flex w-full flex-col divide-y py-2" transition:fade>
|
|
99
|
-
<li class="w-full">
|
|
100
|
-
<div class="flex items-center justify-between">
|
|
101
|
-
<p class="w-96 truncate">{index + 1}. {file?.name}</p>
|
|
102
|
-
<button
|
|
103
|
-
class="grid place-content-center"
|
|
104
|
-
onclick={() => {
|
|
105
|
-
filesToSend = filesToSend.filter((_, i) => i !== index);
|
|
106
|
-
}}
|
|
107
|
-
>
|
|
108
|
-
<IconifyIcon
|
|
109
|
-
icon="ic:baseline-delete"
|
|
110
|
-
class="text-red-500"
|
|
111
|
-
style="font-size: 20px;"
|
|
112
|
-
/>
|
|
113
|
-
</button>
|
|
114
|
-
</div>
|
|
115
|
-
</li>
|
|
116
|
-
</ul>
|
|
117
|
-
{/each}
|
|
118
|
-
{/if}
|
|
119
|
-
<RichText
|
|
120
|
-
bind:value={message.content}
|
|
121
|
-
loading={!hideLoad}
|
|
122
|
-
{slashCommands}
|
|
123
|
-
{mentionableItems}
|
|
124
|
-
onMention={handleMention}
|
|
125
|
-
{onSlash}
|
|
126
|
-
class={className}
|
|
127
|
-
/>
|
|
128
|
-
|
|
129
|
-
<div class="mx-4 flex items-center justify-between">
|
|
130
|
-
<div
|
|
131
|
-
class="flex items-center gap-3"
|
|
132
|
-
use:clickOutsideAction
|
|
133
|
-
onclickoutside={() => (openDropDown = false)}
|
|
134
|
-
>
|
|
135
|
-
<!-- <button class=" relative text-slate-600 hover:text-indigo-600 pb-2">
|
|
136
|
-
<EmojiSelector on:emoji={onEmoji} />
|
|
137
|
-
</button> -->
|
|
138
|
-
<button onclick={() => (open = !open)} class="text-slate-600 hover:text-indigo-600"
|
|
139
|
-
><IconifyIcon icon="mdi:clippy" style="font-size: 20px;" /></button
|
|
140
|
-
>
|
|
141
|
-
</div>
|
|
142
|
-
{#if filesToSend.length}
|
|
143
|
-
<div class="flex-grow pl-3" in:fade>
|
|
144
|
-
<button class="text-purple-700" onclick={() => (showFiles = !showFiles)}>
|
|
145
|
-
{filesToSend.length}
|
|
146
|
-
Attachments
|
|
147
|
-
</button>
|
|
148
|
-
</div>
|
|
149
|
-
{/if}
|
|
150
|
-
<button
|
|
151
|
-
aria-label="send message"
|
|
152
|
-
onclick={sendMessage}
|
|
153
|
-
class="text-slate-600 hover:text-indigo-600"
|
|
154
|
-
>
|
|
155
|
-
<IconifyIcon icon="majesticons:send" style="font-size: 20px;" />
|
|
156
|
-
</button>
|
|
157
|
-
</div>
|
|
158
|
-
</div>
|
|
159
|
-
|
|
160
|
-
{#if open}
|
|
161
|
-
<div class="relative">
|
|
162
|
-
<ul
|
|
163
|
-
use:clickOutsideAction
|
|
164
|
-
onclickoutside={() => (open = false)}
|
|
165
|
-
transition:fly={{ y: 50 }}
|
|
166
|
-
class="absolute bottom-6 left-8"
|
|
167
|
-
>
|
|
168
|
-
<li
|
|
169
|
-
class="h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-blue-500 to-blue-300 p-2 text-white"
|
|
170
|
-
>
|
|
171
|
-
<label for="doc"
|
|
172
|
-
><IconifyIcon
|
|
173
|
-
icon="bxs:file"
|
|
174
|
-
class="grid cursor-pointer place-content-center"
|
|
175
|
-
style="font-size: 24px;"
|
|
176
|
-
/>
|
|
177
|
-
</label>
|
|
178
|
-
<input type="file" id="doc" class="hidden" accept="application/pdf" onchange={loadFile} />
|
|
179
|
-
</li>
|
|
180
|
-
<li
|
|
181
|
-
class="my-2 h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-purple-500 to-pink-500 p-2 text-white"
|
|
182
|
-
>
|
|
183
|
-
<label for="photo"
|
|
184
|
-
><IconifyIcon
|
|
185
|
-
icon="icon-park-solid:pic"
|
|
186
|
-
class="grid cursor-pointer place-content-center"
|
|
187
|
-
style="font-size: 24px;"
|
|
188
|
-
/>
|
|
189
|
-
</label>
|
|
190
|
-
<input
|
|
191
|
-
type="file"
|
|
192
|
-
id="photo"
|
|
193
|
-
class="hidden"
|
|
194
|
-
accept="image/png, image/jpg"
|
|
195
|
-
onchange={loadFile}
|
|
196
|
-
/>
|
|
197
|
-
</li>
|
|
198
|
-
</ul>
|
|
199
|
-
</div>
|
|
200
|
-
{/if}
|
|
201
|
-
|
|
202
|
-
<PreviewPage
|
|
203
|
-
title={previewPageTitle}
|
|
204
|
-
src={imageInput}
|
|
205
|
-
bind:open={showImage}
|
|
206
|
-
onGetImage={sendImage}
|
|
207
|
-
/>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fade, fly } from 'svelte/transition';
|
|
3
|
+
import type {
|
|
4
|
+
ChatInputMessage,
|
|
5
|
+
ChatInputProps,
|
|
6
|
+
IMentionableItem,
|
|
7
|
+
PreviewPageSrc
|
|
8
|
+
} from './types.js';
|
|
9
|
+
import { IconifyIcon } from '../../ui/icons/index.js';
|
|
10
|
+
import RichText from './RichText.svelte';
|
|
11
|
+
import PreviewPage from './PreviewPage.svelte';
|
|
12
|
+
import { clickOutsideAction } from '../../index.js';
|
|
13
|
+
|
|
14
|
+
let {
|
|
15
|
+
hideLoad = true,
|
|
16
|
+
clearMessage = false,
|
|
17
|
+
slashCommands = [],
|
|
18
|
+
mentionableItems = [],
|
|
19
|
+
onMessage,
|
|
20
|
+
previewPageTitle = 'Preview Attachment',
|
|
21
|
+
onSlash,
|
|
22
|
+
class: className = ''
|
|
23
|
+
}: ChatInputProps = $props();
|
|
24
|
+
|
|
25
|
+
let message = $state<ChatInputMessage>({
|
|
26
|
+
content: '',
|
|
27
|
+
contentType: 'text',
|
|
28
|
+
files: [],
|
|
29
|
+
mentions: []
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
let mentions = $state<IMentionableItem[]>([]);
|
|
33
|
+
|
|
34
|
+
let imageInput = $state<PreviewPageSrc>({
|
|
35
|
+
name: '',
|
|
36
|
+
content: '',
|
|
37
|
+
file: ''
|
|
38
|
+
});
|
|
39
|
+
let filesToSend = $state<any[]>([]);
|
|
40
|
+
let showImage = $state(false);
|
|
41
|
+
let open = $state(false);
|
|
42
|
+
let showFiles = $state(false);
|
|
43
|
+
let openDropDown = $state(false);
|
|
44
|
+
|
|
45
|
+
function loadFile(e: any) {
|
|
46
|
+
let image = e.target.files[0];
|
|
47
|
+
let reader = new FileReader();
|
|
48
|
+
reader.readAsDataURL(image);
|
|
49
|
+
|
|
50
|
+
reader.onload = (e: any) => {
|
|
51
|
+
const x = { name: image.name, content: e.target.result, file: image };
|
|
52
|
+
imageInput = x;
|
|
53
|
+
};
|
|
54
|
+
showImage = true;
|
|
55
|
+
open = false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function onEmoji(event: any) {
|
|
59
|
+
message.content += event.detail;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function sendImage( detail : PreviewPageSrc) {
|
|
63
|
+
const { file } = detail;
|
|
64
|
+
filesToSend = [file, ...filesToSend];
|
|
65
|
+
imageInput = {
|
|
66
|
+
name: '',
|
|
67
|
+
content: '',
|
|
68
|
+
file: ''
|
|
69
|
+
};
|
|
70
|
+
showImage = false;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function sendMessage() {
|
|
74
|
+
if (message.content.length > 0) {
|
|
75
|
+
message = { ...message, files: filesToSend, mentions };
|
|
76
|
+
onMessage?.(message);
|
|
77
|
+
message = { content: '', contentType: 'text', files: [], mentions: [] };
|
|
78
|
+
filesToSend = [];
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function handleMention(event: any) {
|
|
84
|
+
const { detail } = event;
|
|
85
|
+
if (mentions.some((mention) => mention.id === detail.id)) {
|
|
86
|
+
mentions = mentions.filter((mention) => mention.id !== detail.id);
|
|
87
|
+
} else {
|
|
88
|
+
mentions = [...mentions, detail];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// console.log({ mentions, message: message.content });
|
|
92
|
+
}
|
|
93
|
+
</script>
|
|
94
|
+
|
|
95
|
+
<div class="flex flex-col gap-2">
|
|
96
|
+
{#if showFiles}
|
|
97
|
+
{#each filesToSend as file, index}
|
|
98
|
+
<ul class="flex w-full flex-col divide-y py-2" transition:fade>
|
|
99
|
+
<li class="w-full">
|
|
100
|
+
<div class="flex items-center justify-between">
|
|
101
|
+
<p class="w-96 truncate">{index + 1}. {file?.name}</p>
|
|
102
|
+
<button
|
|
103
|
+
class="grid place-content-center"
|
|
104
|
+
onclick={() => {
|
|
105
|
+
filesToSend = filesToSend.filter((_, i) => i !== index);
|
|
106
|
+
}}
|
|
107
|
+
>
|
|
108
|
+
<IconifyIcon
|
|
109
|
+
icon="ic:baseline-delete"
|
|
110
|
+
class="text-red-500"
|
|
111
|
+
style="font-size: 20px;"
|
|
112
|
+
/>
|
|
113
|
+
</button>
|
|
114
|
+
</div>
|
|
115
|
+
</li>
|
|
116
|
+
</ul>
|
|
117
|
+
{/each}
|
|
118
|
+
{/if}
|
|
119
|
+
<RichText
|
|
120
|
+
bind:value={message.content}
|
|
121
|
+
loading={!hideLoad}
|
|
122
|
+
{slashCommands}
|
|
123
|
+
{mentionableItems}
|
|
124
|
+
onMention={handleMention}
|
|
125
|
+
{onSlash}
|
|
126
|
+
class={className}
|
|
127
|
+
/>
|
|
128
|
+
|
|
129
|
+
<div class="mx-4 flex items-center justify-between">
|
|
130
|
+
<div
|
|
131
|
+
class="flex items-center gap-3"
|
|
132
|
+
use:clickOutsideAction
|
|
133
|
+
onclickoutside={() => (openDropDown = false)}
|
|
134
|
+
>
|
|
135
|
+
<!-- <button class=" relative text-slate-600 hover:text-indigo-600 pb-2">
|
|
136
|
+
<EmojiSelector on:emoji={onEmoji} />
|
|
137
|
+
</button> -->
|
|
138
|
+
<button onclick={() => (open = !open)} class="text-slate-600 hover:text-indigo-600"
|
|
139
|
+
><IconifyIcon icon="mdi:clippy" style="font-size: 20px;" /></button
|
|
140
|
+
>
|
|
141
|
+
</div>
|
|
142
|
+
{#if filesToSend.length}
|
|
143
|
+
<div class="flex-grow pl-3" in:fade>
|
|
144
|
+
<button class="text-purple-700" onclick={() => (showFiles = !showFiles)}>
|
|
145
|
+
{filesToSend.length}
|
|
146
|
+
Attachments
|
|
147
|
+
</button>
|
|
148
|
+
</div>
|
|
149
|
+
{/if}
|
|
150
|
+
<button
|
|
151
|
+
aria-label="send message"
|
|
152
|
+
onclick={sendMessage}
|
|
153
|
+
class="text-slate-600 hover:text-indigo-600"
|
|
154
|
+
>
|
|
155
|
+
<IconifyIcon icon="majesticons:send" style="font-size: 20px;" />
|
|
156
|
+
</button>
|
|
157
|
+
</div>
|
|
158
|
+
</div>
|
|
159
|
+
|
|
160
|
+
{#if open}
|
|
161
|
+
<div class="relative">
|
|
162
|
+
<ul
|
|
163
|
+
use:clickOutsideAction
|
|
164
|
+
onclickoutside={() => (open = false)}
|
|
165
|
+
transition:fly={{ y: 50 }}
|
|
166
|
+
class="absolute bottom-6 left-8"
|
|
167
|
+
>
|
|
168
|
+
<li
|
|
169
|
+
class="h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-blue-500 to-blue-300 p-2 text-white"
|
|
170
|
+
>
|
|
171
|
+
<label for="doc"
|
|
172
|
+
><IconifyIcon
|
|
173
|
+
icon="bxs:file"
|
|
174
|
+
class="grid cursor-pointer place-content-center"
|
|
175
|
+
style="font-size: 24px;"
|
|
176
|
+
/>
|
|
177
|
+
</label>
|
|
178
|
+
<input type="file" id="doc" class="hidden" accept="application/pdf" onchange={loadFile} />
|
|
179
|
+
</li>
|
|
180
|
+
<li
|
|
181
|
+
class="my-2 h-10 w-10 cursor-pointer rounded-full bg-gradient-to-b from-purple-500 to-pink-500 p-2 text-white"
|
|
182
|
+
>
|
|
183
|
+
<label for="photo"
|
|
184
|
+
><IconifyIcon
|
|
185
|
+
icon="icon-park-solid:pic"
|
|
186
|
+
class="grid cursor-pointer place-content-center"
|
|
187
|
+
style="font-size: 24px;"
|
|
188
|
+
/>
|
|
189
|
+
</label>
|
|
190
|
+
<input
|
|
191
|
+
type="file"
|
|
192
|
+
id="photo"
|
|
193
|
+
class="hidden"
|
|
194
|
+
accept="image/png, image/jpg"
|
|
195
|
+
onchange={loadFile}
|
|
196
|
+
/>
|
|
197
|
+
</li>
|
|
198
|
+
</ul>
|
|
199
|
+
</div>
|
|
200
|
+
{/if}
|
|
201
|
+
|
|
202
|
+
<PreviewPage
|
|
203
|
+
title={previewPageTitle}
|
|
204
|
+
src={imageInput}
|
|
205
|
+
bind:open={showImage}
|
|
206
|
+
onGetImage={sendImage}
|
|
207
|
+
/>
|