@scaleflex/uploader 0.1.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 (96) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/LICENSE +50 -0
  3. package/README.md +123 -0
  4. package/dist/auth/auth.service.d.ts +25 -0
  5. package/dist/auth/auth.service.d.ts.map +1 -0
  6. package/dist/auth/auth.types.d.ts +24 -0
  7. package/dist/auth/auth.types.d.ts.map +1 -0
  8. package/dist/auth/index.d.ts +3 -0
  9. package/dist/auth/index.d.ts.map +1 -0
  10. package/dist/components/actions-bar.d.ts +17 -0
  11. package/dist/components/actions-bar.d.ts.map +1 -0
  12. package/dist/components/camera-dialog.d.ts +27 -0
  13. package/dist/components/camera-dialog.d.ts.map +1 -0
  14. package/dist/components/drop-zone.d.ts +28 -0
  15. package/dist/components/drop-zone.d.ts.map +1 -0
  16. package/dist/components/file-item.d.ts +12 -0
  17. package/dist/components/file-item.d.ts.map +1 -0
  18. package/dist/components/file-list.d.ts +8 -0
  19. package/dist/components/file-list.d.ts.map +1 -0
  20. package/dist/components/import-divider.d.ts +6 -0
  21. package/dist/components/import-divider.d.ts.map +1 -0
  22. package/dist/components/index.d.ts +9 -0
  23. package/dist/components/index.d.ts.map +1 -0
  24. package/dist/components/provider-browser.d.ts +48 -0
  25. package/dist/components/provider-browser.d.ts.map +1 -0
  26. package/dist/components/screen-cast-dialog.d.ts +29 -0
  27. package/dist/components/screen-cast-dialog.d.ts.map +1 -0
  28. package/dist/components/search-provider-browser.d.ts +36 -0
  29. package/dist/components/search-provider-browser.d.ts.map +1 -0
  30. package/dist/components/source-pills.d.ts +11 -0
  31. package/dist/components/source-pills.d.ts.map +1 -0
  32. package/dist/components/success-card.d.ts +10 -0
  33. package/dist/components/success-card.d.ts.map +1 -0
  34. package/dist/components/url-dialog.d.ts +25 -0
  35. package/dist/components/url-dialog.d.ts.map +1 -0
  36. package/dist/connectors/companion-client.d.ts +58 -0
  37. package/dist/connectors/companion-client.d.ts.map +1 -0
  38. package/dist/connectors/connector.types.d.ts +56 -0
  39. package/dist/connectors/connector.types.d.ts.map +1 -0
  40. package/dist/connectors/index.d.ts +5 -0
  41. package/dist/connectors/index.d.ts.map +1 -0
  42. package/dist/connectors/provider-registry.d.ts +8 -0
  43. package/dist/connectors/provider-registry.d.ts.map +1 -0
  44. package/dist/connectors/token-store.d.ts +10 -0
  45. package/dist/connectors/token-store.d.ts.map +1 -0
  46. package/dist/controllers/store.controller.d.ts +14 -0
  47. package/dist/controllers/store.controller.d.ts.map +1 -0
  48. package/dist/define.cjs +1 -0
  49. package/dist/define.d.ts +2 -0
  50. package/dist/define.d.ts.map +1 -0
  51. package/dist/define.js +15 -0
  52. package/dist/engine/companion-upload.d.ts +23 -0
  53. package/dist/engine/companion-upload.d.ts.map +1 -0
  54. package/dist/engine/index.d.ts +2 -0
  55. package/dist/engine/index.d.ts.map +1 -0
  56. package/dist/engine/upload-engine.d.ts +56 -0
  57. package/dist/engine/upload-engine.d.ts.map +1 -0
  58. package/dist/engine/xhr-upload.d.ts +25 -0
  59. package/dist/engine/xhr-upload.d.ts.map +1 -0
  60. package/dist/events/event-bus.d.ts +38 -0
  61. package/dist/events/event-bus.d.ts.map +1 -0
  62. package/dist/events/public-events.d.ts +23 -0
  63. package/dist/events/public-events.d.ts.map +1 -0
  64. package/dist/index.cjs +1 -0
  65. package/dist/index.d.ts +17 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +21 -0
  68. package/dist/provider-browser-C-S_MPrC.js +832 -0
  69. package/dist/provider-browser-CmCwv0ph.cjs +581 -0
  70. package/dist/react.cjs +1 -0
  71. package/dist/react.d.ts +33 -0
  72. package/dist/react.d.ts.map +1 -0
  73. package/dist/react.js +125 -0
  74. package/dist/search-provider-browser-DxmLznEB.cjs +390 -0
  75. package/dist/search-provider-browser-jCOer2Y9.js +537 -0
  76. package/dist/sfx-uploader-BVDK-9xi.cjs +2029 -0
  77. package/dist/sfx-uploader-C2lWIRnU.js +3789 -0
  78. package/dist/sfx-uploader.d.ts +131 -0
  79. package/dist/sfx-uploader.d.ts.map +1 -0
  80. package/dist/store/helpers.d.ts +16 -0
  81. package/dist/store/helpers.d.ts.map +1 -0
  82. package/dist/store/index.d.ts +7 -0
  83. package/dist/store/index.d.ts.map +1 -0
  84. package/dist/store/store.d.ts +14 -0
  85. package/dist/store/store.d.ts.map +1 -0
  86. package/dist/store/store.types.d.ts +77 -0
  87. package/dist/store/store.types.d.ts.map +1 -0
  88. package/dist/test-utils.d.ts +5 -0
  89. package/dist/test-utils.d.ts.map +1 -0
  90. package/dist/types/source.types.d.ts +12 -0
  91. package/dist/types/source.types.d.ts.map +1 -0
  92. package/dist/utils/file-utils.d.ts +14 -0
  93. package/dist/utils/file-utils.d.ts.map +1 -0
  94. package/dist/utils/validate.d.ts +6 -0
  95. package/dist/utils/validate.d.ts.map +1 -0
  96. package/package.json +72 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,57 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@scaleflex/uploader` will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2026-03-18
11
+
12
+ Initial release.
13
+
14
+ ### Added
15
+
16
+ - `<sfx-uploader>` web component built with Lit 3 and Shadow DOM
17
+ - Reactive store-based state management with centralised file collection (Map-based for O(1) lookups)
18
+ - Modal and inline display modes
19
+ - Drag & drop zone with animated ring feedback
20
+ - Clipboard paste support for file uploads
21
+ - URL upload dialog for importing files from direct HTTP links
22
+ - Webcam capture dialog (photo and video via MediaRecorder API)
23
+ - Screen capture dialog for recording screen content
24
+ - Native file picker via device source
25
+ - File queue with thumbnail previews, progress bars, and status indicators
26
+ - Source pill buttons for switching between upload sources
27
+ - Concurrent upload queue with configurable concurrency (default: 3)
28
+ - Auto-proceed mode — start uploading as soon as files are added
29
+ - Retry logic with exponential backoff for failed uploads
30
+ - Per-file and aggregate progress tracking with speed and ETA calculations
31
+ - File validation: type, size, total size, and file count restrictions
32
+ - Per-file metadata and tag management (`updateFileMeta`, `updateFilesMeta`)
33
+ - "Fill metadata" button support for external metadata workflows
34
+ - Post-upload success card with file details
35
+ - Abort and cancel operations for individual and batch uploads
36
+ - Cloud provider connectors via Companion proxy server:
37
+ - Google Drive
38
+ - Dropbox
39
+ - OneDrive
40
+ - Box
41
+ - Instagram
42
+ - Facebook
43
+ - Unsplash
44
+ - OAuth token management with `localStorage` caching for cloud providers
45
+ - Provider browser UI with folder navigation and file selection
46
+ - Custom source plugin architecture (`connectors.customSources`)
47
+ - Three authentication modes: security template, SASS key, and session token
48
+ - SASS key exchange for security template mode
49
+ - Auth header generation and API base URL derivation
50
+ - 20+ custom DOM events (`sfx-*`) with `bubbles` and `composed` for shadow DOM crossing
51
+ - Config-based callback alternative (`UploaderCallbacks`) for all events
52
+ - Cancelable `sfx-before-upload` event to intercept and prevent uploads
53
+ - React wrapper with `forwardRef` support, controlled `open` prop, and imperative ref methods
54
+ - CSS custom properties theming with `--sfx-up-*` prefix
55
+ - Package exports: `.`, `./react`, `./define`
56
+ - Vite 6 library build (ESM + CJS) with TypeScript declarations
57
+ - Full TypeScript type exports for all public APIs
package/LICENSE ADDED
@@ -0,0 +1,50 @@
1
+ PROPRIETARY SOFTWARE LICENSE
2
+
3
+ Copyright (c) 2025 Scaleflex SAS. All Rights Reserved.
4
+
5
+ NOTICE: This software and associated documentation files (the "Software") are
6
+ the exclusive property of Scaleflex SAS. The Software is protected by copyright
7
+ laws, international treaties, and other intellectual property laws.
8
+
9
+ RESTRICTIONS
10
+
11
+ You may NOT, without prior written permission from Scaleflex SAS:
12
+
13
+ 1. Copy, reproduce, or duplicate the Software, in whole or in part.
14
+ 2. Modify, adapt, translate, reverse engineer, decompile, or disassemble the
15
+ Software, or create derivative works based on the Software.
16
+ 3. Distribute, sublicense, lease, rent, loan, sell, or otherwise transfer the
17
+ Software or any rights therein to any third party.
18
+ 4. Remove, alter, or obscure any proprietary notices, labels, or marks on the
19
+ Software.
20
+ 5. Use the Software for any purpose other than as expressly authorised under
21
+ a separate written licence agreement with Scaleflex SAS.
22
+
23
+ GRANT OF LICENCE
24
+
25
+ Use of this Software is permitted only under a separate written licence
26
+ agreement between the licensee and Scaleflex SAS. Installing or downloading
27
+ this Software does not, by itself, grant any licence or right to use the
28
+ Software.
29
+
30
+ NO WARRANTY
31
+
32
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
33
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
34
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL
35
+ SCALEFLEX SAS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY, WHETHER IN
36
+ AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM, OUT OF, OR IN
37
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
+
39
+ ENFORCEMENT
40
+
41
+ Unauthorised use, reproduction, or distribution of this Software, or any
42
+ portion thereof, may result in severe civil and criminal penalties and will be
43
+ prosecuted to the maximum extent permitted by applicable law.
44
+
45
+ CONTACT
46
+
47
+ For licensing enquiries:
48
+ Scaleflex SAS
49
+ Email: sales@scaleflex.com
50
+ Web: https://www.scaleflex.com
package/README.md ADDED
@@ -0,0 +1,123 @@
1
+ <p align="center">
2
+ <a href="https://www.scaleflex.com">
3
+ <img src="https://scaleflex.cloudimg.io/v7/plugins/js-cloudimage-360-view/logo_scaleflex_on_white_bg.jpg?vh=91b12d&w=700" alt="Scaleflex" width="350">
4
+ </a>
5
+ </p>
6
+
7
+ <h1 align="center">@scaleflex/uploader</h1>
8
+
9
+ <p align="center">
10
+ Framework-agnostic file upload Web Component for <a href="https://www.scaleflex.com">Scaleflex VXP</a>.<br>
11
+ Drag &amp; drop, URL, webcam, screen capture, and cloud providers — in a single HTML tag.
12
+ </p>
13
+
14
+ <p align="center">
15
+ <a href="https://www.npmjs.com/package/@scaleflex/uploader"><img src="https://img.shields.io/npm/v/@scaleflex/uploader.svg?style=flat-square" alt="npm version"></a>
16
+ <a href="https://www.npmjs.com/package/@scaleflex/uploader"><img src="https://img.shields.io/npm/dm/@scaleflex/uploader.svg?style=flat-square" alt="npm downloads"></a>
17
+ <a href="https://bundlephobia.com/package/@scaleflex/uploader"><img src="https://img.shields.io/bundlephobia/minzip/@scaleflex/uploader?style=flat-square" alt="bundle size"></a>
18
+ <img src="https://img.shields.io/badge/license-proprietary-red?style=flat-square" alt="license">
19
+ </p>
20
+
21
+ <p align="center">
22
+ <a href="https://scaleflex.github.io/uploader/">Live Demo</a> |
23
+ <a href="https://scaleflex.github.io/uploader/#/docs/getting-started">Documentation</a> |
24
+ <a href="https://scaleflex.github.io/uploader/#/examples/basic">Examples</a> |
25
+ <a href="https://www.npmjs.com/package/@scaleflex/uploader">npm</a> |
26
+ <a href="https://www.scaleflex.com">Scaleflex</a>
27
+ </p>
28
+
29
+ ---
30
+
31
+ ## Features
32
+
33
+ - **Drag & drop** — animated drop zone with visual feedback, plus paste from clipboard
34
+ - **Multiple sources** — device, URL import, webcam, screen capture, and 7 cloud providers (Google Drive, Dropbox, OneDrive, Box, Instagram, Facebook, Unsplash)
35
+ - **Concurrent uploads** — configurable concurrency with retry and exponential backoff
36
+ - **Real-time progress** — per-file and aggregate progress with speed and ETA
37
+ - **File restrictions** — type, size, and count limits with clear rejection reasons
38
+ - **Modal or inline** — use as a modal overlay or embed directly in your page
39
+ - **Fully themeable** — CSS custom properties with `--sfx-up-*` prefix
40
+ - **React wrapper** — controlled `open` prop and imperative ref via `@scaleflex/uploader/react`
41
+ - **Lit 3** — lightweight Web Component with Shadow DOM encapsulation
42
+ - **ESM + CJS** — dual build, tree-shakeable, TypeScript declarations included
43
+
44
+ ## Installation
45
+
46
+ ```bash
47
+ npm install @scaleflex/uploader
48
+ ```
49
+
50
+ ## Quick start
51
+
52
+ ### Web Component
53
+
54
+ ```html
55
+ <script type="module">
56
+ import '@scaleflex/uploader/define';
57
+
58
+ const uploader = document.querySelector('sfx-uploader');
59
+ uploader.config = {
60
+ auth: {
61
+ mode: 'security-template',
62
+ container: 'YOUR_CONTAINER',
63
+ securityTemplateId: 'SECU_...',
64
+ },
65
+ };
66
+ uploader.open();
67
+ </script>
68
+
69
+ <sfx-uploader></sfx-uploader>
70
+ ```
71
+
72
+ ### React
73
+
74
+ ```tsx
75
+ import { useState } from 'react';
76
+ import { Uploader } from '@scaleflex/uploader/react';
77
+
78
+ function App() {
79
+ const [open, setOpen] = useState(false);
80
+
81
+ return (
82
+ <>
83
+ <button onClick={() => setOpen(true)}>Upload files</button>
84
+ <Uploader
85
+ open={open}
86
+ config={{
87
+ auth: {
88
+ mode: 'security-template',
89
+ container: 'YOUR_CONTAINER',
90
+ securityTemplateId: 'SECU_...',
91
+ },
92
+ }}
93
+ onClose={() => setOpen(false)}
94
+ onAllComplete={(ok, failed) => console.log('Done', ok, failed)}
95
+ />
96
+ </>
97
+ );
98
+ }
99
+ ```
100
+
101
+ ## Package exports
102
+
103
+ | Specifier | Description |
104
+ |---|---|
105
+ | `@scaleflex/uploader` | Core `SfxUploader` class (use with `customElements.define`) |
106
+ | `@scaleflex/uploader/define` | Auto-registers `<sfx-uploader>` — import for side-effect |
107
+ | `@scaleflex/uploader/react` | React wrapper component |
108
+
109
+ ## Browser support
110
+
111
+ | Browser | Version |
112
+ |---|---|
113
+ | Chrome / Edge | 90+ |
114
+ | Firefox | 100+ |
115
+ | Safari | 15.4+ |
116
+
117
+ ## Documentation
118
+
119
+ See the full documentation and interactive examples at **[scaleflex.github.io/uploader](https://scaleflex.github.io/uploader/)**.
120
+
121
+ ## License
122
+
123
+ See [LICENSE](./LICENSE).
@@ -0,0 +1,25 @@
1
+ import { AuthConfig, AuthHeaders } from './auth.types';
2
+ /**
3
+ * Derive the Scaleflex API base URL from a container name.
4
+ * Returns e.g. "https://api.filerobot.com/my-container"
5
+ */
6
+ export declare function getApiBase(container: string): string;
7
+ /**
8
+ * Exchange a security template ID for a SASS key.
9
+ * Mirrors asset-picker's `exchangeSassKey()` pattern.
10
+ */
11
+ export declare function exchangeSassKey(container: string, securityTemplateId: string): Promise<string>;
12
+ /**
13
+ * Build auth headers from a resolved SASS key or session tokens.
14
+ */
15
+ export declare function buildAuthHeaders(auth: AuthConfig, resolvedSassKey?: string): AuthHeaders;
16
+ /**
17
+ * Resolve auth config into a ready-to-use API base + headers.
18
+ * For security-template mode, performs the SASS key exchange.
19
+ */
20
+ export declare function resolveAuth(auth: AuthConfig): Promise<{
21
+ apiBase: string;
22
+ headers: AuthHeaders;
23
+ sassKey?: string;
24
+ }>;
25
+ //# sourceMappingURL=auth.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.service.d.ts","sourceRoot":"","sources":["../../src/auth/auth.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQ5D;;;GAGG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,MAAM,CAAC,CA2BjB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,WAAW,CAyBxF;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,UAAU,GACf,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAStE"}
@@ -0,0 +1,24 @@
1
+ export interface SecurityTemplateAuth {
2
+ mode: 'security-template';
3
+ container: string;
4
+ securityTemplateId: string;
5
+ airboxPuid?: string;
6
+ }
7
+ export interface SassKeyAuth {
8
+ mode: 'sass-key';
9
+ container: string;
10
+ sassKey: string;
11
+ airboxPuid?: string;
12
+ }
13
+ export interface SessionAuth {
14
+ mode: 'session';
15
+ container: string;
16
+ sessionToken: string;
17
+ companyToken?: string;
18
+ projectToken?: string;
19
+ airboxPuid?: string;
20
+ }
21
+ export type AuthConfig = SecurityTemplateAuth | SassKeyAuth | SessionAuth;
22
+ /** Headers to attach to every Scaleflex API request. */
23
+ export type AuthHeaders = Record<string, string>;
24
+ //# sourceMappingURL=auth.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.types.d.ts","sourceRoot":"","sources":["../../src/auth/auth.types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,oBAAoB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1E,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export type { AuthConfig, SecurityTemplateAuth, SassKeyAuth, SessionAuth, AuthHeaders } from './auth.types';
2
+ export { resolveAuth, exchangeSassKey, getApiBase, buildAuthHeaders } from './auth.service';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { LitElement } from 'lit';
2
+ export type UploadButtonState = 'idle' | 'uploading' | 'done';
3
+ export declare class SfxActionsBar extends LitElement {
4
+ static styles: import('lit').CSSResult;
5
+ uploadState: UploadButtonState;
6
+ fileCount: number;
7
+ failedCount: number;
8
+ showFillMetadata: boolean;
9
+ private _clear;
10
+ private _addMore;
11
+ private _fillMetadata;
12
+ private _upload;
13
+ private _retryAll;
14
+ render(): import('lit-html').TemplateResult<1>;
15
+ private _renderUploadButton;
16
+ }
17
+ //# sourceMappingURL=actions-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-bar.d.ts","sourceRoot":"","sources":["../../src/components/actions-bar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGrD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;AAE9D,qBAAa,aAAc,SAAQ,UAAU;IAC3C,MAAM,CAAC,MAAM,0BA2IX;IAE0B,WAAW,EAAE,iBAAiB,CAAU;IACxC,SAAS,SAAK;IACd,WAAW,SAAK;IACf,gBAAgB,UAAS;IAEtD,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,SAAS;IAIjB,MAAM;IAoDN,OAAO,CAAC,mBAAmB;CAgC5B"}
@@ -0,0 +1,27 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Modal dialog for capturing photos/video via webcam.
4
+ *
5
+ * Fires:
6
+ * - `camera-capture` → { file: File }
7
+ * - `camera-cancel` → void
8
+ */
9
+ export declare class SfxCameraDialog extends LitElement {
10
+ static styles: import('lit').CSSResult;
11
+ private _stream;
12
+ private _error;
13
+ private _captured;
14
+ private _previewUrl;
15
+ private _onBackdropClick;
16
+ private _onKeyDown;
17
+ connectedCallback(): void;
18
+ disconnectedCallback(): void;
19
+ private _startCamera;
20
+ private _stopStream;
21
+ private _capture;
22
+ private _retake;
23
+ private _usePhoto;
24
+ private _cancel;
25
+ render(): import('lit-html').TemplateResult<1>;
26
+ }
27
+ //# sourceMappingURL=camera-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera-dialog.d.ts","sourceRoot":"","sources":["../../src/components/camera-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAGrD;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,MAAM,CAAC,MAAM,0BA0FX;IAEO,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,WAAW,CAAM;IAElC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,UAAU,CAEhB;IAEF,iBAAiB;IAKjB,oBAAoB;YAMN,YAAY;IAa1B,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,QAAQ,CAgBd;IAEF,OAAO,CAAC,OAAO,CAKb;IAEF,OAAO,CAAC,SAAS,CAKf;IAEF,OAAO,CAAC,OAAO;IAKf,MAAM;CAqCP"}
@@ -0,0 +1,28 @@
1
+ import { LitElement } from 'lit';
2
+ import { SourceDef } from './source-pills';
3
+ export declare class SfxDropZone extends LitElement {
4
+ static styles: import('lit').CSSResult;
5
+ compact: boolean;
6
+ accept: string;
7
+ sources: SourceDef[];
8
+ private _dragOver;
9
+ private _rippleEl;
10
+ fileInput: HTMLInputElement;
11
+ private _dragCounter;
12
+ /** Programmatically open file browser. */
13
+ browse(): void;
14
+ private _onDragEnter;
15
+ private _onDragOver;
16
+ private _onDragLeave;
17
+ private _onDrop;
18
+ private _onClick;
19
+ private _onKeyDown;
20
+ private _onFileChange;
21
+ private _onPaste;
22
+ private _onSourceIconClick;
23
+ private _emitFiles;
24
+ connectedCallback(): void;
25
+ disconnectedCallback(): void;
26
+ render(): import('lit-html').TemplateResult<1>;
27
+ }
28
+ //# sourceMappingURL=drop-zone.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-zone.d.ts","sourceRoot":"","sources":["../../src/components/drop-zone.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAIrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,0BAmTX;IAE2B,OAAO,UAAS;IACjB,MAAM,SAAM;IACb,OAAO,EAAE,SAAS,EAAE,CAAM;IAE5C,OAAO,CAAC,SAAS,CAAS;IAEjB,OAAO,CAAC,SAAS,CAAe;IACrB,SAAS,EAAG,gBAAgB,CAAC;IAE1D,OAAO,CAAC,YAAY,CAAK;IAEzB,0CAA0C;IAC1C,MAAM;IAMN,OAAO,CAAC,YAAY,CAMlB;IAEF,OAAO,CAAC,WAAW,CAEjB;IAEF,OAAO,CAAC,YAAY,CAOlB;IAEF,OAAO,CAAC,OAAO,CASb;IAIF,OAAO,CAAC,QAAQ,CAad;IAEF,OAAO,CAAC,UAAU,CAKhB;IAEF,OAAO,CAAC,aAAa,CAQnB;IAIF,OAAO,CAAC,QAAQ,CAkBd;IAEF,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,UAAU;IAUlB,iBAAiB;IAKjB,oBAAoB;IAKpB,MAAM;CAyEP"}
@@ -0,0 +1,12 @@
1
+ import { LitElement, nothing } from 'lit';
2
+ import { UploadFile } from '../store/store.types';
3
+ export declare class SfxFileItem extends LitElement {
4
+ static styles: import('lit').CSSResult;
5
+ file: UploadFile;
6
+ private _remove;
7
+ private _retry;
8
+ private _preview;
9
+ render(): typeof nothing | import('lit-html').TemplateResult<1>;
10
+ private _renderTypeIcon;
11
+ }
12
+ //# sourceMappingURL=file-item.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-item.d.ts","sourceRoot":"","sources":["../../src/components/file-item.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,OAAO,EAAE,MAAM,KAAK,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGvD,qBAAa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,0BAwVX;IAE8B,IAAI,EAAG,UAAU,CAAC;IAElD,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,MAAM;IAUd,OAAO,CAAC,QAAQ;IAWhB,MAAM;IAwGN,OAAO,CAAC,eAAe;CAcxB"}
@@ -0,0 +1,8 @@
1
+ import { LitElement } from 'lit';
2
+ import { UploadFile } from '../store/store.types';
3
+ export declare class SfxFileList extends LitElement {
4
+ static styles: import('lit').CSSResult;
5
+ files: UploadFile[];
6
+ render(): import('lit-html').TemplateResult<1>;
7
+ }
8
+ //# sourceMappingURL=file-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-list.d.ts","sourceRoot":"","sources":["../../src/components/file-list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,qBAAa,WAAY,SAAQ,UAAU;IACzC,MAAM,CAAC,MAAM,0BAaX;IAE8B,KAAK,EAAE,UAAU,EAAE,CAAM;IAEzD,MAAM;CASP"}
@@ -0,0 +1,6 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class SfxImportDivider extends LitElement {
3
+ static styles: import('lit').CSSResult;
4
+ render(): import('lit-html').TemplateResult<1>;
5
+ }
6
+ //# sourceMappingURL=import-divider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-divider.d.ts","sourceRoot":"","sources":["../../src/components/import-divider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,qBAAa,gBAAiB,SAAQ,UAAU;IAC9C,MAAM,CAAC,MAAM,0BAsBX;IAEF,MAAM;CAOP"}
@@ -0,0 +1,9 @@
1
+ export { SfxDropZone } from './drop-zone';
2
+ export { SfxImportDivider } from './import-divider';
3
+ export { SfxSourcePills, CORE_SOURCES, type SourceDef } from './source-pills';
4
+ export { SfxFileList } from './file-list';
5
+ export { SfxFileItem } from './file-item';
6
+ export { SfxSuccessCard } from './success-card';
7
+ export { SfxActionsBar, type UploadButtonState } from './actions-bar';
8
+ export { SfxUrlDialog } from './url-dialog';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,48 @@
1
+ import { LitElement } from 'lit';
2
+ import { ProviderId } from '../connectors/connector.types';
3
+ export declare class SfxProviderBrowser extends LitElement {
4
+ static styles: import('lit').CSSResult;
5
+ provider: ProviderId;
6
+ companionUrl: string;
7
+ private _authenticated;
8
+ private _loading;
9
+ private _items;
10
+ private _selectedIds;
11
+ private _breadcrumbs;
12
+ private _nextPagePath;
13
+ private _error;
14
+ private _loadingMore;
15
+ private _username;
16
+ private _cleanupAuthListener;
17
+ private _authWindow;
18
+ connectedCallback(): void;
19
+ disconnectedCallback(): void;
20
+ updated(changed: Map<string, unknown>): void;
21
+ private _reset;
22
+ private _checkAuth;
23
+ private get _providerLabel();
24
+ private _handleConnect;
25
+ private _loadFolder;
26
+ private _onFolderClick;
27
+ private _onBreadcrumbClick;
28
+ private _onLoadMore;
29
+ private _lastClickedIndex;
30
+ private _toggleSelect;
31
+ private _toggleSelectAll;
32
+ private _onAddSelected;
33
+ private _onClose;
34
+ private _handleLogout;
35
+ render(): import('lit-html').TemplateResult<1>;
36
+ private _renderHeader;
37
+ private _renderAuthView;
38
+ private _renderLoading;
39
+ private _renderError;
40
+ private _renderBrowser;
41
+ private _renderBreadcrumbs;
42
+ }
43
+ declare global {
44
+ interface HTMLElementTagNameMap {
45
+ 'sfx-provider-browser': SfxProviderBrowser;
46
+ }
47
+ }
48
+ //# sourceMappingURL=provider-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-browser.d.ts","sourceRoot":"","sources":["../../src/components/provider-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAiC,MAAM,+BAA+B,CAAC;AAgB/F,qBAAa,kBAAmB,SAAQ,UAAU;IAChD,MAAM,CAAC,MAAM,0BAmcX;IAE0B,QAAQ,EAAE,UAAU,CAAkB;IACtC,YAAY,SAAM;IAErC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,YAAY,CAAoB;IACxC,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAuB;IAEjD,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,WAAW,CAAuB;IAE1C,iBAAiB;IAKjB,oBAAoB;IAMpB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAOrC,OAAO,CAAC,MAAM;IAWd,OAAO,CAAC,UAAU;IAQlB,OAAO,KAAK,cAAc,GAGzB;IAID,OAAO,CAAC,cAAc,CAiBpB;YAIY,WAAW;IAoCzB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,kBAAkB;YAcZ,WAAW;IAqBzB,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,gBAAgB,CAQtB;IAEF,OAAO,CAAC,cAAc,CA2BpB;IAEF,OAAO,CAAC,QAAQ,CAOd;IAIF,OAAO,CAAC,aAAa,CAWnB;IAIF,MAAM;IAaN,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,cAAc;IAkBtB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,cAAc;IAqGtB,OAAO,CAAC,kBAAkB;CAiB3B;AAUD,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,sBAAsB,EAAE,kBAAkB,CAAC;KAC5C;CACF"}
@@ -0,0 +1,29 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Modal dialog for screen capture/recording.
4
+ *
5
+ * Fires:
6
+ * - `screencast-capture` → { file: File }
7
+ * - `screencast-cancel` → void
8
+ */
9
+ export declare class SfxScreenCastDialog extends LitElement {
10
+ static styles: import('lit').CSSResult;
11
+ private _stream;
12
+ private _recording;
13
+ private _error;
14
+ private _recordedBlob;
15
+ private _previewUrl;
16
+ private _recorder;
17
+ private _chunks;
18
+ private _onBackdropClick;
19
+ private _onKeyDown;
20
+ disconnectedCallback(): void;
21
+ private _stopAll;
22
+ private _startRecording;
23
+ private _stopRecording;
24
+ private _useRecording;
25
+ private _discard;
26
+ private _cancel;
27
+ render(): import('lit-html').TemplateResult<1>;
28
+ }
29
+ //# sourceMappingURL=screen-cast-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-cast-dialog.d.ts","sourceRoot":"","sources":["../../src/components/screen-cast-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,MAAM,CAAC,MAAM,0BA6GX;IAEO,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,WAAW,CAAM;IAElC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,OAAO,CAAc;IAE7B,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,UAAU,CAEhB;IAEF,oBAAoB;IAMpB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,eAAe,CAuCrB;IAEF,OAAO,CAAC,cAAc,CAIpB;IAEF,OAAO,CAAC,aAAa,CAKnB;IAEF,OAAO,CAAC,QAAQ,CAId;IAEF,OAAO,CAAC,OAAO;IAKf,MAAM;CAuDP"}
@@ -0,0 +1,36 @@
1
+ import { LitElement } from 'lit';
2
+ import { ProviderId } from '../connectors/connector.types';
3
+ export declare class SfxSearchProviderBrowser extends LitElement {
4
+ static styles: import('lit').CSSResult;
5
+ provider: ProviderId;
6
+ companionUrl: string;
7
+ private _loading;
8
+ private _loadingMore;
9
+ private _items;
10
+ private _selectedIds;
11
+ private _error;
12
+ private _searchQuery;
13
+ private _nextPageQuery;
14
+ private _searched;
15
+ private get _providerLabel();
16
+ private _onResultsScroll;
17
+ private _onSearchInput;
18
+ private _onSearchKeydown;
19
+ private _doSearch;
20
+ private _onLoadMore;
21
+ private _toggleSelect;
22
+ private _onAddSelected;
23
+ private _onClose;
24
+ render(): import('lit-html').TemplateResult<1>;
25
+ private _renderHeader;
26
+ private _renderSearchBar;
27
+ private _renderLoading;
28
+ private _renderError;
29
+ private _renderResults;
30
+ }
31
+ declare global {
32
+ interface HTMLElementTagNameMap {
33
+ 'sfx-search-provider-browser': SfxSearchProviderBrowser;
34
+ }
35
+ }
36
+ //# sourceMappingURL=search-provider-browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-provider-browser.d.ts","sourceRoot":"","sources":["../../src/components/search-provider-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAuC,MAAM,+BAA+B,CAAC;AAIrG,qBAAa,wBAAyB,SAAQ,UAAU;IACtD,MAAM,CAAC,MAAM,0BAoTX;IAE0B,QAAQ,EAAE,UAAU,CAAc;IAClC,YAAY,SAAM;IAErC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,SAAS,CAAS;IAEnC,OAAO,KAAK,cAAc,GAGzB;IAED,OAAO,CAAC,gBAAgB,CAOtB;IAIF,OAAO,CAAC,cAAc,CAEpB;IAEF,OAAO,CAAC,gBAAgB,CAEtB;YAEY,SAAS;YA4BT,WAAW;IAyBzB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,cAAc,CAsBpB;IAEF,OAAO,CAAC,QAAQ,CAOd;IAIF,MAAM;IAYN,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,cAAc;CAoEvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,6BAA6B,EAAE,wBAAwB,CAAC;KACzD;CACF"}
@@ -0,0 +1,11 @@
1
+ import { LitElement } from 'lit';
2
+ import { SourceDef } from '../types/source.types';
3
+ export type { SourceDef, UploaderHandle } from '../types/source.types';
4
+ export declare const CORE_SOURCES: SourceDef[];
5
+ export declare class SfxSourcePills extends LitElement {
6
+ static styles: import('lit').CSSResult;
7
+ sources: SourceDef[];
8
+ private _handleClick;
9
+ render(): import('lit-html').TemplateResult<1>;
10
+ }
11
+ //# sourceMappingURL=source-pills.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-pills.d.ts","sourceRoot":"","sources":["../../src/components/source-pills.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAOvD,eAAO,MAAM,YAAY,EAAE,SAAS,EAKnC,CAAC;AAEF,qBAAa,cAAe,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,0BAqDX;IAEyB,OAAO,EAAE,SAAS,EAAE,CAAgB;IAE/D,OAAO,CAAC,YAAY;IAUpB,MAAM;CAYP"}
@@ -0,0 +1,10 @@
1
+ import { LitElement } from 'lit';
2
+ export declare class SfxSuccessCard extends LitElement {
3
+ static styles: import('lit').CSSResult;
4
+ fileCount: number;
5
+ primaryLabel: string;
6
+ private _uploadMore;
7
+ private _primaryAction;
8
+ render(): import('lit-html').TemplateResult<1>;
9
+ }
10
+ //# sourceMappingURL=success-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"success-card.d.ts","sourceRoot":"","sources":["../../src/components/success-card.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,qBAAa,cAAe,SAAQ,UAAU;IAC5C,MAAM,CAAC,MAAM,0BA4HX;IAE0B,SAAS,SAAK;IACd,YAAY,SAAU;IAElD,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,cAAc;IAMtB,MAAM;CAqBP"}
@@ -0,0 +1,25 @@
1
+ import { LitElement } from 'lit';
2
+ /**
3
+ * Modal dialog for importing a file via URL.
4
+ *
5
+ * Fires:
6
+ * - `url-submit` → { url: string, name: string }
7
+ * - `url-cancel` → void
8
+ */
9
+ export declare class SfxUrlDialog extends LitElement {
10
+ static styles: import('lit').CSSResult;
11
+ private _url;
12
+ private _name;
13
+ private _error;
14
+ private _loading;
15
+ private _onBackdropClick;
16
+ private _onUrlInput;
17
+ private _onNameInput;
18
+ private _autoName;
19
+ private _onKeyDown;
20
+ private _cancel;
21
+ private _submit;
22
+ connectedCallback(): void;
23
+ render(): import('lit-html').TemplateResult<1>;
24
+ }
25
+ //# sourceMappingURL=url-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url-dialog.d.ts","sourceRoot":"","sources":["../../src/components/url-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,MAAM,CAAC,MAAM,0BA6NX;IAEO,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAS;IAElC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,OAAO,CAAC,WAAW,CAIjB;IAEF,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,UAAU,CAGhB;IAEF,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAkCf,iBAAiB;IAQjB,MAAM;CA+CP"}