geoiq-frontend-ui-kit 2.0.2 → 2.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.
- package/dist/components/organisms/image-editor/components/line-session-bar.d.ts +20 -0
- package/dist/components/organisms/image-editor/components/line-session-bar.d.ts.map +1 -0
- package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts +9 -0
- package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts.map +1 -0
- package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/image-editor.types.d.ts +73 -0
- package/dist/components/organisms/image-editor/image-editor.types.d.ts.map +1 -1
- package/dist/components/organisms/image-editor/use-image-editor.d.ts.map +1 -1
- package/dist/components/ui/request-credits-view/component/request-credit-dialog.d.ts.map +1 -1
- package/dist/index.es100.js +147 -120
- package/dist/index.es100.js.map +1 -1
- package/dist/index.es101.js +16 -11
- package/dist/index.es101.js.map +1 -1
- package/dist/index.es102.js +7 -41
- package/dist/index.es102.js.map +1 -1
- package/dist/index.es103.js +21 -10
- package/dist/index.es103.js.map +1 -1
- package/dist/index.es104.js +7 -74
- package/dist/index.es104.js.map +1 -1
- package/dist/index.es105.js +177 -30
- package/dist/index.es105.js.map +1 -1
- package/dist/index.es106.js +45 -16
- package/dist/index.es106.js.map +1 -1
- package/dist/index.es107.js +42 -20
- package/dist/index.es107.js.map +1 -1
- package/dist/index.es108.js +22 -12
- package/dist/index.es108.js.map +1 -1
- package/dist/index.es109.js +122 -98
- package/dist/index.es109.js.map +1 -1
- package/dist/index.es11.js +1 -1
- package/dist/index.es110.js +33 -62
- package/dist/index.es110.js.map +1 -1
- package/dist/index.es111.js +60 -52
- package/dist/index.es111.js.map +1 -1
- package/dist/index.es112.js +10 -41
- package/dist/index.es112.js.map +1 -1
- package/dist/index.es113.js +21 -11
- package/dist/index.es113.js.map +1 -1
- package/dist/index.es114.js +42 -92
- package/dist/index.es114.js.map +1 -1
- package/dist/index.es115.js +37 -16
- package/dist/index.es115.js.map +1 -1
- package/dist/index.es116.js +12 -99
- package/dist/index.es116.js.map +1 -1
- package/dist/index.es117.js +92 -13
- package/dist/index.es117.js.map +1 -1
- package/dist/index.es118.js +13 -101
- package/dist/index.es118.js.map +1 -1
- package/dist/index.es119.js +71 -20
- package/dist/index.es119.js.map +1 -1
- package/dist/index.es12.js +1 -1
- package/dist/index.es120.js +34 -25
- package/dist/index.es120.js.map +1 -1
- package/dist/index.es121.js +20 -22
- package/dist/index.es121.js.map +1 -1
- package/dist/index.es122.js +16 -45
- package/dist/index.es122.js.map +1 -1
- package/dist/index.es123.js +11 -34
- package/dist/index.es123.js.map +1 -1
- package/dist/index.es124.js +96 -61
- package/dist/index.es124.js.map +1 -1
- package/dist/index.es125.js +57 -174
- package/dist/index.es125.js.map +1 -1
- package/dist/index.es126.js +50 -17
- package/dist/index.es126.js.map +1 -1
- package/dist/index.es127.js +2 -2
- package/dist/index.es128.js +2 -2
- package/dist/index.es129.js +1 -1
- package/dist/index.es130.js +1 -1
- package/dist/index.es131.js +2 -2
- package/dist/index.es132.js +35 -38
- package/dist/index.es132.js.map +1 -1
- package/dist/index.es133.js +41 -7
- package/dist/index.es133.js.map +1 -1
- package/dist/index.es134.js +88 -7
- package/dist/index.es134.js.map +1 -1
- package/dist/index.es135.js +14 -34
- package/dist/index.es135.js.map +1 -1
- package/dist/index.es136.js +269 -35
- package/dist/index.es136.js.map +1 -1
- package/dist/index.es137.js +7 -2
- package/dist/index.es137.js.map +1 -1
- package/dist/index.es138.js +23 -25
- package/dist/index.es138.js.map +1 -1
- package/dist/index.es139.js +169 -15
- package/dist/index.es139.js.map +1 -1
- package/dist/index.es140.js +82 -7
- package/dist/index.es140.js.map +1 -1
- package/dist/index.es141.js +73 -21
- package/dist/index.es141.js.map +1 -1
- package/dist/index.es142.js +3 -168
- package/dist/index.es142.js.map +1 -1
- package/dist/index.es143.js +56 -82
- package/dist/index.es143.js.map +1 -1
- package/dist/index.es144.js +119 -4
- package/dist/index.es144.js.map +1 -1
- package/dist/index.es145.js +405 -56
- package/dist/index.es145.js.map +1 -1
- package/dist/index.es146.js +25 -110
- package/dist/index.es146.js.map +1 -1
- package/dist/index.es147.js +60 -314
- package/dist/index.es147.js.map +1 -1
- package/dist/index.es148.js +29 -24
- package/dist/index.es148.js.map +1 -1
- package/dist/index.es149.js +21 -64
- package/dist/index.es149.js.map +1 -1
- package/dist/index.es150.js +36 -30
- package/dist/index.es150.js.map +1 -1
- package/dist/index.es151.js +211 -24
- package/dist/index.es151.js.map +1 -1
- package/dist/index.es152.js +141 -35
- package/dist/index.es152.js.map +1 -1
- package/dist/index.es153.js +141 -140
- package/dist/index.es153.js.map +1 -1
- package/dist/index.es154.js +45 -142
- package/dist/index.es154.js.map +1 -1
- package/dist/index.es155.js +353 -45
- package/dist/index.es155.js.map +1 -1
- package/dist/index.es156.js +14 -10
- package/dist/index.es156.js.map +1 -1
- package/dist/index.es157.js +10 -42
- package/dist/index.es157.js.map +1 -1
- package/dist/index.es158.js +44 -5
- package/dist/index.es158.js.map +1 -1
- package/dist/index.es159.js +5 -11
- package/dist/index.es159.js.map +1 -1
- package/dist/index.es16.js +1 -1
- package/dist/index.es160.js +10 -10
- package/dist/index.es160.js.map +1 -1
- package/dist/index.es161.js +11 -2
- package/dist/index.es161.js.map +1 -1
- package/dist/index.es162.js +2 -91
- package/dist/index.es162.js.map +1 -1
- package/dist/index.es163.js +2 -213
- package/dist/index.es163.js.map +1 -1
- package/dist/index.es164.js +23 -52
- package/dist/index.es164.js.map +1 -1
- package/dist/index.es165.js +88 -33
- package/dist/index.es165.js.map +1 -1
- package/dist/index.es166.js +52 -31
- package/dist/index.es166.js.map +1 -1
- package/dist/index.es167.js +32 -29
- package/dist/index.es167.js.map +1 -1
- package/dist/index.es168.js +26 -84
- package/dist/index.es168.js.map +1 -1
- package/dist/index.es169.js +27 -111
- package/dist/index.es169.js.map +1 -1
- package/dist/index.es170.js +97 -285
- package/dist/index.es170.js.map +1 -1
- package/dist/index.es171.js +251 -30
- package/dist/index.es171.js.map +1 -1
- package/dist/index.es172.js +63 -11
- package/dist/index.es172.js.map +1 -1
- package/dist/index.es173.js +284 -82
- package/dist/index.es173.js.map +1 -1
- package/dist/index.es174.js +29 -70
- package/dist/index.es174.js.map +1 -1
- package/dist/index.es175.js +10 -114
- package/dist/index.es175.js.map +1 -1
- package/dist/index.es176.js +23 -106
- package/dist/index.es176.js.map +1 -1
- package/dist/index.es177.js +19 -82
- package/dist/index.es177.js.map +1 -1
- package/dist/index.es178.js +63 -109
- package/dist/index.es178.js.map +1 -1
- package/dist/index.es179.js +63 -117
- package/dist/index.es179.js.map +1 -1
- package/dist/index.es180.js +112 -23
- package/dist/index.es180.js.map +1 -1
- package/dist/index.es181.js +103 -18
- package/dist/index.es181.js.map +1 -1
- package/dist/index.es182.js +86 -5
- package/dist/index.es182.js.map +1 -1
- package/dist/index.es183.js +133 -0
- package/dist/index.es183.js.map +1 -0
- package/dist/index.es184.js +133 -0
- package/dist/index.es184.js.map +1 -0
- package/dist/index.es185.js +9 -0
- package/dist/index.es185.js.map +1 -0
- package/dist/index.es19.js +1 -1
- package/dist/index.es2.js +21 -21
- package/dist/index.es2.js.map +1 -1
- package/dist/index.es20.js +1 -1
- package/dist/index.es21.js +3 -3
- package/dist/index.es22.js +1 -1
- package/dist/index.es25.js +1 -1
- package/dist/index.es27.js +1 -1
- package/dist/index.es28.js +2 -2
- package/dist/index.es30.js +1 -1
- package/dist/index.es32.js +1 -1
- package/dist/index.es33.js +1 -1
- package/dist/index.es45.js +48 -46
- package/dist/index.es45.js.map +1 -1
- package/dist/index.es46.js +2 -2
- package/dist/index.es47.js +1 -1
- package/dist/index.es48.js +1 -1
- package/dist/index.es53.js +1 -1
- package/dist/index.es54.js +1 -1
- package/dist/index.es57.js +1 -1
- package/dist/index.es59.js +1 -1
- package/dist/index.es67.js +2 -2
- package/dist/index.es68.js +1 -1
- package/dist/index.es71.js +1 -1
- package/dist/index.es72.js +7 -7
- package/dist/index.es73.js +2 -2
- package/dist/index.es85.js +1 -1
- package/dist/index.es97.js +16 -11
- package/dist/index.es97.js.map +1 -1
- package/dist/index.es98.js +89 -262
- package/dist/index.es98.js.map +1 -1
- package/dist/index.es99.js +13 -87
- package/dist/index.es99.js.map +1 -1
- package/dist/styles.css +55 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es183.js","sources":["../src/components/ui/form-renderer/components/form-fields/components/taggable-multi-image-picker/index.tsx"],"sourcesContent":["import { Typography } from '@/components/atoms/typography'\nimport { useToast } from '@/components/molecules/toast'\nimport { Spinner } from '@/components/unstyled/spinner'\nimport { SingleCombobox } from '@/components/molecules/single-combobox'\n\nimport { Upload, X, Pen } from 'lucide-react'\nimport React, { useRef, useState } from 'react'\nimport { useFormValues } from '../../../../context/form-values'\nimport { AssetValue, TaggableAssetValue } from '../../../../form.types'\n\ninterface TaggableMultiImagePickerProps {\n id: string\n onChange: (data: TaggableAssetValue[]) => void\n value?: TaggableAssetValue[]\n accept?: string\n error?: string\n maxImages?: number\n options: string[]\n}\n\nconst TaggableMultiImagePicker: React.FC<TaggableMultiImagePickerProps> = ({\n id,\n onChange,\n value = [],\n accept = 'image/*',\n error,\n maxImages = 20,\n options,\n}) => {\n const { onAssetUpload, onToggleImageEditor } = useFormValues()\n const { toast } = useToast()\n\n const [isLoading, setIsLoading] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleImageSelect = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (!files?.length || isLoading) return\n\n if (value.length + files.length > maxImages) {\n toast({\n title: 'Alert!',\n description: `Maximum ${maxImages} images allowed.`,\n icon: 'warning',\n })\n return\n }\n\n if (onAssetUpload) {\n setIsLoading(true)\n\n try {\n const uploads = Array.from(files).map((file) => onAssetUpload(file))\n const results = await Promise.all(uploads)\n\n const TaggedResults = results.map((result) => ({ ...result, tag: '' }))\n\n onChange([...value, ...TaggedResults])\n\n toast({\n title: 'Alert!',\n description: `${files.length} ${files.length === 1 ? 'image' : 'images'} uploaded successfully.`,\n icon: 'success',\n })\n } catch (error) {\n toast({\n title: 'Alert!',\n description: `Error uploading images`,\n icon: 'warning',\n })\n } finally {\n setIsLoading(false)\n // Reset the file input so the same files can be selected again\n if (fileInputRef.current) {\n fileInputRef.current.value = ''\n }\n }\n }\n }\n\n const handleClick = () => {\n if (!isLoading && value.length < maxImages) {\n fileInputRef.current?.click()\n } else if (value.length >= maxImages) {\n toast({\n title: 'Alert!',\n description: `Maximum ${maxImages} images allowed.`,\n icon: 'warning',\n })\n }\n }\n\n const removeImage = (index: number) => {\n if (!isLoading) {\n const newImages = [...value]\n newImages.splice(index, 1)\n onChange(newImages)\n }\n }\n\n const onReplaceImage = (data: AssetValue, index: number) => {\n const newValue = [...value]\n const existingImage = newValue[index]\n\n newValue.splice(index, 1, { ...existingImage, ...data })\n onChange(newValue)\n }\n\n return (\n <div className=\"relative\">\n {isLoading && (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-white bg-opacity-70\">\n <Spinner className=\"w-8 h-8 text-primary-1\" />\n </div>\n )}\n <div className=\"relative p-8 border-2 border-dashed rounded-lg border-primary-1 bg-primary-1\">\n <button\n className=\"w-full\"\n onClick={handleClick}\n type=\"button\"\n disabled={isLoading || value.length >= maxImages}\n >\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <div className=\"bg-gray-100 rounded-full\">\n <Upload className=\"w-6 h-6 text-gray-500\" />\n </div>\n <Typography variant=\"body1\" className=\"text-gray-600\">\n {isLoading\n ? 'Uploading...'\n : value.length >= maxImages\n ? `Maximum ${maxImages} images reached`\n : 'Add Images'}\n </Typography>\n {value.length > 0 && (\n <Typography variant=\"body1\" className=\"text-gray-500\">\n {value.length} of {maxImages} images\n </Typography>\n )}\n </div>\n </button>\n <input\n ref={fileInputRef}\n id={`${id}-gallery`}\n type=\"file\"\n accept={accept}\n disabled={isLoading || value.length >= maxImages}\n onChange={handleImageSelect}\n className=\"hidden\"\n multiple\n />\n\n {error && (\n <Typography variant=\"body1\" className=\"mt-1 text-danger-1\">\n {error}\n </Typography>\n )}\n </div>\n\n {value.length > 0 && (\n <div className=\"grid grid-cols-2 gap-4 mt-4 sm:grid-cols-3 md:grid-cols-4\">\n {value.map((image, index) => (\n <div key={image.private_url} className=\"flex flex-col gap-2\">\n <div key={index} className=\"relative flex rounded\">\n <img\n src={image.public_url}\n alt={`Preview ${index + 1}`}\n className=\"object-cover w-full h-24 rounded\"\n />\n {onToggleImageEditor && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.currentTarget.blur()\n onToggleImageEditor({\n imageUrl: image.public_url,\n index,\n onReplaceImage,\n })\n }}\n className=\"absolute p-1 text-white bg-white rounded-full left-2 top-2 opacity-70 hover:opacity-100\"\n >\n <Pen size={16} className=\"stroke-danger\" />\n </button>\n )}\n <button\n onClick={() => removeImage(index)}\n className=\"absolute p-1 text-white bg-white rounded-full right-2 top-2 opacity-70 hover:opacity-100\"\n type=\"button\"\n disabled={isLoading}\n >\n <X size={16} className=\"stroke-danger\" />\n </button>\n </div>\n <SingleCombobox\n options={options.map((option) => ({\n id: option,\n name: option,\n }))}\n value={image.tag}\n onChange={(data) => {\n const newImages = [...value]\n newImages[index].tag = data\n onChange(newImages)\n }}\n placeholder={'Select '}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport { TaggableMultiImagePicker }\n"],"names":["TaggableMultiImagePicker","id","onChange","value","accept","error","maxImages","options","onAssetUpload","onToggleImageEditor","useFormValues","toast","useToast","isLoading","setIsLoading","useState","fileInputRef","useRef","handleImageSelect","e","files","uploads","file","TaggedResults","result","handleClick","removeImage","index","newImages","onReplaceImage","data","newValue","existingImage","React","Spinner","Upload","Typography","image","Pen","X","SingleCombobox","option"],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as e from "react";
|
|
2
|
+
import { useState as $, useRef as T } from "react";
|
|
3
|
+
import { Input as x } from "./index.es11.js";
|
|
4
|
+
import { Typography as g } from "./index.es19.js";
|
|
5
|
+
import { Spinner as R } from "./index.es64.js";
|
|
6
|
+
import { Upload as U, Pen as I, X as z } from "lucide-react";
|
|
7
|
+
import { useFormValues as C } from "./index.es161.js";
|
|
8
|
+
import { useToast as M } from "./index.es87.js";
|
|
9
|
+
const q = ({
|
|
10
|
+
id: p,
|
|
11
|
+
onChange: c,
|
|
12
|
+
value: r = [],
|
|
13
|
+
accept: E = "image/*",
|
|
14
|
+
error: u,
|
|
15
|
+
maxImages: l = 20,
|
|
16
|
+
placeholder: f
|
|
17
|
+
}) => {
|
|
18
|
+
const { onAssetUpload: h, onToggleImageEditor: y } = C(), { toast: o } = M(), [n, b] = $(!1), m = T(null), N = async (a) => {
|
|
19
|
+
const t = a.target.files;
|
|
20
|
+
if (!(!t?.length || n)) {
|
|
21
|
+
if (r.length + t.length > l) {
|
|
22
|
+
o({
|
|
23
|
+
title: "Alert!",
|
|
24
|
+
description: `Maximum ${l} images allowed.`,
|
|
25
|
+
icon: "warning"
|
|
26
|
+
});
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (h) {
|
|
30
|
+
b(!0);
|
|
31
|
+
try {
|
|
32
|
+
const s = Array.from(t).map((d) => h(d)), A = (await Promise.all(s)).map((d) => ({ ...d, tag: "" }));
|
|
33
|
+
c([...r, ...A]), o({
|
|
34
|
+
title: "Alert!",
|
|
35
|
+
description: `${t.length} ${t.length === 1 ? "image" : "images"} uploaded successfully.`,
|
|
36
|
+
icon: "success"
|
|
37
|
+
});
|
|
38
|
+
} catch {
|
|
39
|
+
o({
|
|
40
|
+
title: "Alert!",
|
|
41
|
+
description: "Error uploading images",
|
|
42
|
+
icon: "warning"
|
|
43
|
+
});
|
|
44
|
+
} finally {
|
|
45
|
+
b(!1), m.current && (m.current.value = "");
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}, w = () => {
|
|
50
|
+
!n && r.length < l ? m.current?.click() : r.length >= l && o({
|
|
51
|
+
title: "Alert!",
|
|
52
|
+
description: `Maximum ${l} images allowed.`,
|
|
53
|
+
icon: "warning"
|
|
54
|
+
});
|
|
55
|
+
}, v = (a) => {
|
|
56
|
+
if (!n) {
|
|
57
|
+
const t = [...r];
|
|
58
|
+
t.splice(a, 1), c(t);
|
|
59
|
+
}
|
|
60
|
+
}, k = (a, t) => {
|
|
61
|
+
const s = [...r], i = s[t];
|
|
62
|
+
s.splice(t, 1, { ...i, ...a }), c(s);
|
|
63
|
+
};
|
|
64
|
+
return /* @__PURE__ */ e.createElement("div", { className: "relative" }, n && /* @__PURE__ */ e.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-white bg-opacity-70" }, /* @__PURE__ */ e.createElement(R, { className: "w-8 h-8 text-primary-1" })), /* @__PURE__ */ e.createElement("div", { className: "relative p-8 border-2 border-dashed rounded-lg border-primary-1 bg-primary-1" }, /* @__PURE__ */ e.createElement(
|
|
65
|
+
"button",
|
|
66
|
+
{
|
|
67
|
+
className: "w-full",
|
|
68
|
+
onClick: w,
|
|
69
|
+
type: "button",
|
|
70
|
+
disabled: n || r.length >= l
|
|
71
|
+
},
|
|
72
|
+
/* @__PURE__ */ e.createElement("div", { className: "flex flex-col items-center gap-3 text-center" }, /* @__PURE__ */ e.createElement("div", { className: "bg-gray-100 rounded-full" }, /* @__PURE__ */ e.createElement(U, { className: "w-6 h-6 text-gray-500" })), /* @__PURE__ */ e.createElement(g, { variant: "body1", className: "text-gray-600" }, n ? "Uploading..." : r.length >= l ? `Maximum ${l} images reached` : "Add Images"), r.length > 0 && /* @__PURE__ */ e.createElement(g, { variant: "body1", className: "text-gray-500" }, r.length, " of ", l, " images"))
|
|
73
|
+
), /* @__PURE__ */ e.createElement(
|
|
74
|
+
"input",
|
|
75
|
+
{
|
|
76
|
+
ref: m,
|
|
77
|
+
id: `${p}-gallery`,
|
|
78
|
+
type: "file",
|
|
79
|
+
accept: E,
|
|
80
|
+
disabled: n || r.length >= l,
|
|
81
|
+
onChange: N,
|
|
82
|
+
className: "hidden",
|
|
83
|
+
multiple: !0
|
|
84
|
+
}
|
|
85
|
+
), u && /* @__PURE__ */ e.createElement(g, { variant: "body1", className: "mt-1 text-danger-1" }, u)), r.length > 0 && /* @__PURE__ */ e.createElement("div", { className: "grid grid-cols-2 gap-4 mt-4 sm:grid-cols-3 md:grid-cols-4" }, r.map((a, t) => /* @__PURE__ */ e.createElement("div", { key: a.private_url, className: "flex flex-col gap-2" }, /* @__PURE__ */ e.createElement("div", { key: t, className: "relative flex rounded" }, /* @__PURE__ */ e.createElement(
|
|
86
|
+
"img",
|
|
87
|
+
{
|
|
88
|
+
src: a.public_url,
|
|
89
|
+
alt: `Preview ${t + 1}`,
|
|
90
|
+
className: "object-cover w-full h-24 rounded"
|
|
91
|
+
}
|
|
92
|
+
), y && /* @__PURE__ */ e.createElement(
|
|
93
|
+
"button",
|
|
94
|
+
{
|
|
95
|
+
type: "button",
|
|
96
|
+
onClick: (s) => {
|
|
97
|
+
s.currentTarget.blur(), y({
|
|
98
|
+
imageUrl: a.public_url,
|
|
99
|
+
index: t,
|
|
100
|
+
onReplaceImage: k
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
className: "absolute p-1 text-white bg-white rounded-full left-2 top-2 opacity-70 hover:opacity-100"
|
|
104
|
+
},
|
|
105
|
+
/* @__PURE__ */ e.createElement(I, { size: 16, className: "stroke-danger" })
|
|
106
|
+
), /* @__PURE__ */ e.createElement(
|
|
107
|
+
"button",
|
|
108
|
+
{
|
|
109
|
+
onClick: () => v(t),
|
|
110
|
+
className: "absolute p-1 text-white bg-white rounded-full right-2 top-2 opacity-70 hover:opacity-100",
|
|
111
|
+
type: "button",
|
|
112
|
+
disabled: n
|
|
113
|
+
},
|
|
114
|
+
/* @__PURE__ */ e.createElement(z, { size: 16, className: "stroke-danger" })
|
|
115
|
+
)), /* @__PURE__ */ e.createElement(
|
|
116
|
+
x,
|
|
117
|
+
{
|
|
118
|
+
id: p + t,
|
|
119
|
+
type: "text",
|
|
120
|
+
placeholder: f || "",
|
|
121
|
+
value: a.tag,
|
|
122
|
+
required: !0,
|
|
123
|
+
onChange: (s) => {
|
|
124
|
+
const i = [...r];
|
|
125
|
+
i[t].tag = s.target.value, c(i);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
)))));
|
|
129
|
+
};
|
|
130
|
+
export {
|
|
131
|
+
q as TaggableImageUploadFieldWithInput
|
|
132
|
+
};
|
|
133
|
+
//# sourceMappingURL=index.es184.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es184.js","sources":["../src/components/ui/form-renderer/components/form-fields/components/taggable-multi-image-picker-with-input/index.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { Input } from '@/components/atoms/input'\nimport { Typography } from '@/components/atoms/typography'\nimport { useToast } from '@/components/molecules/toast'\nimport { useFormValues } from '@/components/ui/form-renderer/context/form-values'\nimport {\n AssetValue,\n TaggableAssetValue,\n} from '@/components/ui/form-renderer/form.types'\nimport { Spinner } from '@/components/unstyled/spinner'\nimport { Upload, X, Pen } from 'lucide-react'\nimport { useRef, useState } from 'react'\n\ninterface TaggableImageUploadFieldWithInputProps {\n id: string\n onChange: (data: TaggableAssetValue[]) => void\n value?: TaggableAssetValue[]\n accept?: string\n error?: string\n maxImages?: number\n placeholder?: string\n}\n\nconst TaggableImageUploadFieldWithInput: React.FC<\n TaggableImageUploadFieldWithInputProps\n> = ({\n id,\n onChange,\n value = [],\n accept = 'image/*',\n error,\n maxImages = 20,\n placeholder,\n}) => {\n const { onAssetUpload, onToggleImageEditor } = useFormValues()\n const { toast } = useToast()\n\n const [isLoading, setIsLoading] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleImageSelect = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (!files?.length || isLoading) return\n\n if (value.length + files.length > maxImages) {\n toast({\n title: 'Alert!',\n description: `Maximum ${maxImages} images allowed.`,\n icon: 'warning',\n })\n return\n }\n\n if (onAssetUpload) {\n setIsLoading(true)\n\n try {\n const uploads = Array.from(files).map((file) => onAssetUpload(file))\n const results = await Promise.all(uploads)\n\n const TaggedResults = results.map((result) => ({ ...result, tag: '' }))\n\n onChange([...value, ...TaggedResults])\n\n toast({\n title: 'Alert!',\n description: `${files.length} ${files.length === 1 ? 'image' : 'images'} uploaded successfully.`,\n icon: 'success',\n })\n } catch (error) {\n toast({\n title: 'Alert!',\n description: `Error uploading images`,\n icon: 'warning',\n })\n } finally {\n setIsLoading(false)\n // Reset the file input so the same files can be selected again\n if (fileInputRef.current) {\n fileInputRef.current.value = ''\n }\n }\n }\n }\n\n const handleClick = () => {\n if (!isLoading && value.length < maxImages) {\n fileInputRef.current?.click()\n } else if (value.length >= maxImages) {\n toast({\n title: 'Alert!',\n description: `Maximum ${maxImages} images allowed.`,\n icon: 'warning',\n })\n }\n }\n\n const removeImage = (index: number) => {\n if (!isLoading) {\n const newImages = [...value]\n newImages.splice(index, 1)\n onChange(newImages)\n }\n }\n\n const onReplaceImage = (data: AssetValue, index: number) => {\n const newValue = [...value]\n const existingImage = newValue[index]\n\n newValue.splice(index, 1, { ...existingImage, ...data })\n onChange(newValue)\n }\n return (\n <div className=\"relative\">\n {isLoading && (\n <div className=\"absolute inset-0 z-10 flex items-center justify-center bg-white bg-opacity-70\">\n <Spinner className=\"w-8 h-8 text-primary-1\" />\n </div>\n )}\n <div className=\"relative p-8 border-2 border-dashed rounded-lg border-primary-1 bg-primary-1\">\n <button\n className=\"w-full\"\n onClick={handleClick}\n type=\"button\"\n disabled={isLoading || value.length >= maxImages}\n >\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <div className=\"bg-gray-100 rounded-full\">\n <Upload className=\"w-6 h-6 text-gray-500\" />\n </div>\n <Typography variant=\"body1\" className=\"text-gray-600\">\n {isLoading\n ? 'Uploading...'\n : value.length >= maxImages\n ? `Maximum ${maxImages} images reached`\n : 'Add Images'}\n </Typography>\n {value.length > 0 && (\n <Typography variant=\"body1\" className=\"text-gray-500\">\n {value.length} of {maxImages} images\n </Typography>\n )}\n </div>\n </button>\n <input\n ref={fileInputRef}\n id={`${id}-gallery`}\n type=\"file\"\n accept={accept}\n disabled={isLoading || value.length >= maxImages}\n onChange={handleImageSelect}\n className=\"hidden\"\n multiple\n />\n\n {error && (\n <Typography variant=\"body1\" className=\"mt-1 text-danger-1\">\n {error}\n </Typography>\n )}\n </div>\n\n {value.length > 0 && (\n <div className=\"grid grid-cols-2 gap-4 mt-4 sm:grid-cols-3 md:grid-cols-4\">\n {value.map((image, index) => (\n <div key={image.private_url} className=\"flex flex-col gap-2\">\n <div key={index} className=\"relative flex rounded\">\n <img\n src={image.public_url}\n alt={`Preview ${index + 1}`}\n className=\"object-cover w-full h-24 rounded\"\n />\n {onToggleImageEditor && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.currentTarget.blur()\n onToggleImageEditor({\n imageUrl: image.public_url,\n index,\n onReplaceImage,\n })\n }}\n className=\"absolute p-1 text-white bg-white rounded-full left-2 top-2 opacity-70 hover:opacity-100\"\n >\n <Pen size={16} className=\"stroke-danger\" />\n </button>\n )}\n <button\n onClick={() => removeImage(index)}\n className=\"absolute p-1 text-white bg-white rounded-full right-2 top-2 opacity-70 hover:opacity-100\"\n type=\"button\"\n disabled={isLoading}\n >\n <X size={16} className=\"stroke-danger\" />\n </button>\n </div>\n <Input\n id={id + index}\n type=\"text\"\n placeholder={placeholder ? placeholder : ''}\n value={image.tag}\n required={true}\n onChange={(e) => {\n const newImages = [...value]\n newImages[index].tag = e.target.value\n onChange(newImages)\n }}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport { TaggableImageUploadFieldWithInput }\n"],"names":["TaggableImageUploadFieldWithInput","id","onChange","value","accept","error","maxImages","placeholder","onAssetUpload","onToggleImageEditor","useFormValues","toast","useToast","isLoading","setIsLoading","useState","fileInputRef","useRef","handleImageSelect","e","files","uploads","file","TaggedResults","result","handleClick","removeImage","index","newImages","onReplaceImage","data","newValue","existingImage","React","Spinner","Upload","Typography","image","Pen","X","Input"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.es185.js","sources":["../src/components/organisms/navbar/components/notification-panel/components/notification-card/notification.utils.ts"],"sourcesContent":["import { format } from 'date-fns'\n\nconst convertEpochTime = (epochTime: number) => {\n const date = new Date(epochTime * 1000)\n return format(date, 'dd MMM yyyy, hh:mm a')\n}\n\nexport { convertEpochTime }\n"],"names":["convertEpochTime","epochTime","date","format"],"mappings":";AAEA,MAAMA,IAAmB,CAACC,MAAsB;AAC9C,QAAMC,IAAO,IAAI,KAAKD,IAAY,GAAI;AACtC,SAAOE,EAAOD,GAAM,sBAAsB;AAC5C;"}
|
package/dist/index.es19.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as o from "react";
|
|
2
2
|
import { cn as n } from "./index.es89.js";
|
|
3
3
|
import { TypographyVariants as y } from "./index.es85.js";
|
|
4
|
-
import { variantElementMap as i, defaultTypographyVariant as c } from "./index.
|
|
4
|
+
import { variantElementMap as i, defaultTypographyVariant as c } from "./index.es108.js";
|
|
5
5
|
const f = o.forwardRef(({ className: t, variant: r = c, id: e, ...a }, p) => {
|
|
6
6
|
const m = i[r];
|
|
7
7
|
return /* @__PURE__ */ o.createElement(
|
package/dist/index.es2.js
CHANGED
|
@@ -4,51 +4,51 @@ import { Typography as f } from "./index.es19.js";
|
|
|
4
4
|
import { Button as p } from "./index.es9.js";
|
|
5
5
|
import { Input as w } from "./index.es11.js";
|
|
6
6
|
const j = ["5", "10", "20", "50", ">50"], T = ({
|
|
7
|
-
open:
|
|
7
|
+
open: c,
|
|
8
8
|
onClose: _,
|
|
9
9
|
onRequestCredits: g,
|
|
10
|
-
onProceedToPayment:
|
|
10
|
+
onProceedToPayment: N,
|
|
11
11
|
dialogClassName: k,
|
|
12
|
-
buyCreditsOptions:
|
|
12
|
+
buyCreditsOptions: E = j,
|
|
13
13
|
minimumCreditsToBuy: v = 5,
|
|
14
14
|
requestOnly: D = !1
|
|
15
15
|
}) => {
|
|
16
|
-
const [a, l] = h(""), [
|
|
16
|
+
const [a, l] = h(""), [s, m] = h(""), [o, i] = h(""), x = E.map((e) => e.startsWith(">") ? Number(e.replace(">", "")) : Number(e)), O = x.length ? Math.max(...x) : 50, b = a.startsWith(">") || Number(a) > O, r = D || b, u = a && !r && Number(a) < v ? `Minimum number of credits is ${v}` : "";
|
|
17
17
|
C(() => {
|
|
18
|
-
if (
|
|
19
|
-
const e = P(
|
|
18
|
+
if (r) {
|
|
19
|
+
const e = P(s);
|
|
20
20
|
i(e);
|
|
21
21
|
} else
|
|
22
22
|
i("");
|
|
23
|
-
}, [
|
|
23
|
+
}, [s, r]);
|
|
24
24
|
const P = (e) => {
|
|
25
25
|
if (!e) return "";
|
|
26
26
|
const n = e.startsWith("+91") ? e.substring(3) : e;
|
|
27
27
|
return /^[6-9]\d{9}$/.test(n) ? "" : "Number should start with 6-9 and be 10 digits";
|
|
28
28
|
}, W = (e) => {
|
|
29
29
|
const n = e.target.value.replace(/\D/g, "");
|
|
30
|
-
|
|
30
|
+
m(n);
|
|
31
31
|
}, q = (e) => {
|
|
32
32
|
const n = e.target.value.replace(/\D/g, "");
|
|
33
33
|
l(n);
|
|
34
34
|
}, S = () => {
|
|
35
35
|
const e = a.startsWith(">") ? a.replace(">", "") + "+" : a;
|
|
36
|
-
|
|
36
|
+
r ? g(e, s) : N ? N(e, s) : g(e, s), d();
|
|
37
37
|
}, d = () => {
|
|
38
38
|
_(), setTimeout(() => {
|
|
39
|
-
|
|
39
|
+
m(""), i(""), l("");
|
|
40
40
|
}, 100);
|
|
41
41
|
};
|
|
42
42
|
C(() => {
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
c || setTimeout(() => {
|
|
44
|
+
m(""), i(""), l("");
|
|
45
45
|
}, 100);
|
|
46
|
-
}, [
|
|
47
|
-
const $ =
|
|
46
|
+
}, [c]);
|
|
47
|
+
const $ = r ? `Request ${a}` : `Proceed to Payment ${a} `, M = !a || Number(a) <= 0 || !!u || r && (!!o || !s), y = (e) => e.startsWith(">") ? b : e === a;
|
|
48
48
|
return /* @__PURE__ */ t.createElement(
|
|
49
49
|
R,
|
|
50
50
|
{
|
|
51
|
-
open:
|
|
51
|
+
open: c,
|
|
52
52
|
onOpenChange: d,
|
|
53
53
|
onOpenAutoFocus: (e) => e.preventDefault(),
|
|
54
54
|
trigger: null,
|
|
@@ -60,7 +60,7 @@ const j = ["5", "10", "20", "50", ">50"], T = ({
|
|
|
60
60
|
alt: "lock",
|
|
61
61
|
className: k
|
|
62
62
|
}
|
|
63
|
-
)), /* @__PURE__ */ t.createElement("div", { className: "px-4 py-2 w-72 md:w-[400px]" }, /* @__PURE__ */ t.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ t.createElement(f, { variant: "h3", className: "text-light-2" }, "How many credits do you need?"), /* @__PURE__ */ t.createElement(f, { variant: "body4", className: "text-light-4" }, /* @__PURE__ */ t.createElement("span", { className: "underline" }, "Note:"), " One credit is needed to unlock a site report.", " ",
|
|
63
|
+
)), /* @__PURE__ */ t.createElement("div", { className: "px-4 py-2 w-72 md:w-[400px]" }, /* @__PURE__ */ t.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ t.createElement(f, { variant: "h3", className: "text-light-2" }, "How many credits do you need?"), /* @__PURE__ */ t.createElement(f, { variant: "body4", className: "text-light-4" }, /* @__PURE__ */ t.createElement("span", { className: "underline" }, "Note:"), " One credit is needed to unlock a site report.", " ", r ? " Please provide your phone number to make a request" : "")), /* @__PURE__ */ t.createElement("div", { className: "mt-3" }, /* @__PURE__ */ t.createElement(
|
|
64
64
|
w,
|
|
65
65
|
{
|
|
66
66
|
id: "creditValue",
|
|
@@ -73,7 +73,7 @@ const j = ["5", "10", "20", "50", ">50"], T = ({
|
|
|
73
73
|
isError: !!u,
|
|
74
74
|
message: u
|
|
75
75
|
}
|
|
76
|
-
)), /* @__PURE__ */ t.createElement("div", { className: "flex flex-row gap-2 mt-3" },
|
|
76
|
+
)), /* @__PURE__ */ t.createElement("div", { className: "flex flex-row gap-2 mt-3" }, E.map((e) => /* @__PURE__ */ t.createElement(
|
|
77
77
|
p,
|
|
78
78
|
{
|
|
79
79
|
variant: y(e) ? "primary" : "secondary",
|
|
@@ -83,18 +83,18 @@ const j = ["5", "10", "20", "50", ">50"], T = ({
|
|
|
83
83
|
onClick: () => l(e)
|
|
84
84
|
},
|
|
85
85
|
e
|
|
86
|
-
))),
|
|
86
|
+
))), r && /* @__PURE__ */ t.createElement("div", { className: "flex flex-col mt-4" }, /* @__PURE__ */ t.createElement(f, { className: "mb-1 text-sm font-medium text-light-2" }, "Phone Number *"), /* @__PURE__ */ t.createElement(
|
|
87
87
|
w,
|
|
88
88
|
{
|
|
89
89
|
id: "phoneNumber",
|
|
90
90
|
type: "text",
|
|
91
|
-
value:
|
|
91
|
+
value: s,
|
|
92
92
|
onChange: W,
|
|
93
93
|
className: "h-10",
|
|
94
94
|
placeholder: "Enter phone number",
|
|
95
95
|
maxLength: 10,
|
|
96
|
-
isError: !!
|
|
97
|
-
message:
|
|
96
|
+
isError: !!o,
|
|
97
|
+
message: o
|
|
98
98
|
}
|
|
99
99
|
)))),
|
|
100
100
|
footer: /* @__PURE__ */ t.createElement("div", { className: "flex w-full gap-2 justify-evenly" }, /* @__PURE__ */ t.createElement(p, { variant: "secondary", onClick: d, title: "Cancel" }), /* @__PURE__ */ t.createElement(
|
package/dist/index.es2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es2.js","sources":["../src/components/ui/request-credits-view/component/request-credit-dialog.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react'\nimport { Dialog } from '@/components/organisms/dialog'\nimport { Typography } from '@/components/atoms/typography'\nimport { Button } from '@/components/atoms/button'\nimport { Input } from '@/components/atoms/input'\nimport { RequestCreditsDialogProps } from './request-credit-dialog.types'\n\nconst DefaultBuyCreditsOptions = ['5', '10', '20', '50', '>50']\n\nexport const RequestCreditsDialog: React.FC<RequestCreditsDialogProps> = ({\n open,\n onClose,\n onRequestCredits,\n onProceedToPayment,\n dialogClassName,\n buyCreditsOptions = DefaultBuyCreditsOptions,\n minimumCreditsToBuy = 5,\n requestOnly = false,\n}) => {\n const [selectedCredit, setSelectedCredit] = useState('')\n const [phoneNumber, setPhoneNumber] = useState('')\n const [phoneError, setPhoneError] = useState('')\n\n // Largest plain numeric option (e.g. 50). Anything above it is a request.\n const numericOptions = buyCreditsOptions\n .filter((option) => !option.startsWith('>'))\n .map((option) => Number(option))\n const maxCredit = numericOptions.length ? Math.max(...numericOptions) : 50\n\n const exceedsMaxCredit =\n selectedCredit.startsWith('>') || Number(selectedCredit) > maxCredit\n\n const isRequestAction = requestOnly || exceedsMaxCredit\n\n const creditError =\n selectedCredit &&\n !isRequestAction &&\n Number(selectedCredit) < minimumCreditsToBuy\n ? `Minimum number of credits is ${minimumCreditsToBuy}`\n : ''\n\n // Validate phone on every change\n useEffect(() => {\n if (isRequestAction) {\n const error = validatePhone(phoneNumber)\n setPhoneError(error)\n } else {\n setPhoneError('')\n }\n }, [phoneNumber, isRequestAction])\n\n const validatePhone = (phone: string) => {\n if (!phone) return ''\n const numberOnly = phone.startsWith('+91') ? phone.substring(3) : phone\n if (!/^[6-9]\\d{9}$/.test(numberOnly))\n return 'Number should start with 6-9 and be 10 digits'\n return ''\n }\n\n const handlePhoneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.replace(/\\D/g, '') // keep only digits\n setPhoneNumber(value)\n }\n\n const handleCreditChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.replace(/\\D/g, '') // keep only digits\n setSelectedCredit(value)\n }\n\n const handleSubmit = () => {\n // Only the '>50' style option appends '+'; a typed value is sent as-is\n const credit = selectedCredit.startsWith('>')\n ? selectedCredit.replace('>', '') + '+'\n : selectedCredit\n if (isRequestAction) {\n onRequestCredits(credit, phoneNumber)\n } else {\n if (onProceedToPayment) {\n onProceedToPayment(credit, phoneNumber)\n } else {\n onRequestCredits(credit, phoneNumber)\n }\n }\n reset()\n }\n\n const reset = () => {\n onClose()\n setTimeout(() => {\n setPhoneNumber('')\n setPhoneError('')\n setSelectedCredit('')\n }, 100)\n }\n\n useEffect(() => {\n if (!open) {\n setTimeout(() => {\n setPhoneNumber('')\n setPhoneError('')\n setSelectedCredit('')\n }, 100)\n }\n }, [open])\n\n const buttonText = isRequestAction\n ? `Request ${selectedCredit}`\n : `Proceed to Payment ${selectedCredit} `\n\n // Button should be disabled if no credit entered, or phone is invalid for a request\n const isButtonDisabled =\n !selectedCredit ||\n Number(selectedCredit) <= 0 ||\n !!creditError ||\n (isRequestAction && (!!phoneError || !phoneNumber))\n\n // Highlight the '>50' style option whenever the entered value exceeds the\n // largest buyable option; plain options match exactly.\n const isOptionSelected = (credit: string) =>\n credit.startsWith('>') ? exceedsMaxCredit : credit === selectedCredit\n\n return (\n <Dialog\n open={open}\n onOpenChange={reset}\n onOpenAutoFocus={(e) => e.preventDefault()}\n trigger={null}\n contentClassName=\"w-min\"\n body={\n <div className=\"w-72 md:w-[570px] flex items-center \">\n <div className=\"items-center justify-center\">\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/Group_427319313_e054593ef1/Group_427319313_e054593ef1.svg\"\n alt=\"lock\"\n className={dialogClassName}\n />\n </div>\n <div className=\"px-4 py-2 w-72 md:w-[400px]\">\n <div className=\"flex flex-col gap-2\">\n <Typography variant={'h3'} className=\"text-light-2\">\n How many credits do you need?\n </Typography>\n <Typography variant={'body4'} className=\"text-light-4\">\n <span className=\"underline\">Note:</span> One credit is needed to\n unlock a site report.{' '}\n {isRequestAction\n ? ' Please provide your phone number to make a request'\n : ''}\n </Typography>\n </div>\n\n <div className=\"mt-3\">\n <Input\n id=\"creditValue\"\n type=\"text\"\n value={selectedCredit.startsWith('>') ? '' : selectedCredit}\n onChange={handleCreditChange}\n className=\"h-10\"\n placeholder=\"Enter number of credits\"\n maxLength={6}\n isError={!!creditError}\n message={creditError}\n />\n </div>\n\n <div className=\"flex flex-row gap-2 mt-3\">\n {buyCreditsOptions.map((credit) => (\n <Button\n variant={isOptionSelected(credit) ? 'primary' : 'secondary'}\n key={credit}\n className={\n isOptionSelected(credit) ? 'w-10' : 'w-10 bg-light-2'\n }\n size={'sm'}\n onClick={() => setSelectedCredit(credit)}\n >\n {credit}\n </Button>\n ))}\n </div>\n {isRequestAction && (\n <div className=\"flex flex-col mt-4\">\n <Typography className=\"mb-1 text-sm font-medium text-light-2\">\n Phone Number *\n </Typography>\n <Input\n id=\"phoneNumber\"\n type=\"text\" // use text for maxLength\n value={phoneNumber}\n onChange={handlePhoneChange}\n className=\"h-10\"\n placeholder=\"Enter phone number\"\n maxLength={10}\n isError={!!phoneError}\n message={phoneError}\n />\n </div>\n )}\n </div>\n </div>\n }\n footer={\n <div className=\"flex w-full gap-2 justify-evenly\">\n <Button variant=\"secondary\" onClick={reset} title={'Cancel'} />\n <Button\n variant=\"primary\"\n suffixIcon={\n <img\n src={\n 'https://frontend-static-files.geoiq.io/strapi/navbar_credits_247858e26a.svg'\n }\n width={16}\n height={16}\n alt=\"coin icon\"\n className=\"ml-1 mr-2 md:mr-0\"\n />\n }\n title={buttonText}\n onClick={handleSubmit}\n disabled={isButtonDisabled}\n />\n </div>\n }\n />\n )\n}\n"],"names":["DefaultBuyCreditsOptions","RequestCreditsDialog","open","onClose","onRequestCredits","onProceedToPayment","dialogClassName","buyCreditsOptions","minimumCreditsToBuy","requestOnly","selectedCredit","setSelectedCredit","useState","phoneNumber","setPhoneNumber","phoneError","setPhoneError","numericOptions","option","maxCredit","exceedsMaxCredit","isRequestAction","creditError","useEffect","error","validatePhone","phone","numberOnly","handlePhoneChange","value","handleCreditChange","handleSubmit","credit","reset","buttonText","isButtonDisabled","isOptionSelected","React","Dialog","Typography","Input","Button"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es2.js","sources":["../src/components/ui/request-credits-view/component/request-credit-dialog.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react'\nimport { Dialog } from '@/components/organisms/dialog'\nimport { Typography } from '@/components/atoms/typography'\nimport { Button } from '@/components/atoms/button'\nimport { Input } from '@/components/atoms/input'\nimport { RequestCreditsDialogProps } from './request-credit-dialog.types'\n\nconst DefaultBuyCreditsOptions = ['5', '10', '20', '50', '>50']\n\nexport const RequestCreditsDialog: React.FC<RequestCreditsDialogProps> = ({\n open,\n onClose,\n onRequestCredits,\n onProceedToPayment,\n dialogClassName,\n buyCreditsOptions = DefaultBuyCreditsOptions,\n minimumCreditsToBuy = 5,\n requestOnly = false,\n}) => {\n const [selectedCredit, setSelectedCredit] = useState('')\n const [phoneNumber, setPhoneNumber] = useState('')\n const [phoneError, setPhoneError] = useState('')\n\n // Largest plain numeric option (e.g. 50). Anything above it is a request.\n const numericOptions = buyCreditsOptions \n .map((option) => {\n if (option.startsWith('>')) {\n return Number(option.replace('>', ''))\n }\n return Number(option)\n })\n const maxCredit = numericOptions.length ? Math.max(...numericOptions) : 50\n\n const exceedsMaxCredit =\n selectedCredit.startsWith('>') || Number(selectedCredit) > maxCredit\n\n const isRequestAction = requestOnly || exceedsMaxCredit\n\n const creditError =\n selectedCredit &&\n !isRequestAction &&\n Number(selectedCredit) < minimumCreditsToBuy\n ? `Minimum number of credits is ${minimumCreditsToBuy}`\n : ''\n\n // Validate phone on every change\n useEffect(() => {\n if (isRequestAction) {\n const error = validatePhone(phoneNumber)\n setPhoneError(error)\n } else {\n setPhoneError('')\n }\n }, [phoneNumber, isRequestAction])\n\n const validatePhone = (phone: string) => {\n if (!phone) return ''\n const numberOnly = phone.startsWith('+91') ? phone.substring(3) : phone\n if (!/^[6-9]\\d{9}$/.test(numberOnly))\n return 'Number should start with 6-9 and be 10 digits'\n return ''\n }\n\n const handlePhoneChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.replace(/\\D/g, '') // keep only digits\n setPhoneNumber(value)\n }\n\n const handleCreditChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const value = e.target.value.replace(/\\D/g, '') // keep only digits\n setSelectedCredit(value)\n }\n\n const handleSubmit = () => {\n // Only the '>50' style option appends '+'; a typed value is sent as-is\n const credit = selectedCredit.startsWith('>')\n ? selectedCredit.replace('>', '') + '+'\n : selectedCredit\n if (isRequestAction) {\n onRequestCredits(credit, phoneNumber)\n } else {\n if (onProceedToPayment) {\n onProceedToPayment(credit, phoneNumber)\n } else {\n onRequestCredits(credit, phoneNumber)\n }\n }\n reset()\n }\n\n const reset = () => {\n onClose()\n setTimeout(() => {\n setPhoneNumber('')\n setPhoneError('')\n setSelectedCredit('')\n }, 100)\n }\n\n useEffect(() => {\n if (!open) {\n setTimeout(() => {\n setPhoneNumber('')\n setPhoneError('')\n setSelectedCredit('')\n }, 100)\n }\n }, [open])\n\n const buttonText = isRequestAction\n ? `Request ${selectedCredit}`\n : `Proceed to Payment ${selectedCredit} `\n\n // Button should be disabled if no credit entered, or phone is invalid for a request\n const isButtonDisabled =\n !selectedCredit ||\n Number(selectedCredit) <= 0 ||\n !!creditError ||\n (isRequestAction && (!!phoneError || !phoneNumber))\n\n // Highlight the '>50' style option whenever the entered value exceeds the\n // largest buyable option; plain options match exactly.\n const isOptionSelected = (credit: string) =>\n credit.startsWith('>') ? exceedsMaxCredit : credit === selectedCredit\n\n return (\n <Dialog\n open={open}\n onOpenChange={reset}\n onOpenAutoFocus={(e) => e.preventDefault()}\n trigger={null}\n contentClassName=\"w-min\"\n body={\n <div className=\"w-72 md:w-[570px] flex items-center \">\n <div className=\"items-center justify-center\">\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/Group_427319313_e054593ef1/Group_427319313_e054593ef1.svg\"\n alt=\"lock\"\n className={dialogClassName}\n />\n </div>\n <div className=\"px-4 py-2 w-72 md:w-[400px]\">\n <div className=\"flex flex-col gap-2\">\n <Typography variant={'h3'} className=\"text-light-2\">\n How many credits do you need?\n </Typography>\n <Typography variant={'body4'} className=\"text-light-4\">\n <span className=\"underline\">Note:</span> One credit is needed to\n unlock a site report.{' '}\n {isRequestAction\n ? ' Please provide your phone number to make a request'\n : ''}\n </Typography>\n </div>\n\n <div className=\"mt-3\">\n <Input\n id=\"creditValue\"\n type=\"text\"\n value={selectedCredit.startsWith('>') ? '' : selectedCredit}\n onChange={handleCreditChange}\n className=\"h-10\"\n placeholder=\"Enter number of credits\"\n maxLength={6}\n isError={!!creditError}\n message={creditError}\n />\n </div>\n\n <div className=\"flex flex-row gap-2 mt-3\">\n {buyCreditsOptions.map((credit) => (\n <Button\n variant={isOptionSelected(credit) ? 'primary' : 'secondary'}\n key={credit}\n className={\n isOptionSelected(credit) ? 'w-10' : 'w-10 bg-light-2'\n }\n size={'sm'}\n onClick={() => setSelectedCredit(credit)}\n >\n {credit}\n </Button>\n ))}\n </div>\n {isRequestAction && (\n <div className=\"flex flex-col mt-4\">\n <Typography className=\"mb-1 text-sm font-medium text-light-2\">\n Phone Number *\n </Typography>\n <Input\n id=\"phoneNumber\"\n type=\"text\" // use text for maxLength\n value={phoneNumber}\n onChange={handlePhoneChange}\n className=\"h-10\"\n placeholder=\"Enter phone number\"\n maxLength={10}\n isError={!!phoneError}\n message={phoneError}\n />\n </div>\n )}\n </div>\n </div>\n }\n footer={\n <div className=\"flex w-full gap-2 justify-evenly\">\n <Button variant=\"secondary\" onClick={reset} title={'Cancel'} />\n <Button\n variant=\"primary\"\n suffixIcon={\n <img\n src={\n 'https://frontend-static-files.geoiq.io/strapi/navbar_credits_247858e26a.svg'\n }\n width={16}\n height={16}\n alt=\"coin icon\"\n className=\"ml-1 mr-2 md:mr-0\"\n />\n }\n title={buttonText}\n onClick={handleSubmit}\n disabled={isButtonDisabled}\n />\n </div>\n }\n />\n )\n}\n"],"names":["DefaultBuyCreditsOptions","RequestCreditsDialog","open","onClose","onRequestCredits","onProceedToPayment","dialogClassName","buyCreditsOptions","minimumCreditsToBuy","requestOnly","selectedCredit","setSelectedCredit","useState","phoneNumber","setPhoneNumber","phoneError","setPhoneError","numericOptions","option","maxCredit","exceedsMaxCredit","isRequestAction","creditError","useEffect","error","validatePhone","phone","numberOnly","handlePhoneChange","value","handleCreditChange","handleSubmit","credit","reset","buttonText","isButtonDisabled","isOptionSelected","React","Dialog","Typography","Input","Button"],"mappings":"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"}
|
package/dist/index.es20.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as e from "react";
|
|
2
2
|
import { cn as s } from "./index.es89.js";
|
|
3
|
-
import { AlertVariants as v, AlertContentVariants as h, AlertButtonVariants as u } from "./index.
|
|
3
|
+
import { AlertVariants as v, AlertContentVariants as h, AlertButtonVariants as u } from "./index.es133.js";
|
|
4
4
|
import { Button as _ } from "./index.es9.js";
|
|
5
5
|
import { Typography as N } from "./index.es19.js";
|
|
6
6
|
const n = e.forwardRef(({ className: t, ...r }, a) => /* @__PURE__ */ e.createElement(
|
package/dist/index.es21.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { Breadcrumb as b, BreadcrumbList as h, BreadcrumbSeparator as o, BreadcrumbItem as s, BreadcrumbEllipsis as y, BreadcrumbLink as i } from "./index.
|
|
2
|
-
import { DropdownMenu as d, DropdownMenuTrigger as f, DropdownMenuContent as B, DropdownMenuItem as w } from "./index.
|
|
1
|
+
import { Breadcrumb as b, BreadcrumbList as h, BreadcrumbSeparator as o, BreadcrumbItem as s, BreadcrumbEllipsis as y, BreadcrumbLink as i } from "./index.es134.js";
|
|
2
|
+
import { DropdownMenu as d, DropdownMenuTrigger as f, DropdownMenuContent as B, DropdownMenuItem as w } from "./index.es109.js";
|
|
3
3
|
import e from "react";
|
|
4
4
|
import { Typography as N } from "./index.es19.js";
|
|
5
5
|
import { cn as D } from "./index.es89.js";
|
|
6
|
-
import { CrumbVariants as k } from "./index.
|
|
6
|
+
import { CrumbVariants as k } from "./index.es135.js";
|
|
7
7
|
function u({ field: t, isSelected: r }) {
|
|
8
8
|
return /* @__PURE__ */ e.createElement(s, null, /* @__PURE__ */ e.createElement(
|
|
9
9
|
i,
|
package/dist/index.es22.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import e from "react";
|
|
2
|
-
import { DropdownMenu as g, DropdownMenuTrigger as p, DropdownMenuContent as h, DropdownMenuLabel as E, DropdownMenuSeparator as s, DropdownMenuGroup as w, DropdownMenuSub as x, DropdownMenuSubTrigger as N, DropdownMenuPortal as D, DropdownMenuSubContent as M, DropdownMenuItem as c } from "./index.
|
|
2
|
+
import { DropdownMenu as g, DropdownMenuTrigger as p, DropdownMenuContent as h, DropdownMenuLabel as E, DropdownMenuSeparator as s, DropdownMenuGroup as w, DropdownMenuSub as x, DropdownMenuSubTrigger as N, DropdownMenuPortal as D, DropdownMenuSubContent as M, DropdownMenuItem as c } from "./index.es109.js";
|
|
3
3
|
function v({
|
|
4
4
|
trigger: o,
|
|
5
5
|
optionGroups: r,
|
package/dist/index.es25.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cn as s } from "./index.es89.js";
|
|
2
2
|
import { useRanger as w } from "@tanstack/react-ranger";
|
|
3
3
|
import e from "react";
|
|
4
|
-
import { SliderBgColorVariants as a } from "./index.
|
|
4
|
+
import { SliderBgColorVariants as a } from "./index.es118.js";
|
|
5
5
|
const x = ({ left: t = 0, width: o = 0, index: l = -1 }) => /* @__PURE__ */ e.createElement(
|
|
6
6
|
"div",
|
|
7
7
|
{
|
package/dist/index.es27.js
CHANGED
|
@@ -4,7 +4,7 @@ import { ChevronUp as y, ChevronDown as w, Check as k } from "lucide-react";
|
|
|
4
4
|
import { Command as S, CommandInput as O, CommandEmpty as P, CommandGroup as R, CommandList as j, CommandItem as B } from "./index.es60.js";
|
|
5
5
|
import { Popover as I, PopoverTrigger as T, PopoverContent as V } from "./index.es90.js";
|
|
6
6
|
import { Button as D } from "./index.es9.js";
|
|
7
|
-
import { ComboBoxStates as F } from "./index.
|
|
7
|
+
import { ComboBoxStates as F } from "./index.es103.js";
|
|
8
8
|
import { Typography as m } from "./index.es19.js";
|
|
9
9
|
import { cn as n } from "./index.es89.js";
|
|
10
10
|
function J({
|
package/dist/index.es28.js
CHANGED
|
@@ -6,8 +6,8 @@ import { Button as Ae } from "./index.es9.js";
|
|
|
6
6
|
import { Typography as w } from "./index.es19.js";
|
|
7
7
|
import { Badge as Pe } from "./index.es8.js";
|
|
8
8
|
import { cn as R } from "./index.es89.js";
|
|
9
|
-
import { ComboBoxStates as Oe } from "./index.
|
|
10
|
-
import { interpolateUrl as Q } from "./index.
|
|
9
|
+
import { ComboBoxStates as Oe } from "./index.es103.js";
|
|
10
|
+
import { interpolateUrl as Q } from "./index.es104.js";
|
|
11
11
|
function Me(o) {
|
|
12
12
|
const c = (a) => typeof a == "string" ? { id: a, name: a } : {
|
|
13
13
|
id: String(a.id ?? a.value ?? a.email ?? a),
|
package/dist/index.es30.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as o from "@radix-ui/react-slider";
|
|
2
2
|
import * as e from "react";
|
|
3
3
|
import { cn as t } from "./index.es89.js";
|
|
4
|
-
import { SliderVariants as s } from "./index.
|
|
4
|
+
import { SliderVariants as s } from "./index.es102.js";
|
|
5
5
|
const n = e.forwardRef(({ className: r, id: l, ...a }, i) => (
|
|
6
6
|
// <div className='bg-light-3 h-[100px] w-full flex'>
|
|
7
7
|
/* @__PURE__ */ e.createElement(
|
package/dist/index.es32.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { StepperProvider as p, StepGroup as m } from "./index.
|
|
1
|
+
import { StepperProvider as p, StepGroup as m } from "./index.es107.js";
|
|
2
2
|
import * as e from "react";
|
|
3
3
|
const a = ({ value: t, id: r }) => /* @__PURE__ */ e.createElement(e.Fragment, null, /* @__PURE__ */ e.createElement(p, { steps: t, id: r }, /* @__PURE__ */ e.createElement(m, null)));
|
|
4
4
|
a.displayName = "Stepper";
|
package/dist/index.es33.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as e from "react";
|
|
2
2
|
import * as i from "@radix-ui/react-tabs";
|
|
3
3
|
import { cn as l } from "./index.es89.js";
|
|
4
|
-
import { TabsVariants as N, TabTriggerVariants as T } from "./index.
|
|
4
|
+
import { TabsVariants as N, TabTriggerVariants as T } from "./index.es132.js";
|
|
5
5
|
const f = e.forwardRef(({ className: s, variant: a, size: n, ...t }, o) => /* @__PURE__ */ e.createElement(
|
|
6
6
|
i.List,
|
|
7
7
|
{
|
package/dist/index.es45.js
CHANGED
|
@@ -1,67 +1,69 @@
|
|
|
1
|
-
import k, { useRef as
|
|
2
|
-
import { createRoot as
|
|
3
|
-
import { ImageEditorModal as
|
|
4
|
-
import { notifyNativeImageEditorState as
|
|
5
|
-
import
|
|
6
|
-
function
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
if (!
|
|
11
|
-
const e =
|
|
12
|
-
|
|
1
|
+
import k, { useRef as s, useState as g, useEffect as u } from "react";
|
|
2
|
+
import { createRoot as L } from "./index.es97.js";
|
|
3
|
+
import { ImageEditorModal as I } from "./index.es98.js";
|
|
4
|
+
import { notifyNativeImageEditorState as d } from "./index.es99.js";
|
|
5
|
+
import w from "./index.es100.js";
|
|
6
|
+
function x(r) {
|
|
7
|
+
const a = s(r);
|
|
8
|
+
a.current = r;
|
|
9
|
+
const t = s(null), [m, S] = g(null), [p, y] = g(!1);
|
|
10
|
+
if (!t.current && typeof window < "u") {
|
|
11
|
+
const e = a.current;
|
|
12
|
+
t.current = w.create({
|
|
13
13
|
...e,
|
|
14
14
|
image: e.image ?? e.backgroundImage,
|
|
15
|
-
onSave: async (
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
18
|
-
const R =
|
|
19
|
-
type:
|
|
20
|
-
}), b = await
|
|
21
|
-
|
|
15
|
+
onSave: async (n, c) => {
|
|
16
|
+
const l = a.current;
|
|
17
|
+
if (l.onAssetUpload) {
|
|
18
|
+
const R = n.type === "image/jpeg" ? "jpg" : "png", E = new File([n.blob], `edit.${R}`, {
|
|
19
|
+
type: n.type
|
|
20
|
+
}), b = await l.onAssetUpload(E);
|
|
21
|
+
l.onSave({ ...n, ...b }, c);
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
l.onSave(n, c);
|
|
25
25
|
},
|
|
26
|
-
onUiChange:
|
|
26
|
+
onUiChange: S
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
u(() => {
|
|
30
|
+
!t.current || !r.savedLayers || t.current.setSavedLayers(r.savedLayers);
|
|
31
|
+
}, [r.savedLayers]), u(() => {
|
|
32
|
+
const e = t.current;
|
|
31
33
|
if (!e) return;
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
},
|
|
35
|
-
|
|
34
|
+
const n = () => {
|
|
35
|
+
y(!0), d(!0);
|
|
36
|
+
}, c = () => {
|
|
37
|
+
y(!1), d(!1);
|
|
36
38
|
};
|
|
37
|
-
return e.on("open",
|
|
38
|
-
e.off("open",
|
|
39
|
+
return e.on("open", n), e.on("close", c), () => {
|
|
40
|
+
e.off("open", n), e.off("close", c), d(!1), e.destroy();
|
|
39
41
|
};
|
|
40
42
|
}, []);
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
const e =
|
|
44
|
-
!e ||
|
|
45
|
-
}, [
|
|
46
|
-
const i =
|
|
47
|
-
return
|
|
48
|
-
i.current?.unmount(),
|
|
49
|
-
}, []),
|
|
50
|
-
const e =
|
|
51
|
-
e && (
|
|
43
|
+
const f = (r.stickers ?? []).join(" "), v = s(null);
|
|
44
|
+
u(() => {
|
|
45
|
+
const e = t.current;
|
|
46
|
+
!e || v.current === f || (v.current = f, e.setStickers(r.stickers ?? []));
|
|
47
|
+
}, [f]);
|
|
48
|
+
const i = s(null), o = s(null);
|
|
49
|
+
return u(() => () => {
|
|
50
|
+
i.current?.unmount(), o.current?.remove(), i.current = null, o.current = null;
|
|
51
|
+
}, []), u(() => {
|
|
52
|
+
const e = t.current;
|
|
53
|
+
e && (o.current || (o.current = document.createElement("div"), document.body.appendChild(o.current), i.current = L(o.current)), i.current.render(
|
|
52
54
|
/* @__PURE__ */ k.createElement(
|
|
53
|
-
|
|
55
|
+
I,
|
|
54
56
|
{
|
|
55
57
|
engine: e,
|
|
56
|
-
ui:
|
|
57
|
-
isOpen:
|
|
58
|
-
saveLabel:
|
|
58
|
+
ui: m,
|
|
59
|
+
isOpen: p,
|
|
60
|
+
saveLabel: a.current.saveLabel || "Save"
|
|
59
61
|
}
|
|
60
62
|
)
|
|
61
63
|
));
|
|
62
|
-
}, [
|
|
64
|
+
}, [m, p]), t.current;
|
|
63
65
|
}
|
|
64
66
|
export {
|
|
65
|
-
|
|
67
|
+
x as useImageEditor
|
|
66
68
|
};
|
|
67
69
|
//# sourceMappingURL=index.es45.js.map
|