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
@@ -1,118 +1,14 @@
1
- import { Typography as m } from "./index.es19.js";
2
- import { Spinner as v } from "./index.es64.js";
3
- import { Upload as A, X as $, Pen as x } from "lucide-react";
4
- import e, { useState as M, useRef as P } from "react";
5
- import { useFormValues as R } from "./index.es160.js";
6
- import { useToast as T } from "./index.es87.js";
7
- const L = ({
8
- id: f,
9
- onChange: o,
10
- value: l = [],
11
- accept: h = "image/*",
12
- error: d,
13
- maxImages: r = 20
14
- }) => {
15
- const { onAssetUpload: g, onToggleImageEditor: p } = R(), { toast: s } = T(), [a, u] = M(!1), c = P(null), y = async (i) => {
16
- const t = i.target.files;
17
- if (!(!t?.length || a)) {
18
- if (l.length + t.length > r) {
19
- s({
20
- title: "Alert!",
21
- description: `Maximum ${r} images allowed.`,
22
- icon: "warning"
23
- });
24
- return;
25
- }
26
- if (g) {
27
- u(!0);
28
- try {
29
- const n = Array.from(t).map((k) => g(k)), w = await Promise.all(n);
30
- o([...l, ...w]), s({
31
- title: "Alert!",
32
- description: `${t.length} ${t.length === 1 ? "image" : "images"} uploaded successfully.`,
33
- icon: "success"
34
- });
35
- } catch {
36
- s({
37
- title: "Alert!",
38
- description: "Error uploading images",
39
- icon: "warning"
40
- });
41
- } finally {
42
- u(!1), c.current && (c.current.value = "");
43
- }
44
- }
45
- }
46
- }, b = () => {
47
- !a && l.length < r ? c.current?.click() : l.length >= r && s({
48
- title: "Alert!",
49
- description: `Maximum ${r} images allowed.`,
50
- icon: "warning"
51
- });
52
- }, E = (i) => {
53
- if (!a) {
54
- const t = [...l];
55
- t.splice(i, 1), o(t);
56
- }
57
- };
58
- function N(i, t) {
59
- const n = [...l];
60
- n.splice(t, 1, i), o(n);
1
+ import { Typography as t } from "./index.es19.js";
2
+ import * as e from "react";
3
+ const i = () => /* @__PURE__ */ e.createElement("div", { className: "flex flex-col items-center justify-center h-full max-w-80" }, /* @__PURE__ */ e.createElement(
4
+ "img",
5
+ {
6
+ src: "https://frontend-static-files.geoiq.io/strapi/notification_empty_state_d1614ba3d3/notification_empty_state_d1614ba3d3.svg",
7
+ alt: "empty-state",
8
+ className: "h-[150px] w-[150px]"
61
9
  }
62
- return /* @__PURE__ */ e.createElement("div", { className: "relative" }, a && /* @__PURE__ */ e.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-white bg-opacity-70" }, /* @__PURE__ */ e.createElement(v, { 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(
63
- "button",
64
- {
65
- className: "w-full",
66
- onClick: b,
67
- type: "button",
68
- disabled: a || l.length >= r
69
- },
70
- /* @__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(A, { className: "w-6 h-6 text-gray-500" })), /* @__PURE__ */ e.createElement(m, { variant: "body1", className: "text-gray-600" }, a ? "Uploading..." : l.length >= r ? `Maximum ${r} images reached` : "Add Images"), l.length > 0 && /* @__PURE__ */ e.createElement(m, { variant: "body1", className: "text-gray-500" }, l.length, " of ", r, " images"))
71
- ), /* @__PURE__ */ e.createElement(
72
- "input",
73
- {
74
- ref: c,
75
- id: `${f}-gallery`,
76
- type: "file",
77
- accept: h,
78
- disabled: a || l.length >= r,
79
- onChange: y,
80
- className: "hidden",
81
- multiple: !0
82
- }
83
- ), d && /* @__PURE__ */ e.createElement(m, { variant: "body1", className: "mt-1 text-danger-1" }, d)), l.length > 0 && /* @__PURE__ */ e.createElement("div", { className: "grid grid-cols-2 gap-4 mt-4 sm:grid-cols-3 md:grid-cols-4" }, l.map((i, t) => /* @__PURE__ */ e.createElement("div", { key: t, className: "relative flex rounded" }, /* @__PURE__ */ e.createElement(
84
- "img",
85
- {
86
- src: i.public_url,
87
- alt: `Preview ${t + 1}`,
88
- className: "object-cover w-full h-24 rounded"
89
- }
90
- ), /* @__PURE__ */ e.createElement(
91
- "button",
92
- {
93
- onClick: () => E(t),
94
- className: "absolute p-1 text-white bg-white rounded-full right-2 top-2 opacity-70 hover:opacity-100",
95
- type: "button",
96
- disabled: a
97
- },
98
- /* @__PURE__ */ e.createElement($, { size: 16, className: "stroke-danger" })
99
- ), p && /* @__PURE__ */ e.createElement(
100
- "button",
101
- {
102
- type: "button",
103
- onClick: (n) => {
104
- n.currentTarget.blur(), p({
105
- imageUrl: i.public_url,
106
- index: t,
107
- onReplaceImage: N
108
- });
109
- },
110
- className: "absolute p-1 text-white bg-white rounded-full left-2 top-2 opacity-70 hover:opacity-100"
111
- },
112
- /* @__PURE__ */ e.createElement(x, { size: 16, className: "stroke-danger" })
113
- )))));
114
- };
10
+ ), /* @__PURE__ */ e.createElement("div", { className: "flex flex-col items-center justify-center gap-1" }, /* @__PURE__ */ e.createElement(t, { variant: "body1", className: "text-light-1" }, "No new notifications for now!"), /* @__PURE__ */ e.createElement(t, { variant: "body4", className: "text-center text-light-4" }, "Stay tuned for updates, and we'll keep you posted when something comes up!")));
115
11
  export {
116
- L as MultiImagePicker
12
+ i as default
117
13
  };
