@useupup/svelte 3.3.0

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 (222) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +60 -0
  3. package/dist/UpupUploader.svelte +96 -0
  4. package/dist/UpupUploader.svelte.d.ts +5 -0
  5. package/dist/UpupUploader.svelte.d.ts.map +1 -0
  6. package/dist/assets/logos.d.ts +5 -0
  7. package/dist/assets/logos.d.ts.map +1 -0
  8. package/dist/assets/logos.js +4 -0
  9. package/dist/components/AudioUploader.svelte +220 -0
  10. package/dist/components/AudioUploader.svelte.d.ts +4 -0
  11. package/dist/components/AudioUploader.svelte.d.ts.map +1 -0
  12. package/dist/components/AudioWaveform.svelte +72 -0
  13. package/dist/components/AudioWaveform.svelte.d.ts +7 -0
  14. package/dist/components/AudioWaveform.svelte.d.ts.map +1 -0
  15. package/dist/components/BoxUploader.svelte +17 -0
  16. package/dist/components/BoxUploader.svelte.d.ts +19 -0
  17. package/dist/components/BoxUploader.svelte.d.ts.map +1 -0
  18. package/dist/components/CameraUploader.svelte +140 -0
  19. package/dist/components/CameraUploader.svelte.d.ts +4 -0
  20. package/dist/components/CameraUploader.svelte.d.ts.map +1 -0
  21. package/dist/components/ClientBoxUploader.svelte +60 -0
  22. package/dist/components/ClientBoxUploader.svelte.d.ts +19 -0
  23. package/dist/components/ClientBoxUploader.svelte.d.ts.map +1 -0
  24. package/dist/components/ClientDropboxUploader.svelte +60 -0
  25. package/dist/components/ClientDropboxUploader.svelte.d.ts +19 -0
  26. package/dist/components/ClientDropboxUploader.svelte.d.ts.map +1 -0
  27. package/dist/components/ClientGoogleDriveUploader.svelte +57 -0
  28. package/dist/components/ClientGoogleDriveUploader.svelte.d.ts +19 -0
  29. package/dist/components/ClientGoogleDriveUploader.svelte.d.ts.map +1 -0
  30. package/dist/components/ClientOneDriveUploader.svelte +60 -0
  31. package/dist/components/ClientOneDriveUploader.svelte.d.ts +19 -0
  32. package/dist/components/ClientOneDriveUploader.svelte.d.ts.map +1 -0
  33. package/dist/components/DefaultAddMoreIcon.svelte +11 -0
  34. package/dist/components/DefaultAddMoreIcon.svelte.d.ts +8 -0
  35. package/dist/components/DefaultAddMoreIcon.svelte.d.ts.map +1 -0
  36. package/dist/components/DefaultLoaderIcon.svelte +5 -0
  37. package/dist/components/DefaultLoaderIcon.svelte.d.ts +19 -0
  38. package/dist/components/DefaultLoaderIcon.svelte.d.ts.map +1 -0
  39. package/dist/components/DropboxUploader.svelte +17 -0
  40. package/dist/components/DropboxUploader.svelte.d.ts +19 -0
  41. package/dist/components/DropboxUploader.svelte.d.ts.map +1 -0
  42. package/dist/components/EmptyIcon.svelte +3 -0
  43. package/dist/components/EmptyIcon.svelte.d.ts +19 -0
  44. package/dist/components/EmptyIcon.svelte.d.ts.map +1 -0
  45. package/dist/components/FileHero.svelte +152 -0
  46. package/dist/components/FileHero.svelte.d.ts +8 -0
  47. package/dist/components/FileHero.svelte.d.ts.map +1 -0
  48. package/dist/components/FileIcon.svelte +23 -0
  49. package/dist/components/FileIcon.svelte.d.ts +8 -0
  50. package/dist/components/FileIcon.svelte.d.ts.map +1 -0
  51. package/dist/components/FileItem.svelte +95 -0
  52. package/dist/components/FileItem.svelte.d.ts +12 -0
  53. package/dist/components/FileItem.svelte.d.ts.map +1 -0
  54. package/dist/components/FileList.svelte +442 -0
  55. package/dist/components/FileList.svelte.d.ts +4 -0
  56. package/dist/components/FileList.svelte.d.ts.map +1 -0
  57. package/dist/components/FilePreview.svelte +218 -0
  58. package/dist/components/FilePreview.svelte.d.ts +17 -0
  59. package/dist/components/FilePreview.svelte.d.ts.map +1 -0
  60. package/dist/components/FilePreviewPortal.svelte +189 -0
  61. package/dist/components/FilePreviewPortal.svelte.d.ts +12 -0
  62. package/dist/components/FilePreviewPortal.svelte.d.ts.map +1 -0
  63. package/dist/components/FilePreviewThumbnail.svelte +87 -0
  64. package/dist/components/FilePreviewThumbnail.svelte.d.ts +17 -0
  65. package/dist/components/FilePreviewThumbnail.svelte.d.ts.map +1 -0
  66. package/dist/components/FileRow.svelte +192 -0
  67. package/dist/components/FileRow.svelte.d.ts +10 -0
  68. package/dist/components/FileRow.svelte.d.ts.map +1 -0
  69. package/dist/components/GoogleDriveUploader.svelte +17 -0
  70. package/dist/components/GoogleDriveUploader.svelte.d.ts +19 -0
  71. package/dist/components/GoogleDriveUploader.svelte.d.ts.map +1 -0
  72. package/dist/components/Icon.svelte +24 -0
  73. package/dist/components/Icon.svelte.d.ts +10 -0
  74. package/dist/components/Icon.svelte.d.ts.map +1 -0
  75. package/dist/components/Icons.d.ts +10 -0
  76. package/dist/components/Icons.d.ts.map +1 -0
  77. package/dist/components/Icons.js +9 -0
  78. package/dist/components/ImageEditorStub.svelte +3 -0
  79. package/dist/components/ImageEditorStub.svelte.d.ts +19 -0
  80. package/dist/components/ImageEditorStub.svelte.d.ts.map +1 -0
  81. package/dist/components/OneDriveUploader.svelte +17 -0
  82. package/dist/components/OneDriveUploader.svelte.d.ts +19 -0
  83. package/dist/components/OneDriveUploader.svelte.d.ts.map +1 -0
  84. package/dist/components/ScreenCaptureUploader.svelte +254 -0
  85. package/dist/components/ScreenCaptureUploader.svelte.d.ts +4 -0
  86. package/dist/components/ScreenCaptureUploader.svelte.d.ts.map +1 -0
  87. package/dist/components/ServerModeDriveUploader.svelte +250 -0
  88. package/dist/components/ServerModeDriveUploader.svelte.d.ts +10 -0
  89. package/dist/components/ServerModeDriveUploader.svelte.d.ts.map +1 -0
  90. package/dist/components/SourceSelector.svelte +292 -0
  91. package/dist/components/SourceSelector.svelte.d.ts +19 -0
  92. package/dist/components/SourceSelector.svelte.d.ts.map +1 -0
  93. package/dist/components/SourceView.svelte +100 -0
  94. package/dist/components/SourceView.svelte.d.ts +4 -0
  95. package/dist/components/SourceView.svelte.d.ts.map +1 -0
  96. package/dist/components/TrashIcon.svelte +11 -0
  97. package/dist/components/TrashIcon.svelte.d.ts +8 -0
  98. package/dist/components/TrashIcon.svelte.d.ts.map +1 -0
  99. package/dist/components/UploaderPanel.svelte +363 -0
  100. package/dist/components/UploaderPanel.svelte.d.ts +4 -0
  101. package/dist/components/UploaderPanel.svelte.d.ts.map +1 -0
  102. package/dist/components/UrlUploader.svelte +71 -0
  103. package/dist/components/UrlUploader.svelte.d.ts +4 -0
  104. package/dist/components/UrlUploader.svelte.d.ts.map +1 -0
  105. package/dist/components/icons/AudioIcon.svelte +5 -0
  106. package/dist/components/icons/AudioIcon.svelte.d.ts +7 -0
  107. package/dist/components/icons/AudioIcon.svelte.d.ts.map +1 -0
  108. package/dist/components/icons/BoxIcon.svelte +5 -0
  109. package/dist/components/icons/BoxIcon.svelte.d.ts +7 -0
  110. package/dist/components/icons/BoxIcon.svelte.d.ts.map +1 -0
  111. package/dist/components/icons/CameraIcon.svelte +5 -0
  112. package/dist/components/icons/CameraIcon.svelte.d.ts +7 -0
  113. package/dist/components/icons/CameraIcon.svelte.d.ts.map +1 -0
  114. package/dist/components/icons/DropboxIcon.svelte +5 -0
  115. package/dist/components/icons/DropboxIcon.svelte.d.ts +7 -0
  116. package/dist/components/icons/DropboxIcon.svelte.d.ts.map +1 -0
  117. package/dist/components/icons/GoogleDriveIcon.svelte +5 -0
  118. package/dist/components/icons/GoogleDriveIcon.svelte.d.ts +7 -0
  119. package/dist/components/icons/GoogleDriveIcon.svelte.d.ts.map +1 -0
  120. package/dist/components/icons/LinkIcon.svelte +5 -0
  121. package/dist/components/icons/LinkIcon.svelte.d.ts +7 -0
  122. package/dist/components/icons/LinkIcon.svelte.d.ts.map +1 -0
  123. package/dist/components/icons/MyDeviceIcon.svelte +5 -0
  124. package/dist/components/icons/MyDeviceIcon.svelte.d.ts +7 -0
  125. package/dist/components/icons/MyDeviceIcon.svelte.d.ts.map +1 -0
  126. package/dist/components/icons/OneDriveIcon.svelte +5 -0
  127. package/dist/components/icons/OneDriveIcon.svelte.d.ts +7 -0
  128. package/dist/components/icons/OneDriveIcon.svelte.d.ts.map +1 -0
  129. package/dist/components/icons/ScreenCaptureIcon.svelte +5 -0
  130. package/dist/components/icons/ScreenCaptureIcon.svelte.d.ts +7 -0
  131. package/dist/components/icons/ScreenCaptureIcon.svelte.d.ts.map +1 -0
  132. package/dist/components/shared/DriveAuthFallback.svelte +60 -0
  133. package/dist/components/shared/DriveAuthFallback.svelte.d.ts +12 -0
  134. package/dist/components/shared/DriveAuthFallback.svelte.d.ts.map +1 -0
  135. package/dist/components/shared/DriveBrowser.svelte +209 -0
  136. package/dist/components/shared/DriveBrowser.svelte.d.ts +25 -0
  137. package/dist/components/shared/DriveBrowser.svelte.d.ts.map +1 -0
  138. package/dist/components/shared/DriveBrowserHeader.svelte +191 -0
  139. package/dist/components/shared/DriveBrowserHeader.svelte.d.ts +14 -0
  140. package/dist/components/shared/DriveBrowserHeader.svelte.d.ts.map +1 -0
  141. package/dist/components/shared/DriveBrowserIcon.svelte +39 -0
  142. package/dist/components/shared/DriveBrowserIcon.svelte.d.ts +8 -0
  143. package/dist/components/shared/DriveBrowserIcon.svelte.d.ts.map +1 -0
  144. package/dist/components/shared/DriveBrowserItem.svelte +63 -0
  145. package/dist/components/shared/DriveBrowserItem.svelte.d.ts +10 -0
  146. package/dist/components/shared/DriveBrowserItem.svelte.d.ts.map +1 -0
  147. package/dist/components/shared/FileSuccessCheck.svelte +47 -0
  148. package/dist/components/shared/FileSuccessCheck.svelte.d.ts +10 -0
  149. package/dist/components/shared/FileSuccessCheck.svelte.d.ts.map +1 -0
  150. package/dist/components/shared/ProgressBar.svelte +81 -0
  151. package/dist/components/shared/ProgressBar.svelte.d.ts +10 -0
  152. package/dist/components/shared/ProgressBar.svelte.d.ts.map +1 -0
  153. package/dist/components/shared/SourceViewContainer.svelte +27 -0
  154. package/dist/components/shared/SourceViewContainer.svelte.d.ts +10 -0
  155. package/dist/components/shared/SourceViewContainer.svelte.d.ts.map +1 -0
  156. package/dist/components/shared/UploaderHeader.svelte +156 -0
  157. package/dist/components/shared/UploaderHeader.svelte.d.ts +13 -0
  158. package/dist/components/shared/UploaderHeader.svelte.d.ts.map +1 -0
  159. package/dist/composables/use-tiles-per-row.d.ts +19 -0
  160. package/dist/composables/use-tiles-per-row.d.ts.map +1 -0
  161. package/dist/composables/use-tiles-per-row.js +30 -0
  162. package/dist/composables/useBox.d.ts +28 -0
  163. package/dist/composables/useBox.d.ts.map +1 -0
  164. package/dist/composables/useBox.js +61 -0
  165. package/dist/composables/useCameraUploader.d.ts +23 -0
  166. package/dist/composables/useCameraUploader.d.ts.map +1 -0
  167. package/dist/composables/useCameraUploader.js +114 -0
  168. package/dist/composables/useDropbox.d.ts +28 -0
  169. package/dist/composables/useDropbox.d.ts.map +1 -0
  170. package/dist/composables/useDropbox.js +61 -0
  171. package/dist/composables/useFetchFileByUrl.d.ts +9 -0
  172. package/dist/composables/useFetchFileByUrl.d.ts.map +1 -0
  173. package/dist/composables/useFetchFileByUrl.js +33 -0
  174. package/dist/composables/useGoogleDrive.d.ts +28 -0
  175. package/dist/composables/useGoogleDrive.d.ts.map +1 -0
  176. package/dist/composables/useGoogleDrive.js +65 -0
  177. package/dist/composables/useOneDrive.d.ts +29 -0
  178. package/dist/composables/useOneDrive.d.ts.map +1 -0
  179. package/dist/composables/useOneDrive.js +64 -0
  180. package/dist/composables/useSSEProcessing.d.ts +20 -0
  181. package/dist/composables/useSSEProcessing.d.ts.map +1 -0
  182. package/dist/composables/useSSEProcessing.js +17 -0
  183. package/dist/composables/useServerModeDrive.d.ts +17 -0
  184. package/dist/composables/useServerModeDrive.d.ts.map +1 -0
  185. package/dist/composables/useServerModeDrive.js +33 -0
  186. package/dist/composables/useSourceSelector.d.ts +13 -0
  187. package/dist/composables/useSourceSelector.d.ts.map +1 -0
  188. package/dist/composables/useSourceSelector.js +36 -0
  189. package/dist/composables/useUploaderPanel.d.ts +12 -0
  190. package/dist/composables/useUploaderPanel.d.ts.map +1 -0
  191. package/dist/composables/useUploaderPanel.js +43 -0
  192. package/dist/context/create-uploader-context.d.ts +4 -0
  193. package/dist/context/create-uploader-context.d.ts.map +1 -0
  194. package/dist/context/create-uploader-context.js +324 -0
  195. package/dist/context/source-view-header-extra.d.ts +14 -0
  196. package/dist/context/source-view-header-extra.d.ts.map +1 -0
  197. package/dist/context/source-view-header-extra.js +41 -0
  198. package/dist/context/uploader-context.d.ts +109 -0
  199. package/dist/context/uploader-context.d.ts.map +1 -0
  200. package/dist/context/uploader-context.js +96 -0
  201. package/dist/index.d.ts +10 -0
  202. package/dist/index.d.ts.map +1 -0
  203. package/dist/index.js +5 -0
  204. package/dist/lib/constants.d.ts +13 -0
  205. package/dist/lib/constants.d.ts.map +1 -0
  206. package/dist/lib/constants.js +67 -0
  207. package/dist/lib/to-readable.d.ts +14 -0
  208. package/dist/lib/to-readable.d.ts.map +1 -0
  209. package/dist/lib/to-readable.js +15 -0
  210. package/dist/lib/view-mode.d.ts +24 -0
  211. package/dist/lib/view-mode.d.ts.map +1 -0
  212. package/dist/lib/view-mode.js +31 -0
  213. package/dist/shared/types.d.ts +15 -0
  214. package/dist/shared/types.d.ts.map +1 -0
  215. package/dist/shared/types.js +1 -0
  216. package/dist/styles.d.ts +4 -0
  217. package/dist/tailwind-prefixed.css +2479 -0
  218. package/dist/tailwind.css +74 -0
  219. package/dist/use-upup-upload.d.ts +38 -0
  220. package/dist/use-upup-upload.d.ts.map +1 -0
  221. package/dist/use-upup-upload.js +81 -0
  222. package/package.json +101 -0
