jazz-tools 0.16.5 → 0.17.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 (170) hide show
  1. package/.svelte-kit/__package__/index.d.ts +1 -0
  2. package/.svelte-kit/__package__/index.d.ts.map +1 -1
  3. package/.svelte-kit/__package__/index.js +1 -0
  4. package/.svelte-kit/__package__/media/image.svelte +131 -0
  5. package/.svelte-kit/__package__/media/image.svelte.d.ts +10 -0
  6. package/.svelte-kit/__package__/media/image.svelte.d.ts.map +1 -0
  7. package/.svelte-kit/__package__/media/index.d.ts +2 -0
  8. package/.svelte-kit/__package__/media/index.d.ts.map +1 -0
  9. package/.svelte-kit/__package__/media/index.js +1 -0
  10. package/.svelte-kit/__package__/tests/media/image.svelte.test.d.ts +2 -0
  11. package/.svelte-kit/__package__/tests/media/image.svelte.test.d.ts.map +1 -0
  12. package/.svelte-kit/__package__/tests/media/image.svelte.test.js +430 -0
  13. package/.svelte-kit/__package__/tests/testUtils.d.ts +11 -0
  14. package/.svelte-kit/__package__/tests/testUtils.d.ts.map +1 -0
  15. package/.svelte-kit/__package__/tests/testUtils.js +17 -0
  16. package/.svelte-kit/__package__/tests/types.d.ts +3 -0
  17. package/.turbo/turbo-build.log +44 -48
  18. package/CHANGELOG.md +28 -0
  19. package/dist/{chunk-H3BIFFQG.js → chunk-2SH44VLX.js} +35 -40
  20. package/dist/chunk-2SH44VLX.js.map +1 -0
  21. package/dist/index.js +1 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/inspector/{custom-element-TUXKXSZU.js → custom-element-I7L56H6B.js} +3 -5
  24. package/dist/inspector/{custom-element-TUXKXSZU.js.map → custom-element-I7L56H6B.js.map} +1 -1
  25. package/dist/inspector/index.js +2 -4
  26. package/dist/inspector/index.js.map +1 -1
  27. package/dist/inspector/register-custom-element.js +1 -1
  28. package/dist/inspector/viewer/co-plain-text-view.d.ts +1 -1
  29. package/dist/inspector/viewer/co-plain-text-view.d.ts.map +1 -1
  30. package/dist/inspector/viewer/role-display.d.ts.map +1 -1
  31. package/dist/media/chunk-BBSS3NEY.js +211 -0
  32. package/dist/media/chunk-BBSS3NEY.js.map +1 -0
  33. package/dist/media/create-image.d.ts +48 -0
  34. package/dist/media/create-image.d.ts.map +1 -0
  35. package/dist/media/create-image.test.d.ts +2 -0
  36. package/dist/media/create-image.test.d.ts.map +1 -0
  37. package/dist/media/index.browser.d.ts +15 -0
  38. package/dist/media/index.browser.d.ts.map +1 -0
  39. package/dist/media/index.browser.js +113 -0
  40. package/dist/media/index.browser.js.map +1 -0
  41. package/dist/media/index.d.ts +53 -0
  42. package/dist/media/index.d.ts.map +1 -0
  43. package/dist/media/index.js +13 -0
  44. package/dist/media/index.js.map +1 -0
  45. package/dist/media/index.native.d.ts +17 -0
  46. package/dist/media/index.native.d.ts.map +1 -0
  47. package/dist/media/index.native.js +126 -0
  48. package/dist/media/index.native.js.map +1 -0
  49. package/dist/media/utils.d.ts +17 -0
  50. package/dist/media/utils.d.ts.map +1 -0
  51. package/dist/media/utils.test.d.ts +2 -0
  52. package/dist/media/utils.test.d.ts.map +1 -0
  53. package/dist/react/index.d.ts +1 -2
  54. package/dist/react/index.d.ts.map +1 -1
  55. package/dist/react/index.js +176 -59
  56. package/dist/react/index.js.map +1 -1
  57. package/dist/react/media/image.d.ts +62 -0
  58. package/dist/react/media/image.d.ts.map +1 -0
  59. package/dist/react/ssr.d.ts.map +1 -1
  60. package/dist/react/ssr.js.map +1 -1
  61. package/dist/react/tests/media/image.test.d.ts +2 -0
  62. package/dist/react/tests/media/image.test.d.ts.map +1 -0
  63. package/dist/react/tests/testUtils.d.ts.map +1 -1
  64. package/dist/react-core/auth/PassphraseAuth.d.ts +1 -1
  65. package/dist/react-core/auth/PassphraseAuth.d.ts.map +1 -1
  66. package/dist/react-core/index.js +1 -3
  67. package/dist/react-core/index.js.map +1 -1
  68. package/dist/react-core/tests/testUtils.d.ts.map +1 -1
  69. package/dist/react-core/tests/useDemoAuth.test.d.ts +2 -0
  70. package/dist/react-core/tests/useDemoAuth.test.d.ts.map +1 -0
  71. package/dist/react-native-core/index.d.ts +1 -1
  72. package/dist/react-native-core/index.d.ts.map +1 -1
  73. package/dist/react-native-core/index.js +84 -66
  74. package/dist/react-native-core/index.js.map +1 -1
  75. package/dist/react-native-core/media/image.d.ts +93 -0
  76. package/dist/react-native-core/media/image.d.ts.map +1 -0
  77. package/dist/react-native-core/testing.d.ts +2 -0
  78. package/dist/react-native-core/testing.d.ts.map +1 -0
  79. package/dist/svelte/index.d.ts +1 -0
  80. package/dist/svelte/index.d.ts.map +1 -1
  81. package/dist/svelte/index.js +1 -0
  82. package/dist/svelte/media/image.svelte +131 -0
  83. package/dist/svelte/media/image.svelte.d.ts +10 -0
  84. package/dist/svelte/media/image.svelte.d.ts.map +1 -0
  85. package/dist/svelte/media/index.d.ts +2 -0
  86. package/dist/svelte/media/index.d.ts.map +1 -0
  87. package/dist/svelte/media/index.js +1 -0
  88. package/dist/svelte/tests/media/image.svelte.test.d.ts +2 -0
  89. package/dist/svelte/tests/media/image.svelte.test.d.ts.map +1 -0
  90. package/dist/svelte/tests/media/image.svelte.test.js +430 -0
  91. package/dist/svelte/tests/testUtils.d.ts +11 -0
  92. package/dist/svelte/tests/testUtils.d.ts.map +1 -0
  93. package/dist/svelte/tests/testUtils.js +17 -0
  94. package/dist/svelte/tests/types.d.ts +3 -0
  95. package/dist/testing.js +1 -1
  96. package/dist/testing.js.map +1 -1
  97. package/dist/tools/coValues/coFeed.d.ts +15 -0
  98. package/dist/tools/coValues/coFeed.d.ts.map +1 -1
  99. package/dist/tools/coValues/deepLoading.d.ts +10 -10
  100. package/dist/tools/coValues/deepLoading.d.ts.map +1 -1
  101. package/dist/tools/coValues/extensions/imageDef.d.ts +3 -9
  102. package/dist/tools/coValues/extensions/imageDef.d.ts.map +1 -1
  103. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +1 -0
  104. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
  105. package/dist/tools/index.d.ts +1 -1
  106. package/dist/tools/index.d.ts.map +1 -1
  107. package/dist/tools/testing.d.ts.map +1 -1
  108. package/package.json +12 -12
  109. package/src/inspector/viewer/co-plain-text-view.tsx +1 -5
  110. package/src/inspector/viewer/co-stream-view.tsx +1 -1
  111. package/src/inspector/viewer/role-display.tsx +4 -1
  112. package/src/{browser-media-images/index.test.browser.ts → media/create-image.test.ts} +146 -24
  113. package/src/media/create-image.ts +180 -0
  114. package/src/media/index.browser.ts +150 -0
  115. package/src/media/index.native.ts +153 -0
  116. package/src/media/index.ts +61 -0
  117. package/src/media/utils.test.ts +327 -0
  118. package/src/media/utils.ts +202 -0
  119. package/src/react/index.ts +1 -2
  120. package/src/react/media/image.tsx +210 -0
  121. package/src/react/ssr.ts +1 -3
  122. package/src/react/tests/media/image.test.tsx +588 -0
  123. package/src/react/tests/testUtils.tsx +2 -10
  124. package/src/react-core/auth/PassphraseAuth.tsx +1 -5
  125. package/src/react-core/tests/testUtils.tsx +2 -10
  126. package/src/react-native-core/index.ts +1 -1
  127. package/src/react-native-core/media/image.tsx +159 -0
  128. package/src/svelte/index.ts +1 -0
  129. package/src/svelte/media/image.svelte +131 -0
  130. package/src/svelte/media/index.ts +1 -0
  131. package/src/svelte/tests/media/image.svelte.test.ts +583 -0
  132. package/src/svelte/tests/testUtils.ts +33 -0
  133. package/src/svelte/tests/types.d.ts +3 -0
  134. package/src/tools/coValues/coFeed.ts +40 -7
  135. package/src/tools/coValues/deepLoading.ts +46 -32
  136. package/src/tools/coValues/extensions/imageDef.ts +3 -49
  137. package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +6 -0
  138. package/src/tools/index.ts +0 -1
  139. package/src/tools/testing.ts +3 -1
  140. package/src/tools/tests/coList.test.ts +1 -1
  141. package/src/tools/tests/coMap.record.test-d.ts +105 -0
  142. package/src/tools/tests/coMap.record.test.ts +48 -2
  143. package/src/tools/tests/coMap.test-d.ts +50 -0
  144. package/src/tools/tests/coOptional.test.ts +3 -1
  145. package/tsconfig.json +1 -0
  146. package/tsup.config.ts +4 -9
  147. package/vitest.config.ts +14 -21
  148. package/dist/browser-media-images/index.d.ts +0 -9
  149. package/dist/browser-media-images/index.d.ts.map +0 -1
  150. package/dist/browser-media-images/index.js +0 -72
  151. package/dist/browser-media-images/index.js.map +0 -1
  152. package/dist/browser-media-images/index.test.browser.d.ts +0 -2
  153. package/dist/browser-media-images/index.test.browser.d.ts.map +0 -1
  154. package/dist/chunk-H3BIFFQG.js.map +0 -1
  155. package/dist/react/media.d.ts +0 -24
  156. package/dist/react/media.d.ts.map +0 -1
  157. package/dist/react-native-core/media.d.ts +0 -24
  158. package/dist/react-native-core/media.d.ts.map +0 -1
  159. package/dist/react-native-media-images/index.d.ts +0 -7
  160. package/dist/react-native-media-images/index.d.ts.map +0 -1
  161. package/dist/react-native-media-images/index.js +0 -177
  162. package/dist/react-native-media-images/index.js.map +0 -1
  163. package/dist/tools/tests/imageDef.test.d.ts +0 -2
  164. package/dist/tools/tests/imageDef.test.d.ts.map +0 -1
  165. package/src/browser-media-images/index.ts +0 -131
  166. package/src/react/media.tsx +0 -74
  167. package/src/react/scratch.tsx +0 -50
  168. package/src/react-native-core/media.tsx +0 -79
  169. package/src/react-native-media-images/index.ts +0 -238
  170. package/src/tools/tests/imageDef.test.ts +0 -278