118
14
  //# sourceMappingURL=index.es175.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es175.js","sources":["../src/components/ui/form-renderer/components/form-fields/components/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 { Upload, X, Pen } from 'lucide-react'\nimport React, { useRef, useState } from 'react'\nimport { useFormValues } from '../../../../context/form-values'\nimport { AssetValue } from '../../../../form.types'\n\ninterface MultiImagePickerProps {\n id: string\n onChange: (data: AssetValue[]) => void\n value?: AssetValue[]\n accept?: string\n error?: string\n maxImages?: number\n}\n\nconst MultiImagePicker: React.FC<MultiImagePickerProps> = ({\n id,\n onChange,\n value = [],\n accept = 'image/*',\n error,\n maxImages = 20,\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 onChange([...value, ...results])\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 function onReplaceImage(data: AssetValue, index: number) {\n const newValue = [...value]\n newValue.splice(index, 1, 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={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 <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 {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 </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\nexport { MultiImagePicker }\n"],"names":["MultiImagePicker","id","onChange","value","accept","error","maxImages","onAssetUpload","onToggleImageEditor","useFormValues","toast","useToast","isLoading","setIsLoading","useState","fileInputRef","useRef","handleImageSelect","e","files","uploads","file","results","handleClick","removeImage","index","newImages","onReplaceImage","data","newValue","React","Spinner","Upload","Typography","image","X","Pen"],"mappings":"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"}