@@ -0,0 +1,363 @@
1
+ <script lang="ts">
2
+ import { useUploaderFiles, useUploaderI18n, useUploaderOptions, useUploaderRuntime, useUploaderSource, useUploaderTheme, useUploaderUploadControls, useUploaderView } from '../context/uploader-context'
3
+ import { devinoDark, devinoLight, logoDark, logoLight } from '../assets/logos'
4
+ import useUploaderPanel from '../composables/useUploaderPanel'
5
+ import { cn } from '@useupup/core/internal'
6
+ import { UploadStatus, formatUiMessage } from '@useupup/core'
7
+ import SourceView from './SourceView.svelte'
8
+ import SourceSelector from './SourceSelector.svelte'
9
+ import FileList from './FileList.svelte'
10
+
11
+ const { files } = useUploaderFiles()
12
+ const { activeSource } = useUploaderSource()
13
+ const { sourceOverlayOpen, sourceOverlayClosing, dropRejected, closeSourceOverlay } = useUploaderView()
14
+ const { isOnline, motionMode } = useUploaderRuntime()
15
+ const { translations: tr } = useUploaderI18n()
16
+ const { isDark: dark } = useUploaderTheme()
17
+ const { mini, showBranding } = useUploaderOptions()
18
+ const { upload: { uploadStatus } } = useUploaderUploadControls()
19
+ const { isDragging, absoluteIsDragging, absoluteHasBorder, handleDragOver, handleDragLeave, handleDrop, handlePaste } = useUploaderPanel()
20
+
21
+ // The dashed dropzone frame is the idle-view affordance: shown only when the
22
+ // panel is an empty, at-rest dropzone (no active source, no add-more flow, no
23
+ // files). It supersedes the old pulsing CSS border.
24
+ const showDropzoneFrame = $derived(
25
+ $absoluteHasBorder && !$activeSource && !$sourceOverlayOpen && !$files.size,
26
+ )
27
+
28
+ // The add-more overlay: once files exist, the source surface slides up over the
29
+ // still-mounted, dimmed file list, and stays mounted through the reverse
30
+ // close-slide (`sourceOverlayClosing`).
31
+ const hasFiles = $derived($files.size > 0)
32
+ const showSourceOverlay = $derived(
33
+ hasFiles && ($sourceOverlayOpen || $sourceOverlayClosing || !!$activeSource),
34
+ )
35
+
36
+ // Focus management (minimal — no focus trap; the dimmed list is `inert`).
37
+ // On open (or an inner view swap) pull focus into the overlay so keyboard/SR
38
+ // users don't land on the inert list underneath, capturing the trigger. On
39
+ // settled close, restore focus to the trigger if it's still connected.
40
+ let overlayEl: HTMLDivElement | null = $state(null)
41
+ let triggerEl: HTMLElement | null = null
42
+
43
+ $effect(() => {
44
+ if (!($sourceOverlayOpen || $activeSource)) return
45
+ const el = overlayEl
46
+ if (!el) return
47
+ if (!triggerEl && document.activeElement instanceof HTMLElement)
48
+ triggerEl = document.activeElement
49
+ el.querySelector<HTMLElement>('button:not([disabled])')?.focus()
50
+ })
51
+
52
+ $effect(() => {
53
+ if ($sourceOverlayOpen || $sourceOverlayClosing || $activeSource) return
54
+ const trigger = triggerEl
55
+ if (!trigger) return
56
+ triggerEl = null
57
+ if (trigger.isConnected) trigger.focus()
58
+ })
59
+
60
+ // Polite screen-reader announcement for upload-lifecycle transitions. It is a
61
+ // pure projection of uploadStatus (no new event plumbing).
62
+ const uploadAnnouncement = $derived(
63
+ $uploadStatus === UploadStatus.UPLOADING
64
+ ? tr.announceUploadStarted
65
+ : $uploadStatus === UploadStatus.SUCCESSFUL
66
+ ? tr.announceUploadComplete
67
+ : $uploadStatus === UploadStatus.FAILED
68
+ ? tr.announceUploadFailed
69
+ : '',
70
+ )
71
+
72
+ // Sheet swipe-to-dismiss state (plain vars — dragging must not re-render).
73
+ let swipeStartY: number | null = null
74
+ let swiped = false
75
+
76
+ function onGripClick() {
77
+ if (!swiped) closeSourceOverlay()
78
+ swiped = false
79
+ }
80
+ function onGripPointerDown(e: PointerEvent) {
81
+ swipeStartY = e.clientY
82
+ ;(e.currentTarget as HTMLElement).setPointerCapture(e.pointerId)
83
+ }
84
+ function onGripPointerMove(e: PointerEvent) {
85
+ const startY = swipeStartY
86
+ const sheet = overlayEl
87
+ if (startY === null || !sheet) return
88
+ const dy = Math.max(0, e.clientY - startY)
89
+ sheet.style.transition = 'none'
90
+ sheet.style.transform = `translateY(${dy}px)`
91
+ }
92
+ function onGripPointerUp(e: PointerEvent) {
93
+ const startY = swipeStartY
94
+ const sheet = overlayEl
95
+ swipeStartY = null
96
+ if (startY === null || !sheet) return
97
+ const dy = Math.max(0, e.clientY - startY)
98
+ sheet.style.transition = ''
99
+ sheet.style.transform = ''
100
+ if (dy > 72) {
101
+ swiped = true
102
+ closeSourceOverlay()
103
+ }
104
+ }
105
+
106
+ function onOverlayKeydown(e: KeyboardEvent) {
107
+ if (e.key === 'Escape' && !$sourceOverlayClosing) closeSourceOverlay()
108
+ }
109
+ </script>
110
+
111
+ <div
112
+ data-testid="upup-dropzone"
113
+ data-upup-slot="uploader-panel"
114
+ data-motion={$motionMode}
115
+ role="region"
116
+ aria-label={tr.dropzoneLabel}
117
+ aria-dropeffect={$isDragging ? 'copy' : 'none'}
118
+ ondragover={handleDragOver}
119
+ ondragleave={handleDragLeave}
120
+ ondrop={handleDrop}
121
+ onpaste={handlePaste}
122
+ class={cn('upup-relative upup-flex upup-flex-1 upup-flex-col upup-overflow-hidden upup-rounded-lg', {
123
+ 'upup-border upup-border-[#0ea5e9]': $absoluteHasBorder && !showDropzoneFrame,
124
+ 'upup-border-[#38bdf8] dark:upup-border-[#38bdf8]': $absoluteHasBorder && !showDropzoneFrame && $dark,
125
+ 'upup-border-dashed': !$isDragging && !showDropzoneFrame,
126
+ 'upup-bg-[#e0f2fe] upup-backdrop-blur-sm': $absoluteIsDragging && !$dark,
127
+ 'upup-bg-[#0b2a3a] upup-backdrop-blur-sm dark:upup-bg-[#0b2a3a]': $absoluteIsDragging && $dark,
128
+ })}
129
+ >
130
+ <div role="status" aria-live="polite" class="upup-sr-only">
131
+ {uploadAnnouncement}
132
+ </div>
133
+
134
+ <!-- Drop-rejection toast: a file was dropped onto a read-only drive
135
+ picker (core DragDropController → transient-UI store). Auto-clears
136
+ after the store's 3s window drives an unmount — no JS timer here. -->
137
+ {#if $dropRejected}
138
+ <div
139
+ data-testid="upup-drop-rejected-toast"
140
+ data-upup-slot="drop-rejected-toast"
141
+ role="status"
142
+ aria-live="polite"
143
+ class={cn(
144
+ 'upup-animate-informer-in upup-absolute upup-inset-x-4 upup-top-4 upup-z-30 upup-flex upup-items-center upup-gap-2.5 upup-rounded-xl upup-px-3.5 upup-py-2.5 upup-text-[13px] upup-leading-snug upup-ring-1',
145
+ $dark
146
+ ? 'upup-bg-rose-500/[0.14] upup-text-rose-200 upup-ring-rose-400/30'
147
+ : 'upup-bg-rose-50 upup-text-rose-700 upup-ring-rose-300/60',
148
+ )}
149
+ >
150
+ <svg
151
+ viewBox="0 0 24 24"
152
+ width="16"
153
+ height="16"
154
+ fill="none"
155
+ stroke="currentColor"
156
+ stroke-width="1.9"
157
+ stroke-linecap="round"
158
+ stroke-linejoin="round"
159
+ aria-hidden="true"
160
+ class="upup-flex-none"
161
+ >
162
+ <circle cx="12" cy="12" r="9" />
163
+ <path d="M12 8v4" />
164
+ <path d="M12 16h.01" />
165
+ </svg>
166
+ <span>
167
+ {formatUiMessage(tr.dropRejected, { provider: $dropRejected })}
168
+ </span>
169
+ </div>
170
+ {/if}
171
+
172
+ {#if !$isOnline}
173
+ <div class={cn('upup-absolute upup-inset-x-0 upup-top-0 upup-z-30 upup-px-3 upup-py-1.5 upup-text-center upup-text-xs upup-font-medium upup-text-white upup-bg-yellow-500', { 'upup-bg-yellow-600': $dark })}>
174
+ No internet connection — uploads will resume when you reconnect.
175
+ </div>
176
+ {/if}
177
+
178
+ {#if showDropzoneFrame}
179
+ <!-- An <svg> is a replaced element: absolute insets position it but do NOT
180
+ stretch it (it keeps the 300x150 default), so the frame needs its size
181
+ stated explicitly alongside its inset. Hugs the panel edge (4px) so the
182
+ in-frame branding row has breathing room above the bottom dashes. -->
183
+ <svg
184
+ data-upup-slot="dropzone-frame"
185
+ aria-hidden="true"
186
+ class="upup-pointer-events-none upup-absolute upup-inset-1 upup-h-[calc(100%-0.5rem)] upup-w-[calc(100%-0.5rem)]"
187
+ >
188
+ <rect
189
+ x="1"
190
+ y="1"
191
+ rx="14"
192
+ ry="14"
193
+ fill="none"
194
+ stroke-width="1.5"
195
+ stroke-dasharray="5 7"
196
+ stroke={$dark
197
+ ? ($absoluteIsDragging ? 'rgba(56,189,248,0.65)' : 'rgba(56,189,248,0.35)')
198
+ : ($absoluteIsDragging ? 'rgba(2,132,199,0.7)' : 'rgba(2,132,199,0.4)')}
199
+ class={cn($absoluteIsDragging && 'upup-animate-fx-dash-march')}
200
+ style="width: calc(100% - 2px); height: calc(100% - 2px)"
201
+ />
202
+ </svg>
203
+ {/if}
204
+
205
+ <!-- Drag-over prompt: an explicit "drop it here" affordance (icon + text) so
206
+ the drag state never reads as a mere glow. Pointer events pass through —
207
+ the panel underneath owns the drop. -->
208
+ {#if $absoluteIsDragging}
209
+ <div
210
+ data-testid="upup-drag-overlay"
211
+ data-upup-slot="drag-overlay"
212
+ aria-hidden="true"
213
+ class={cn(
214
+ 'upup-animate-fx-view upup-pointer-events-none upup-absolute upup-inset-0 upup-z-10 upup-flex upup-flex-col upup-items-center upup-justify-center upup-gap-3',
215
+ $dark ? 'upup-bg-[#0b1220]/70' : 'upup-bg-white/70',
216
+ )}
217
+ >
218
+ <span
219
+ class={cn(
220
+ 'upup-flex upup-h-16 upup-w-16 upup-items-center upup-justify-center upup-rounded-2xl',
221
+ $dark
222
+ ? 'upup-bg-[#38bdf8]/15 upup-text-[#38bdf8]'
223
+ : 'upup-bg-[#0284c7]/10 upup-text-[#0284c7]',
224
+ )}
225
+ >
226
+ <svg
227
+ viewBox="0 0 24 24"
228
+ width="30"
229
+ height="30"
230
+ fill="none"
231
+ stroke="currentColor"
232
+ stroke-width="1.8"
233
+ stroke-linecap="round"
234
+ stroke-linejoin="round"
235
+ aria-hidden="true"
236
+ >
237
+ <path d="M12 4v11" />
238
+ <path d="m7 10 5 5 5-5" />
239
+ <path d="M4 17v1a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-1" />
240
+ </svg>
241
+ </span>
242
+ <span
243
+ class={cn(
244
+ 'upup-text-[15px] upup-font-semibold',
245
+ $dark ? 'upup-text-[#e2e8f0]' : 'upup-text-[#0f172a]',
246
+ )}
247
+ >
248
+ {tr.dropToUpload}
249
+ </span>
250
+ </div>
251
+ {/if}
252
+
253
+ <!-- Content area (source surface / file list) flexes above the in-panel
254
+ branding row so the dashed frame — inset-1 of this panel — wraps
255
+ EVERYTHING including the brand, per the mock. -->
256
+ <div class="upup-relative upup-flex upup-min-h-0 upup-flex-1 upup-flex-col">
257
+ <!-- Idle primary: the source surface fills the panel when empty. -->
258
+ {#if !hasFiles}
259
+ {#if $activeSource}
260
+ <SourceView />
261
+ {:else}
262
+ <SourceSelector />
263
+ {/if}
264
+ {/if}
265
+ <FileList />
266
+ </div>
267
+
268
+ <!-- Add-more DRAWER (states-tour-v2 sheet): the source surface slides up as a
269
+ translucent bottom sheet over the dimmed, still-mounted file list — the
270
+ files stay visible behind it so nothing feels lost. Swipe the grip down
271
+ (or Escape / the grip click) to close. -->
272
+ {#if showSourceOverlay}
273
+ <div
274
+ bind:this={overlayEl}
275
+ data-upup-slot="source-overlay"
276
+ role={$sourceOverlayClosing ? undefined : 'dialog'}
277
+ aria-modal={$sourceOverlayClosing ? undefined : 'true'}
278
+ aria-label={tr.addingMoreFiles}
279
+ class={cn(
280
+ 'upup-absolute upup-inset-x-3 upup-bottom-3 upup-top-11 upup-z-20 upup-flex upup-flex-col upup-overflow-hidden upup-rounded-2xl upup-ring-1 upup-ring-inset upup-backdrop-blur-md',
281
+ $sourceOverlayClosing
282
+ ? 'upup-fx-overlay-close-slide upup-pointer-events-none'
283
+ : 'upup-fx-overlay-slide',
284
+ $dark
285
+ ? 'upup-bg-[#0b1220]/[0.85] upup-ring-white/[0.08] upup-shadow-[0_-18px_40px_-18px_rgba(0,0,0,0.65)]'
286
+ : 'upup-bg-white/[0.85] upup-ring-black/[0.08] upup-shadow-[0_-18px_40px_-18px_rgba(15,23,42,0.25)]',
287
+ )}
288
+ onkeydown={onOverlayKeydown}
289
+ >
290
+ <!-- Sheet grip: click closes; drag down past the threshold closes
291
+ (pointer capture — no transitionend reliance). -->
292
+ <button
293
+ type="button"
294
+ data-testid="upup-sheet-grip"
295
+ data-upup-slot="sheet-grip"
296
+ aria-label={tr.overlayBack}
297
+ class="upup-absolute upup-left-1/2 upup-top-1.5 upup-z-10 upup-flex upup-h-6 upup-w-20 upup--translate-x-1/2 upup-cursor-grab upup-touch-none upup-items-center upup-justify-center upup-rounded-full"
298
+ onclick={onGripClick}
299
+ onpointerdown={onGripPointerDown}
300
+ onpointermove={onGripPointerMove}
301
+ onpointerup={onGripPointerUp}
302
+ >
303
+ <span
304
+ aria-hidden="true"
305
+ class={cn(
306
+ 'upup-h-1 upup-w-10 upup-rounded-full',
307
+ $dark ? 'upup-bg-white/20' : 'upup-bg-black/20',
308
+ )}
309
+ ></span>
310
+ </button>
311
+ {#if $activeSource}
312
+ <SourceView />
313
+ {:else}
314
+ <SourceSelector />
315
+ {/if}
316
+ </div>
317
+ {/if}
318
+
319
+ <!-- Branding row INSIDE the panel (and the dashed frame). The add-more sheet
320
+ slides over it, per the states-tour mock. Hidden while a source view is
321
+ active — the drive browser / camera / url views own the full panel — and
322
+ once files are selected: the file-list screen needs the vertical space
323
+ (round-7 item 1). -->
324
+ {#if !mini && showBranding && !$activeSource && !hasFiles}
325
+ <div
326
+ data-testid="upup-branding"
327
+ class="upup-flex upup-w-full upup-flex-none upup-flex-col upup-items-center upup-justify-between upup-gap-1 upup-px-6 upup-pb-5 upup-pt-1.5 md:upup-flex-row"
328
+ >
329
+ <a
330
+ href="https://useupup.com/"
331
+ target="_blank"
332
+ rel="noopener noreferrer"
333
+ class="upup-flex upup-items-center upup-gap-[5px]"
334
+ >
335
+ {#if $dark}
336
+ <img src={logoDark} width={61} height={13} alt="logo-dark" />
337
+ {:else}
338
+ <img src={logoLight} width={61} height={13} alt="logo-light" />
339
+ {/if}
340
+ </a>
341
+ <a
342
+ href="https://devino.ca/"
343
+ target="_blank"
344
+ rel="noopener noreferrer"
345
+ class="upup-flex upup-flex-row upup-items-center upup-justify-end upup-gap-1"
346
+ >
347
+ <span
348
+ class={cn(
349
+ 'upup-mr-0.5 upup-text-xs upup-leading-5 upup-text-[#6D6D6D] md:upup-text-sm',
350
+ { 'upup-text-gray-300 dark:upup-text-gray-300': $dark },
351
+ )}
352
+ >
353
+ {tr.builtBy}
354
+ </span>
355
+ {#if $dark}
356
+ <img src={devinoDark} width={61} height={13} alt="logo-dark" />
357
+ {:else}
358
+ <img src={devinoLight} width={61} height={13} alt="logo-light" />
359
+ {/if}
360
+ </a>
361
+ </div>
362
+ {/if}
363
+ </div>
@@ -0,0 +1,4 @@
1
+ declare const UploaderPanel: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type UploaderPanel = ReturnType<typeof UploaderPanel>;
3
+ export default UploaderPanel;
4
+ //# sourceMappingURL=UploaderPanel.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploaderPanel.svelte.d.ts","sourceRoot":"","sources":["../../src/components/UploaderPanel.svelte.ts"],"names":[],"mappings":"AAsQA,QAAA,MAAM,aAAa,2DAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
@@ -0,0 +1,71 @@
1
+ <script lang="ts">
2
+ import {
3
+ useUploaderFiles,
4
+ useUploaderI18n,
5
+ useUploaderOptions,
6
+ useUploaderRuntime,
7
+ useUploaderSource,
8
+ useUploaderTheme,
9
+ } from '../context/uploader-context'
10
+ import useFetchFileByUrl from '../composables/useFetchFileByUrl'
11
+ import { cn } from '@useupup/core/internal'
12
+ import SourceViewContainer from './shared/SourceViewContainer.svelte'
13
+
14
+ const { core } = useUploaderRuntime()
15
+ const { setFiles } = useUploaderFiles()
16
+ const { setActiveSource } = useUploaderSource()
17
+ const { translations: tr } = useUploaderI18n()
18
+ const { icons: { LoaderIcon } } = useUploaderOptions()
19
+ const { isDark: dark, slotOverrides: slotClasses } = useUploaderTheme()
20
+
21
+ let url = $state('')
22
+ const { loading, fetchImage } = useFetchFileByUrl()
23
+
24
+ async function handleFormSubmit(e: SubmitEvent) {
25
+ e.preventDefault()
26
+ core?.emit('url-submit', { url })
27
+ const file = await fetchImage(url)
28
+ if (file) {
29
+ Object.assign(file, { url })
30
+ setFiles([file])
31
+ url = ''
32
+ setActiveSource(undefined)
33
+ }
34
+ }
35
+ </script>
36
+
37
+ <SourceViewContainer data-testid="upup-url-uploader" data-upup-slot="url-uploader">
38
+ <form onsubmit={handleFormSubmit} class="upup-px-3 upup-py-2">
39
+ <input
40
+ type="url"
41
+ name="upup-url"
42
+ aria-label={tr.enterFileUrl}
43
+ placeholder={tr.enterFileUrl}
44
+ class={cn(
45
+ 'upup-w-full upup-rounded-md upup-border-2 upup-border-[#e0e0e0] upup-bg-transparent upup-px-3 upup-py-2 upup-outline-none',
46
+ {
47
+ 'upup-border-[#6D6D6D] upup-text-[#6D6D6D] dark:upup-border-[#6D6D6D] dark:upup-text-[#6D6D6D]': $dark,
48
+ },
49
+ $slotClasses.urlInput,
50
+ )}
51
+ bind:value={url}
52
+ />
53
+ <button
54
+ class={cn(
55
+ 'upup-disabled:bg-[#e0e0e0] upup-mt-2 upup-w-full upup-rounded-md upup-bg-[#0ea5e9] upup-p-2 upup-text-white upup-transition-all upup-duration-300',
56
+ {
57
+ 'upup-disabled:bg-[#6D6D6D] dark:upup-disabled:bg-[#6D6D6D] upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': $dark,
58
+ },
59
+ $slotClasses.urlFetchButton,
60
+ )}
61
+ type="submit"
62
+ disabled={!url}
63
+ >
64
+ {#if $loading}
65
+ <LoaderIcon />
66
+ {:else}
67
+ {tr.fetch}
68
+ {/if}
69
+ </button>
70
+ </form>
71
+ </SourceViewContainer>
@@ -0,0 +1,4 @@
1
+ declare const UrlUploader: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type UrlUploader = ReturnType<typeof UrlUploader>;
3
+ export default UrlUploader;
4
+ //# sourceMappingURL=UrlUploader.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UrlUploader.svelte.d.ts","sourceRoot":"","sources":["../../src/components/UrlUploader.svelte.ts"],"names":[],"mappings":"AAuEA,QAAA,MAAM,WAAW,2DAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="audio" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const AudioIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type AudioIcon = ReturnType<typeof AudioIcon>;
6
+ export default AudioIcon;
7
+ //# sourceMappingURL=AudioIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AudioIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/AudioIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,SAAS,sDAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="box" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const BoxIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type BoxIcon = ReturnType<typeof BoxIcon>;
6
+ export default BoxIcon;
7
+ //# sourceMappingURL=BoxIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BoxIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/BoxIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,OAAO,sDAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="camera" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const CameraIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type CameraIcon = ReturnType<typeof CameraIcon>;
6
+ export default CameraIcon;
7
+ //# sourceMappingURL=CameraIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CameraIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/CameraIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,UAAU,sDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="dropbox" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const DropboxIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type DropboxIcon = ReturnType<typeof DropboxIcon>;
6
+ export default DropboxIcon;
7
+ //# sourceMappingURL=DropboxIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropboxIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/DropboxIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,WAAW,sDAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="google-drive" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const GoogleDriveIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type GoogleDriveIcon = ReturnType<typeof GoogleDriveIcon>;
6
+ export default GoogleDriveIcon;
7
+ //# sourceMappingURL=GoogleDriveIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GoogleDriveIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/GoogleDriveIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,eAAe,sDAAwC,CAAC;AAC9D,KAAK,eAAe,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAC1D,eAAe,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="link" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const LinkIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type LinkIcon = ReturnType<typeof LinkIcon>;
6
+ export default LinkIcon;
7
+ //# sourceMappingURL=LinkIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LinkIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/LinkIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,QAAQ,sDAAwC,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="my-device" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const MyDeviceIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type MyDeviceIcon = ReturnType<typeof MyDeviceIcon>;
6
+ export default MyDeviceIcon;
7
+ //# sourceMappingURL=MyDeviceIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MyDeviceIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/MyDeviceIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="one-drive" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const OneDriveIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type OneDriveIcon = ReturnType<typeof OneDriveIcon>;
6
+ export default OneDriveIcon;
7
+ //# sourceMappingURL=OneDriveIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OneDriveIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/OneDriveIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,YAAY,sDAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ <script lang="ts">
2
+ import Icon from '../Icon.svelte'
3
+ let { class: className = undefined }: { class?: string } = $props()
4
+ </script>
5
+ <Icon name="screen-capture" class={className} />
@@ -0,0 +1,7 @@
1
+ type $$ComponentProps = {
2
+ class?: string;
3
+ };
4
+ declare const ScreenCaptureIcon: import("svelte").Component<$$ComponentProps, {}, "">;
5
+ type ScreenCaptureIcon = ReturnType<typeof ScreenCaptureIcon>;
6
+ export default ScreenCaptureIcon;
7
+ //# sourceMappingURL=ScreenCaptureIcon.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenCaptureIcon.svelte.d.ts","sourceRoot":"","sources":["../../../src/components/icons/ScreenCaptureIcon.svelte.ts"],"names":[],"mappings":"AAKC,KAAK,gBAAgB,GAAI;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAS7C,QAAA,MAAM,iBAAiB,sDAAwC,CAAC;AAChE,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC9D,eAAe,iBAAiB,CAAC"}