@@ -51,6 +51,12 @@ export type Resolved<T, R extends RefsToResolve<T> | undefined = true> = DeeplyL
51
51
  type onErrorNullEnabled<Depth> = Depth extends {
52
52
  $onError: null;
53
53
  } ? null : never;
54
+ type CoMapLikeLoaded<V extends object, Depth, DepthLimit extends number, CurrentDepth extends number[]> = {
55
+ -readonly [Key in keyof Depth]-?: Key extends CoKeys<V> ? NonNullable<V[Key]> extends CoValue ? DeeplyLoaded<NonNullable<V[Key]>, Depth[Key], DepthLimit, [
56
+ 0,
57
+ ...CurrentDepth
58
+ ]> | (undefined extends V[Key] ? undefined : never) | onErrorNullEnabled<Depth[Key]> : never : never;
59
+ } & V;
54
60
  export type DeeplyLoaded<V, Depth, DepthLimit extends number = 10, CurrentDepth extends number[] = []> = DepthLimit extends CurrentDepth["length"] ? V : Depth extends boolean | undefined ? V : [
55
61
  V
56
62
  ] extends [Array<infer Item>] ? NotNull<Item> extends CoValue ? Depth extends {
@@ -63,21 +69,15 @@ export type DeeplyLoaded<V, Depth, DepthLimit extends number = 10, CurrentDepth
63
69
  V
64
70
  ] extends [{
65
71
  _type: "CoMap" | "Group" | "Account";
66
- }] ? ItemsSym extends keyof V ? Depth extends {
72
+ }] ? keyof Depth extends never ? V : ItemsSym extends keyof V ? Depth extends {
67
73
  $each: infer ItemDepth;
68
- } ? // Deeply loaded Record-like CoMap
69
- {
74
+ } ? {
70
75
  [key: string]: DeeplyLoaded<NonNullable<V[ItemsSym]>, ItemDepth, DepthLimit, [
71
76
  0,
72
77
  ...CurrentDepth
73
78
  ]> | onErrorNullEnabled<Depth["$each"]>;
74
- } & V : never : keyof Depth extends never ? V : // Deeply loaded CoMap
75
- {
76
- -readonly [Key in keyof Depth]-?: Key extends CoKeys<V> ? NonNullable<V[Key]> extends CoValue ? DeeplyLoaded<NonNullable<V[Key]>, Depth[Key], DepthLimit, [
77
- 0,
78
- ...CurrentDepth
79
- ]> | (undefined extends V[Key] ? undefined : never) | onErrorNullEnabled<Depth[Key]> : never : never;
80
- } & V : [V] extends [
79
+ } & V : string extends keyof Depth ? // if at least one key is `string`, then we treat the resolve as it was empty
80
+ DeeplyLoaded<V, {}, DepthLimit, [0, ...CurrentDepth]> & V : CoMapLikeLoaded<V, Depth, DepthLimit, CurrentDepth> : CoMapLikeLoaded<V, Depth, DepthLimit, CurrentDepth> : [V] extends [
81
81
  {
82
82
  _type: "CoStream";
83
83
  byMe: CoFeedEntry<infer Item> | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/deepLoading.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/deepLoading.ts"],"names":[],"mappings":"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"}
@@ -2,16 +2,10 @@ import { z } from "../../implementation/zodSchema/zodReExport.js";
2
2
  import { Loaded } from "../../internal.js";
3
3
  /** @category Media */
4
4
  export declare const ImageDefinition: import("../../internal.js").CoMapSchema<{
5
+ original: import("../../internal.js").FileStreamSchema;
5
6
  originalSize: z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>;
6
7
  placeholderDataURL: z.ZodOptional<z.ZodString>;
7
- }, import("../../internal.js").FileStreamSchema, import("../account.js").Account | import("../group.js").Group> & {
8
- highestResAvailable(imageDef: ImageDefinition, options?: {
9
- maxWidth?: number;
10
- targetWidth?: number;
11
- }): {
12
- res: `${number}x${number}`;
13
- stream: import("../coFeed.js").BinaryCoStream;
14
- } | undefined;
15
- };
8
+ progressive: z.ZodBoolean;
9
+ }, import("../../internal.js").FileStreamSchema, import("../account.js").Account | import("../group.js").Group>;
16
10
  export type ImageDefinition = Loaded<typeof ImageDefinition>;
17
11
  //# sourceMappingURL=imageDef.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"imageDef.d.ts","sourceRoot":"","sources":["../../../../src/tools/coValues/extensions/imageDef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,+CAA+C,CAAC;AAClE,OAAO,EAAE,MAAM,EAAqC,MAAM,mBAAmB,CAAC;AAQ9E,sBAAsB;AACtB,eAAO,MAAM,eAAe;;;;kCAEd,eAAe,YACf;QACR,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB;;;;CA0CH,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"imageDef.d.ts","sourceRoot":"","sources":["../../../../src/tools/coValues/extensions/imageDef.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,+CAA+C,CAAC;AAClE,OAAO,EAAE,MAAM,EAAqC,MAAM,mBAAmB,CAAC;AAU9E,sBAAsB;AACtB,eAAO,MAAM,eAAe;;;;;+GAAsB,CAAC;AACnD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -17,6 +17,7 @@ export declare class FileStreamSchema implements CoreFileStreamSchema {
17
17
  owner?: Group | Account;
18
18
  onProgress?: (progress: number) => void;
19
19
  } | Account | Group): Promise<FileStream>;