1
+ {"version":3,"file":"index.es175.js","sources":["../src/components/organisms/navbar/components/notification-panel/components/empty-state/empty-state.tsx"],"sourcesContent":["import { Typography } from '@/components/atoms/typography'\nimport { FC } from 'react'\nimport * as React from 'react'\n\nconst EmptyNotificationState: FC = () => {\n return (\n <div className=\"flex flex-col items-center justify-center h-full max-w-80\">\n <img\n src=\"https://frontend-static-files.geoiq.io/strapi/notification_empty_state_d1614ba3d3/notification_empty_state_d1614ba3d3.svg\"\n alt=\"empty-state\"\n className=\"h-[150px] w-[150px]\"\n />\n <div className=\"flex flex-col items-center justify-center gap-1\">\n <Typography variant=\"body1\" className=\"text-light-1\">\n No new notifications for now!\n </Typography>\n <Typography variant=\"body4\" className=\"text-center text-light-4\">\n Stay tuned for updates, and we&apos;ll keep you posted when something\n comes up!\n </Typography>\n </div>\n </div>\n )\n}\n\nexport default EmptyNotificationState\n"],"names":["EmptyNotificationState","React","Typography"],"mappings":";;AAIA,MAAMA,IAA6B,MAE/B,gBAAAC,EAAA,cAAC,OAAA,EAAI,WAAU,4DAAA,GACb,gBAAAA,EAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,KAAI;AAAA,IACJ,KAAI;AAAA,IACJ,WAAU;AAAA,EAAA;AAAA,mCAEX,OAAA,EAAI,WAAU,qDACb,gBAAAA,EAAA,cAACC,GAAA,EAAW,SAAQ,SAAQ,WAAU,kBAAe,+BAErD,mCACCA,GAAA,EAAW,SAAQ,SAAQ,WAAU,8BAA2B,4EAGjE,CACF,CACF;"}
@@ -1,112 +1,29 @@
1
- import { Video as v, X as w } from "lucide-react";
2
- import e, { useState as k, useRef as A } from "react";
3
- import { Typography as o } from "./index.es19.js";
4
- import { Spinner as $ } from "./index.es64.js";
5
- import { useFormValues as x } from "./index.es160.js";
6
- import { useToast as L } from "./index.es87.js";
7
- const z = ({
8
- id: u,
9
- onChange: c,
10
- value: t = [],
11
- accept: f = "video/*",
12
- error: d,
13
- maxVideos: l = 10
14
- }) => {
15
- const { onAssetUpload: m } = x(), { toast: i } = L(), [a, g] = k(!1), s = A(null), h = async (n) => {
16
- const r = n.target.files;
17
- if (!(!r?.length || a)) {
18
- if (t.length + r.length > l) {
19
- i({
20
- title: "Alert!",
21
- description: `Maximum ${l} videos allowed.`,
22
- icon: "warning"
23
- });
24
- return;
25
- }
26
- if (m) {
27
- g(!0);
28
- try {
29
- const p = Array.from(r).map((N) => m(N)), E = await Promise.all(p);
30
- c([...t, ...E]), i({
31
- title: "Alert!",
32
- description: `${r.length} ${r.length === 1 ? "video" : "videos"} uploaded successfully.`,
33
- icon: "success"
34
- });
35
- } catch {
36
- i({
37
- title: "Alert!",
38
- description: "Error uploading videos",
39
- icon: "warning"
40
- });
41
- } finally {
42
- g(!1), s.current && (s.current.value = "");
43
- }
44
- }
45
- }
46
- }, y = () => {
47
- !a && t.length < l ? s.current?.click() : t.length >= l && i({
48
- title: "Alert!",
49
- description: `Maximum ${l} videos allowed.`,
50
- icon: "warning"
51
- });
52
- }, b = (n) => {
53
- if (!a) {
54
- const r = [...t];
55
- r.splice(n, 1), c(r);
56
- }
57
- };
58
- return /* @__PURE__ */ e.createElement("div", { className: "relative" }, a && /* @__PURE__ */ e.createElement("div", { className: "absolute inset-0 z-10 flex items-center justify-center bg-white bg-opacity-70" }, /* @__PURE__ */ e.createElement($, { className: "w-12 h-12 animate-spin 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(
59
- "button",
1
+ import e from "react";
2
+ function t({ children: r }) {
3
+ return /* @__PURE__ */ e.createElement(
4
+ "svg",
60
5
  {
61
- className: "w-full",
62
- onClick: y,
63
- type: "button",
64
- disabled: a || t.length >= l
6
+ viewBox: "0 0 24 24",
7
+ fill: "none",
8
+ stroke: "currentColor",
9
+ strokeWidth: 1.6,
10
+ strokeLinecap: "round"
65
11
  },
66
- /* @__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(v, { className: "w-6 h-6 text-gray-500" })), /* @__PURE__ */ e.createElement(o, { variant: "body1", className: "text-gray-600" }, a ? "Uploading..." : t.length >= l ? `Maximum ${l} videos reached` : "Add Videos"), t.length > 0 && /* @__PURE__ */ e.createElement(o, { variant: "body1", className: "text-gray-500" }, t.length, " of ", l, " videos"))
67
- ), /* @__PURE__ */ e.createElement(
68
- "input",
69
- {
70
- ref: s,
71
- id: `${u}-gallery`,
72
- type: "file",
73
- accept: f,
74
- disabled: a || t.length >= l,
75
- onChange: h,
76
- className: "hidden",
77
- multiple: !0
78
- }
79
- ), d && /* @__PURE__ */ e.createElement(o, { variant: "body1", className: "mt-1 text-danger-1" }, d)), t.length > 0 && /* @__PURE__ */ e.createElement("div", { className: "grid grid-cols-2 gap-4 mt-4 sm:grid-cols-2 md:grid-cols-2" }, t.map((n, r) => /* @__PURE__ */ e.createElement("div", { key: r, className: "relative flex rounded" }, /* @__PURE__ */ e.createElement(
80
- "video",
81
- {
82
- src: n.public_url,
83
- className: "object-cover w-full h-32 rounded",
84
- controls: !0,
85
- controlsList: "nodownload",
86
- preload: "metadata"
87
- },
88
- /* @__PURE__ */ e.createElement(
89
- "track",
90
- {
91
- kind: "captions",
92
- label: "English captions",
93
- srcLang: "en",
94
- src: "",
95
- default: !0
96
- }
97
- )
98
- ), /* @__PURE__ */ e.createElement(
99
- "button",
100
- {
101
- onClick: () => b(r),
102
- className: "absolute p-1 text-white bg-white rounded-full right-2 top-2 opacity-70 hover:opacity-100",
103
- type: "button",
104
- disabled: a
105
- },
106
- /* @__PURE__ */ e.createElement(w, { size: 16, className: "stroke-danger" })
107
- )))));
12
+ r
13
+ );
14
+ }
15
+ const l = {
16
+ rect: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("rect", { x: "4", y: "5", width: "16", height: "14", rx: "1" })),
17
+ ellipse: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("ellipse", { cx: "12", cy: "12", rx: "9", ry: "6" })),
18
+ circle: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("circle", { cx: "12", cy: "12", r: "8" })),
19
+ line: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("path", { d: "M5 19L19 5" })),
20
+ dashedLine: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("path", { d: "M5 19L19 5", strokeDasharray: "4 3", strokeLinecap: "butt" })),
21
+ arrow: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("path", { d: "M5 19L19 5" }), /* @__PURE__ */ e.createElement("path", { d: "M19 5v7M19 5h-7" })),
22
+ dashedArrow: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("path", { d: "M5 19L19 5", strokeDasharray: "4 3", strokeLinecap: "butt" }), /* @__PURE__ */ e.createElement("path", { d: "M19 5v7M19 5h-7" })),
23
+ doubleArrow: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("path", { d: "M5 19L19 5" }), /* @__PURE__ */ e.createElement("path", { d: "M19 5v7M19 5h-7" }), /* @__PURE__ */ e.createElement("path", { d: "M5 19v-7M5 19h7" })),
24
+ dashedDoubleArrow: /* @__PURE__ */ e.createElement(t, null, /* @__PURE__ */ e.createElement("path", { d: "M5 19L19 5", strokeDasharray: "4 3", strokeLinecap: "butt" }), /* @__PURE__ */ e.createElement("path", { d: "M19 5v7M19 5h-7" }), /* @__PURE__ */ e.createElement("path", { d: "M5 19v-7M5 19h7" }))
108
25
  };
109
26
  export {
110
- z as MultiVideoPicker
27
+ l as ShapeIcons
111
28
  };
