@brandlab-digital/site-next 1.0.3 → 1.0.4

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.
@@ -0,0 +1,30 @@
1
+ import { type ContactAttachmentPolicy } from '@brandlab-digital/site-core/contact';
2
+ import { type ChangeEvent, type DragEvent } from 'react';
3
+ export interface BrandlabContactAttachmentPreview {
4
+ file: File;
5
+ preview: string;
6
+ }
7
+ export interface UseBrandlabContactAttachmentsOptions {
8
+ policy?: ContactAttachmentPolicy;
9
+ compressImage?: (file: File) => Promise<File>;
10
+ createObjectUrl?: (file: File) => string;
11
+ revokeObjectUrl?: (url: string) => void;
12
+ }
13
+ export interface UseBrandlabContactAttachmentsResult {
14
+ images: BrandlabContactAttachmentPreview[];
15
+ isDragging: boolean;
16
+ isProcessing: boolean;
17
+ errorMessage: string | null;
18
+ maxImages: number;
19
+ addFiles: (files: readonly File[]) => Promise<void>;
20
+ clearErrorMessage: () => void;
21
+ clearImages: () => void;
22
+ handleImageChange: (event: ChangeEvent<HTMLInputElement>) => Promise<void>;
23
+ handleDragLeave: (event: DragEvent) => void;
24
+ handleDragOver: (event: DragEvent) => void;
25
+ handleDrop: (event: DragEvent) => Promise<void>;
26
+ removeImage: (index: number) => void;
27
+ }
28
+ export declare function compressBrandlabContactImage(file: File): Promise<File>;
29
+ export declare function useBrandlabContactAttachments(options?: UseBrandlabContactAttachmentsOptions): UseBrandlabContactAttachmentsResult;
30
+ //# sourceMappingURL=attachments-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments-client.d.ts","sourceRoot":"","sources":["../../src/contact/attachments-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,KAAK,uBAAuB,EAC7B,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAGd,MAAM,WAAW,gCAAgC;IAC/C,IAAI,EAAE,IAAI,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oCAAoC;IACnD,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,CAAA;IACxC,eAAe,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED,MAAM,WAAW,mCAAmC;IAClD,MAAM,EAAE,gCAAgC,EAAE,CAAA;IAC1C,UAAU,EAAE,OAAO,CAAA;IACnB,YAAY,EAAE,OAAO,CAAA;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,WAAW,EAAE,MAAM,IAAI,CAAA;IACvB,iBAAiB,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1E,eAAe,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IAC3C,cAAc,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAA;IAC1C,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC;AAID,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B5E;AAWD,wBAAgB,6BAA6B,CAC3C,OAAO,GAAE,oCAAyC,GACjD,mCAAmC,CAqJrC"}
@@ -0,0 +1,149 @@
1
+ 'use client';
2
+ import { DEFAULT_CONTACT_ATTACHMENT_POLICY, contactAttachmentTypeLabel, resolveContactAttachmentType, validateContactAttachment, } from '@brandlab-digital/site-core/contact';
3
+ import { useCallback, useEffect, useRef, useState, } from 'react';
4
+ import { normalizeContactUploadFile } from './client.js';
5
+ const DEFAULT_COMPRESSED_IMAGE_SIZE_MB = 0.7;
6
+ export async function compressBrandlabContactImage(file) {
7
+ try {
8
+ const contentType = resolveContactAttachmentType(file.name, file.type);
9
+ if (!contentType)
10
+ return file;
11
+ const imported = await import('browser-image-compression');
12
+ const imageCompression = imported.default;
13
+ const processed = await imageCompression(file, {
14
+ maxSizeMB: DEFAULT_COMPRESSED_IMAGE_SIZE_MB,
15
+ maxWidthOrHeight: 1920,
16
+ useWebWorker: true,
17
+ fileType: contentType,
18
+ initialQuality: 0.7,
19
+ });
20
+ return normalizeContactUploadFile(file, processed);
21
+ }
22
+ catch {
23
+ return file;
24
+ }
25
+ }
26
+ function maximumImagesMessage(policy) {
27
+ return `You can add up to ${policy.maxFiles} images.`;
28
+ }
29
+ function maximumTotalSizeMessage(policy) {
30
+ const maximumMegabytes = Math.round((policy.maxTotalSizeBytes / 1_000_000) * 10) / 10;
31
+ return `Your images are too large. Please use fewer images or keep the total under ${maximumMegabytes} MB.`;
32
+ }
33
+ export function useBrandlabContactAttachments(options = {}) {
34
+ const policy = options.policy ?? DEFAULT_CONTACT_ATTACHMENT_POLICY;
35
+ const compressImage = options.compressImage ?? compressBrandlabContactImage;
36
+ const createObjectUrl = options.createObjectUrl ?? URL.createObjectURL;
37
+ const revokeObjectUrl = options.revokeObjectUrl ?? URL.revokeObjectURL;
38
+ const [images, setImages] = useState([]);
39
+ const [isDragging, setIsDragging] = useState(false);
40
+ const [isProcessing, setIsProcessing] = useState(false);
41
+ const [errorMessage, setErrorMessage] = useState(null);
42
+ const imagesRef = useRef([]);
43
+ const processingRef = useRef(false);
44
+ imagesRef.current = images;
45
+ useEffect(() => {
46
+ return () => {
47
+ imagesRef.current.forEach((image) => revokeObjectUrl(image.preview));
48
+ };
49
+ }, [revokeObjectUrl]);
50
+ const addFiles = useCallback(async (files) => {
51
+ if (files.length === 0 || processingRef.current)
52
+ return;
53
+ const availableSlots = policy.maxFiles - imagesRef.current.length;
54
+ if (availableSlots <= 0) {
55
+ setErrorMessage(maximumImagesMessage(policy));
56
+ return;
57
+ }
58
+ processingRef.current = true;
59
+ setIsProcessing(true);
60
+ setErrorMessage(null);
61
+ const prepared = [];
62
+ try {
63
+ const selectedFiles = files.slice(0, availableSlots);
64
+ for (const file of selectedFiles) {
65
+ if (!resolveContactAttachmentType(file.name, file.type, policy)) {
66
+ throw new Error(`Please upload ${contactAttachmentTypeLabel(policy)} images only.`);
67
+ }
68
+ const processed = await compressImage(file);
69
+ const validation = validateContactAttachment({ filename: processed.name, size: processed.size, type: processed.type }, policy);
70
+ if (!validation.ok)
71
+ throw new Error(validation.message);
72
+ prepared.push({
73
+ file: processed,
74
+ preview: createObjectUrl(processed),
75
+ });
76
+ }
77
+ const totalSize = [...imagesRef.current, ...prepared].reduce((total, image) => total + image.file.size, 0);
78
+ if (totalSize > policy.maxTotalSizeBytes) {
79
+ throw new Error(maximumTotalSizeMessage(policy));
80
+ }
81
+ const nextImages = [...imagesRef.current, ...prepared];
82
+ imagesRef.current = nextImages;
83
+ setImages(nextImages);
84
+ if (files.length > availableSlots) {
85
+ setErrorMessage(maximumImagesMessage(policy));
86
+ }
87
+ }
88
+ catch (error) {
89
+ prepared.forEach((image) => revokeObjectUrl(image.preview));
90
+ setErrorMessage(error instanceof Error
91
+ ? error.message
92
+ : 'We could not prepare those images. Please try again.');
93
+ }
94
+ finally {
95
+ processingRef.current = false;
96
+ setIsProcessing(false);
97
+ }
98
+ }, [compressImage, createObjectUrl, policy, revokeObjectUrl]);
99
+ const handleImageChange = useCallback(async (event) => {
100
+ const files = event.target.files ? Array.from(event.target.files) : [];
101
+ await addFiles(files);
102
+ event.target.value = '';
103
+ }, [addFiles]);
104
+ const handleDragOver = useCallback((event) => {
105
+ event.preventDefault();
106
+ setIsDragging(true);
107
+ }, []);
108
+ const handleDragLeave = useCallback((event) => {
109
+ event.preventDefault();
110
+ setIsDragging(false);
111
+ }, []);
112
+ const handleDrop = useCallback(async (event) => {
113
+ event.preventDefault();
114
+ setIsDragging(false);
115
+ await addFiles(Array.from(event.dataTransfer.files));
116
+ }, [addFiles]);
117
+ const removeImage = useCallback((index) => {
118
+ const removed = imagesRef.current[index];
119
+ if (!removed)
120
+ return;
121
+ revokeObjectUrl(removed.preview);
122
+ const nextImages = imagesRef.current.filter((_, imageIndex) => imageIndex !== index);
123
+ imagesRef.current = nextImages;
124
+ setImages(nextImages);
125
+ setErrorMessage(null);
126
+ }, [revokeObjectUrl]);
127
+ const clearImages = useCallback(() => {
128
+ imagesRef.current.forEach((image) => revokeObjectUrl(image.preview));
129
+ imagesRef.current = [];
130
+ setImages([]);
131
+ setErrorMessage(null);
132
+ }, [revokeObjectUrl]);
133
+ return {
134
+ images,
135
+ isDragging,
136
+ isProcessing,
137
+ errorMessage,
138
+ maxImages: policy.maxFiles,
139
+ addFiles,
140
+ clearErrorMessage: () => setErrorMessage(null),
141
+ clearImages,
142
+ handleImageChange,
143
+ handleDragLeave,
144
+ handleDragOver,
145
+ handleDrop,
146
+ removeImage,
147
+ };
148
+ }
149
+ //# sourceMappingURL=attachments-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attachments-client.js","sourceRoot":"","sources":["../../src/contact/attachments-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { compressBrandlabContactImage, useBrandlabContactAttachments, type BrandlabContactAttachmentPreview, type UseBrandlabContactAttachmentsOptions, type UseBrandlabContactAttachmentsResult, } from './attachments-client.js';
2
+ //# sourceMappingURL=client-entry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-entry.d.ts","sourceRoot":"","sources":["../../src/contact/client-entry.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,EAC7B,KAAK,gCAAgC,EACrC,KAAK,oCAAoC,EACzC,KAAK,mCAAmC,GACzC,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,3 @@
1
+ 'use client';
2
+ export { compressBrandlabContactImage, useBrandlabContactAttachments, } from './attachments-client.js';
3
+ //# sourceMappingURL=client-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-entry.js","sourceRoot":"","sources":["../../src/contact/client-entry.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,GAI9B,MAAM,yBAAyB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brandlab-digital/site-next",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/RomieDandan/brandlab.git",
@@ -18,7 +18,8 @@
18
18
  "typecheck": "tsc --noEmit -p tsconfig.json"
19
19
  },
20
20
  "dependencies": {
21
- "@brandlab-digital/site-core": "1.0.3",
21
+ "@brandlab-digital/site-core": "1.0.4",
22
+ "browser-image-compression": "2.0.2",
22
23
  "server-only": "0.0.1",
23
24
  "sharp": "0.35.3"
24
25
  },
@@ -47,6 +48,10 @@
47
48
  "types": "./dist/contact/index.d.ts",
48
49
  "import": "./dist/contact/index.js"
49
50
  },
51
+ "./contact/client": {
52
+ "types": "./dist/contact/client-entry.d.ts",
53
+ "import": "./dist/contact/client-entry.js"
54
+ },
50
55
  "./contact/server": {
51
56
  "types": "./dist/contact/server-entry.d.ts",
52
57
  "import": "./dist/contact/server-entry.js"