@contember/bindx-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 (127) hide show
  1. package/dist/UploaderError.d.ts +6 -0
  2. package/dist/UploaderError.d.ts.map +1 -0
  3. package/dist/components/MultiUploader.d.ts +43 -0
  4. package/dist/components/MultiUploader.d.ts.map +1 -0
  5. package/dist/components/Uploader.d.ts +58 -0
  6. package/dist/components/Uploader.d.ts.map +1 -0
  7. package/dist/components/UploaderDropzoneArea.d.ts +6 -0
  8. package/dist/components/UploaderDropzoneArea.d.ts.map +1 -0
  9. package/dist/components/UploaderDropzoneRoot.d.ts +8 -0
  10. package/dist/components/UploaderDropzoneRoot.d.ts.map +1 -0
  11. package/dist/components/UploaderEachFile.d.ts +14 -0
  12. package/dist/components/UploaderEachFile.d.ts.map +1 -0
  13. package/dist/components/UploaderFileStateSwitch.d.ts +24 -0
  14. package/dist/components/UploaderFileStateSwitch.d.ts.map +1 -0
  15. package/dist/components/UploaderHasFile.d.ts +14 -0
  16. package/dist/components/UploaderHasFile.d.ts.map +1 -0
  17. package/dist/components/index.d.ts +8 -0
  18. package/dist/components/index.d.ts.map +1 -0
  19. package/dist/contexts.d.ts +32 -0
  20. package/dist/contexts.d.ts.map +1 -0
  21. package/dist/extractors/getAudioFileDataExtractor.d.ts +9 -0
  22. package/dist/extractors/getAudioFileDataExtractor.d.ts.map +1 -0
  23. package/dist/extractors/getFileUrlDataExtractor.d.ts +9 -0
  24. package/dist/extractors/getFileUrlDataExtractor.d.ts.map +1 -0
  25. package/dist/extractors/getGenericFileMetadataExtractor.d.ts +12 -0
  26. package/dist/extractors/getGenericFileMetadataExtractor.d.ts.map +1 -0
  27. package/dist/extractors/getImageFileDataExtractor.d.ts +10 -0
  28. package/dist/extractors/getImageFileDataExtractor.d.ts.map +1 -0
  29. package/dist/extractors/getVideoFileDataExtractor.d.ts +11 -0
  30. package/dist/extractors/getVideoFileDataExtractor.d.ts.map +1 -0
  31. package/dist/extractors/index.d.ts +6 -0
  32. package/dist/extractors/index.d.ts.map +1 -0
  33. package/dist/extractors/types.d.ts +13 -0
  34. package/dist/extractors/types.d.ts.map +1 -0
  35. package/dist/fileTypes/createAnyFileType.d.ts +27 -0
  36. package/dist/fileTypes/createAnyFileType.d.ts.map +1 -0
  37. package/dist/fileTypes/createAudioFileType.d.ts +29 -0
  38. package/dist/fileTypes/createAudioFileType.d.ts.map +1 -0
  39. package/dist/fileTypes/createImageFileType.d.ts +47 -0
  40. package/dist/fileTypes/createImageFileType.d.ts.map +1 -0
  41. package/dist/fileTypes/createVideoFileType.d.ts +33 -0
  42. package/dist/fileTypes/createVideoFileType.d.ts.map +1 -0
  43. package/dist/fileTypes/index.d.ts +5 -0
  44. package/dist/fileTypes/index.d.ts.map +1 -0
  45. package/dist/hooks/index.d.ts +3 -0
  46. package/dist/hooks/index.d.ts.map +1 -0
  47. package/dist/hooks/useS3Client.d.ts +7 -0
  48. package/dist/hooks/useS3Client.d.ts.map +1 -0
  49. package/dist/hooks/useUploaderStateFiles.d.ts +8 -0
  50. package/dist/hooks/useUploaderStateFiles.d.ts.map +1 -0
  51. package/dist/index.d.ts +10 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/internal/hooks/index.d.ts +5 -0
  54. package/dist/internal/hooks/index.d.ts.map +1 -0
  55. package/dist/internal/hooks/useFillEntity.d.ts +17 -0
  56. package/dist/internal/hooks/useFillEntity.d.ts.map +1 -0
  57. package/dist/internal/hooks/useGetPreviewUrls.d.ts +6 -0
  58. package/dist/internal/hooks/useGetPreviewUrls.d.ts.map +1 -0
  59. package/dist/internal/hooks/useUploadState.d.ts +12 -0
  60. package/dist/internal/hooks/useUploadState.d.ts.map +1 -0
  61. package/dist/internal/hooks/useUploaderDoUpload.d.ts +7 -0
  62. package/dist/internal/hooks/useUploaderDoUpload.d.ts.map +1 -0
  63. package/dist/internal/utils/executeExtractors.d.ts +16 -0
  64. package/dist/internal/utils/executeExtractors.d.ts.map +1 -0
  65. package/dist/internal/utils/index.d.ts +4 -0
  66. package/dist/internal/utils/index.d.ts.map +1 -0
  67. package/dist/internal/utils/resolveAccept.d.ts +7 -0
  68. package/dist/internal/utils/resolveAccept.d.ts.map +1 -0
  69. package/dist/internal/utils/uploaderErrorHandler.d.ts +7 -0
  70. package/dist/internal/utils/uploaderErrorHandler.d.ts.map +1 -0
  71. package/dist/types.d.ts +168 -0
  72. package/dist/types.d.ts.map +1 -0
  73. package/dist/uploadClient/S3UploadClient.d.ts +19 -0
  74. package/dist/uploadClient/S3UploadClient.d.ts.map +1 -0
  75. package/dist/uploadClient/index.d.ts +3 -0
  76. package/dist/uploadClient/index.d.ts.map +1 -0
  77. package/dist/uploadClient/types.d.ts +29 -0
  78. package/dist/uploadClient/types.d.ts.map +1 -0
  79. package/dist/utils/attrAccept.d.ts +16 -0
  80. package/dist/utils/attrAccept.d.ts.map +1 -0
  81. package/dist/utils/index.d.ts +3 -0
  82. package/dist/utils/index.d.ts.map +1 -0
  83. package/dist/utils/urlSigner.d.ts +8 -0
  84. package/dist/utils/urlSigner.d.ts.map +1 -0
  85. package/package.json +35 -0
  86. package/src/UploaderError.ts +7 -0
  87. package/src/components/MultiUploader.tsx +210 -0
  88. package/src/components/Uploader.tsx +174 -0
  89. package/src/components/UploaderDropzoneArea.tsx +29 -0
  90. package/src/components/UploaderDropzoneRoot.tsx +32 -0
  91. package/src/components/UploaderEachFile.tsx +46 -0
  92. package/src/components/UploaderFileStateSwitch.tsx +66 -0
  93. package/src/components/UploaderHasFile.tsx +35 -0
  94. package/src/components/index.ts +7 -0
  95. package/src/contexts.ts +76 -0
  96. package/src/extractors/getAudioFileDataExtractor.ts +44 -0
  97. package/src/extractors/getFileUrlDataExtractor.ts +22 -0
  98. package/src/extractors/getGenericFileMetadataExtractor.ts +40 -0
  99. package/src/extractors/getImageFileDataExtractor.ts +50 -0
  100. package/src/extractors/getVideoFileDataExtractor.ts +60 -0
  101. package/src/extractors/index.ts +5 -0
  102. package/src/extractors/types.ts +14 -0
  103. package/src/fileTypes/createAnyFileType.ts +56 -0
  104. package/src/fileTypes/createAudioFileType.ts +67 -0
  105. package/src/fileTypes/createImageFileType.ts +87 -0
  106. package/src/fileTypes/createVideoFileType.ts +75 -0
  107. package/src/fileTypes/index.ts +4 -0
  108. package/src/hooks/index.ts +2 -0
  109. package/src/hooks/useS3Client.ts +26 -0
  110. package/src/hooks/useUploaderStateFiles.ts +22 -0
  111. package/src/index.ts +126 -0
  112. package/src/internal/hooks/index.ts +4 -0
  113. package/src/internal/hooks/useFillEntity.ts +89 -0
  114. package/src/internal/hooks/useGetPreviewUrls.ts +26 -0
  115. package/src/internal/hooks/useUploadState.ts +159 -0
  116. package/src/internal/hooks/useUploaderDoUpload.ts +129 -0
  117. package/src/internal/utils/executeExtractors.ts +46 -0
  118. package/src/internal/utils/index.ts +3 -0
  119. package/src/internal/utils/resolveAccept.ts +26 -0
  120. package/src/internal/utils/uploaderErrorHandler.ts +15 -0
  121. package/src/types.ts +242 -0
  122. package/src/uploadClient/S3UploadClient.ts +119 -0
  123. package/src/uploadClient/index.ts +2 -0
  124. package/src/uploadClient/types.ts +30 -0
  125. package/src/utils/attrAccept.ts +87 -0
  126. package/src/utils/index.ts +2 -0
  127. package/src/utils/urlSigner.ts +117 -0