112
29
  //# sourceMappingURL=index.es176.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es176.js","sources":["../src/components/ui/form-renderer/components/form-fields/components/multi-video-picker/index.tsx"],"sourcesContent":["import { X, Video } from 'lucide-react'\nimport React, { useRef, useState } from 'react'\nimport { useFormValues } from '../../../../context/form-values'\nimport { AssetValue } from '../../../../form.types'\nimport { Typography } from '@/components/atoms/typography'\nimport { useToast } from '@/components/molecules/toast'\nimport { Spinner } from '@/components/unstyled/spinner'\n\ninterface MultiVideoPickerProps {\n id: string\n onChange: (data: AssetValue[]) => void\n value?: AssetValue[]\n accept?: string\n error?: string\n maxVideos?: number\n}\n\nconst MultiVideoPicker: React.FC<MultiVideoPickerProps> = ({\n id,\n onChange,\n value = [],\n accept = 'video/*',\n error,\n maxVideos = 10,\n}) => {\n const { onAssetUpload } = useFormValues()\n const { toast } = useToast()\n\n const [isLoading, setIsLoading] = useState(false)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n const handleVideoSelect = async (e: React.ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (!files?.length || isLoading) return\n\n if (value.length + files.length > maxVideos) {\n toast({\n title: 'Alert!',\n description: `Maximum ${maxVideos} videos 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 onChange([...value, ...results])\n\n toast({\n title: 'Alert!',\n description: `${files.length} ${files.length === 1 ? 'video' : 'videos'} uploaded successfully.`,\n icon: 'success',\n })\n } catch (error) {\n toast({\n title: 'Alert!',\n description: `Error uploading videos`,\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 < maxVideos) {\n fileInputRef.current?.click()\n } else if (value.length >= maxVideos) {\n toast({\n title: 'Alert!',\n description: `Maximum ${maxVideos} videos allowed.`,\n icon: 'warning',\n })\n }\n }\n\n const removeVideo = (index: number) => {\n if (!isLoading) {\n const newVideos = [...value]\n newVideos.splice(index, 1)\n onChange(newVideos)\n }\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-12 h-12 animate-spin text-primary-1\" />\n </div>\n )}\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 >= maxVideos}\n >\n <div className=\"flex flex-col items-center gap-3 text-center\">\n <div className=\"bg-gray-100 rounded-full\">\n <Video 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 >= maxVideos\n ? `Maximum ${maxVideos} videos reached`\n : 'Add Videos'}\n </Typography>\n {value.length > 0 && (\n <Typography variant=\"body1\" className=\"text-gray-500\">\n {value.length} of {maxVideos} videos\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 >= maxVideos}\n onChange={handleVideoSelect}\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-2 md:grid-cols-2\">\n {value.map((video, index) => (\n <div key={index} className=\"relative flex rounded\">\n <video\n src={video.public_url}\n className=\"object-cover w-full h-32 rounded\"\n controls={true}\n controlsList=\"nodownload\"\n preload=\"metadata\"\n >\n <track\n kind=\"captions\"\n label=\"English captions\"\n srcLang=\"en\"\n src=\"\"\n default\n />\n </video>\n <button\n onClick={() => removeVideo(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 ))}\n </div>\n )}\n </div>\n )\n}\n\nexport { MultiVideoPicker }\n"],"names":["MultiVideoPicker","id","onChange","value","accept","error","maxVideos","onAssetUpload","useFormValues","toast","useToast","isLoading","setIsLoading","useState","fileInputRef","useRef","handleVideoSelect","e","files","uploads","file","results","handleClick","removeVideo","index","newVideos","React","Spinner","Video","Typography","video","X"],"mappings":";;;;;;AAiBA,MAAMA,IAAoD,CAAC;AAAA,EACzD,IAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC,IAAQ,CAAA;AAAA,EACR,QAAAC,IAAS;AAAA,EACT,OAAAC;AAAA,EACA,WAAAC,IAAY;AACd,MAAM;AACJ,QAAM,EAAE,eAAAC,EAAA,IAAkBC,EAAA,GACpB,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,UAAIR,EAAM,SAASe,EAAM,SAASZ,GAAW;AAC3C,QAAAG,EAAM;AAAA,UACJ,OAAO;AAAA,UACP,aAAa,WAAWH,CAAS;AAAA,UACjC,MAAM;AAAA,QAAA,CACP;AACD;AAAA,MACF;AAEA,UAAIC,GAAe;AACjB,QAAAK,EAAa,EAAI;AAEjB,YAAI;AACF,gBAAMO,IAAU,MAAM,KAAKD,CAAK,EAAE,IAAI,CAACE,MAASb,EAAca,CAAI,CAAC,GAC7DC,IAAU,MAAM,QAAQ,IAAIF,CAAO;AAEzC,UAAAjB,EAAS,CAAC,GAAGC,GAAO,GAAGkB,CAAO,CAAC,GAE/BZ,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,GAEMQ,IAAc,MAAM;AACxB,IAAI,CAACX,KAAaR,EAAM,SAASG,IAC/BQ,EAAa,SAAS,MAAA,IACbX,EAAM,UAAUG,KACzBG,EAAM;AAAA,MACJ,OAAO;AAAA,MACP,aAAa,WAAWH,CAAS;AAAA,MACjC,MAAM;AAAA,IAAA,CACP;AAAA,EAEL,GAEMiB,IAAc,CAACC,MAAkB;AACrC,QAAI,CAACb,GAAW;AACd,YAAMc,IAAY,CAAC,GAAGtB,CAAK;AAC3B,MAAAsB,EAAU,OAAOD,GAAO,CAAC,GACzBtB,EAASuB,CAAS;AAAA,IACpB;AAAA,EACF;AAEA,yCACG,OAAA,EAAI,WAAU,cACZd,KACCe,gBAAAA,EAAA,cAAC,SAAI,WAAU,gFAAA,GACbA,gBAAAA,EAAA,cAACC,GAAA,EAAQ,WAAU,wCAAA,CAAwC,CAC7D,GAGFD,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,+EAAA,GACbA,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAU;AAAA,MACV,SAASJ;AAAA,MACT,MAAK;AAAA,MACL,UAAUX,KAAaR,EAAM,UAAUG;AAAA,IAAA;AAAA,IAEvCoB,gBAAAA,EAAA,cAAC,SAAI,WAAU,+CAAA,mCACZ,OAAA,EAAI,WAAU,8BACbA,gBAAAA,EAAA,cAACE,GAAA,EAAM,WAAU,wBAAA,CAAwB,CAC3C,GACAF,gBAAAA,EAAA,cAACG,GAAA,EAAW,SAAQ,SAAQ,WAAU,mBACnClB,IACG,iBACAR,EAAM,UAAUG,IACd,WAAWA,CAAS,oBACpB,YACR,GACCH,EAAM,SAAS,KACduB,gBAAAA,EAAA,cAACG,KAAW,SAAQ,SAAQ,WAAU,gBAAA,GACnC1B,EAAM,QAAO,QAAKG,GAAU,SAC/B,CAEJ;AAAA,EAAA,GAEFoB,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKZ;AAAA,MACL,IAAI,GAAGb,CAAE;AAAA,MACT,MAAK;AAAA,MACL,QAAAG;AAAA,MACA,UAAUO,KAAaR,EAAM,UAAUG;AAAA,MACvC,UAAUU;AAAA,MACV,WAAU;AAAA,MACV,UAAQ;AAAA,IAAA;AAAA,EAAA,GAGTX,KACCqB,gBAAAA,EAAA,cAACG,GAAA,EAAW,SAAQ,SAAQ,WAAU,qBAAA,GACnCxB,CACH,CAEJ,GAECF,EAAM,SAAS,KACduB,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,4DAAA,GACZvB,EAAM,IAAI,CAAC2B,GAAON,MACjBE,gBAAAA,EAAA,cAAC,OAAA,EAAI,KAAKF,GAAO,WAAU,wBAAA,GACzBE,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKI,EAAM;AAAA,MACX,WAAU;AAAA,MACV,UAAU;AAAA,MACV,cAAa;AAAA,MACb,SAAQ;AAAA,IAAA;AAAA,IAERJ,gBAAAA,EAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,SAAQ;AAAA,QACR,KAAI;AAAA,QACJ,SAAO;AAAA,MAAA;AAAA,IAAA;AAAA,EACT,GAEFA,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS,MAAMH,EAAYC,CAAK;AAAA,MAChC,WAAU;AAAA,MACV,MAAK;AAAA,MACL,UAAUb;AAAA,IAAA;AAAA,IAEVe,gBAAAA,EAAA,cAACK,GAAA,EAAE,MAAM,IAAI,WAAU,gBAAA,CAAgB;AAAA,EAAA,CAE3C,CACD,CACH,CAEJ;AAEJ;"}
