@useupup/vue 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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/dist/AudioUploader-6ZMGQ3GT.cjs +376 -0
  4. package/dist/AudioUploader-6ZMGQ3GT.cjs.map +1 -0
  5. package/dist/AudioUploader-IEWPI3TS.js +376 -0
  6. package/dist/AudioUploader-IEWPI3TS.js.map +1 -0
  7. package/dist/BoxUploader-S6CGJLO7.cjs +214 -0
  8. package/dist/BoxUploader-S6CGJLO7.cjs.map +1 -0
  9. package/dist/BoxUploader-TIDCYWMC.js +214 -0
  10. package/dist/BoxUploader-TIDCYWMC.js.map +1 -0
  11. package/dist/CameraUploader-575RARRY.js +258 -0
  12. package/dist/CameraUploader-575RARRY.js.map +1 -0
  13. package/dist/CameraUploader-LBIVBECB.cjs +258 -0
  14. package/dist/CameraUploader-LBIVBECB.cjs.map +1 -0
  15. package/dist/DropboxUploader-HTGDBDTB.cjs +216 -0
  16. package/dist/DropboxUploader-HTGDBDTB.cjs.map +1 -0
  17. package/dist/DropboxUploader-M2LY2Q32.js +216 -0
  18. package/dist/DropboxUploader-M2LY2Q32.js.map +1 -0
  19. package/dist/GoogleDriveUploader-R3WJYLW7.cjs +220 -0
  20. package/dist/GoogleDriveUploader-R3WJYLW7.cjs.map +1 -0
  21. package/dist/GoogleDriveUploader-SAY4C2QY.js +220 -0
  22. package/dist/GoogleDriveUploader-SAY4C2QY.js.map +1 -0
  23. package/dist/OneDriveUploader-EDB3RJA4.js +219 -0
  24. package/dist/OneDriveUploader-EDB3RJA4.js.map +1 -0
  25. package/dist/OneDriveUploader-WYALTOCQ.cjs +219 -0
  26. package/dist/OneDriveUploader-WYALTOCQ.cjs.map +1 -0
  27. package/dist/ScreenCaptureUploader-F65CM6OA.js +334 -0
  28. package/dist/ScreenCaptureUploader-F65CM6OA.js.map +1 -0
  29. package/dist/ScreenCaptureUploader-TZ74W7WQ.cjs +334 -0
  30. package/dist/ScreenCaptureUploader-TZ74W7WQ.cjs.map +1 -0
  31. package/dist/UrlUploader-PXEGUBQ4.js +143 -0
  32. package/dist/UrlUploader-PXEGUBQ4.js.map +1 -0
  33. package/dist/UrlUploader-TLYGV433.cjs +143 -0
  34. package/dist/UrlUploader-TLYGV433.cjs.map +1 -0
  35. package/dist/assets/logos.d.ts +5 -0
  36. package/dist/assets/logos.d.ts.map +1 -0
  37. package/dist/chunk-D32QOALR.cjs +1083 -0
  38. package/dist/chunk-D32QOALR.cjs.map +1 -0
  39. package/dist/chunk-GG4ABGXB.cjs +62 -0
  40. package/dist/chunk-GG4ABGXB.cjs.map +1 -0
  41. package/dist/chunk-GVB7IFRP.cjs +0 -0
  42. package/dist/chunk-GVB7IFRP.cjs.map +1 -0
  43. package/dist/chunk-IXLKUMV2.cjs +55 -0
  44. package/dist/chunk-IXLKUMV2.cjs.map +1 -0
  45. package/dist/chunk-M6AHIQ3M.js +62 -0
  46. package/dist/chunk-M6AHIQ3M.js.map +1 -0
  47. package/dist/chunk-PPPFIWFQ.js +1083 -0
  48. package/dist/chunk-PPPFIWFQ.js.map +1 -0
  49. package/dist/chunk-RZ7RTSRZ.js +55 -0
  50. package/dist/chunk-RZ7RTSRZ.js.map +1 -0
  51. package/dist/chunk-X6FZTCNT.js +0 -0
  52. package/dist/chunk-X6FZTCNT.js.map +1 -0
  53. package/dist/components/AudioUploader.vue.d.ts +3 -0
  54. package/dist/components/AudioUploader.vue.d.ts.map +1 -0
  55. package/dist/components/AudioWaveform.vue.d.ts +16 -0
  56. package/dist/components/AudioWaveform.vue.d.ts.map +1 -0
  57. package/dist/components/BoxUploader.vue.d.ts +3 -0
  58. package/dist/components/BoxUploader.vue.d.ts.map +1 -0
  59. package/dist/components/CameraUploader.vue.d.ts +3 -0
  60. package/dist/components/CameraUploader.vue.d.ts.map +1 -0
  61. package/dist/components/ClientBoxUploader.vue.d.ts +3 -0
  62. package/dist/components/ClientBoxUploader.vue.d.ts.map +1 -0
  63. package/dist/components/ClientDropboxUploader.vue.d.ts +3 -0
  64. package/dist/components/ClientDropboxUploader.vue.d.ts.map +1 -0
  65. package/dist/components/ClientGoogleDriveUploader.vue.d.ts +3 -0
  66. package/dist/components/ClientGoogleDriveUploader.vue.d.ts.map +1 -0
  67. package/dist/components/ClientOneDriveUploader.vue.d.ts +3 -0
  68. package/dist/components/ClientOneDriveUploader.vue.d.ts.map +1 -0
  69. package/dist/components/DefaultLoaderIcon.vue.d.ts +3 -0
  70. package/dist/components/DefaultLoaderIcon.vue.d.ts.map +1 -0
  71. package/dist/components/DropboxUploader.vue.d.ts +3 -0
  72. package/dist/components/DropboxUploader.vue.d.ts.map +1 -0
  73. package/dist/components/FileHero.vue.d.ts +13 -0
  74. package/dist/components/FileHero.vue.d.ts.map +1 -0
  75. package/dist/components/FileIcon.vue.d.ts +9 -0
  76. package/dist/components/FileIcon.vue.d.ts.map +1 -0
  77. package/dist/components/FileItem.vue.d.ts +14 -0
  78. package/dist/components/FileItem.vue.d.ts.map +1 -0
  79. package/dist/components/FileList.vue.d.ts +3 -0
  80. package/dist/components/FileList.vue.d.ts.map +1 -0
  81. package/dist/components/FilePreview.vue.d.ts +22 -0
  82. package/dist/components/FilePreview.vue.d.ts.map +1 -0
  83. package/dist/components/FilePreviewPortal.vue.d.ts +15 -0
  84. package/dist/components/FilePreviewPortal.vue.d.ts.map +1 -0
  85. package/dist/components/FilePreviewThumbnail.vue.d.ts +19 -0
  86. package/dist/components/FilePreviewThumbnail.vue.d.ts.map +1 -0
  87. package/dist/components/FileRow.vue.d.ts +17 -0
  88. package/dist/components/FileRow.vue.d.ts.map +1 -0
  89. package/dist/components/GoogleDriveUploader.vue.d.ts +3 -0
  90. package/dist/components/GoogleDriveUploader.vue.d.ts.map +1 -0
  91. package/dist/components/Icon.d.ts +36 -0
  92. package/dist/components/Icon.d.ts.map +1 -0
  93. package/dist/components/Icons.d.ts +10 -0
  94. package/dist/components/Icons.d.ts.map +1 -0
  95. package/dist/components/ImageEditorStub.vue.d.ts +3 -0
  96. package/dist/components/ImageEditorStub.vue.d.ts.map +1 -0
  97. package/dist/components/OneDriveUploader.vue.d.ts +3 -0
  98. package/dist/components/OneDriveUploader.vue.d.ts.map +1 -0
  99. package/dist/components/ScreenCaptureUploader.vue.d.ts +3 -0
  100. package/dist/components/ScreenCaptureUploader.vue.d.ts.map +1 -0
  101. package/dist/components/ServerModeDriveUploader.vue.d.ts +9 -0
  102. package/dist/components/ServerModeDriveUploader.vue.d.ts.map +1 -0
  103. package/dist/components/SourceSelector.vue.d.ts +3 -0
  104. package/dist/components/SourceSelector.vue.d.ts.map +1 -0
  105. package/dist/components/SourceView.vue.d.ts +3 -0
  106. package/dist/components/SourceView.vue.d.ts.map +1 -0
  107. package/dist/components/UploaderPanel.vue.d.ts +3 -0
  108. package/dist/components/UploaderPanel.vue.d.ts.map +1 -0
  109. package/dist/components/UrlUploader.vue.d.ts +3 -0
  110. package/dist/components/UrlUploader.vue.d.ts.map +1 -0
  111. package/dist/components/shared/DriveAuthFallback.vue.d.ts +12 -0
  112. package/dist/components/shared/DriveAuthFallback.vue.d.ts.map +1 -0
  113. package/dist/components/shared/DriveBrowser.vue.d.ts +28 -0
  114. package/dist/components/shared/DriveBrowser.vue.d.ts.map +1 -0
  115. package/dist/components/shared/DriveBrowserHeader.vue.d.ts +13 -0
  116. package/dist/components/shared/DriveBrowserHeader.vue.d.ts.map +1 -0
  117. package/dist/components/shared/DriveBrowserIcon.vue.d.ts +7 -0
  118. package/dist/components/shared/DriveBrowserIcon.vue.d.ts.map +1 -0
  119. package/dist/components/shared/DriveBrowserItem.vue.d.ts +9 -0
  120. package/dist/components/shared/DriveBrowserItem.vue.d.ts.map +1 -0
  121. package/dist/components/shared/FileSuccessCheck.vue.d.ts +20 -0
  122. package/dist/components/shared/FileSuccessCheck.vue.d.ts.map +1 -0
  123. package/dist/components/shared/ProgressBar.vue.d.ts +11 -0
  124. package/dist/components/shared/ProgressBar.vue.d.ts.map +1 -0
  125. package/dist/components/shared/SourceViewContainer.vue.d.ts +18 -0
  126. package/dist/components/shared/SourceViewContainer.vue.d.ts.map +1 -0
  127. package/dist/components/shared/UploaderHeader.vue.d.ts +15 -0
  128. package/dist/components/shared/UploaderHeader.vue.d.ts.map +1 -0
  129. package/dist/composables/use-tiles-per-row.d.ts +10 -0
  130. package/dist/composables/use-tiles-per-row.d.ts.map +1 -0
  131. package/dist/composables/useBox.d.ts +28 -0
  132. package/dist/composables/useBox.d.ts.map +1 -0
  133. package/dist/composables/useCameraUploader.d.ts +25 -0
  134. package/dist/composables/useCameraUploader.d.ts.map +1 -0
  135. package/dist/composables/useDropbox.d.ts +28 -0
  136. package/dist/composables/useDropbox.d.ts.map +1 -0
  137. package/dist/composables/useFetchFileByUrl.d.ts +8 -0
  138. package/dist/composables/useFetchFileByUrl.d.ts.map +1 -0
  139. package/dist/composables/useGoogleDrive.d.ts +28 -0
  140. package/dist/composables/useGoogleDrive.d.ts.map +1 -0
  141. package/dist/composables/useOneDrive.d.ts +29 -0
  142. package/dist/composables/useOneDrive.d.ts.map +1 -0
  143. package/dist/composables/useSSEProcessing.d.ts +19 -0
  144. package/dist/composables/useSSEProcessing.d.ts.map +1 -0
  145. package/dist/composables/useServerModeDrive.d.ts +17 -0
  146. package/dist/composables/useServerModeDrive.d.ts.map +1 -0
  147. package/dist/composables/useSourceSelector.d.ts +13 -0
  148. package/dist/composables/useSourceSelector.d.ts.map +1 -0
  149. package/dist/composables/useUploaderController.d.ts +4 -0
  150. package/dist/composables/useUploaderController.d.ts.map +1 -0
  151. package/dist/composables/useUploaderPanel.d.ts +13 -0
  152. package/dist/composables/useUploaderPanel.d.ts.map +1 -0
  153. package/dist/context/source-view-header-extra.d.ts +4 -0
  154. package/dist/context/source-view-header-extra.d.ts.map +1 -0
  155. package/dist/context/uploader-context.d.ts +95 -0
  156. package/dist/context/uploader-context.d.ts.map +1 -0
  157. package/dist/index.cjs +4405 -0
  158. package/dist/index.cjs.map +1 -0
  159. package/dist/index.d.ts +9 -0
  160. package/dist/index.d.ts.map +1 -0
  161. package/dist/index.js +4405 -0
  162. package/dist/index.js.map +1 -0
  163. package/dist/lib/constants.d.ts +11 -0
  164. package/dist/lib/constants.d.ts.map +1 -0
  165. package/dist/lib/view-mode.d.ts +24 -0
  166. package/dist/lib/view-mode.d.ts.map +1 -0
  167. package/dist/shared/types.d.ts +15 -0
  168. package/dist/shared/types.d.ts.map +1 -0
  169. package/dist/styles.d.ts +4 -0
  170. package/dist/tailwind-prefixed.css +2508 -0
  171. package/dist/upup-uploader.vue.d.ts +18 -0
  172. package/dist/upup-uploader.vue.d.ts.map +1 -0
  173. package/dist/use-upup-upload.d.ts +38 -0
  174. package/dist/use-upup-upload.d.ts.map +1 -0
  175. package/package.json +100 -0
