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.
Files changed (217) hide show
  1. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts +20 -0
  2. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts.map +1 -0
  3. package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
  4. package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
  5. package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
  6. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts +9 -0
  7. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts.map +1 -0
  8. package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
  9. package/dist/components/organisms/image-editor/image-editor.types.d.ts +73 -0
  10. package/dist/components/organisms/image-editor/image-editor.types.d.ts.map +1 -1
  11. package/dist/components/organisms/image-editor/use-image-editor.d.ts.map +1 -1
  12. package/dist/components/ui/request-credits-view/component/request-credit-dialog.d.ts.map +1 -1
  13. package/dist/index.es100.js +147 -120
  14. package/dist/index.es100.js.map +1 -1
  15. package/dist/index.es101.js +16 -11
  16. package/dist/index.es101.js.map +1 -1
  17. package/dist/index.es102.js +7 -41
  18. package/dist/index.es102.js.map +1 -1
  19. package/dist/index.es103.js +21 -10
  20. package/dist/index.es103.js.map +1 -1
  21. package/dist/index.es104.js +7 -74
  22. package/dist/index.es104.js.map +1 -1
  23. package/dist/index.es105.js +177 -30
  24. package/dist/index.es105.js.map +1 -1
  25. package/dist/index.es106.js +45 -16
  26. package/dist/index.es106.js.map +1 -1
  27. package/dist/index.es107.js +42 -20
  28. package/dist/index.es107.js.map +1 -1
  29. package/dist/index.es108.js +22 -12
  30. package/dist/index.es108.js.map +1 -1
  31. package/dist/index.es109.js +122 -98
  32. package/dist/index.es109.js.map +1 -1
  33. package/dist/index.es11.js +1 -1
  34. package/dist/index.es110.js +33 -62
  35. package/dist/index.es110.js.map +1 -1
  36. package/dist/index.es111.js +60 -52
  37. package/dist/index.es111.js.map +1 -1
  38. package/dist/index.es112.js +10 -41
  39. package/dist/index.es112.js.map +1 -1
  40. package/dist/index.es113.js +21 -11
  41. package/dist/index.es113.js.map +1 -1
  42. package/dist/index.es114.js +42 -92
  43. package/dist/index.es114.js.map +1 -1
  44. package/dist/index.es115.js +37 -16
  45. package/dist/index.es115.js.map +1 -1
  46. package/dist/index.es116.js +12 -99
  47. package/dist/index.es116.js.map +1 -1
  48. package/dist/index.es117.js +92 -13
  49. package/dist/index.es117.js.map +1 -1
  50. package/dist/index.es118.js +13 -101
  51. package/dist/index.es118.js.map +1 -1
  52. package/dist/index.es119.js +71 -20
  53. package/dist/index.es119.js.map +1 -1
  54. package/dist/index.es12.js +1 -1
  55. package/dist/index.es120.js +34 -25
  56. package/dist/index.es120.js.map +1 -1
  57. package/dist/index.es121.js +20 -22
  58. package/dist/index.es121.js.map +1 -1
  59. package/dist/index.es122.js +16 -45
  60. package/dist/index.es122.js.map +1 -1
  61. package/dist/index.es123.js +11 -34
  62. package/dist/index.es123.js.map +1 -1
  63. package/dist/index.es124.js +96 -61
  64. package/dist/index.es124.js.map +1 -1
  65. package/dist/index.es125.js +57 -174
  66. package/dist/index.es125.js.map +1 -1
  67. package/dist/index.es126.js +50 -17
  68. package/dist/index.es126.js.map +1 -1
  69. package/dist/index.es127.js +2 -2
  70. package/dist/index.es128.js +2 -2
  71. package/dist/index.es129.js +1 -1
  72. package/dist/index.es130.js +1 -1
  73. package/dist/index.es131.js +2 -2
  74. package/dist/index.es132.js +35 -38
  75. package/dist/index.es132.js.map +1 -1
  76. package/dist/index.es133.js +41 -7
  77. package/dist/index.es133.js.map +1 -1
  78. package/dist/index.es134.js +88 -7
  79. package/dist/index.es134.js.map +1 -1
  80. package/dist/index.es135.js +14 -34
  81. package/dist/index.es135.js.map +1 -1
  82. package/dist/index.es136.js +269 -35
  83. package/dist/index.es136.js.map +1 -1
  84. package/dist/index.es137.js +7 -2
  85. package/dist/index.es137.js.map +1 -1
  86. package/dist/index.es138.js +23 -25
  87. package/dist/index.es138.js.map +1 -1
  88. package/dist/index.es139.js +169 -15
  89. package/dist/index.es139.js.map +1 -1
  90. package/dist/index.es140.js +82 -7
  91. package/dist/index.es140.js.map +1 -1
  92. package/dist/index.es141.js +73 -21
  93. package/dist/index.es141.js.map +1 -1
  94. package/dist/index.es142.js +3 -168
  95. package/dist/index.es142.js.map +1 -1
  96. package/dist/index.es143.js +56 -82
  97. package/dist/index.es143.js.map +1 -1
  98. package/dist/index.es144.js +119 -4
  99. package/dist/index.es144.js.map +1 -1
  100. package/dist/index.es145.js +405 -56
  101. package/dist/index.es145.js.map +1 -1
  102. package/dist/index.es146.js +25 -110
  103. package/dist/index.es146.js.map +1 -1
  104. package/dist/index.es147.js +60 -314
  105. package/dist/index.es147.js.map +1 -1
  106. package/dist/index.es148.js +29 -24
  107. package/dist/index.es148.js.map +1 -1
  108. package/dist/index.es149.js +21 -64
  109. package/dist/index.es149.js.map +1 -1
  110. package/dist/index.es150.js +36 -30
  111. package/dist/index.es150.js.map +1 -1
  112. package/dist/index.es151.js +211 -24
  113. package/dist/index.es151.js.map +1 -1
  114. package/dist/index.es152.js +141 -35
  115. package/dist/index.es152.js.map +1 -1
  116. package/dist/index.es153.js +141 -140
  117. package/dist/index.es153.js.map +1 -1
  118. package/dist/index.es154.js +45 -142
  119. package/dist/index.es154.js.map +1 -1
  120. package/dist/index.es155.js +353 -45
  121. package/dist/index.es155.js.map +1 -1
  122. package/dist/index.es156.js +14 -10
  123. package/dist/index.es156.js.map +1 -1
  124. package/dist/index.es157.js +10 -42
  125. package/dist/index.es157.js.map +1 -1
  126. package/dist/index.es158.js +44 -5
  127. package/dist/index.es158.js.map +1 -1
  128. package/dist/index.es159.js +5 -11
  129. package/dist/index.es159.js.map +1 -1
  130. package/dist/index.es16.js +1 -1
  131. package/dist/index.es160.js +10 -10
  132. package/dist/index.es160.js.map +1 -1
  133. package/dist/index.es161.js +11 -2
  134. package/dist/index.es161.js.map +1 -1
  135. package/dist/index.es162.js +2 -91
  136. package/dist/index.es162.js.map +1 -1
  137. package/dist/index.es163.js +2 -213
  138. package/dist/index.es163.js.map +1 -1
  139. package/dist/index.es164.js +23 -52
  140. package/dist/index.es164.js.map +1 -1
  141. package/dist/index.es165.js +88 -33
  142. package/dist/index.es165.js.map +1 -1
  143. package/dist/index.es166.js +52 -31
  144. package/dist/index.es166.js.map +1 -1
  145. package/dist/index.es167.js +32 -29
  146. package/dist/index.es167.js.map +1 -1
  147. package/dist/index.es168.js +26 -84
  148. package/dist/index.es168.js.map +1 -1
  149. package/dist/index.es169.js +27 -111
  150. package/dist/index.es169.js.map +1 -1
  151. package/dist/index.es170.js +97 -285
  152. package/dist/index.es170.js.map +1 -1
  153. package/dist/index.es171.js +251 -30
  154. package/dist/index.es171.js.map +1 -1
  155. package/dist/index.es172.js +63 -11
  156. package/dist/index.es172.js.map +1 -1
  157. package/dist/index.es173.js +284 -82
  158. package/dist/index.es173.js.map +1 -1
  159. package/dist/index.es174.js +29 -70
  160. package/dist/index.es174.js.map +1 -1
  161. package/dist/index.es175.js +10 -114
  162. package/dist/index.es175.js.map +1 -1
  163. package/dist/index.es176.js +23 -106
  164. package/dist/index.es176.js.map +1 -1
  165. package/dist/index.es177.js +19 -82
  166. package/dist/index.es177.js.map +1 -1
  167. package/dist/index.es178.js +63 -109
  168. package/dist/index.es178.js.map +1 -1
  169. package/dist/index.es179.js +63 -117
  170. package/dist/index.es179.js.map +1 -1
  171. package/dist/index.es180.js +112 -23
  172. package/dist/index.es180.js.map +1 -1
  173. package/dist/index.es181.js +103 -18
  174. package/dist/index.es181.js.map +1 -1
  175. package/dist/index.es182.js +86 -5
  176. package/dist/index.es182.js.map +1 -1
  177. package/dist/index.es183.js +133 -0
  178. package/dist/index.es183.js.map +1 -0
  179. package/dist/index.es184.js +133 -0
  180. package/dist/index.es184.js.map +1 -0
  181. package/dist/index.es185.js +9 -0
  182. package/dist/index.es185.js.map +1 -0
  183. package/dist/index.es19.js +1 -1
  184. package/dist/index.es2.js +21 -21
  185. package/dist/index.es2.js.map +1 -1
  186. package/dist/index.es20.js +1 -1
  187. package/dist/index.es21.js +3 -3
  188. package/dist/index.es22.js +1 -1
  189. package/dist/index.es25.js +1 -1
  190. package/dist/index.es27.js +1 -1
  191. package/dist/index.es28.js +2 -2
  192. package/dist/index.es30.js +1 -1
  193. package/dist/index.es32.js +1 -1
  194. package/dist/index.es33.js +1 -1
  195. package/dist/index.es45.js +48 -46
  196. package/dist/index.es45.js.map +1 -1
  197. package/dist/index.es46.js +2 -2
  198. package/dist/index.es47.js +1 -1
  199. package/dist/index.es48.js +1 -1
  200. package/dist/index.es53.js +1 -1
  201. package/dist/index.es54.js +1 -1
  202. package/dist/index.es57.js +1 -1
  203. package/dist/index.es59.js +1 -1
  204. package/dist/index.es67.js +2 -2
  205. package/dist/index.es68.js +1 -1
  206. package/dist/index.es71.js +1 -1
  207. package/dist/index.es72.js +7 -7
  208. package/dist/index.es73.js +2 -2
  209. package/dist/index.es85.js +1 -1
  210. package/dist/index.es97.js +16 -11
  211. package/dist/index.es97.js.map +1 -1
  212. package/dist/index.es98.js +89 -262
  213. package/dist/index.es98.js.map +1 -1
  214. package/dist/index.es99.js +13 -87
  215. package/dist/index.es99.js.map +1 -1
  216. package/dist/styles.css +55 -0
  217. 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":";;;;;;;AAoBA,MAAMA,IAAoE,CAAC;AAAA,EACzE,IAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ,CAAA;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,OAAAC;AAAA,EACA,WAAAC,IAAY;AAAA,EACZ,SAAAC;AACF,MAAM;AACJ,QAAM,EAAE,eAAAC,GAAe,qBAAAC,EAAA,IAAwBC,EAAA,GACzC,EAAE,OAAAC,EAAA,IAAUC,EAAA,GAEZ,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAK,GAC1CC,IAAeC,EAAyB,IAAI,GAE5CC,IAAoB,OAAOC,MAA2C;AAC1E,UAAMC,IAAQD,EAAE,OAAO;AACvB,QAAI,GAACC,GAAO,UAAUP,IAEtB;AAAA,UAAIV,EAAM,SAASiB,EAAM,SAASd,GAAW;AAC3C,QAAAK,EAAM;AAAA,UACJ,OAAO;AAAA,UACP,aAAa,WAAWL,CAAS;AAAA,UACjC,MAAM;AAAA,QAAA,CACP;AACD;AAAA,MACF;AAEA,UAAIE,GAAe;AACjB,QAAAM,EAAa,EAAI;AAEjB,YAAI;AACF,gBAAMO,IAAU,MAAM,KAAKD,CAAK,EAAE,IAAI,CAACE,MAASd,EAAcc,CAAI,CAAC,GAG7DC,KAFU,MAAM,QAAQ,IAAIF,CAAO,GAEX,IAAI,CAACG,OAAY,EAAE,GAAGA,GAAQ,KAAK,GAAA,EAAK;AAEtE,UAAAtB,EAAS,CAAC,GAAGC,GAAO,GAAGoB,CAAa,CAAC,GAErCZ,EAAM;AAAA,YACJ,OAAO;AAAA,YACP,aAAa,GAAGS,EAAM,MAAM,IAAIA,EAAM,WAAW,IAAI,UAAU,QAAQ;AAAA,YACvE,MAAM;AAAA,UAAA,CACP;AAAA,QACH,QAAgB;AACd,UAAAT,EAAM;AAAA,YACJ,OAAO;AAAA,YACP,aAAa;AAAA,YACb,MAAM;AAAA,UAAA,CACP;AAAA,QACH,UAAA;AACE,UAAAG,EAAa,EAAK,GAEdE,EAAa,YACfA,EAAa,QAAQ,QAAQ;AAAA,QAEjC;AAAA,MACF;AAAA;AAAA,EACF,GAEMS,IAAc,MAAM;AACxB,IAAI,CAACZ,KAAaV,EAAM,SAASG,IAC/BU,EAAa,SAAS,MAAA,IACbb,EAAM,UAAUG,KACzBK,EAAM;AAAA,MACJ,OAAO;AAAA,MACP,aAAa,WAAWL,CAAS;AAAA,MACjC,MAAM;AAAA,IAAA,CACP;AAAA,EAEL,GAEMoB,IAAc,CAACC,MAAkB;AACrC,QAAI,CAACd,GAAW;AACd,YAAMe,IAAY,CAAC,GAAGzB,CAAK;AAC3B,MAAAyB,EAAU,OAAOD,GAAO,CAAC,GACzBzB,EAAS0B,CAAS;AAAA,IACpB;AAAA,EACF,GAEMC,IAAiB,CAACC,GAAkBH,MAAkB;AAC1D,UAAMI,IAAW,CAAC,GAAG5B,CAAK,GACpB6B,IAAgBD,EAASJ,CAAK;AAEpC,IAAAI,EAAS,OAAOJ,GAAO,GAAG,EAAE,GAAGK,GAAe,GAAGF,GAAM,GACvD5B,EAAS6B,CAAQ;AAAA,EACnB;AAEA,yCACG,OAAA,EAAI,WAAU,cACZlB,KACCoB,gBAAAA,EAAA,cAAC,SAAI,WAAU,gFAAA,GACbA,gBAAAA,EAAA,cAACC,GAAA,EAAQ,WAAU,yBAAA,CAAyB,CAC9C,GAEFD,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,+EAAA,GACbA,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAASR;AAAA,MACT,MAAK;AAAA,MACL,UAAUZ,KAAaV,EAAM,UAAUG;AAAA,IAAA;AAAA,IAEvC2B,gBAAAA,EAAA,cAAC,SAAI,WAAU,+CAAA,mCACZ,OAAA,EAAI,WAAU,8BACbA,gBAAAA,EAAA,cAACE,GAAA,EAAO,WAAU,wBAAA,CAAwB,CAC5C,GACAF,gBAAAA,EAAA,cAACG,GAAA,EAAW,SAAQ,SAAQ,WAAU,mBACnCvB,IACG,iBACAV,EAAM,UAAUG,IACd,WAAWA,CAAS,oBACpB,YACR,GACCH,EAAM,SAAS,KACd8B,gBAAAA,EAAA,cAACG,KAAW,SAAQ,SAAQ,WAAU,gBAAA,GACnCjC,EAAM,QAAO,QAAKG,GAAU,SAC/B,CAEJ;AAAA,EAAA,GAEF2B,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKjB;AAAA,MACL,IAAI,GAAGf,CAAE;AAAA,MACT,MAAK;AAAA,MACL,QAAAG;AAAA,MACA,UAAUS,KAAaV,EAAM,UAAUG;AAAA,MACvC,UAAUY;AAAA,MACV,WAAU;AAAA,MACV,UAAQ;AAAA,IAAA;AAAA,EAAA,GAGTb,KACC4B,gBAAAA,EAAA,cAACG,GAAA,EAAW,SAAQ,SAAQ,WAAU,wBACnC/B,CACH,CAEJ,GAECF,EAAM,SAAS,qCACb,OAAA,EAAI,WAAU,4DAAA,GACZA,EAAM,IAAI,CAACkC,GAAOV,MACjBM,gBAAAA,EAAA,cAAC,SAAI,KAAKI,EAAM,aAAa,WAAU,yBACrCJ,gBAAAA,EAAA,cAAC,OAAA,EAAI,KAAKN,GAAO,WAAU,2BACzBM,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKI,EAAM;AAAA,MACX,KAAK,WAAWV,IAAQ,CAAC;AAAA,MACzB,WAAU;AAAA,IAAA;AAAA,EAAA,GAEXlB,KACCwB,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS,CAACd,MAAM;AACd,QAAAA,EAAE,cAAc,KAAA,GAChBV,EAAoB;AAAA,UAClB,UAAU4B,EAAM;AAAA,UAChB,OAAAV;AAAA,UACA,gBAAAE;AAAA,QAAA,CACD;AAAA,MACH;AAAA,MACA,WAAU;AAAA,IAAA;AAAA,IAEVI,gBAAAA,EAAA,cAACK,GAAA,EAAI,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,EAAA,GAG7CL,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,MAAMP,EAAYC,CAAK;AAAA,MAChC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,UAAUd;AAAA,IAAA;AAAA,IAEVoB,gBAAAA,EAAA,cAACM,GAAA,EAAE,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,EAAA,CAE3C,GACAN,gBAAAA,EAAA;AAAA,IAACO;AAAA,IAAA;AAAA,MACC,SAASjC,EAAQ,IAAI,CAACkC,OAAY;AAAA,QAChC,IAAIA;AAAA,QACJ,MAAMA;AAAA,MAAA,EACN;AAAA,MACF,OAAOJ,EAAM;AAAA,MACb,UAAU,CAACP,MAAS;AAClB,cAAMF,IAAY,CAAC,GAAGzB,CAAK;AAC3B,QAAAyB,EAAUD,CAAK,EAAE,MAAMG,GACvB5B,EAAS0B,CAAS;AAAA,MACpB;AAAA,MACA,aAAa;AAAA,IAAA;AAAA,EAAA,CAEjB,CACD,CACH,CAEJ;AAEJ;"}
