@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,219 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+
4
+
5
+ var _chunkD32QOALRcjs = require('./chunk-D32QOALR.cjs');
6
+ require('./chunk-IXLKUMV2.cjs');
7
+ require('./chunk-GG4ABGXB.cjs');
8
+
9
+
10
+
11
+
12
+
13
+ var _chunkGVB7IFRPcjs = require('./chunk-GVB7IFRP.cjs');
14
+
15
+ // src/components/OneDriveUploader.vue
16
+ var _vue = require('vue');
17
+
18
+ // src/components/ClientOneDriveUploader.vue
19
+
20
+
21
+ // src/composables/useOneDrive.ts
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+ var _core = require('@useupup/core');
31
+
32
+
33
+ var _internal = require('@useupup/core/internal');
34
+ function useOneDrive() {
35
+ const { core } = _chunkGVB7IFRPcjs.useUploaderRuntime.call(void 0, );
36
+ const { setActiveSource } = _chunkGVB7IFRPcjs.useUploaderSource.call(void 0, );
37
+ const { setFiles } = _chunkGVB7IFRPcjs.useUploaderFiles.call(void 0, );
38
+ if (!core) {
39
+ throw new Error("useOneDrive must be used inside <UpupUploader />");
40
+ }
41
+ const controller = new (0, _internal.DriveBrowserController)(core, _core.ONE_DRIVE_DESCRIPTOR, {
42
+ onFilesSelected: (files) => {
43
+ setFiles(files);
44
+ },
45
+ onClose: () => {
46
+ setActiveSource(void 0);
47
+ }
48
+ });
49
+ const state = _vue.shallowRef.call(void 0, controller.getSnapshot());
50
+ let unsub = null;
51
+ _vue.onMounted.call(void 0, () => {
52
+ unsub = controller.subscribe(() => {
53
+ state.value = controller.getSnapshot();
54
+ });
55
+ controller.init();
56
+ });
57
+ _vue.onUnmounted.call(void 0, () => {
58
+ controller.destroy();
59
+ unsub == null ? void 0 : unsub();
60
+ });
61
+ return {
62
+ user: _vue.computed.call(void 0, () => state.value.user),
63
+ oneDriveFiles: _vue.computed.call(void 0, () => state.value.folder),
64
+ signOut: () => {
65
+ controller.signOut();
66
+ },
67
+ signIn: () => {
68
+ controller.signIn();
69
+ },
70
+ authenticate: () => {
71
+ controller.signIn();
72
+ },
73
+ token: _vue.computed.call(void 0,
74
+ () => state.value.isAuthenticated ? "active" : void 0
75
+ ),
76
+ isAuthenticated: _vue.computed.call(void 0, () => state.value.isAuthenticated),
77
+ isLoading: _vue.computed.call(void 0, () => state.value.isLoading),
78
+ path: _vue.computed.call(void 0, () => state.value.path),
79
+ setPath: (newPath) => {
80
+ controller.setPath(newPath);
81
+ },
82
+ handleClick: (file) => {
83
+ controller.handleClick(file);
84
+ },
85
+ selectedFiles: _vue.computed.call(void 0, () => state.value.selectedFiles),
86
+ showLoader: _vue.computed.call(void 0, () => state.value.showLoader),
87
+ handleSubmit: () => controller.handleSubmit(),
88
+ handleCancelDownload: () => {
89
+ controller.handleCancelDownload();
90
+ },
91
+ onSelectCurrentFolder: () => controller.onSelectCurrentFolder(),
92
+ isClickLoading: _vue.computed.call(void 0, () => state.value.isClickLoading),
93
+ error: _vue.computed.call(void 0, () => state.value.error),
94
+ hasMore: _vue.computed.call(void 0, () => state.value.hasMore),
95
+ isLoadingMore: _vue.computed.call(void 0, () => state.value.isLoadingMore),
96
+ loadMore: () => controller.loadMore()
97
+ };
98
+ }
99
+
100
+ // src/components/ClientOneDriveUploader.vue
101
+
102
+ var _sfc_main = /* @__PURE__ */ _vue.defineComponent.call(void 0, {
103
+ __name: "ClientOneDriveUploader",
104
+ setup(__props, { expose: __expose }) {
105
+ __expose();
106
+ const { user, oneDriveFiles: driveFiles, signOut, token, isAuthenticated, authenticate, isLoading, path, setPath, isClickLoading, handleClick, selectedFiles, showLoader, handleSubmit, handleCancelDownload, onSelectCurrentFolder, error, hasMore, isLoadingMore, loadMore } = useOneDrive();
107
+ async function handleSignOut() {
108
+ signOut();
109
+ }
110
+ const __returned__ = {
111
+ user,
112
+ driveFiles,
113
+ signOut,
114
+ token,
115
+ isAuthenticated,
116
+ authenticate,
117
+ isLoading,
118
+ path,
119
+ setPath,
120
+ isClickLoading,
121
+ handleClick,
122
+ selectedFiles,
123
+ showLoader,
124
+ handleSubmit,
125
+ handleCancelDownload,
126
+ onSelectCurrentFolder,
127
+ error,
128
+ hasMore,
129
+ isLoadingMore,
130
+ loadMore,
131
+ handleSignOut,
132
+ DriveAuthFallback: _chunkD32QOALRcjs.DriveAuthFallback_default,
133
+ DriveBrowser: _chunkD32QOALRcjs.DriveBrowser_default
134
+ };
135
+ Object.defineProperty(__returned__, "__isScriptSetup", {
136
+ enumerable: false,
137
+ value: true
138
+ });
139
+ return __returned__;
140
+ }
141
+ });
142
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
143
+ return !$setup.isAuthenticated && !$setup.token && !$setup.isLoading ? (_vue.openBlock.call(void 0, ), _vue.createBlock.call(void 0, $setup["DriveAuthFallback"], {
144
+ key: 0,
145
+ "provider-name": "OneDrive",
146
+ "on-retry": $setup.authenticate,
147
+ "data-upup-slot": "one-drive-uploader"
148
+ }, null, 8, ["on-retry"])) : (_vue.openBlock.call(void 0, ), _vue.createBlock.call(void 0, $setup["DriveBrowser"], {
149
+ key: 1,
150
+ "drive-files": $setup.driveFiles,
151
+ user: $setup.user,
152
+ "handle-sign-out": $setup.handleSignOut,
153
+ "data-upup-slot": "one-drive-uploader",
154
+ path: $setup.path,
155
+ "set-path": $setup.setPath,
156
+ "is-click-loading": $setup.isClickLoading,
157
+ "handle-click": $setup.handleClick,
158
+ "selected-files": $setup.selectedFiles,
159
+ "show-loader": $setup.showLoader,
160
+ "handle-submit": $setup.handleSubmit,
161
+ "handle-cancel-download": $setup.handleCancelDownload,
162
+ "on-select-current-folder": $setup.onSelectCurrentFolder,
163
+ error: $setup.error,
164
+ "has-more": $setup.hasMore,
165
+ "is-loading-more": $setup.isLoadingMore,
166
+ "load-more": $setup.loadMore
167
+ }, null, 8, [
168
+ "drive-files",
169
+ "user",
170
+ "path",
171
+ "set-path",
172
+ "is-click-loading",
173
+ "handle-click",
174
+ "selected-files",
175
+ "show-loader",
176
+ "handle-submit",
177
+ "handle-cancel-download",
178
+ "on-select-current-folder",
179
+ "error",
180
+ "has-more",
181
+ "is-loading-more",
182
+ "load-more"
183
+ ]));
184
+ }
185
+ var ClientOneDriveUploader_default = /* @__PURE__ */ _chunkGVB7IFRPcjs.export_helper_default.call(void 0, _sfc_main, [["render", _sfc_render], ["__file", "C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\src\\components\\ClientOneDriveUploader.vue"]]);
186
+
187
+ // src/components/OneDriveUploader.vue
188
+
189
+ var _sfc_main2 = /* @__PURE__ */ _vue.defineComponent.call(void 0, {
190
+ __name: "OneDriveUploader",
191
+ setup(__props, { expose: __expose }) {
192
+ __expose();
193
+ const { mode } = _chunkGVB7IFRPcjs.useUploaderRuntime.call(void 0, );
194
+ const { setActiveSource } = _chunkGVB7IFRPcjs.useUploaderSource.call(void 0, );
195
+ const __returned__ = {
196
+ mode,
197
+ setActiveSource,
198
+ ClientOneDriveUploader: ClientOneDriveUploader_default,
199
+ ServerModeDriveUploader: _chunkD32QOALRcjs.ServerModeDriveUploader_default
200
+ };
201
+ Object.defineProperty(__returned__, "__isScriptSetup", {
202
+ enumerable: false,
203
+ value: true
204
+ });
205
+ return __returned__;
206
+ }
207
+ });
208
+ function _sfc_render2(_ctx, _cache, $props, $setup, $data, $options) {
209
+ return $setup.mode === "server" ? (_vue.openBlock.call(void 0, ), _vue.createBlock.call(void 0, $setup["ServerModeDriveUploader"], {
210
+ key: 0,
211
+ provider: "one-drive",
212
+ "on-back": () => $setup.setActiveSource(void 0)
213
+ }, null, 8, ["on-back"])) : (_vue.openBlock.call(void 0, ), _vue.createBlock.call(void 0, $setup["ClientOneDriveUploader"], { key: 1 }));
214
+ }
215
+ var OneDriveUploader_default = /* @__PURE__ */ _chunkGVB7IFRPcjs.export_helper_default.call(void 0, _sfc_main2, [["render", _sfc_render2], ["__file", "C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\src\\components\\OneDriveUploader.vue"]]);
216
+
217
+
218
+ exports.default = OneDriveUploader_default;
219
+ //# sourceMappingURL=OneDriveUploader-WYALTOCQ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["c:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\dist\\OneDriveUploader-WYALTOCQ.cjs"],"names":[],"mappings":"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","file":"C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\dist\\OneDriveUploader-WYALTOCQ.cjs","sourcesContent":[null]}
@@ -0,0 +1,334 @@
1
+ import {
2
+ SourceViewContainer_default
3
+ } from "./chunk-M6AHIQ3M.js";
4
+ import {
5
+ export_helper_default,
6
+ useUploaderFiles,
7
+ useUploaderSource,
8
+ useUploaderTheme
9
+ } from "./chunk-X6FZTCNT.js";
10
+
11
+ // src/components/ScreenCaptureUploader.vue
12
+ import { defineComponent as _defineComponent } from "vue";
13
+ import { onUnmounted, ref } from "vue";
14
+ import { cn } from "@useupup/core/internal";
15
+ import { createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createElementBlock as _createElementBlock, createTextVNode as _createTextVNode, Fragment as _Fragment, createVNode as _createVNode } from "vue";
16
+ var _sfc_main = /* @__PURE__ */ _defineComponent({
17
+ __name: "ScreenCaptureUploader",
18
+ setup(__props, { expose: __expose }) {
19
+ __expose();
20
+ const { setFiles } = useUploaderFiles();
21
+ const { setActiveSource } = useUploaderSource();
22
+ const { isDark: dark } = useUploaderTheme();
23
+ const state = ref("idle");
24
+ const duration = ref(0);
25
+ const videoUrl = ref(null);
26
+ const error = ref(null);
27
+ const mediaRecorder = ref(null);
28
+ const chunks = [];
29
+ const timerRef = ref(null);
30
+ const streamRef = ref(null);
31
+ const videoRef = ref(null);
32
+ let previewRef = null;
33
+ onUnmounted(() => {
34
+ var _a;
35
+ if (timerRef.value) clearInterval(timerRef.value);
36
+ if (videoUrl.value) URL.revokeObjectURL(videoUrl.value);
37
+ (_a = streamRef.value) == null ? void 0 : _a.getTracks().forEach((t) => t.stop());
38
+ });
39
+ function bindPreview(el) {
40
+ var _a;
41
+ const video = el instanceof HTMLVideoElement ? el : null;
42
+ previewRef = video;
43
+ if (video && streamRef.value && video.srcObject !== streamRef.value) {
44
+ video.srcObject = streamRef.value;
45
+ void ((_a = video.play()) == null ? void 0 : _a.catch(() => {
46
+ }));
47
+ }
48
+ }
49
+ async function startRecording() {
50
+ try {
51
+ const stream = await navigator.mediaDevices.getDisplayMedia({
52
+ video: true,
53
+ audio: true
54
+ });
55
+ streamRef.value = stream;
56
+ chunks.length = 0;
57
+ const [videoTrack] = stream.getVideoTracks();
58
+ if (videoTrack) {
59
+ videoTrack.onended = () => {
60
+ if (mediaRecorder.value && mediaRecorder.value.state !== "inactive") {
61
+ mediaRecorder.value.stop();
62
+ }
63
+ if (timerRef.value) clearInterval(timerRef.value);
64
+ state.value = "recorded";
65
+ };
66
+ }
67
+ const recorder = new MediaRecorder(stream);
68
+ mediaRecorder.value = recorder;
69
+ recorder.ondataavailable = (e) => {
70
+ if (e.data.size > 0) chunks.push(e.data);
71
+ };
72
+ recorder.onstop = () => {
73
+ const blob = new Blob(chunks, { type: recorder.mimeType || "video/webm" });
74
+ videoUrl.value = URL.createObjectURL(blob);
75
+ stream.getTracks().forEach((t) => t.stop());
76
+ if (previewRef) previewRef.srcObject = null;
77
+ };
78
+ recorder.start();
79
+ state.value = "recording";
80
+ duration.value = 0;
81
+ timerRef.value = setInterval(() => {
82
+ duration.value++;
83
+ }, 1e3);
84
+ } catch {
85
+ error.value = "Screen sharing was cancelled or denied. Please try again.";
86
+ }
87
+ }
88
+ function stopRecording() {
89
+ var _a;
90
+ (_a = mediaRecorder.value) == null ? void 0 : _a.stop();
91
+ if (timerRef.value) clearInterval(timerRef.value);
92
+ state.value = "recorded";
93
+ }
94
+ function discardRecording() {
95
+ if (videoUrl.value) URL.revokeObjectURL(videoUrl.value);
96
+ videoUrl.value = null;
97
+ duration.value = 0;
98
+ state.value = "idle";
99
+ }
100
+ function addRecording() {
101
+ if (!videoUrl.value) return;
102
+ fetch(videoUrl.value).then((r) => r.blob()).then((blob) => {
103
+ const file = new File([blob], `screen-recording-${Date.now()}.webm`, { type: blob.type });
104
+ setFiles([file]);
105
+ setActiveSource(void 0);
106
+ }).catch(() => {
107
+ });
108
+ }
109
+ function retryRecording() {
110
+ error.value = null;
111
+ startRecording();
112
+ }
113
+ function formatTime(s) {
114
+ const m = Math.floor(s / 60);
115
+ const sec = s % 60;
116
+ return `${m}:${sec.toString().padStart(2, "0")}`;
117
+ }
118
+ const __returned__ = {
119
+ setFiles,
120
+ setActiveSource,
121
+ dark,
122
+ state,
123
+ duration,
124
+ videoUrl,
125
+ error,
126
+ mediaRecorder,
127
+ chunks,
128
+ timerRef,
129
+ streamRef,
130
+ videoRef,
131
+ get previewRef() {
132
+ return previewRef;
133
+ },
134
+ set previewRef(v) {
135
+ previewRef = v;
136
+ },
137
+ bindPreview,
138
+ startRecording,
139
+ stopRecording,
140
+ discardRecording,
141
+ addRecording,
142
+ retryRecording,
143
+ formatTime,
144
+ get cn() {
145
+ return cn;
146
+ },
147
+ SourceViewContainer: SourceViewContainer_default
148
+ };
149
+ Object.defineProperty(__returned__, "__isScriptSetup", {
150
+ enumerable: false,
151
+ value: true
152
+ });
153
+ return __returned__;
154
+ }
155
+ });
156
+ var _hoisted_1 = { class: "upup-flex upup-flex-col upup-items-center upup-gap-3 upup-p-6 upup-text-center" };
157
+ var _hoisted_2 = { class: "upup-flex upup-h-full upup-w-full upup-flex-col upup-items-center upup-justify-center upup-gap-4 upup-p-4" };
158
+ var _hoisted_3 = {
159
+ key: 0,
160
+ class: "upup-flex upup-flex-col upup-items-center upup-gap-4"
161
+ };
162
+ var _hoisted_4 = { class: "upup-flex upup-h-20 upup-w-20 upup-items-center upup-justify-center upup-rounded-full upup-bg-[#0ea5e9]/20" };
163
+ var _hoisted_5 = ["stroke"];
164
+ var _hoisted_6 = { class: "upup-relative upup-flex upup-min-h-0 upup-w-full upup-max-w-md upup-flex-1" };
165
+ var _hoisted_7 = {
166
+ "data-upup-slot": "screen-rec-chip",
167
+ class: "upup-absolute upup-left-2.5 upup-top-2.5 upup-flex upup-items-center upup-gap-1.5 upup-rounded-md upup-bg-[#04080f]/60 upup-px-2 upup-py-1 upup-font-mono upup-text-[11px] upup-tabular-nums upup-text-[#fecdd3]"
168
+ };
169
+ var _hoisted_8 = ["src"];
170
+ var _hoisted_9 = { class: "upup-flex upup-gap-3" };
171
+ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
172
+ return _openBlock(), _createElementBlock(
173
+ _Fragment,
174
+ null,
175
+ [_createCommentVNode(" Error state "), $setup.error ? (_openBlock(), _createBlock($setup["SourceViewContainer"], {
176
+ key: 0,
177
+ "data-upup-slot": "screen-capture-uploader"
178
+ }, {
179
+ default: _withCtx(() => [_createElementVNode("div", _hoisted_1, [_createElementVNode(
180
+ "p",
181
+ { class: _normalizeClass($setup.cn("upup-text-sm upup-text-red-500", { "upup-text-red-400": $setup.dark })) },
182
+ _toDisplayString($setup.error),
183
+ 3
184
+ /* TEXT, CLASS */
185
+ ), _createElementVNode(
186
+ "button",
187
+ {
188
+ type: "button",
189
+ class: _normalizeClass($setup.cn("upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2 upup-text-sm upup-font-medium upup-text-white", { "upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]": $setup.dark })),
190
+ onClick: $setup.retryRecording
191
+ },
192
+ " Try Again ",
193
+ 2
194
+ /* CLASS */
195
+ )])]),
196
+ _: 1
197
+ })) : (_openBlock(), _createElementBlock(
198
+ _Fragment,
199
+ { key: 1 },
200
+ [_createCommentVNode(" Normal state "), _createVNode($setup["SourceViewContainer"], { "data-upup-slot": "screen-capture-uploader" }, {
201
+ default: _withCtx(() => [_createElementVNode("div", _hoisted_2, [
202
+ _createCommentVNode(" Idle "),
203
+ $setup.state === "idle" ? (_openBlock(), _createElementBlock("div", _hoisted_3, [_createElementVNode("div", _hoisted_4, [(_openBlock(), _createElementBlock("svg", {
204
+ xmlns: "http://www.w3.org/2000/svg",
205
+ width: "32",
206
+ height: "32",
207
+ viewBox: "0 0 24 24",
208
+ fill: "none",
209
+ stroke: $setup.dark ? "#38bdf8" : "#0284c7",
210
+ "stroke-width": "2",
211
+ "stroke-linecap": "round",
212
+ "stroke-linejoin": "round"
213
+ }, [..._cache[0] || (_cache[0] = [
214
+ _createElementVNode(
215
+ "rect",
216
+ {
217
+ width: "20",
218
+ height: "15",
219
+ x: "2",
220
+ y: "3",
221
+ rx: "2"
222
+ },
223
+ null,
224
+ -1
225
+ /* CACHED */
226
+ ),
227
+ _createElementVNode(
228
+ "polyline",
229
+ { points: "8 21 16 21" },
230
+ null,
231
+ -1
232
+ /* CACHED */
233
+ ),
234
+ _createElementVNode(
235
+ "line",
236
+ {
237
+ x1: "12",
238
+ x2: "12",
239
+ y1: "18",
240
+ y2: "21"
241
+ },
242
+ null,
243
+ -1
244
+ /* CACHED */
245
+ )
246
+ ])], 8, _hoisted_5))]), _createElementVNode(
247
+ "button",
248
+ {
249
+ type: "button",
250
+ class: _normalizeClass($setup.cn("upup-rounded-lg upup-bg-[#0ea5e9] upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]", { "upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]": $setup.dark })),
251
+ onClick: $setup.startRecording
252
+ },
253
+ " Share Screen ",
254
+ 2
255
+ /* CLASS */
256
+ )])) : _createCommentVNode("v-if", true),
257
+ _createCommentVNode(" Recording "),
258
+ $setup.state === "recording" ? (_openBlock(), _createElementBlock(
259
+ _Fragment,
260
+ { key: 1 },
261
+ [_createElementVNode("div", _hoisted_6, [
262
+ _createElementVNode(
263
+ "video",
264
+ {
265
+ ref: $setup.bindPreview,
266
+ muted: "",
267
+ class: "upup-min-h-0 upup-w-full upup-flex-1 upup-rounded-lg upup-object-contain"
268
+ },
269
+ null,
270
+ 512
271
+ /* NEED_PATCH */
272
+ ),
273
+ _createCommentVNode(" REC chip (states-tour-3 state E): red dot + label + timer.\r\n The dot's pulse is fx-gated \u2014 under motion-off the dot\r\n stays static so the recording status remains visible. "),
274
+ _createElementVNode("div", _hoisted_7, [_cache[1] || (_cache[1] = _createElementVNode(
275
+ "span",
276
+ { class: "upup-animate-fx-rec-pulse upup-h-2 upup-w-2 upup-rounded-full upup-bg-red-500" },
277
+ null,
278
+ -1
279
+ /* CACHED */
280
+ )), _createTextVNode(
281
+ " REC " + _toDisplayString($setup.formatTime($setup.duration)),
282
+ 1
283
+ /* TEXT */
284
+ )])
285
+ ]), _createElementVNode("button", {
286
+ type: "button",
287
+ class: "upup-fx-press upup-rounded-lg upup-bg-red-500 upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-red-600",
288
+ onClick: $setup.stopRecording
289
+ }, " Stop Recording ")],
290
+ 64
291
+ /* STABLE_FRAGMENT */
292
+ )) : _createCommentVNode("v-if", true),
293
+ _createCommentVNode(" Recorded "),
294
+ $setup.state === "recorded" && $setup.videoUrl ? (_openBlock(), _createElementBlock(
295
+ _Fragment,
296
+ { key: 2 },
297
+ [_createElementVNode("video", {
298
+ ref: "videoRef",
299
+ controls: "",
300
+ src: $setup.videoUrl,
301
+ class: "upup-w-full upup-max-w-md upup-min-h-0 upup-flex-1 upup-rounded-lg upup-object-contain"
302
+ }, null, 8, _hoisted_8), _createElementVNode("div", _hoisted_9, [_createElementVNode("button", {
303
+ type: "button",
304
+ class: "upup-rounded-lg upup-bg-gray-500 upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-gray-600",
305
+ onClick: $setup.discardRecording
306
+ }, " Discard "), _createElementVNode(
307
+ "button",
308
+ {
309
+ type: "button",
310
+ class: _normalizeClass($setup.cn("upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]", { "upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]": $setup.dark })),
311
+ onClick: $setup.addRecording
312
+ },
313
+ " Add Recording ",
314
+ 2
315
+ /* CLASS */
316
+ )])],
317
+ 64
318
+ /* STABLE_FRAGMENT */
319
+ )) : _createCommentVNode("v-if", true)
320
+ ])]),
321
+ _: 1
322
+ })],
323
+ 2112
324
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
325
+ ))],
326
+ 2112
327
+ /* STABLE_FRAGMENT, DEV_ROOT_FRAGMENT */
328
+ );
329
+ }
330
+ var ScreenCaptureUploader_default = /* @__PURE__ */ export_helper_default(_sfc_main, [["render", _sfc_render], ["__file", "C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\vue\\src\\components\\ScreenCaptureUploader.vue"]]);
331
+ export {
332
+ ScreenCaptureUploader_default as default
333
+ };
334
+ //# sourceMappingURL=ScreenCaptureUploader-F65CM6OA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/ScreenCaptureUploader.vue","../src/components/ScreenCaptureUploader.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { onUnmounted, ref, type ComponentPublicInstance } from 'vue'\r\nimport {\r\n useUploaderFiles,\r\n useUploaderSource,\r\n useUploaderTheme,\r\n} from '../context/uploader-context'\r\nimport { cn } from '@useupup/core/internal'\r\nimport SourceViewContainer from './shared/SourceViewContainer.vue'\r\n\r\ntype RecordingState = 'idle' | 'recording' | 'recorded'\r\n\r\nconst { setFiles } = useUploaderFiles()\r\nconst { setActiveSource } = useUploaderSource()\r\nconst { isDark: dark } = useUploaderTheme()\r\n\r\nconst state = ref<RecordingState>('idle')\r\nconst duration = ref(0)\r\nconst videoUrl = ref<string | null>(null)\r\nconst error = ref<string | null>(null)\r\n\r\nconst mediaRecorder = ref<MediaRecorder | null>(null)\r\nconst chunks: Blob[] = []\r\nconst timerRef = ref<ReturnType<typeof setInterval> | null>(null)\r\nconst streamRef = ref<MediaStream | null>(null)\r\nconst videoRef = ref<HTMLVideoElement | null>(null)\r\nlet previewRef: HTMLVideoElement | null = null\r\n\r\nonUnmounted(() => {\r\n if (timerRef.value) clearInterval(timerRef.value)\r\n if (videoUrl.value) URL.revokeObjectURL(videoUrl.value)\r\n streamRef.value?.getTracks().forEach(t => t.stop())\r\n})\r\n\r\nfunction bindPreview(el: Element | ComponentPublicInstance | null) {\r\n const video = el instanceof HTMLVideoElement ? el : null\r\n previewRef = video\r\n // Vue invokes a function ref on every component update, and the recording\r\n // timer re-renders this view once per second. Guard so we bind srcObject +\r\n // play() once per mount, not every tick — re-assigning srcObject restarts\r\n // the media element's load algorithm and visibly flickers the preview.\r\n if (video && streamRef.value && video.srcObject !== streamRef.value) {\r\n video.srcObject = streamRef.value\r\n void video.play()?.catch(() => {})\r\n }\r\n}\r\n\r\nasync function startRecording() {\r\n try {\r\n const stream = await navigator.mediaDevices.getDisplayMedia({\r\n video: true,\r\n audio: true,\r\n })\r\n streamRef.value = stream\r\n chunks.length = 0\r\n\r\n const [videoTrack] = stream.getVideoTracks()\r\n if (videoTrack) {\r\n videoTrack.onended = () => {\r\n if (mediaRecorder.value && mediaRecorder.value.state !== 'inactive') {\r\n mediaRecorder.value.stop()\r\n }\r\n if (timerRef.value) clearInterval(timerRef.value)\r\n state.value = 'recorded'\r\n }\r\n }\r\n\r\n const recorder = new MediaRecorder(stream)\r\n mediaRecorder.value = recorder\r\n\r\n recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) chunks.push(e.data)\r\n }\r\n\r\n recorder.onstop = () => {\r\n const blob = new Blob(chunks, { type: recorder.mimeType || 'video/webm' })\r\n videoUrl.value = URL.createObjectURL(blob)\r\n stream.getTracks().forEach(t => t.stop())\r\n if (previewRef) previewRef.srcObject = null\r\n }\r\n\r\n recorder.start()\r\n state.value = 'recording'\r\n duration.value = 0\r\n timerRef.value = setInterval(() => { duration.value++ }, 1000)\r\n } catch {\r\n error.value = 'Screen sharing was cancelled or denied. Please try again.'\r\n }\r\n}\r\n\r\nfunction stopRecording() {\r\n mediaRecorder.value?.stop()\r\n if (timerRef.value) clearInterval(timerRef.value)\r\n state.value = 'recorded'\r\n}\r\n\r\nfunction discardRecording() {\r\n if (videoUrl.value) URL.revokeObjectURL(videoUrl.value)\r\n videoUrl.value = null\r\n duration.value = 0\r\n state.value = 'idle'\r\n}\r\n\r\nfunction addRecording() {\r\n if (!videoUrl.value) return\r\n fetch(videoUrl.value)\r\n .then(r => r.blob())\r\n .then(blob => {\r\n const file = new File([blob], `screen-recording-${Date.now()}.webm`, { type: blob.type })\r\n setFiles([file])\r\n setActiveSource(undefined)\r\n })\r\n .catch(() => {\r\n // upup-catch: replaying an in-memory object URL cannot fail in practice; ignore\r\n })\r\n}\r\n\r\nfunction retryRecording() {\r\n error.value = null\r\n startRecording()\r\n}\r\n\r\nfunction formatTime(s: number) {\r\n const m = Math.floor(s / 60)\r\n const sec = s % 60\r\n return `${m}:${sec.toString().padStart(2, '0')}`\r\n}\r\n</script>\r\n\r\n<template>\r\n <!-- Error state -->\r\n <SourceViewContainer v-if=\"error\" data-upup-slot=\"screen-capture-uploader\">\r\n <div class=\"upup-flex upup-flex-col upup-items-center upup-gap-3 upup-p-6 upup-text-center\">\r\n <p\r\n :class=\"cn('upup-text-sm upup-text-red-500', {\r\n 'upup-text-red-400': dark,\r\n })\"\r\n >\r\n {{ error }}\r\n </p>\r\n <button\r\n type=\"button\"\r\n :class=\"cn(\r\n 'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2 upup-text-sm upup-font-medium upup-text-white',\r\n {\r\n 'upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n )\"\r\n @click=\"retryRecording\"\r\n >\r\n Try Again\r\n </button>\r\n </div>\r\n </SourceViewContainer>\r\n\r\n <!-- Normal state -->\r\n <SourceViewContainer v-else data-upup-slot=\"screen-capture-uploader\">\r\n <div class=\"upup-flex upup-h-full upup-w-full upup-flex-col upup-items-center upup-justify-center upup-gap-4 upup-p-4\">\r\n <!-- Idle -->\r\n <div v-if=\"state === 'idle'\" class=\"upup-flex upup-flex-col upup-items-center upup-gap-4\">\r\n <div class=\"upup-flex upup-h-20 upup-w-20 upup-items-center upup-justify-center upup-rounded-full upup-bg-[#0ea5e9]/20\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"32\"\r\n height=\"32\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n :stroke=\"dark ? '#38bdf8' : '#0284c7'\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <rect width=\"20\" height=\"15\" x=\"2\" y=\"3\" rx=\"2\" />\r\n <polyline points=\"8 21 16 21\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"18\" y2=\"21\" />\r\n </svg>\r\n </div>\r\n <button\r\n type=\"button\"\r\n :class=\"cn(\r\n 'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]',\r\n {\r\n 'upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n )\"\r\n @click=\"startRecording\"\r\n >\r\n Share Screen\r\n </button>\r\n </div>\r\n\r\n <!-- Recording -->\r\n <template v-if=\"state === 'recording'\">\r\n <div class=\"upup-relative upup-flex upup-min-h-0 upup-w-full upup-max-w-md upup-flex-1\">\r\n <video\r\n :ref=\"bindPreview\"\r\n muted\r\n class=\"upup-min-h-0 upup-w-full upup-flex-1 upup-rounded-lg upup-object-contain\"\r\n />\r\n <!-- REC chip (states-tour-3 state E): red dot + label + timer.\r\n The dot's pulse is fx-gated — under motion-off the dot\r\n stays static so the recording status remains visible. -->\r\n <div\r\n data-upup-slot=\"screen-rec-chip\"\r\n class=\"upup-absolute upup-left-2.5 upup-top-2.5 upup-flex upup-items-center upup-gap-1.5 upup-rounded-md upup-bg-[#04080f]/60 upup-px-2 upup-py-1 upup-font-mono upup-text-[11px] upup-tabular-nums upup-text-[#fecdd3]\"\r\n >\r\n <span class=\"upup-animate-fx-rec-pulse upup-h-2 upup-w-2 upup-rounded-full upup-bg-red-500\" />\r\n REC {{ formatTime(duration) }}\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"upup-fx-press upup-rounded-lg upup-bg-red-500 upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-red-600\"\r\n @click=\"stopRecording\"\r\n >\r\n Stop Recording\r\n </button>\r\n </template>\r\n\r\n <!-- Recorded -->\r\n <template v-if=\"state === 'recorded' && videoUrl\">\r\n <video\r\n ref=\"videoRef\"\r\n controls\r\n :src=\"videoUrl\"\r\n class=\"upup-w-full upup-max-w-md upup-min-h-0 upup-flex-1 upup-rounded-lg upup-object-contain\"\r\n />\r\n <div class=\"upup-flex upup-gap-3\">\r\n <button\r\n type=\"button\"\r\n class=\"upup-rounded-lg upup-bg-gray-500 upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-gray-600\"\r\n @click=\"discardRecording\"\r\n >\r\n Discard\r\n </button>\r\n <button\r\n type=\"button\"\r\n :class=\"cn(\r\n 'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]',\r\n {\r\n 'upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n )\"\r\n @click=\"addRecording\"\r\n >\r\n Add Recording\r\n </button>\r\n </div>\r\n </template>\r\n </div>\r\n </SourceViewContainer>\r\n</template>\r\n","<script setup lang=\"ts\">\r\nimport { onUnmounted, ref, type ComponentPublicInstance } from 'vue'\r\nimport {\r\n useUploaderFiles,\r\n useUploaderSource,\r\n useUploaderTheme,\r\n} from '../context/uploader-context'\r\nimport { cn } from '@useupup/core/internal'\r\nimport SourceViewContainer from './shared/SourceViewContainer.vue'\r\n\r\ntype RecordingState = 'idle' | 'recording' | 'recorded'\r\n\r\nconst { setFiles } = useUploaderFiles()\r\nconst { setActiveSource } = useUploaderSource()\r\nconst { isDark: dark } = useUploaderTheme()\r\n\r\nconst state = ref<RecordingState>('idle')\r\nconst duration = ref(0)\r\nconst videoUrl = ref<string | null>(null)\r\nconst error = ref<string | null>(null)\r\n\r\nconst mediaRecorder = ref<MediaRecorder | null>(null)\r\nconst chunks: Blob[] = []\r\nconst timerRef = ref<ReturnType<typeof setInterval> | null>(null)\r\nconst streamRef = ref<MediaStream | null>(null)\r\nconst videoRef = ref<HTMLVideoElement | null>(null)\r\nlet previewRef: HTMLVideoElement | null = null\r\n\r\nonUnmounted(() => {\r\n if (timerRef.value) clearInterval(timerRef.value)\r\n if (videoUrl.value) URL.revokeObjectURL(videoUrl.value)\r\n streamRef.value?.getTracks().forEach(t => t.stop())\r\n})\r\n\r\nfunction bindPreview(el: Element | ComponentPublicInstance | null) {\r\n const video = el instanceof HTMLVideoElement ? el : null\r\n previewRef = video\r\n // Vue invokes a function ref on every component update, and the recording\r\n // timer re-renders this view once per second. Guard so we bind srcObject +\r\n // play() once per mount, not every tick — re-assigning srcObject restarts\r\n // the media element's load algorithm and visibly flickers the preview.\r\n if (video && streamRef.value && video.srcObject !== streamRef.value) {\r\n video.srcObject = streamRef.value\r\n void video.play()?.catch(() => {})\r\n }\r\n}\r\n\r\nasync function startRecording() {\r\n try {\r\n const stream = await navigator.mediaDevices.getDisplayMedia({\r\n video: true,\r\n audio: true,\r\n })\r\n streamRef.value = stream\r\n chunks.length = 0\r\n\r\n const [videoTrack] = stream.getVideoTracks()\r\n if (videoTrack) {\r\n videoTrack.onended = () => {\r\n if (mediaRecorder.value && mediaRecorder.value.state !== 'inactive') {\r\n mediaRecorder.value.stop()\r\n }\r\n if (timerRef.value) clearInterval(timerRef.value)\r\n state.value = 'recorded'\r\n }\r\n }\r\n\r\n const recorder = new MediaRecorder(stream)\r\n mediaRecorder.value = recorder\r\n\r\n recorder.ondataavailable = (e) => {\r\n if (e.data.size > 0) chunks.push(e.data)\r\n }\r\n\r\n recorder.onstop = () => {\r\n const blob = new Blob(chunks, { type: recorder.mimeType || 'video/webm' })\r\n videoUrl.value = URL.createObjectURL(blob)\r\n stream.getTracks().forEach(t => t.stop())\r\n if (previewRef) previewRef.srcObject = null\r\n }\r\n\r\n recorder.start()\r\n state.value = 'recording'\r\n duration.value = 0\r\n timerRef.value = setInterval(() => { duration.value++ }, 1000)\r\n } catch {\r\n error.value = 'Screen sharing was cancelled or denied. Please try again.'\r\n }\r\n}\r\n\r\nfunction stopRecording() {\r\n mediaRecorder.value?.stop()\r\n if (timerRef.value) clearInterval(timerRef.value)\r\n state.value = 'recorded'\r\n}\r\n\r\nfunction discardRecording() {\r\n if (videoUrl.value) URL.revokeObjectURL(videoUrl.value)\r\n videoUrl.value = null\r\n duration.value = 0\r\n state.value = 'idle'\r\n}\r\n\r\nfunction addRecording() {\r\n if (!videoUrl.value) return\r\n fetch(videoUrl.value)\r\n .then(r => r.blob())\r\n .then(blob => {\r\n const file = new File([blob], `screen-recording-${Date.now()}.webm`, { type: blob.type })\r\n setFiles([file])\r\n setActiveSource(undefined)\r\n })\r\n .catch(() => {\r\n // upup-catch: replaying an in-memory object URL cannot fail in practice; ignore\r\n })\r\n}\r\n\r\nfunction retryRecording() {\r\n error.value = null\r\n startRecording()\r\n}\r\n\r\nfunction formatTime(s: number) {\r\n const m = Math.floor(s / 60)\r\n const sec = s % 60\r\n return `${m}:${sec.toString().padStart(2, '0')}`\r\n}\r\n</script>\r\n\r\n<template>\r\n <!-- Error state -->\r\n <SourceViewContainer v-if=\"error\" data-upup-slot=\"screen-capture-uploader\">\r\n <div class=\"upup-flex upup-flex-col upup-items-center upup-gap-3 upup-p-6 upup-text-center\">\r\n <p\r\n :class=\"cn('upup-text-sm upup-text-red-500', {\r\n 'upup-text-red-400': dark,\r\n })\"\r\n >\r\n {{ error }}\r\n </p>\r\n <button\r\n type=\"button\"\r\n :class=\"cn(\r\n 'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2 upup-text-sm upup-font-medium upup-text-white',\r\n {\r\n 'upup-bg-[#38bdf8] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n )\"\r\n @click=\"retryRecording\"\r\n >\r\n Try Again\r\n </button>\r\n </div>\r\n </SourceViewContainer>\r\n\r\n <!-- Normal state -->\r\n <SourceViewContainer v-else data-upup-slot=\"screen-capture-uploader\">\r\n <div class=\"upup-flex upup-h-full upup-w-full upup-flex-col upup-items-center upup-justify-center upup-gap-4 upup-p-4\">\r\n <!-- Idle -->\r\n <div v-if=\"state === 'idle'\" class=\"upup-flex upup-flex-col upup-items-center upup-gap-4\">\r\n <div class=\"upup-flex upup-h-20 upup-w-20 upup-items-center upup-justify-center upup-rounded-full upup-bg-[#0ea5e9]/20\">\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"32\"\r\n height=\"32\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n :stroke=\"dark ? '#38bdf8' : '#0284c7'\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n >\r\n <rect width=\"20\" height=\"15\" x=\"2\" y=\"3\" rx=\"2\" />\r\n <polyline points=\"8 21 16 21\" />\r\n <line x1=\"12\" x2=\"12\" y1=\"18\" y2=\"21\" />\r\n </svg>\r\n </div>\r\n <button\r\n type=\"button\"\r\n :class=\"cn(\r\n 'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]',\r\n {\r\n 'upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n )\"\r\n @click=\"startRecording\"\r\n >\r\n Share Screen\r\n </button>\r\n </div>\r\n\r\n <!-- Recording -->\r\n <template v-if=\"state === 'recording'\">\r\n <div class=\"upup-relative upup-flex upup-min-h-0 upup-w-full upup-max-w-md upup-flex-1\">\r\n <video\r\n :ref=\"bindPreview\"\r\n muted\r\n class=\"upup-min-h-0 upup-w-full upup-flex-1 upup-rounded-lg upup-object-contain\"\r\n />\r\n <!-- REC chip (states-tour-3 state E): red dot + label + timer.\r\n The dot's pulse is fx-gated — under motion-off the dot\r\n stays static so the recording status remains visible. -->\r\n <div\r\n data-upup-slot=\"screen-rec-chip\"\r\n class=\"upup-absolute upup-left-2.5 upup-top-2.5 upup-flex upup-items-center upup-gap-1.5 upup-rounded-md upup-bg-[#04080f]/60 upup-px-2 upup-py-1 upup-font-mono upup-text-[11px] upup-tabular-nums upup-text-[#fecdd3]\"\r\n >\r\n <span class=\"upup-animate-fx-rec-pulse upup-h-2 upup-w-2 upup-rounded-full upup-bg-red-500\" />\r\n REC {{ formatTime(duration) }}\r\n </div>\r\n </div>\r\n <button\r\n type=\"button\"\r\n class=\"upup-fx-press upup-rounded-lg upup-bg-red-500 upup-px-6 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-red-600\"\r\n @click=\"stopRecording\"\r\n >\r\n Stop Recording\r\n </button>\r\n </template>\r\n\r\n <!-- Recorded -->\r\n <template v-if=\"state === 'recorded' && videoUrl\">\r\n <video\r\n ref=\"videoRef\"\r\n controls\r\n :src=\"videoUrl\"\r\n class=\"upup-w-full upup-max-w-md upup-min-h-0 upup-flex-1 upup-rounded-lg upup-object-contain\"\r\n />\r\n <div class=\"upup-flex upup-gap-3\">\r\n <button\r\n type=\"button\"\r\n class=\"upup-rounded-lg upup-bg-gray-500 upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-gray-600\"\r\n @click=\"discardRecording\"\r\n >\r\n Discard\r\n </button>\r\n <button\r\n type=\"button\"\r\n :class=\"cn(\r\n 'upup-rounded-lg upup-bg-[#0ea5e9] upup-px-4 upup-py-2.5 upup-text-sm upup-font-medium upup-text-white upup-transition-colors hover:upup-bg-[#0284c7]',\r\n {\r\n 'upup-bg-[#38bdf8] hover:upup-bg-[#0ea5e9] dark:upup-bg-[#38bdf8]': dark,\r\n },\r\n )\"\r\n @click=\"addRecording\"\r\n >\r\n Add Recording\r\n </button>\r\n </div>\r\n </template>\r\n </div>\r\n </SourceViewContainer>\r\n</template>\r\n"],"mappings":"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","names":[]}