1
+ {"version":3,"file":"index.es176.js","sources":["../src/components/organisms/image-editor/components/shape-icons.tsx"],"sourcesContent":["import React from 'react'\n\nfunction Icon({ children }: { children: React.ReactNode }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={1.6}\n strokeLinecap=\"round\"\n >\n {children}\n </svg>\n )\n}\n\nexport const ShapeIcons: Record<string, React.ReactNode> = {\n rect: (\n <Icon>\n <rect x=\"4\" y=\"5\" width=\"16\" height=\"14\" rx=\"1\" />\n </Icon>\n ),\n ellipse: (\n <Icon>\n <ellipse cx=\"12\" cy=\"12\" rx=\"9\" ry=\"6\" />\n </Icon>\n ),\n circle: (\n <Icon>\n <circle cx=\"12\" cy=\"12\" r=\"8\" />\n </Icon>\n ),\n line: (\n <Icon>\n <path d=\"M5 19L19 5\" />\n </Icon>\n ),\n dashedLine: (\n <Icon>\n <path d=\"M5 19L19 5\" strokeDasharray=\"4 3\" strokeLinecap=\"butt\" />\n </Icon>\n ),\n arrow: (\n <Icon>\n <path d=\"M5 19L19 5\" />\n <path d=\"M19 5v7M19 5h-7\" />\n </Icon>\n ),\n dashedArrow: (\n <Icon>\n <path d=\"M5 19L19 5\" strokeDasharray=\"4 3\" strokeLinecap=\"butt\" />\n <path d=\"M19 5v7M19 5h-7\" />\n </Icon>\n ),\n doubleArrow: (\n <Icon>\n <path d=\"M5 19L19 5\" />\n <path d=\"M19 5v7M19 5h-7\" />\n <path d=\"M5 19v-7M5 19h7\" />\n </Icon>\n ),\n dashedDoubleArrow: (\n <Icon>\n <path d=\"M5 19L19 5\" strokeDasharray=\"4 3\" strokeLinecap=\"butt\" />\n <path d=\"M19 5v7M19 5h-7\" />\n <path d=\"M5 19v-7M5 19h7\" />\n </Icon>\n ),\n}\n"],"names":["Icon","children","React","ShapeIcons"],"mappings":";AAEA,SAASA,EAAK,EAAE,UAAAC,KAA2C;AACzD,SACEC,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAa;AAAA,MACb,eAAc;AAAA,IAAA;AAAA,IAEbD;AAAA,EAAA;AAGP;AAEO,MAAME,IAA8C;AAAA,EACzD,MACED,gBAAAA,EAAA,cAACF,GAAA,MACCE,gBAAAA,EAAA,cAAC,UAAK,GAAE,KAAI,GAAE,KAAI,OAAM,MAAK,QAAO,MAAK,IAAG,KAAI,CAClD;AAAA,EAEF,SACEA,gBAAAA,EAAA,cAACF,GAAA,MACCE,gBAAAA,EAAA,cAAC,WAAA,EAAQ,IAAG,MAAK,IAAG,MAAK,IAAG,KAAI,IAAG,KAAI,CACzC;AAAA,EAEF,QACEA,gBAAAA,EAAA,cAACF,GAAA,MACCE,gBAAAA,EAAA,cAAC,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,IAAA,CAAI,CAChC;AAAA,EAEF,MACEA,gBAAAA,EAAA,cAACF,GAAA,sCACE,QAAA,EAAK,GAAE,cAAa,CACvB;AAAA,EAEF,YACEE,gBAAAA,EAAA,cAACF,GAAA,MACCE,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,cAAa,iBAAgB,OAAM,eAAc,OAAA,CAAO,CAClE;AAAA,EAEF,OACEA,gBAAAA,EAAA,cAACF,GAAA,MACCE,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,aAAA,CAAa,GACrBA,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,kBAAA,CAAkB,CAC5B;AAAA,EAEF,aACEA,gBAAAA,EAAA,cAACF,GAAA,MACCE,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,cAAa,iBAAgB,OAAM,eAAc,QAAO,GAChEA,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,mBAAkB,CAC5B;AAAA,EAEF,aACEA,gBAAAA,EAAA,cAACF,GAAA,MACCE,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,aAAA,CAAa,GACrBA,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,kBAAA,CAAkB,mCACzB,QAAA,EAAK,GAAE,mBAAkB,CAC5B;AAAA,EAEF,mDACGF,GAAA,MACCE,gBAAAA,EAAA,cAAC,UAAK,GAAE,cAAa,iBAAgB,OAAM,eAAc,QAAO,GAChEA,gBAAAA,EAAA,cAAC,UAAK,GAAE,kBAAA,CAAkB,GAC1BA,gBAAAA,EAAA,cAAC,QAAA,EAAK,GAAE,kBAAA,CAAkB,CAC5B;AAEJ;"}
@@ -1,90 +1,27 @@
1
1
  import t from "react";