20
+ createFromArrayBuffer(...args: Parameters<typeof FileStream.createFromArrayBuffer>): Promise<FileStream>;
20
21
  loadAsBlob(id: string, options?: {
21
22
  allowUnfinished?: boolean;
22
23
  loadAs?: Account | AnonymousJazzAgent;
@@ -1 +1 @@
1
- {"version":3,"file":"FileStreamSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,KAAK,EAEN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CAKjE;AAED,qBAAa,gBAAiB,YAAW,oBAAoB;IAI/C,OAAO,CAAC,YAAY;IAHhC,QAAQ,CAAC,aAAa,OAAiB;IACvC,QAAQ,CAAC,OAAO,eAAyB;gBAErB,YAAY,EAAE,OAAO,UAAU;IAEnD,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU;IAI3E,cAAc,CACZ,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,CAAC,EACJ;QACE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;KACzC,GACD,OAAO,GACP,KAAK,GACR,OAAO,CAAC,UAAU,CAAC;IAItB,UAAU,CACR,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;KACvC,GACA,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAI5B,IAAI,CACF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,GAChD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI7B,SAAS,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,EACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IACb,SAAS,CACP,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IAMb,eAAe,IAAI,OAAO,UAAU;IAIpC,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC;CAGnC"}
1
+ {"version":3,"file":"FileStreamSchema.d.ts","sourceRoot":"","sources":["../../../../../src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,UAAU,EACV,KAAK,EAEN,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,wBAAgB,0BAA0B,IAAI,oBAAoB,CAKjE;AAED,qBAAa,gBAAiB,YAAW,oBAAoB;IAI/C,OAAO,CAAC,YAAY;IAHhC,QAAQ,CAAC,aAAa,OAAiB;IACvC,QAAQ,CAAC,OAAO,eAAyB;gBAErB,YAAY,EAAE,OAAO,UAAU;IAEnD,MAAM,CAAC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,GAAG,OAAO,GAAG,KAAK,GAAG,UAAU;IAI3E,cAAc,CACZ,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,CAAC,EACJ;QACE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;QACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;KACzC,GACD,OAAO,GACP,KAAK,GACR,OAAO,CAAC,UAAU,CAAC;IAItB,qBAAqB,CACnB,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,qBAAqB,CAAC;IAK9D,UAAU,CACR,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QACR,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,MAAM,CAAC,EAAE,OAAO,GAAG,kBAAkB,CAAC;KACvC,GACA,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAI5B,IAAI,CACF,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,GAChD,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAI7B,SAAS,CACP,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,kBAAkB,CAAA;KAAE,EACjD,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IACb,SAAS,CACP,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,KAAK,IAAI,GAC7D,MAAM,IAAI;IAMb,eAAe,IAAI,OAAO,UAAU;IAIpC,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC;CAGnC"}
@@ -1,3 +1,3 @@
1
1
  export * from "./exports.js";
2
- export { MAX_RECOMMENDED_TX_SIZE, cojsonInternals, logger, LogLevel, } from "cojson";
2
+ export { cojsonInternals, logger, LogLevel, } from "cojson";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,MAAM,EACN,QAAQ,GACT,MAAM,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,MAAM,EACN,QAAQ,GACT,MAAM,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,kBAAkB,EAEvB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAM5B,MAAM,eAAe,CAAC;AAOvB,qBAAa,YAAa,SAAQ,YAAY;WAC/B,MAAM;CAoBpB;AAED,wBAAgB,gCAAgC,0BAiC/C;AAKD,wBAAsB,qBAAqB,CACzC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,iBAAiB,EACrB,OAAO,CAAC,EAAE;IACV,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAuD/B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAEhD;AAED,wBAAsB,mBAAmB;;GASxC;AAED,MAAM,MAAM,2BAA2B,CAAC,GAAG,SAAS,OAAO,IACzD,2BAA2B,CAAC,GAAG,CAAC,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEJ,qBAAa,sBAAsB,CACjC,GAAG,SAAS,OAAO,CACnB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,kBAAkB,CAAC,GAAG,SAAS,OAAO,EAC3C,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EAC7C,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IAS1C,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,OAAO,EACpC,OAAO,EAAE,GAAG,EACZ,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IA0C1C,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,OAAO,EAClC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EACxC,KAAK,GAAE,2BAA2B,CAAC,GAAG,CAAM;IAmBxC,aAAa,CACjB,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,EACvC,SAAS,CAAC,EAAE,2BAA2B;;uBAqE47K,cAAc;;;;;;;;CAvCp/K;AAED,wBAAsB,YAAY,CAChC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,KAAK,GAAE,QAAQ,GAAG,QAAmB,EACrC,KAAK,GAAE,QAAQ,GAAG,QAAmB,iBAYtC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,UAAkB,GACnB,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,oBAgB/B"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../src/tools/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,kBAAkB,EAEvB,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAM5B,MAAM,eAAe,CAAC;AAOvB,qBAAa,YAAa,SAAQ,YAAY;WAC/B,MAAM;CAoBpB;AAED,wBAAgB,gCAAgC,0BAiC/C;AAKD,wBAAsB,qBAAqB,CACzC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,iBAAiB,EACrB,OAAO,CAAC,EAAE;IACV,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAuD/B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAEhD;AAED,wBAAsB,mBAAmB;;GASxC;AAED,MAAM,MAAM,2BAA2B,CAAC,GAAG,SAAS,OAAO,IACzD,2BAA2B,CAAC,GAAG,CAAC,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEJ,qBAAa,sBAAsB,CACjC,GAAG,SAAS,OAAO,CACnB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,kBAAkB,CAAC,GAAG,SAAS,OAAO,EAC3C,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EAC7C,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IAS1C,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,OAAO,EACpC,OAAO,EAAE,GAAG,EACZ,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IA0C1C,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,OAAO,EAClC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EACxC,KAAK,GAAE,2BAA2B,CAAC,GAAG,CAAM;IAmBxC,aAAa,CACjB,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,EACvC,SAAS,CAAC,EAAE,2BAA2B;;uBAuEy7K,cAAc;;;;;;;;CAzCj/K;AAED,wBAAsB,YAAY,CAChC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,KAAK,GAAE,QAAQ,GAAG,QAAmB,EACrC,KAAK,GAAE,QAAQ,GAAG,QAAmB,iBAYtC;AAED,wBAAsB,iBAAiB,CAAC,EACtC,UAAkB,GACnB,GAAE;IACD,UAAU,CAAC,EAAE,OAAO,CAAC;CACjB,oBAgBL"}
package/package.json CHANGED
@@ -24,6 +24,12 @@
24
24
  "types": "./dist/browser-media-images/index.d.ts",
25
25
  "default": "./dist/browser-media-images/index.js"
26
26
  },
27
+ "./media": {
28
+ "@jazz-tools/source": "./src/media/index.ts",
29
+ "types": "./dist/media/index.d.ts",
30
+ "react-native": "./dist/media/index.native.js",
31
+ "default": "./dist/media/index.browser.js"
32
+ },
27
33
  "./expo": {
28
34
  "@jazz-tools/source": "./src/expo/index.ts",
29
35
  "types": "./dist/expo/index.d.ts",
@@ -109,11 +115,6 @@
109
115
  "types": "./dist/react-native-core/testing.d.ts",
110
116
  "default": "./dist/react-native-core/testing.js"
111
117
  },
112
- "./react-native-media-images": {
113
- "@jazz-tools/source": "./src/react-native-media-images/index.ts",
114
- "types": "./dist/react-native-media-images/index.d.ts",
115
- "default": "./dist/react-native-media-images/index.js"
116
- },
117
118
  "./svelte": {
118
119
  "svelte": "./dist/svelte/index.js",
119
120
  "@jazz-tools/source": "./src/svelte/index.ts",
@@ -139,18 +140,15 @@
139
140
  },
140
141
  "type": "module",
141
142
  "license": "MIT",
142
- "version": "0.16.5",
143
+ "version": "0.17.0",
143
144
  "dependencies": {
144
145
  "@manuscripts/prosemirror-recreate-steps": "^0.1.4",
145
146
  "@scure/base": "1.2.1",
146
147
  "@scure/bip39": "^1.3.0",
147
148
  "@tiptap/core": "^2.12.0",
148
- "@types/image-blob-reduce": "^4.1.1",
149
149
  "clsx": "^2.0.0",
150
150
  "fast-myers-diff": "^3.2.0",
151
151
  "goober": "^2.1.16",
152
- "image-blob-reduce": "^4.1.0",
153
- "pica": "^9.0.1",
154
152
  "prosemirror-example-setup": "^1.2.2",
155
153
  "prosemirror-menu": "^1.2.4",
156
154
  "prosemirror-model": "^1.21.1",
@@ -158,16 +156,18 @@
158
156
  "prosemirror-state": "^1.4.3",
159
157
  "prosemirror-transform": "^1.9.0",
160
158
  "zod": "3.25.76",
161
- "cojson": "0.16.5",
162
- "cojson-storage-indexeddb": "0.16.5",
163
- "cojson-transport-ws": "0.16.5"
159
+ "cojson": "0.17.0",
160
+ "cojson-transport-ws": "0.17.0",
161
+ "cojson-storage-indexeddb": "0.17.0"
164
162
  },
165
163
  "devDependencies": {
166
164
  "@scure/bip39": "^1.3.0",
167
165
  "@sveltejs/package": "^2.0.0",
166
+ "@sveltejs/vite-plugin-svelte": "^6.1.0",
168
167
  "@testing-library/dom": "^10.4.0",
169
168
  "@testing-library/jest-dom": "^6.6.3",
170
169
  "@testing-library/react": "16.2.0",
170
+ "@testing-library/svelte": "^5.2.6",
171
171
  "@types/react": "19.1.0",
172
172
  "@types/react-dom": "19.1.0",
173
173
  "@vitest/browser": "^3.2.4",
@@ -1,11 +1,7 @@
1
1
  import { JsonObject } from "cojson";
2
2
  import { RawDataCard } from "./raw-data-card.js";
3
3
 
4
- export function CoPlainTextView({
5
- data,
6
- }: {
7
- data: JsonObject;
8
- }) {
4
+ export function CoPlainTextView({ data }: { data: JsonObject }) {
9
5
  if (!data) return;
10
6
 
11
7
  return (
@@ -321,7 +321,7 @@ function RenderCoStream({
321
321
  {/* @ts-expect-error - TODO: fix types */}
322
322
  {value.items[streamPerUser[idx]]?.map(
323
323
  (item: CoStreamItem<JsonValue>) => (
324
- <div>
324
+ <div key={item.tx.txIndex + item.tx.sessionID}>
325
325
  {new Date(item.madeAt).toLocaleString()}{" "}
326
326
  {JSON.stringify(item.value)}
327
327
  </div>
@@ -5,7 +5,10 @@ import { useResolvedCoValue } from "./use-resolve-covalue.js";
5
5
  export function RoleDisplay({
6
6
  node,
7
7
  value,
8
- }: { node: LocalNode; value: RawCoValue }) {
8
+ }: {
9
+ node: LocalNode;
10
+ value: RawCoValue;
11
+ }) {
9
12
  const { snapshot } = useResolvedCoValue(value.group.id, node);
10
13
 
11
14
  if (!snapshot || snapshot === "unavailable") {
@@ -1,48 +1,157 @@
1
- // @vitest-environment happy-dom
2
-
1
+ import { FileStream } from "jazz-tools";
3
2
  import { createJazzTestAccount } from "jazz-tools/testing";
4
- import { describe, expect, it } from "vitest";
5
- import { createImage } from "./index.js";
3
+ import { afterEach, describe, expect, it, vi } from "vitest";
4
+ import { createImageFactory } from "./create-image.js";
5
+
6
+ describe("createImage", async () => {
7
+ const account = await createJazzTestAccount();
8
+
9
+ const getImageSize = vi.fn();
10
+ const getPlaceholderBase64 = vi.fn();
11
+ const createFileStreamFromSource = vi
12
+ .fn()
13
+ .mockResolvedValue(FileStream.create({ owner: account._owner }));
14
+ const resize = vi.fn();
15
+
16
+ const createImage = createImageFactory({
17
+ getImageSize,
18
+ getPlaceholderBase64,
19
+ createFileStreamFromSource,
20
+ resize,
21
+ });
6
22
 
7
- describe("createImage", () => {
8
- it("should create an image with a single size if width/height < 256", async () => {
9
- const OnePixel =
10
- "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==";
23
+ afterEach(() => {
24
+ vi.clearAllMocks();
25
+ });
26
+
27
+ it("should create a single original image if all settings are off", async () => {
11
28
  const imageBlob = new Blob(
12
- [Uint8Array.from(atob(OnePixel), (c) => c.charCodeAt(0))],
29
+ [Uint8Array.from(OnePixel, (c) => c.charCodeAt(0))],
13
30
  { type: "image/png" },
14
31
  );
15
32
 
16
- const account = await createJazzTestAccount();
33
+ getImageSize.mockResolvedValue({ width: 1, height: 1 });
34
+
35
+ const image = await createImage(imageBlob, {
36
+ owner: account._owner,
37
+ placeholder: false,
38
+ progressive: false,
39
+ });
17
40
 
18
- const image = await createImage(imageBlob, { owner: account._owner });
19
41
  expect(image).toBeDefined();
20
42
 
21
43
  expect(image.originalSize).toEqual([1, 1]);
22
- expect(image.placeholderDataURL).toBeDefined();
23
-
44
+ expect(image.placeholderDataURL).not.toBeDefined();
45
+ expect(image.progressive).toBe(false);
46
+ expect(image.original).toBeDefined();
24
47
  expect(image[`1x1`]).toBeDefined();
25
- expect(image[`1x1`]!.getMetadata()!.mimeType).toBe("image/png");
26
- expect(image["256x256"]).not.toBeDefined();
27
- expect(image["1024x1024"]).not.toBeDefined();
48
+ expect(image[`1x1`]).toStrictEqual(image.original);
28
49
  });
29
50
 
30
- it("should create an image with three sizes", async () => {
51
+ it("should create the image with original and placeholder", async () => {
52
+ const imageBlob = new Blob(
53
+ [Uint8Array.from(OnePixel, (c) => c.charCodeAt(0))],
54
+ { type: "image/png" },
55
+ );
56
+
57
+ getImageSize.mockResolvedValue({ width: 1, height: 1 });
58
+ getPlaceholderBase64.mockResolvedValue(
59
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
60
+ );
61
+
62
+ const image = await createImage(imageBlob, {
63
+ owner: account._owner,
64
+ placeholder: "blur",
65
+ progressive: false,
66
+ });
67
+
68
+ expect(image).toBeDefined();
69
+
70
+ expect(image.originalSize).toEqual([1, 1]);
71
+ expect(image.placeholderDataURL).toBeDefined();
72
+ expect(image.progressive).toBe(false);
73
+ expect(image.original).toBeDefined();
74
+ });
75
+
76
+ it("should create a resized image if maxSize is set", async () => {
31
77
  const imageBlob = new Blob(
32
78
  [Uint8Array.from(White1920, (c) => c.charCodeAt(0))],
33
79
  { type: "image/png" },
34
80
  );
35
81
 
36
- const account = await createJazzTestAccount();
82
+ getImageSize.mockResolvedValue({ width: 1920, height: 400 });
83
+ resize.mockResolvedValue(new Blob([White1920], { type: "image/png" }));
84
+
85
+ const image = await createImage(imageBlob, {
86
+ owner: account._owner,
87
+ placeholder: false,
88
+ progressive: false,
89
+ maxSize: 256,
90
+ });
37
91
 
38
- const image = await createImage(imageBlob, { owner: account._owner });
39
92
  expect(image).toBeDefined();
40
93
 
94
+ expect(image.originalSize).toEqual([256, 53]);
95
+ expect(image.placeholderDataURL).not.toBeDefined();
96
+ expect(image.progressive).toBe(false);
97
+ expect(image.original).toBeDefined();
98
+ expect(image[`256x53`]).toStrictEqual(image.original);
99
+
100
+ expect(resize).toHaveBeenCalledWith(imageBlob, 256, 53);
101
+ });
102
+
103
+ it("should not resize the original image if maxSize is higher than the original size", async () => {
104
+ const imageBlob = new Blob(
105
+ [Uint8Array.from(OnePixel, (c) => c.charCodeAt(0))],
106
+ { type: "image/png" },
107
+ );
108
+
109
+ getImageSize.mockResolvedValue({ width: 1, height: 1 });
110
+
111
+ const image = await createImage(imageBlob, {
112
+ owner: account._owner,
113
+ placeholder: false,
114
+ progressive: false,
115
+ maxSize: 256,
116
+ });
117
+
118
+ expect(image).toBeDefined();
119
+
120
+ expect(image.originalSize).toEqual([1, 1]);
121
+ expect(image.placeholderDataURL).not.toBeDefined();
122
+ expect(image.progressive).toBe(false);
123
+ expect(image.original).toBeDefined();
124
+ expect(image[`1x1`]).toStrictEqual(image.original);
125
+
126
+ expect(resize).not.toHaveBeenCalled();
127
+ });
128
+
129
+ it("should create an image with intermediate sizes for progressive loading", async () => {
130
+ const imageBlob = new Blob(
131
+ [Uint8Array.from(White1920, (c) => c.charCodeAt(0))],
132
+ { type: "image/png" },
133
+ );
134
+
135
+ getImageSize.mockResolvedValue({ width: 1920, height: 400 });
136
+ resize.mockResolvedValue(new Blob([White1920], { type: "image/png" }));
137
+
138
+ const image = await createImage(imageBlob, {
139
+ owner: account._owner,
140
+ progressive: true,
141
+ placeholder: false,
142
+ });
143
+
144
+ expect(image).toBeDefined();
41
145
  expect(image.originalSize).toEqual([1920, 400]);
42
- expect(image.placeholderDataURL).toBeDefined();
146
+ expect(image.placeholderDataURL).not.toBeDefined();
147
+
43
148
  expect(image[`256x53`]).toBeDefined();
44
149
  expect(image[`1024x213`]).toBeDefined();
45
- expect(image[`1920x400`]).toBeDefined();
150
+ expect(image[`2048x427`]).not.toBeDefined();
151
+
152
+ expect(resize).toHaveBeenCalledWith(imageBlob, 256, 53);
153
+ expect(resize).toHaveBeenCalledWith(imageBlob, 1024, 213);
154
+ expect(resize).not.toHaveBeenCalledWith(imageBlob, 2048, 427);
46
155
  });
47
156
 
48
157
  it("should lose the original size and create image based on maxSize", async () => {
@@ -51,22 +160,35 @@ describe("createImage", () => {
51
160
  { type: "image/png" },
52
161
  );
53
162
 
54
- const account = await createJazzTestAccount();
163
+ getImageSize.mockResolvedValue({ width: 1920, height: 400 });
164
+ resize.mockResolvedValue(new Blob([White1920], { type: "image/png" }));
55
165
 
56
166
  const image = await createImage(imageBlob, {
57
167
  owner: account._owner,
58
168
  maxSize: 256,
169
+ placeholder: false,
170
+ progressive: true,
59
171
  });
172
+
60
173
  expect(image).toBeDefined();
61
174
 
62
175
  expect(image.originalSize).toEqual([256, 53]);
63
- expect(image.placeholderDataURL).toBeDefined();
176
+ expect(image.placeholderDataURL).not.toBeDefined();
64
177
  expect(image[`256x53`]).toBeDefined();
65
178
  expect(image[`1024x213`]).not.toBeDefined();
66
- expect(image[`1920x400`]).not.toBeDefined();
179
+ expect(image[`2048x427`]).not.toBeDefined();
180
+
181
+ expect(resize).toHaveBeenCalledWith(imageBlob, 256, 53);
182
+ expect(resize).not.toHaveBeenCalledWith(imageBlob, 1024, 213);
183
+ expect(resize).not.toHaveBeenCalledWith(imageBlob, 2048, 427);
67
184
  });
68
185
  });
69
186
 
187
+ // 1x1 png
188
+ const OnePixel = atob(
189
+ "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
190
+ );
191
+
70
192
  // Image 1920x400
71
193
  const White1920 = atob(
72
194
  "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAP//////////////////////////////////////////////////////////////////////////////////////2wBDAf//////////////////////////////////////////////////////////////////////////////////////wAARCAGQB4ADASIAAhEBAxEB/8QAFQABAQAAAAAAAAAAAAAAAAAAAAP/xAAUEAEAAAAAAAAAAAAAAAAAAAAA/8QAFAEBAAAAAAAAAAAAAAAAAAAAAP/EABQRAQAAAAAAAAAAAAAAAAAAAAD/2gAMAwEAAhEDEQA/AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//2Q==",
@@ -0,0 +1,180 @@
1
+ import {
2
+ Account,
3
+ FileStream,
4
+ Group,
5
+ ImageDefinition,
6
+ type Loaded,
7
+ } from "jazz-tools";
8
+
9
+ export type SourceType = Blob | File | string;
10
+
11
+ export type CreateImageOptions = {
12
+ /** The owner of the image. Can be either a Group or Account. If not specified, the current user will be the owner. */
13
+ owner?: Group | Account;
14
+ /**
15
+ * Controls placeholder generation for the image.
16
+ * - `"blur"`: Generates a blurred placeholder image (default)
17
+ * - `false`: No placeholder is generated
18
+ * @default "blur"
19
+ */
20
+ placeholder?: "blur" | false;
21
+ /**
22
+ * Maximum size constraint for the image. The image will be resized to fit within this size while maintaining aspect ratio.
23
+ * If the image is smaller than maxSize in both dimensions, no resizing occurs.
24
+ * @example 1024 // Resizes image to fit within 1024px in the largest dimension
25
+ */
26
+ maxSize?: number; // | [number, number];
27
+ /**
28
+ * The progressive loading pattern is a technique that allows images to load incrementally, starting with a small version and gradually replacing it with a larger version as it becomes available.
29
+ * This is useful for improving the user experience by showing a placeholder while the image is loading.
30
+ *
31
+ * Passing progressive: true to createImage() will create internal smaller versions of the image for future uses.
32
+ *
33
+ * @default false
34
+ */
35
+ progressive?: boolean;
36
+ };
37
+
38
+ export type CreateImageImpl = {
39
+ createFileStreamFromSource: (
40
+ imageBlobOrFile: SourceType,
41
+ owner?: Group | Account,
42
+ ) => Promise<FileStream>;
43
+ getImageSize: (
44
+ imageBlobOrFile: SourceType,
45
+ ) => Promise<{ width: number; height: number }>;
46
+ getPlaceholderBase64: (imageBlobOrFile: SourceType) => Promise<string>;
47
+ resize: (
48
+ imageBlobOrFile: SourceType,
49
+ width: number,
50
+ height: number,
51
+ ) => Promise<Blob | string>;
52
+ };
53
+
54
+ export function createImageFactory(impl: CreateImageImpl) {
55
+ return (source: SourceType, options: CreateImageOptions) =>
56
+ createImage(source, options, impl);
57
+ }
58
+
59
+ async function createImage(
60
+ imageBlobOrFile: SourceType,
61
+ options: CreateImageOptions,
62
+ impl: CreateImageImpl,
63
+ ): Promise<Loaded<typeof ImageDefinition, { $each: true }>> {
64
+ // Get the original size of the image
65
+ const { width: originalWidth, height: originalHeight } =
66
+ await impl.getImageSize(imageBlobOrFile);
67
+
68
+ const def: {
69
+ originalSize: [number, number];
70
+ progressive: boolean;
71
+ placeholderDataURL: string | undefined;
72
+ original?: FileStream;
73
+ files: Record<string, FileStream>;
74
+ } = {
75
+ originalSize: [originalWidth, originalHeight],
76
+ progressive: false,
77
+ placeholderDataURL: undefined,
78
+ files: {},
79
+ };
80
+
81
+ // Placeholder
82
+ if (options?.placeholder === "blur") {
83
+ def.placeholderDataURL = await impl.getPlaceholderBase64(imageBlobOrFile);
84
+ }
85
+
86
+ /**
87
+ * Original
88
+ *
89
+ * Save the original image.
90
+ * If the maxSize is set, resize the image to the maxSize if needed
91
+ */
92
+ if (options?.maxSize === undefined) {
93
+ def.original = await impl.createFileStreamFromSource(
94
+ imageBlobOrFile,
95
+ options?.owner,
96
+ );
97
+ def.files[`${originalWidth}x${originalHeight}`] = def.original;
98
+ } else if (
99
+ options?.maxSize >= originalWidth &&
100
+ options?.maxSize >= originalHeight
101
+ ) {
102
+ // no resizes required, just return the original image
103
+ def.original = await impl.createFileStreamFromSource(
104
+ imageBlobOrFile,
105
+ options?.owner,
106
+ );
107
+ def.files[`${originalWidth}x${originalHeight}`] = def.original;
108
+ } else {
109
+ const { width, height } = getNewDimensions(
110
+ originalWidth,
111
+ originalHeight,
112
+ options.maxSize,
113
+ );
114
+
115
+ const blob = await impl.resize(imageBlobOrFile, width, height);
116
+ def.originalSize = [width, height];
117
+ def.original = await impl.createFileStreamFromSource(blob, options?.owner);
118
+ def.files[`${width}x${height}`] = def.original;
119
+ }
120
+
121
+ const imageCoValue = ImageDefinition.create(
122
+ {
123
+ originalSize: def.originalSize,
124
+ progressive: def.progressive,
125
+ placeholderDataURL: def.placeholderDataURL,
126
+ original: def.original,
127
+ ...def.files,
128
+ },
129
+ options?.owner,
130
+ );
131
+
132
+ /**
133
+ * Progressive loading
134
+ *
135
+ * Save a set of resized images using three sizes: 256, 1024, 2048
136
+ *
137
+ * On the client side, the image will be loaded progressively, starting from the smallest size and increasing the size until the original size is reached.
138
+ */
139
+ if (options?.progressive) {
140
+ imageCoValue.progressive = true;
141
+
142
+ const resizes = ([256, 1024, 2048] as const).filter(
143
+ (s) =>
144
+ s <
145
+ Math.max(imageCoValue.originalSize[0], imageCoValue.originalSize[1]),
146
+ );
147
+
148
+ for (const size of resizes) {
149
+ const { width, height } = getNewDimensions(
150
+ originalWidth,
151
+ originalHeight,
152
+ size,
153
+ );
154
+
155
+ const blob = await impl.resize(imageBlobOrFile, width, height);
156
+ imageCoValue[`${width}x${height}`] =
157
+ await impl.createFileStreamFromSource(blob, options?.owner);
158
+ }
159
+ }
160
+
161
+ return imageCoValue;
162
+ }
163
+
164
+ const getNewDimensions = (
165
+ originalWidth: number,
166
+ originalHeight: number,
167
+ maxSize: number,
168
+ ) => {
169
+ if (originalWidth > originalHeight) {
170
+ return {
171
+ width: maxSize,
172
+ height: Math.round(maxSize * (originalHeight / originalWidth)),
173
+ };
174
+ }
175
+
176
+ return {
177
+ width: Math.round(maxSize * (originalWidth / originalHeight)),
178
+ height: maxSize,
179
+ };
180
+ };