@@ -0,0 +1,6 @@
1
+ import type { UploaderErrorOptions } from './types.js';
2
+ export declare class UploaderError extends Error {
3
+ readonly options: UploaderErrorOptions;
4
+ constructor(options: UploaderErrorOptions);
5
+ }
6
+ //# sourceMappingURL=UploaderError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploaderError.d.ts","sourceRoot":"","sources":["../src/UploaderError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAEtD,qBAAa,aAAc,SAAQ,KAAK;aACJ,OAAO,EAAE,oBAAoB;gBAA7B,OAAO,EAAE,oBAAoB;CAGhE"}
@@ -0,0 +1,43 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { HasManyRef } from '@contember/bindx';
3
+ import { BINDX_COMPONENT, type SelectionProvider } from '@contember/bindx-react';
4
+ import type { FileType } from '../types.js';
5
+ export interface MultiUploaderProps<TEntity = Record<string, unknown>> {
6
+ /**
7
+ * The has-many relation to add uploaded files to.
8
+ */
9
+ field: HasManyRef<TEntity>;
10
+ /**
11
+ * File type configuration defining accepted files and extractors.
12
+ * Must be created with the same entity type as the field prop.
13
+ */
14
+ fileType: FileType<TEntity>;
15
+ /**
16
+ * Children to render within the uploader context.
17
+ */
18
+ children?: ReactNode;
19
+ }
20
+ /**
21
+ * Multi-file upload component for bindx.
22
+ * Creates new items in a has-many relation for each uploaded file.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * <MultiUploader field={article.images} fileType={imageFileType}>
27
+ * <DropZone multiple />
28
+ * <UploaderEachFile>
29
+ * <UploaderFileStateSwitch
30
+ * uploading={<ProgressBar />}
31
+ * success={<SuccessMessage />}
32
+ * error={<ErrorMessage />}
33
+ * />
34
+ * </UploaderEachFile>
35
+ * </MultiUploader>
36
+ * ```
37
+ */
38
+ export declare function MultiUploader<TEntity extends Record<string, unknown>>({ field, fileType, children, }: MultiUploaderProps<TEntity>): ReactNode;
39
+ declare const multiUploaderWithSelection: typeof MultiUploader & SelectionProvider & {
40
+ [BINDX_COMPONENT]: true;
41
+ };
42
+ export { multiUploaderWithSelection as MultiUploaderWithMeta };
43
+ //# sourceMappingURL=MultiUploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MultiUploader.d.ts","sourceRoot":"","sources":["../../src/components/MultiUploader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACpE,OAAO,KAAK,EAAa,UAAU,EAAqC,MAAM,kBAAkB,CAAA;AAEhG,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAwB,MAAM,wBAAwB,CAAA;AACtG,OAAO,KAAK,EAAE,QAAQ,EAAkB,MAAM,aAAa,CAAA;AAa3D,MAAM,WAAW,kBAAkB,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpE;;OAEG;IACH,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;IAC1B;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACtE,KAAK,EACL,QAAQ,EACR,QAAQ,GACR,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,SAAS,CAgGzC;AA+BD,QAAA,MAAM,0BAA0B,EAAoB,OAAO,aAAa,GAAG,iBAAiB,GAAG;IAAE,CAAC,eAAe,CAAC,EAAE,IAAI,CAAA;CAAE,CAAA;AA2B1H,OAAO,EAAE,0BAA0B,IAAI,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,58 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { EntityRef, HasOneRef } from '@contember/bindx';
3
+ import { BINDX_COMPONENT, type SelectionProvider } from '@contember/bindx-react';
4
+ import type { FileType } from '../types.js';
5
+ export interface UploaderProps<TEntity = Record<string, unknown>> {
6
+ /**
7
+ * The entity to fill with uploaded file data.
8
+ * Can be an EntityRef or HasOneRef.
9
+ */
10
+ entity: EntityRef<TEntity> | HasOneRef<TEntity>;
11
+ /**
12
+ * File type configuration defining accepted files and extractors.
13
+ * Must be created with the same entity type as the entity prop.
14
+ */
15
+ fileType: FileType<TEntity>;
16
+ /**
17
+ * Children to render within the uploader context.
18
+ */
19
+ children?: ReactNode;
20
+ }
21
+ /**
22
+ * Single file upload component for bindx.
23
+ * Provides upload state and upload function to children via context.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * interface Image {
28
+ * id: string
29
+ * url: string
30
+ * width: number
31
+ * height: number
32
+ * }
33
+ *
34
+ * const imageFileType = createImageFileType<Image>({
35
+ * urlField: 'url',
36
+ * widthField: 'width',
37
+ * heightField: 'height',
38
+ * })
39
+ *
40
+ * // article.image is HasOneRef<Image>
41
+ * <Uploader entity={article.image} fileType={imageFileType}>
42
+ * <DropZone />
43
+ * <UploaderEachFile>
44
+ * <UploaderFileStateSwitch
45
+ * uploading={<ProgressBar />}
46
+ * success={<SuccessMessage />}
47
+ * error={<ErrorMessage />}
48
+ * />
49
+ * </UploaderEachFile>
50
+ * </Uploader>
51
+ * ```
52
+ */
53
+ export declare function Uploader<TEntity extends Record<string, unknown>>({ entity, fileType, children, }: UploaderProps<TEntity>): ReactNode;
54
+ declare const uploaderWithSelection: typeof Uploader & SelectionProvider & {
55
+ [BINDX_COMPONENT]: true;
56
+ };
57
+ export { uploaderWithSelection as UploaderWithMeta };
58
+ //# sourceMappingURL=Uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Uploader.d.ts","sourceRoot":"","sources":["../../src/components/Uploader.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAqC,MAAM,kBAAkB,CAAA;AAE/F,OAAO,EAAE,eAAe,EAAE,KAAK,iBAAiB,EAAwB,MAAM,wBAAwB,CAAA;AACtG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAW3C,MAAM,WAAW,aAAa,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D;;;OAGG;IACH,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/C;;;OAGG;IACH,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;IAC3B;;OAEG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAA;CACpB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EACjE,MAAM,EACN,QAAQ,EACR,QAAQ,GACR,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAgCpC;AAsCD,QAAA,MAAM,qBAAqB,EAAe,OAAO,QAAQ,GAAG,iBAAiB,GAAG;IAAE,CAAC,eAAe,CAAC,EAAE,IAAI,CAAA;CAAE,CAAA;AAiC3G,OAAO,EAAE,qBAAqB,IAAI,gBAAgB,EAAE,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface UploaderDropzoneAreaProps {
3
+ children: ReactNode;
4
+ }
5
+ export declare const UploaderDropzoneArea: ({ children }: UploaderDropzoneAreaProps) => ReactNode;
6
+ //# sourceMappingURL=UploaderDropzoneArea.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploaderDropzoneArea.d.ts","sourceRoot":"","sources":["../../src/components/UploaderDropzoneArea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAW,MAAM,OAAO,CAAA;AAM/C,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,SAAS,CAAA;CACnB;AAED,eAAO,MAAM,oBAAoB,GAAI,cAAc,yBAAyB,KAAG,SAkB9E,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { type ReactNode } from 'react';
2
+ export interface UploaderDropzoneRootProps {
3
+ children: ReactNode;
4
+ noInput?: boolean;
5
+ disabled?: boolean;
6
+ }
7
+ export declare const UploaderDropzoneRoot: ({ children, noInput, disabled }: UploaderDropzoneRootProps) => ReactNode;
8
+ //# sourceMappingURL=UploaderDropzoneRoot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploaderDropzoneRoot.d.ts","sourceRoot":"","sources":["../../src/components/UploaderDropzoneRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAKtC,MAAM,WAAW,yBAAyB;IACzC,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,oBAAoB,GAAI,iCAAiC,yBAAyB,KAAG,SAoBjG,CAAA"}
@@ -0,0 +1,14 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { StateFilter } from '../hooks/useUploaderStateFiles.js';
3
+ export interface UploaderEachFileProps {
4
+ children: ReactNode;
5
+ /** Filter by specific state(s) */
6
+ state?: StateFilter;
7
+ /** Fallback when no files match */
8
+ fallback?: ReactNode;
9
+ }
10
+ /**
11
+ * Iterates over files in the upload state, providing file state context to children.
12
+ */
13
+ export declare function UploaderEachFile({ children, state: stateFilter, fallback, }: UploaderEachFileProps): ReactNode;
14
+ //# sourceMappingURL=UploaderEachFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploaderEachFile.d.ts","sourceRoot":"","sources":["../../src/components/UploaderEachFile.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AAGhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAEpE,MAAM,WAAW,qBAAqB;IACrC,QAAQ,EAAE,SAAS,CAAA;IACnB,kCAAkC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAA;CACpB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAChC,QAAQ,EACR,KAAK,EAAE,WAAW,EAClB,QAAQ,GACR,EAAE,qBAAqB,GAAG,SAAS,CAyBnC"}
@@ -0,0 +1,24 @@
1
+ import type { ReactNode, ComponentType } from 'react';
2
+ import type { UploaderFileStateInitial, UploaderFileStateUploading, UploaderFileStateFinalizing, UploaderFileStateSuccess, UploaderFileStateError } from '../types.js';
3
+ type StateRenderer<TState> = ReactNode | ComponentType<{
4
+ state: TState;
5
+ }>;
6
+ export interface UploaderFileStateSwitchProps {
7
+ /** Render for initial state (file selected, pre-upload) */
8
+ initial?: StateRenderer<UploaderFileStateInitial>;
9
+ /** Render for uploading state */
10
+ uploading?: StateRenderer<UploaderFileStateUploading>;
11
+ /** Render for finalizing state (upload complete, processing) */
12
+ finalizing?: StateRenderer<UploaderFileStateFinalizing>;
13
+ /** Render for success state */
14
+ success?: StateRenderer<UploaderFileStateSuccess>;
15
+ /** Render for error state */
16
+ error?: StateRenderer<UploaderFileStateError>;
17
+ }
18
+ /**
19
+ * Renders different content based on the current file upload state.
20
+ * Must be used within UploaderEachFile or another component that provides UploaderFileStateContext.
21
+ */
22
+ export declare function UploaderFileStateSwitch({ initial, uploading, finalizing, success, error, }: UploaderFileStateSwitchProps): ReactNode;
23
+ export {};
24
+ //# sourceMappingURL=UploaderFileStateSwitch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploaderFileStateSwitch.d.ts","sourceRoot":"","sources":["../../src/components/UploaderFileStateSwitch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrD,OAAO,KAAK,EAEX,wBAAwB,EACxB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,MAAM,aAAa,CAAA;AAGpB,KAAK,aAAa,CAAC,MAAM,IAAI,SAAS,GAAG,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEzE,MAAM,WAAW,4BAA4B;IAC5C,2DAA2D;IAC3D,OAAO,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAA;IACjD,iCAAiC;IACjC,SAAS,CAAC,EAAE,aAAa,CAAC,0BAA0B,CAAC,CAAA;IACrD,gEAAgE;IAChE,UAAU,CAAC,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAA;IACvD,+BAA+B;IAC/B,OAAO,CAAC,EAAE,aAAa,CAAC,wBAAwB,CAAC,CAAA;IACjD,6BAA6B;IAC7B,KAAK,CAAC,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAA;CAC7C;AAgBD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,GACL,EAAE,4BAA4B,GAAG,SAAS,CAe1C"}
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StateFilter } from '../hooks/useUploaderStateFiles.js';
3
+ export interface UploaderHasFileProps {
4
+ children: ReactNode;
5
+ /** Fallback when no files match */
6
+ fallback?: ReactNode;
7
+ /** Filter by specific state(s) */
8
+ state?: StateFilter;
9
+ }
10
+ /**
11
+ * Conditionally renders children if there are files in the upload state.
12
+ */
13
+ export declare function UploaderHasFile({ children, fallback, state: stateFilter, }: UploaderHasFileProps): ReactNode;
14
+ //# sourceMappingURL=UploaderHasFile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploaderHasFile.d.ts","sourceRoot":"","sources":["../../src/components/UploaderHasFile.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAA;AAEpE,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,SAAS,CAAA;IACnB,mCAAmC;IACnC,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,kCAAkC;IAClC,KAAK,CAAC,EAAE,WAAW,CAAA;CACnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC/B,QAAQ,EACR,QAAQ,EACR,KAAK,EAAE,WAAW,GAClB,EAAE,oBAAoB,GAAG,SAAS,CAelC"}
@@ -0,0 +1,8 @@
1
+ export { Uploader, UploaderWithMeta, type UploaderProps } from './Uploader.js';
2
+ export { MultiUploader, MultiUploaderWithMeta, type MultiUploaderProps } from './MultiUploader.js';
3
+ export { UploaderEachFile, type UploaderEachFileProps } from './UploaderEachFile.js';
4
+ export { UploaderHasFile, type UploaderHasFileProps } from './UploaderHasFile.js';
5
+ export { UploaderFileStateSwitch, type UploaderFileStateSwitchProps } from './UploaderFileStateSwitch.js';
6
+ export { UploaderDropzoneRoot, type UploaderDropzoneRootProps } from './UploaderDropzoneRoot.js';
7
+ export { UploaderDropzoneArea, type UploaderDropzoneAreaProps } from './UploaderDropzoneArea.js';
8
+ //# 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,QAAQ,EAAE,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAClG,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AACpF,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,EAAE,uBAAuB,EAAE,KAAK,4BAA4B,EAAE,MAAM,8BAA8B,CAAA;AACzG,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,MAAM,2BAA2B,CAAA"}
@@ -0,0 +1,32 @@
1
+ import type { DropzoneState } from 'react-dropzone';
2
+ import type { UploaderFileState, UploaderOptions, UploaderState, UploadClient } from './types.js';
3
+ /**
4
+ * Context for the upload function
5
+ */
6
+ export declare const UploaderUploadFilesContext: import("react").Context<((files: File[]) => void) | null>, useUploaderUploadFiles: () => (files: File[]) => void;
7
+ /**
8
+ * Context for current upload state
9
+ */
10
+ export declare const UploaderStateContext: import("react").Context<UploaderState | null>, useUploaderState: () => UploaderState;
11
+ /**
12
+ * Context for uploader options (accept, multiple)
13
+ */
14
+ export declare const UploaderOptionsContext: import("react").Context<UploaderOptions | null>, useUploaderOptions: () => UploaderOptions;
15
+ /**
16
+ * Context for current file state (within UploaderEachFile)
17
+ */
18
+ export declare const UploaderFileStateContext: import("react").Context<UploaderFileState | null>, useUploaderFileState: () => UploaderFileState;
19
+ /**
20
+ * Context for the default upload client
21
+ */
22
+ export declare const UploaderClientContext: import("react").Context<UploadClient<unknown, import("./types.js").FileUploadResult> | null>;
23
+ export declare const useUploaderClient: () => UploadClient<unknown> | null;
24
+ /**
25
+ * Context for multi-uploader entity to file state mapping
26
+ */
27
+ export declare const MultiUploaderEntityToFileStateMapContext: import("react").Context<Map<string, string> | null>;
28
+ /**
29
+ * Context for dropzone state from react-dropzone
30
+ */
31
+ export declare const UploaderDropzoneStateContext: import("react").Context<DropzoneState | null>, useUploaderDropzoneState: () => DropzoneState;
32
+ //# sourceMappingURL=contexts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contexts.d.ts","sourceRoot":"","sources":["../src/contexts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAyBjG;;GAEG;AACH,eAAO,MAAO,0BAA0B,mCACT,IAAI,EAAE,KAAK,IAAI,WADJ,sBAAsB,gBACjC,IAAI,EAAE,KAAK,IAA4B,CAAA;AAEtE;;GAEG;AACH,eAAO,MAAO,oBAAoB,iDAAE,gBAAgB,qBACE,CAAA;AAEtD;;GAEG;AACH,eAAO,MAAO,sBAAsB,mDAAE,kBAAkB,uBACE,CAAA;AAE1D;;GAEG;AACH,eAAO,MAAO,wBAAwB,qDAAE,oBAAoB,yBACE,CAAA;AAE9D;;GAEG;AACH,eAAO,MAAM,qBAAqB,8FAAoD,CAAA;AAGtF,eAAO,MAAM,iBAAiB,QAAO,YAAY,CAAC,OAAO,CAAC,GAAG,IAE5D,CAAA;AAMD;;GAEG;AACH,eAAO,MAAM,wCAAwC,qDAAkD,CAAA;AAGvG;;GAEG;AACH,eAAO,MAAO,4BAA4B,iDAAE,wBAAwB,qBACN,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { FieldName, FileDataExtractor } from '../types.js';
2
+ export interface AudioFileDataExtractorProps<TEntity> {
3
+ durationField?: FieldName<TEntity>;
4
+ }
5
+ /**
6
+ * Creates an extractor that extracts audio duration.
7
+ */
8
+ export declare const getAudioFileDataExtractor: <TEntity extends Record<string, unknown>>({ durationField, }: AudioFileDataExtractorProps<TEntity>) => FileDataExtractor<TEntity>;
9
+ //# sourceMappingURL=getAudioFileDataExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAudioFileDataExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/getAudioFileDataExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,2BAA2B,CAAC,OAAO;IACnD,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,oBAEhF,2BAA2B,CAAC,OAAO,CAAC,KAAG,iBAAiB,CAAC,OAAO,CA+BjE,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { FieldName, FileDataExtractor } from '../types.js';
2
+ export interface FileUrlDataExtractorProps<TEntity> {
3
+ urlField: FieldName<TEntity>;
4
+ }
5
+ /**
6
+ * Creates an extractor that populates the URL field with the upload result's public URL.
7
+ */
8
+ export declare const getFileUrlDataExtractor: <TEntity extends Record<string, unknown>>({ urlField, }: FileUrlDataExtractorProps<TEntity>) => FileDataExtractor<TEntity>;
9
+ //# sourceMappingURL=getFileUrlDataExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getFileUrlDataExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/getFileUrlDataExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,yBAAyB,CAAC,OAAO;IACjD,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,eAE9E,yBAAyB,CAAC,OAAO,CAAC,KAAG,iBAAiB,CAAC,OAAO,CAS/D,CAAA"}
@@ -0,0 +1,12 @@
1
+ import type { FieldName, FileDataExtractor } from '../types.js';
2
+ export interface GenericFileMetadataExtractorProps<TEntity> {
3
+ fileNameField?: FieldName<TEntity>;
4
+ lastModifiedField?: FieldName<TEntity>;
5
+ fileSizeField?: FieldName<TEntity>;
6
+ fileTypeField?: FieldName<TEntity>;
7
+ }
8
+ /**
9
+ * Creates an extractor that populates generic file metadata fields.
10
+ */
11
+ export declare const getGenericFileMetadataExtractor: <TEntity extends Record<string, unknown>>({ fileNameField, fileSizeField, fileTypeField, lastModifiedField, }: GenericFileMetadataExtractorProps<TEntity>) => FileDataExtractor<TEntity>;
12
+ //# sourceMappingURL=getGenericFileMetadataExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getGenericFileMetadataExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/getGenericFileMetadataExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,iCAAiC,CAAC,OAAO;IACzD,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACtC,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,eAAO,MAAM,+BAA+B,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,qEAKtF,iCAAiC,CAAC,OAAO,CAAC,KAAG,iBAAiB,CAAC,OAAO,CAqBvE,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { FieldName, FileDataExtractor } from '../types.js';
2
+ export interface ImageFileDataExtractorProps<TEntity> {
3
+ widthField?: FieldName<TEntity>;
4
+ heightField?: FieldName<TEntity>;
5
+ }
6
+ /**
7
+ * Creates an extractor that extracts image dimensions (width, height).
8
+ */
9
+ export declare const getImageFileDataExtractor: <TEntity extends Record<string, unknown>>({ widthField, heightField, }: ImageFileDataExtractorProps<TEntity>) => FileDataExtractor<TEntity>;
10
+ //# sourceMappingURL=getImageFileDataExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getImageFileDataExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/getImageFileDataExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,2BAA2B,CAAC,OAAO;IACnD,UAAU,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/B,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;CAChC;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,8BAGhF,2BAA2B,CAAC,OAAO,CAAC,KAAG,iBAAiB,CAAC,OAAO,CAmCjE,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { FieldName, FileDataExtractor } from '../types.js';
2
+ export interface VideoFileDataExtractorProps<TEntity> {
3
+ widthField?: FieldName<TEntity>;
4
+ heightField?: FieldName<TEntity>;
5
+ durationField?: FieldName<TEntity>;
6
+ }
7
+ /**
8
+ * Creates an extractor that extracts video metadata (dimensions, duration).
9
+ */
10
+ export declare const getVideoFileDataExtractor: <TEntity extends Record<string, unknown>>({ widthField, heightField, durationField, }: VideoFileDataExtractorProps<TEntity>) => FileDataExtractor<TEntity>;
11
+ //# sourceMappingURL=getVideoFileDataExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getVideoFileDataExtractor.d.ts","sourceRoot":"","sources":["../../src/extractors/getVideoFileDataExtractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,2BAA2B,CAAC,OAAO;IACnD,UAAU,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/B,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAChC,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,6CAIhF,2BAA2B,CAAC,OAAO,CAAC,KAAG,iBAAiB,CAAC,OAAO,CA2CjE,CAAA"}
@@ -0,0 +1,6 @@
1
+ export { getFileUrlDataExtractor, type FileUrlDataExtractorProps } from './getFileUrlDataExtractor.js';
2
+ export { getGenericFileMetadataExtractor, type GenericFileMetadataExtractorProps } from './getGenericFileMetadataExtractor.js';
3
+ export { getImageFileDataExtractor, type ImageFileDataExtractorProps } from './getImageFileDataExtractor.js';
4
+ export { getVideoFileDataExtractor, type VideoFileDataExtractorProps } from './getVideoFileDataExtractor.js';
5
+ export { getAudioFileDataExtractor, type AudioFileDataExtractorProps } from './getAudioFileDataExtractor.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,KAAK,yBAAyB,EAAE,MAAM,8BAA8B,CAAA;AACtG,OAAO,EAAE,+BAA+B,EAAE,KAAK,iCAAiC,EAAE,MAAM,sCAAsC,CAAA;AAC9H,OAAO,EAAE,yBAAyB,EAAE,KAAK,2BAA2B,EAAE,MAAM,gCAAgC,CAAA;AAC5G,OAAO,EAAE,yBAAyB,EAAE,KAAK,2BAA2B,EAAE,MAAM,gCAAgC,CAAA;AAC5G,OAAO,EAAE,yBAAyB,EAAE,KAAK,2BAA2B,EAAE,MAAM,gCAAgC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { FieldRef } from '@contember/bindx';
2
+ import type { FileDataExtractor } from '../types.js';
3
+ /**
4
+ * Generic entity type for extractors - allows any string field access
5
+ */
6
+ export type ExtractorEntity = {
7
+ $fields: Record<string, FieldRef<unknown>>;
8
+ };
9
+ /**
10
+ * Helper type for extractor factory function
11
+ */
12
+ export type ExtractorFactory<TProps, TEntity = ExtractorEntity> = (props: TProps) => FileDataExtractor<TEntity>;
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extractors/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAkC,iBAAiB,EAA8B,MAAM,aAAa,CAAA;AAEhH;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA;CAC1C,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,GAAG,eAAe,IAAI,CAAC,KAAK,EAAE,MAAM,KAAK,iBAAiB,CAAC,OAAO,CAAC,CAAA"}
@@ -0,0 +1,27 @@
1
+ import type { FieldName, FileType, UploadClient } from '../types.js';
2
+ export interface CreateAnyFileTypeProps<TEntity> {
3
+ /** Upload client to use */
4
+ uploader?: UploadClient<unknown>;
5
+ /** Field name for the URL */
6
+ urlField: FieldName<TEntity>;
7
+ /** Field name for file name (optional) */
8
+ fileNameField?: FieldName<TEntity>;
9
+ /** Field name for file size (optional) */
10
+ fileSizeField?: FieldName<TEntity>;
11
+ /** Field name for file type/MIME (optional) */
12
+ fileTypeField?: FieldName<TEntity>;
13
+ /** Field name for last modified (optional) */
14
+ lastModifiedField?: FieldName<TEntity>;
15
+ /** Additional extractors */
16
+ extractors?: FileType<TEntity>['extractors'];
17
+ /** Custom file validator */
18
+ acceptFile?: FileType<TEntity>['acceptFile'];
19
+ /** Accept MIME types (optional - defaults to any) */
20
+ accept?: FileType<TEntity>['accept'];
21
+ }
22
+ /**
23
+ * Creates a file type configuration for any file upload.
24
+ * Includes extractors for URL and generic metadata only.
25
+ */
26
+ export declare const createAnyFileType: <TEntity extends Record<string, unknown>>({ uploader, urlField, fileNameField, fileSizeField, fileTypeField, lastModifiedField, extractors, acceptFile, accept, }: CreateAnyFileTypeProps<TEntity>) => FileType<TEntity>;
27
+ //# sourceMappingURL=createAnyFileType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAnyFileType.d.ts","sourceRoot":"","sources":["../../src/fileTypes/createAnyFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAIpE,MAAM,WAAW,sBAAsB,CAAC,OAAO;IAC9C,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5B,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACtC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,qDAAqD;IACrD,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;CACpC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,yHAUxE,sBAAsB,CAAC,OAAO,CAAC,KAAG,QAAQ,CAAC,OAAO,CAgBnD,CAAA"}
@@ -0,0 +1,29 @@
1
+ import type { FieldName, FileType, UploadClient } from '../types.js';
2
+ export interface CreateAudioFileTypeProps<TEntity> {
3
+ /** Upload client to use */
4
+ uploader?: UploadClient<unknown>;
5
+ /** Field name for the URL */
6
+ urlField: FieldName<TEntity>;
7
+ /** Field name for duration (optional) */
8
+ durationField?: FieldName<TEntity>;
9
+ /** Field name for file name (optional) */
10
+ fileNameField?: FieldName<TEntity>;
11
+ /** Field name for file size (optional) */
12
+ fileSizeField?: FieldName<TEntity>;
13
+ /** Field name for file type/MIME (optional) */
14
+ fileTypeField?: FieldName<TEntity>;
15
+ /** Field name for last modified (optional) */
16
+ lastModifiedField?: FieldName<TEntity>;
17
+ /** Additional extractors */
18
+ extractors?: FileType<TEntity>['extractors'];
19
+ /** Custom file validator */
20
+ acceptFile?: FileType<TEntity>['acceptFile'];
21
+ /** Override default accept MIME types */
22
+ accept?: FileType<TEntity>['accept'];
23
+ }
24
+ /**
25
+ * Creates a file type configuration for audio uploads.
26
+ * Includes extractors for URL, audio duration, and generic metadata.
27
+ */
28
+ export declare const createAudioFileType: <TEntity extends Record<string, unknown>>({ uploader, urlField, durationField, fileNameField, fileSizeField, fileTypeField, lastModifiedField, extractors, acceptFile, accept, }: CreateAudioFileTypeProps<TEntity>) => FileType<TEntity>;
29
+ //# sourceMappingURL=createAudioFileType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createAudioFileType.d.ts","sourceRoot":"","sources":["../../src/fileTypes/createAudioFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKpE,MAAM,WAAW,wBAAwB,CAAC,OAAO;IAChD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5B,yCAAyC;IACzC,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACtC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,yCAAyC;IACzC,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;CACpC;AAMD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,wIAW1E,wBAAwB,CAAC,OAAO,CAAC,KAAG,QAAQ,CAAC,OAAO,CAmBrD,CAAA"}
@@ -0,0 +1,47 @@
1
+ import type { FieldName, FileType, UploadClient } from '../types.js';
2
+ export interface CreateImageFileTypeProps<TEntity> {
3
+ /** Upload client to use */
4
+ uploader?: UploadClient<unknown>;
5
+ /** Field name for the URL */
6
+ urlField: FieldName<TEntity>;
7
+ /** Field name for width (optional) */
8
+ widthField?: FieldName<TEntity>;
9
+ /** Field name for height (optional) */
10
+ heightField?: FieldName<TEntity>;
11
+ /** Field name for file name (optional) */
12
+ fileNameField?: FieldName<TEntity>;
13
+ /** Field name for file size (optional) */
14
+ fileSizeField?: FieldName<TEntity>;
15
+ /** Field name for file type/MIME (optional) */
16
+ fileTypeField?: FieldName<TEntity>;
17
+ /** Field name for last modified (optional) */
18
+ lastModifiedField?: FieldName<TEntity>;
19
+ /** Additional extractors */
20
+ extractors?: FileType<TEntity>['extractors'];
21
+ /** Custom file validator */
22
+ acceptFile?: FileType<TEntity>['acceptFile'];
23
+ /** Override default accept MIME types */
24
+ accept?: FileType<TEntity>['accept'];
25
+ }
26
+ /**
27
+ * Creates a file type configuration for image uploads.
28
+ * Includes extractors for URL, image dimensions, and generic metadata.
29
+ *
30
+ * @example
31
+ * ```tsx
32
+ * interface Image {
33
+ * id: string
34
+ * url: string
35
+ * width: number
36
+ * height: number
37
+ * }
38
+ *
39
+ * const imageFileType = createImageFileType<Image>({
40
+ * urlField: 'url', // Type-checked: must be keyof Image
41
+ * widthField: 'width', // Type-checked
42
+ * heightField: 'height',
43
+ * })
44
+ * ```
45
+ */
46
+ export declare const createImageFileType: <TEntity extends Record<string, unknown>>({ uploader, urlField, widthField, heightField, fileNameField, fileSizeField, fileTypeField, lastModifiedField, extractors, acceptFile, accept, }: CreateImageFileTypeProps<TEntity>) => FileType<TEntity>;
47
+ //# sourceMappingURL=createImageFileType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createImageFileType.d.ts","sourceRoot":"","sources":["../../src/fileTypes/createImageFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKpE,MAAM,WAAW,wBAAwB,CAAC,OAAO;IAChD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5B,sCAAsC;IACtC,UAAU,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/B,uCAAuC;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAChC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACtC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,yCAAyC;IACzC,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;CACpC;AAMD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,kJAY1E,wBAAwB,CAAC,OAAO,CAAC,KAAG,QAAQ,CAAC,OAAO,CAoBrD,CAAA"}
@@ -0,0 +1,33 @@
1
+ import type { FieldName, FileType, UploadClient } from '../types.js';
2
+ export interface CreateVideoFileTypeProps<TEntity> {
3
+ /** Upload client to use */
4
+ uploader?: UploadClient<unknown>;
5
+ /** Field name for the URL */
6
+ urlField: FieldName<TEntity>;
7
+ /** Field name for width (optional) */
8
+ widthField?: FieldName<TEntity>;
9
+ /** Field name for height (optional) */
10
+ heightField?: FieldName<TEntity>;
11
+ /** Field name for duration (optional) */
12
+ durationField?: FieldName<TEntity>;
13
+ /** Field name for file name (optional) */
14
+ fileNameField?: FieldName<TEntity>;
15
+ /** Field name for file size (optional) */
16
+ fileSizeField?: FieldName<TEntity>;
17
+ /** Field name for file type/MIME (optional) */
18
+ fileTypeField?: FieldName<TEntity>;
19
+ /** Field name for last modified (optional) */
20
+ lastModifiedField?: FieldName<TEntity>;
21
+ /** Additional extractors */
22
+ extractors?: FileType<TEntity>['extractors'];
23
+ /** Custom file validator */
24
+ acceptFile?: FileType<TEntity>['acceptFile'];
25
+ /** Override default accept MIME types */
26
+ accept?: FileType<TEntity>['accept'];
27
+ }
28
+ /**
29
+ * Creates a file type configuration for video uploads.
30
+ * Includes extractors for URL, video dimensions, duration, and generic metadata.
31
+ */
32
+ export declare const createVideoFileType: <TEntity extends Record<string, unknown>>({ uploader, urlField, widthField, heightField, durationField, fileNameField, fileSizeField, fileTypeField, lastModifiedField, extractors, acceptFile, accept, }: CreateVideoFileTypeProps<TEntity>) => FileType<TEntity>;
33
+ //# sourceMappingURL=createVideoFileType.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createVideoFileType.d.ts","sourceRoot":"","sources":["../../src/fileTypes/createVideoFileType.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAKpE,MAAM,WAAW,wBAAwB,CAAC,OAAO;IAChD,2BAA2B;IAC3B,QAAQ,CAAC,EAAE,YAAY,CAAC,OAAO,CAAC,CAAA;IAChC,6BAA6B;IAC7B,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC5B,sCAAsC;IACtC,UAAU,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAC/B,uCAAuC;IACvC,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAChC,yCAAyC;IACzC,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,0CAA0C;IAC1C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,+CAA+C;IAC/C,aAAa,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IAClC,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,CAAA;IACtC,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,4BAA4B;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IAC5C,yCAAyC;IACzC,MAAM,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAA;CACpC;AAMD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,iKAa1E,wBAAwB,CAAC,OAAO,CAAC,KAAG,QAAQ,CAAC,OAAO,CAqBrD,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { createImageFileType, type CreateImageFileTypeProps } from './createImageFileType.js';
2
+ export { createVideoFileType, type CreateVideoFileTypeProps } from './createVideoFileType.js';
3
+ export { createAudioFileType, type CreateAudioFileTypeProps } from './createAudioFileType.js';
4
+ export { createAnyFileType, type CreateAnyFileTypeProps } from './createAnyFileType.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/fileTypes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { useUploaderStateFiles, type StateFilter } from './useUploaderStateFiles.js';
2
+ export { useS3Client } from './useS3Client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,KAAK,WAAW,EAAE,MAAM,4BAA4B,CAAA;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { S3UploadClient, type S3UploadClientOptions } from '../uploadClient/S3UploadClient.js';
2
+ /**
3
+ * Creates an S3 upload client using the current Contember GraphQL client.
4
+ * Uses the bindx context to get the GraphQL client for URL signing.
5
+ */
6
+ export declare const useS3Client: (options?: Partial<S3UploadClientOptions>) => S3UploadClient;
7
+ //# sourceMappingURL=useS3Client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useS3Client.d.ts","sourceRoot":"","sources":["../../src/hooks/useS3Client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,mCAAmC,CAAA;AAG9F;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,UAAS,OAAO,CAAC,qBAAqB,CAAM,KAAG,cAgB1E,CAAA"}
@@ -0,0 +1,8 @@
1
+ import type { UploaderFileState } from '../types.js';
2
+ export type StateFilter = UploaderFileState['state'] | UploaderFileState['state'][];
3
+ /**
4
+ * Filters uploader state by state type.
5
+ * Returns an array of matching file states.
6
+ */
7
+ export declare const useUploaderStateFiles: (stateFilter?: StateFilter) => UploaderFileState[];
8
+ //# sourceMappingURL=useUploaderStateFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUploaderStateFiles.d.ts","sourceRoot":"","sources":["../../src/hooks/useUploaderStateFiles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAGpD,MAAM,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,GAAG,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAA;AAEnF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,cAAc,WAAW,KAAG,iBAAiB,EAWlF,CAAA"}
@@ -0,0 +1,10 @@
1
+ export type { UploadClient, FileUploadResult, FileUploadProgress, UploadClientUploadArgs, FileWithMeta, UploaderFileState, UploaderFileStateInitial, UploaderFileStateUploading, UploaderFileStateFinalizing, UploaderFileStateSuccess, UploaderFileStateError, UploaderState, BeforeUploadEvent, StartUploadEvent, ProgressEvent, SuccessEvent, AfterUploadEvent, ErrorEvent, UploaderEvents, FileDataExtractor, FileDataExtractorPopulator, FileType, DiscriminatedFileType, DiscriminatedFileTypeMap, FieldName, UploaderOptions, UploaderErrorType, UploaderErrorOptions, } from './types.js';
2
+ export { UploaderError } from './UploaderError.js';
3
+ export { UploaderUploadFilesContext, useUploaderUploadFiles, UploaderStateContext, useUploaderState, UploaderOptionsContext, useUploaderOptions, UploaderFileStateContext, useUploaderFileState, UploaderClientContext, useUploaderClient, UploaderDropzoneStateContext, useUploaderDropzoneState, } from './contexts.js';
4
+ export { S3UploadClient, type S3UploadClientOptions, type S3FileOptions, type S3Acl, type S3FileParameters, type S3SignedUrlResponse, type S3UrlSigner, } from './uploadClient/index.js';
5
+ export { createContentApiS3Signer, attrAccept, acceptToString } from './utils/index.js';
6
+ export { getFileUrlDataExtractor, type FileUrlDataExtractorProps, getGenericFileMetadataExtractor, type GenericFileMetadataExtractorProps, getImageFileDataExtractor, type ImageFileDataExtractorProps, getVideoFileDataExtractor, type VideoFileDataExtractorProps, getAudioFileDataExtractor, type AudioFileDataExtractorProps, } from './extractors/index.js';
7
+ export { createImageFileType, type CreateImageFileTypeProps, createVideoFileType, type CreateVideoFileTypeProps, createAudioFileType, type CreateAudioFileTypeProps, createAnyFileType, type CreateAnyFileTypeProps, } from './fileTypes/index.js';
8
+ export { useUploaderStateFiles, type StateFilter, useS3Client, } from './hooks/index.js';
9
+ export { Uploader, UploaderWithMeta, type UploaderProps, MultiUploader, MultiUploaderWithMeta, type MultiUploaderProps, UploaderEachFile, type UploaderEachFileProps, UploaderHasFile, type UploaderHasFileProps, UploaderFileStateSwitch, type UploaderFileStateSwitchProps, UploaderDropzoneRoot, type UploaderDropzoneRootProps, UploaderDropzoneArea, type UploaderDropzoneAreaProps, } from './components/index.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EAEX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EAEtB,YAAY,EAEZ,iBAAiB,EACjB,wBAAwB,EACxB,0BAA0B,EAC1B,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,aAAa,EAEb,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,cAAc,EAEd,iBAAiB,EACjB,0BAA0B,EAE1B,QAAQ,EACR,qBAAqB,EACrB,wBAAwB,EAExB,SAAS,EAET,eAAe,EAEf,iBAAiB,EACjB,oBAAoB,GACpB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EACN,0BAA0B,EAC1B,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,4BAA4B,EAC5B,wBAAwB,GACxB,MAAM,eAAe,CAAA;AAGtB,OAAO,EACN,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,WAAW,GAChB,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGvF,OAAO,EACN,uBAAuB,EACvB,KAAK,yBAAyB,EAC9B,+BAA+B,EAC/B,KAAK,iCAAiC,EACtC,yBAAyB,EACzB,KAAK,2BAA2B,EAChC,yBAAyB,EACzB,KAAK,2BAA2B,EAChC,yBAAyB,EACzB,KAAK,2BAA2B,GAChC,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACN,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,mBAAmB,EACnB,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,KAAK,sBAAsB,GAC3B,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EACN,qBAAqB,EACrB,KAAK,WAAW,EAChB,WAAW,GACX,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EACN,QAAQ,EACR,gBAAgB,EAChB,KAAK,aAAa,EAClB,aAAa,EACb,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,gBAAgB,EAChB,KAAK,qBAAqB,EAC1B,eAAe,EACf,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,KAAK,4BAA4B,EACjC,oBAAoB,EACpB,KAAK,yBAAyB,EAC9B,oBAAoB,EACpB,KAAK,yBAAyB,GAC9B,MAAM,uBAAuB,CAAA"}