2
- import { Typography as u } from "./index.es19.js";
3
- import { Button as p } from "./index.es9.js";
4
- import { FormField as x } from "./index.es170.js";
5
- import { Plus as E } from "lucide-react";
6
- import { useFormValues as v } from "./index.es160.js";
7
- const R = ({ field: n }) => {
8
- const { values: i, setValue: h, setFormValues: y } = v(), m = (() => {
9
- const r = [], s = `${n.id}||`, o = /* @__PURE__ */ new Set();
10
- Object.keys(i).forEach((e) => {
11
- if (e.startsWith(s)) {
12
- const a = e.match(new RegExp(`^${n.id}\\|\\|(\\d+)\\|\\|`));
13
- a && a[1] && o.add(parseInt(a[1]));
14
- }
15
- });
16
- const l = Array.from(o).sort((e, a) => e - a);
17
- for (const e of l) {
18
- const a = {};
19
- for (const c of n.options) {
20
- const d = `${n.id}||${e}||${c.id}`;
21
- d in i && (a[c.id] = i[d]);
22
- }
23
- r.push(a);
24
- }
25
- return r;
26
- })(), f = () => {
27
- const r = m.length;
28
- n.options.forEach((s) => {
29
- h(`${n.id}||${r}||${s.id}`, void 0);
30
- });
31
- }, $ = (r) => {
32
- const s = { ...i }, o = `${n.id}||`;
33
- Object.keys(i).filter(
34
- (e) => e.startsWith(o)
35
- ).forEach((e) => {
36
- const a = e.match(new RegExp(`^${n.id}\\|\\|(\\d+)\\|\\|`));
37
- if (a && a[1]) {
38
- const c = parseInt(a[1]);
39
- if (c === r)
40
- delete s[e];
41
- else if (c > r) {
42
- const d = e.substring(
43
- e.indexOf("||", o.length)
44
- ), g = `${n.id}||${c - 1}${d}`;
45
- s[g] = i[e], delete s[e];
46
- }
47
- }
48
- }), y(s);
49
- };
50
- return /* @__PURE__ */ t.createElement("div", { className: "flex flex-col gap-4" }, m.length === 0 && /* @__PURE__ */ t.createElement("div", { className: "flex items-center justify-between" }, /* @__PURE__ */ t.createElement(u, { variant: "body1", className: "text-light-4" }, "No entry added yet."), /* @__PURE__ */ t.createElement(
51
- p,
2
+ import { SWATCHES as l } from "./index.es143.js";
3
+ function m({ value: r, onChange: a }) {
4
+ return /* @__PURE__ */ t.createElement("div", null, /* @__PURE__ */ t.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Color"), /* @__PURE__ */ t.createElement("div", { className: "flex items-center gap-2" }, /* @__PURE__ */ t.createElement(
5
+ "input",
52
6
  {
53
- size: "sm",
54
- prefixIcon: /* @__PURE__ */ t.createElement(E, { size: 20 }),
55
- variant: "secondary",
56
- onClick: f,
57
- className: "capitalize w-fit",
58
- title: "Add "
7
+ type: "color",
8
+ value: r,
9
+ onChange: (e) => a(e.target.value),
10
+ className: "h-[34px] w-10 cursor-pointer rounded-md border border-neutral-1 bg-white p-0.5"
59
11
  }
60
- )), m.map((r, s) => /* @__PURE__ */ t.createElement("div", { key: `${n.id}-entry-${s}` }, /* @__PURE__ */ t.createElement("div", { className: "flex items-center justify-between mb-3" }, /* @__PURE__ */ t.createElement(u, { variant: "body2", className: "text-light-4" }, "Entry ", s + 1), /* @__PURE__ */ t.createElement(
61
- p,
62
- {
63
- size: "sm",
64
- variant: "link-secondary",
65
- onClick: () => $(s),
66
- className: "w-fit text-danger-1"
67
- },
68
- "Remove"
69
- )), /* @__PURE__ */ t.createElement("div", { className: "flex flex-col gap-3" }, n.options.map((o) => {
70
- const l = `${n.id}||${s}||${o.id}`, e = {
71
- ...o,
72
- id: l
73
- };
74
- return /* @__PURE__ */ t.createElement(x, { key: l, field: e });
75
- })))), m.length ? /* @__PURE__ */ t.createElement("div", { className: "flex justify-end" }, /* @__PURE__ */ t.createElement(
76
- p,
12
+ ), /* @__PURE__ */ t.createElement("span", { className: "text-xs text-light-4" }, r)), /* @__PURE__ */ t.createElement("div", { className: "mt-2 flex flex-wrap gap-1.5" }, l.map((e) => /* @__PURE__ */ t.createElement(
13
+ "button",
77
14
  {
78
- size: "sm",
79
- prefixIcon: /* @__PURE__ */ t.createElement(E, { size: 20 }),
80
- variant: "secondary",
81
- onClick: f,
82
- className: "mt-2 capitalize w-fit",
83
- title: `Add more ${n.name}`
15
+ key: e,
16
+ type: "button",
17
+ "aria-label": e,
18
+ onClick: () => a(e),
19
+ className: `h-[26px] w-[26px] rounded-md border-2 hover:border-light-2 ${r.toLowerCase() === e.toLowerCase() ? "border-rest-p1" : "border-transparent"}`,
20
+ style: { backgroundColor: e }
84
21
  }
85
- )) : null);
86
- };
22
+ ))));
23
+ }
87
24
  export {
88
- R as RepeatableGroup
25
+ m as ColorPicker
89
26
  };