@@ -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,9 @@
1
+ import { format as o } from "date-fns";
2
+ const m = (t) => {
3
+ const e = new Date(t * 1e3);
4
+ return o(e, "dd MMM yyyy, hh:mm a");
5
+ };
6
+ export {
7
+ m as convertEpochTime
8
+ };
9
+ //# sourceMappingURL=index.es185.js.map
@@ -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;"}
@@ -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.es121.js";
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: o,
7
+ open: c,
8
8
  onClose: _,
9
9
  onRequestCredits: g,
10
- onProceedToPayment: E,
10
+ onProceedToPayment: N,
11
11
  dialogClassName: k,
12
- buyCreditsOptions: N = j,
12
+ buyCreditsOptions: E = j,
13
13
  minimumCreditsToBuy: v = 5,
14
14
  requestOnly: D = !1
15
15
  }) => {
16
- const [a, l] = h(""), [r, c] = h(""), [m, i] = h(""), x = N.filter((e) => !e.startsWith(">")).map((e) => Number(e)), O = x.length ? Math.max(...x) : 50, b = a.startsWith(">") || Number(a) > O, s = D || b, u = a && !s && Number(a) < v ? `Minimum number of credits is ${v}` : "";
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 (s) {
19
- const e = P(r);
18
+ if (r) {
19
+ const e = P(s);
20
20
  i(e);
21
21
  } else
22
22
  i("");
23
- }, [r, s]);
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
- c(n);
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
- s ? g(e, r) : E ? E(e, r) : g(e, r), d();
36
+ r ? g(e, s) : N ? N(e, s) : g(e, s), d();
37
37
  }, d = () => {
38
38
  _(), setTimeout(() => {
39
- c(""), i(""), l("");
39
+ m(""), i(""), l("");
40
40
  }, 100);
41
41
  };
