@rkosafo/cai.components 0.0.78 → 0.0.80
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/pageLoader/PageLoader2.svelte +99 -0
- package/dist/ui/pageLoader/PageLoader2.svelte.d.ts +24 -0
- package/dist/ui/pageLoader/index.d.ts +2 -1
- package/dist/ui/pageLoader/index.js +2 -1
- 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,182 +1,182 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { fade } from 'svelte/transition';
|
|
3
|
-
import type { PreviewPageProps } from './index.js';
|
|
4
|
-
import { cubicIn, elasticInOut } from 'svelte/easing';
|
|
5
|
-
import IconifyIcon from '../../ui/icons/IconifyIcon.svelte';
|
|
6
|
-
import { isImage, isPdf } from '../../index.js';
|
|
7
|
-
|
|
8
|
-
let {
|
|
9
|
-
open = $bindable(true),
|
|
10
|
-
fullImage = false,
|
|
11
|
-
showActions = true,
|
|
12
|
-
title = '',
|
|
13
|
-
onGetImage,
|
|
14
|
-
src = {
|
|
15
|
-
name: '',
|
|
16
|
-
content: '',
|
|
17
|
-
file: ''
|
|
18
|
-
}
|
|
19
|
-
}: PreviewPageProps = $props();
|
|
20
|
-
|
|
21
|
-
let scale = $state(1);
|
|
22
|
-
const maxScale = $state(3);
|
|
23
|
-
const minScale = $state(1);
|
|
24
|
-
|
|
25
|
-
function zoomin() {
|
|
26
|
-
if (scale < maxScale) {
|
|
27
|
-
scale += 0.1;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function zoomout() {
|
|
32
|
-
if (scale > minScale) {
|
|
33
|
-
scale -= 0.1;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
</script>
|
|
37
|
-
|
|
38
|
-
{#if open}
|
|
39
|
-
<div class=" relative p-0 md:p-5 lg:p-10">
|
|
40
|
-
<div
|
|
41
|
-
class="bg-opacity-60 fixed inset-0 z-[3000] mx-auto bg-gray-500 transition-opacity"
|
|
42
|
-
in:fade={{ duration: 300, easing: cubicIn }}
|
|
43
|
-
out:fade={{ duration: 200, easing: elasticInOut }}
|
|
44
|
-
></div>
|
|
45
|
-
</div>
|
|
46
|
-
{/if}
|
|
47
|
-
|
|
48
|
-
{#if open}
|
|
49
|
-
{#if fullImage}
|
|
50
|
-
<div
|
|
51
|
-
class="bg-opacity-75 fixed inset-0 z-[3000] mx-auto h-12 overflow-y-auto bg-gray-900 shadow-sm shadow-gray-50"
|
|
52
|
-
>
|
|
53
|
-
<div class="mx-4 flex h-full items-center justify-between p-2">
|
|
54
|
-
<span class="font-semiblod tracking-wider text-white">{title}</span>
|
|
55
|
-
<div class="flex items-center gap-4 text-white">
|
|
56
|
-
<!-- <button on:click={zoomin} type="button"
|
|
57
|
-
><iconify-icon icon="ri:zoom-in-fill" class="hover:fill-red-600" /></button
|
|
58
|
-
>
|
|
59
|
-
<button on:click={zoomout} type="button"
|
|
60
|
-
><iconify-icon icon="mingcute:zoom-out-fill" class="hover:fill-green-600" /></button
|
|
61
|
-
>
|
|
62
|
-
<button class="grid place-content-center p-[1px]" type="button"
|
|
63
|
-
><iconify-icon
|
|
64
|
-
icon="line-md:cloud-download-loop"
|
|
65
|
-
class="hover:text-purple-600"
|
|
66
|
-
style="font-size: 27px;"
|
|
67
|
-
/></button
|
|
68
|
-
> -->
|
|
69
|
-
<button
|
|
70
|
-
type="button"
|
|
71
|
-
onclick={() => (open = false)}
|
|
72
|
-
class="grid place-content-center rounded-full bg-red-500 p-[1px] hover:bg-red-600"
|
|
73
|
-
>
|
|
74
|
-
<IconifyIcon icon="ic:round-close" style="font-size: 25px;" />
|
|
75
|
-
</button>
|
|
76
|
-
</div>
|
|
77
|
-
</div>
|
|
78
|
-
</div>
|
|
79
|
-
{/if}
|
|
80
|
-
|
|
81
|
-
<div
|
|
82
|
-
aria-live="assertive"
|
|
83
|
-
class="pointer-events-none fixed inset-0 z-[3100] flex place-content-center items-center sm:items-start"
|
|
84
|
-
>
|
|
85
|
-
<div
|
|
86
|
-
class="pointer-events-none flex h-full max-w-7xl flex-grow flex-col"
|
|
87
|
-
in:fade={{ duration: 300, easing: cubicIn }}
|
|
88
|
-
out:fade={{ duration: 200, easing: elasticInOut }}
|
|
89
|
-
>
|
|
90
|
-
<div class="h-16" style="line-height: 4rem"> </div>
|
|
91
|
-
<div class=" bg-opacity-75 pointer-events-auto flex-grow border-gray-200 transition-opacity">
|
|
92
|
-
<div class=" grid h-full w-full">
|
|
93
|
-
<div class="relative transform overflow-hidden transition-all sm:my-6">
|
|
94
|
-
{#if ('content' in src && src?.content
|
|
95
|
-
.substr(5, 10)
|
|
96
|
-
.includes('image/')) || isImage(src?.content)}
|
|
97
|
-
<div class="flex h-full w-full flex-col items-center justify-center gap-1">
|
|
98
|
-
<div class="zoomed-image" style="transform: scale({scale});">
|
|
99
|
-
<img
|
|
100
|
-
id="map"
|
|
101
|
-
src={src?.content}
|
|
102
|
-
alt=""
|
|
103
|
-
class="object-cover"
|
|
104
|
-
class:w-96={!fullImage}
|
|
105
|
-
/>
|
|
106
|
-
</div>
|
|
107
|
-
{#if src?.name}
|
|
108
|
-
<p class="text-center text-white">{src?.name}</p>
|
|
109
|
-
{/if}
|
|
110
|
-
</div>
|
|
111
|
-
{:else if isPdf(src?.content)}
|
|
112
|
-
<div class="h-full w-full items-center justify-center">
|
|
113
|
-
<iframe src={src.content} title="attachment" class="h-full w-full"></iframe>
|
|
114
|
-
{#if src?.name}
|
|
115
|
-
<p class="text-center text-white">{src?.name}</p>
|
|
116
|
-
{/if}
|
|
117
|
-
</div>
|
|
118
|
-
{:else}
|
|
119
|
-
<div class="flex h-full flex-col items-center justify-center gap-1">
|
|
120
|
-
<div class="">
|
|
121
|
-
<IconifyIcon
|
|
122
|
-
icon={'name' in src && src?.name.includes('.pdf')
|
|
123
|
-
? 'vscode-icons:file-type-pdf2'
|
|
124
|
-
: src?.name.includes('.docx')
|
|
125
|
-
? 'vscode-icons:file-type-word'
|
|
126
|
-
: src?.name.includes('.pptx')
|
|
127
|
-
? 'vscode-icons:file-type-powerpoint2'
|
|
128
|
-
: src?.name.includes('.xlsx') || src?.name.includes('.cv')
|
|
129
|
-
? 'vscode-icons:file-type-excel'
|
|
130
|
-
: 'bxs:file'}
|
|
131
|
-
style="font-size: 150px;"
|
|
132
|
-
/>
|
|
133
|
-
</div>
|
|
134
|
-
{#if src?.name}
|
|
135
|
-
<p class="text-center text-white">{src?.name}</p>
|
|
136
|
-
{/if}
|
|
137
|
-
</div>
|
|
138
|
-
{/if}
|
|
139
|
-
</div>
|
|
140
|
-
{#if showActions}
|
|
141
|
-
<div class="flex justify-center">
|
|
142
|
-
<div class=" flex gap-6">
|
|
143
|
-
<button
|
|
144
|
-
type="button"
|
|
145
|
-
aria-label="toggle modal"
|
|
146
|
-
onclick={() => (open = false)}
|
|
147
|
-
class="flex h-8 w-8 items-center justify-center rounded-full bg-red-500 text-white ring-8 ring-white hover:bg-red-800"
|
|
148
|
-
>
|
|
149
|
-
<IconifyIcon icon="ic:round-close" style="font-size: 24px;" />
|
|
150
|
-
</button>
|
|
151
|
-
<button
|
|
152
|
-
type="button"
|
|
153
|
-
aria-label="get image"
|
|
154
|
-
onclick={(_) => {
|
|
155
|
-
onGetImage?.(src);
|
|
156
|
-
}}
|
|
157
|
-
class="flex h-8 w-8 items-center justify-center rounded-full bg-green-500 text-white ring-8 ring-white hover:bg-green-800"
|
|
158
|
-
>
|
|
159
|
-
<IconifyIcon icon="majesticons:send" style="font-size: 20px;" />
|
|
160
|
-
</button>
|
|
161
|
-
</div>
|
|
162
|
-
</div>
|
|
163
|
-
{/if}
|
|
164
|
-
</div>
|
|
165
|
-
</div>
|
|
166
|
-
</div>
|
|
167
|
-
</div>
|
|
168
|
-
{/if}
|
|
169
|
-
|
|
170
|
-
<style>
|
|
171
|
-
.image-container {
|
|
172
|
-
overflow: hidden;
|
|
173
|
-
width: 100%;
|
|
174
|
-
max-width: 600px; /* Adjust as needed */
|
|
175
|
-
height: auto;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.zoomed-image {
|
|
179
|
-
transform-origin: center;
|
|
180
|
-
transition: transform 0.2s ease;
|
|
181
|
-
}
|
|
182
|
-
</style>
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { fade } from 'svelte/transition';
|
|
3
|
+
import type { PreviewPageProps } from './index.js';
|
|
4
|
+
import { cubicIn, elasticInOut } from 'svelte/easing';
|
|
5
|
+
import IconifyIcon from '../../ui/icons/IconifyIcon.svelte';
|
|
6
|
+
import { isImage, isPdf } from '../../index.js';
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
open = $bindable(true),
|
|
10
|
+
fullImage = false,
|
|
11
|
+
showActions = true,
|
|
12
|
+
title = '',
|
|
13
|
+
onGetImage,
|
|
14
|
+
src = {
|
|
15
|
+
name: '',
|
|
16
|
+
content: '',
|
|
17
|
+
file: ''
|
|
18
|
+
}
|
|
19
|
+
}: PreviewPageProps = $props();
|
|
20
|
+
|
|
21
|
+
let scale = $state(1);
|
|
22
|
+
const maxScale = $state(3);
|
|
23
|
+
const minScale = $state(1);
|
|
24
|
+
|
|
25
|
+
function zoomin() {
|
|
26
|
+
if (scale < maxScale) {
|
|
27
|
+
scale += 0.1;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function zoomout() {
|
|
32
|
+
if (scale > minScale) {
|
|
33
|
+
scale -= 0.1;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
</script>
|
|
37
|
+
|
|
38
|
+
{#if open}
|
|
39
|
+
<div class=" relative p-0 md:p-5 lg:p-10">
|
|
40
|
+
<div
|
|
41
|
+
class="bg-opacity-60 fixed inset-0 z-[3000] mx-auto bg-gray-500 transition-opacity"
|
|
42
|
+
in:fade={{ duration: 300, easing: cubicIn }}
|
|
43
|
+
out:fade={{ duration: 200, easing: elasticInOut }}
|
|
44
|
+
></div>
|
|
45
|
+
</div>
|
|
46
|
+
{/if}
|
|
47
|
+
|
|
48
|
+
{#if open}
|
|
49
|
+
{#if fullImage}
|
|
50
|
+
<div
|
|
51
|
+
class="bg-opacity-75 fixed inset-0 z-[3000] mx-auto h-12 overflow-y-auto bg-gray-900 shadow-sm shadow-gray-50"
|
|
52
|
+
>
|
|
53
|
+
<div class="mx-4 flex h-full items-center justify-between p-2">
|
|
54
|
+
<span class="font-semiblod tracking-wider text-white">{title}</span>
|
|
55
|
+
<div class="flex items-center gap-4 text-white">
|
|
56
|
+
<!-- <button on:click={zoomin} type="button"
|
|
57
|
+
><iconify-icon icon="ri:zoom-in-fill" class="hover:fill-red-600" /></button
|
|
58
|
+
>
|
|
59
|
+
<button on:click={zoomout} type="button"
|
|
60
|
+
><iconify-icon icon="mingcute:zoom-out-fill" class="hover:fill-green-600" /></button
|
|
61
|
+
>
|
|
62
|
+
<button class="grid place-content-center p-[1px]" type="button"
|
|
63
|
+
><iconify-icon
|
|
64
|
+
icon="line-md:cloud-download-loop"
|
|
65
|
+
class="hover:text-purple-600"
|
|
66
|
+
style="font-size: 27px;"
|
|
67
|
+
/></button
|
|
68
|
+
> -->
|
|
69
|
+
<button
|
|
70
|
+
type="button"
|
|
71
|
+
onclick={() => (open = false)}
|
|
72
|
+
class="grid place-content-center rounded-full bg-red-500 p-[1px] hover:bg-red-600"
|
|
73
|
+
>
|
|
74
|
+
<IconifyIcon icon="ic:round-close" style="font-size: 25px;" />
|
|
75
|
+
</button>
|
|
76
|
+
</div>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
{/if}
|
|
80
|
+
|
|
81
|
+
<div
|
|
82
|
+
aria-live="assertive"
|
|
83
|
+
class="pointer-events-none fixed inset-0 z-[3100] flex place-content-center items-center sm:items-start"
|
|
84
|
+
>
|
|
85
|
+
<div
|
|
86
|
+
class="pointer-events-none flex h-full max-w-7xl flex-grow flex-col"
|
|
87
|
+
in:fade={{ duration: 300, easing: cubicIn }}
|
|
88
|
+
out:fade={{ duration: 200, easing: elasticInOut }}
|
|
89
|
+
>
|
|
90
|
+
<div class="h-16" style="line-height: 4rem"> </div>
|
|
91
|
+
<div class=" bg-opacity-75 pointer-events-auto flex-grow border-gray-200 transition-opacity">
|
|
92
|
+
<div class=" grid h-full w-full">
|
|
93
|
+
<div class="relative transform overflow-hidden transition-all sm:my-6">
|
|
94
|
+
{#if ('content' in src && src?.content
|
|
95
|
+
.substr(5, 10)
|
|
96
|
+
.includes('image/')) || isImage(src?.content)}
|
|
97
|
+
<div class="flex h-full w-full flex-col items-center justify-center gap-1">
|
|
98
|
+
<div class="zoomed-image" style="transform: scale({scale});">
|
|
99
|
+
<img
|
|
100
|
+
id="map"
|
|
101
|
+
src={src?.content}
|
|
102
|
+
alt=""
|
|
103
|
+
class="object-cover"
|
|
104
|
+
class:w-96={!fullImage}
|
|
105
|
+
/>
|
|
106
|
+
</div>
|
|
107
|
+
{#if src?.name}
|
|
108
|
+
<p class="text-center text-white">{src?.name}</p>
|
|
109
|
+
{/if}
|
|
110
|
+
</div>
|
|
111
|
+
{:else if isPdf(src?.content)}
|
|
112
|
+
<div class="h-full w-full items-center justify-center">
|
|
113
|
+
<iframe src={src.content} title="attachment" class="h-full w-full"></iframe>
|
|
114
|
+
{#if src?.name}
|
|
115
|
+
<p class="text-center text-white">{src?.name}</p>
|
|
116
|
+
{/if}
|
|
117
|
+
</div>
|
|
118
|
+
{:else}
|
|
119
|
+
<div class="flex h-full flex-col items-center justify-center gap-1">
|
|
120
|
+
<div class="">
|
|
121
|
+
<IconifyIcon
|
|
122
|
+
icon={'name' in src && src?.name.includes('.pdf')
|
|
123
|
+
? 'vscode-icons:file-type-pdf2'
|
|
124
|
+
: src?.name.includes('.docx')
|
|
125
|
+
? 'vscode-icons:file-type-word'
|
|
126
|
+
: src?.name.includes('.pptx')
|
|
127
|
+
? 'vscode-icons:file-type-powerpoint2'
|
|
128
|
+
: src?.name.includes('.xlsx') || src?.name.includes('.cv')
|
|
129
|
+
? 'vscode-icons:file-type-excel'
|
|
130
|
+
: 'bxs:file'}
|
|
131
|
+
style="font-size: 150px;"
|
|
132
|
+
/>
|
|
133
|
+
</div>
|
|
134
|
+
{#if src?.name}
|
|
135
|
+
<p class="text-center text-white">{src?.name}</p>
|
|
136
|
+
{/if}
|
|
137
|
+
</div>
|
|
138
|
+
{/if}
|
|
139
|
+
</div>
|
|
140
|
+
{#if showActions}
|
|
141
|
+
<div class="flex justify-center">
|
|
142
|
+
<div class=" flex gap-6">
|
|
143
|
+
<button
|
|
144
|
+
type="button"
|
|
145
|
+
aria-label="toggle modal"
|
|
146
|
+
onclick={() => (open = false)}
|
|
147
|
+
class="flex h-8 w-8 items-center justify-center rounded-full bg-red-500 text-white ring-8 ring-white hover:bg-red-800"
|
|
148
|
+
>
|
|
149
|
+
<IconifyIcon icon="ic:round-close" style="font-size: 24px;" />
|
|
150
|
+
</button>
|
|
151
|
+
<button
|
|
152
|
+
type="button"
|
|
153
|
+
aria-label="get image"
|
|
154
|
+
onclick={(_) => {
|
|
155
|
+
onGetImage?.(src);
|
|
156
|
+
}}
|
|
157
|
+
class="flex h-8 w-8 items-center justify-center rounded-full bg-green-500 text-white ring-8 ring-white hover:bg-green-800"
|
|
158
|
+
>
|
|
159
|
+
<IconifyIcon icon="majesticons:send" style="font-size: 20px;" />
|
|
160
|
+
</button>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
{/if}
|
|
164
|
+
</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
{/if}
|
|
169
|
+
|
|
170
|
+
<style>
|
|
171
|
+
.image-container {
|
|
172
|
+
overflow: hidden;
|
|
173
|
+
width: 100%;
|
|
174
|
+
max-width: 600px; /* Adjust as needed */
|
|
175
|
+
height: auto;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.zoomed-image {
|
|
179
|
+
transform-origin: center;
|
|
180
|
+
transition: transform 0.2s ease;
|
|
181
|
+
}
|
|
182
|
+
</style>
|