90
27
  //# sourceMappingURL=index.es177.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es177.js","sources":["../src/components/ui/form-renderer/components/form-fields/components/repeatable-group/index.tsx"],"sourcesContent":["// components/form-fields/RepeatableGroup.tsx\nimport React from 'react'\nimport { Typography } from '@/components/atoms/typography'\nimport { Button } from '@/components/atoms/button'\n\nimport { FormField } from '../../index' // Import your existing FormField component\nimport { useFormValues } from '../../../../context/form-values'\nimport { FormValues, RepeatableGroupField } from '../../../../form.types'\nimport { Plus } from 'lucide-react'\n\ninterface FormFieldProps {\n field: RepeatableGroupField\n}\n\nexport const RepeatableGroup: React.FC<FormFieldProps> = ({ field }) => {\n const { values, setValue, setFormValues } = useFormValues()\n\n // Get all entries for this repeatable group\n const getEntries = () => {\n const entries: FormValues[] = []\n const prefix = `${field.id}||`\n\n // Find all entry indices in one pass\n const entryIndices = new Set<number>()\n Object.keys(values).forEach((key) => {\n if (key.startsWith(prefix)) {\n const match = key.match(new RegExp(`^${field.id}\\\\|\\\\|(\\\\d+)\\\\|\\\\|`))\n if (match && match[1]) {\n entryIndices.add(parseInt(match[1]))\n }\n }\n })\n\n // Sort indices numerically\n const sortedIndices = Array.from(entryIndices).sort((a, b) => a - b)\n\n // Build entry objects\n for (const index of sortedIndices) {\n const entryObject: FormValues = {}\n\n // Collect all subfields for this entry\n for (const subField of field.options) {\n const key = `${field.id}||${index}||${subField.id}`\n if (key in values) {\n entryObject[subField.id] = values[key]\n }\n }\n\n entries.push(entryObject)\n }\n\n return entries\n }\n\n const entries = getEntries()\n\n const handleAddEntry = () => {\n const newIndex = entries.length\n // Initialize new entry by setting values for each subfield\n field.options.forEach((subField) => {\n setValue(`${field.id}||${newIndex}||${subField.id}`, undefined)\n })\n }\n\n const handleRemoveEntry = (indexToRemove: number) => {\n const newValues = { ...values }\n\n // Step 1: Find all keys associated with all entries of this repeatable group\n const groupPrefix = `${field.id}||`\n const allGroupKeys = Object.keys(values).filter((key) =>\n key.startsWith(groupPrefix)\n )\n\n // Step 2: Process each key - either remove it or reindex it\n allGroupKeys.forEach((key) => {\n // Extract entry index from the key\n const match = key.match(new RegExp(`^${field.id}\\\\|\\\\|(\\\\d+)\\\\|\\\\|`))\n if (match && match[1]) {\n const entryIndex = parseInt(match[1])\n\n if (entryIndex === indexToRemove) {\n // Delete keys for the entry being removed\n delete newValues[key]\n } else if (entryIndex > indexToRemove) {\n // Reindex entries that come after the removed one\n const remainingPart = key.substring(\n key.indexOf('||', groupPrefix.length)\n )\n\n const newKey = `${field.id}||${entryIndex - 1}${remainingPart}`\n\n // Copy the value to the new index\n newValues[newKey] = values[key]\n\n // Remove the old key\n delete newValues[key]\n }\n }\n })\n\n // Update form values with a single call\n setFormValues(newValues)\n }\n\n // Rest of your component remains largely the same\n return (\n <div className=\"flex flex-col gap-4\">\n {entries.length === 0 && (\n <div className=\"flex items-center justify-between\">\n <Typography variant={'body1'} className=\"text-light-4\">\n No entry added yet.\n </Typography>\n <Button\n size=\"sm\"\n prefixIcon={<Plus size={20} />}\n variant=\"secondary\"\n onClick={handleAddEntry}\n className=\"capitalize w-fit\"\n title={`Add `}\n />\n </div>\n )}\n\n {entries.map((_, entryIndex) => (\n <div key={`${field.id}-entry-${entryIndex}`}>\n <div className=\"flex items-center justify-between mb-3\">\n <Typography variant=\"body2\" className=\"text-light-4\">\n Entry {entryIndex + 1}\n </Typography>\n <Button\n size=\"sm\"\n variant=\"link-secondary\"\n onClick={() => handleRemoveEntry(entryIndex)}\n className=\"w-fit text-danger-1\"\n >\n Remove\n </Button>\n </div>\n\n <div className=\"flex flex-col gap-3\">\n {field.options.map((subField) => {\n const uniqueId = `${field.id}||${entryIndex}||${subField.id}`\n const modifiedField = {\n ...subField,\n id: uniqueId,\n }\n return <FormField key={uniqueId} field={modifiedField} />\n })}\n </div>\n </div>\n ))}\n {entries.length ? (\n <div className=\"flex justify-end\">\n <Button\n size=\"sm\"\n prefixIcon={<Plus size={20} />}\n variant=\"secondary\"\n onClick={handleAddEntry}\n className=\"mt-2 capitalize w-fit\"\n title={`Add more ${field.name}`}\n />\n </div>\n ) : null}\n </div>\n )\n}\n"],"names":["RepeatableGroup","field","values","setValue","setFormValues","useFormValues","entries","prefix","entryIndices","key","match","sortedIndices","a","b","index","entryObject","subField","handleAddEntry","newIndex","handleRemoveEntry","indexToRemove","newValues","groupPrefix","entryIndex","remainingPart","newKey","React","Typography","Button","Plus","_","uniqueId","modifiedField","FormField"],"mappings":"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"}