42
42
  C(() => {
43
- o || setTimeout(() => {
44
- c(""), i(""), l("");
43
+ c || setTimeout(() => {
44
+ m(""), i(""), l("");
45
45
  }, 100);
46
- }, [o]);
47
- const $ = s ? `Request ${a}` : `Proceed to Payment ${a} `, M = !a || Number(a) <= 0 || !!u || s && (!!m || !r), y = (e) => e.startsWith(">") ? b : e === a;
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: o,
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.", " ", s ? " Please provide your phone number to make a request" : "")), /* @__PURE__ */ t.createElement("div", { className: "mt-3" }, /* @__PURE__ */ t.createElement(
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" }, N.map((e) => /* @__PURE__ */ t.createElement(
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
- ))), s && /* @__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(
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: r,
91
+ value: s,
92
92
  onChange: W,
93
93
  className: "h-10",
94
94
  placeholder: "Enter phone number",
95
95
  maxLength: 10,
96
- isError: !!m,
97
- message: m
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(
@@ -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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"}
@@ -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.es102.js";
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(
@@ -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.es99.js";
2
- import { DropdownMenu as d, DropdownMenuTrigger as f, DropdownMenuContent as B, DropdownMenuItem as w } from "./index.es100.js";
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.es101.js";
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,
@@ -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.es100.js";
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,
@@ -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.es103.js";
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
  {
@@ -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.es120.js";
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({
@@ -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.es120.js";
10
- import { interpolateUrl as Q } from "./index.es134.js";
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),
@@ -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.es97.js";
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(
@@ -1,4 +1,4 @@
1
- import { StepperProvider as p, StepGroup as m } from "./index.es112.js";
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";
@@ -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.es136.js";
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
  {
@@ -1,67 +1,69 @@
1
- import k, { useRef as c, useState as y, useEffect as f } from "react";
2
- import { createRoot as I } from "./index.es115.js";
3
- import { ImageEditorModal as w } from "./index.es116.js";
4
- import { notifyNativeImageEditorState as m } from "./index.es117.js";
5
- import U from "./index.es118.js";
6
- function A(u) {
7
- const s = c(u);
8
- s.current = u;
9
- const n = c(null), [p, v] = y(null), [d, g] = y(!1);
10
- if (!n.current && typeof window < "u") {
11
- const e = s.current;
12
- n.current = U.create({
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 (t, o) => {
16
- const a = s.current;
17
- if (a.onAssetUpload) {
18
- const R = t.type === "image/jpeg" ? "jpg" : "png", E = new File([t.blob], `edit.${R}`, {
19
- type: t.type
20
- }), b = await a.onAssetUpload(E);
21
- a.onSave({ ...t, ...b }, o);
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
- a.onSave(t, o);
24
+ l.onSave(n, c);
25
25
  },
26
- onUiChange: v
26
+ onUiChange: S
27
27
  });
28
28
  }
29
- f(() => {
30
- const e = n.current;
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 t = () => {
33
- g(!0), m(!0);
34
- }, o = () => {
35
- g(!1), m(!1);
34
+ const n = () => {
35
+ y(!0), d(!0);
36
+ }, c = () => {
37
+ y(!1), d(!1);
36
38
  };
37
- return e.on("open", t), e.on("close", o), () => {
38
- e.off("open", t), e.off("close", o), m(!1), e.destroy();
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 l = (u.stickers ?? []).join(" "), S = c(null);
42
- f(() => {
43
- const e = n.current;
44
- !e || S.current === l || (S.current = l, e.setStickers(u.stickers ?? []));
45
- }, [l]);
46
- const i = c(null), r = c(null);
47
- return f(() => () => {
48
- i.current?.unmount(), r.current?.remove(), i.current = null, r.current = null;
49
- }, []), f(() => {
50
- const e = n.current;
51
- e && (r.current || (r.current = document.createElement("div"), document.body.appendChild(r.current), i.current = I(r.current)), i.current.render(
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
- w,
55
+ I,
54
56
  {
55
57
  engine: e,
56
- ui: p,
57
- isOpen: d,
58
- saveLabel: s.current.saveLabel || "Save"
58
+ ui: m,
59
+ isOpen: p,
60
+ saveLabel: a.current.saveLabel || "Save"
59
61
  }
60
62
  )
61
63
  ));
62
- }, [p, d]), n.current;
64
+ }, [m, p]), t.current;
63
65
  }
64
66
  export {
65
- A as useImageEditor
67
+ x as useImageEditor
66
68
  };
67
69
  //# sourceMappingURL=index.es45.js.map