@@ -0,0 +1,214 @@
1
+ import {
2
+ DriveAuthFallback_default,
3
+ DriveBrowser_default,
4
+ ServerModeDriveUploader_default
5
+ } from "./chunk-PPPFIWFQ.js";
6
+ import "./chunk-RZ7RTSRZ.js";
7
+ import "./chunk-M6AHIQ3M.js";
8
+ import {
9
+ export_helper_default,
10
+ useUploaderFiles,
11
+ useUploaderRuntime,
12
+ useUploaderSource
13
+ } from "./chunk-X6FZTCNT.js";
14
+
15
+ // src/components/BoxUploader.vue
16
+ import { defineComponent as _defineComponent2 } from "vue";
17
+
18
+ // src/components/ClientBoxUploader.vue
19
+ import { defineComponent as _defineComponent } from "vue";
20
+
21
+ // src/composables/useBox.ts
22
+ import {
23
+ shallowRef,
24
+ computed,
25
+ onMounted,
26
+ onUnmounted
27
+ } from "vue";
28
+ import { BOX_DESCRIPTOR } from "@useupup/core";
29
+ import {
30
+ DriveBrowserController
31
+ } from "@useupup/core/internal";
32
+ function useBox() {
33
+ const { core } = useUploaderRuntime();
34
+ const { setActiveSource } = useUploaderSource();
35
+ const { setFiles } = useUploaderFiles();
36
+ if (!core) {
37
+ throw new Error("useBox must be used inside <UpupUploader />");
38
+ }
39
+ const controller = new DriveBrowserController(core, BOX_DESCRIPTOR, {
40
+ onFilesSelected: (files) => {
41
+ setFiles(files);
42
+ },
43
+ onClose: () => {
44
+ setActiveSource(void 0);
45
+ }
46
+ });
47
+ const state = shallowRef(controller.getSnapshot());
48
+ let unsub = null;
49
+ onMounted(() => {
50
+ unsub = controller.subscribe(() => {
51
+ state.value = controller.getSnapshot();
52
+ });
53
+ controller.init();
54
+ });
55
+ onUnmounted(() => {
56
+ controller.destroy();
57
+ unsub == null ? void 0 : unsub();
58
+ });
59
+ return {
60
+ user: computed(() => state.value.user),
61
+ boxFiles: computed(() => state.value.folder),
62
+ logout: () => {
63
+ controller.signOut();
64
+ },
65
+ authenticate: () => {
66
+ controller.signIn();
67
+ },
68
+ token: computed(
69
+ () => state.value.isAuthenticated ? "active" : void 0
70
+ ),
71
+ isAuthenticated: computed(() => state.value.isAuthenticated),
72
+ isLoading: computed(() => state.value.isLoading),
73
+ path: computed(() => state.value.path),
74
+ setPath: (newPath) => {
75
+ controller.setPath(newPath);
76
+ },
77
+ handleClick: (file) => {
78
+ controller.handleClick(file);
79
+ },
80
+ selectedFiles: computed(() => state.value.selectedFiles),
81
+ showLoader: computed(() => state.value.showLoader),
82
+ handleSubmit: () => controller.handleSubmit(),
83
+ handleCancelDownload: () => {
84
+ controller.handleCancelDownload();
85
+ },
86
+ onSelectCurrentFolder: () => controller.onSelectCurrentFolder(),
87
+ isClickLoading: computed(() => state.value.isClickLoading),
88
+ error: computed(() => state.value.error),
89
+ hasMore: computed(() => state.value.hasMore),
90
+ isLoadingMore: computed(() => state.value.isLoadingMore),
91
+ loadMore: () => controller.loadMore()
92
+ };
93
+ }
94
+
95
+ // src/components/ClientBoxUploader.vue
96
+ import { openBlock as _openBlock, createBlock as _createBlock } from "vue";
97
+ var _sfc_main = /* @__PURE__ */ _defineComponent({
98
+ __name: "ClientBoxUploader",
99
+ setup(__props, { expose: __expose }) {
100
+ __expose();
101
+ const { user, boxFiles: driveFiles, logout, token, isAuthenticated, authenticate, isLoading, path, setPath, isClickLoading, handleClick, selectedFiles, showLoader, handleSubmit, handleCancelDownload, onSelectCurrentFolder, error, hasMore, isLoadingMore, loadMore } = useBox();
102
+ async function handleSignOut() {
103
+ logout();
104
+ }
105
+ const __returned__ = {
106
+ user,
107
+ driveFiles,
108
+ logout,
109
+ token,
110
+ isAuthenticated,
111
+ authenticate,
112
+ isLoading,
113
+ path,
114
+ setPath,
115
+ isClickLoading,
116
+ handleClick,
117
+ selectedFiles,
118
+ showLoader,
119
+ handleSubmit,
120
+ handleCancelDownload,
121
+ onSelectCurrentFolder,
122
+ error,
123
+ hasMore,
124
+ isLoadingMore,
125
+ loadMore,
126
+ handleSignOut,
127
+ DriveAuthFallback: DriveAuthFallback_default,
128
+ DriveBrowser: DriveBrowser_default
129
+ };
130
+ Object.defineProperty(__returned__, "__isScriptSetup", {
131
+ enumerable: false,
132
+ value: true
133
+ });
134
+ return __returned__;
135
+ }
136
+ });
137
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
138
+ return !$setup.isAuthenticated && !$setup.token && !$setup.isLoading ? (_openBlock(), _createBlock($setup["DriveAuthFallback"], {
139
+ key: 0,
140
+ "provider-name": "Box",
141
+ "on-retry": $setup.authenticate,
142
+ "data-upup-slot": "box-uploader"
143
+ }, null, 8, ["on-retry"])) : (_openBlock(), _createBlock($setup["DriveBrowser"], {
144
+ key: 1,
145
+ "drive-files": $setup.driveFiles,
146
+ user: $setup.user,
147
+ "handle-sign-out": $setup.handleSignOut,
148
+ "data-upup-slot": "box-uploader",
149
+ path: $setup.path,
150
+ "set-path": $setup.setPath,
151
+ "is-click-loading": $setup.isClickLoading,
152
+ "handle-click": $setup.handleClick,
153
+ "selected-files": $setup.selectedFiles,
154
+ "show-loader": $setup.showLoader,
155
+ "handle-submit": $setup.handleSubmit,
156
+ "handle-cancel-download": $setup.handleCancelDownload,
157
+ "on-select-current-folder": $setup.onSelectCurrentFolder,
158
+ error: $setup.error,
159
+ "has-more": $setup.hasMore,
160
+ "is-loading-more": $setup.isLoadingMore,
161
+ "load-more": $setup.loadMore
162
+ }, null, 8, [
163
+ "drive-files",
164
+ "user",
165
+ "path",
166
+ "set-path",
167
+ "is-click-loading",
168
+ "handle-click",
169
+ "selected-files",
170
+ "show-loader",
171
+ "handle-submit",
172
+ "handle-cancel-download",
173
+ "on-select-current-folder",
174
+ "error",
175
+ "has-more",
176
+ "is-loading-more",
177
+ "load-more"
178
+ ]));
179
+ }
180
+ var ClientBoxUploader_default = /* @__PURE__ */ export_helper_default(_sfc_main, [["render", _sfc_render], ["__file", "C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\src\\components\\ClientBoxUploader.vue"]]);
181
+
182
+ // src/components/BoxUploader.vue
183
+ import { openBlock as _openBlock2, createBlock as _createBlock2 } from "vue";
184
+ var _sfc_main2 = /* @__PURE__ */ _defineComponent2({
185
+ __name: "BoxUploader",
186
+ setup(__props, { expose: __expose }) {
187
+ __expose();
188
+ const { mode } = useUploaderRuntime();
189
+ const { setActiveSource } = useUploaderSource();
190
+ const __returned__ = {
191
+ mode,
192
+ setActiveSource,
193
+ ClientBoxUploader: ClientBoxUploader_default,
194
+ ServerModeDriveUploader: ServerModeDriveUploader_default
195
+ };
196
+ Object.defineProperty(__returned__, "__isScriptSetup", {
197
+ enumerable: false,
198
+ value: true
199
+ });
200
+ return __returned__;
201
+ }
202
+ });
203
+ function _sfc_render2(_ctx, _cache, $props, $setup, $data, $options) {
204
+ return $setup.mode === "server" ? (_openBlock2(), _createBlock2($setup["ServerModeDriveUploader"], {
205
+ key: 0,
206
+ provider: "box",
207
+ "on-back": () => $setup.setActiveSource(void 0)
208
+ }, null, 8, ["on-back"])) : (_openBlock2(), _createBlock2($setup["ClientBoxUploader"], { key: 1 }));
209
+ }
210
+ var BoxUploader_default = /* @__PURE__ */ export_helper_default(_sfc_main2, [["render", _sfc_render2], ["__file", "C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\src\\components\\BoxUploader.vue"]]);
211
+ export {
212
+ BoxUploader_default as default
213
+ };
214
+ //# sourceMappingURL=BoxUploader-TIDCYWMC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/composables/useBox.ts","../src/components/ClientBoxUploader.vue","../src/components/ClientBoxUploader.vue","../src/components/BoxUploader.vue","../src/components/BoxUploader.vue"],"sourcesContent":["import {\r\n shallowRef,\r\n computed,\r\n onMounted,\r\n onUnmounted,\r\n type ComputedRef,\r\n} from 'vue'\r\nimport { BOX_DESCRIPTOR, type DriveFile, type DriveFolder } from '@useupup/core'\r\nimport {\r\n DriveBrowserController,\r\n type DriveBrowserState,\r\n} from '@useupup/core/internal'\r\nimport {\r\n useUploaderFiles,\r\n useUploaderRuntime,\r\n useUploaderSource,\r\n} from '../context/uploader-context'\r\n\r\ninterface UseBoxReturn {\r\n user: ComputedRef<DriveBrowserState['user']>\r\n boxFiles: ComputedRef<DriveBrowserState['folder']>\r\n logout: () => void\r\n authenticate: () => void\r\n token: ComputedRef<'active' | undefined>\r\n isAuthenticated: ComputedRef<DriveBrowserState['isAuthenticated']>\r\n isLoading: ComputedRef<DriveBrowserState['isLoading']>\r\n path: ComputedRef<DriveBrowserState['path']>\r\n setPath: (newPath: DriveFolder[]) => void\r\n handleClick: (file: DriveFile) => void\r\n selectedFiles: ComputedRef<DriveBrowserState['selectedFiles']>\r\n showLoader: ComputedRef<DriveBrowserState['showLoader']>\r\n handleSubmit: () => Promise<void>\r\n handleCancelDownload: () => void\r\n onSelectCurrentFolder: () => Promise<void>\r\n isClickLoading: ComputedRef<DriveBrowserState['isClickLoading']>\r\n error: ComputedRef<DriveBrowserState['error']>\r\n hasMore: ComputedRef<DriveBrowserState['hasMore']>\r\n isLoadingMore: ComputedRef<DriveBrowserState['isLoadingMore']>\r\n loadMore: () => Promise<void>\r\n}\r\n\r\nexport function useBox(): UseBoxReturn {\r\n const { core } = useUploaderRuntime()\r\n const { setActiveSource } = useUploaderSource()\r\n const { setFiles } = useUploaderFiles()\r\n\r\n if (!core) {\r\n throw new Error('useBox must be used inside <UpupUploader />')\r\n }\r\n\r\n const controller = new DriveBrowserController(core, BOX_DESCRIPTOR, {\r\n onFilesSelected: files => {\r\n setFiles(files)\r\n },\r\n onClose: () => {\r\n setActiveSource(undefined)\r\n },\r\n })\r\n\r\n const state = shallowRef(controller.getSnapshot())\r\n let unsub: (() => void) | null = null\r\n\r\n onMounted(() => {\r\n unsub = controller.subscribe(() => {\r\n state.value = controller.getSnapshot()\r\n })\r\n controller.init()\r\n })\r\n onUnmounted(() => {\r\n controller.destroy()\r\n unsub?.()\r\n })\r\n\r\n return {\r\n user: computed(() => state.value.user),\r\n boxFiles: computed(() => state.value.folder),\r\n logout: () => {\r\n controller.signOut()\r\n },\r\n authenticate: () => {\r\n controller.signIn()\r\n },\r\n token: computed(() =>\r\n state.value.isAuthenticated ? 'active' : undefined,\r\n ),\r\n isAuthenticated: computed(() => state.value.isAuthenticated),\r\n isLoading: computed(() => state.value.isLoading),\r\n path: computed(() => state.value.path),\r\n setPath: (newPath: DriveFolder[]) => {\r\n controller.setPath(newPath)\r\n },\r\n handleClick: (file: DriveFile) => {\r\n controller.handleClick(file)\r\n },\r\n selectedFiles: computed(() => state.value.selectedFiles),\r\n showLoader: computed(() => state.value.showLoader),\r\n handleSubmit: () => controller.handleSubmit(),\r\n handleCancelDownload: () => {\r\n controller.handleCancelDownload()\r\n },\r\n onSelectCurrentFolder: () => controller.onSelectCurrentFolder(),\r\n isClickLoading: computed(() => state.value.isClickLoading),\r\n error: computed(() => state.value.error),\r\n hasMore: computed(() => state.value.hasMore),\r\n isLoadingMore: computed(() => state.value.isLoadingMore),\r\n loadMore: () => controller.loadMore(),\r\n }\r\n}\r\n\r\nexport default useBox\r\n","<script setup lang=\"ts\">\r\nimport { useBox } from '../composables/useBox'\r\nimport DriveAuthFallback from './shared/DriveAuthFallback.vue'\r\nimport DriveBrowser from './shared/DriveBrowser.vue'\r\n\r\nconst {\r\n user,\r\n boxFiles: driveFiles,\r\n logout,\r\n token,\r\n isAuthenticated,\r\n authenticate,\r\n isLoading,\r\n path,\r\n setPath,\r\n isClickLoading,\r\n handleClick,\r\n selectedFiles,\r\n showLoader,\r\n handleSubmit,\r\n handleCancelDownload,\r\n onSelectCurrentFolder,\r\n error,\r\n hasMore,\r\n isLoadingMore,\r\n loadMore,\r\n} = useBox()\r\n\r\nasync function handleSignOut() {\r\n logout()\r\n}\r\n</script>\r\n\r\n<template>\r\n <DriveAuthFallback\r\n v-if=\"!isAuthenticated && !token && !isLoading\"\r\n provider-name=\"Box\"\r\n :on-retry=\"authenticate\"\r\n data-upup-slot=\"box-uploader\"\r\n />\r\n <DriveBrowser\r\n v-else\r\n :drive-files=\"driveFiles\"\r\n :user=\"user\"\r\n :handle-sign-out=\"handleSignOut\"\r\n data-upup-slot=\"box-uploader\"\r\n :path=\"path\"\r\n :set-path=\"setPath\"\r\n :is-click-loading=\"isClickLoading\"\r\n :handle-click=\"handleClick\"\r\n :selected-files=\"selectedFiles\"\r\n :show-loader=\"showLoader\"\r\n :handle-submit=\"handleSubmit\"\r\n :handle-cancel-download=\"handleCancelDownload\"\r\n :on-select-current-folder=\"onSelectCurrentFolder\"\r\n :error=\"error\"\r\n :has-more=\"hasMore\"\r\n :is-loading-more=\"isLoadingMore\"\r\n :load-more=\"loadMore\"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useBox } from '../composables/useBox'\r\nimport DriveAuthFallback from './shared/DriveAuthFallback.vue'\r\nimport DriveBrowser from './shared/DriveBrowser.vue'\r\n\r\nconst {\r\n user,\r\n boxFiles: driveFiles,\r\n logout,\r\n token,\r\n isAuthenticated,\r\n authenticate,\r\n isLoading,\r\n path,\r\n setPath,\r\n isClickLoading,\r\n handleClick,\r\n selectedFiles,\r\n showLoader,\r\n handleSubmit,\r\n handleCancelDownload,\r\n onSelectCurrentFolder,\r\n error,\r\n hasMore,\r\n isLoadingMore,\r\n loadMore,\r\n} = useBox()\r\n\r\nasync function handleSignOut() {\r\n logout()\r\n}\r\n</script>\r\n\r\n<template>\r\n <DriveAuthFallback\r\n v-if=\"!isAuthenticated && !token && !isLoading\"\r\n provider-name=\"Box\"\r\n :on-retry=\"authenticate\"\r\n data-upup-slot=\"box-uploader\"\r\n />\r\n <DriveBrowser\r\n v-else\r\n :drive-files=\"driveFiles\"\r\n :user=\"user\"\r\n :handle-sign-out=\"handleSignOut\"\r\n data-upup-slot=\"box-uploader\"\r\n :path=\"path\"\r\n :set-path=\"setPath\"\r\n :is-click-loading=\"isClickLoading\"\r\n :handle-click=\"handleClick\"\r\n :selected-files=\"selectedFiles\"\r\n :show-loader=\"showLoader\"\r\n :handle-submit=\"handleSubmit\"\r\n :handle-cancel-download=\"handleCancelDownload\"\r\n :on-select-current-folder=\"onSelectCurrentFolder\"\r\n :error=\"error\"\r\n :has-more=\"hasMore\"\r\n :is-loading-more=\"isLoadingMore\"\r\n :load-more=\"loadMore\"\r\n />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useUploaderRuntime, useUploaderSource } from '../context/uploader-context'\r\nimport ClientBoxUploader from './ClientBoxUploader.vue'\r\nimport ServerModeDriveUploader from './ServerModeDriveUploader.vue'\r\n\r\nconst { mode } = useUploaderRuntime()\r\nconst { setActiveSource } = useUploaderSource()\r\n</script>\r\n\r\n<template>\r\n <ServerModeDriveUploader\r\n v-if=\"mode === 'server'\"\r\n provider=\"box\"\r\n :on-back=\"() => setActiveSource(undefined)\"\r\n />\r\n <ClientBoxUploader v-else />\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { useUploaderRuntime, useUploaderSource } from '../context/uploader-context'\r\nimport ClientBoxUploader from './ClientBoxUploader.vue'\r\nimport ServerModeDriveUploader from './ServerModeDriveUploader.vue'\r\n\r\nconst { mode } = useUploaderRuntime()\r\nconst { setActiveSource } = useUploaderSource()\r\n</script>\r\n\r\n<template>\r\n <ServerModeDriveUploader\r\n v-if=\"mode === 'server'\"\r\n provider=\"box\"\r\n :on-back=\"() => setActiveSource(undefined)\"\r\n />\r\n <ClientBoxUploader v-else />\r\n</template>\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEG;AACP,SAAS,sBAAwD;AACjE;AAAA,EACI;AAAA,OAEG;AA8BA,SAAS,SAAuB;AACnC,QAAM,EAAE,KAAK,IAAI,mBAAmB;AACpC,QAAM,EAAE,gBAAgB,IAAI,kBAAkB;AAC9C,QAAM,EAAE,SAAS,IAAI,iBAAiB;AAEtC,MAAI,CAAC,MAAM;AACP,UAAM,IAAI,MAAM,6CAA6C;AAAA,EACjE;AAEA,QAAM,aAAa,IAAI,uBAAuB,MAAM,gBAAgB;AAAA,IAChE,iBAAiB,WAAS;AACtB,eAAS,KAAK;AAAA,IAClB;AAAA,IACA,SAAS,MAAM;AACX,sBAAgB,MAAS;AAAA,IAC7B;AAAA,EACJ,CAAC;AAED,QAAM,QAAQ,WAAW,WAAW,YAAY,CAAC;AACjD,MAAI,QAA6B;AAEjC,YAAU,MAAM;AACZ,YAAQ,WAAW,UAAU,MAAM;AAC/B,YAAM,QAAQ,WAAW,YAAY;AAAA,IACzC,CAAC;AACD,eAAW,KAAK;AAAA,EACpB,CAAC;AACD,cAAY,MAAM;AACd,eAAW,QAAQ;AACnB;AAAA,EACJ,CAAC;AAED,SAAO;AAAA,IACH,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAAA,IACrC,UAAU,SAAS,MAAM,MAAM,MAAM,MAAM;AAAA,IAC3C,QAAQ,MAAM;AACV,iBAAW,QAAQ;AAAA,IACvB;AAAA,IACA,cAAc,MAAM;AAChB,iBAAW,OAAO;AAAA,IACtB;AAAA,IACA,OAAO;AAAA,MAAS,MACZ,MAAM,MAAM,kBAAkB,WAAW;AAAA,IAC7C;AAAA,IACA,iBAAiB,SAAS,MAAM,MAAM,MAAM,eAAe;AAAA,IAC3D,WAAW,SAAS,MAAM,MAAM,MAAM,SAAS;AAAA,IAC/C,MAAM,SAAS,MAAM,MAAM,MAAM,IAAI;AAAA,IACrC,SAAS,CAAC,YAA2B;AACjC,iBAAW,QAAQ,OAAO;AAAA,IAC9B;AAAA,IACA,aAAa,CAAC,SAAoB;AAC9B,iBAAW,YAAY,IAAI;AAAA,IAC/B;AAAA,IACA,eAAe,SAAS,MAAM,MAAM,MAAM,aAAa;AAAA,IACvD,YAAY,SAAS,MAAM,MAAM,MAAM,UAAU;AAAA,IACjD,cAAc,MAAM,WAAW,aAAa;AAAA,IAC5C,sBAAsB,MAAM;AACxB,iBAAW,qBAAqB;AAAA,IACpC;AAAA,IACA,uBAAuB,MAAM,WAAW,sBAAsB;AAAA,IAC9D,gBAAgB,SAAS,MAAM,MAAM,MAAM,cAAc;AAAA,IACzD,OAAO,SAAS,MAAM,MAAM,MAAM,KAAK;AAAA,IACvC,SAAS,SAAS,MAAM,MAAM,MAAM,OAAO;AAAA,IAC3C,eAAe,SAAS,MAAM,MAAM,MAAM,aAAa;AAAA,IACvD,UAAU,MAAM,WAAW,SAAS;AAAA,EACxC;AACJ;A;;;;;;;ACtGA,UAAM,EACF,MACA,UAAU,YACV,QACA,OACA,iBACA,cACA,WACA,MACA,SACA,gBACA,aACA,eACA,YACA,cACA,sBACA,uBACA,OACA,SACA,eACA,SAAA,IACA,OAAO;AAEX,mBAAe,gBAAgB;AAC3B,aAAO;IACX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACKe,SAAA,CAAA,OAAA,mBAAe,CAAK,OAAA,SAAK,CAAK,OAAA,aADzC,WAAA,GAAA,aAKE,OAAA,mBAAA,GAAA;;IAHE,iBAAc;IACb,YAAU,OAAA;IACX,kBAAe;gCAEnB,WAAA,GAAA,aAmBE,OAAA,cAAA,GAAA;;IAjBG,eAAa,OAAA;IACb,MAAM,OAAA;IACN,mBAAiB,OAAA;IAClB,kBAAe;IACd,MAAM,OAAA;IACN,YAAU,OAAA;IACV,oBAAkB,OAAA;IAClB,gBAAc,OAAA;IACd,kBAAgB,OAAA;IAChB,eAAa,OAAA;IACb,iBAAe,OAAA;IACf,0BAAwB,OAAA;IACxB,4BAA0B,OAAA;IAC1B,OAAO,OAAA;IACP,YAAU,OAAA;IACV,mBAAiB,OAAA;IACjB,aAAW,OAAA;;;;;;;;;;;;;;;;;;;;A;;;;;;;ACrDpB,UAAM,EAAE,KAAA,IAAS,mBAAmB;AACpC,UAAM,EAAE,gBAAA,IAAoB,kBAAkB;;;;;;;;;;;;;;;ACKhC,SAAA,OAAA,SAAI,YADdA,YAAA,GAAAC,cAIE,OAAA,yBAAA,GAAA;;IAFE,UAAS;IACR,WAAA,MAAe,OAAA,gBAAgB,MAAS;+BAE7CD,YAAA,GAAAC,cAA4B,OAAA,mBAAA,GAAA,EAAA,KAAA,EAAA,CAAA;;;","names":["_openBlock","_createBlock"]}
@@ -0,0 +1,258 @@
1
+ import {
2
+ SourceViewContainer_default
3
+ } from "./chunk-M6AHIQ3M.js";
4
+ import {
5
+ export_helper_default,
6
+ useUploaderFiles,
7
+ useUploaderI18n,
8
+ useUploaderOptions,
9
+ useUploaderRuntime,
10
+ useUploaderSource,
11
+ useUploaderTheme
12
+ } from "./chunk-X6FZTCNT.js";
13
+
14
+ // src/components/CameraUploader.vue
15
+ import { defineComponent as _defineComponent } from "vue";
16
+ import { onMounted, watch } from "vue";
17
+ import { formatUiMessage as t } from "@useupup/core";
18
+ import { cn } from "@useupup/core/internal";
19
+
20
+ // src/composables/useCameraUploader.ts
21
+ import { computed, onUnmounted, ref } from "vue";
22
+ function useCameraUploader() {
23
+ const { core } = useUploaderRuntime();
24
+ const { setFiles } = useUploaderFiles();
25
+ const { setActiveSource } = useUploaderSource();
26
+ const { translations } = useUploaderI18n();
27
+ const props = useUploaderOptions();
28
+ const theme = useUploaderTheme();
29
+ const videoRef = ref(null);
30
+ const capturedUrl = ref("");
31
+ const facingMode = ref("environment" /* Environment */);
32
+ const stream = ref(null);
33
+ const newCameraSide = computed(
34
+ () => facingMode.value === "environment" /* Environment */ ? "front" : "back"
35
+ );
36
+ async function startCamera() {
37
+ try {
38
+ if (stream.value) {
39
+ stream.value.getTracks().forEach((t2) => {
40
+ t2.stop();
41
+ });
42
+ }
43
+ const mediaStream = await navigator.mediaDevices.getUserMedia({
44
+ video: { facingMode: facingMode.value }
45
+ });
46
+ stream.value = mediaStream;
47
+ if (videoRef.value) {
48
+ videoRef.value.srcObject = mediaStream;
49
+ await videoRef.value.play();
50
+ }
51
+ } catch {
52
+ }
53
+ }
54
+ function stopCamera() {
55
+ if (stream.value) {
56
+ stream.value.getTracks().forEach((t2) => {
57
+ t2.stop();
58
+ });
59
+ stream.value = null;
60
+ }
61
+ if (videoRef.value) {
62
+ videoRef.value.srcObject = null;
63
+ }
64
+ }
65
+ function capture() {
66
+ if (!videoRef.value) return;
67
+ const canvas = document.createElement("canvas");
68
+ canvas.width = videoRef.value.videoWidth;
69
+ canvas.height = videoRef.value.videoHeight;
70
+ const ctx = canvas.getContext("2d");
71
+ if (!ctx) return;
72
+ ctx.drawImage(videoRef.value, 0, 0);
73
+ const dataUrl = canvas.toDataURL("image/jpeg");
74
+ capturedUrl.value = dataUrl;
75
+ core == null ? void 0 : core.emit("camera-capture", { dataUrl });
76
+ }
77
+ function clearUrl() {
78
+ capturedUrl.value = "";
79
+ }
80
+ async function handleFetchImage() {
81
+ if (!capturedUrl.value) return;
82
+ const response = await fetch(capturedUrl.value);
83
+ const blob = await response.blob();
84
+ const file = new File([blob], `capture-${Date.now()}.jpg`, {
85
+ type: "image/jpeg"
86
+ });
87
+ setFiles([file]);
88
+ capturedUrl.value = "";
89
+ setActiveSource(void 0);
90
+ core == null ? void 0 : core.emit("camera-confirm", { file });
91
+ }
92
+ function handleCameraSwitch() {
93
+ facingMode.value = facingMode.value === "environment" /* Environment */ ? "user" /* User */ : "environment" /* Environment */;
94
+ }
95
+ onUnmounted(() => {
96
+ stopCamera();
97
+ });
98
+ return {
99
+ videoRef,
100
+ capturedUrl,
101
+ facingMode,
102
+ newCameraSide,
103
+ startCamera,
104
+ stopCamera,
105
+ capture,
106
+ clearUrl,
107
+ handleFetchImage,
108
+ handleCameraSwitch,
109
+ translations,
110
+ props,
111
+ theme
112
+ };
113
+ }
114
+
115
+ // src/components/CameraUploader.vue
116
+ import { resolveDynamicComponent as _resolveDynamicComponent, openBlock as _openBlock, createBlock as _createBlock, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, Fragment as _Fragment, withCtx as _withCtx } from "vue";
117
+ var _sfc_main = /* @__PURE__ */ _defineComponent({
118
+ __name: "CameraUploader",
119
+ setup(__props, { expose: __expose }) {
120
+ __expose();
121
+ const { videoRef, capturedUrl, facingMode, newCameraSide, startCamera, capture, clearUrl, handleFetchImage, handleCameraSwitch, translations: tr, props: { icons: { CameraCaptureIcon, CameraDeleteIcon, CameraRotateIcon } }, theme: { isDark: dark, slotOverrides: slotClasses } } = useCameraUploader();
122
+ onMounted(() => {
123
+ startCamera();
124
+ });
125
+ watch(facingMode, () => {
126
+ if (!capturedUrl.value) startCamera();
127
+ });
128
+ const __returned__ = {
129
+ videoRef,
130
+ capturedUrl,
131
+ facingMode,
132
+ newCameraSide,
133
+ startCamera,
134
+ capture,
135
+ clearUrl,
136
+ handleFetchImage,
137
+ handleCameraSwitch,
138
+ tr,
139
+ CameraCaptureIcon,
140
+ CameraDeleteIcon,
141
+ CameraRotateIcon,
142
+ dark,
143
+ slotClasses,
144
+ get t() {
145
+ return t;
146
+ },
147
+ get cn() {
148
+ return cn;
149
+ },
150
+ SourceViewContainer: SourceViewContainer_default
151
+ };
152
+ Object.defineProperty(__returned__, "__isScriptSetup", {
153
+ enumerable: false,
154
+ value: true
155
+ });
156
+ return __returned__;
157
+ }
158
+ });
159
+ var _hoisted_1 = {
160
+ "data-testid": "upup-camera-uploader",
161
+ class: "upup-flex upup-h-full upup-w-full upup-flex-col upup-justify-center upup-overflow-hidden upup-px-3 upup-py-2"
162
+ };
163
+ var _hoisted_2 = { class: "upup-flex upup-min-h-0 upup-flex-1 upup-items-center upup-justify-center upup-pt-2" };
164
+ var _hoisted_3 = {
165
+ key: 1,
166
+ ref: "videoRef",
167
+ autoplay: "",
168
+ muted: "",
169
+ playsinline: "",
170
+ class: "upup-aspect-video upup-max-h-full upup-max-w-full upup-rounded-xl upup-object-contain"
171
+ };
172
+ var _hoisted_4 = { class: "upup-flex upup-shrink-0 upup-gap-4" };
173
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
174
+ return _openBlock(), _createBlock($setup["SourceViewContainer"], { "data-upup-slot": "camera-uploader" }, {
175
+ default: _withCtx(() => [_createElementVNode("div", _hoisted_1, [_createElementVNode("div", _hoisted_2, [!!$setup.capturedUrl ? (_openBlock(), _createElementBlock(
176
+ "div",
177
+ {
178
+ key: 0,
179
+ class: _normalizeClass($setup.cn("upup-relative upup-aspect-video upup-max-h-full upup-max-w-full upup-bg-black/[0.025] upup-bg-contain upup-bg-center upup-bg-no-repeat upup-shadow-xl", { "upup-bg-white/5 dark:upup-bg-white/5": $setup.dark }, $setup.slotClasses.cameraPreviewContainer)),
180
+ style: _normalizeStyle({ backgroundImage: `url(${$setup.capturedUrl})` })
181
+ },
182
+ [_createElementVNode(
183
+ "button",
184
+ {
185
+ onClick: _cache[0] || (_cache[0] = (...args) => $setup.clearUrl && $setup.clearUrl(...args)),
186
+ class: _normalizeClass($setup.cn("upup-absolute upup--right-2 upup--top-2 upup-z-10 upup-rounded-full upup-bg-[#272727] upup-p-1 upup-text-xl upup-text-[#f5f5f5]", $setup.slotClasses.cameraDeleteButton)),
187
+ type: "button"
188
+ },
189
+ [(_openBlock(), _createBlock(_resolveDynamicComponent($setup.CameraDeleteIcon)))],
190
+ 2
191
+ /* CLASS */
192
+ )],
193
+ 6
194
+ /* CLASS, STYLE */
195
+ )) : _createCommentVNode("v-if", true), !$setup.capturedUrl ? (_openBlock(), _createElementBlock(
196
+ "video",
197
+ _hoisted_3,
198
+ null,
199
+ 512
200
+ /* NEED_PATCH */
201
+ )) : _createCommentVNode("v-if", true)]), _createElementVNode("div", _hoisted_4, [!$setup.capturedUrl ? (_openBlock(), _createElementBlock(
202
+ _Fragment,
203
+ { key: 0 },
204
+ [_createElementVNode(
205
+ "button",
206
+ {
207
+ class: _normalizeClass($setup.cn("upup-mt-2 upup-flex upup-w-1/3 upup-flex-col upup-items-center upup-justify-center upup-rounded-md upup-bg-[#0ea5e9] upup-p-2 upup-text-white upup-transition-all upup-duration-300", { "upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]": $setup.dark }, $setup.slotClasses.cameraCaptureButton)),
208
+ onClick: _cache[1] || (_cache[1] = (...args) => $setup.capture && $setup.capture(...args)),
209
+ type: "button"
210
+ },
211
+ [_createElementVNode("span", null, [(_openBlock(), _createBlock(_resolveDynamicComponent($setup.CameraCaptureIcon)))]), _createElementVNode(
212
+ "span",
213
+ null,
214
+ _toDisplayString($setup.tr.capture),
215
+ 1
216
+ /* TEXT */
217
+ )],
218
+ 2
219
+ /* CLASS */
220
+ ), _createElementVNode(
221
+ "button",
222
+ {
223
+ class: _normalizeClass($setup.cn("upup-mt-2 upup-flex upup-w-1/3 upup-flex-col upup-items-center upup-rounded-md upup-bg-gray-500 upup-p-2 upup-text-white upup-transition-all upup-duration-300 hover:upup-bg-gray-600", $setup.slotClasses.cameraRotateButton)),
224
+ onClick: _cache[2] || (_cache[2] = (...args) => $setup.handleCameraSwitch && $setup.handleCameraSwitch(...args)),
225
+ type: "button"
226
+ },
227
+ [_createElementVNode("span", null, [(_openBlock(), _createBlock(_resolveDynamicComponent($setup.CameraRotateIcon)))]), _createElementVNode(
228
+ "span",
229
+ null,
230
+ _toDisplayString($setup.t($setup.tr.switchToCamera, { side: $setup.newCameraSide === "front" ? $setup.tr.front : $setup.tr.back })),
231
+ 1
232
+ /* TEXT */
233
+ )],
234
+ 2
235
+ /* CLASS */
236
+ )],
237
+ 64
238
+ /* STABLE_FRAGMENT */
239
+ )) : _createCommentVNode("v-if", true), !!$setup.capturedUrl ? (_openBlock(), _createElementBlock(
240
+ "button",
241
+ {
242
+ key: 1,
243
+ class: _normalizeClass($setup.cn("upup-mt-2 upup-w-full upup-rounded-md upup-bg-[#0ea5e9] upup-p-2 upup-text-white upup-transition-all upup-duration-300", { "upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]": $setup.dark }, $setup.slotClasses.cameraAddButton)),
244
+ onClick: _cache[3] || (_cache[3] = (...args) => $setup.handleFetchImage && $setup.handleFetchImage(...args)),
245
+ type: "button"
246
+ },
247
+ _toDisplayString($setup.tr.addImage),
248
+ 3
249
+ /* TEXT, CLASS */
250
+ )) : _createCommentVNode("v-if", true)])])]),
251
+ _: 1
252
+ });
253
+ }
254
+ var CameraUploader_default = /* @__PURE__ */ export_helper_default(_sfc_main, [["render", _sfc_render], ["__file", "C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\src\\components\\CameraUploader.vue"]]);
255
+ export {
256
+ CameraUploader_default as default
257
+ };
258
+ //# sourceMappingURL=CameraUploader-575RARRY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/CameraUploader.vue","../src/components/CameraUploader.vue","../src/composables/useCameraUploader.ts"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { onMounted, watch } from 'vue'\r\nimport { formatUiMessage as t } from '@useupup/core'\r\nimport { cn } from '@useupup/core/internal'\r\nimport useCameraUploader from '../composables/useCameraUploader'\r\nimport SourceViewContainer from './shared/SourceViewContainer.vue'\r\n\r\nconst {\r\n videoRef,\r\n capturedUrl,\r\n facingMode,\r\n newCameraSide,\r\n startCamera,\r\n capture,\r\n clearUrl,\r\n handleFetchImage,\r\n handleCameraSwitch,\r\n translations: tr,\r\n props: { icons: { CameraCaptureIcon, CameraDeleteIcon, CameraRotateIcon } },\r\n theme: { isDark: dark, slotOverrides: slotClasses },\r\n} = useCameraUploader()\r\n\r\nonMounted(() => {\r\n startCamera()\r\n})\r\n\r\n// Restart camera when facingMode changes\r\nwatch(facingMode, () => {\r\n if (!capturedUrl.value) startCamera()\r\n})\r\n</script>\r\n\r\n<template>\r\n <SourceViewContainer data-upup-slot=\"camera-uploader\">\r\n <div\r\n data-testid=\"upup-camera-uploader\"\r\n class=\"upup-flex upup-h-full upup-w-full upup-flex-col upup-justify-center upup-overflow-hidden upup-px-3 upup-py-2\"\r\n >\r\n <div class=\"upup-flex upup-min-h-0 upup-flex-1 upup-items-center upup-justify-center upup-pt-2\">\r\n <template v-if=\"!!capturedUrl\">\r\n <div\r\n :class=\"cn(\r\n 'upup-relative upup-aspect-video upup-max-h-full upup-max-w-full upup-bg-black/[0.025] upup-bg-contain upup-bg-center upup-bg-no-repeat upup-shadow-xl',\r\n {\r\n 'upup-bg-white/5 dark:upup-bg-white/5': dark,\r\n },\r\n slotClasses.cameraPreviewContainer,\r\n )\"\r\n :style=\"{ backgroundImage: `url(${capturedUrl})` }\"\r\n >\r\n <button\r\n @click=\"clearUrl\"\r\n :class=\"cn(\r\n 'upup-absolute upup--right-2 upup--top-2 upup-z-10 upup-rounded-full upup-bg-[#272727] upup-p-1 upup-text-xl upup-text-[#f5f5f5]',\r\n slotClasses.cameraDeleteButton,\r\n )\"\r\n type=\"button\"\r\n >\r\n <component :is=\"CameraDeleteIcon\" />\r\n </button>\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"!capturedUrl\">\r\n <video\r\n ref=\"videoRef\"\r\n autoplay\r\n muted\r\n playsinline\r\n class=\"upup-aspect-video upup-max-h-full upup-max-w-full upup-rounded-xl upup-object-contain\"\r\n />\r\n </template>\r\n </div>\r\n\r\n <div class=\"upup-flex upup-shrink-0 upup-gap-4\">\r\n <template v-if=\"!capturedUrl\">\r\n <button\r\n :class=\"cn(\r\n 'upup-mt-2 upup-flex upup-w-1/3 upup-flex-col upup-items-center upup-justify-center upup-rounded-md upup-bg-[#0ea5e9] upup-p-2 upup-text-white upup-transition-all upup-duration-300',\r\n {\r\n 'upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n slotClasses.cameraCaptureButton,\r\n )\"\r\n @click=\"capture\"\r\n type=\"button\"\r\n >\r\n <span><component :is=\"CameraCaptureIcon\" /></span>\r\n <span>{{ tr.capture }}</span>\r\n </button>\r\n <button\r\n :class=\"cn(\r\n 'upup-mt-2 upup-flex upup-w-1/3 upup-flex-col upup-items-center upup-rounded-md upup-bg-gray-500 upup-p-2 upup-text-white upup-transition-all upup-duration-300 hover:upup-bg-gray-600',\r\n slotClasses.cameraRotateButton,\r\n )\"\r\n @click=\"handleCameraSwitch\"\r\n type=\"button\"\r\n >\r\n <span><component :is=\"CameraRotateIcon\" /></span>\r\n <span>\r\n {{ t(tr.switchToCamera, {\r\n side: newCameraSide === 'front' ? tr.front : tr.back,\r\n }) }}\r\n </span>\r\n </button>\r\n </template>\r\n\r\n <template v-if=\"!!capturedUrl\">\r\n <button\r\n :class=\"cn(\r\n 'upup-mt-2 upup-w-full upup-rounded-md upup-bg-[#0ea5e9] upup-p-2 upup-text-white upup-transition-all upup-duration-300',\r\n {\r\n 'upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n slotClasses.cameraAddButton,\r\n )\"\r\n @click=\"handleFetchImage\"\r\n type=\"button\"\r\n >\r\n {{ tr.addImage }}\r\n </button>\r\n </template>\r\n </div>\r\n </div>\r\n </SourceViewContainer>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { onMounted, watch } from 'vue'\r\nimport { formatUiMessage as t } from '@useupup/core'\r\nimport { cn } from '@useupup/core/internal'\r\nimport useCameraUploader from '../composables/useCameraUploader'\r\nimport SourceViewContainer from './shared/SourceViewContainer.vue'\r\n\r\nconst {\r\n videoRef,\r\n capturedUrl,\r\n facingMode,\r\n newCameraSide,\r\n startCamera,\r\n capture,\r\n clearUrl,\r\n handleFetchImage,\r\n handleCameraSwitch,\r\n translations: tr,\r\n props: { icons: { CameraCaptureIcon, CameraDeleteIcon, CameraRotateIcon } },\r\n theme: { isDark: dark, slotOverrides: slotClasses },\r\n} = useCameraUploader()\r\n\r\nonMounted(() => {\r\n startCamera()\r\n})\r\n\r\n// Restart camera when facingMode changes\r\nwatch(facingMode, () => {\r\n if (!capturedUrl.value) startCamera()\r\n})\r\n</script>\r\n\r\n<template>\r\n <SourceViewContainer data-upup-slot=\"camera-uploader\">\r\n <div\r\n data-testid=\"upup-camera-uploader\"\r\n class=\"upup-flex upup-h-full upup-w-full upup-flex-col upup-justify-center upup-overflow-hidden upup-px-3 upup-py-2\"\r\n >\r\n <div class=\"upup-flex upup-min-h-0 upup-flex-1 upup-items-center upup-justify-center upup-pt-2\">\r\n <template v-if=\"!!capturedUrl\">\r\n <div\r\n :class=\"cn(\r\n 'upup-relative upup-aspect-video upup-max-h-full upup-max-w-full upup-bg-black/[0.025] upup-bg-contain upup-bg-center upup-bg-no-repeat upup-shadow-xl',\r\n {\r\n 'upup-bg-white/5 dark:upup-bg-white/5': dark,\r\n },\r\n slotClasses.cameraPreviewContainer,\r\n )\"\r\n :style=\"{ backgroundImage: `url(${capturedUrl})` }\"\r\n >\r\n <button\r\n @click=\"clearUrl\"\r\n :class=\"cn(\r\n 'upup-absolute upup--right-2 upup--top-2 upup-z-10 upup-rounded-full upup-bg-[#272727] upup-p-1 upup-text-xl upup-text-[#f5f5f5]',\r\n slotClasses.cameraDeleteButton,\r\n )\"\r\n type=\"button\"\r\n >\r\n <component :is=\"CameraDeleteIcon\" />\r\n </button>\r\n </div>\r\n </template>\r\n\r\n <template v-if=\"!capturedUrl\">\r\n <video\r\n ref=\"videoRef\"\r\n autoplay\r\n muted\r\n playsinline\r\n class=\"upup-aspect-video upup-max-h-full upup-max-w-full upup-rounded-xl upup-object-contain\"\r\n />\r\n </template>\r\n </div>\r\n\r\n <div class=\"upup-flex upup-shrink-0 upup-gap-4\">\r\n <template v-if=\"!capturedUrl\">\r\n <button\r\n :class=\"cn(\r\n 'upup-mt-2 upup-flex upup-w-1/3 upup-flex-col upup-items-center upup-justify-center upup-rounded-md upup-bg-[#0ea5e9] upup-p-2 upup-text-white upup-transition-all upup-duration-300',\r\n {\r\n 'upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n slotClasses.cameraCaptureButton,\r\n )\"\r\n @click=\"capture\"\r\n type=\"button\"\r\n >\r\n <span><component :is=\"CameraCaptureIcon\" /></span>\r\n <span>{{ tr.capture }}</span>\r\n </button>\r\n <button\r\n :class=\"cn(\r\n 'upup-mt-2 upup-flex upup-w-1/3 upup-flex-col upup-items-center upup-rounded-md upup-bg-gray-500 upup-p-2 upup-text-white upup-transition-all upup-duration-300 hover:upup-bg-gray-600',\r\n slotClasses.cameraRotateButton,\r\n )\"\r\n @click=\"handleCameraSwitch\"\r\n type=\"button\"\r\n >\r\n <span><component :is=\"CameraRotateIcon\" /></span>\r\n <span>\r\n {{ t(tr.switchToCamera, {\r\n side: newCameraSide === 'front' ? tr.front : tr.back,\r\n }) }}\r\n </span>\r\n </button>\r\n </template>\r\n\r\n <template v-if=\"!!capturedUrl\">\r\n <button\r\n :class=\"cn(\r\n 'upup-mt-2 upup-w-full upup-rounded-md upup-bg-[#0ea5e9] upup-p-2 upup-text-white upup-transition-all upup-duration-300',\r\n {\r\n 'upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n slotClasses.cameraAddButton,\r\n )\"\r\n @click=\"handleFetchImage\"\r\n type=\"button\"\r\n >\r\n {{ tr.addImage }}\r\n </button>\r\n </template>\r\n </div>\r\n </div>\r\n </SourceViewContainer>\r\n</template>\r\n","import { computed, onUnmounted, ref, type Ref, type ComputedRef } from 'vue'\r\nimport type { Translations } from '@useupup/core'\r\nimport {\r\n useUploaderFiles,\r\n useUploaderI18n,\r\n useUploaderOptions,\r\n useUploaderRuntime,\r\n useUploaderSource,\r\n useUploaderTheme,\r\n} from '../context/uploader-context'\r\nimport type { ContextProps, ContextTheme } from '../context/uploader-context'\r\n\r\nexport enum FacingMode {\r\n Environment = 'environment',\r\n User = 'user',\r\n}\r\n\r\ninterface UseCameraUploaderReturn {\r\n videoRef: Ref<HTMLVideoElement | null>\r\n capturedUrl: Ref<string>\r\n facingMode: Ref<FacingMode>\r\n newCameraSide: ComputedRef<'front' | 'back'>\r\n startCamera: () => Promise<void>\r\n stopCamera: () => void\r\n capture: () => void\r\n clearUrl: () => void\r\n handleFetchImage: () => Promise<void>\r\n handleCameraSwitch: () => void\r\n translations: Translations\r\n props: ContextProps\r\n theme: ContextTheme\r\n}\r\n\r\nexport default function useCameraUploader(): UseCameraUploaderReturn {\r\n const { core } = useUploaderRuntime()\r\n const { setFiles } = useUploaderFiles()\r\n const { setActiveSource } = useUploaderSource()\r\n const { translations } = useUploaderI18n()\r\n const props = useUploaderOptions()\r\n const theme = useUploaderTheme()\r\n\r\n const videoRef = ref<HTMLVideoElement | null>(null)\r\n const capturedUrl = ref('')\r\n const facingMode = ref<FacingMode>(FacingMode.Environment)\r\n const stream = ref<MediaStream | null>(null)\r\n\r\n const newCameraSide = computed(() =>\r\n facingMode.value === FacingMode.Environment ? 'front' : 'back',\r\n )\r\n\r\n async function startCamera() {\r\n try {\r\n if (stream.value) {\r\n stream.value.getTracks().forEach(t => {\r\n t.stop()\r\n })\r\n }\r\n const mediaStream = await navigator.mediaDevices.getUserMedia({\r\n video: { facingMode: facingMode.value },\r\n })\r\n stream.value = mediaStream\r\n if (videoRef.value) {\r\n videoRef.value.srcObject = mediaStream\r\n await videoRef.value.play()\r\n }\r\n } catch {\r\n // upup-catch: camera unavailable or autoplay blocked — leave stream null\r\n }\r\n }\r\n\r\n function stopCamera() {\r\n if (stream.value) {\r\n stream.value.getTracks().forEach(t => {\r\n t.stop()\r\n })\r\n stream.value = null\r\n }\r\n if (videoRef.value) {\r\n videoRef.value.srcObject = null\r\n }\r\n }\r\n\r\n function capture() {\r\n if (!videoRef.value) return\r\n\r\n const canvas = document.createElement('canvas')\r\n canvas.width = videoRef.value.videoWidth\r\n canvas.height = videoRef.value.videoHeight\r\n const ctx = canvas.getContext('2d')\r\n if (!ctx) return\r\n\r\n ctx.drawImage(videoRef.value, 0, 0)\r\n const dataUrl = canvas.toDataURL('image/jpeg')\r\n capturedUrl.value = dataUrl\r\n core?.emit('camera-capture', { dataUrl })\r\n }\r\n\r\n function clearUrl() {\r\n capturedUrl.value = ''\r\n }\r\n\r\n async function handleFetchImage() {\r\n if (!capturedUrl.value) return\r\n\r\n const response = await fetch(capturedUrl.value)\r\n const blob = await response.blob()\r\n const file = new File([blob], `capture-${Date.now()}.jpg`, {\r\n type: 'image/jpeg',\r\n })\r\n setFiles([file])\r\n capturedUrl.value = ''\r\n setActiveSource(undefined)\r\n core?.emit('camera-confirm', { file })\r\n }\r\n\r\n function handleCameraSwitch() {\r\n facingMode.value =\r\n facingMode.value === FacingMode.Environment\r\n ? FacingMode.User\r\n : FacingMode.Environment\r\n }\r\n\r\n onUnmounted(() => {\r\n stopCamera()\r\n })\r\n\r\n return {\r\n videoRef,\r\n capturedUrl,\r\n facingMode,\r\n newCameraSide,\r\n startCamera,\r\n stopCamera,\r\n capture,\r\n clearUrl,\r\n handleFetchImage,\r\n handleCameraSwitch,\r\n translations,\r\n props,\r\n theme,\r\n }\r\n}\r\n"],"mappings":"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","names":["t"]}