1
+ {"version":3,"file":"index.es177.js","sources":["../src/components/organisms/image-editor/components/color-picker.tsx"],"sourcesContent":["import React from 'react'\n\nimport { SWATCHES } from '../picture-studio-engine'\n\ninterface ColorPickerProps {\n value: string\n onChange: (color: string) => void\n}\n\nexport function ColorPicker({ value, onChange }: ColorPickerProps) {\n return (\n <div>\n <span className=\"mb-1 block text-xs text-light-4\">Color</span>\n <div className=\"flex items-center gap-2\">\n <input\n type=\"color\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n className=\"h-[34px] w-10 cursor-pointer rounded-md border border-neutral-1 bg-white p-0.5\"\n />\n <span className=\"text-xs text-light-4\">{value}</span>\n </div>\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {SWATCHES.map((color) => (\n <button\n key={color}\n type=\"button\"\n aria-label={color}\n onClick={() => onChange(color)}\n className={`h-[26px] w-[26px] rounded-md border-2 hover:border-light-2 ${\n value.toLowerCase() === color.toLowerCase()\n ? 'border-rest-p1'\n : 'border-transparent'\n }`}\n style={{ backgroundColor: color }}\n />\n ))}\n </div>\n </div>\n )\n}\n"],"names":["ColorPicker","value","onChange","React","SWATCHES","color"],"mappings":";;AASO,SAASA,EAAY,EAAE,OAAAC,GAAO,UAAAC,KAA8B;AACjE,SACEC,gBAAAA,EAAA,cAAC,OAAA,MACCA,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,kCAAA,GAAkC,OAAK,GACvDA,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,6BACbA,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,OAAAF;AAAA,MACA,UAAU,CAAC,MAAMC,EAAS,EAAE,OAAO,KAAK;AAAA,MACxC,WAAU;AAAA,IAAA;AAAA,EAAA,GAEZC,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,0BAAwBF,CAAM,CAChD,GACAE,gBAAAA,EAAA,cAAC,SAAI,WAAU,8BAAA,GACZC,EAAS,IAAI,CAACC,MACbF,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKE;AAAA,MACL,MAAK;AAAA,MACL,cAAYA;AAAA,MACZ,SAAS,MAAMH,EAASG,CAAK;AAAA,MAC7B,WAAW,8DACTJ,EAAM,YAAA,MAAkBI,EAAM,YAAA,IAC1B,mBACA,oBACN;AAAA,MACA,OAAO,EAAE,iBAAiBA,EAAA;AAAA,IAAM;AAAA,EAAA,CAEnC,CACH,CACF;AAEJ;"}